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 ++++++++++++++++++++++++++++++++++++++ classes/ui_tables_plugin.php | 166 ---------------------------------- 2 files changed, 184 insertions(+), 166 deletions(-) create mode 100644 classes/output/services_table.php delete mode 100644 classes/ui_tables_plugin.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 diff --git a/classes/ui_tables_plugin.php b/classes/ui_tables_plugin.php deleted file mode 100644 index f65d3fe..0000000 --- a/classes/ui_tables_plugin.php +++ /dev/null @@ -1,166 +0,0 @@ -. - -/** - * Describes the plugin tables. - * - * @copyright 2018 'Valentin Popov' - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @package local_webhooks - */ - -defined('MOODLE_INTERNAL') || die(); - -require_once($CFG->dirroot . '/local/webhooks/lib.php'); -require_once($CFG->libdir . '/tablelib.php'); - -/** - * Display the list of services table. - * - * @copyright 2018 'Valentin Popov' - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @package local_webhooks - */ -class local_webhooks_services_table extends table_sql { - /** - * @var string $mainpage - */ - protected static $mainpage = '/local/webhooks/index.php'; - - /** - * @var string $editorpage - */ - protected static $editorpage = '/local/webhooks/service.php'; - - /** - * Constructor. - * - * @param string $uniqueid - * - * @throws \coding_exception - */ - public function __construct($uniqueid = '') { - parent::__construct($uniqueid); - $this->define_table_columns(); - $this->define_table_configs(); - } - - /** - * Query the database for results to display in the table. - * - * @param int $pagesize - * @param boolean $useinitialsbar - * - * @throws \dml_exception - */ - public function query_db($pagesize = 0, $useinitialsbar = false) { - $this->rawdata = local_webhooks_api::get_services(array(), $this->get_page_start(), $this->get_page_size()); - } - - /** - * Defines the basic settings of the table. - */ - public function define_table_configs() { - $this->collapsible(false); - $this->is_downloadable(false); - $this->no_sorting('actions'); - $this->pageable(true); - } - - /** - * Defines the main columns and table headers. - * - * @throws \coding_exception - */ - public function define_table_columns() { - $columns = array( - 'name', - 'point', - 'events', - 'actions', - ); - - $headers = array( - new lang_string('name', 'moodle'), - new lang_string('url', 'moodle'), - new lang_string('edulevel', 'moodle'), - new lang_string('actions', 'moodle'), - ); - - $this->define_columns($columns); - $this->define_headers($headers); - } - - /** - * Specifies the display of a column with actions. - * - * @param object $row - * - * @return string - * @throws \coding_exception - * @throws \moodle_exception - */ - public function col_actions($row) { - global $OUTPUT; - - $hideshowicon = 't/show'; - $hideshowstring = new lang_string('enable', 'moodle'); - - if (!empty($row->status)) { - $hideshowicon = 't/hide'; - $hideshowstring = new lang_string('disable', 'moodle'); - } - - /* Link for activation / deactivation */ - $hideshowlink = new moodle_url(self::$mainpage, array('hideshowid' => $row->id, 'sesskey' => sesskey())); - $hideshowitem = $OUTPUT->action_icon($hideshowlink, new pix_icon($hideshowicon, $hideshowstring)); - - /* Link for editing */ - $editlink = new moodle_url(self::$editorpage, array('serviceid' => $row->id, 'sesskey' => sesskey())); - $edititem = $OUTPUT->action_icon($editlink, new pix_icon('t/edit', new lang_string('edit', 'moodle'))); - - /* Link to remove */ - $deletelink = new moodle_url(self::$mainpage, array('deleteid' => $row->id, 'sesskey' => sesskey())); - $deleteitem = $OUTPUT->action_icon($deletelink, new pix_icon('t/delete', new lang_string('delete', 'moodle'))); - - return $hideshowitem . $edititem . $deleteitem; - } - - /** - * Specifies the display of a column with events. - * - * @param object $row - * - * @return number - */ - public function col_events($row) { - return count($row->events); - } - - /** - * Specifies the display of the column with the service name. - * - * @param object $row - * - * @return string - * @throws \moodle_exception - */ - public function col_name($row) { - $link = new moodle_url(self::$editorpage, array('serviceid' => $row->id, 'sesskey' => sesskey())); - - return html_writer::link($link, $row->name); - } -} \ No newline at end of file -- cgit v1.2.3