From 73e4f14274ce20ffc71b5a90ec08f80a9be5b685 Mon Sep 17 00:00:00 2001 From: helpfulrobot Date: Fri, 1 Jan 2016 01:47:02 +1300 Subject: [PATCH] Converted to PSR-2 --- code/LiveChatAdmin.php | 213 ++++++------ code/LiveChatController.php | 552 ++++++++++++++++---------------- code/LiveChatMessage.php | 25 +- code/LiveChatMessageArchive.php | 5 +- 4 files changed, 407 insertions(+), 388 deletions(-) diff --git a/code/LiveChatAdmin.php b/code/LiveChatAdmin.php index 0963d80..df76f14 100644 --- a/code/LiveChatAdmin.php +++ b/code/LiveChatAdmin.php @@ -1,106 +1,113 @@ 'handleAction' - ); - - public function init() { - parent::init(); - Requirements::css(LIVECHAT_DIR . '/css/live-chat.css'); - Requirements::block(FRAMEWORK_DIR . '/javascript/HtmlEditorField.js'); - Requirements::block(FRAMEWORK_DIR . '/thirdparty/jquery-ui/jquery-ui.min.js'); - Requirements::javascript(LIVECHAT_DIR . '/javascript/LiveChatAdmin.js'); - } - - /** - * Has the user been granted access to view the Live Chat tab? - * @param Member|null $member - * @return boolean - */ - public function canView($member = null) { - if (!$member && $member !== FALSE) - $member = Member::currentUser(); - return Permission::checkMember($member, "CMS_ACCESS_LiveChatAdmin"); - } - - /** - * Returns the Breadcrumbs for the LiveChatAdmin - * @return ArrayList - */ - public function Breadcrumbs($unlinked = false) { - return new ArrayList(array( - new ArrayData(array( - 'Title' => 'live chat', - 'Link' => '/admin/' . self::$tree_class - )) - )); - return parent::Breadcrumbs($unlinked); - } - - /** - * Returns the link to the report admin section, or the specific report that is currently displayed - * @return String - */ - public function Link($action = null) { - return self::join_links(parent::Link('index'), $action); - } - - public function providePermissions() { - $title = _t("LiveChatAdmin.MENUTITLE", LeftAndMain::menu_title_for_class($this->class)); - return array( - "CMS_ACCESS_LiveChatAdmin" => array( - 'name' => _t('CMSMain.ACCESS', "Access to '{title}' section", array('title' => $title)), - 'category' => _t('Permission.CMS_ACCESS_CATEGORY', 'CMS Access') - ) - ); - } - - public function getEditForm($id = null, $fields = null) { - $fields = new FieldList(); - $tabMesg = new Tab('MessageView', "New Message"); // this is a blank template for messages - $tabChat = new Tab('NewChatView', "Start new chat"); - - $tabs = new TabSet('Root', $tabChat, $tabMesg); - - $fields->push($tabs); - - $fields->addFieldsToTab('Root.NewChatView', array( - TextField::create('Name', 'Find a Member to start chat'), - LiteralField::create('StartChat', '') - )); - - $msgfrom = ''; - $msgfrom .= '
'; - $msgfrom .= '
'; - $msgfrom .= '
'.Member::currentUser()->getTitle().'
'; - $msgfrom .= '
'; - $msgfrom .= '
'; - - $fields->addFieldsToTab('Root.MessageView', array( - FieldGroup::create($title = '', array( - LiteralField::create('SubmitNewMessage', $msgfrom) - )), - FieldGroup::create($title = 'Your message', array( - TextareaField::create('NewMessageContent', '')->setColumns(80), - LiteralField::create('SubmitNewMessage', '') - )) - )); - - $actions = new FieldList(); - $form = new Form($this, "LiveChatForm", $fields, $actions); - $form->addExtraClass('cms-edit-form cms-panel-padded center ' . $this->BaseCSSClasses()); - $form->loadDataFrom($this->request->getVars()); - - $this->extend('updateEditForm', $form); - - return $form; - } - +class LiveChatAdmin extends LeftAndMain implements PermissionProvider +{ + + private static $url_segment = 'livechat'; + private static $url_rule = '/$LiveChatClass/$Action'; + private static $menu_title = 'Live Chat'; + private static $template_path = null; // defaults to (project)/templates/email + private static $tree_class = 'LiveChat'; + private static $url_handlers = array( + '$LiveChatClass/$Action' => 'handleAction' + ); + + public function init() + { + parent::init(); + Requirements::css(LIVECHAT_DIR . '/css/live-chat.css'); + Requirements::block(FRAMEWORK_DIR . '/javascript/HtmlEditorField.js'); + Requirements::block(FRAMEWORK_DIR . '/thirdparty/jquery-ui/jquery-ui.min.js'); + Requirements::javascript(LIVECHAT_DIR . '/javascript/LiveChatAdmin.js'); + } + + /** + * Has the user been granted access to view the Live Chat tab? + * @param Member|null $member + * @return boolean + */ + public function canView($member = null) + { + if (!$member && $member !== false) { + $member = Member::currentUser(); + } + return Permission::checkMember($member, "CMS_ACCESS_LiveChatAdmin"); + } + + /** + * Returns the Breadcrumbs for the LiveChatAdmin + * @return ArrayList + */ + public function Breadcrumbs($unlinked = false) + { + return new ArrayList(array( + new ArrayData(array( + 'Title' => 'live chat', + 'Link' => '/admin/' . self::$tree_class + )) + )); + return parent::Breadcrumbs($unlinked); + } + + /** + * Returns the link to the report admin section, or the specific report that is currently displayed + * @return String + */ + public function Link($action = null) + { + return self::join_links(parent::Link('index'), $action); + } + + public function providePermissions() + { + $title = _t("LiveChatAdmin.MENUTITLE", LeftAndMain::menu_title_for_class($this->class)); + return array( + "CMS_ACCESS_LiveChatAdmin" => array( + 'name' => _t('CMSMain.ACCESS', "Access to '{title}' section", array('title' => $title)), + 'category' => _t('Permission.CMS_ACCESS_CATEGORY', 'CMS Access') + ) + ); + } + + public function getEditForm($id = null, $fields = null) + { + $fields = new FieldList(); + $tabMesg = new Tab('MessageView', "New Message"); // this is a blank template for messages + $tabChat = new Tab('NewChatView', "Start new chat"); + + $tabs = new TabSet('Root', $tabChat, $tabMesg); + + $fields->push($tabs); + + $fields->addFieldsToTab('Root.NewChatView', array( + TextField::create('Name', 'Find a Member to start chat'), + LiteralField::create('StartChat', '') + )); + + $msgfrom = ''; + $msgfrom .= '
'; + $msgfrom .= '
'; + $msgfrom .= '
'.Member::currentUser()->getTitle().'
'; + $msgfrom .= '
'; + $msgfrom .= '
'; + + $fields->addFieldsToTab('Root.MessageView', array( + FieldGroup::create($title = '', array( + LiteralField::create('SubmitNewMessage', $msgfrom) + )), + FieldGroup::create($title = 'Your message', array( + TextareaField::create('NewMessageContent', '')->setColumns(80), + LiteralField::create('SubmitNewMessage', '') + )) + )); + + $actions = new FieldList(); + $form = new Form($this, "LiveChatForm", $fields, $actions); + $form->addExtraClass('cms-edit-form cms-panel-padded center ' . $this->BaseCSSClasses()); + $form->loadDataFrom($this->request->getVars()); + + $this->extend('updateEditForm', $form); + + return $form; + } } diff --git a/code/LiveChatController.php b/code/LiveChatController.php index fab674b..b6acf95 100644 --- a/code/LiveChatController.php +++ b/code/LiveChatController.php @@ -3,304 +3,314 @@ /** * handles polling, deleting, creation, fetching of live chat messages */ -class LiveChat_Controller extends Controller { +class LiveChat_Controller extends Controller +{ - private static $url_handlers = array( - 'member-search' => 'member_search', - 'poll' => 'get_poll', - 'openchats' => 'get_openchats', - 'messages' => 'get_messages', - 'message' => 'set_message', - 'delete' => 'delete_message' - ); - private static $allowed_actions = array( - 'member_search', - 'get_openchats', // returns list of chats to/from a user - 'get_poll', - 'get_messages', - 'set_message', - 'delete_message' // removes messages to/from a user - ); + private static $url_handlers = array( + 'member-search' => 'member_search', + 'poll' => 'get_poll', + 'openchats' => 'get_openchats', + 'messages' => 'get_messages', + 'message' => 'set_message', + 'delete' => 'delete_message' + ); + private static $allowed_actions = array( + 'member_search', + 'get_openchats', // returns list of chats to/from a user + 'get_poll', + 'get_messages', + 'set_message', + 'delete_message' // removes messages to/from a user + ); - /** - * Use to find a user. returns AJAX - * @param GET 'query' a search string for a user - * @param SS_HTTPRequest $request - */ - public function member_search(SS_HTTPRequest $request) { - if (!Permission::checkMember(Member::currentUser(), "CMS_ACCESS_LiveChatAdmin")) { - header("HTTP/1.0 403 Forbidden"); - die('You do not have permission to use the live chat module'); - } + /** + * Use to find a user. returns AJAX + * @param GET 'query' a search string for a user + * @param SS_HTTPRequest $request + */ + public function member_search(SS_HTTPRequest $request) + { + if (!Permission::checkMember(Member::currentUser(), "CMS_ACCESS_LiveChatAdmin")) { + header("HTTP/1.0 403 Forbidden"); + die('You do not have permission to use the live chat module'); + } - if ($request->getVar('query')) { - $query = Convert::raw2sql($request->getVar('query')); + if ($request->getVar('query')) { + $query = Convert::raw2sql($request->getVar('query')); - //Search for our query - Pretty basic example here - $Results = DataObject::get('Member', "FirstName LIKE '%$query%' OR Surname LIKE '%$query%'"); + //Search for our query - Pretty basic example here + $Results = DataObject::get('Member', "FirstName LIKE '%$query%' OR Surname LIKE '%$query%'"); - //For AutoComplete - $Members = $Results->map('ID', 'Name'); + //For AutoComplete + $Members = $Results->map('ID', 'Name'); - $Suggestions = json_encode($Members->toArray()); + $Suggestions = json_encode($Members->toArray()); - header('Content-Type: application/json'); - die('{"query" : "' . $query . '","suggestions" : ' . $Suggestions . '}'); - } - header("HTTP/1.0 400 Bad Request"); - die('No member found'); - } + header('Content-Type: application/json'); + die('{"query" : "' . $query . '","suggestions" : ' . $Suggestions . '}'); + } + header("HTTP/1.0 400 Bad Request"); + die('No member found'); + } - /** - * Polls the message queue. Will return a map of senders with the lastest message ID - * @see http://stackoverflow.com/questions/12102200/get-records-with-max-value-for-each-group-of-grouped-sql-results - * @param GET 'lastid' the highest ID in you message queue - * @param SS_HTTPRequest $request - */ - public function get_poll(SS_HTTPRequest $request) { - if (!Permission::checkMember(Member::currentUser(), "CMS_ACCESS_LiveChatAdmin")) { - header("HTTP/1.0 403 Forbidden"); - die('You do not have permission to use the live chat module'); - } - if (!$request->getVar('lastid')) { - header("HTTP/1.0 400 Bad Request"); - die('No last id supplied'); - } + /** + * Polls the message queue. Will return a map of senders with the lastest message ID + * @see http://stackoverflow.com/questions/12102200/get-records-with-max-value-for-each-group-of-grouped-sql-results + * @param GET 'lastid' the highest ID in you message queue + * @param SS_HTTPRequest $request + */ + public function get_poll(SS_HTTPRequest $request) + { + if (!Permission::checkMember(Member::currentUser(), "CMS_ACCESS_LiveChatAdmin")) { + header("HTTP/1.0 403 Forbidden"); + die('You do not have permission to use the live chat module'); + } + if (!$request->getVar('lastid')) { + header("HTTP/1.0 400 Bad Request"); + die('No last id supplied'); + } - // find the messages that have been sent to you - $query = new SQLQuery("*", "LiveChatMessage", "ToID = " . (int) Member::currentUserID()); - $query->addWhere("ID >= '" . (int) $request->getVar('lastid') . "'"); - $query->addWhere("ClassName = 'LiveChatMessage'"); - $query->addOrderBy("ID DESC"); + // find the messages that have been sent to you + $query = new SQLQuery("*", "LiveChatMessage", "ToID = " . (int) Member::currentUserID()); + $query->addWhere("ID >= '" . (int) $request->getVar('lastid') . "'"); + $query->addWhere("ClassName = 'LiveChatMessage'"); + $query->addOrderBy("ID DESC"); - $result = $query->execute(); - - $returnar = array(); + $result = $query->execute(); + + $returnar = array(); - // add the names to the array - foreach ($result as $id) { - $member = Member::get()->byID($id['FromID']); - $returnar[$id['ID']] = array( - "Name" => $member ? $member->getName() : $id['FromName'], - "FromID" => $id['FromID'] ? $id['FromID'] : md5($id['FromName']), - "Read" => $id['Read'], - "Message" => $id['Message'] - ); - } + // add the names to the array + foreach ($result as $id) { + $member = Member::get()->byID($id['FromID']); + $returnar[$id['ID']] = array( + "Name" => $member ? $member->getName() : $id['FromName'], + "FromID" => $id['FromID'] ? $id['FromID'] : md5($id['FromName']), + "Read" => $id['Read'], + "Message" => $id['Message'] + ); + } - foreach ($result as $mesg) { - // only update the ones that havn't been read, and the ones coming to you - if (!$mesg['Read'] && $mesg['ToID'] == Member::currentUserID()) { - $mymsg = LiveChatMessage::get()->byID($mesg['ID']); - $mymsg->Read = true; - $mymsg->write(); - } - } + foreach ($result as $mesg) { + // only update the ones that havn't been read, and the ones coming to you + if (!$mesg['Read'] && $mesg['ToID'] == Member::currentUserID()) { + $mymsg = LiveChatMessage::get()->byID($mesg['ID']); + $mymsg->Read = true; + $mymsg->write(); + } + } - header('Content-Type: application/json'); - die(json_encode($returnar)); - } + header('Content-Type: application/json'); + die(json_encode($returnar)); + } - /** - * Polls the message queue. Will return a map of senders with the lastest message ID - * @see http://stackoverflow.com/questions/12102200/get-records-with-max-value-for-each-group-of-grouped-sql-results - * @param SS_HTTPRequest $request - */ - public function get_openchats(SS_HTTPRequest $request) { - if (!Permission::checkMember(Member::currentUser(), "CMS_ACCESS_LiveChatAdmin")) { - header("HTTP/1.0 403 Forbidden"); - die('You do not have permission to use the live chat module'); - } + /** + * Polls the message queue. Will return a map of senders with the lastest message ID + * @see http://stackoverflow.com/questions/12102200/get-records-with-max-value-for-each-group-of-grouped-sql-results + * @param SS_HTTPRequest $request + */ + public function get_openchats(SS_HTTPRequest $request) + { + if (!Permission::checkMember(Member::currentUser(), "CMS_ACCESS_LiveChatAdmin")) { + header("HTTP/1.0 403 Forbidden"); + die('You do not have permission to use the live chat module'); + } - // find the messages that have been sent to you - $query1 = new SQLQuery("*", "LiveChatMessage", "ToID = " . (int) Member::currentUserID()); - $query1->addOrderBy("ID DESC"); - $query1->addWhere("ClassName = 'LiveChatMessage'"); + // find the messages that have been sent to you + $query1 = new SQLQuery("*", "LiveChatMessage", "ToID = " . (int) Member::currentUserID()); + $query1->addOrderBy("ID DESC"); + $query1->addWhere("ClassName = 'LiveChatMessage'"); - $query2 = new SQLQuery("ID, FromID, FromName", '(' . $query1->sql() . ') x'); - $query2->addGroupBy("FromID, FromName"); + $query2 = new SQLQuery("ID, FromID, FromName", '(' . $query1->sql() . ') x'); + $query2->addGroupBy("FromID, FromName"); - // only select the largest ID, unique for each sender - $result = $query2->execute(); - $returnar = array(); + // only select the largest ID, unique for each sender + $result = $query2->execute(); + $returnar = array(); - // add the names to the array - foreach ($result as $id) { - $member = Member::get()->byID($id['FromID']); - $returnar[$id['ID']] = array( - "Name" => $member ? $member->getName() : $id['FromName'], - "FromID" => $id['FromID'] ? $id['FromID'] : md5($id['FromName']) - ); - } + // add the names to the array + foreach ($result as $id) { + $member = Member::get()->byID($id['FromID']); + $returnar[$id['ID']] = array( + "Name" => $member ? $member->getName() : $id['FromName'], + "FromID" => $id['FromID'] ? $id['FromID'] : md5($id['FromName']) + ); + } - header('Content-Type: application/json'); - die(json_encode($returnar)); - } + header('Content-Type: application/json'); + die(json_encode($returnar)); + } - /** - * sends a message to user - * @param POST 'Message' - * @param POST 'To' - * @param SS_HTTPRequest $request - */ - public function set_message(SS_HTTPRequest $request) { - if (!Permission::checkMember(Member::currentUser(), "CMS_ACCESS_LiveChatAdmin")) { - header("HTTP/1.0 403 Forbidden"); - die('You do not have permission to use the live chat module'); - } + /** + * sends a message to user + * @param POST 'Message' + * @param POST 'To' + * @param SS_HTTPRequest $request + */ + public function set_message(SS_HTTPRequest $request) + { + if (!Permission::checkMember(Member::currentUser(), "CMS_ACCESS_LiveChatAdmin")) { + header("HTTP/1.0 403 Forbidden"); + die('You do not have permission to use the live chat module'); + } - if (!$request->postVar('Message')) { - header("HTTP/1.0 400 Bad Request"); - die('No Message found'); - } + if (!$request->postVar('Message')) { + header("HTTP/1.0 400 Bad Request"); + die('No Message found'); + } - if (!$request->postVar('To')) { - header("HTTP/1.0 400 Bad Request"); - die('No target user ID found'); - } - // redirecting one user to another - if (substr($request->postVar('Message'), 0, 9) == '/redirect') { - $this->redirectChatToUser($request->postVar('To'), substr($request->postVar('Message'), 10)); - die(); - } + if (!$request->postVar('To')) { + header("HTTP/1.0 400 Bad Request"); + die('No target user ID found'); + } + // redirecting one user to another + if (substr($request->postVar('Message'), 0, 9) == '/redirect') { + $this->redirectChatToUser($request->postVar('To'), substr($request->postVar('Message'), 10)); + die(); + } - LiveChatMessage::create(array( - 'Message' => htmlentities($request->postVar('Message')), - 'ToID' => is_numeric($request->postVar('To')) ? $request->postVar('To') : 0, - 'Read' => false, - 'FromID' => Member::currentUserID(), - 'FromIP' => $request->getIP(), - 'FromName' => is_numeric($request->postVar('To')) ? "" : $request->postVar('To') - ))->write(); + LiveChatMessage::create(array( + 'Message' => htmlentities($request->postVar('Message')), + 'ToID' => is_numeric($request->postVar('To')) ? $request->postVar('To') : 0, + 'Read' => false, + 'FromID' => Member::currentUserID(), + 'FromIP' => $request->getIP(), + 'FromName' => is_numeric($request->postVar('To')) ? "" : $request->postVar('To') + ))->write(); - die(); // success - } + die(); // success + } - /** - * returns all messages from and to yourself and another user - * @param GET ID Id of the target person - * @param GET FromName name of the target person - * @param SS_HTTPRequest $request - */ - public function get_messages(SS_HTTPRequest $request) { - if (!Permission::checkMember(Member::currentUser(), "CMS_ACCESS_LiveChatAdmin")) { - header("HTTP/1.0 403 Forbidden"); - die('You do not have permission to use the live chat module'); - } - if (!$request->getVar('ID')) { - header("HTTP/1.0 400 Bad Request"); - die('No Message found'); - } - $returnar = null; - if (is_numeric($request->getVar('ID'))) { - $returnar = LiveChatMessage::get()->alterDataQuery(function($query, $list) { - $subquery = $query->disjunctiveGroup(); - $subquery->whereAny("\"FromID\" = " . (int) $_GET['ID'] . ' AND "ToID" = ' . Member::currentUserID()); - $subquery->whereAny("\"FromID\" = " . Member::currentUserID() . ' AND "ToID" = ' . (int) $_GET['ID']); - })->sort('ID'); - } else { - $returnar = LiveChatMessage::get()->alterDataQuery(function($query, $list) { - $subquery = $query->disjunctiveGroup(); - $subquery->whereAny("\"FromName\" = '" . Convert::raw2sql($_GET['ID']) . '\' AND "ToID" = ' . Member::currentUserID()); - $subquery->whereAny("\"FromID\" = " . Member::currentUserID() . ' AND "FromName" = \'' . Convert::raw2sql($_GET['ID']) . '\''); - })->sort('ID'); - } - $returnar->filter(array('ClassName'=>'LiveChatMessage')); - - header('Content-Type: application/json'); + /** + * returns all messages from and to yourself and another user + * @param GET ID Id of the target person + * @param GET FromName name of the target person + * @param SS_HTTPRequest $request + */ + public function get_messages(SS_HTTPRequest $request) + { + if (!Permission::checkMember(Member::currentUser(), "CMS_ACCESS_LiveChatAdmin")) { + header("HTTP/1.0 403 Forbidden"); + die('You do not have permission to use the live chat module'); + } + if (!$request->getVar('ID')) { + header("HTTP/1.0 400 Bad Request"); + die('No Message found'); + } + $returnar = null; + if (is_numeric($request->getVar('ID'))) { + $returnar = LiveChatMessage::get()->alterDataQuery(function ($query, $list) { + $subquery = $query->disjunctiveGroup(); + $subquery->whereAny("\"FromID\" = " . (int) $_GET['ID'] . ' AND "ToID" = ' . Member::currentUserID()); + $subquery->whereAny("\"FromID\" = " . Member::currentUserID() . ' AND "ToID" = ' . (int) $_GET['ID']); + })->sort('ID'); + } else { + $returnar = LiveChatMessage::get()->alterDataQuery(function ($query, $list) { + $subquery = $query->disjunctiveGroup(); + $subquery->whereAny("\"FromName\" = '" . Convert::raw2sql($_GET['ID']) . '\' AND "ToID" = ' . Member::currentUserID()); + $subquery->whereAny("\"FromID\" = " . Member::currentUserID() . ' AND "FromName" = \'' . Convert::raw2sql($_GET['ID']) . '\''); + })->sort('ID'); + } + $returnar->filter(array('ClassName'=>'LiveChatMessage')); + + header('Content-Type: application/json'); - // update the messages as being read - foreach ($returnar as &$mesg) { - // only update the ones that havn't been read, and the ones coming to you - if (!$mesg->Read && $mesg->ToID == Member::currentUserID()) { - $mymsg = LiveChatMessage::get()->byID($mesg->ID); - $mymsg->Read = true; - $mymsg->write(); - } - } - die(json_encode($returnar->toNestedArray())); - } + // update the messages as being read + foreach ($returnar as &$mesg) { + // only update the ones that havn't been read, and the ones coming to you + if (!$mesg->Read && $mesg->ToID == Member::currentUserID()) { + $mymsg = LiveChatMessage::get()->byID($mesg->ID); + $mymsg->Read = true; + $mymsg->write(); + } + } + die(json_encode($returnar->toNestedArray())); + } - /** - * deletes all your messages, given an ID or a FromName - * @param GET ID Id of the target person - * @param GET FromName name of the target person - * @param SS_HTTPRequest $request - */ - public function delete_message(SS_HTTPRequest $request) { - if (!Permission::checkMember(Member::currentUser(), "CMS_ACCESS_LiveChatAdmin")) { - header("HTTP/1.0 403 Forbidden"); - die('You do not have permission to use the live chat module'); - } - if (!$request->getVar('ID')) { - header("HTTP/1.0 400 Bad Request"); - die('No Message found'); - } - $returnar = array(); - if (is_numeric($request->getVar('ID'))) { - $returnar = LiveChatMessage::get()->alterDataQuery(function($query, $list) { - $subquery = $query->disjunctiveGroup(); - $subquery->whereAny("\"FromID\" = " . (int) $_GET['ID'] . ' AND "ToID" = ' . Member::currentUserID()); - $subquery->whereAny("\"FromID\" = " . Member::currentUserID() . ' AND "ToID" = ' . (int) $_GET['ID']); - }); - } else { - $returnar = LiveChatMessage::get()->alterDataQuery(function($query, $list) { - $subquery = $query->disjunctiveGroup(); - $subquery->whereAny("\"FromName\" = '" . Convert::raw2sql($_GET['ID']) . '\' AND "ToID" = ' . Member::currentUserID()); - $subquery->whereAny("\"FromID\" = " . Member::currentUserID() . ' AND "FromName" = \'' . Convert::raw2sql($_GET['ID']) . '\''); - }); - } - $returnar->filter(array('ClassName'=>'LiveChatMessage')); + /** + * deletes all your messages, given an ID or a FromName + * @param GET ID Id of the target person + * @param GET FromName name of the target person + * @param SS_HTTPRequest $request + */ + public function delete_message(SS_HTTPRequest $request) + { + if (!Permission::checkMember(Member::currentUser(), "CMS_ACCESS_LiveChatAdmin")) { + header("HTTP/1.0 403 Forbidden"); + die('You do not have permission to use the live chat module'); + } + if (!$request->getVar('ID')) { + header("HTTP/1.0 400 Bad Request"); + die('No Message found'); + } + $returnar = array(); + if (is_numeric($request->getVar('ID'))) { + $returnar = LiveChatMessage::get()->alterDataQuery(function ($query, $list) { + $subquery = $query->disjunctiveGroup(); + $subquery->whereAny("\"FromID\" = " . (int) $_GET['ID'] . ' AND "ToID" = ' . Member::currentUserID()); + $subquery->whereAny("\"FromID\" = " . Member::currentUserID() . ' AND "ToID" = ' . (int) $_GET['ID']); + }); + } else { + $returnar = LiveChatMessage::get()->alterDataQuery(function ($query, $list) { + $subquery = $query->disjunctiveGroup(); + $subquery->whereAny("\"FromName\" = '" . Convert::raw2sql($_GET['ID']) . '\' AND "ToID" = ' . Member::currentUserID()); + $subquery->whereAny("\"FromID\" = " . Member::currentUserID() . ' AND "FromName" = \'' . Convert::raw2sql($_GET['ID']) . '\''); + }); + } + $returnar->filter(array('ClassName'=>'LiveChatMessage')); - header('Content-Type: application/json'); - foreach ($returnar as &$mesg) { - $mesg->setClassName('LiveChatMessageArchive'); - $mesg->write(); - } - die(); - } - - /** - * Changes all messages from a user, to a nother user. - * @param int|string $from either a string or an ID - * @param int $to ID of user to transfeer to - */ - public function redirectChatToUser($from, $to) { - $GLOBALS['LIVE_CHAT_FROM_TARGET'] = $from; - $GLOBALS['LIVE_CHAT_TO_TARGET'] = $to; - $returnar = array(); - if (is_numeric($from)) { - $returnar = LiveChatMessage::get()->alterDataQuery(function($query, $list) { - $subquery = $query->disjunctiveGroup(); - $subquery->whereAny("\"FromID\" = " . (int) $GLOBALS['LIVE_CHAT_FROM_TARGET'] . ' AND "ToID" = ' . Member::currentUserID()); - $subquery->whereAny("\"FromID\" = " . Member::currentUserID() . ' AND "ToID" = ' . (int) $GLOBALS['LIVE_CHAT_FROM_TARGET']); - }); - } else { - $returnar = LiveChatMessage::get()->alterDataQuery(function($query, $list) { - $subquery = $query->disjunctiveGroup(); - $subquery->whereAny("\"FromName\" = '" . Convert::raw2sql($GLOBALS['LIVE_CHAT_FROM_TARGET']) . '\' AND "ToID" = ' . Member::currentUserID()); - $subquery->whereAny("\"FromID\" = " . Member::currentUserID() . ' AND "FromName" = \'' . Convert::raw2sql($GLOBALS['LIVE_CHAT_FROM_TARGET']) . '\''); - }); - } - $returnar->filter(array('ClassName'=>'LiveChatMessage')); - - foreach ($returnar as &$mesg) { - if ($mesg->FromID == Member::currentUserID()) { - $mesg->FromID = $to; - } else { - $mesg->ToID = $to; - } - $mesg->write(); - } - } - public function canView($member = null) { - return true; - } - public function canEdit($member = null) { - return true; - } - public function canDelete($member = null) { - return true; - } + header('Content-Type: application/json'); + foreach ($returnar as &$mesg) { + $mesg->setClassName('LiveChatMessageArchive'); + $mesg->write(); + } + die(); + } + /** + * Changes all messages from a user, to a nother user. + * @param int|string $from either a string or an ID + * @param int $to ID of user to transfeer to + */ + public function redirectChatToUser($from, $to) + { + $GLOBALS['LIVE_CHAT_FROM_TARGET'] = $from; + $GLOBALS['LIVE_CHAT_TO_TARGET'] = $to; + $returnar = array(); + if (is_numeric($from)) { + $returnar = LiveChatMessage::get()->alterDataQuery(function ($query, $list) { + $subquery = $query->disjunctiveGroup(); + $subquery->whereAny("\"FromID\" = " . (int) $GLOBALS['LIVE_CHAT_FROM_TARGET'] . ' AND "ToID" = ' . Member::currentUserID()); + $subquery->whereAny("\"FromID\" = " . Member::currentUserID() . ' AND "ToID" = ' . (int) $GLOBALS['LIVE_CHAT_FROM_TARGET']); + }); + } else { + $returnar = LiveChatMessage::get()->alterDataQuery(function ($query, $list) { + $subquery = $query->disjunctiveGroup(); + $subquery->whereAny("\"FromName\" = '" . Convert::raw2sql($GLOBALS['LIVE_CHAT_FROM_TARGET']) . '\' AND "ToID" = ' . Member::currentUserID()); + $subquery->whereAny("\"FromID\" = " . Member::currentUserID() . ' AND "FromName" = \'' . Convert::raw2sql($GLOBALS['LIVE_CHAT_FROM_TARGET']) . '\''); + }); + } + $returnar->filter(array('ClassName'=>'LiveChatMessage')); + + foreach ($returnar as &$mesg) { + if ($mesg->FromID == Member::currentUserID()) { + $mesg->FromID = $to; + } else { + $mesg->ToID = $to; + } + $mesg->write(); + } + } + public function canView($member = null) + { + return true; + } + public function canEdit($member = null) + { + return true; + } + public function canDelete($member = null) + { + return true; + } } diff --git a/code/LiveChatMessage.php b/code/LiveChatMessage.php index afd1a06..e4e5323 100644 --- a/code/LiveChatMessage.php +++ b/code/LiveChatMessage.php @@ -3,15 +3,16 @@ /** * A single message sent to an individual */ -class LiveChatMessage extends DataObject { - public static $db = array( - 'Message' => 'Text', - "FromIP" => 'Text', - "FromName" => 'Text', // name for anonymous conversations. Must not be numeric. - 'Read' => 'Boolean' - ); - public static $has_one = array( - "From" => "Member", - "To" => "Member" - ); -} \ No newline at end of file +class LiveChatMessage extends DataObject +{ + public static $db = array( + 'Message' => 'Text', + "FromIP" => 'Text', + "FromName" => 'Text', // name for anonymous conversations. Must not be numeric. + 'Read' => 'Boolean' + ); + public static $has_one = array( + "From" => "Member", + "To" => "Member" + ); +} diff --git a/code/LiveChatMessageArchive.php b/code/LiveChatMessageArchive.php index 98979e6..f65d874 100644 --- a/code/LiveChatMessageArchive.php +++ b/code/LiveChatMessageArchive.php @@ -3,5 +3,6 @@ /** * A backup of a live chat message. Used when the orginal message is deleted. */ -class LiveChatMessageArchive extends LiveChatMessage { -} \ No newline at end of file +class LiveChatMessageArchive extends LiveChatMessage +{ +}