/system/class_modul_votings_answer.php

Als eine der beiden Model-Beans wird eine einzelne Antwort einer Umfrage in Form der Klasse class_modul_votings_answer repräsentiert.


modul_votings_answer extends class_model implements interface_model {
private $strText = "";
private $intHits = 0;
public function __construct($strSystemid = "") {
$arrModul = array();
$arrModul["name"] = "modul_votings";
$arrModul["author"] = "sidler @ mulchprod.de";
$arrModul["moduleId"] = _votings_modul_id_;
$arrModul["modul"] = "votings";
$arrModul["table"] = _dbprefix_."votings_answer";
parent::__construct($arrModul, $strSystemid);

if($strSystemid != "")
$this->initObject();
}


Wie bereits vom Installer bekannt, werden im Konstruktor lediglich Meta-Informationen gesetzt. Größtenteils sind diese optional, sollte aber aus dokumentatorischen Zwecken gesetzt werden.
Zusätzlich wird bei übergebener systemid das Initialisieren des Objektes veranlasst.


protected function getObjectTables() {
return array(_dbprefix_."votings_answer" => "votings_answer_id");
}


Die Methode getObjectTables() liefert die Tabelle(n) samt Primärschlüssel(n), in der das Objekt persistiert wird. Gibt es beim Speichern des Objektes in der entsprechenden Tabelle noch keinen Eintrag, dann wird vom Framework automatisch ein leerer Datensatz angelegt. Danach wird die Update-Funktion des Objektes aufgerufen. Das hat den Vorteil, dass bei der Entwicklung des Beans lediglich das Update-Verhalten implementiert werden muss. Das von Datenbanken bekannte „insert“ wird vom Framework automatisch durchgeführt. Siehe hierzu auch

protected function getObjectDescription() {
return "voting answer ".$this->getStrText();
}


Die Objekt-Beschreibung wird ebenfalls nur zu Dokumentationszwecken verwendet, u.A. in den Logfiles des Frameworks.


public function initObject() {
$strQuery = "SELECT * FROM ".$this->arrModule["table"]."
WHERE votings_answer_id = '".dbsafeString($this->getSystemid())."'";
$arrRow = $this->objDB->getRow($strQuery);
$this->setStrText($arrRow["votings_answer_text"]);
$this->setIntHits($arrRow["votings_answer_hits"]);
}


Wie unschwer zu erraten, sorgt initObject() für die Initialisierung des Objektes. Es wird also der aktuelle Stand aus der Datenbank geladen, die Werte werden den einzelnen Properties zugewiesen.


protected function updateStateToDb() {
class_logger::getInstance()->addLogRow("updated votings answer ".$this->getSystemid(),class_logger::$levelInfo);

$strQuery = "UPDATE ".$this->arrModule["table"]."
SET votings_answer_text = '".dbsafeString($this->getStrText())."',
votings_answer_hits = ".dbsafeString((int)$this->getIntHits())."
WHERE votings_answer_id = '".dbsafeString($this->getSystemid())."'";
return $this->objDB->_query($strQuery);
}


Wie bereits im Vorfeld erwähnt, kennen Kajona Model-Beans lediglich ein Update-Verhalten. Wird ein Update des Status von extern veranlasst, so ruft das Framework die Methode updateStateToDb() des Beans auf, welche den aktuellen Status auf die Datenbank synchronisiert.
Siehe hierzu auch

public function deleteAnswer() {
class_logger::getInstance()->addLogRow("deleted answer ".$this->getObjectDescription(), class_logger::$levelInfo);
$strQuery = "DELETE FROM ".$this->arrModule["table"]." WHERE votings_answer_id = '".dbsafeString($this->getSystemid())."'";

if($this->objDB->_query($strQuery)) {
if($this->deleteSystemRecord($this->getSystemid()))
return true;
}
return false;
}
[ ... Getters and Setter ... ]
}


Soll das Bean, hier also eine Antwort, gelöscht werden, dann sorgt hierfür die Methode deleteAnswer(). Das Bean muss hierbei lediglich die eigenen Daten löschen, die Einträge in den Systemtabellen werden durch den Aufruf von deleteSystemRecord() vom Framework gelöscht.