MDL-49650 tool_templatelibrary: New tool for browsing mustache templates
[moodle.git] / admin / tool / templatelibrary / classes / api.php
1 <?php
2 // This file is part of Moodle - http://moodle.org/
3 //
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
17 /**
18  * Class for listing mustache templates.
19  *
20  * @package    tool_templatelibrary
21  * @copyright  2015 Damyon Wiese
22  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23  */
24 namespace tool_templatelibrary;
26 use stdClass;
27 use core_component;
28 use coding_exception;
29 use required_capability_exception;
31 /**
32  * API exposed by tool_templatelibrary
33  *
34  * @copyright  2015 Damyon Wiese
35  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
36  */
37 class api {
39     /**
40      * Return a list of details about installed templates.
41      *
42      * @param string $component Filter the list to a single component.
43      * @param string $search Search string to optionally filter the list of templates.
44      * @return array[string] Where each template is in the form "component/templatename".
45      */
46     public static function list_templates($component = '', $search = '') {
47         global $CFG;
49         $templatedirs = array();
50         $results = array();
52         if ($component != '') {
53             // Just look at one component for templates.
54             $dir = core_component::get_component_directory($component);
55             if (!$dir) {
56                 return $templatedirs;
57             }
59             $templatedirs[$component] = $dir . '/templates';
60         } else {
62             // Look at all the templates dirs for all installed plugins.
63             $dir = $CFG->libdir . '/templates';
64             if (!empty($dir) && is_dir($dir)) {
65                 $templatedirs['core'] = $dir;
66             }
67             $plugintypes = core_component::get_plugin_types();
68             foreach ($plugintypes as $type => $dir) {
69                 $plugins = core_component::get_plugin_list_with_file($type, 'templates', false);
70                 foreach ($plugins as $plugin => $dir) {
71                     if (!empty($dir) && is_dir($dir)) {
72                         $templatedirs[$type . '_' . $plugin] = $dir;
73                     }
74                 }
75             }
76         }
78         foreach ($templatedirs as $templatecomponent => $dir) {
79             // List it.
80             $files = glob($dir . '/*.mustache');
82             foreach ($files as $file) {
83                 $templatename = basename($file, '.mustache');
84                 if ($search == '' || strpos($templatename, $search) !== false) {
85                     $results[] = $templatecomponent . '/' . $templatename;
86                 }
87             }
88         }
89         return $results;
90     }
92 }