. if (!defined('EG')) die('Direct access not allowed!'); class HistoryController extends BaseController { public static $typeTable = array( 'message' => 'message', 'talk' => 'talk', 'user' => 'user', 'issue' => 'issue', 'wiki_talk' => 'wiki talk', 'page' => 'wiki page', 'page_del' => 'wiki page', ); public static $actionTable = array( 'hide' => 'hide', 'show' => 'show', 'block' => 'block', 'unblock' => 'unblock', 'open' => 'open', 'close' => 'close', 'pageblock' => 'block', 'pageunblock' => 'unblock', 'pagehide' => 'hide', 'pageshow' => 'show', ); protected $strings = array( 'hide' => array( 'action' => 'hide', 'check_status' => 'no', 'to_status' => 'yes', 'exec_string' => 'The message has been hidden. Just reload the page', 'error_string' => 'Error: the message is already hidden', ), 'show' => array( 'action' => 'show', 'check_status' => 'yes', 'to_status' => 'no', 'exec_string' => 'The message is no more hidden. Just reload the page', 'error_string' => 'Error: the message is already visible', ), 'block' => array( 'action' => 'block', 'check_status' => 'no', 'to_status' => 'yes', 'exec_string' => 'The user has been blocked. Just reload the page', 'error_string' => 'Error: the user is already blocked', ), 'unblock' => array( 'action' => 'unblock', 'check_status' => 'yes', 'to_status' => 'no', 'exec_string' => 'The user is no more blocked. Just reload the page', 'error_string' => 'Error: the user is already un-blocked', ), 'open' => array( 'action' => 'open', 'check_status' => 'closed', 'to_status' => 'opened', 'exec_string' => 'The issue has been opened. Just reload the page', 'error_string' => 'Error: the issue is already opened', ), 'close' => array( 'action' => 'close', 'check_status' => 'opened', 'to_status' => 'closed', 'exec_string' => 'The issue has been closed. Just reload the page', 'error_string' => 'Error: the issue is already closed', ), 'pageblock' => array( 'action' => 'pageblock', 'check_status' => 'no', 'to_status' => 'yes', 'exec_string' => 'The wiki page has been blocked. Just reload the page', 'error_string' => 'Error: the wiki page is already blocked', ), 'pageunblock' => array( 'action' => 'pageunblock', 'check_status' => 'yes', 'to_status' => 'no', 'exec_string' => 'The wiki page is no more blocked. Just reload the page', 'error_string' => 'Error: the wiki page is already un-blocked', ), 'pagehide' => array( 'action' => 'pagehide', 'check_status' => 'no', 'to_status' => 'yes', 'exec_string' => 'The wiki page has been hidden. Just reload the page', 'error_string' => 'Error: the wiki page is already hidden', ), 'pageshow' => array( 'action' => 'pageshow', 'check_status' => 'yes', 'to_status' => 'no', 'exec_string' => 'The wiki page is no more hidden. Just reload the page', 'error_string' => 'Error: the wiki page is already visible', ), ); protected $types = array( 'message' => array( 'clean_type' => 'message', 'model_name' => 'MessagesModel', 'id_name' => 'id_mes', 'field_name' => 'deleted', 'actions' => array('hide','show'), 'group' => 'moderator', ), 'talk' => array( 'clean_type' => 'talk', 'model_name' => 'TalkModel', 'id_name' => 'id_talk', 'field_name' => 'deleted', 'actions' => array('hide','show'), 'group' => 'moderator', ), 'user' => array( 'clean_type' => 'user', 'model_name' => 'UsersModel', 'id_name' => 'id_user', 'field_name' => 'blocked', 'actions' => array('block','unblock'), 'group' => 'admin', ), 'issue' => array( 'clean_type' => 'issue', 'model_name' => 'IssuesModel', 'id_name' => 'id_issue', 'field_name' => 'status', 'actions' => array('open','close'), 'group' => 'moderator', ), 'wiki_talk' => array( 'clean_type' => 'wiki_talk', 'model_name' => 'WikitalkModel', 'id_name' => 'id_talk', 'field_name' => 'deleted', 'actions' => array('hide','show'), 'group' => 'moderator', ), //page blocked or not 'page' => array( 'clean_type' => 'page', 'model_name' => 'WikiModel', 'id_name' => 'id_wiki', 'field_name' => 'blocked', 'actions' => array('pageblock','pageunblock'), 'group' => 'admin', ), //page deleted or not 'page_del' => array( 'clean_type' => 'page_del', 'model_name' => 'WikiModel', 'id_name' => 'id_wiki', 'field_name' => '-deleted', 'actions' => array('pagehide','pageshow'), 'group' => 'admin', ), ); public function __construct($model, $controller, $queryString) { parent::__construct($model, $controller, $queryString); $this->model('HistoryModel'); $this->model('UsersModel'); } public function hide($lang = 'en', $token = '') { $this->generic($lang, $token, 'hide'); } public function show($lang = 'en', $token = '') { $this->generic($lang, $token, 'show'); } public function block($lang = 'en', $token = '') { $this->generic($lang, $token, 'block'); } public function unblock($lang = 'en', $token = '') { $this->generic($lang, $token, 'unblock'); } public function open($lang = 'en', $token = '') { $this->generic($lang, $token, 'open'); } public function close($lang = 'en', $token = '') { $this->generic($lang, $token, 'close'); } public function pageblock($lang = 'en', $token = '') { $this->generic($lang, $token, 'pageblock'); } public function pageunblock($lang = 'en', $token = '') { $this->generic($lang, $token, 'pageunblock'); } public function pagehide($lang = 'en', $token = '') { $this->generic($lang, $token, 'pagehide'); } public function pageshow($lang = 'en', $token = '') { $this->generic($lang, $token, 'pageshow'); } protected function generic($lang = 'en', $token = '', $action = 'hide') { header('Content-type: text/html; charset=UTF-8'); $this->shift(2); $this->clean(); $clean['token'] = sanitizeAlphanum($token); if ($this->s['registered']->status['status'] === 'logged') { if (!$this->s['registered']->checkCsrf($clean['token'])) die("wrong token"); if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) die("your account has been blocked"); $clean['id_user'] = (int)$this->s['registered']->status['id_user']; $clean['id'] = $this->request->post('id',0,'forceInt'); $type = $this->request->post('type','','sanitizeAll'); $message = $this->request->post('message',''); $modelName = 'error'; if (array_key_exists($type,$this->types)) { if (in_array($action,$this->types[$type]['actions'])) { $clean['group'] = $this->types[$type]['group']; if (in_array($clean['group'],$this->s['registered']->status['groups'])) { $modelName = $this->types[$type]['model_name']; $clean['type'] = $this->types[$type]['clean_type']; $clean['id_name'] = $this->types[$type]['id_name']; $clean['field_name'] = $this->types[$type]['field_name']; //load the right model $this->model($modelName); $model = $this->m[$modelName]; $count = $model->select()->where(array($clean['id_name'] => $clean['id'],$clean['field_name'] => $this->strings[$action]['check_status']))->rowNumber(); if ($count > 0) { if (eg_strlen($message) < 500) { //drop the - char if present $clean['field_name'] = str_replace('-',null,$clean['field_name']); //hide the message $model->values = array($clean['field_name'] => $this->strings[$action]['to_status']); $model->pUpdate($clean['id']); if ($model->queryResult) { $this->m['HistoryModel']->setFields('id:forceInt,type,message','sanitizeAll'); $this->m['HistoryModel']->values['created_by'] = $clean['id_user']; $this->m['HistoryModel']->values['gr'] = $clean['group']; $this->m['HistoryModel']->values['action'] = $this->strings[$action]['action']; $this->m['HistoryModel']->updateTable('insert'); echo $this->strings[$action]['exec_string']; } else { echo "error: one error occurred, please retry later"; } } else { echo "error: the message has too many characters or wrong type"; } } else { echo $this->strings[$action]['error_string']; } } } } } } public function viewall($lang = 'en', $type = 'message', $id = 0) { header('Content-type: text/html; charset=UTF-8'); $this->shift(3); $this->clean(); if ($this->s['registered']->status['status'] === 'logged') { if (!$this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) { $clean['id'] = (int)$id; if (array_key_exists($type,$this->types)) { $clean['group'] = $this->types[$type]['group']; if (in_array($clean['group'],$this->s['registered']->status['groups'])) { $clean['type'] = $this->types[$type]['clean_type']; switch ($clean['type']) { case 'user': $data['object'] = 'user'; $data['box_class'] = 'details_of_actions_inner_user'; break; case 'page': $data['object'] = 'wiki page'; $data['box_class'] = 'details_of_actions_inner_user'; break; case 'page_del': $data['object'] = 'wiki page'; $data['box_class'] = 'details_of_actions_inner_user'; break; case 'issue': $data['object'] = 'issue'; $data['box_class'] = 'details_of_actions_inner_user'; break; default: $data['object'] = 'message'; $data['box_class'] = 'details_of_actions_inner'; break; } $data['res'] = $this->m['HistoryModel']->select()->where(array('id'=>$clean['id'],'type'=>$clean['type'],'gr'=>$clean['group']))->send(); $data['md_action'] = array( 'hide' => 'hidden', 'show' => 'restored', 'block' => 'blocked', 'unblock' => 'un-blocked', 'open' => 'opened again', 'close' => 'closed', 'pageblock' => 'blocked', 'pageunblock' => 'un-blocked', 'pagehide' => 'hidden', 'pageshow' => 'restored', ); $this->append($data); $this->load('viewall'); } } } } } }