name = "Veranstaltungen"; $this->objectsClass = "TicketEvent"; $this->allowedChildObjects = array("ticketevent"); $this->category = 0; $this->period = 1; $this->searchTerm = ""; $this->allowedProperties = array("name", "startDate", "visible"); $this->propertyLabels = array("Titel", "Datum", "veröffentlicht"); } /** @see CmsObject::load() */ //----------------------------------------------- function load($path=array()){ //----------------------------------------------- //load nothing if(sizeof($path) == 0){ return; } //load container settings $query = sprintf("SELECT * FROM bruckm_container WHERE container = %s AND user = %s", sqlstring(get_class($this)), sqlstring($_SESSION['user'])); $result = dbQuery($query); $line = mysqli_fetch_array($result, MYSQLI_ASSOC); $this->order = $line['order']; if(substr($line['property'], 0, 4) == "sort"){ $properties = explode(",", substr($line['property'], 5)); $this->property = $properties[0]; $this->category = $properties[1]; $this->period = $properties[2]; } else{ $this->searchTerm = substr($line['property'], 7); } //load only current event if(sizeof($path) > 1){ $this->childObjects = array(); $query = sprintf("SELECT id FROM bruckm_index WHERE class = %s AND id = %d", sqlstring($this->objectsClass), sqlnum($path[1])); $result = dbQuery($query); while($line = mysqli_fetch_array($result, MYSQLI_ASSOC)){ $this->childObjects[] = FlexiconFactory::instanceById($line['id'], $this); } } //load all events else if(sizeof($path) > 0 && $path[0] == $this->id){ $this->updateSortingSettings(); $this->childObjects = array(); if(!empty($this->searchTerm)){ $this->doSearchEvents(); } else{ $this->doLoadEvents(); } } //load event data if(sizeof($path) > 0 && $path[0] == $this->id){ array_shift($path); foreach($this->childObjects as $i=>$child){ $this->childObjects[$i]->load($path); } } #$this->sort(); } /** @see Container::install() */ //---------------------------------------------- function install(){ //---------------------------------------------- parent::install(); $query = sprintf("SELECT * FROM bruckm_container WHERE container = %s", sqlstring(get_class())); $result = dbQuery($query); if(mysql_num_rows($result) > 0){ return; } $query = sprintf("INSERT INTO bruckm_container (container, property, `order`) VALUES (%s, %s, %s)", sqlstring(get_class()), sqlstring("name"), sqlstring("ASC")); dbQuery($query); } /** @see Container::updateSortingSettings() */ //----------------------------------------------- function updateSortingSettings(){ //----------------------------------------------- $property = ""; $this->order = $_POST['order']; if(isset($_POST['container_submit'])){ $this->property = $_POST['property']; $this->category = $_POST['category']; $this->period = $_POST['period']; $this->searchTerm = ""; $property = "sort=".$this->property.",".$this->category.",".$this->period; } else if(isset($_POST['container_search'])){ $this->searchTerm = $_POST['searchTerm']; $property = "search=".$this->searchTerm; } if(!empty($property)){ $query = sprintf("INSERT INTO bruckm_container (container, user, property, `order`) VALUES (%s, %s, %s, %s) ON DUPLICATE KEY UPDATE property = %s, `order` = %s", sqlstring(get_class($this)), sqlstring($_SESSION['user']), sqlstring($property), sqlstring($this->order), sqlstring($property), sqlstring($this->order)); dbQuery($query); } } /** @see CmsObject::printContent(); */ //----------------------------------------------- function printContent(){ //----------------------------------------------- $out = $this->doPrintErrors(); $out .= $this->doPrintMetadata(); $categories = array(); $out .= $this->doPrintInsertBar(0); if(!empty($this->searchTerm)){ $out .= $this->doPrintSearchResults(); } else{ $out .= $this->doPrintEventList(); } $out .= $this->doPrintInsertBar(0); return $out; } /** @see CmsObject:doPrintMetadata() */ //----------------------------------------------- function doPrintMetadata(){ //----------------------------------------------- $t = new Template(CMS_TEMPLATE_DIR."ticketeventcontainer1.html"); $t->setVar("NAME", htmlspecialchars($this->name)); //standard properties $p = ""; foreach($this->allowedProperties as $i=>$prop){ if($prop == $this->property){ $p .= ""; } $t->setVar("PROPERTIES", $p); if($this->order == "ASC"){ $t->setVar("ORDER_ASC", "selected=\"selected\""); $t->setVar("ORDER_DESC", ""); } else{ $t->setVar("ORDER_DESC", "selected=\"selected\""); $t->setVar("ORDER_ASC", ""); } //categories $query = sprintf("SELECT id,name FROM bruckm_index WHERE class = 'TicketCategory' ORDER BY name ASC"); $result = dbQuery($query); $c = ""; while($line = mysqli_fetch_array($result, MYSQLI_ASSOC)){ if($line['id'] == $this->category){ $c .= ""; } else{ $c .= ""; } } $t->setVar("CATEGORIES", $c); //periods $p = ""; if($this->period == 1){ $p .= ""; } else{ $p .= ""; } if($this->period == -1){ $p .= ""; } else{ $p .= ""; } $t->setVar("PERIODS", $p); return $t->toString(); } /** @see CmsObject::handleAction() */ //--------------------------------------------- function handleAction($action, $position, $type){ //--------------------------------------------- return; } /** @see CmsObject::getCssClass() */ //----------------------------------------------- function getCssClass(){ //----------------------------------------------- return "itemTicketEvent"; } /** @see Container::compare() */ //--------------------------------------------- function compare($obj1, $obj2){ //--------------------------------------------- $c1 = $obj1->getCategoryName(); $c2 = $obj2->getCategoryName(); $result = strcmp($c1, $c2); if($result != 0){ return $result; } switch($this->property){ case "name": $result = strcasecmp($obj1->getName(), $obj2->getName()); break; case "lastUpdate": $d1 = strtotime($obj1->getLastUpdate()); $d2 = strtotime($obj2->getLastUpdate()); if($d1 < $d2) $result = -1; else $result = 1; break; case "id": $id1 = strtotime($obj1->getId()); $id2 = strtotime($obj2->getId()); if($id1 < $id2) $result = -1; else $result = 1; break; case "visible": $v1 = $obj1->isVisible(); $v2 = $obj2->isVisible(); if($v1 < $v2) $result = -1; else $result = 1; break; case "startDate": $d1 = $obj1->getStartDate(); $d2 = $obj2->getStartDate(); $result = compareDates($d1, $d2); break; } if($this->order == "DESC"){ $result = -$result; } return $result; } // === ADDITIONAL METHODS ================================================================= // /** searches for events */ //---------------------------------------------- function doSearchEvents(){ //---------------------------------------------- $query = sprintf("SELECT flexiconId FROM bruckm_ticketevent WHERE name LIKE %s ORDER BY category1 ASC, name ASC", sqlstring("%".$this->searchTerm."%")); $result = dbQuery($query); while($line = mysqli_fetch_array($result, MYSQLI_ASSOC)){ $this->childObjects[] = FlexiconFactory::instanceById($line['flexiconId'], $this); } } /** loads all events matching the filter criteria */ //---------------------------------------------- function doLoadEvents(){ //---------------------------------------------- $query = "SELECT flexiconId FROM bruckm_ticketevent "; $where = 0; //single category or all categories if($this->category != 0){ $c = $this->category; $query .= "WHERE (category1 = $c OR category2 = $c OR category3 = $c) "; $where++; } //future or past events if($this->period != 0){ if($this->period > 0){ if($where > 0){ $query .= "AND (endDate >= '" . date("Y-m-d") . "') "; } else{ $query .= "WHERE (endDate >= '" . date("Y-m-d") . "') "; } } else{ if($where > 0){ $query .= "AND (endDate < '" . date("Y-m-d") . "') "; } else{ $query .= "WHERE (endDate < '" . date("Y-m-d") . "') "; } } $where++; } //order: name, start date or visibility $query .= "ORDER BY category1 ASC, ".$this->property." ".$this->order; $result = dbQuery($query); while($line = mysqli_fetch_array($result, MYSQLI_ASSOC)){ $this->childObjects[] = FlexiconFactory::instanceById($line['flexiconId'], $this); } } /** lists all search results * @return string */ //---------------------------------------------- function doPrintSearchResults(){ //---------------------------------------------- $t = new Template(CMS_TEMPLATE_DIR."ticketeventcontainer2.html"); $t->setVar("TITLE", htmlspecialchars(sizeof($this->childObjects)." Ergebnisse für den Suchbegriff '".$this->searchTerm."'")); $events = ""; foreach($this->childObjects as $i=>$child){ $events .= $this->childObjects[$i]->printChildContent(); } $t->setVar("EVENTS", $events); return $t->toString(); } /** lists all events, sorted by category * @return string */ //---------------------------------------------- function doPrintEventList(){ //---------------------------------------------- //print single category view if($this->category != 0){ $t = new Template(CMS_TEMPLATE_DIR."ticketeventcontainer2.html"); $c = FlexiconFactory::instanceById($this->category); $c->load(); $t->setVar("TITLE", $c->toString()); $events = ""; foreach($this->childObjects as $i=>$child){ $events .= $this->childObjects[$i]->printChildContent(); } $t->setVar("EVENTS", $events); return $t->toString(); } //print all categories $out = ""; $categories = array(); foreach($this->childObjects as $i=>$child){ if(!in_array($child->getCategoryId(), $categories)){ $categories[] = $child->getCategoryId(); if($t){ $t->setVar("EVENTS", $events); $out .= $t->toString(); } $t = new Template(CMS_TEMPLATE_DIR."ticketeventcontainer2.html"); $t->setVar("TITLE", $child->getCategoryName()); $events = ""; } $events .= $this->childObjects[$i]->printChildContent(); } if($t){ $t->setVar("EVENTS", $events); $out .= $t->toString(); } return $out; } }; ?>