settings.php 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535
  1. <?php
  2. /* For licensing terms, see /license.txt */
  3. /**
  4. * With this tool you can easily adjust non critical configuration settings.
  5. * Non critical means that changing them will not result in a broken campus.
  6. *
  7. * @author Patrick Cool
  8. * @author Julio Montoya - Multiple URL site
  9. * @package chamilo.admin
  10. */
  11. /* INIT SECTION */
  12. // name of the language file that needs to be included
  13. if ($_GET['category']=='Templates') {
  14. $language_file = array('admin','document');
  15. } else if($_GET['category']=='Gradebook') {
  16. $language_file = array('admin','gradebook');
  17. } else {
  18. $language_file = array('admin');
  19. }
  20. // resetting the course id
  21. $cidReset=true;
  22. // including some necessary chamilo files
  23. require_once '../inc/global.inc.php';
  24. require_once api_get_path(LIBRARY_PATH).'sortabletable.class.php';
  25. require_once api_get_path(LIBRARY_PATH).'formvalidator/FormValidator.class.php';
  26. require_once api_get_path(LIBRARY_PATH).'fileManage.lib.php';
  27. require_once api_get_path(LIBRARY_PATH).'fileUpload.lib.php';
  28. require_once api_get_path(LIBRARY_PATH).'dashboard.lib.php';
  29. require_once 'settings.lib.php';
  30. // setting the section (for the tabs)
  31. $this_section = SECTION_PLATFORM_ADMIN;
  32. $_SESSION['this_section'] = $this_section;
  33. // Access restrictions
  34. api_protect_admin_script();
  35. /* this code is moved to gradebook_scoring_system file
  36. if($_GET['category'] == 'Gradebook') {
  37. // Used for the gradebook system
  38. $htmlHeadXtra[]= '
  39. <script language="JavaScript">
  40. function plusItem(item)
  41. {
  42. document.getElementById(item).style.display = "inline";
  43. document.getElementById("plus-"+item).style.display = "none";
  44. document.getElementById("min-"+(item-1)).style.display = "none";
  45. document.getElementById("min-"+(item)).style.display = "inline";
  46. document.getElementById("plus-"+(item+1)).style.display = "inline";
  47. document.getElementById("txta-"+(item)).value = "100";
  48. document.getElementById("txta-"+(item-1)).value = "";
  49. }
  50. function minItem(item)
  51. {
  52. if (item != 1)
  53. {
  54. document.getElementById(item).style.display = "none";
  55. document.getElementById("txta-"+item).value = "";
  56. document.getElementById("txtb-"+item).value = "";
  57. document.getElementById("plus-"+item).style.display = "inline";
  58. document.getElementById("min-"+(item-1)).style.display = "inline";
  59. document.getElementById("txta-"+(item-1)).value = "100";
  60. }
  61. if (item = 1)
  62. {
  63. document.getElementById("min-"+(item)).style.display = "none";
  64. }
  65. }
  66. </script>';
  67. }
  68. */
  69. // Submit Stylesheets
  70. if (isset($_POST['submit_stylesheets'])) {
  71. $message = store_stylesheets();
  72. header("Location: ".api_get_self()."?category=stylesheets");
  73. exit;
  74. }
  75. // Database Table Definitions
  76. $table_settings_current = Database :: get_main_table(TABLE_MAIN_SETTINGS_CURRENT);
  77. // setting breadcrumbs
  78. $interbreadcrumb[] = array ("url" => 'index.php', "name" => get_lang('PlatformAdmin'));
  79. // setting the name of the tool
  80. $tool_name = get_lang('DokeosConfigSettings');
  81. if(empty($_GET['category'])) {
  82. $_GET['category'] = 'Platform';
  83. }
  84. // Build the form
  85. if (!empty($_GET['category']) && !in_array($_GET['category'], array('Plugins', 'stylesheets', 'Search'))) {
  86. $form = new FormValidator('settings', 'post', 'settings.php?category='.$_GET['category']);
  87. $renderer = & $form->defaultRenderer();
  88. $renderer->setHeaderTemplate('<div class="sectiontitle">{header}</div>'."\n");
  89. $renderer->setElementTemplate('<div class="sectioncomment">{label}</div>'."\n".'<div class="sectionvalue">{element}</div>'."\n");
  90. $my_category = Database::escape_string($_GET['category']);
  91. $sqlcountsettings = "SELECT COUNT(*) FROM $table_settings_current WHERE category='".$my_category."' AND type<>'checkbox'";
  92. $resultcountsettings = Database::query($sqlcountsettings);
  93. $countsetting = Database::fetch_array($resultcountsettings);
  94. if ($_configuration['access_url']==1) {
  95. $settings = api_get_settings($my_category,'group',$_configuration['access_url']);
  96. } else {
  97. $url_info = api_get_access_url($_configuration['access_url']);
  98. if ($url_info['active']==1) {
  99. //the default settings of Dokeos
  100. $settings = api_get_settings($my_category,'group',1,0);
  101. //the settings that are changeable from a particular site
  102. $settings_by_access = api_get_settings($my_category,'group',$_configuration['access_url'],1);
  103. //echo '<pre>';
  104. //print_r($settings_by_access);
  105. $settings_by_access_list=array();
  106. foreach($settings_by_access as $row)
  107. {
  108. if (empty($row['variable']))
  109. $row['variable']=0;
  110. if (empty($row['subkey']))
  111. $row['subkey']=0;
  112. if (empty($row['category']))
  113. $row['category']=0;
  114. // one more validation if is changeable
  115. if ($row['access_url_changeable']==1)
  116. $settings_by_access_list[ $row['variable'] ] [ $row['subkey'] ] [ $row['category'] ] = $row;
  117. else
  118. $settings_by_access_list[ $row['variable'] ] [ $row['subkey'] ] [ $row['category'] ] = array();
  119. }
  120. }
  121. }
  122. //print_r($settings_by_access_list);echo '</pre>';
  123. //$sqlsettings = "SELECT DISTINCT * FROM $table_settings_current WHERE category='$my_category' GROUP BY variable ORDER BY id ASC";
  124. //$resultsettings = Database::query($sqlsettings);
  125. //while ($row = Database::fetch_array($resultsettings))
  126. $default_values = array();
  127. foreach($settings as $row) {
  128. // Settings to avoid
  129. $rows_to_avoid = array('search_enabled', 'gradebook_enable');
  130. if (in_array($row['variable'], $rows_to_avoid)) { continue; }
  131. $anchor_name = $row['variable'].(!empty($row['subkey']) ? '_'.$row['subkey'] : '');
  132. $form->addElement('html',"\n<a name=\"$anchor_name\"></a>\n");
  133. ($countsetting['0']%10) < 5 ?$b=$countsetting['0']-10:$b=$countsetting['0'];
  134. if ($i % 10 == 0 and $i<$b) {
  135. $form->addElement('html','<div align="right">');
  136. $form->addElement('style_submit_button', null,get_lang('SaveSettings'), 'class="save"');
  137. $form->addElement('html','</div>');
  138. }
  139. $i++;
  140. $form->addElement('header', null, get_lang($row['title']));
  141. if ($row['access_url_changeable'] == '1' && $_configuration['multiple_access_urls']) {
  142. $form->addElement('html', '<div style="float:right;">'.Display::return_icon('shared_setting.png',get_lang('SharedSettingIconComment')).'</div>');
  143. }
  144. $hideme=array();
  145. $hide_element=false;
  146. if ($_configuration['access_url']!=1) {
  147. if ($row['access_url_changeable']==0) {
  148. //we hide the element in other cases (checkbox, radiobutton) we 'freeze' the element
  149. $hide_element=true;
  150. $hideme=array('disabled');
  151. } elseif($url_info['active']==1) {
  152. // we show the elements
  153. if (empty($row['variable']))
  154. $row['variable']=0;
  155. if (empty($row['subkey']))
  156. $row['subkey']=0;
  157. if (empty($row['category']))
  158. $row['category']=0;
  159. if (is_array ($settings_by_access_list[ $row['variable'] ] [ $row['subkey'] ] [ $row['category'] ])) {
  160. // we are sure that the other site have a selected value
  161. if ($settings_by_access_list[ $row['variable'] ] [ $row['subkey'] ] [ $row['category'] ]['selected_value']!='')
  162. $row['selected_value'] =$settings_by_access_list[$row['variable']] [$row['subkey']] [ $row['category'] ]['selected_value'];
  163. }
  164. // there is no else because we load the default $row['selected_value'] of the main Dokeos site
  165. }
  166. }
  167. switch ($row['type']) {
  168. case 'textfield' :
  169. if ($row['variable']=='account_valid_duration') {
  170. $form->addElement('text', $row['variable'], get_lang($row['comment']),array('maxlength'=>'5'));
  171. $form->applyFilter($row['variable'],'html_filter');
  172. $default_values[$row['variable']] = $row['selected_value'];
  173. // For platform character set selection: Conversion of the textfield to a select box with valid values.
  174. } elseif ($row['variable'] == 'platform_charset') {
  175. $current_system_encoding = api_refine_encoding_id(trim($row['selected_value']));
  176. $valid_encodings = array_flip(api_get_valid_encodings());
  177. if (!isset($valid_encodings[$current_system_encoding])) {
  178. $is_alias_encoding = false;
  179. foreach ($valid_encodings as $encoding) {
  180. if (api_equal_encodings($encoding, $current_system_encoding)) {
  181. $is_alias_encoding = true;
  182. $current_system_encoding = $encoding;
  183. break;
  184. }
  185. }
  186. if (!$is_alias_encoding) {
  187. $valid_encodings[$current_system_encoding] = $current_system_encoding;
  188. }
  189. }
  190. foreach ($valid_encodings as $key => &$encoding) {
  191. if (api_is_encoding_supported($key) && Database::is_encoding_supported($key)) {
  192. $encoding = $key;
  193. } else {
  194. //$encoding = $key.' (n.a.)';
  195. unset($valid_encodings[$key]);
  196. }
  197. }
  198. $form->addElement('select', $row['variable'], get_lang($row['comment']), $valid_encodings);
  199. $default_values[$row['variable']] = $current_system_encoding;
  200. } else {
  201. $form->addElement('text', $row['variable'], get_lang($row['comment']),$hideme);
  202. $form->applyFilter($row['variable'],'html_filter');
  203. $default_values[$row['variable']] = $row['selected_value'];
  204. }
  205. break;
  206. case 'textarea' :
  207. $form->addElement('textarea', $row['variable'], get_lang($row['comment']),$hideme);
  208. $default_values[$row['variable']] = $row['selected_value'];
  209. break;
  210. case 'radio' :
  211. $values = get_settings_options($row['variable']);
  212. $group = array ();
  213. if (is_array($values )) {
  214. foreach ($values as $key => $value) {
  215. $element = & $form->createElement('radio', $row['variable'], '', get_lang($value['display_text']), $value['value']);
  216. if ($hide_element) {
  217. $element->freeze();
  218. }
  219. $group[] = $element;
  220. }
  221. }
  222. $form->addGroup($group, $row['variable'], get_lang($row['comment']), '<br />', false);
  223. $default_values[$row['variable']] = $row['selected_value'];
  224. break;
  225. case 'checkbox';
  226. //1. we collect all the options of this variable
  227. $sql = "SELECT * FROM settings_current WHERE variable='".$row['variable']."' AND access_url = 1";
  228. $result = Database::query($sql);
  229. $group = array ();
  230. while ($rowkeys = Database::fetch_array($result)) {
  231. if ($rowkeys['variable'] == 'course_create_active_tools' && $rowkeys['subkey'] == 'enable_search') {continue;}
  232. // profile tab option hide, if the social tool is enabled
  233. if (api_get_setting('allow_social_tool') == 'true') {
  234. if ($rowkeys['variable'] == 'show_tabs' && $rowkeys['subkey'] == 'my_profile') {continue;}
  235. }
  236. //hiding the gradebook option
  237. if ($rowkeys['variable'] == 'show_tabs' && $rowkeys['subkey'] == 'my_gradebook') {continue;}
  238. $element = & $form->createElement('checkbox', $rowkeys['subkey'], '', get_lang($rowkeys['subkeytext']));
  239. if ($row['access_url_changeable']==1) {
  240. //2. we look into the DB if there is a setting for a specific access_url
  241. $access_url = $_configuration['access_url'];
  242. if(empty($access_url )) $access_url =1;
  243. $sql = "SELECT selected_value FROM settings_current WHERE variable='".$rowkeys['variable']."' AND subkey='".$rowkeys['subkey']."' AND subkeytext='".$rowkeys['subkeytext']."' AND access_url = $access_url";
  244. $result_access = Database::query($sql);
  245. $row_access = Database::fetch_array($result_access);
  246. if ($row_access['selected_value'] == 'true' && ! $form->isSubmitted()) {
  247. $element->setChecked(true);
  248. }
  249. } else {
  250. if ($rowkeys['selected_value'] == 'true' && ! $form->isSubmitted()) {
  251. $element->setChecked(true);
  252. }
  253. }
  254. if ($hide_element) {
  255. $element->freeze();
  256. }
  257. $group[] = $element;
  258. }
  259. $form->addGroup($group, $row['variable'], get_lang($row['comment']), '<br />'."\n");
  260. break;
  261. case "link" :
  262. $form->addElement('static', null, get_lang($row['comment']), get_lang('CurrentValue').' : '.$row['selected_value'], $hideme);
  263. break;
  264. /*
  265. * To populate its list of options, the select type dynamically calls a function that must be called select_ + the name of the variable being displayed
  266. * The functions being called must be added to the file settings.lib.php
  267. */
  268. case "select":
  269. $form->addElement('select', $row['variable'], get_lang($row['comment']), call_user_func('select_'.$row['variable']), $hideme);
  270. $default_values[$row['variable']] = $row['selected_value'];
  271. break;
  272. /*
  273. * Used to display custom values for the gradebook score display
  274. */
  275. /* this configuration is moved now inside gradebook tool
  276. case "gradebook_score_display_custom":
  277. if(api_get_setting('gradebook_score_display_custom', 'my_display_custom') == 'false') {
  278. $form->addElement('static', null, null, get_lang('GradebookActivateScoreDisplayCustom'));
  279. } else {
  280. // Get score displays
  281. require_once api_get_path(SYS_CODE_PATH).'gradebook/lib/scoredisplay.class.php';
  282. $scoredisplay = ScoreDisplay::instance();
  283. $customdisplays = $scoredisplay->get_custom_score_display_settings();
  284. $nr_items =(count($customdisplays)!='0')?count($customdisplays):'1';
  285. $form->addElement('hidden', 'gradebook_score_display_custom_values_maxvalue', '100');
  286. $form->addElement('hidden', 'gradebook_score_display_custom_values_minvalue', '0');
  287. $form->addElement('static', null, null, get_lang('ScoreInfo'));
  288. $scorenull[]= $form->CreateElement('static', null, null, get_lang('Between'));
  289. $form->setDefaults(array (
  290. 'beginscore' => '0'
  291. ));
  292. $scorenull[]= $form->CreateElement('text', 'beginscore', null, array (
  293. 'size' => 5,
  294. 'maxlength' => 5,
  295. 'disabled' => 'disabled'
  296. ));
  297. $scorenull[]= $form->CreateElement('static', null, null, ' %');
  298. $form->addGroup($scorenull, '', '', ' ');
  299. for ($counter= 1; $counter <= 20; $counter++) {
  300. $renderer = $form->defaultRenderer();
  301. $elementTemplateTwoLabel =
  302. '<div id=' . $counter . ' style="display: '.(($counter<=$nr_items)?'inline':'none').';">
  303. <p><!-- BEGIN required --><span class="form_required">*</span> <!-- END required -->{label}
  304. <div class="formw"><!-- BEGIN error --><span class="form_error">{error}</span><br /><!-- END error --> <b>'.get_lang('And').'</b>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp{element} % =';
  305. $elementTemplateTwoLabel2 =
  306. '<!-- BEGIN error --><span class="form_error">{error}</span><br /><!-- END error -->&nbsp{element}
  307. <a href="javascript:minItem(' . ($counter) . ')"><img style="display: '.(($counter>=$nr_items && $counter!=1)?'inline':'none').';" id="min-' . $counter . '" src="../img/gradebook_remove.gif" alt="'.get_lang('Delete').'" title="'.get_lang('Delete').'"></img></a>
  308. <a href="javascript:plusItem(' . ($counter+1) . ')"><img style="display: '.(($counter>=$nr_items)?'inline':'none').';" id="plus-' . ($counter+1) . '" src="../img/gradebook_add.gif" alt="'.get_lang('Add').'" title="'.get_lang('Add').'"></img></a>
  309. </div></p></div>';
  310. $scorebetw= array ();
  311. $form->addElement('text', 'gradebook_score_display_custom_values_endscore[' . $counter . ']', null, array (
  312. 'size' => 5,
  313. 'maxlength' => 5,
  314. 'id' => 'txta-'.$counter
  315. ));
  316. $form->addElement('text', 'gradebook_score_display_custom_values_displaytext[' . $counter . ']', null,array (
  317. 'size' => 40,
  318. 'maxlength' => 40,
  319. 'id' => 'txtb-'.$counter
  320. ));
  321. $renderer->setElementTemplate($elementTemplateTwoLabel,'gradebook_score_display_custom_values_endscore[' . $counter . ']');
  322. $renderer->setElementTemplate($elementTemplateTwoLabel2,'gradebook_score_display_custom_values_displaytext[' . $counter . ']');
  323. $form->addRule('gradebook_score_display_custom_values_endscore[' . $counter . ']', get_lang('OnlyNumbers'), 'numeric');
  324. $form->addRule(array ('gradebook_score_display_custom_values_endscore[' . $counter . ']', 'gradebook_score_display_custom_values_maxvalue'), get_lang('Over100'), 'compare', '<=');
  325. $form->addRule(array ('gradebook_score_display_custom_values_endscore[' . $counter . ']', 'gradebook_score_display_custom_values_minvalue'), get_lang('UnderMin'), 'compare', '>');
  326. if($customdisplays[$counter-1]) {
  327. $default_values['gradebook_score_display_custom_values_endscore['.$counter.']'] = $customdisplays[$counter-1]['score'];
  328. $default_values['gradebook_score_display_custom_values_displaytext['.$counter.']'] = $customdisplays[$counter-1]['display'];
  329. }
  330. }
  331. }
  332. break;
  333. */
  334. }
  335. }
  336. $form->addElement('html','<div style="text-align: right; clear: both;">');
  337. $form->addElement('style_submit_button', null,get_lang('SaveSettings'), 'class="save"');
  338. $form->addElement('html','</div>');
  339. $form->setDefaults($default_values);
  340. if ($form->validate()) {
  341. $values = $form->exportValues();
  342. // set true for allow_message_tool variable if social tool is actived
  343. if ($values['allow_social_tool'] == 'true') {
  344. $values['allow_message_tool'] = 'true';
  345. }
  346. // the first step is to set all the variables that have type=checkbox of the category
  347. // to false as the checkbox that is unchecked is not in the $_POST data and can
  348. // therefore not be set to false.
  349. // This, however, also means that if the process breaks on the third of five checkboxes, the others
  350. // will be set to false.
  351. $r = api_set_settings_category($my_category,'false',$_configuration['access_url'],array('checkbox','radio'));
  352. //$sql = "UPDATE $table_settings_current SET selected_value='false' WHERE category='$my_category' AND type='checkbox'";
  353. //$result = Database::query($sql);
  354. // Save the settings
  355. $keys = array();
  356. //$gradebook_score_display_custom_values = array();
  357. foreach ($values as $key => $value) {
  358. // Treat gradebook values in separate function
  359. //if(strpos($key, 'gradebook_score_display_custom_values') === false) {
  360. if (!is_array($value)) {
  361. //$sql = "UPDATE $table_settings_current SET selected_value='".Database::escape_string($value)."' WHERE variable='$key'";
  362. //$result = Database::query($sql);
  363. if (api_get_setting($key) != $value) $keys[] = $key;
  364. $result = api_set_setting($key,$value,null,null,$_configuration['access_url']);
  365. } else {
  366. $sql = "SELECT subkey FROM $table_settings_current WHERE variable = '$key'";
  367. $res = Database::query($sql);
  368. $subkeys = array();
  369. while ($row_subkeys = Database::fetch_array($res)) {
  370. // if subkey is changed
  371. if ( (isset($value[$row_subkeys['subkey']]) && api_get_setting($key,$row_subkeys['subkey']) == 'false') ||
  372. (!isset($value[$row_subkeys['subkey']]) && api_get_setting($key,$row_subkeys['subkey']) == 'true')) {
  373. $keys[] = $key;
  374. break;
  375. }
  376. }
  377. foreach ($value as $subkey => $subvalue)
  378. {
  379. //$sql = "UPDATE $table_settings_current SET selected_value='true' WHERE variable='$key' AND subkey = '$subkey'";
  380. //$result = Database::query($sql);
  381. $result = api_set_setting($key,'true',$subkey,null,$_configuration['access_url']);
  382. }
  383. }
  384. //} else {
  385. // $gradebook_score_display_custom_values[$key] = $value;
  386. //}
  387. }
  388. /*
  389. if(count($gradebook_score_display_custom_values) > 0) {
  390. update_gradebook_score_display_custom_values($gradebook_score_display_custom_values);
  391. }
  392. */
  393. // add event configuration settings category to system log
  394. $time = time();
  395. $user_id = api_get_user_id();
  396. $category = $_GET['category'];
  397. event_system(LOG_CONFIGURATION_SETTINGS_CHANGE, LOG_CONFIGURATION_SETTINGS_CATEGORY, $category, $time, $user_id);
  398. // add event configuration settings variable to system log
  399. if (is_array($keys) && count($keys) > 0) {
  400. foreach($keys as $variable) {
  401. event_system(LOG_CONFIGURATION_SETTINGS_CHANGE, LOG_CONFIGURATION_SETTINGS_VARIABLE, $variable, $time, $user_id);
  402. }
  403. }
  404. header('Location: settings.php?action=stored&category='.Security::remove_XSS($_GET['category']));
  405. exit;
  406. }
  407. }
  408. // including the header (banner)
  409. Display :: display_header($tool_name);
  410. //api_display_tool_title($tool_name);
  411. // displaying the message that the settings have been stored
  412. if (!empty($_GET['action']) && $_GET['action'] == 'stored') {
  413. Display :: display_confirmation_message(get_lang('SettingsStored'));
  414. }
  415. // the action images
  416. $action_images['platform'] = 'logo.gif';
  417. $action_images['course'] = 'course.gif';
  418. $action_images['tools'] = 'reference.gif';
  419. $action_images['user'] = 'students.gif';
  420. $action_images['gradebook'] = 'gradebook_eval_not_empty.gif';
  421. $action_images['ldap'] = 'loginmanager.gif';
  422. $action_images['security'] = 'passwordprotected.gif';
  423. $action_images['languages'] = 'languages.gif';
  424. $action_images['tuning'] = 'tuning.gif';
  425. $action_images['plugins'] = 'plugin.gif';
  426. $action_images['stylesheets'] = 'theme.gif';
  427. $action_images['templates'] = 'template.gif';
  428. $action_images['search'] = 'search.gif';
  429. $action_images['editor'] = 'html.png';
  430. $action_images['timezones'] = 'timezones.png';
  431. // grabbing the categories
  432. //$selectcategories = "SELECT DISTINCT category FROM ".$table_settings_current." WHERE category NOT IN ('stylesheets','Plugins')";
  433. //$resultcategories = Database::query($selectcategories);
  434. $resultcategories = api_get_settings_categories(array('stylesheets','Plugins', 'Templates', 'Search'));
  435. echo "\n<div class=\"actions\">";
  436. //while ($row = Database::fetch_array($resultcategories))
  437. foreach($resultcategories as $row) {
  438. echo "\n\t<a href=\"".api_get_self()."?category=".$row['category']."\">".Display::return_icon($action_images[strtolower($row['category'])], api_ucfirst(get_lang($row['category']))).api_ucfirst(get_lang($row['category']))."</a>";
  439. }
  440. echo "\n\t<a href=\"".api_get_self()."?category=Plugins\">".Display::return_icon($action_images['plugins'], api_ucfirst(get_lang('Plugins'))).api_ucfirst(get_lang('Plugins'))."</a>";
  441. echo "\n\t<a href=\"".api_get_self()."?category=stylesheets\">".Display::return_icon($action_images['stylesheets'], api_ucfirst(get_lang('Stylesheets'))).api_ucfirst(get_lang('Stylesheets'))."</a>";
  442. echo "\n\t<a href=\"".api_get_self()."?category=Templates\">".Display::return_icon($action_images['templates'], api_ucfirst(get_lang('Templates'))).api_ucfirst(get_lang('Templates'))."</a>";
  443. echo "\n\t<a href=\"".api_get_self()."?category=Search\">".Display::return_icon($action_images['search'], api_ucfirst(get_lang('Search'))).api_ucfirst(get_lang('Search'))."</a>";
  444. echo "\n</div>";
  445. if (!empty($_GET['category'])) {
  446. switch ($_GET['category']) {
  447. // displaying the extensions: plugins
  448. // this will be available to all the sites (access_urls)
  449. case 'Plugins' :
  450. if (isset($_POST['submit_dashboard_plugins'])) {
  451. $affected_rows = DashboardManager::store_dashboard_plugins($_POST);
  452. if ($affected_rows) {
  453. // add event to system log
  454. $time = time();
  455. $user_id = api_get_user_id();
  456. $category = $_GET['category'];
  457. event_system(LOG_CONFIGURATION_SETTINGS_CHANGE, LOG_CONFIGURATION_SETTINGS_CATEGORY, $category, $time, $user_id);
  458. Display :: display_confirmation_message(get_lang('DashboardPluginsHaveBeenUpdatedSucesslly'));
  459. }
  460. }
  461. handle_plugins();
  462. DashboardManager::handle_dashboard_plugins();
  463. break;
  464. // displaying the extensions: Stylesheets
  465. case 'stylesheets' :
  466. handle_stylesheets();
  467. break;
  468. case 'Search' :
  469. handle_search();
  470. break;
  471. case 'Templates' :
  472. handle_templates();
  473. break;
  474. default :
  475. $form->display();
  476. }
  477. }
  478. /*
  479. FOOTER
  480. */
  481. Display :: display_footer();