From: <sy...@us...> - 2011-10-28 21:26:42
|
Revision: 38542 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=38542&view=rev Author: sylvieg Date: 2011-10-28 21:26:35 +0000 (Fri, 28 Oct 2011) Log Message: ----------- [ENH]styles: be able to edit styles like bidi.css + some cleaning Modified Paths: -------------- trunk/lib/csslib.php trunk/templates/tiki-edit_css.tpl trunk/tiki-edit_css.php Modified: trunk/lib/csslib.php =================================================================== --- trunk/lib/csslib.php 2011-10-28 19:34:04 UTC (rev 38541) +++ trunk/lib/csslib.php 2011-10-28 21:26:35 UTC (rev 38542) @@ -13,25 +13,42 @@ class cssLib extends TikiLib { + function list_css($path, $recursive=false) { + $files = $this->list_files($path, '.css', $recursive); + foreach ($files as $i=>$file) { + $files[$i] = preg_replace("|^$path/(.*)\.css$|", '$1', $file); + } + return $files; + } - function list_css($path) { + function list_files($path, $extension, $recursive) { $back = array(); - $oldir = getcwd(); - chdir ($path); - $handle = opendir('.'); + $handle = opendir($path); - while ($file = basename(readdir($handle))) { - if ((substr($file, -4, 4) == ".css") and (preg_match('/^[-_a-zA-Z0-9\.]*$/', $file))) { - $back[] = substr($file, 0, -4); + while ($file = readdir($handle)) { + if ((substr($file, -4, 4) == $extension) and (preg_match('/^[-_a-zA-Z0-9\.]*$/', $file))) { + $back[] = "$path/$file"; + } elseif ($recursive && $file != '.svn' && $file != '.' && $file != '..' && is_dir("$path/$file") && !file_exists("db/$file/local.php")) { + $back = array_merge($back, $this->list_files("$path/$file", $extension, $recursive)); } } - - chdir ($oldir); + closedir($handle); sort($back); return $back; } + /* nickname = fivealive or Bidi/Bidi */ + function get_nickname_path($nickname, $styledir) { + global $tikidomain; + if (!strstr($nickname, '\/') && !empty($tikidomain) && is_dir("$styledir/$tikidomain")) { + $style = "$styledir/$tikidomain/$nickname.css"; + } else { + $style = "$styledir/$nickname.css"; + } + return $style; +} + function browse_css($path) { if (!is_file($path)) { return array("error" => "No such file : $path"); Modified: trunk/templates/tiki-edit_css.tpl =================================================================== --- trunk/templates/tiki-edit_css.tpl 2011-10-28 19:34:04 UTC (rev 38541) +++ trunk/templates/tiki-edit_css.tpl 2011-10-28 21:26:35 UTC (rev 38542) @@ -16,6 +16,11 @@ {if $tikidomain} {tr}The file will be saved in:{/tr} styles/{$tikidomain} {/if} + {if !empty($editstyle) && !$writable} + {remarksbox type="warning" title="{tr}Warning{/tr}"} + {tr}Cannot write the file{/tr} + {/remarksbox} + {/if} <div style="padding:4px;border-bottom:1px solid #c3b3a3;"> <textarea name="data" rows="42" cols="80" wrap="virtual" style="padding:7px;padding-right:0;">{$data|escape}</textarea> </div> Modified: trunk/tiki-edit_css.php =================================================================== --- trunk/tiki-edit_css.php 2011-10-28 19:34:04 UTC (rev 38541) +++ trunk/tiki-edit_css.php 2011-10-28 21:26:35 UTC (rev 38542) @@ -8,139 +8,90 @@ include_once ("tiki-setup.php"); include_once ("lib/csslib.php"); -// -// Load CSS2 styled file (@import aware) -// -// TODO: Will M$ windowz eat '/' as path delimiter? -// -function load_css2_file($filename, $styledir) { - $data = ''; - - $lines = file($filename); - - // - foreach ($lines as $line) { - /* - if (preg_match_all("/@import( |\t)+('|\")(.*)(|\")( |\t)*;/U", $line, $importfiles, PREG_SET_ORDER)) { - foreach ($importfiles as $file) { - $import = $styledir . '/' . $file[3]; - - $data .= load_css2_file($import, substr($import, 0, strrpos($import, "/"))); - $line = str_replace($file[0], "", $line); - } - } - */ - // TODO: Does it matter what $line may contain smth before '@import'? :) - $data .= $line; - } - - return $data; -} - -if (!isset($prefs['feature_editcss'])) - $prefs['feature_editcss'] = 'n'; - -if (!isset($tiki_p_create_css)) - $tiki_p_create_css = 'n'; $access->check_feature('feature_editcss'); $access->check_permission('tiki_p_create_css'); -if (!isset($_REQUEST["editstyle"])) - $_REQUEST["editstyle"] = ''; - -if (!isset($_REQUEST["sub"])) - $_REQUEST["sub"] = ''; - -if (!isset($_REQUEST["try"])) - $_REQUEST["try"] = ''; - -$editstyle = preg_replace("/[^-_a-z\d]/i","",$_REQUEST["editstyle"]); -$styledir = "styles"; - -function get_style_path($editstyle, $styledir) { - global $tikidomain; - if ($tikidomain and is_file("$styledir/$tikidomain/$editstyle.css")) { - return "$styledir/$tikidomain/$editstyle.css"; - } else { - return "$styledir/$editstyle.css"; - } +if (!isset($_REQUEST['editstyle'])) { + $editstyle = ''; +} else { + $editstyle = $_REQUEST['editstyle']; + if (!preg_match('#^[a-z\d]+(/[-_a-z\d]+)*$#i', $editstyle)) { + $smarty->assign('msg', tra('Incorrect name')); + $smarty->display('error.tpl'); + die; + } } -function get_style_mod($editstyle, $styledir) { - $style=get_style_path($editstyle, $styledir); - $stat=stat($style); - return $stat['mode'] & 0666; -} +$styledir = 'styles'; +$style = $csslib->get_nickname_path($editstyle, $styledir); -if (isset($_REQUEST["edit"])and $_REQUEST["edit"]) { - - $action = 'edit'; - $data = load_css2_file(get_style_path($editstyle, $styledir), $styledir); - -} elseif ((isset($_REQUEST["save"]) and $_REQUEST["save"]) or (isset($_REQUEST["save2"]) and $_REQUEST["save2"])) { +if (!empty($_REQUEST['edit'])) { check_ticket('edit-css'); + if (($data = file_get_contents($style)) === false) { + $smarty->assign('msg', tra('The specified file does not exist')); + $smarty->display('error.tpl'); + die; + } $action = 'edit'; - $data = ''; - if ($tikidomain and is_dir("$styledir/$tikidomain")) { - $style = "$styledir/$tikidomain/$editstyle.css"; +} elseif (!empty($_REQUEST['save']) || !empty($_REQUEST['save2'])) { + check_ticket('edit-css'); + if (file_exists($style)) { + $stat = stat($style); + $mod = $stat['mode'] & 0666; } else { - $style = "$styledir/$editstyle.css"; + $mod = NULL; } - - $mod=NULL; - $mod = get_style_mod($editstyle, $styledir); $fp = fopen($style, "w"); if (!$fp) { - $smarty->assign('errortype', 401); $smarty->assign('msg', tra("You do not have permission to write the style sheet")." $style"); - $smarty->display("error.tpl"); die; } - fwrite($fp, $_REQUEST["data"]); + fwrite($fp, $_REQUEST['data']); fclose ($fp); if ($mod !== NULL) { chmod($style, $mod); } - if ($_REQUEST["save2"]) { + if (!empty($_REQUEST['save2'])) { $action = 'display'; header("location: tiki-edit_css.php?editstyle=$editstyle"); } else { + $action = 'edit'; header("location: tiki-edit_css.php?editstyle=$editstyle&edit=".tra('Edit').""); } + $data = ''; } else { $action = 'display'; - $data = ''; } $smarty->assign('action', $action); $smarty->assign('data', $data); -if ($tikidomain and is_file("$styledir/$tikidomain/$editstyle.css")) { - $cssdata = $csslib->browse_css("$styledir/$tikidomain/$editstyle.css"); -} else { - $cssdata = $csslib->browse_css("$styledir/$editstyle.css"); +if (!empty($editstyle)) { + $smarty->assign('writable', is_writable($style)); + $cssdata = $csslib->browse_css($style); + if ((!$cssdata["error"]) and is_array($cssdata["content"])) { + $parsedcss = $csslib->parse_css($cssdata["content"]); + } else { + $parsedcss = $cssdata["error"]; + } + $smarty->assign('css', $parsedcss); } -if ((!$cssdata["error"]) and is_array($cssdata["content"])) { - $parsedcss = $csslib->parse_css($cssdata["content"]); -} else { - $parsedcss = $cssdata["error"]; -} -$smarty->assign('css', $parsedcss); $smarty->assign('editstyle', $editstyle); -if ($_REQUEST["try"]) { +if (!empty($_REQUEST['try'])) { $style = "$editstyle.css"; $_SESSION['try_style'] = $style; $prefs['style'] = $style; + header("location: tiki-edit_css.php?editstyle=$editstyle"); } -$list = $csslib->list_css($styledir); +$list = $csslib->list_css($styledir, true); if ($tikidomain and is_dir("$styledir/$tikidomain")) { $list = array_unique(array_merge($list,$csslib->list_css("$styledir/$tikidomain"))); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |