diff options
author | rvelices <rv-github@modusoptimus.com> | 2007-02-28 03:07:12 +0000 |
---|---|---|
committer | rvelices <rv-github@modusoptimus.com> | 2007-02-28 03:07:12 +0000 |
commit | ea56d7b2ac1d41ea19b5fb45843c839e30a0b37b (patch) | |
tree | 5f55c108b1a808867d44db2b6ebcf0ad573874b6 /admin | |
parent | 30e259904cc38172b2b730455009455675f0d8f5 (diff) |
feature 657: permalinks for categories
git-svn-id: http://piwigo.org/svn/trunk@1866 68402e56-0260-453c-a942-63ccdbb3a9ee
Diffstat (limited to 'admin')
-rw-r--r-- | admin/cat_list.php | 28 | ||||
-rw-r--r-- | admin/include/functions.php | 5 | ||||
-rw-r--r-- | admin/include/functions_permalinks.php | 170 | ||||
-rw-r--r-- | admin/permalinks.php | 97 | ||||
-rw-r--r-- | admin/plugin.php | 3 |
5 files changed, 274 insertions, 29 deletions
diff --git a/admin/cat_list.php b/admin/cat_list.php index c34754f87..e11e13b8b 100644 --- a/admin/cat_list.php +++ b/admin/cat_list.php @@ -138,32 +138,6 @@ SELECT id, name } // +-----------------------------------------------------------------------+ -// | Cache management | -// +-----------------------------------------------------------------------+ -$query = ' -SELECT * - FROM '.CATEGORIES_TABLE; -if (!isset($_GET['parent_id'])) -{ - $query.= ' - WHERE id_uppercat IS NULL'; -} -else -{ - $query.= ' - WHERE id_uppercat = '.$_GET['parent_id']; -} -$query.= ' - ORDER BY rank ASC -;'; -$result = pwg_query($query); -while ($row = mysql_fetch_assoc($result)) -{ - $categories[$row['rank']] = $row; - $categories[$row['rank']]['nb_subcats'] = 0; -} - -// +-----------------------------------------------------------------------+ // | Navigation path | // +-----------------------------------------------------------------------+ @@ -209,7 +183,7 @@ $tpl = array('cat_first','cat_last'); $categories = array(); $query = ' -SELECT id, name, dir, rank, nb_images, status +SELECT id, name, permalink, dir, rank, nb_images, status FROM '.CATEGORIES_TABLE; if (!isset($_GET['parent_id'])) { diff --git a/admin/include/functions.php b/admin/include/functions.php index ff54dbbab..99ebfac62 100644 --- a/admin/include/functions.php +++ b/admin/include/functions.php @@ -120,6 +120,11 @@ DELETE FROM '.CATEGORIES_TABLE.' ;'; pwg_query($query); + $query=' +DELETE FROM '.OLD_PERMALINKS_TABLE.' + WHERE cat_id IN ('.implode(',',$cat_ids).')'; + pwg_query($query); + if (isset($counts['del_categories'])) { $counts['del_categories']+= count($ids); diff --git a/admin/include/functions_permalinks.php b/admin/include/functions_permalinks.php new file mode 100644 index 000000000..9a36ccf3d --- /dev/null +++ b/admin/include/functions_permalinks.php @@ -0,0 +1,170 @@ +<?php +// +-----------------------------------------------------------------------+ +// | PhpWebGallery - a PHP based picture gallery | +// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net | +// +-----------------------------------------------------------------------+ +// | file : $Id: admin/function_permalinks.inc.php$ +// | last update : $Date$ +// | last modifier : $Author$ +// | revision : $Revision$ +// +-----------------------------------------------------------------------+ +// | This program is free software; you can redistribute it and/or modify | +// | it under the terms of the GNU General Public License as published by | +// | the Free Software Foundation | +// | | +// | This program is distributed in the hope that it will be useful, but | +// | WITHOUT ANY WARRANTY; without even the implied warranty of | +// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | +// | General Public License for more details. | +// | | +// | You should have received a copy of the GNU General Public License | +// | along with this program; if not, write to the Free Software | +// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, | +// | USA. | +// +-----------------------------------------------------------------------+ + +/** deletes the permalink associated with a category + * returns true on success + * @param int cat_id the target category id + * @param boolean save if true, the current category-permalink association + * is saved in the old permalinks table in case external links hit it + */ +function delete_cat_permalink( $cat_id, $save ) +{ + global $page, $cache; + $query = ' +SELECT permalink + FROM '.CATEGORIES_TABLE.' + WHERE id="'.$cat_id.'" +;'; + $result = pwg_query($query); + if ( mysql_num_rows($result) ) + { + list($permalink) = mysql_fetch_array($result); + } + if ( !isset($permalink) ) + {// no permalink; nothing to do + return true; + } + if ($save) + { + $old_cat_id = get_cat_id_from_old_permalink($permalink, false); + if ( isset($old_cat_id) and $old_cat_id!=$cat_id ) + { + $page['errors'][] = + sprintf( + l10n('Permalink_%s_histo_used_by_%s'), + $permalink, $old_cat_id + ); + return false; + } + } + $query = ' +UPDATE '.CATEGORIES_TABLE.' + SET permalink=NULL + WHERE id='.$cat_id.' + LIMIT 1'; + pwg_query($query); + + unset( $cache['cat_names'] ); //force regeneration + if ($save) + { + if ( isset($old_cat_id) ) + { + $query = ' +UPDATE '.OLD_PERMALINKS_TABLE.' + SET date_deleted=NOW() + WHERE cat_id='.$cat_id.' AND permalink="'.$permalink.'"'; + } + else + { + $query = ' +INSERT INTO '.OLD_PERMALINKS_TABLE.' + (permalink, cat_id, date_deleted) +VALUES + ( "'.$permalink.'",'.$cat_id.',NOW() )'; + } + pwg_query( $query ); + } + return true; +} + +/** sets a new permalink for a category + * returns true on success + * @param int cat_id the target category id + * @param string permalink the new permalink + * @param boolean save if true, the current category-permalink association + * is saved in the old permalinks table in case external links hit it + */ +function set_cat_permalink( $cat_id, $permalink, $save ) +{ + global $page, $cache; + + $sanitized_permalink = preg_replace( '#[^a-zA-Z0-9_-]#', '' ,$permalink); + if ( $sanitized_permalink != $permalink + or preg_match( '#^(\d)+-?#', $permalink) ) + { + $page['errors'][] = l10n('Permalink_name_rule'); + return false; + } + + $existing_cat_id = get_cat_id_from_permalink( $permalink ); + if ( isset($existing_cat_id) ) + { + if ( $existing_cat_id==$cat_id ) + {// no change required + return true; + } + else + { + $page['errors'][] = + sprintf( + l10n('Permalink %s is already used by category %s'), + $permalink, $existing_cat_id + ); + return false; + } + } + + if ($save) + { + $old_cat_id = get_cat_id_from_old_permalink($permalink, false); + if ( isset($old_cat_id) ) + { + if ( $old_cat_id!=$cat_id ) + { + $page['errors'][] = + sprintf( + l10n('Permalink_%s_histo_used_by_%s'), + $permalink, $old_cat_id + ); + return false; + } + else + { + $query = ' +DELETE FROM '.OLD_PERMALINKS_TABLE.' + WHERE cat_id='.$cat_id.' AND permalink="'.$permalink.'"'; + pwg_query($query); + } + } + } + + if ( !delete_cat_permalink($cat_id, $save ) ) + { + return false; + } + + $query = ' +UPDATE '.CATEGORIES_TABLE.' + SET permalink="'.$permalink.'" + WHERE id='.$cat_id.' + LIMIT 1'; + pwg_query($query); + + unset( $cache['cat_names'] ); //force regeneration + + return true; +} + +?> diff --git a/admin/permalinks.php b/admin/permalinks.php new file mode 100644 index 000000000..d00770dd9 --- /dev/null +++ b/admin/permalinks.php @@ -0,0 +1,97 @@ +<?php +// +-----------------------------------------------------------------------+ +// | PhpWebGallery - a PHP based picture gallery | +// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net | +// +-----------------------------------------------------------------------+ +// | file : $Id$ +// | last update : $Date$ +// | last modifier : $Author$ +// | revision : $Revision$ +// +-----------------------------------------------------------------------+ +// | This program is free software; you can redistribute it and/or modify | +// | it under the terms of the GNU General Public License as published by | +// | the Free Software Foundation | +// | | +// | This program is distributed in the hope that it will be useful, but | +// | WITHOUT ANY WARRANTY; without even the implied warranty of | +// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | +// | General Public License for more details. | +// | | +// | You should have received a copy of the GNU General Public License | +// | along with this program; if not, write to the Free Software | +// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, | +// | USA. | +// +-----------------------------------------------------------------------+ + +if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!'); + +include_once(PHPWG_ROOT_PATH.'admin/include/functions_permalinks.php'); + +$selected_cat = array(); +if ( isset($_POST['set_permalink']) and $_POST['cat_id']>0 ) +{ + $permalink = $_POST['permalink']; + if ( empty($permalink) ) + delete_cat_permalink($_POST['cat_id'], isset($_POST['save']) ); + else + set_cat_permalink($_POST['cat_id'], $permalink, isset($_POST['save']) ); + $selected_cat = array( $_POST['cat_id'] ); +} +elseif ( isset($_GET['delete_permanent']) ) +{ + $query = ' +DELETE FROM '.OLD_PERMALINKS_TABLE.' + WHERE permalink="'.$_GET['delete_permanent'].'" + LIMIT 1'; + pwg_query($query); + if (mysql_affected_rows()==0) + array_push($page['errors'], 'Cannot delete the old permalink !'); +} + +$template->set_filename('permalinks', 'admin/permalinks.tpl' ); + +$query = ' +SELECT + id, + CONCAT(id, " - ", name, IF(permalink IS NULL, "", " √") ) AS name, + uppercats, global_rank +FROM '.CATEGORIES_TABLE; + +display_select_cat_wrapper( $query, $selected_cat, 'categories', false ); + +$query = ' +SELECT id, name, permalink + FROM '.CATEGORIES_TABLE.' + WHERE permalink IS NOT NULL'; +$result=pwg_query($query); +while ( $row=mysql_fetch_assoc($result) ) +{ + $display_name = get_cat_display_name( array($row) ); + $template->assign_block_vars( 'permalink', + array( + 'CAT_ID' => $row['id'], + 'CAT' => $display_name, + 'PERMALINK' => $row['permalink'], + ) + ); +} + +$url_del_base = get_root_url().'admin.php?page=permalinks'; + +$query = 'SELECT * FROM '.OLD_PERMALINKS_TABLE; +$result = pwg_query($query); +while ( $row=mysql_fetch_assoc($result) ) +{ + $row['display_name'] = get_cat_display_name_cache($row['cat_id']); + $row['U_DELETE'] = + add_url_params( + $url_del_base, + array( 'delete_permanent'=> $row['permalink'] ) + ); + $template->assign_block_vars( 'deleted_permalink', $row ); +} + +$template->assign_var('U_HELP', get_root_url().'popuphelp.php?page=permalinks'); + +$template->assign_var_from_handle('ADMIN_CONTENT', 'permalinks'); +?> diff --git a/admin/plugin.php b/admin/plugin.php index 1657f10c8..aa8faaade 100644 --- a/admin/plugin.php +++ b/admin/plugin.php @@ -49,8 +49,7 @@ if (count($sections)<2) } $plugin_id = $sections[0]; -$check_db_plugin = get_db_plugins('active', $plugin_id ); -if (empty($check_db_plugin)) +if ( !isset($pwg_loaded_plugins[$plugin_id]) ) { die('Invalid URL - plugin '.$plugin_id.' not active'); } |