aboutsummaryrefslogtreecommitdiffstats
path: root/admin
diff options
context:
space:
mode:
authorrvelices <rv-github@modusoptimus.com>2007-02-28 03:07:12 +0000
committerrvelices <rv-github@modusoptimus.com>2007-02-28 03:07:12 +0000
commitea56d7b2ac1d41ea19b5fb45843c839e30a0b37b (patch)
tree5f55c108b1a808867d44db2b6ebcf0ad573874b6 /admin
parent30e259904cc38172b2b730455009455675f0d8f5 (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.php28
-rw-r--r--admin/include/functions.php5
-rw-r--r--admin/include/functions_permalinks.php170
-rw-r--r--admin/permalinks.php97
-rw-r--r--admin/plugin.php3
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, "", " &radic;") ) 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');
}