. */ define("ROOTPATH", "../"); require_once(ROOTPATH . "include/include.php"); require_once(ROOTPATH . "include/classes/AjaxResponse.php"); require_once(ROOTPATH . "include/classes/AlertPopup.php"); require_once(ROOTPATH . "include/classes/ConfirmPopup.php"); require_once(ROOTPATH . "include/classes/Mail.php"); require_once(ROOTPATH . "include/form/AbstractAjaxPopupForm.php"); require_once(ROOTPATH . "include/list/ListPager.php"); class LinkUserForm extends AbstractAjaxPopupForm { private $eventId; public function __construct($eventId) { parent::__construct("Link user"); $this->eventId = $eventId; $this->addHiddenField(new HiddenField("linkuser", 1)); $this->addHiddenField(new HiddenField("event", $eventId)); $users = array(); $query = "SELECT `id`, `name` FROM `users` ORDER BY `name`"; if( $GLOBALS['sql']->query($query) && $GLOBALS['sql']->getNumRows()>0 ) { while( $row = $GLOBALS['sql']->fetchAssoc() ) { $users[ $row['id'] ] = $row['name']; } } $userField = new SelectField("user_id", "User", $users); $userField->setCompulsory(true); $this->addField($userField); $roles = array(); $query = "SELECT `id`, `name` FROM `roles` WHERE `type`='" . ($eventId==MAIN_ADMIN_EVENT_ID ? "core" : "event") . "' ORDER BY `name`"; if( $GLOBALS['sql']->query($query) && $GLOBALS['sql']->getNumRows()>0 ) { while( $row = $GLOBALS['sql']->fetchAssoc() ) { $roles[ $row['id'] ] = $row['name']; } } $roleField = new SelectField("role_id", "Role", $roles); $roleField->setCompulsory(true); $this->addField($roleField); $this->setSubmitText("Link user"); $this->setResetText("Cancel"); } protected function getPopupTitle() { return "Link user"; } protected function loadModel($id) { return $this->newModel(); } protected function newModel() { $model = array(); $model['user_id'] = ""; $model['role_id'] = ""; return $model; } protected function saveModel(array $model) { $model['event_id'] = $this->eventId; return $GLOBALS['sql']->insert("event_users", $model)!==false; } protected function onDataUpdated($response) { $response->addRefresh("eventInfo", getEventInfo($this->eventId, true)); return $response; } } class EventForm extends AbstractAjaxPopupForm { public function __construct() { parent::__construct("event"); $this->addField(new TextField("key", "Key")); $this->addField(new TextField("title", "Title")); $this->addField(new DateSelectField("startdate", "Start")); $this->addField(new DateSelectField("enddate", "End")); $this->setResetText("Cancel"); } protected function isValidAjaxField($field, $value, $isNewEntry) { switch($field) { case "key": if( strlen($value)<6 || strlen($value)>12 ) { return "The " . $field . " should be between 6 and 12 characters."; }else { return true; } break; case "title": if( strlen($value)<3 || strlen($value)>48 ) { return "The " . $field . " should be between 3 and 48 characters."; }else { return true; } break; case "startdate": case "enddate": if( !DateHelper::isSqlDate($value) ) { return "The date is invalid."; }else { return true; } break; default: return "Cannot validate " . $value . ", unknown field."; } } protected function loadModel($id) { return $GLOBALS['sql']->select("events", "id", $_REQUEST['id']); } protected function newModel() { $model = array(); $model['key'] = ""; $model['title'] = ""; $model['startdate'] = ""; $model['enddate'] = ""; return $model; } protected function saveModel(array $model) { if( isset($model['id']) && $model['id']>0 ) { return $GLOBALS['sql']->update("events", $model, "id", $model['id']); }else { return $GLOBALS['sql']->insert("events", $model)!=false; } } protected function onDataUpdated(AjaxResponse $response) { $response->addRefresh("eventTable", getEventTable(true)); return $response; } } class InfoLinkColumn extends AjaxLinkColumn { protected function getJsLink($row) { return "refresh('?".AbstractAjaxPopupForm::ACTION_AJAX."&info&".AbstractAjaxPopupForm::MODEL_ID."=".$row['id']."', 'eventInfo')"; } } class EditLinkColumn extends AjaxLinkColumn { protected function getJsLink($row) { return "openPopup('?".AbstractAjaxPopupForm::ACTION_AJAX."&".AbstractAjaxPopupForm::ACTION_EDIT."&".AbstractAjaxPopupForm::MODEL_ID."=".$row['id']."')"; } protected function isVisible($row) { return $row['id']!=MAIN_ADMIN_EVENT_ID; } } class DeleteLinkColumn extends AjaxLinkColumn { protected function getJsLink($row) { return "openPopup('?ajax&delete&id=".$row['id']."&title=".$row['title']."')"; } protected function isVisible($row) { return $row['id']!=MAIN_ADMIN_EVENT_ID; } } function getEventTable($canModify) { $query = "SELECT `id`, `key`, `title`, `startdate`, `enddate` FROM `events`"; if( $GLOBALS['sql']->query($query) && $GLOBALS['sql']->getNumRows()>0 ) { $data = $GLOBALS['sql']->fetchAssocAll(); $list = new ListPager("events"); $list->addColumn(new TextColumn("key", "Key")); $list->addColumn(new TextColumn("title", "Title")); $list->addColumn(new DateColumn("startdate", "Start date")); $list->addColumn(new DateColumn("enddate", "End date")); $list->addColumn(new InfoLinkColumn("infoLink", "", "info", "info")); if( $canModify ) { $list->addColumn(new EditLinkColumn("editLink", "", "edit", "edit")); $list->addColumn(new DeleteLinkColumn("deleteLink", "", "delete", "delete")); } return $list->display($data); }else { return "No events found."; } } class DeleteEventUserLinkColumn extends AjaxLinkColumn { private $eventId; public function __construct($name, $header, $linkText, $image, $eventId) { parent::__construct($name, $header, $linkText, $image); $this->eventId = $eventId; } protected function getJsLink($row) { return "openPopup('?ajax&deleteeventuser&event=".$this->eventId."&user=".$row['id']."')"; } protected function isVisible($row) { return $row['id']!=$_SESSION['sess_uid']; } } function getEventInfo($id, $canEdit) { $query = "SELECT `title`, `key` FROM `events` WHERE `id`=".$GLOBALS['sql']->escape($id); if( $GLOBALS['sql']->query($query) && $GLOBALS['sql']->getNumRows()==1 ) { $row = $GLOBALS['sql']->fetchAssoc(); $event = $row['title'] . " [" . $row['key'] . "]"; $query = "SELECT `users`.`id`, `users`.`name` AS `name`, `roles`.`name` AS `role` FROM `event_users` LEFT JOIN `roles` ON `event_users`.`role_id`=`roles`.`id` LEFT JOIN `users` ON `event_users`.`user_id`=`users`.`id` WHERE `event_id`=".$GLOBALS['sql']->escape($id); if( $GLOBALS['sql']->query($query) && $GLOBALS['sql']->getNumRows()>0 ) { $list = new ListPager("eventInfo"); $list->setDisableLinks(true); $list->addColumn(new TextColumn("name", "Name")); $list->addColumn(new TextColumn("role", "Role")); if( $canEdit ) { $list->addColumn(new DeleteEventUserLinkColumn("deleteLink", "", "delete", "delete", $id)); } $listData = $list->display($GLOBALS['sql']->fetchAssocAll()); }else { $listData = "No users linked to this event"; } if( $canEdit ) { $linkNewUser = "
".IconHelper::getIcon("add", "Link new user")."
"; }else { $linkNewUser = ""; } return "".IconHelper::getIcon("add", "Add event")."
"); } $layout->echoln("