Seditio Source
Root |
./othercms/elxis_5.3_atlas_rev2452/modules/mod_adminmessages/mod_adminmessages.php
<?php
/**
* @version        $Id: mod_adminmessages.php 2183 2019-03-25 08:12:14Z IOS $
* @package        Elxis
* @subpackage    Module Administration messages
* @copyright    Copyright (c) 2006-2019 Elxis CMS (http://www.elxis.org). All rights reserved.
* @license        Elxis Public License ( http://www.elxis.org/elxis-public-license.html )
* @author        Elxis Team ( http://www.elxis.org )
* @description     Elxis CMS is free software. Read the license for copyright notices and details
*/

defined('_ELXIS_') or die ('Direct access to this location is not allowed');


if (!
class_exists('modadminMsgs', false)) {
    class
modadminMsgs {

        private
$hide = false;

       
/*********************/
        /* MAGIC CONSTRUCTOR */
        /*********************/
       
public function __construct() {
            if (
ELXIS_INNER == 1) {
               
$this->hide = true;
            } else {
               
$segs = eFactory::getURI()->getSegments();
               
$n = count($segs);
                if (
$n > 0) {
                   
$last_segment = $segs[$n - 1];
                    if (
in_array($last_segment, array('add.html', 'edit.html', 'new.html', 'config.html', 'configuration.html', 'settings.html', 'config.html'))) { $this->hide = true; }
                }                
            }
        }


       
/********************/
        /* RUN FOREST, RUN! */
        /********************/
       
public function run() {
            if (!
defined('ELXIS_ADMIN')) { return; }
            if (
$this->hide) { return; }

           
$elxis = eFactory::getElxis();
           
$eLang = eFactory::getLang();
           
$eDoc = eFactory::getDocument();
           
$eDate = eFactory::getDate();
           
elxisLoader::loadFile('includes/libraries/elxis/form5.class.php');

           
$eDoc->addFontAwesome();
           
$js = $elxis->secureBase().'/modules/mod_adminmessages/inc/adminmessages.js';
           
$eDoc->addScriptLink($js);

           
$options = array('toid' => $elxis->user()->uid, 'read' => 0, 'delbyto' => 0);
           
$msgObj = $elxis->obj('messages');
           
$num_unread = $msgObj->countMessages($options);

            if (
$num_unread > 0) {
               
$options = array('toid' => $elxis->user()->uid, 'read' => 0, 'delbyto' => 0, 'userdata' => 1, 'convertlinks' => 1);
               
$rows = $msgObj->getMessages($options);
            } else {
               
$rows = false;
            }

           
$except_uid = $elxis->user()->uid;
           
$recipients = $this->getRecipients($except_uid, $elxis, $eLang);

            if (
$num_unread > 0) {
               
$title = ($num_unread == 1) ? $eLang->get('HAVE_NEW_MESSAGE') : sprintf($eLang->get('HAVE_NEW_MESSAGES'), $num_unread);
               
$aclass = 'amsgs_icon amsgs_iconur';
               
$class = 'amsgs_mark';
            } else {
               
$title = $eLang->get('HAVE_NO_MESSAGES');
               
$aclass = 'amsgs_icon';
               
$class = 'amsgs_nomark';
            }
            echo
'<div class="elx5_cptoptool">'."\n";
            echo
'<a href="javascript:void(null);" onclick="elx5ModalOpen(\'amsgs\');" title="'.$title.'" class="'.$aclass.'" id="amsgsMarkLink"><i class="fas fa-envelope"></i><span class="'.$class.'" id="amsgsMarkNumber">'.$num_unread.'</span></a>';
            echo
"</div>\n";

           
$htmlHelper = $elxis->obj('html');

            echo
$htmlHelper->startModalWindow('<i class="fas fa-envelope-open"></i> '.$eLang->get('MESSAGES'), 'amsgs');

            echo
'<ul class="amsgs_messages" id="amsgs_messages">'."\n";
            if (
$rows) {
               
$now = time();
               
$relpath = 'media/images/avatars/';
                if (
defined('ELXIS_MULTISITE')) {
                    if (
ELXIS_MULTISITE > 1) { $relpath = 'media/images/site'.ELXIS_MULTISITE.'/avatars/'; }
                }
                foreach (
$rows as $row) {
                   
$fdate = $this->friendlyDate($row->created, $now, $eDate, $eLang);
                   
$avatar = $this->getAvatar($row->from_avatar, $row->fromid, $row->fromname, $row->msgtype, $relpath, $elxis);
                   
$fname = trim(strtolower($row->fromname));
                    if ((
$fname == 'elxis') || ($fname == 'system') || ($fname == '')) {
                       
$from_txt = $eLang->get('SYSTEM');
                    } else {
                       
$from_txt = $row->fromname;
                    }
                   
$threadid = ($row->replyto > 0) ? $row->replyto : $row->id;

                    echo
'<li id="amsgs_message'.$row->id.'" data-thread="'.$threadid.'">';
                    echo
'<div class="amsgs_side">';
                    echo
'<div class="amsgs_avatar"><img src="'.$avatar.'" alt="icon" /></div>'."\n";
                    echo
'<div class="amsgs_information"><h5>'.$from_txt.'</h5><div>'.$fdate.'</div></div>'."\n";
                    echo
"</div>\n";
                    echo
'<div class="amsgs_main"><div class="amsgs_message">'.$row->message."</div>\n";
                    echo
'<div class="amsgs_actions">';
                    if (
intval($row->fromid) > 0) {
                        echo
'<a href="javascript:void(null);" onclick="aMsgsReply('.$row->fromid.', '.$threadid.');"><i class="fas fa-reply"></i> '.$eLang->get('REPLY').'</a> | ';
                    }
                    echo
'<a href="javascript:void(null);" onclick="aMsgsDeleteThread('.$threadid.');"><i class="fas fa-trash-alt"></i> '.$eLang->get('DELETE').'</a></div>'."\n";
                    echo
"</div>\n";
                    echo
"</li>\n";
                }
                echo
'<li id="amsgs_message0" class="elx5_invisible" data-thread="0">'.$eLang->get('HAVE_NO_MESSAGES')."</li>\n";
            } else {
//no messages
               
echo '<li id="amsgs_message0" class="amsgs_nomessages" data-thread="0">'.$eLang->get('HAVE_NO_MESSAGES')."</li>\n";
            }
            echo
"</ul>\n";

           
$lng = $elxis->getConfig('LANG');
            echo
'<a href="'.$elxis->makeURL($lng.':user:pms/').'" target="_blank" class="amsgs_viewthreads">'.$eLang->get('MESSAGE_THREADS').' <i class="fas fa-chevron-right"></i></a>'."\n";

           
$inlink = $elxis->makeAURL('cpanel:ajax', 'inner.php', true);
           
$form = new elxis5Form(array('idprefix' => 'amsgsf', 'labelclass' => 'elx5_label', 'sideclass' => 'elx5_labelside'));
           
$form->openForm(array('name' => 'amsgsform', 'method' =>'post', 'action' => $inlink, 'id' => 'amsgsform', 'onsubmit' => 'return false;'));
           
$form->openFieldset($eLang->get('NEW_MESSAGE'));
           
$foptions = array();
           
$foptions[] = $form->makeOption('0', '--- '.$eLang->get('SELECT').' ---');
            if (
$recipients) {
                if (
count($recipients) < 101) {
                   
$foptions[] = $form->makeOption('-1', '- '.$eLang->get('ALL_USERS').' -');
                }
                foreach (
$recipients as $rcpt) { $foptions[] = $form->makeOption($rcpt['uid'], $rcpt['name']); }
            }
           
$form->addSelect('toid', $eLang->get('RECIPIENT'), '0', $foptions, array('onchange' => 'document.getElementById(\'amsgsfthread\').value = \'0\';'));
           
$form->addTextarea('message', '', $eLang->get('MESSAGE'), array('required' => 'required'));
           
$form->addHidden('thread', '0');
           
$form->addHTML('<div class="elx5_vpad">');
           
$form->addButton('sendmsg', $eLang->get('SEND_MESSAGE'), 'button', array('class' => 'elx5_btn elx5_sucbtn', 'onclick' => 'aMsgsSendMessage();', 'data-waitlng' => $eLang->get('PLEASE_WAIT'), 'data-sendlng' => $eLang->get('SEND_MESSAGE')));
           
$form->addHTML('</div>');

           
$form->closeFieldset();
           
$form->closeForm();

            echo
$htmlHelper->endModalWindow();
        }


       
/******************************/
        /* HUMAN FRIENDLY FORMAT DATE */
        /******************************/
       
private function friendlyDate($created, $now, $eDate, $eLang) {
           
$ts = strtotime($created);
            if (
$now - $ts < 520000) {
               
$fdate = $eDate->formatTS($ts, '%A %H:%M');
            } else if (
strpos($created, gmdate('Y')) === 0) {
               
$fdate = $eDate->formatTS($ts, '%d %B %H:%M');
            } else {
               
$fdate = $eDate->formatTS($ts, $eLang->get('DATE_FORMAT_4'));
            }
            return
$fdate;
        }


       
/******************************/
        /* GET USER'S AVATAR FULL URL */
        /******************************/
       
private function getAvatar($avataricon, $fromid, $fromname, $msgtype, $relpath, $elxis) {
            if ((
trim($avataricon) != '') && file_exists(ELXIS_PATH.'/'.$relpath.$avataricon)) {
                return
$elxis->secureBase(true).'/'.$relpath.$avataricon;
            }
            if ((
trim($avataricon) != '') && preg_match('#^(http(s)?\:\/\/)#', $avataricon)) {
                return
$avataricon;
            }
            if (
$fromid > 0) {
                return
$elxis->secureBase(true).'/modules/mod_adminmessages/inc/user32.png';
            }

           
$fname = strtolower($fromname);
            if ((
$fname == 'elxis.org') || ($fname == 'elxis') || ($fname == 'system') || ($fname == 'elxis team')) {
                return
$elxis->secureBase(true).'/modules/mod_adminmessages/inc/elxis32.png';
            }
            if ((
$fname == 'ios') || ($fname == 'is open source')) {
                return
$elxis->secureBase(true).'/modules/mod_adminmessages/inc/ios32.png';
            }
            if (
$msgtype == '') {
                return
$elxis->secureBase(true).'/modules/mod_adminmessages/inc/elxis32.png';
            }

           
$msgtype = strtolower($msgtype);
            switch (
$msgtype) {
                case
'config':
                   
$out = $elxis->secureBase(true).'/modules/mod_adminmessages/inc/config32.png';
                break;
                case
'info':
                   
$out = $elxis->secureBase(true).'/modules/mod_adminmessages/inc/info32.png';
                break;
                case
'warning':
                   
$out = $elxis->secureBase(true).'/modules/mod_adminmessages/inc/warning32.png';
                break;
                case
'help':
                   
$out = $elxis->secureBase(true).'/modules/mod_adminmessages/inc/help32.png';
                break;
                default:
                    if (
file_exists(ELXIS_PATH.'/includes/icons/nautilus/64x64/'.$msgtype.'.png')) {
                       
$out = $elxis->secureBase(true).'/includes/icons/nautilus/64x64/'.$msgtype.'.png';
                    } else {
                       
$out = $elxis->secureBase(true).'/modules/mod_adminmessages/inc/info32.png';
                    }
                break;
            }
            return
$out;
        }


       
/**************************/
        /* GET RECIPIENTS (USERS) */
        /**************************/
       
private function getRecipients($except_uid, $elxis, $eLang) {
           
$db = eFactory::getDB();

           
$except_uid = (int)$except_uid;
           
$realname = $elxis->getConfig('REALNAME');
           
$orderby_col = ($realname == 1) ? 'firstname' : 'uname';

           
$sql = "SELECT ".$db->quoteId('uid').", ".$db->quoteId('firstname').", ".$db->quoteId('lastname').", ".$db->quoteId('uname')." FROM ".$db->quoteId('#__users')
            .
"\n WHERE ".$db->quoteId('block')." = 0 ORDER BY ".$db->quoteId($orderby_col)." ASC";
           
$stmt = $db->prepareLimit($sql, 0, 500);
           
$stmt->execute();
           
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
            if (!
$rows) { return array(); }

           
$recipients = array();
            foreach (
$rows as $row) {
                if (
$row['uid'] == $except_uid) { continue; }
                if (
$realname == 1) {
                   
$recipients[] = array('uid' => $row['uid'], 'name' => $row['firstname'].' '.$row['lastname']);
                } else {
                   
$recipients[] = array('uid' => $row['uid'], 'name' => $row['uname']);
                }
            }
            return
$recipients;
        }

    }
}


$modamsgs = new modadminMsgs();
$modamsgs->run();
unset(
$modamsgs);

?>