Warning: include_once(/var/www/html/pmwiki-2.2.86/cookbook/soap4pmwiki/soap4pmwiki.php): failed to open stream: No such file or directory in /var/www/html/fields/dbp09/local/config.php on line 4

Warning: include_once(): Failed opening '/var/www/html/pmwiki-2.2.86/cookbook/soap4pmwiki/soap4pmwiki.php' for inclusion (include_path='.:/opt/php/lib/php') in /var/www/html/fields/dbp09/local/config.php on line 4

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/fields/dbp09/local/config.php:4) in /var/www/html/pmwiki-2.2.86/pmwiki.php on line 1250
Datenbankpraktikum SS 2009 - Gruppe 1 - Web-NACHRICHTEN

Nachrichten

Das Nachrichtensystem gibt dem Spieler die Möglichkeit, Nachrichten mit anderen Spielern auszutauschen. Im Einzelnen kann man:

  • Nachrichten im Posteingang auflisten
  • einzelne Nachrichten lesen
  • auf eingegangene Nachrichten antworten
  • Rundmails an die Allianz verschicken
  • Nachrichten wieder löschen

Abb. 1: Schematischer Aufbau des Nachrichtensystems

Dabei entspricht jede dieser Aktionen einer Methode im WebMessageController, es gibt aber noch weitere Methoden, die keine eigene ActionView haben und nur von anderen Actions aufgerufen werden. So zeigt die /web_message/create ein Formular zum Erstellen einer Nachricht an, was dann an die Action deliver weitergegeben wird, die Fehlerbehandlung macht und die Nachricht ggf. schließlich mit der Backend-Methode BackendMessageController#send_message abschickt.

Die Controller-Methode create setzt lediglich einige Variablen, die für das Formular benötigt werden. Dazu wird auf das Array params zugegriffen, das alle Parameter enthält, die z.B. direkt in der URL oder von anderen Actions übergeben werden können. Diese Parameter werden in der Instanz des Controllers zwischengespeichert und stehen dann der View zur Verfügung. Die eigentliche Arbeit beginnt aber erst, wenn der Spieler das Formular abschickt.

def create
    @current_page = :news
    @recipient = params[:recipient]
    @type = params[:type]
    if  params[:subject]
      @subject = params[:subject]
    else 
      @subject = "kein Betreff"
    end
  end
view/web_message_controller/create

Das Eingabeformular für neue Nachrichten wird mit Rails-Mitteln und dem Modul ActionView::Helpers::FormHelper sehr einfach:

<h3>Neue Nachricht</h3>
<% @title = "Nachricht verfassen" %>
...
<% deliver_action = ( @type == "c" ) ? "deliver_circular" : "deliver" %>
<% form_tag :action => deliver_action do %>
<% unless @type == "c" %>
    <%= label :recipient, "Empfänger" %>
    <%= text_field_tag :recipient, @recipient %>
<% end %>
...
<p>
    <%= label :subject, "Betreff" %>
    <%= text_field_tag :subject, @subject %>
</p>
...
<p>
    <%= label :text, "Text" %>
    <%= text_area_tag :text, "Hier könnte ihr Text stehen.", {:escape => false} %>
</p>
    <%= submit_tag "abschicken" %>
<% end %>
view/web_message/create.html.erb

Handelt es sich beim übergebenen Typ um "c", werden die eingegebenen Daten an die Methode deliver_circular weitergegeben, ansonsten an die Methode deliver. Aus der Allianz-Ansicht heraus können auf diese Weise Rundnachrichten verschickt werden.

def deliver
    @current_page = :news
    if (params[:subject].length < 3)
      flash[:error] = "Betreffzeile muss mindestens 3 Zeichen lang sein."
      render :action => "create"
    elsif ... #weitere mögliche Fehler
    else #Nachricht ist zulässig
      @recipient = User.find_by_name(params[:recipient])
      @error = @@bmc.send_message( current_user,
                                  @recipient,
                                  params[:subject],
                                  params[:text])
      if (@error == 0)
        flash[:notice] = "Nachricht erfolgreich versandt."
        if params[:source]
          redirect_to :controller => :source
        else
          redirect_to :action => "index"
        end
      else
        case(@error)
        ...
        when 1
        ...
        else
          flash[:error] =  "Senden der Nachricht lieferte unbekannten Fehler. "
        end
        render :action => "create"
      end
    end
  end
view/web_message/create.html.erb


Page last modified on August 24, 2009, at 11:27 AM