From d3d3f8946ee98500ec97b105e967a63cf7874abf Mon Sep 17 00:00:00 2001 From: Franzz Date: Tue, 30 Mar 2021 20:01:21 +0200 Subject: [PATCH] chat message modification (1.1.5) --- inc/databap.php | 39 +++++++--- index.php | 11 ++- masks/chat.html | 70 +++++++++++++++-- masks/index.html | 2 - masks/welcome.html | 11 ++- style/_common.scss | 4 +- style/_variables.scss | 3 +- style/databap.css | 2 +- style/databap.css.map | 2 +- style/databap.scss | 90 +++++++++++++-------- test.csv | 176 ------------------------------------------ 11 files changed, 168 insertions(+), 242 deletions(-) delete mode 100644 test.csv diff --git a/inc/databap.php b/inc/databap.php index 3b03cfd..56b18cb 100755 --- a/inc/databap.php +++ b/inc/databap.php @@ -7,8 +7,8 @@ class Databap extends PhpObject { //Common Constants - const VERSION = '1.1.4'; //Versioning: ..- - const VERSION_DATE = '24/09/2020'; + const VERSION = '1.1.5'; //Versioning: ..- + const VERSION_DATE = '30/03/2021'; const EXPECTED_PAGE_COOKIE = 'exp_page'; const MAIN_SEPARATOR = ' '; const DATE_FORMAT = 'd/m/Y'; @@ -180,8 +180,11 @@ class Databap extends PhpObject const DOC_TMP_FOLDER = 'docs/tmp/'; const DOC_THUMB_FOLDER = 'docs/thumb/'; - //Objects + /** + * @var MySqlManager + */ private $oMySql; + private $oClassManagement; private $oAuth; @@ -235,7 +238,7 @@ class Databap extends PhpObject self::COMP_TABLE => array(MySqlManager::getText(self::COMP_TABLE), 'logo'), self::CODE_TABLE => array(MySqlManager::getText(self::CODE_TABLE), 'description', MySqlManager::getId(self::USER_TABLE), 'refer_id'), self::URL_TABLE => array(MySqlManager::getId(self::CODE_TABLE), 'phrase'), - self::MSG_TABLE => array(MySqlManager::getId(self::USER_TABLE), 'nickname', MySqlManager::getId(self::CHAN_TABLE), MySqlManager::getText(self::MSG_TABLE), 'type', 'date'), + self::MSG_TABLE => array(MySqlManager::getId(self::USER_TABLE), 'nickname', MySqlManager::getId(self::CHAN_TABLE), MySqlManager::getText(self::MSG_TABLE), 'type', 'id_message_ref', 'date'), self::CHAN_TABLE => array('safe_name', MySqlManager::getText(self::CHAN_TABLE)), self::CONN_TABLE => array(MySqlManager::getId(self::USER_TABLE), MySqlManager::getId(self::CHAN_TABLE)), self::OPT_TABLE => array(MySqlManager::getId(self::USER_TABLE), MySqlManager::getId(self::OPTNAME_TABLE), MySqlManager::getId(self::OPTVAL_TABLE)), @@ -282,7 +285,8 @@ class Databap extends PhpObject 'date' => "date NOT NULL", 'system' => "varchar(3)", 'extension' => "varchar(10)", - 'default_value'=>"tinyint(1) DEFAULT 0" + 'default_value'=>"tinyint(1) DEFAULT 0", + 'id_message_ref' => "int(10) unsigned" ); $asOptions['constraints'] = array ( @@ -309,7 +313,7 @@ class Databap extends PhpObject { if($sType!='') { - if($sType!='' && !array_key_exists($sType, self::$TYPES)) $this->addError('Type "'.$sType.'" inconnu'); + if($sType!='' && !array_key_exists($sType, self::$TYPES)) self::addError('Type "'.$sType.'" inconnu'); else $asResult = array($sType=>self::$TYPES[$sType]); } else $asResult = self::$TYPES; @@ -324,7 +328,7 @@ class Databap extends PhpObject $asResult[$sType] = array(); foreach($oInfo as $sInfo) { - if(!array_key_exists($sInfo, $asTypeInfo)) $this->addError('Info "'.$sInfo.'" inconnue'); + if(!array_key_exists($sInfo, $asTypeInfo)) self::addError('Info "'.$sInfo.'" inconnue'); else $asResult[$sType][$sInfo] = $asTypeInfo[$sInfo]; } if($bUnique) $asResult[$sType] = $asResult[$sType][$sInfo]; @@ -2083,6 +2087,19 @@ class Databap extends PhpObject return $this->getJsonPostResult($bSuccess, $sDesc); } + public function editChatMessage($iRefMsgId, $sMessage) + { + $bSuccess = false; + $sDesc = ''; + $asRefMsg = $this->oMySql->selectRow(self::MSG_TABLE, $iRefMsgId); + if($asRefMsg['type'] == self::MESSAGE_USER && $asRefMsg[$this->oMySql::getId(self::USER_TABLE)] == $this->getUserId()) { + $bSuccess = $this->addMessage($sMessage, $asRefMsg['type'], $asRefMsg['id_channel'], $this->getUserId(), $iRefMsgId); + } + else $sDesc = 'Wrong user ID'; + + return $this->getJsonPostResult($bSuccess, $sDesc); + } + private function getJsonMessage($asData) { return self::JSON_PREFIX.$this->jsonConvert($asData); @@ -2102,7 +2119,7 @@ class Databap extends PhpObject $sFrom = $asUserFrom['name'].' '; $sTo = $asUserTo['name'].' <'.$asUserTo['email'].'>'; - $sMessage .= "\n\n\n".'Ne répondez pas à ce mail. Connectez-vous sur Databap.'; + $sMessage .= "\n\n\n".'Ne répondez pas à ce mail. Connectez-vous sur Databap.'; $sResult = ToolBox::sendMail($sFrom, 'Databap PM', $sMessage, $sTo, array(), false); $bSuccess = ($sResult==ToolBox::MAIL_SUCCESS); @@ -2110,7 +2127,7 @@ class Databap extends PhpObject return $bSuccess; } - private function addMessage($sMessage, $sType, $iChanId, $iUserId=0) + private function addMessage($sMessage, $sType, $iChanId, $iUserId=0, $iRefMsgId=0) { $bResult = false; $iUserId = ($iUserId>0)?$iUserId:$this->getUserId(); @@ -2121,6 +2138,7 @@ class Databap extends PhpObject MySqlManager::getId(self::CHAN_TABLE) => $iChanId, MySqlManager::getText(self::MSG_TABLE) => $sMessage, 'type' => $sType, + 'id_message_ref' => $iRefMsgId, 'date' => 'CURDATE()'); $bResult = $this->oMySql->insertRow(self::MSG_TABLE, $asInsert); } @@ -2153,7 +2171,7 @@ class Databap extends PhpObject $iCurTimeStamp = time(); $sCurDate = date(Databap::DATE_SQL_FORMAT, $iCurTimeStamp); $sLimitDate = date(Databap::DATE_SQL_FORMAT, $iCurTimeStamp - $this->getUserOptionValue(self::OPT_CHAT_HISTO)*24*60*60); - $asInfo = array('select' => array($sMsgTableChanIdCol, $sMsgIdCol, $sMsgTextCol, 'type', $sMsgTableLed, 'first_name', 'last_name', $sUserIdCol, 'nickname'), + $asInfo = array('select' => array($sMsgTableChanIdCol, $sMsgIdCol, $sMsgTextCol, 'type', 'id_message_ref', $sMsgTableLed, 'first_name', 'last_name', $sUserIdCol, 'nickname'), 'from' => self::CONN_TABLE, 'joinOn' => array( self::MSG_TABLE =>array($sMsgTableChanIdCol, '=', $sConnTableChanIdCol), self::USER_TABLE=>array($sUserTableUserIdCol, '=', $sMsgTableUserIdCol)), @@ -2193,6 +2211,7 @@ class Databap extends PhpObject $asMessages['messages'][$iMessageId]['id_user'] = $iUserId; $asMessages['messages'][$iMessageId]['message'] = $asMessageInfo[$sMsgTextCol]; $asMessages['messages'][$iMessageId]['msg_class'] = $sMessageType; + $asMessages['messages'][$iMessageId]['id_message_ref'] = (int) $asMessageInfo['id_message_ref']; $asMessages['messages'][$iMessageId]['date'] = self::getDateFormat($asMessageInfo['led'], self::DATE_FORMAT); $asMessages['messages'][$iMessageId]['time'] = self::getDateFormat($asMessageInfo['led'], self::TIME_FORMAT); $asMessages['messages'][$iMessageId]['name'] = self::getNameFormat($asMessageInfo['first_name'], $asMessageInfo['last_name']); diff --git a/index.php b/index.php index 7113efe..ad0938a 100755 --- a/index.php +++ b/index.php @@ -43,7 +43,7 @@ $sTitle = isset($_POST['title'])?$_POST['title']:''; $sDescription = isset($_POST['description'])?$_POST['description']:''; $sLink = isset($_REQUEST['link_escaped'])?$_REQUEST['link_escaped']:''; $sKeyWords = isset($_REQUEST['keywords'])?$_REQUEST['keywords']:''; -$sMessage = isset($_POST['message'])?$_POST['message']:''; +$sMessage = isset($_REQUEST['message'])?$_REQUEST['message']:''; $sChan = isset($_REQUEST['chan'])?$_REQUEST['chan']:''; $asAttendees = isset($_REQUEST['attendees'])?$_REQUEST['attendees']:''; $bFirstConn = isset($_GET['first_conn'])?$_GET['first_conn']:false; @@ -69,7 +69,7 @@ if($bUserOk && $sAction!=Databap::EXT_ACCESS) { //if expected page, relocate //$oDatabap->redirectExpectedPage(); - + //loading data if($sAction!='') { @@ -163,6 +163,9 @@ if($bUserOk && $sAction!=Databap::EXT_ACCESS) case 'add_message': $sResult = $oDatabap->addChatMessage($sMessage, $sChan); break; + case 'edit_message': + $sResult = $oDatabap->editChatMessage($iMessageId, $sMessage); + break; case 'messages': $sResult = $oDatabap->getMessages($iMessageId); break; @@ -265,7 +268,7 @@ else { //$oDatabap->setExpectedPage($_SERVER['REQUEST_URI']); $sResult = $oDatabap->getLogonPage($sToken==''); - + //TODO delete in v1.0.0 if($_SERVER['QUERY_STRING']!='') header('Location:'.$_GET['serv_name']); } @@ -275,4 +278,4 @@ $sDebug = ob_get_clean(); if(Settings::DEBUG && $sDebug!='') $oDatabap->addUncaughtError($sDebug); echo $sResult; -?> \ No newline at end of file +?> diff --git a/masks/chat.html b/masks/chat.html index 5ec6bf1..810586e 100755 --- a/masks/chat.html +++ b/masks/chat.html @@ -754,6 +754,10 @@ function refresh_chat(bReset) var bReset = (typeof bReset != 'undefined' && bReset == true); self.tmp('scrolling', (!bReset && !databap.isScrollBarAtBottom())); if(typeof oChatTimer != "undefined") clearTimeout(oChatTimer); + + //reboot at least once a day + if(new Date(self.consts.time).getDate() != (new Date()).getDate()) self.refresh(); + if(databap.vars.current_page == 'chat') { if(!databap.vars.loading) @@ -781,6 +785,7 @@ function refresh_chat(bReset) result.messages, function(id_message, message_info) { + message_info.id = id_message; addMessage(message_info, bReset); } ); @@ -823,7 +828,7 @@ function addMessage(message_info, bReset) message_info.nickname = message_info.nickname || ''; var sChanKeyName = message_info.id_chan; - var sMsgPrefix = ''+message_info.nickname+'>'; + var sMsgPrefix = ''+message_info.nickname+''; var msg_body = ''; var sUnreadChanName, iUnreadCount; var bSystemMsg = false; @@ -833,8 +838,15 @@ function addMessage(message_info, bReset) switch(message_info.msg_class) { case databap.consts.msg_types.user: - msg_body = sMsgPrefix+''+message_info.message+''; - sNotif = message_info.nickname+' : '+message_info.message; + if(message_info.id_message_ref) { //edit user message + let $Msg = databap.getMainElem('#chat_messages').find('p.U[data-id='+message_info.id_message_ref+']'); + $Msg.find('.msg_txt').text(message_info.message); + $Msg.find('.status').show().text('modifié'); + } + else { + msg_body = sMsgPrefix+''+message_info.message+''; + sNotif = message_info.nickname+' : '+message_info.message; + } break; case databap.consts.msg_types.news: databap.tmp('get_news', true); @@ -864,7 +876,7 @@ function addMessage(message_info, bReset) slicePos = message_info.message.indexOf(' '); msgTargetUser = message_info.message.substr(1, slicePos - 1); var msg = message_info.message.slice(slicePos + 1); - msg_body = ''+message_info.nickname+' @'+msgTargetUser+'>'+msg+''; + msg_body = ''+message_info.nickname+' @'+msgTargetUser+''+msg+''; sNotif = message_info.nickname+' @'+msgTargetUser+' : '+msg; break; case databap.consts.msg_types.nick: @@ -939,13 +951,17 @@ function addMessage(message_info, bReset) } //Adding message to channel panel - $Message = $('

', {'class':message_info.msg_class+' class_'+sChanKeyName+' hide round_right'}) + $Message = $('

', {'class':message_info.msg_class+' class_'+sChanKeyName+' hide round_right', 'data-id':message_info.id}) .append($('', {'class':'time'}).text(((message_info.date==databap.consts.cur_date)?'':message_info.date+' - ')+message_info.time)) - .append($Msg); + .append($Msg) + .append($('', {'class':'status'})); $Message.find('.chan_link').click(function(){joinChan($(this).find('.chan_text').text());}); $Message.find('.user').click(setPm); databap.getMainElem('#chat_messages').append($Message); + //Edit own message + $Message.find('.editable').hover(toggleEditButton).click(editMessage); + //Unread messages if(!bReset && !bSystemMsg /* && message_info.id_user!=databap.vars.user_id */) { @@ -972,6 +988,48 @@ function addMessage(message_info, bReset) } } +function toggleEditButton() +{ + let $Editable = $(this); //.editable + let $EditBtn = $Editable.next('.edit-btn'); + if($EditBtn.length > 0) $EditBtn.remove(); + else $Editable.after($('', {'class':'text edit-btn'}).append($('', {'class': 'fa fa-fw fa-c-edit'}))); +} + +function editMessage() +{ + let $Editable = $(this); + if($Editable.prop('contenteditable') != 'true') + { + $Editable + .data('backup', $Editable.text()) + .prop('contenteditable', 'true') + .focus(); + + $Editable.on('focusout keydown', function(e) { + if(e.type == 'focusout' || e.which == 13) { + e.preventDefault(); + $(this).prop('contenteditable', 'false'); + databap.getInfo + ( + 'edit_message', + function(asResult) + { + refresh_chat(); + $MsgInput.focus(); + }, + {message_id: $Editable.parents('p.U').data('id'), message: $Editable.text()}, + 'json', + function(textStatus) + { + databap.showError(textStatus); + } + ); + } + }); + } +} + function toggleImages() { databap.vars2('opt_chat_images', !databap.vars2('opt_chat_images')); diff --git a/masks/index.html b/masks/index.html index 52057c4..45521ab 100755 --- a/masks/index.html +++ b/masks/index.html @@ -23,8 +23,6 @@ Databap -