From 9c2eefcaa5cb1c73ded6bdd72ceb4704805ec322 Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Sun, 12 May 2019 04:05:20 +0400 Subject: Added a class table for list services Signed-off-by: Valentin Popov --- classes/output/services_table.php | 184 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 184 insertions(+) create mode 100644 classes/output/services_table.php (limited to 'classes/output/services_table.php') diff --git a/classes/output/services_table.php b/classes/output/services_table.php new file mode 100644 index 0000000..4956f02 --- /dev/null +++ b/classes/output/services_table.php @@ -0,0 +1,184 @@ +. + +namespace local_webhooks\output; + +defined('MOODLE_INTERNAL') || die(); + +global $CFG; + +require_once($CFG->dirroot . '/local/webhooks/classes/local/api.php'); +require_once($CFG->libdir . '/tablelib.php'); + +use html_writer; +use lang_string; +use local_webhooks\local\api; +use moodle_url; +use pix_icon; +use stdClass; +use table_sql; +use function defined; +use function is_int; + +/** + * Class table for list services. + * + * @copyright 2019 'Valentin Popov' + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @package local_webhooks\output + */ +final class services_table extends table_sql { + /** + * URL editor page. + * + * @var string + */ + private static $editorpage = '/local/webhooks/service.php'; + + /** + * URL main page. + * + * @var string + */ + private static $mainpage = '/local/webhooks/index.php'; + + /** + * Class constructor. + * + * @param string $uniqueid + * + * @throws \coding_exception + */ + public function __construct(string $uniqueid) { + parent::__construct($uniqueid); + + $this->define_table_columns(); + $this->define_table_configs(); + } + + /** + * Define the action column. + * + * @param \stdClass $row + * + * @return string + * + * @throws \coding_exception + * @throws \moodle_exception + */ + public function col_actions(stdClass $row): string { + global $OUTPUT; + + $deletelink = new moodle_url(self::$mainpage, ['deleteid' => $row->id, 'sesskey' => sesskey()]); + $deleteitem = $OUTPUT->action_icon($deletelink, new pix_icon('t/delete', new lang_string('delete', 'moodle'))); + + $editlink = new moodle_url(self::$editorpage, ['serviceid' => $row->id, 'sesskey' => sesskey()]); + $edititem = $OUTPUT->action_icon($editlink, new pix_icon('t/edit', new lang_string('edit', 'moodle'))); + + $hideshowlink = new moodle_url(self::$mainpage, ['hideshowid' => $row->id, 'sesskey' => sesskey()]); + $hideshowitem = $OUTPUT->action_icon($hideshowlink, new pix_icon($row->status ? 't/hide' : 't/show', $row->status + ? new lang_string('disable', 'moodle') + : new lang_string('enable', 'moodle') + )); + + return $hideshowitem . $edititem . $deleteitem; + } + + /** + * Define the events column. + * + * @param \stdClass $row + * + * @return int + */ + public function col_events(stdClass $row): int { + $total = count($row->events); + + return is_int($total) ? $total : 0; + } + + /** + * Define the name column. + * + * @param \stdClass $row + * + * @return string + * + * @throws \moodle_exception + */ + public function col_name(stdClass $row): string { + $link = new moodle_url(self::$editorpage, [ + 'serviceid' => $row->id, + 'sesskey' => sesskey(), + ]); + + return html_writer::link($link, $row->name); + } + + /** + * Config table's columns. + * + * @throws \coding_exception + */ + public function define_table_columns() { + $this->define_columns([ + 'name', + 'point', + 'events', + 'actions', + ]); + + $this->define_headers([ + new lang_string('name', 'moodle'), + new lang_string('url', 'moodle'), + new lang_string('edulevel', 'moodle'), + new lang_string('actions', 'moodle'), + ]); + } + + /** + * Config table. + */ + public function define_table_configs() { + $this->collapsible(false); + $this->is_downloadable(false); + $this->no_sorting('actions'); + $this->no_sorting('events'); + $this->pageable(true); + } + + /** + * The query for the database. + * + * @param int $pagesize + * @param bool $useinitialsbar + * + * @throws \dml_exception + */ + public function query_db($pagesize, $useinitialsbar = true) { + $this->pagesize($pagesize, $pagesize + 1); + + $sort = (string) $this->get_sql_sort(); + $this->rawdata = api::get_services(null, $sort, $this->get_page_start(), $this->get_page_size()); + + $total = api::get_total_count(); + $this->pagesize($pagesize, $total); + + if ($useinitialsbar) { + $this->initialbars($total > $pagesize); + } + } +} \ No newline at end of file -- cgit v1.2.3