. */ 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"); require_once(ROOTPATH . "include/list/VerticalList.php"); class UserForm extends AbstractAjaxPopupForm { public function __construct() { parent::__construct("user"); $this->addField(new TextField("username", "Username")); $this->addField(new PasswordField("password", "Password")); $this->addField(new TextField("name", "Name")); $this->addField(new TextField("email", "E-mail")); $this->setResetText("Cancel"); } protected function isValidAjaxField($field, $value, $isNewEntry) { switch($field) { case "username": case "name": if( strlen($value)<3 || strlen($value)>50 ) { return "The " . $field . " should be between 3 and 50 characters."; }else { return true; } break; case "password": if( $value===false ) { return "The passwords do not match. Please fill in the same password twice."; }elseif( strlen($value)==0 && !$isNewEntry ) { return true; }elseif( strlen($value)<8 ) { return "The password should be minimum 8 characters."; }else { return true; } break; case "email": if( !Mail::checkEmail($value) ) { return "The e-mail address is invalid."; }else { return true; } break; default: return "Cannot validate " . $value . ", unknown field."; } } protected function loadModel($id) { return $GLOBALS['sql']->select("users", "id", $id); } protected function newModel() { $model = array(); $model['username'] = ""; $model['password'] = ""; $model['name'] = ""; $model['email'] = ""; return $model; } protected function saveModel(array $model) { if( isset($model['id']) && $model['id']>0 ) { if( $model['password']=="" ) { unset($model['password']); } return $GLOBALS['sql']->update("users", $model, "id", $model['id']); }else { return $GLOBALS['sql']->insert("users", $model)!=false; } } protected function onDataUpdated(AjaxResponse $response) { $response->addRefresh("userTable", getUserTable(true)); return $response; } } class InfoLinkColumn extends AjaxLinkColumn { protected function getJsLink($row) { return "refresh('?".AbstractAjaxPopupForm::ACTION_AJAX."&info&".AbstractAjaxPopupForm::MODEL_ID."=".$row['id']."', 'userInfo')"; } } class EditLinkColumn extends AjaxLinkColumn { protected function getJsLink($row) { return "openPopup('?".AbstractAjaxPopupForm::ACTION_AJAX."&".AbstractAjaxPopupForm::ACTION_EDIT."&".AbstractAjaxPopupForm::MODEL_ID."=".$row['id']."')"; } } class DeleteLinkColumn extends AjaxLinkColumn { protected function getJsLink($row) { return "openPopup('?".AbstractAjaxPopupForm::ACTION_AJAX."&delete&".AbstractAjaxPopupForm::MODEL_ID."=".$row['id']."&username=".$row['username']."')"; } protected function isVisible($row) { return $row['id']!=$_SESSION['sess_uid']; } } function getUserTable($canModify) { $query = "SELECT `id`, `username`, `password`, `name`, `email`, `privstatementagree` FROM `users`"; if( $GLOBALS['sql']->query($query) && $GLOBALS['sql']->getNumRows()>0 ) { $data = $GLOBALS['sql']->fetchAssocAll(); $list = new ListPager("users"); addBasicColumns($list); $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 users found."; } } function addBasicColumns(ListPager $list) { $list->addColumn(new TextColumn("username", "Username")); $list->addColumn(new TextColumn("name", "Name")); $list->addColumn(new EmailColumn("email", "E-mail")); $list->addColumn(new BooleanImageColumn("password", "Password", "cross", "check", "", "No", "Yes", 12)); $list->addColumn(new BooleanImageColumn("privstatementagree", "Privacy statement agreed", "check", "minus", "yes", "Yes", "Not yet", 12)); } function getUserInfo($id) { $data = $GLOBALS['sql']->select("users", "id", $id); $list = new VerticalList("userInfo"); addBasicColumns($list); $list->addColumn(new DateColumn("lastLoginDate", "Last login date")); $list->addColumn(new TextColumn("lastLoginIp", "Last login IP")); $query = "SELECT `events`.`title` AS `title`, `events`.`key` AS `key`, `roles`.`name` AS `role` FROM `event_users` LEFT JOIN `events` ON `event_users`.`event_id`=`events`.`id` LEFT JOIN `roles` ON `event_users`.`role_id`=`roles`.`id` WHERE `user_id`=".$GLOBALS['sql']->escape($id); if( $GLOBALS['sql']->query($query) && $GLOBALS['sql']->getNumRows()>0 ) { $eventUserList = new ListPager("eventUserList"); $eventUserList->setDisableLinks(true); $eventUserList->addColumn(new TextColumn("title", "Event title")); $eventUserList->addColumn(new TextColumn("key", "Event key")); $eventUserList->addColumn(new TextColumn("role", "Role")); $data['events'] = $eventUserList->display($GLOBALS['sql']->fetchAssocAll()); }else { $data['events'] = "Not linked to any event"; } $list->addColumn(new TextColumn("events", "Events")); return "

User info for '".$data['username']."'

".$list->display(array($data)); } $layout = new AdminLayout(); $layout->init(); if( !$layout->hasFunction("user_view") && !$layout->hasFunction("user_edit") ) { $layout->noAccess(); }else { if( $layout->hasFunction("user_edit") && isset($_REQUEST[AbstractAjaxPopupForm::ACTION_AJAX]) && ((isset($_REQUEST[AbstractAjaxPopupForm::ACTION_EDIT]) && isset($_REQUEST[AbstractAjaxPopupForm::MODEL_ID])) || isset($_REQUEST[AbstractAjaxPopupForm::ACTION_NEW]) ) ) { $form = new UserForm(); $form->display(); }elseif( $layout->hasFunction("user_edit") && isset($_REQUEST[AbstractAjaxPopupForm::ACTION_AJAX]) && isset($_REQUEST['delete']) && isset($_REQUEST[AbstractAjaxPopupForm::MODEL_ID]) && $_REQUEST[AbstractAjaxPopupForm::MODEL_ID]!=$_SESSION['sess_uid'] ) { if( isset($_POST['confirm']) ) { if( $GLOBALS['sql']->delete("users", "id", $_POST[AbstractAjaxPopupForm::MODEL_ID]) ) { $response = new AjaxResponse(true); $response->addRefresh("userTable", getUserTable(true)); $response->sendResponse(); }else { $response = new AjaxResponse(); $response->addRefresh("popup_content", "Failed deleting user."); $response->sendResponse(); } }else { $popup = new ConfirmPopup("Delete user", "Are you sure you want to delete '".$_REQUEST['username']."'?", $_SERVER['PHP_SELF'], AbstractAjaxPopupForm::ACTION_AJAX."=1&delete=1&".AbstractAjaxPopupForm::MODEL_ID."=".$_REQUEST[AbstractAjaxPopupForm::MODEL_ID]."&confirm=1"); echo $popup->createPopup(); } }elseif( isset($_REQUEST[AbstractAjaxPopupForm::ACTION_AJAX]) && isset($_REQUEST['info']) && isset($_REQUEST[AbstractAjaxPopupForm::MODEL_ID]) ) { $response = new AjaxResponse(); $response->addRefresh("userInfo", getUserInfo($_REQUEST[AbstractAjaxPopupForm::MODEL_ID])); $response->sendResponse(); }else { $layout->pageHeader(); $layout->echoln("

Administrate users

"); if( $layout->hasFunction("user_edit") ) { $layout->echoln("

".IconHelper::getIcon("add", "Add user")."

"); } $layout->echoln("
"); $layout->echoln(getUserTable($layout->hasFunction("user_edit"))); $layout->echoln("
"); $layout->echoln("
"); $layout->pageFooter(); } } ?>