[ Index ] |
PHP Cross Reference of Joomla 4.2.2 documentation |
[Summary view] [Print] [Text view]
1 <?php 2 3 /** 4 * @package Joomla.Administrator 5 * @subpackage com_actionlogs 6 * 7 * @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org> 8 * @license GNU General Public License version 2 or later; see LICENSE.txt 9 */ 10 11 namespace Joomla\Component\Actionlogs\Administrator\Model; 12 13 use Joomla\CMS\Component\ComponentHelper; 14 use Joomla\CMS\Factory; 15 use Joomla\CMS\HTML\HTMLHelper; 16 use Joomla\CMS\Language\Text; 17 use Joomla\CMS\Mail\Exception\MailDisabledException; 18 use Joomla\CMS\Mail\MailTemplate; 19 use Joomla\CMS\MVC\Model\BaseDatabaseModel; 20 use Joomla\Component\Actionlogs\Administrator\Helper\ActionlogsHelper; 21 use Joomla\Utilities\IpHelper; 22 use PHPMailer\PHPMailer\Exception as phpMailerException; 23 24 // phpcs:disable PSR1.Files.SideEffects 25 \defined('_JEXEC') or die; 26 // phpcs:enable PSR1.Files.SideEffects 27 28 /** 29 * Methods supporting a list of Actionlog records. 30 * 31 * @since 3.9.0 32 */ 33 class ActionlogModel extends BaseDatabaseModel 34 { 35 /** 36 * Function to add logs to the database 37 * This method adds a record to #__action_logs contains (message_language_key, message, date, context, user) 38 * 39 * @param array $messages The contents of the messages to be logged 40 * @param string $messageLanguageKey The language key of the message 41 * @param string $context The context of the content passed to the plugin 42 * @param integer $userId ID of user perform the action, usually ID of current logged in user 43 * 44 * @return void 45 * 46 * @since 3.9.0 47 */ 48 public function addLog($messages, $messageLanguageKey, $context, $userId = null) 49 { 50 $user = Factory::getUser($userId); 51 $db = $this->getDatabase(); 52 $date = Factory::getDate(); 53 $params = ComponentHelper::getComponent('com_actionlogs')->getParams(); 54 55 if ($params->get('ip_logging', 0)) { 56 $ip = IpHelper::getIp(); 57 58 if (!filter_var($ip, FILTER_VALIDATE_IP)) { 59 $ip = 'COM_ACTIONLOGS_IP_INVALID'; 60 } 61 } else { 62 $ip = 'COM_ACTIONLOGS_DISABLED'; 63 } 64 65 $loggedMessages = array(); 66 67 foreach ($messages as $message) { 68 $logMessage = new \stdClass(); 69 $logMessage->message_language_key = $messageLanguageKey; 70 $logMessage->message = json_encode($message); 71 $logMessage->log_date = (string) $date; 72 $logMessage->extension = $context; 73 $logMessage->user_id = $user->id; 74 $logMessage->ip_address = $ip; 75 $logMessage->item_id = isset($message['id']) ? (int) $message['id'] : 0; 76 77 try { 78 $db->insertObject('#__action_logs', $logMessage); 79 $loggedMessages[] = $logMessage; 80 } catch (\RuntimeException $e) { 81 // Ignore it 82 } 83 } 84 85 try { 86 // Send notification email to users who choose to be notified about the action logs 87 $this->sendNotificationEmails($loggedMessages, $user->name, $context); 88 } catch (MailDisabledException | phpMailerException $e) { 89 // Ignore it 90 } 91 } 92 93 /** 94 * Send notification emails about the action log 95 * 96 * @param array $messages The logged messages 97 * @param string $username The username 98 * @param string $context The Context 99 * 100 * @return void 101 * 102 * @since 3.9.0 103 * 104 * @throws MailDisabledException if mail is disabled 105 * @throws phpmailerException if sending mail failed 106 */ 107 protected function sendNotificationEmails($messages, $username, $context) 108 { 109 $app = Factory::getApplication(); 110 $lang = $app->getLanguage(); 111 $db = $this->getDatabase(); 112 $query = $db->getQuery(true); 113 114 $query 115 ->select($db->quoteName(array('u.email', 'l.extensions'))) 116 ->from($db->quoteName('#__users', 'u')) 117 ->where($db->quoteName('u.block') . ' = 0') 118 ->join( 119 'INNER', 120 $db->quoteName('#__action_logs_users', 'l') . ' ON ( ' . $db->quoteName('l.notify') . ' = 1 AND ' 121 . $db->quoteName('l.user_id') . ' = ' . $db->quoteName('u.id') . ')' 122 ); 123 124 $db->setQuery($query); 125 126 $users = $db->loadObjectList(); 127 128 $recipients = array(); 129 130 foreach ($users as $user) { 131 $extensions = json_decode($user->extensions, true); 132 133 if ($extensions && \in_array(strtok($context, '.'), $extensions)) { 134 $recipients[] = $user->email; 135 } 136 } 137 138 if (empty($recipients)) { 139 return; 140 } 141 142 $extension = strtok($context, '.'); 143 $lang->load('com_actionlogs', JPATH_ADMINISTRATOR); 144 ActionlogsHelper::loadTranslationFiles($extension); 145 $temp = []; 146 147 foreach ($messages as $message) { 148 $m = []; 149 $m['extension'] = Text::_($extension); 150 $m['message'] = ActionlogsHelper::getHumanReadableLogMessage($message); 151 $m['date'] = HTMLHelper::_('date', $message->log_date, 'Y-m-d H:i:s T', 'UTC'); 152 $m['username'] = $username; 153 $temp[] = $m; 154 } 155 156 $templateData = [ 157 'messages' => $temp 158 ]; 159 160 $mailer = new MailTemplate('com_actionlogs.notification', $app->getLanguage()->getTag()); 161 $mailer->addTemplateData($templateData); 162 163 foreach ($recipients as $recipient) { 164 $mailer->addRecipient($recipient); 165 } 166 167 $mailer->send(); 168 } 169 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Wed Sep 7 05:41:13 2022 | Chilli.vc Blog - For Webmaster,Blog-Writer,System Admin and Domainer |