summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--code/admin/add.php65
-rw-r--r--code/admin/utils.php10
2 files changed, 51 insertions, 24 deletions
diff --git a/code/admin/add.php b/code/admin/add.php
index 02622fc..3bbb547 100644
--- a/code/admin/add.php
+++ b/code/admin/add.php
@@ -2,10 +2,14 @@
require_once('utils.php');
need_auth();
+ function is_valid_path($kind,$path) {
+ $fullpath=(($kind=='media')?'media/':'content/').$path.'/'.$name;
+ return is_dir($fullpath);
+ }
+
function add_fold($kind,$path,$name) {
$fullpath=(($kind=='media')?'media/':'content/').$path.'/'.$name;
-echo $fullpath . "\n";
- return mkdir($fullpath);
+ return mkdir($fullpath)===1?0:E_SYSTEM_ERROR;
}
function add_media($path,$name) {
@@ -15,7 +19,7 @@ echo $fullpath . "\n";
function add_page($path,$name) {
if ( $res=add_fold('page',$path,$name) ) {
$props = array(
- 'page_template' => 'default',
+ 'page_template' => 'default', //TODO : not static
'page_layout' => 'article',
'page_title' => '(missing)',
'page_description' => '(missing)',
@@ -26,6 +30,29 @@ echo $fullpath . "\n";
}
return $res;
}
+
+ // TODO : choose between unix convention (0 is fine, else is error) and PHP one (FALSE is error, else is okay)
+ function do_action($kind,$action,$path,$name) {
+ if ($action==='none') return 0;
+ if ($name==='') return E_INVALID_NAME;
+ if ( ! is_valid_path($kind,$path) ) return E_INVALID_PATH;
+ if ( is_valid_path($kind,$path . '/' . $name) ) return E_INVALID_NAME;
+
+ switch ($action) {
+ case 'add_fold':
+ return add_fold($kind,$path,$name);
+ break;
+ case 'add_item':
+ if ( $kind=='media' ) {
+ return add_media($path,$name);
+ } else {
+ return add_page($path,$name);
+ }
+ break;
+ default:
+ return E_INVALID_ACTION;
+ }
+ }
// Config loading
$site_conf = load_ini_site_conf("content/site_conf.ini");
@@ -34,28 +61,22 @@ echo $fullpath . "\n";
// Localization Init
l10n_init($site_conf['site_admin_lang']);
+ $default_path = _('(choose a folder in the tree)');
// URL parameter parsing
$kind = sanitize($_GET, 'kind', RE_IDENTIFIER_CLEANER, 'page'); /* Could be : page, media */
- $action=sanitize($_GET, 'action', RE_IDENTIFIER_CLEANER, 'preview'); /* Could be : none, add_fold, add_item */
- $path = sanitize($_GET, 'path', RE_RELPATH_CLEANER, '');
+ $action=sanitize($_GET, 'action', RE_IDENTIFIER_CLEANER, 'none'); /* Could be : none, add_fold, add_item */
+ $path = sanitize($_GET, 'path', RE_RELPATH_CLEANER, $default_path);
$name = sanitize($_GET, 'name', RE_IDENTIFIER_CLEANER, '');
// Pre-computed because used twice
$page_title = _('Admin') . ' - ' . ( ($kind=='media')?_('Add or remove a media'):_('Add or remove a page') );
- $res=null;
- switch ($action) {
- case 'add_fold':
- $res=add_fold($kind,$path,$name);
- break;
- case 'add_item':
- if ( $kind=='media' ) {
- $res=add_media($path,$name);
- } else {
- $res=add_page($path,$name);
- }
- break;
- }
+ $res=do_action($kind,$action,$path,$name);
+ if ($res===E_INVALID_PATH) $path = $default_path;
+
+ //echo "<pre>\$res==$res</pre>\n";
+ //TODO : user feedback for success/failure
+
?>
<!DOCTYPE html>
<html>
@@ -88,18 +109,18 @@ echo $fullpath . "\n";
<fieldset>
<legend><?=_('Selected folder')?></legend>
<label for="fold_path"><?=_('Folder path')?></label>
-<input id="fold_path" name="fold_path" readonly="readonly" value="<?=_('(choose a folder in the tree)')?>"><br>
+<input id="fold_path" name="fold_path" readonly="readonly" value="<?=$path?>"><br>
<label for="fold_add_name"><?=_('New item name')?></label>
<input id="fold_add_name" type="text" value=""><br>
-<label for="fold_add_fold"><?=_('Actions')?></label>
+<label for="fold_add_item"><?=_('Actions')?></label>
+<input id="fold_add_item" type="button" value="<?=($kind=='media')?_('Add media'):_('Add page')?>" onclick="go_add('<?=$kind?>','item');">
<input id="fold_add_fold" type="button" value="<?=_('Add folder')?>" onclick="go_add('<?=$kind?>','fold');">
-<input id="fold_add_item" type="button" value="<?=_('Add page')?>" onclick="go_add('<?=$kind?>','item');">
</fieldset>
</span><!-- No blanks here, important for CSS --><span class="inline_half">
<input id="fold_back_admin" type="button" value="<?=_('Back to admin')?>" onclick="go_admin_page();">
-
+</span>
</form>
</body>
</html>
diff --git a/code/admin/utils.php b/code/admin/utils.php
index 4db2d2d..30d3788 100644
--- a/code/admin/utils.php
+++ b/code/admin/utils.php
@@ -4,6 +4,11 @@
define('RE_LANG_IDENT_CLEANER', '/[^a-zA-Z\/\_-]+/');
define('RE_RELPATH_CLEANER', '/[^a-zA-Z0-9_\/-]+/'); // Never put \. in this regex
+ define('E_INVALID_ACTION', -1);
+ define('E_INVALID_PATH', -2);
+ define('E_INVALID_NAME', -3);
+ define('E_SYSTEM_ERROR', -4);
+
function sanitize($arg_array, $arg_key, $replace_chars_re, $default_value) {
//FIXME : should check string type and strlen !
if ( ! array_key_exists($arg_key, $arg_array) ) return $default_value;
@@ -140,14 +145,15 @@
echo "</ul>\n";
}
+ // TODO : choose between unix convention (0 is fine, else is error) and PHP one (FALSE is error, else is okay)
function safe_put_file($path, $content) {
//FIXME : if exists, then mktemp, put in it then rm and mv. Right preservation problems ?
- $res=FALSE;
+ $res=-1;
if ($handle = fopen($path, 'w')) {
$res = fwrite($handle, $content);
fclose($handle);
}
- return $res;
+ return ($res===strlen($content))?0:E_SYSTEM_ERROR;
}
function _write_ini_file_r(&$content, $assoc_arr, $has_sections)