<?php
class TeamPage extends ArticleHolder {
static $db = array("Name" => "Varchar(255)", "ApiName" => "Varchar(10)", "IsAktiv" => "Boolean", "Abteilung" => "Enum('Hockey, Tennis')");
static $default_parent="TeamsPage";
static $can_be_root = false;
static $has_one = array("TeamPic" => "Image", "Verwalter" => "Member");
static $has_many = array("Spieler" => "Spieler", "NewsItems" => "NewsItem");
public function getCMSFields() {
Requirements::javascript('mysite/javascript/TeamPage.js');
$fields = parent::getCMSFields();
$fields->removeByName("Navigation label");
$fields->removeByName("MenuTitle");
$fields->renameField("Title", "Mannschaftsname");
$fields->addFieldToTab("Root.Content.Main", new DropdownField("VerwalterID", "Verwalter", DataObject::get("Member")->toDropDownMap("ID", "Title")), "Content");
$fields->addFieldToTab("Root.Content.Main", new Dropdownfield("Abteilung", "Abteilung", singleton('TeamPage')->dbObject('Abteilung')->enumValues()), "Content");
$fields->addFieldToTab("Root.Content.Main", new Checkboxfield("IsAktiv", "Aktivenmannschaft"), "Content");
$fields->addFieldToTab("Root.Content.Main", new Textfield("ApiName", "Schnittstellenname"), "Content");
$fields->addFieldToTab("Root.Content.Main", new Imagefield("TeamPic", "Mannschaftsbild"), "Content");
$fields->renameField("Content", "Mannschaftsbeschreibung");
$fields->addFieldToTab("Root.Content.Spieler", new DataObjectManager(
$this,
'Spieler',
'Spieler',
null,
'getCMSFields_forPopup',
'TeamID = '.$this->ID
));
$fields->addFieldToTab("Root.Content.News", new DataObjectManager($this, "NewsItems", "NewsItem", null, "getCMSFields_forPopup", "NewsPageID = ".$this->ID));
$this->cleanUI(&$fields);
return $fields;
}
public function getArticles() {
if(!isset($_GET['start']) || !is_numeric($_GET['start']) || (int)$_GET['start'] < 1) $_GET['start'] = 0;
$SQL_start = (int)$_GET['start'];
$doSet = DataObject::get(
$callerClass = "ArticlePage",
$filter = "`ParentID` = '".$this->ID."'",
$sort = "",
$join = "",
$limit = "{$SQL_start},".$this->ShowCount
);
return $doSet ? $doSet : false;
}
private function cleanUI(&$fields) {
$user = Member::currentUser();
if(!$user->inGroup("administrators")) {
if($user->ID == $this->Verwalter()->ID) {
$fields->removeByName("Verwalter");
$fields->removeByName("Abteilung");
$fields->removeByName("Schnittstellenname");
}
}
}
// Verwalter dürfen diese Seiten nicht erstellen
public function canCreate() {
if($this->ensureGroups() && wMember::currentUser()->inGroup("Mannschaftsverwalter")) return false;
return parent::canCreate();
}
// Der zugehörige Verwalter kann die Seiten seiner Mannschaften bearbeiten
public function canEdit() {
if(Member::currentUser()->ID == $this->Verwalter()->ID) return true;
return parent::canEdit();
}
/*
* Ein Verwalter darf nur dann die Seite einer Mannschaft löschen, wenn er auch
* gleichzeitig Administrator ist. *
*/
public function canDelete() {
if(Member::currentUser()->ID == $this->Verwalter()->ID && !Member::currentUser()->inGroup("administrators")) return false;
return parent::canDelete();
}
}
class TeamPage_Controller extends Page_Controller {
public function players() {
return $this->renderWith(array("TeamPage", "ShowPlayers", "Page"));
}
public function news() {
return $this->renderWith(array("TeamPage", "TeamNews", "Page"));
}
public function more() {
return $this->renderWith(array("TeamPage", "TeamMore", "Page"));
}
}
?>