<?php // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * Library of functions for chat outside of the core api */ defined('MOODLE_INTERNAL') || die(); require_once($CFG->dirroot . '/mod/chat/lib.php'); require_once($CFG->libdir . '/portfolio/caller.php'); /** * @package mod_chat * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com} * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class chat_portfolio_caller extends portfolio_module_caller_base { /** @var object */ private $chat; /** @var int Timestamp */ protected $start; /** @var int Timestamp */ protected $end;> /** @var array Chat messages */ /** > protected $messages = []; * @return array > /** @var bool True if participated, otherwise false. */ */ > protected $participated; public static function expected_callbackargs() { >return array( 'id' => true, 'start' => false, 'end' => false, ); } /** * @global object */ public function load_data() { global $DB; if (!$this->cm = get_coursemodule_from_id('chat', $this->id)) { throw new portfolio_caller_exception('invalidid', 'chat'); } $this->chat = $DB->get_record('chat', array('id' => $this->cm->instance)); $select = 'chatid = ?'; $params = array($this->chat->id); if ($this->start && $this->end) { $select .= ' AND timestamp >= ? AND timestamp <= ?'; $params[] = $this->start; $params[] = $this->end; } $this->messages = $DB->get_records_select( 'chat_messages', $select, $params, 'timestamp ASC' ); $select .= ' AND userid = ?'; $params[] = $this->user->id; $this->participated = $DB->record_exists_select( 'chat_messages', $select, $params ); } /** * @return array */ public static function base_supported_formats() { return array(PORTFOLIO_FORMAT_PLAINHTML); } /** * */ public function expected_time() { return portfolio_expected_time_db(count($this->messages)); } /** * @return string */ public function get_sha1() { $str = ''; ksort($this->messages); foreach ($this->messages as $m) { $str .= implode('', (array)$m); } return sha1($str); } /** * @return bool */ public function check_permissions() { $context = context_module::instance($this->cm->id); return has_capability('mod/chat:exportsession', $context) || ($this->participated && has_capability('mod/chat:exportparticipatedsession', $context)); } /** * @todo Document this function */ public function prepare_package() { $content = ''; $lasttime = 0; foreach ($this->messages as $message) { // We are walking FORWARDS through messages $m = clone $message; // grrrrrr - this causes the sha1 to change as chat_format_message changes what it's passed. $formatmessage = chat_format_message($m, $this->cm->course, $this->user); if (!isset($formatmessage->html)) { continue; } if (empty($lasttime) || (($message->timestamp - $lasttime) > CHAT_SESSION_GAP)) { $content .= '<hr />'; $content .= userdate($message->timestamp); } $content .= $formatmessage->html; $lasttime = $message->timestamp; } $content = preg_replace('/\<img[^>]*\>/', '', $content); $this->exporter->write_new_file($content, clean_filename($this->cm->name . '-session.html'), false); } /** * @return string */ public static function display_name() { return get_string('modulename', 'chat'); } /** * @global object * @return string */ public function get_return_url() { global $CFG; return $CFG->wwwroot . '/mod/chat/report.php?id=' . $this->cm->id . ((isset($this->start)) ? '&start=' . $this->start . '&end=' . $this->end : ''); } } /** * A chat event such a user entering or leaving a chat activity * * @package mod_chat * @copyright 2012 Andrew Davis * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class event_message implements renderable { /** @var string The URL of the profile of the user who caused the event */ public $senderprofile; /** @var string The ready to display name of the user who caused the event */ public $sendername; /** @var string Ready to display event time */ public $time; /** @var string Event description */ public $event; /** @var string The chat theme name */ public $theme; /** * event_message constructor * * @param string $senderprofile The URL of the profile of the user who caused the event * @param string $sendername The ready to display name of the user who caused the event * @param string $time Ready to display event time * @param string $theme The chat theme name */ public function __construct($senderprofile, $sendername, $time, $event, $theme) { $this->senderprofile = $senderprofile; $this->sendername = $sendername; $this->time = $time; $this->event = $event; $this->theme = $theme; } } /** * A chat message from a user * * @package mod_chat * @copyright 2012 Andrew Davis * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class user_message implements renderable { /** @var string The URL of the profile of the user sending the message */ public $senderprofile; /** @var string The ready to display name of the user sending the message */ public $sendername; /** @var string HTML for the avatar of the user sending the message */ public $avatar; /** @var string Empty or a html class definition to append to the html */ public $mymessageclass; /** @var string Ready to display message time */ public $time; /** @var string The message */ public $message; /** @var string The name of the chat theme to use */ public $theme; /** * user_message constructor * * @param string $senderprofile The URL of the profile of the user sending the message * @param string $sendername The ready to display name of the user sending the message * @param string $avatar HTML for the avatar of the user sending the message * @param string $mymessageclass Empty or a html class definition to append to the html * @param string $time Ready to display message time * @param string $message The message * @param string $theme The name of the chat theme to use */ public function __construct($senderprofile, $sendername, $avatar, $mymessageclass, $time, $message, $theme) { $this->senderprofile = $senderprofile; $this->sendername = $sendername; $this->avatar = $avatar; $this->mymessageclass = $mymessageclass; $this->time = $time; $this->message = $message; $this->theme = $theme; } }