<?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/>. /** * The mynotes block helper functions and callbacks * * @package block_mynotes * @author Gautam Kumar Das<gautam.arg@gmail.com> */ defined('MOODLE_INTERNAL') || die(); class block_mynotes_manager { public $perpage = 5; private $config = null; /* * Constructor. */ public function __construct() { $this->config = get_config('block_mynotes'); $this->perpage = $this->config->mynotesperpage; } /** * Returns matched mynotes * * @param int $page * @return array */ public function get_mynotes($options) { global $DB, $CFG, $USER, $OUTPUT; $page = (!isset($options->page) || !$options->page) ? 0 : $options->page; $perpage = $this->perpage; $params = array(); $start = $page * $perpage; $ufields = 'u.id'; $where = ' m.userid = :userid'; $params['userid'] = $USER->id; /* if (isset($options->contextarea) && !empty($options->contextarea)) { $where .= ' AND m.contextarea = :contextarea'; $params['contextarea'] = $options->contextarea; } if (isset($options->courseid) && $options->courseid) { $where .= ' AND m.courseid = :courseid'; $params['courseid'] = $options->courseid; } */ if(isset($options->contextid) && $options->contextid){ $where .= ' AND m.contextid = :contextid'; $params['contextid'] = $options->contextid; } $sql = "SELECT $ufields, m.id AS mynoteid, m.content AS ccontent, m.contextarea, m.contextid, m.format AS cformat, m.timecreated AS timecreated, c.fullname as coursename, m.courseid FROM {block_mynotes} m JOIN {user} u ON u.id = m.userid LEFT JOIN {course} c ON c.id = m.courseid WHERE $where ORDER BY m.timecreated DESC"; $strftime = get_string('strftimerecentfull', 'langconfig'); $mynotes = array(); $formatoptions = array('overflowdiv' => true); $start = (isset($options->limitfrom)) ? $options->limitfrom : $start; $rs = $DB->get_recordset_sql($sql, $params, $start, $perpage); foreach ($rs as $u) { $c = new stdClass(); $c->id = $u->mynoteid; $c->userid = $u->id; if ($u->courseid != SITEID) { $c->coursename = html_writer::link(course_get_url($u->courseid), $u->coursename); } else { $c->coursename = ''; } $c->content = $u->ccontent; $c->contextarea = $u->contextarea; $c->format = $u->cformat; $c->timecreated = userdate($u->timecreated, $strftime); $c->content = format_text($c->content, $c->format, $formatoptions); $c->delete = true; $mynotes[] = $c; } $rs->close(); return $mynotes; } /** * Returns count of the mynotes in a table where all the given conditions met. * * @param object $options * @return int The count of records */ public function count_mynotes($options) { global $DB, $USER; $params = array(); // $params ['contextid']= $options->contextid; // $params= $options->contextid; $sql='select COUNT(contextarea) from {block_mynotes} where contextid= :contextid'; $params ['contextid']= $options->contextid; return $DB->count_records_sql($sql,$params); /* $params['userid'] = $USER->id; if (isset($options->contextarea) && !empty($options->contextarea)) { $params['contextarea'] = $options->contextarea; } if (isset($options->contextid) && !empty($options->contextid)) { $params['contextid'] = $options->contextid; } return $DB->count_records('block_mynotes',$params); */ } /* * Returns paging bar for mynotes * * @param object $options must contain properties(contextid, count, page, perpage) * @return html */ public function get_pagination($options) { global $OUTPUT; $baseurl = new moodle_url('/blocks/mynotes/mynotes_ajax.php', array( 'contextid' => $options->contextid) ); return $OUTPUT->paging_bar($options->count, $options->page, $this->perpage, $baseurl); } /* * Adding new record of mynote. * * @return object of single mynote record if insert to DB else false */ public function addmynote($context, $contextarea, $course, $content,$timer, $format = FORMAT_MOODLE) { global $CFG, $DB, $USER, $OUTPUT; $content=$content.$timer; $newnote = new stdClass; $newnote->contextid = $context->id; $newnote->contextarea = $contextarea; $newnote->content = $content; $newnote->courseid = $course->id; $newnote->format = $format; $newnote->userid = $USER->id; $newnote->timecreated = time(); if ($cmtid = $DB->insert_record('block_mynotes', $newnote)) { $newnote->id = $cmtid; $newnote->content = format_text($newnote->content, $newnote->format, array('overflowdiv' => true)); $newnote->timecreated = userdate($newnote->timecreated, get_string('strftimerecentfull', 'langconfig')); $newnote->coursename = ($newnote->courseid == SITEID) ? '' : $course->fullname; if (!empty($newnote->coursename)) { $newnote->coursename = html_writer::link(course_get_url($course), $newnote->coursename); } return $newnote; } else { return false; } } /* * Find all available context areas which is used to store and retrieve mynotes. * * @return array */ public function get_available_contextareas() { return array( // 'site' => get_string('site', 'block_mynotes'), // 'course' => get_string('course', 'block_mynotes'), // 'mod' => get_string('mod', 'block_mynotes'), 'user' => get_string('user', 'block_mynotes'), ); } /* * Find context area using context level. * * @param object $context * @retrun string */ public function get_current_tab($context, $page) { /* if ($page->url->compare(new moodle_url('/user/view.php'), URL_MATCH_BASE)) { return 'user'; } else if ($page->url->compare(new moodle_url('/user/profile.php'), URL_MATCH_BASE)) { return 'user'; } else if ($context->contextlevel == CONTEXT_SYSTEM) { return 'site'; } else if ($context->contextlevel == CONTEXT_COURSE) { if ($context->instanceid == SITEID) { return 'site'; } return 'course'; } else if ($context->contextlevel == CONTEXT_MODULE) { return 'mod'; } else if ($context->contextlevel == CONTEXT_USER) { return 'user'; } else if ($context->contextlevel == CONTEXT_BLOCK) { $parent = $context->get_parent_context(); if ($parent->contextlevel == CONTEXT_COURSE) { return 'course'; } else if ($parent->contextlevel == CONTEXT_MODULE) { return 'mod'; } } */ return 'user'; } /** * Delete a note * * @param int $mynoteid * @return bool */ public function delete($mynoteid) { global $DB, $USER; if (!$mynote = $DB->get_record('block_mynotes', array('id' => $mynoteid))) { throw new mynotes_exception('deletefailed', 'block_mynotes'); } if ($USER->id != $mynote->userid) { throw new mynotes_exception('nopermissiontodelete', 'block_mynotes'); } return $DB->delete_records('block_mynotes', array('id' => $mynoteid)); } } /** * Mynotes exception class */ class mynotes_exception extends moodle_exception { }