diff options
Diffstat (limited to 'code/admin/add.php')
-rw-r--r-- | code/admin/add.php | 65 |
1 files changed, 43 insertions, 22 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> |