Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feature 657: permalinks for categories
git-svn-id: http://piwigo.org/svn/trunk@1866 68402e56-0260-453c-a942-63ccdbb3a9ee
- Loading branch information
rvelices
committed
Feb 28, 2007
1 parent
30e2599
commit ea56d7b
Showing
22 changed files
with
650 additions
and
89 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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; | ||
} | ||
|
||
?> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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'); | ||
?> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.