1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024 |
- <?php
- /* For licensing terms, see /license.txt */
- use Chamilo\CourseBundle\Entity\CTool;
- /**
- * Class Plugin
- * Base class for plugins.
- *
- * This class has to be extended by every plugin. It defines basic methods
- * to install/uninstall and get information about a plugin
- *
- * @author Julio Montoya <gugli100@gmail.com>
- * @author Yannick Warnier <ywarnier@beeznest.org>
- * @author Laurent Opprecht <laurent@opprecht.info>
- * @copyright 2012 University of Geneva
- * @license GNU General Public License - http://www.gnu.org/copyleft/gpl.html
- */
- class Plugin
- {
- const TAB_FILTER_NO_STUDENT = '::no-student';
- const TAB_FILTER_ONLY_STUDENT = '::only-student';
- public $isCoursePlugin = false;
- public $isAdminPlugin = false;
- public $isMailPlugin = false;
- // Adds icon in the course home
- public $addCourseTool = true;
- public $hasPersonalEvents = false;
- /**
- * When creating a new course, these settings are added to the course, in
- * the course_info/infocours.php
- * To show the plugin course icons you need to add these icons:
- * main/img/icons/22/plugin_name.png
- * main/img/icons/64/plugin_name.png
- * main/img/icons/64/plugin_name_na.png.
- *
- * @example
- * $course_settings = array(
- array('name' => 'big_blue_button_welcome_message', 'type' => 'text'),
- array('name' => 'big_blue_button_record_and_store', 'type' => 'checkbox')
- );
- */
- public $course_settings = [];
- /**
- * This indicates whether changing the setting should execute the callback
- * function.
- */
- public $course_settings_callback = false;
- protected $version = '';
- protected $author = '';
- protected $fields = [];
- private $settings = [];
- // Translation strings.
- private $strings = null;
- /**
- * Default constructor for the plugin class. By default, it only sets
- * a few attributes of the object.
- *
- * @param string $version of this plugin
- * @param string $author of this plugin
- * @param array $settings settings to be proposed to configure the plugin
- */
- protected function __construct($version, $author, $settings = [])
- {
- $this->version = $version;
- $this->author = $author;
- $this->fields = $settings;
- global $language_files;
- $language_files[] = 'plugin_'.$this->get_name();
- }
- /**
- * Gets an array of information about this plugin (name, version, ...).
- *
- * @return array Array of information elements about this plugin
- */
- public function get_info()
- {
- $result = [];
- $result['obj'] = $this;
- $result['title'] = $this->get_title();
- $result['comment'] = $this->get_comment();
- $result['version'] = $this->get_version();
- $result['author'] = $this->get_author();
- $result['plugin_class'] = get_class($this);
- $result['is_course_plugin'] = $this->isCoursePlugin;
- $result['is_admin_plugin'] = $this->isAdminPlugin;
- $result['is_mail_plugin'] = $this->isMailPlugin;
- if ($form = $this->getSettingsForm()) {
- $result['settings_form'] = $form;
- foreach ($this->fields as $name => $type) {
- $value = $this->get($name);
- if (is_array($type)) {
- $value = $type['options'];
- }
- $result[$name] = $value;
- }
- }
- return $result;
- }
- /**
- * Returns the "system" name of the plugin in lowercase letters.
- *
- * @return string
- */
- public function get_name()
- {
- $result = get_class($this);
- $result = str_replace('Plugin', '', $result);
- $result = strtolower($result);
- return $result;
- }
- /**
- * @return string
- */
- public function getCamelCaseName()
- {
- $result = get_class($this);
- return str_replace('Plugin', '', $result);
- }
- /**
- * Returns the title of the plugin.
- *
- * @return string
- */
- public function get_title()
- {
- return $this->get_lang('plugin_title');
- }
- /**
- * Returns the description of the plugin.
- *
- * @return string
- */
- public function get_comment()
- {
- return $this->get_lang('plugin_comment');
- }
- /**
- * Returns the version of the plugin.
- *
- * @return string
- */
- public function get_version()
- {
- return $this->version;
- }
- /**
- * Returns the author of the plugin.
- *
- * @return string
- */
- public function get_author()
- {
- return $this->author;
- }
- /**
- * Returns the contents of the CSS defined by the plugin.
- *
- * @return string
- */
- public function get_css()
- {
- $name = $this->get_name();
- $path = api_get_path(SYS_PLUGIN_PATH)."$name/resources/$name.css";
- if (!is_readable($path)) {
- return '';
- }
- $css = [];
- $css[] = file_get_contents($path);
- $result = implode($css);
- return $result;
- }
- /**
- * Returns an HTML form (generated by FormValidator) of the plugin settings.
- *
- * @return FormValidator FormValidator-generated form
- */
- public function getSettingsForm()
- {
- $result = new FormValidator($this->get_name());
- $defaults = [];
- $checkboxGroup = [];
- $checkboxCollection = [];
- if ($checkboxNames = array_keys($this->fields, 'checkbox')) {
- $pluginInfoCollection = api_get_settings('Plugins');
- foreach ($pluginInfoCollection as $pluginInfo) {
- if (array_search($pluginInfo['title'], $checkboxNames) !== false) {
- $checkboxCollection[$pluginInfo['title']] = $pluginInfo;
- }
- }
- }
- foreach ($this->fields as $name => $type) {
- $options = null;
- if (is_array($type) && isset($type['type']) && $type['type'] === 'select') {
- $attributes = isset($type['attributes']) ? $type['attributes'] : [];
- if (!empty($type['options']) && isset($type['translate_options']) && $type['translate_options']) {
- foreach ($type['options'] as $key => &$optionName) {
- $optionName = $this->get_lang($optionName);
- }
- }
- $options = $type['options'];
- $type = $type['type'];
- }
- $value = $this->get($name);
- $defaults[$name] = $value;
- $type = isset($type) ? $type : 'text';
- $help = null;
- if ($this->get_lang_plugin_exists($name.'_help')) {
- $help = $this->get_lang($name.'_help');
- if ($name === "show_main_menu_tab") {
- $pluginName = strtolower(str_replace('Plugin', '', get_class($this)));
- $pluginUrl = api_get_path(WEB_PATH)."plugin/$pluginName/index.php";
- $pluginUrl = "<a href=$pluginUrl>$pluginUrl</a>";
- $help = sprintf($help, $pluginUrl);
- }
- }
- switch ($type) {
- case 'html':
- $result->addHtml($this->get_lang($name));
- break;
- case 'wysiwyg':
- $result->addHtmlEditor($name, $this->get_lang($name), false);
- break;
- case 'text':
- $result->addElement($type, $name, [$this->get_lang($name), $help]);
- break;
- case 'boolean':
- $group = [];
- $group[] = $result->createElement(
- 'radio',
- $name,
- '',
- get_lang('Yes'),
- 'true'
- );
- $group[] = $result->createElement(
- 'radio',
- $name,
- '',
- get_lang('No'),
- 'false'
- );
- $result->addGroup($group, null, [$this->get_lang($name), $help]);
- break;
- case 'checkbox':
- $selectedValue = null;
- if (isset($checkboxCollection[$name])) {
- if ($checkboxCollection[$name]['selected_value'] === 'true') {
- $selectedValue = 'checked';
- }
- }
- $element = $result->createElement(
- $type,
- $name,
- '',
- $this->get_lang($name),
- $selectedValue
- );
- $element->_attributes['value'] = 'true';
- $checkboxGroup[] = $element;
- break;
- case 'select':
- $result->addElement(
- $type,
- $name,
- [$this->get_lang($name), $help],
- $options,
- $attributes
- );
- break;
- }
- }
- if (!empty($checkboxGroup)) {
- $result->addGroup(
- $checkboxGroup,
- null,
- [$this->get_lang('sms_types'), $help]
- );
- }
- $result->setDefaults($defaults);
- $result->addButtonSave($this->get_lang('Save'), 'submit_button');
- return $result;
- }
- /**
- * Returns the value of a given plugin global setting.
- *
- * @param string $name of the plugin
- *
- * @return string Value of the plugin
- */
- public function get($name)
- {
- $settings = $this->get_settings();
- foreach ($settings as $setting) {
- if ($setting['variable'] == $this->get_name().'_'.$name) {
- $unserialized = UnserializeApi::unserialize('not_allowed_classes', $setting['selected_value'], true);
- if (!empty($setting['selected_value']) &&
- false !== $unserialized
- ) {
- $setting['selected_value'] = $unserialized;
- }
- return $setting['selected_value'];
- }
- }
- return false;
- }
- /**
- * Returns an array with the global settings for this plugin.
- *
- * @param bool $forceFromDB Optional. Force get settings from the database
- *
- * @return array Plugin settings as an array
- */
- public function get_settings($forceFromDB = false)
- {
- if (empty($this->settings) || $forceFromDB) {
- $settings = api_get_settings_params(
- [
- "subkey = ? AND category = ? AND type = ? AND access_url = ?" => [
- $this->get_name(),
- 'Plugins',
- 'setting',
- api_get_current_access_url_id(),
- ],
- ]
- );
- $this->settings = $settings;
- }
- return $this->settings;
- }
- /**
- * Tells whether language variables are defined for this plugin or not.
- *
- * @param string $name System name of the plugin
- *
- * @return bool True if the plugin has language variables defined, false otherwise
- */
- public function get_lang_plugin_exists($name)
- {
- return isset($this->strings[$name]);
- }
- /**
- * Hook for the get_lang() function to check for plugin-defined language terms.
- *
- * @param string $name of the language variable we are looking for
- *
- * @return string The translated language term of the plugin
- */
- public function get_lang($name)
- {
- // Check whether the language strings for the plugin have already been
- // loaded. If so, no need to load them again.
- if (is_null($this->strings)) {
- $language_interface = api_get_interface_language();
- $root = api_get_path(SYS_PLUGIN_PATH);
- $plugin_name = $this->get_name();
- $interfaceLanguageId = api_get_language_id($language_interface);
- if (empty($interfaceLanguageId)) {
- $language_interface = api_get_setting('platformLanguage');
- $interfaceLanguageId = api_get_language_id($language_interface);
- }
- $interfaceLanguageInfo = api_get_language_info($interfaceLanguageId);
- $languageParentId = !empty($interfaceLanguageInfo['parent_id']) ? (int) $interfaceLanguageInfo['parent_id'] : 0;
- // 1. Loading english if exists
- $english_path = $root.$plugin_name."/lang/english.php";
- if (is_readable($english_path)) {
- $strings = [];
- include $english_path;
- $this->strings = $strings;
- }
- $path = $root.$plugin_name."/lang/$language_interface.php";
- // 2. Loading the system language
- if (is_readable($path)) {
- include $path;
- if (!empty($strings)) {
- foreach ($strings as $key => $string) {
- $this->strings[$key] = $string;
- }
- }
- } elseif ($languageParentId > 0) {
- $languageParentInfo = api_get_language_info($languageParentId);
- $languageParentFolder = $languageParentInfo['dokeos_folder'];
- $parentPath = "{$root}{$plugin_name}/lang/{$languageParentFolder}.php";
- if (is_readable($parentPath)) {
- include $parentPath;
- if (!empty($strings)) {
- foreach ($strings as $key => $string) {
- $this->strings[$key] = $string;
- }
- }
- }
- }
- }
- if (isset($this->strings[$name])) {
- return $this->strings[$name];
- }
- return get_lang($name);
- }
- /**
- * Caller for the install_course_fields() function.
- *
- * @param int $courseId
- * @param bool $addToolLink Whether to add a tool link on the course homepage
- */
- public function course_install($courseId, $addToolLink = true)
- {
- $this->install_course_fields($courseId, $addToolLink);
- }
- /**
- * Add course settings and, if not asked otherwise, add a tool link on the course homepage.
- *
- * @param int $courseId Course integer ID
- * @param bool $add_tool_link Whether to add a tool link or not
- * (some tools might just offer a configuration section and act on the backend)
- *
- * @return bool|null False on error, null otherwise
- */
- public function install_course_fields($courseId, $add_tool_link = true)
- {
- $plugin_name = $this->get_name();
- $t_course = Database::get_course_table(TABLE_COURSE_SETTING);
- $courseId = (int) $courseId;
- if (empty($courseId)) {
- return false;
- }
- // Adding course settings.
- if (!empty($this->course_settings)) {
- foreach ($this->course_settings as $setting) {
- $variable = $setting['name'];
- $value = '';
- if (isset($setting['init_value'])) {
- $value = $setting['init_value'];
- }
- $type = 'textfield';
- if (isset($setting['type'])) {
- $type = $setting['type'];
- }
- if (isset($setting['group'])) {
- $group = $setting['group'];
- $sql = "SELECT value
- FROM $t_course
- WHERE
- c_id = $courseId AND
- variable = '".Database::escape_string($group)."' AND
- subkey = '".Database::escape_string($variable)."'
- ";
- $result = Database::query($sql);
- if (!Database::num_rows($result)) {
- $params = [
- 'c_id' => $courseId,
- 'variable' => $group,
- 'subkey' => $variable,
- 'value' => $value,
- 'category' => 'plugins',
- 'type' => $type,
- 'title' => '',
- ];
- Database::insert($t_course, $params);
- }
- } else {
- $sql = "SELECT value FROM $t_course
- WHERE c_id = $courseId AND variable = '$variable' ";
- $result = Database::query($sql);
- if (!Database::num_rows($result)) {
- $params = [
- 'c_id' => $courseId,
- 'variable' => $variable,
- 'subkey' => $plugin_name,
- 'value' => $value,
- 'category' => 'plugins',
- 'type' => $type,
- 'title' => '',
- ];
- Database::insert($t_course, $params);
- }
- }
- }
- }
- // Stop here if we don't want a tool link on the course homepage
- if (!$add_tool_link || $this->addCourseTool == false) {
- return true;
- }
- // Add an icon in the table tool list
- $this->createLinkToCourseTool($plugin_name, $courseId);
- }
- /**
- * Delete the fields added to the course settings page and the link to the
- * tool on the course's homepage.
- *
- * @param int $courseId
- *
- * @return false|null
- */
- public function uninstall_course_fields($courseId)
- {
- $courseId = (int) $courseId;
- if (empty($courseId)) {
- return false;
- }
- $pluginName = $this->get_name();
- $t_course = Database::get_course_table(TABLE_COURSE_SETTING);
- $t_tool = Database::get_course_table(TABLE_TOOL_LIST);
- if (!empty($this->course_settings)) {
- foreach ($this->course_settings as $setting) {
- $variable = Database::escape_string($setting['name']);
- if (!empty($setting['group'])) {
- $variable = Database::escape_string($setting['group']);
- }
- if (empty($variable)) {
- continue;
- }
- $sql = "DELETE FROM $t_course
- WHERE c_id = $courseId AND variable = '$variable'";
- Database::query($sql);
- }
- }
- $pluginName = Database::escape_string($pluginName);
- $sql = "DELETE FROM $t_tool
- WHERE c_id = $courseId AND
- (
- name = '$pluginName' OR
- name = '$pluginName:student' OR
- name = '$pluginName:teacher'
- )";
- Database::query($sql);
- }
- /**
- * Install the course fields and tool link of this plugin in all courses.
- *
- * @param bool $add_tool_link Whether we want to add a plugin link on the course homepage
- */
- public function install_course_fields_in_all_courses($add_tool_link = true)
- {
- // Update existing courses to add plugin settings
- $table = Database::get_main_table(TABLE_MAIN_COURSE);
- $sql = "SELECT id FROM $table ORDER BY id";
- $res = Database::query($sql);
- while ($row = Database::fetch_assoc($res)) {
- $this->install_course_fields($row['id'], $add_tool_link);
- }
- }
- /**
- * Uninstall the plugin settings fields from all courses.
- */
- public function uninstall_course_fields_in_all_courses()
- {
- // Update existing courses to add conference settings
- $table = Database::get_main_table(TABLE_MAIN_COURSE);
- $sql = "SELECT id FROM $table
- ORDER BY id";
- $res = Database::query($sql);
- while ($row = Database::fetch_assoc($res)) {
- $this->uninstall_course_fields($row['id']);
- }
- }
- /**
- * @return array
- */
- public function getCourseSettings()
- {
- $settings = [];
- if (is_array($this->course_settings)) {
- foreach ($this->course_settings as $item) {
- if (isset($item['group'])) {
- if (!in_array($item['group'], $settings)) {
- $settings[] = $item['group'];
- }
- } else {
- $settings[] = $item['name'];
- }
- }
- }
- return $settings;
- }
- /**
- * Method to be extended when changing the setting in the course
- * configuration should trigger the use of a callback method.
- *
- * @param array $values sent back from the course configuration script
- */
- public function course_settings_updated($values = [])
- {
- }
- /**
- * Add a tab to platform.
- *
- * @param string $tabName
- * @param string $url
- * @param string $userFilter Optional. Filter tab type
- *
- * @return false|string
- */
- public function addTab($tabName, $url, $userFilter = null)
- {
- $sql = "SELECT * FROM settings_current
- WHERE
- variable = 'show_tabs' AND
- subkey LIKE 'custom_tab_%'";
- $result = Database::query($sql);
- $customTabsNum = Database::num_rows($result);
- $tabNum = $customTabsNum + 1;
- // Avoid Tab Name Spaces
- $tabNameNoSpaces = preg_replace('/\s+/', '', $tabName);
- $subkeytext = "Tabs".$tabNameNoSpaces;
- // Check if it is already added
- $checkCondition = [
- 'where' => [
- "variable = 'show_tabs' AND subkeytext = ?" => [
- $subkeytext,
- ],
- ],
- ];
- $checkDuplicate = Database::select('*', 'settings_current', $checkCondition);
- if (!empty($checkDuplicate)) {
- return false;
- }
- // End Check
- $subkey = 'custom_tab_'.$tabNum;
- if (!empty($userFilter)) {
- switch ($userFilter) {
- case self::TAB_FILTER_NO_STUDENT:
- case self::TAB_FILTER_ONLY_STUDENT:
- $subkey .= $userFilter;
- break;
- }
- }
- $currentUrlId = api_get_current_access_url_id();
- $attributes = [
- 'variable' => 'show_tabs',
- 'subkey' => $subkey,
- 'type' => 'checkbox',
- 'category' => 'Platform',
- 'selected_value' => 'true',
- 'title' => $tabName,
- 'comment' => $url,
- 'subkeytext' => $subkeytext,
- 'access_url' => $currentUrlId,
- 'access_url_changeable' => 1,
- 'access_url_locked' => 0,
- ];
- $resp = Database::insert('settings_current', $attributes);
- // Save the id
- $settings = $this->get_settings();
- $setData = [
- 'comment' => $subkey,
- ];
- $whereCondition = [
- 'id = ?' => key($settings),
- ];
- Database::update('settings_current', $setData, $whereCondition);
- return $resp;
- }
- /**
- * Delete a tab to chamilo's platform.
- *
- * @param string $key
- *
- * @return bool $resp Transaction response
- */
- public function deleteTab($key)
- {
- $table = Database::get_main_table(TABLE_MAIN_SETTINGS_CURRENT);
- $sql = "SELECT *
- FROM $table
- WHERE variable = 'show_tabs'
- AND subkey <> '$key'
- AND subkey like 'custom_tab_%'
- ";
- $resp = $result = Database::query($sql);
- $customTabsNum = Database::num_rows($result);
- if (!empty($key)) {
- $whereCondition = [
- 'variable = ? AND subkey = ?' => ['show_tabs', $key],
- ];
- $resp = Database::delete('settings_current', $whereCondition);
- //if there is more than one tab
- //re enumerate them
- if (!empty($customTabsNum) && $customTabsNum > 0) {
- $tabs = Database::store_result($result, 'ASSOC');
- $i = 1;
- foreach ($tabs as $row) {
- $newSubKey = "custom_tab_$i";
- if (strpos($row['subkey'], self::TAB_FILTER_NO_STUDENT) !== false) {
- $newSubKey .= self::TAB_FILTER_NO_STUDENT;
- } elseif (strpos($row['subkey'], self::TAB_FILTER_ONLY_STUDENT) !== false) {
- $newSubKey .= self::TAB_FILTER_ONLY_STUDENT;
- }
- $attributes = ['subkey' => $newSubKey];
- $this->updateTab($row['subkey'], $attributes);
- $i++;
- }
- }
- }
- return $resp;
- }
- /**
- * Update the tabs attributes.
- *
- * @param string $key
- * @param array $attributes
- *
- * @return bool
- */
- public function updateTab($key, $attributes)
- {
- $whereCondition = [
- 'variable = ? AND subkey = ?' => ['show_tabs', $key],
- ];
- $resp = Database::update('settings_current', $attributes, $whereCondition);
- return $resp;
- }
- /**
- * This method shows or hides plugin's tab.
- *
- * @param bool $showTab Shows or hides the main menu plugin tab
- * @param string $filePath Plugin starter file path
- */
- public function manageTab($showTab, $filePath = 'index.php')
- {
- $langString = str_replace('Plugin', '', get_class($this));
- $pluginName = strtolower($langString);
- $pluginUrl = 'plugin/'.$pluginName.'/'.$filePath;
- if ($showTab === 'true') {
- $tabAdded = $this->addTab($langString, $pluginUrl);
- if ($tabAdded) {
- // The page must be refreshed to show the recently created tab
- echo "<script>location.href = '".Security::remove_XSS($_SERVER['REQUEST_URI'])."';</script>";
- }
- } else {
- $settingsCurrentTable = Database::get_main_table(TABLE_MAIN_SETTINGS_CURRENT);
- $conditions = [
- 'where' => [
- "variable = 'show_tabs' AND title = ? AND comment = ? " => [
- $langString,
- $pluginUrl,
- ],
- ],
- ];
- $result = Database::select('subkey', $settingsCurrentTable, $conditions);
- if (!empty($result)) {
- $this->deleteTab($result[0]['subkey']);
- }
- }
- }
- /**
- * @param string $variable
- *
- * @return bool
- */
- public function validateCourseSetting($variable)
- {
- return true;
- }
- /**
- * @param string $region
- *
- * @return string
- */
- public function renderRegion($region)
- {
- return '';
- }
- /**
- * Returns true if the plugin is installed, false otherwise.
- *
- * @return bool True if plugin is installed/enabled, false otherwise
- */
- public function isEnabled()
- {
- $settings = api_get_settings_params_simple(
- [
- "subkey = ? AND category = ? AND type = ? AND variable = 'status' " => [
- $this->get_name(),
- 'Plugins',
- 'setting',
- ],
- ]
- );
- if (is_array($settings) && isset($settings['selected_value']) && $settings['selected_value'] == 'installed') {
- return true;
- }
- return false;
- }
- /**
- * Allow make some actions after configure the plugin parameters
- * This function is called from main/admin/configure_plugin.php page
- * when saving the plugin parameters.
- *
- * @return \Plugin
- */
- public function performActionsAfterConfigure()
- {
- return $this;
- }
- /**
- * This function allows to change the visibility of the icon inside a course
- * :student tool will be visible only for students
- * :teacher tool will be visible only for teachers
- * If nothing it's set then tool will be visible for both as a normal icon.
- *
- * @return string
- */
- public function getToolIconVisibilityPerUserStatus()
- {
- return '';
- }
- /**
- * Default tool icon visibility.
- *
- * @return bool
- */
- public function isIconVisibleByDefault()
- {
- return true;
- }
- /**
- * Get the admin URL for the plugin if Plugin::isAdminPlugin is true.
- *
- * @return string
- */
- public function getAdminUrl()
- {
- if (!$this->isAdminPlugin) {
- return '';
- }
- $name = $this->get_name();
- $sysPath = api_get_path(SYS_PLUGIN_PATH).$name;
- $webPath = api_get_path(WEB_PLUGIN_PATH).$name;
- if (file_exists("$sysPath/admin.php")) {
- return "$webPath/admin.php";
- }
- if (file_exists("$sysPath/start.php")) {
- return "$webPath/start.php";
- }
- return '';
- }
- /**
- * @param bool $value
- */
- public function setHasPersonalEvents($value)
- {
- $this->hasPersonalEvents = $value;
- }
- /**
- * Overwrite to perform some actions when deleting a user.
- *
- * @param int $userId
- */
- public function doWhenDeletingUser($userId)
- {
- }
- /**
- * Overwrite to perform some actions when deleting a course.
- *
- * @param int $courseId
- */
- public function doWhenDeletingCourse($courseId)
- {
- }
- /**
- * Overwrite to perform some actions when deleting a session.
- *
- * @param int $sessionId
- */
- public function doWhenDeletingSession($sessionId)
- {
- }
- /**
- * Add an link for a course tool.
- *
- * @param string $name The tool name
- * @param int $courseId The course ID
- * @param string $iconName Optional. Icon file name
- * @param string $link Optional. Link URL
- *
- * @return CTool|null
- */
- protected function createLinkToCourseTool(
- $name,
- $courseId,
- $iconName = null,
- $link = null
- ) {
- if (!$this->addCourseTool) {
- return null;
- }
- $visibilityPerStatus = $this->getToolIconVisibilityPerUserStatus();
- $visibility = $this->isIconVisibleByDefault();
- $em = Database::getManager();
- /** @var CTool $tool */
- $tool = $em
- ->getRepository('ChamiloCourseBundle:CTool')
- ->findOneBy([
- 'name' => $name,
- 'course' => $courseId,
- 'category' => 'plugin',
- ]);
- if (!$tool) {
- $cToolId = AddCourse::generateToolId($courseId);
- $pluginName = $this->get_name();
- $tool = new CTool();
- $tool
- ->setId($cToolId)
- ->setCourse(api_get_course_entity($courseId))
- ->setName($name.$visibilityPerStatus)
- ->setLink($link ?: "$pluginName/start.php")
- ->setImage($iconName ?: "$pluginName.png")
- ->setVisibility($visibility)
- ->setAdmin(0)
- ->setAddress('squaregrey.gif')
- ->setAddedTool(false)
- ->setTarget('_self')
- ->setCategory('plugin')
- ->setSessionId(0);
- $em->persist($tool);
- $em->flush();
- }
- return $tool;
- }
- }
|