From 832ad3eca8929432c569a678480ad9fd24d3a698 Mon Sep 17 00:00:00 2001
From: Garvin Hicking
Date: Sat, 5 Aug 2006 21:43:19 +0000
Subject: [PATCH] fix sorting media paths
---
docs/NEWS | 2 +
include/functions_images.inc.php | 75 ++++++++++++++++++++------------
2 files changed, 48 insertions(+), 29 deletions(-)
diff --git a/docs/NEWS b/docs/NEWS
index be261797..b87a6cdc 100644
--- a/docs/NEWS
+++ b/docs/NEWS
@@ -3,6 +3,8 @@
Version 1.1-alpha7()
------------------------------------------------------------------------
+ * Properly sort media directories (garvinhicking)
+
* Better use of "return by references" in some vital areas.
Improves performance. Might introduce glitches. Keep an eye on this!
(garvinhicking)
diff --git a/include/functions_images.inc.php b/include/functions_images.inc.php
index ffdafcd6..ca45056f 100644
--- a/include/functions_images.inc.php
+++ b/include/functions_images.inc.php
@@ -1380,7 +1380,9 @@ function serendipity_displayImageList($page = 0, $lineBreak = NULL, $manage = fa
}
unset($aResultSet[$sKey]);
}
- //sort($paths);
+
+ usort($paths, 'serendipity_sortPath');
+
if ($debug) echo "Got files:
" . print_r($aFilesOnDisk, true) . "
";
$serendipity['current_image_hash'] = md5(serialize($aFilesOnDisk));
@@ -1714,6 +1716,18 @@ function serendipity_traversePath($basedir, $dir='', $onlyDirs = true, $pattern
return $files;
}
+/**
+ * Custom usort() function that properly sorts a path
+ *
+ * @access public
+ * @param array First array
+ * @param array Second array
+ * @return
+ */
+function serendipity_sortPath($a, $b) {
+ return strcasecmp($a['relpath'], $b['relpath']);
+}
+
/**
* Delete a directory with all its files
*
@@ -2139,7 +2153,7 @@ function serendipity_showPropertyForm(&$new_media, $keywordsPerBlock = 3, $is_ed
'keywords' => $keywords,
'dprops' => $dprops
);
-
+
return serendipity_showMedia(
$show,
$mirror,
@@ -2407,12 +2421,12 @@ function serendipity_parsePropertyForm() {
'authorid' => $serendipity['authorid']
);
serendipity_insertMediaProperty('base_hidden', '', $media['image_id'], $s9y_img['hidden']);
-
+
if ($serendipity['POST']['oldDir'][$id] != $serendipity['POST']['newDir'][$id]) {
serendipity_moveMediaDirectory(
- serendipity_uploadSecure($serendipity['POST']['oldDir'][$id]),
- serendipity_uploadSecure($serendipity['POST']['newDir'][$id]),
- 'filedir',
+ serendipity_uploadSecure($serendipity['POST']['oldDir'][$id]),
+ serendipity_uploadSecure($serendipity['POST']['newDir'][$id]),
+ 'filedir',
$media['image_id']);
}
}
@@ -3057,7 +3071,7 @@ function serendipity_checkMediaSize($file) {
* @param string The new directory
* @param string The type of what to remove (dir|file|filedir)
* @param string An item id of a file
- * @return boolean
+ * @return boolean
*
*/
function serendipity_moveMediaDirectory($oldDir, $newDir, $type = 'dir', $item_id = null, $file = null) {
@@ -3071,42 +3085,42 @@ function serendipity_moveMediaDirectory($oldDir, $newDir, $type = 'dir', $item_i
printf(ERROR_FILE_NOT_EXISTS . '
', $oldDir);
return false;
}
-
+
if (is_dir($real_newDir)) {
printf(ERROR_FILE_EXISTS . '
', $newDir);
return false;
}
-
+
if (!rename($real_oldDir, $real_newDir)) {
printf(MEDIA_DIRECTORY_MOVE_ERROR . '
', $newDir);
return false;
}
-
+
printf(MEDIA_DIRECTORY_MOVED . '
', $newDir);
-
- $dirs = serendipity_db_query("SELECT id, path
- FROM {$serendipity['dbPrefix']}images
+
+ $dirs = serendipity_db_query("SELECT id, path
+ FROM {$serendipity['dbPrefix']}images
WHERE path LIKE '" . serendipity_db_escape_string($oldDir) . "%'", false, 'assoc');
if (is_array($dirs)) {
foreach($dirs AS $dir) {
$old = $dir['path'];
$new = preg_replace('@^(' . preg_quote($oldDir) . ')@i', $newDir, $old);
- serendipity_db_query("UPDATE {$serendipity['dbPrefix']}images
- SET path = '" . serendipity_db_escape_string($new) . "'
+ serendipity_db_query("UPDATE {$serendipity['dbPrefix']}images
+ SET path = '" . serendipity_db_escape_string($new) . "'
WHERE id = {$dir['id']}");
}
}
-
+
$dirs = serendipity_db_query("SELECT groupid, artifact_id, artifact_type, artifact_mode, artifact_index
- FROM {$serendipity['dbPrefix']}access
- WHERE artifact_type = 'directory'
+ FROM {$serendipity['dbPrefix']}access
+ WHERE artifact_type = 'directory'
AND artifact_index LIKE '" . serendipity_db_escape_string($oldDir) . "%'", false, 'assoc');
if (is_array($dirs)) {
foreach($dirs AS $dir) {
$old = $dir['artifact_index'];
$new = preg_replace('@^(' . preg_quote($oldDir) . ')@i', $newDir, $old);
- serendipity_db_query("UPDATE {$serendipity['dbPrefix']}access
- SET artifact_index = '" . serendipity_db_escape_string($new) . "'
+ serendipity_db_query("UPDATE {$serendipity['dbPrefix']}access
+ SET artifact_index = '" . serendipity_db_escape_string($new) . "'
WHERE groupid = '" . serendipity_db_escape_string($dir['groupid']) . "'
AND artifact_id = '" . serendipity_db_escape_string($dir['artifact_id']) . "'
AND artifact_type = '" . serendipity_db_escape_string($dir['artifact_type']) . "'
@@ -3115,7 +3129,7 @@ function serendipity_moveMediaDirectory($oldDir, $newDir, $type = 'dir', $item_i
}
}
}
-
+
if ($type == 'file') {
if (serendipity_isActiveFile(basename($newDir))) {
printf(ERROR_FILE_FORBIDDEN, htmlspecialchars($newDir));
@@ -3170,10 +3184,10 @@ function serendipity_moveMediaDirectory($oldDir, $newDir, $type = 'dir', $item_i
}
if ($type == 'filedir') {
- serendipity_db_query("UPDATE {$serendipity['dbPrefix']}images
+ serendipity_db_query("UPDATE {$serendipity['dbPrefix']}images
SET path = '" . serendipity_db_escape_string($newDir) . "'
WHERE id = " . (int)$item_id);
- $pick = serendipity_db_query("SELECT * FROM {$serendipity['dbPrefix']}images
+ $pick = serendipity_db_query("SELECT * FROM {$serendipity['dbPrefix']}images
WHERE id = " . (int)$item_id, true, 'assoc');
// Move thumbs
@@ -3209,18 +3223,18 @@ function serendipity_moveMediaDirectory($oldDir, $newDir, $type = 'dir', $item_i
}
$q = "SELECT id, body, extended
- FROM {$serendipity['dbPrefix']}entries
+ FROM {$serendipity['dbPrefix']}entries
WHERE body REGEXP '(src|href)=(\'|\")" . serendipity_db_escape_string($serendipity['serendipityHTTPPath'] . $serendipity['uploadHTTPPath'] . $oldDir) . "'
OR extended REGEXP '(src|href)=(\'|\")" . serendipity_db_escape_string($serendipity['serendipityHTTPPath'] . $serendipity['uploadHTTPPath'] . $oldDir) . "'
";
-
+
$dirs = serendipity_db_query($q);
if (is_array($dirs)) {
foreach($dirs AS $dir) {
$dir['body'] = preg_replace('@(src|href)=(\'|")' . preg_quote($serendipity['serendipityHTTPPath'] . $serendipity['uploadHTTPPath'] . $oldDir) . '@', '\1=\2' . $serendipity['serendipityHTTPPath'] . $serendipity['uploadHTTPPath'] . $newDir, $dir['body']);
$dir['extended'] = preg_replace('@(src|href)=(\'|")' . preg_quote($serendipity['serendipityHTTPPath'] . $serendipity['uploadHTTPPath'] . $oldDir) . '@', '\1=\2' . $serendipity['serendipityHTTPPath'] . $serendipity['uploadHTTPPath'] . $newDir, $dir['extended']);
- $uq = "UPDATE {$serendipity['dbPrefix']}entries
+ $uq = "UPDATE {$serendipity['dbPrefix']}entries
SET body = '" . serendipity_db_escape_string($dir['body']) . "' ,
extended = '" . serendipity_db_escape_string($dir['extended']) . "'
WHERE id = " . serendipity_db_escape_string($dir['id']);
@@ -3229,19 +3243,19 @@ function serendipity_moveMediaDirectory($oldDir, $newDir, $type = 'dir', $item_i
printf(MEDIA_DIRECTORY_MOVE_ENTRIES . '
', count($dirs));
}
-
+
return true;
}
/**
* Gets all available media directories
*
- * @return array
+ * @return array
*
*/
function &serendipity_getMediaPaths() {
global $serendipity;
-
+
$aExclude = array("CVS" => true, ".svn" => true);
serendipity_plugin_api::hook_event('backend_media_path_exclude_directories', $aExclude);
$paths = array();
@@ -3264,5 +3278,8 @@ function &serendipity_getMediaPaths() {
unset($aResultSet[$sKey]);
}
serendipity_directoryACL($paths, 'read');
+
+ usort($paths, 'serendipity_sortPath');
+
return $paths;
}
\ No newline at end of file