* * @copyright 2004 Stud.IP-Project * @access public * @package evaluation * */ class Evaluation extends EvaluationObject implements PrivacyObject { # Define all required variables ============================================= # /** * Startdate * @access private * @var integer $startdate */ var $startdate; /** * Stopdate * @access private * @var integer $stopdate */ var $stopdate; /** * Timespan * @access private * @var integer $timespan */ var $timespan; /** * Time of creation. Is set automatically. * @access private * @var integer $mkdate */ var $mkdate; /** * Time of last change. Is set automatically. * @access private * @var integer $chdate */ var $chdate; /** * Defines wheter the evaluation is anonymous * @access private * @var boolean $anonymous */ var $anonymous; /** * Defines whether the evaluation is visible * @access private * @var boolean $visible */ var $visible; /** * Defines whether the evaluation template is shared * @access private * @var boolean $shared */ var $shared; /** * Counts the number of connected ranges * @access private * @var integer $numberRanges */ var $numberRanges; /** * Counts the number of connected ranges * @access private * @var integer $rangeNum */ var $rangeNum; /** * Constructor * @access public * @param string $objectID The ID of an existing evaluation * @param object $parentObject The parent object if exists * @param integer $loadChildren See const EVAL_LOAD_*_CHILDREN */ public function __construct($objectID = "", $parentObject = null, $loadChildren = EVAL_LOAD_NO_CHILDREN) { parent::__construct($objectID, $parentObject, $loadChildren); $this->instanceof = INSTANCEOF_EVAL; $this->rangeID = []; $this->startdate = NULL; $this->stopdate = NULL; $this->timespan = NULL; $this->mkdate = time(); $this->chdate = time(); $this->anonymous = NO; $this->visible = NO; $this->shared = NO; $this->rangeNum = 0; $this->db = new EvaluationDB (); if ($this->db->isError()) { return $this->throwErrorFromClass($this->db); } $this->init($objectID); } /** * Sets the startdate * @access public * @param integer $startdate The startdate. * @throws error */ public function setStartdate($startdate) { if (!empty ($startdate)) { if (!empty ($this->stopdate) && $startdate > $this->stopdate) { return $this->throwError(1, _("Das Startdatum ist nach dem Stoppdatum.")); } if ($startdate <= 0) { return $this->throwError(1, _("Das Startdatum ist leider ungültig.")); } } $this->startdate = $startdate; } /** * Gets the startdate * @access public * @return integer The startdate */ public function getStartdate() { return $this->startdate; } /** * Sets the stopdate * @access public * @param integer $stopdate The stopdate. * @throws error */ public function setStopdate($stopdate) { if (!empty ($stopdate)) { if ($stopdate <= 0) return $this->throwError(1, _("Das Stoppdatum ist leider ungültig.")); if ($stopdate < $this->startdate) return $this->throwError(1, _("Das Stoppdatum ist vor dem Startdatum.")); if (!empty ($this->timespan)) $this->timespan = NULL; } $this->stopdate = $stopdate; } /** * Gets the stopdate * @access public * @return string The stopdate */ public function getStopdate() { return $this->stopdate; } /** * Gets the real stop date as a UNIX-timestamp (e.g. startdate + timespan) * @access public * @return integer The UNIX-timestamp with the real stopdate */ public function getRealStopdate() { $stopdate = $this->getStopdate(); if ($this->getTimespan() != NULL) $stopdate = $this->getStartdate() + $this->getTimespan(); return $stopdate; } /** * Sets the timespan * @access public * @param string $timespan The timespan. * @throws error */ public function setTimespan($timespan) { if (!empty ($timespan) && !empty ($this->stopdate)) $this->stopdate = NULL; $this->timespan = $timespan; } /** * Gets the timespan * @access public * @return string The timespan */ public function getTimespan() { return $this->timespan; } /** * Gets the creationdate * @access public * @return integer The creationdate */ public function getCreationdate() { return $this->mkdate; } /** * Gets the changedate * @access public * @return integer The changedate */ public function getChangedate() { return $this->chdate; } /** * Sets anonymous * @access public * @param string $anonymous The anonymous. * @throws error */ public function setAnonymous($anonymous) { $this->anonymous = $anonymous == YES ? YES : NO; } /** * Gets anonymous * @access public * @return string The anonymous */ public function isAnonymous() { return $this->anonymous == YES ? YES : NO; } /** * Sets visible * @access public * @param string $visible The visible. * @throws error */ public function setVisible($visible) { $this->visible = $visible == YES ? YES : NO; } /** * Gets visible * @access public * @return string The visible */ public function isVisible() { return $this->visible == YES ? YES : NO; } /** * Set shared for a public search * @access public * @param boolean $shared if true it is shared */ public function setShared($shared) { if ($shared == YES && $this->isTemplate() == NO) return $this->throwError(1, _("Nur ein Template kann freigegeben werden")); $this->shared = $shared == YES ? YES : NO; } /** * Is shared for a public search? * @access public * @return boolen true if it is shared template */ public function isShared() { return $this->shared == YES ? YES : NO; } /** * Is this evaluation a template? * @access public * @return boolen true if it is a template */ public function isTemplate() { return empty ($this->rangeID) ? YES : NO; } /** * Has a user used this evaluation? * @access public * @param string $userID Optional an user id * @return string YES if a user used this evaluation */ public function hasVoted($userID = "") { return $this->db->hasVoted($this->getObjectID(), $userID); } /** * Removes a range from the object (not from the DB!) * @access public * @param string $rangeID The range id */ public function removeRangeID($rangeID) { $temp = []; while ($oldRangeID = $this->getNextRangeID()) { if ($oldRangeID != $rangeID) { $temp[] = $oldRangeID; } } $this->rangeID = $temp; $this->numberRanges = count($temp); } /** * Removes all rangeIDs * @access public */ public function removeRangeIDs() { while ($this->getRangeID()) ; } /** * Adds a rangeID * @access public * @param string $rangeID The rangeID * @throws error */ public function addRangeID($rangeID) { $this->rangeID[] = $rangeID; $this->numberRanges++; } /** * Gets the first rangeID and removes it * @access public * @return string The first object */ public function getRangeID() { if ($this->numberRanges) $this->numberRanges--; return array_pop($this->rangeID); } /** * Gets the next rangeID * @access public * @return string The rangeID */ public function getNextRangeID() { if ($this->rangeNum >= $this->numberRanges) { $this->rangeNum = 0; return NULL; } return $this->rangeID[$this->rangeNum++]; } /** * Gets all the rangeIDs from the evaluation * @access public * @return array An array full of rangeIDs */ public function getRangeIDs() { return $this->rangeID; } /** * Gets the number of ranges * @access public * @return integer Number of ranges */ public function getNumberRanges() { return $this->numberRanges; } /** * Resets all answers for this evaluation * @access public */ public function resetAnswers() { // Für diesen Mist habe ich jetzt ca. 3 Stunden gebraucht :( $answers = $this->getSpecialChildobjects($this, INSTANCEOF_EVALANSWER); $number = count($answers); for ($i = 0; $i < $number; $i++) { $answer = &$answers[$i]; #while ($answer->getUserID ()); // delete users... $answer->db->resetVotes($answer); } } /** * Export available data of a given user into a storage object * (an instance of the StoredUserData class) for that user. * * @param StoredUserData $storage object to store data into */ public static function exportUserData(StoredUserData $storage) { $field_data = DBManager::get()->fetchAll("SELECT * FROM eval WHERE author_id = ?", [$storage->user_id]); if ($field_data) { $storage->addTabularData(_('Evaluation'), 'eval', $field_data); } $field_data = DBManager::get()->fetchAll("SELECT * FROM evalanswer_user WHERE user_id = ?", [$storage->user_id]); if ($field_data) { $storage->addTabularData(_('EvaluationAnswerUser'), 'evalanswer_user', $field_data); } $field_data = DBManager::get()->fetchAll("SELECT * FROM eval_group_template WHERE user_id = ?", [$storage->user_id]); if ($field_data) { $storage->addTabularData(_('EvaluationGroupTemplate'), 'eval_group_template', $field_data); } $field_data = DBManager::get()->fetchAll("SELECT * FROM eval_templates WHERE user_id = ?", [$storage->user_id]); if ($field_data) { $storage->addTabularData(_('EvaluationTemplates'), 'eval_templates', $field_data); } $field_data = DBManager::get()->fetchAll("SELECT * FROM eval_templates_user WHERE user_id = ?", [$storage->user_id]); if ($field_data) { $storage->addTabularData(_('EvaluationTemplatesUser'), 'eval_templates_user', $field_data); } $field_data = DBManager::get()->fetchAll("SELECT * FROM eval_user WHERE user_id = ?", [$storage->user_id]); if ($field_data) { $storage->addTabularData(_('EvaluationUser'), 'eval_user', $field_data); } } /** * Sets the creationdate * @access private * @param integer $creationdate The creationdate. * @throws error */ public function setCreationdate($creationdate) { $this->mkdate = $creationdate; } /** * Sets the changedate * @access private * @param integer $changedate The changedate. * @throws error */ public function setChangedate($changedate) { $this->chdate = $changedate; } /** * Checks if object is in a valid state * @access private */ public function check() { parent::check(); if (empty ($this->title)) { $this->throwError(1, _("Der Titel darf nicht leer sein.")); } if ($this->isTemplate() && $this->hasVoted()) { $this->throwError(2, _("Ungültiges Objekt: Bei einer Vorlage wurde abgestimmt.")); } if (!$this->isTemplate() && $this->isShared()) { $this->throwError(3, _("Ungültiges Objekt: Eine aktive Evaluation wurde freigegeben.")); } } }