/** * This function allows the platform admin to choose the default stylesheet * @author Patrick Cool <*****@*****.**>, Ghent University * @author Julio Montoya <*****@*****.**>, Chamilo */ function handle_stylesheets() { global $_configuration; // Current style. $currentstyle = api_get_setting('stylesheets'); $is_style_changeable = false; if ($_configuration['access_url'] != 1) { $style_info = api_get_settings('stylesheets', '', 1, 0); $url_info = api_get_access_url($_configuration['access_url']); if ($style_info[0]['access_url_changeable'] == 1 && $url_info['active'] == 1) { $is_style_changeable = true; } } else { $is_style_changeable = true; } $form = new FormValidator('stylesheet_upload', 'post', 'settings.php?category=Stylesheets#tabs-2'); $form->addElement('text', 'name_stylesheet', get_lang('NameStylesheet'), array('size' => '40', 'maxlength' => '40')); $form->addRule('name_stylesheet', get_lang('ThisFieldIsRequired'), 'required'); $form->addElement('file', 'new_stylesheet', get_lang('UploadNewStylesheet')); $allowed_file_types = array('css', 'zip', 'jpeg', 'jpg', 'png', 'gif', 'ico', 'psd'); $form->addRule('new_stylesheet', get_lang('InvalidExtension') . ' (' . implode(',', $allowed_file_types) . ')', 'filetype', $allowed_file_types); $form->addRule('new_stylesheet', get_lang('ThisFieldIsRequired'), 'required'); $form->addButtonUpload(get_lang('Upload'), 'stylesheet_upload'); $show_upload_form = false; if (!is_writable(CSS_UPLOAD_PATH)) { Display::display_error_message(CSS_UPLOAD_PATH . get_lang('IsNotWritable')); } else { // Uploading a new stylesheet. if ($_configuration['access_url'] == 1) { $show_upload_form = true; } else { if ($is_style_changeable) { $show_upload_form = true; } } } // Stylesheet upload. if (isset($_POST['stylesheet_upload'])) { if ($form->validate()) { $values = $form->exportValues(); $picture_element = $form->getElement('new_stylesheet'); $picture = $picture_element->getValue(); $result = upload_stylesheet($values, $picture); // Add event to the system log. $user_id = api_get_user_id(); $category = $_GET['category']; Event::addEvent(LOG_CONFIGURATION_SETTINGS_CHANGE, LOG_CONFIGURATION_SETTINGS_CATEGORY, $category, api_get_utc_datetime(), $user_id); if ($result) { Display::display_confirmation_message(get_lang('StylesheetAdded')); } } } $form_change = new FormValidator('stylesheet_upload', 'post', api_get_self() . '?category=Stylesheets', null, array('id' => 'stylesheets_id')); $list_of_names = array(); $selected = ''; $dirpath = ''; $safe_style_dir = ''; if ($handle = @opendir(CSS_UPLOAD_PATH)) { $counter = 1; while (false !== ($style_dir = readdir($handle))) { if (substr($style_dir, 0, 1) == '.') { // Skip directories starting with a '.' continue; } $dirpath = CSS_UPLOAD_PATH . $style_dir; if (is_dir($dirpath)) { if ($style_dir != '.' && $style_dir != '..') { if (isset($_POST['style']) && (isset($_POST['preview']) || isset($_POST['download'])) && $_POST['style'] == $style_dir) { $safe_style_dir = $style_dir; } else { if ($currentstyle == $style_dir || $style_dir == 'chamilo' && !$currentstyle) { if (isset($_POST['style'])) { $selected = Database::escape_string($_POST['style']); } else { $selected = $style_dir; } } } $show_name = ucwords(str_replace('_', ' ', $style_dir)); if ($is_style_changeable) { $list_of_names[$style_dir] = $show_name; } $counter++; } } } closedir($handle); } // Sort styles in alphabetical order. asort($list_of_names); $select_list = array(); foreach ($list_of_names as $style_dir => $item) { $select_list[$style_dir] = $item; } $styles =& $form_change->addElement('select', 'style', get_lang('NameStylesheet'), $select_list); $styles->setSelected($selected); if ($form_change->validate()) { // Submit stylesheets. if (isset($_POST['save'])) { store_stylesheets(); Display::display_normal_message(get_lang('Saved')); } if (isset($_POST['download'])) { $arch = api_get_path(SYS_ARCHIVE_PATH) . $safe_style_dir . '.zip'; $dir = api_get_path(SYS_CSS_PATH) . 'themes/' . $safe_style_dir; if (is_dir($dir)) { $zip = new PclZip($arch); // Remove path prefix except the style name and put file on disk $zip->create($dir, PCLZIP_OPT_REMOVE_PATH, substr($dir, 0, -strlen($safe_style_dir))); //@TODO: use more generic script to download. $str = '<a class="btn btn-primary btn-large" href="' . api_get_path(WEB_CODE_PATH) . 'course_info/download.php?archive=' . str_replace(api_get_path(SYS_ARCHIVE_PATH), '', $arch) . '">' . get_lang('ClickHereToDownloadTheFile') . '</a>'; Display::display_normal_message($str, false); } else { Display::addFlash(Display::return_message(get_lang('FileNotFound'), 'warning')); } } } if ($is_style_changeable) { $group = [$form_change->addButtonSave(get_lang('SaveSettings'), 'save', true), $form_change->addButtonPreview(get_lang('Preview'), 'preview', true), $form_change->addButtonDownload(get_lang('Download'), 'download', true)]; $form_change->addGroup($group); if ($show_upload_form) { echo '<script> $(function() { $( "#tabs" ).tabs(); }); </script>'; echo Display::tabs(array(get_lang('Update'), get_lang('UploadNewStylesheet')), array($form_change->return_form(), $form->return_form())); } else { $form_change->display(); } } else { $form_change->freeze(); } }
/** * This function allows the platform admin to choose the default stylesheet * @author Patrick Cool <*****@*****.**>, Ghent University */ function handle_stylesheets() { global $_configuration; // Current style $currentstyle = api_get_setting('stylesheets'); $is_style_changeable = false; if ($_configuration['access_url'] != 1) { $style_info = api_get_settings('stylesheets', '', 1, 0); $url_info = api_get_access_url($_configuration['access_url']); if ($style_info[0]['access_url_changeable'] == 1 && $url_info['active'] == 1) { $is_style_changeable = true; echo '<div class="actions" id="stylesheetuploadlink">'; Display::display_icon('theme_add.gif'); echo '<a href="" onclick="document.getElementById(\'newstylesheetform\').style.display = \'block\'; document.getElementById(\'stylesheetuploadlink\').style.display = \'none\';return false; ">' . get_lang('UploadNewStylesheet') . '</a>'; echo '</div>'; } } else { $is_style_changeable = true; echo '<div class="actions" id="stylesheetuploadlink">'; Display::display_icon('theme_add.gif'); echo '<a href="" onclick="document.getElementById(\'newstylesheetform\').style.display = \'block\'; document.getElementById(\'stylesheetuploadlink\').style.display = \'none\';return false; ">' . get_lang('UploadNewStylesheet') . '</a>'; echo '</div>'; } $form = new FormValidator('stylesheet_upload', 'post', 'settings.php?category=stylesheets&showuploadform=true'); $form->addElement('text', 'name_stylesheet', get_lang('NameStylesheet'), array('size' => '40', 'maxlength' => '40')); $form->addRule('name_stylesheet', get_lang('ThisFieldIsRequired'), 'required'); $form->addElement('file', 'new_stylesheet', get_lang('UploadNewStylesheet')); $allowed_file_types = array('css'); $form->addRule('new_stylesheet', get_lang('InvalidExtension') . ' (' . implode(',', $allowed_file_types) . ')', 'filetype', $allowed_file_types); $form->addRule('new_stylesheet', get_lang('ThisFieldIsRequired'), 'required'); $form->addElement('style_submit_button', 'stylesheet_upload', get_lang('Ok'), array('class' => 'save')); if ($form->validate() and is_writable(api_get_path(SYS_CODE_PATH) . 'css/')) { $values = $form->exportValues(); $picture_element =& $form->getElement('new_stylesheet'); $picture = $picture_element->getValue(); upload_stylesheet($values, $picture); Display::display_confirmation_message(get_lang('StylesheetAdded')); } else { if (!is_writable(api_get_path(SYS_CODE_PATH) . 'css/')) { Display::display_error_message(api_get_path(SYS_CODE_PATH) . 'css/' . get_lang('IsNotWritable')); } else { if ($_GET['showuploadform'] == 'true') { echo '<div id="newstylesheetform">'; } else { echo '<div id="newstylesheetform" style="display: none;">'; } // uploading a new stylesheet if ($_configuration['access_url'] == 1) { $form->display(); } else { if ($is_style_changeable) { $form->display(); } } echo '</div>'; } } // Preview of the stylesheet echo '<div><iframe src="style_preview.php" width="100%" height="300" name="preview"></iframe></div>'; echo '<form name="stylesheets" method="post" action="' . api_get_self() . '?category=' . Security::remove_XSS($_GET['category']) . '">'; if ($handle = @opendir(api_get_path(SYS_PATH) . 'main/css/')) { $counter = 1; while (false !== ($style_dir = readdir($handle))) { if (substr($style_dir, 0, 1) == '.') { continue; } $dirpath = api_get_path(SYS_PATH) . 'main/css/' . $style_dir; if (is_dir($dirpath)) { if ($style_dir != '.' && $style_dir != '..') { if ($currentstyle == $style_dir or $style_dir == 'dokeos_classic' and !$currentstyle) { $selected = 'checked="checked"'; } else { $selected = ''; } $show_name = get_lang(str_replace(' ', '', ucwords(str_replace('_', ' ', $style_dir)))); if ($is_style_changeable) { echo "<input type=\"radio\" name=\"style\" value=\"" . $style_dir . "\" " . $selected . " onClick=\"parent.preview.location='style_preview.php?style=" . $style_dir . "';\"/>"; echo '<a href="style_preview.php?style=' . $style_dir . '" target="preview">' . $show_name . '</a>'; } else { echo '<a href="style_preview.php?style=' . $style_dir . '" target="preview">' . $show_name . '</a>'; } //echo '<div id="Layer'.$counter.'" style="position:relative; width:687px; z-index:2; visibility: hidden;">'; //echo '<a href="#" onClick="MM_showHideLayers(\'Layer'.$counter.'\',\'\',\'hide\')">'.get_lang('Close').'</a>'; //echo '<iframe src="style_preview.php?style='.$file.'" width="100%" style="float:right;"></iframe></div>'; echo "<br />\n"; $counter++; } } } @closedir($handle); } if ($is_style_changeable) { echo '<button class="save" type="submit" name="submit_stylesheets"> ' . get_lang('SaveSettings') . ' </button></form>'; } }