From: garvinhicking Date: Wed, 19 Apr 2006 17:07:57 +0000 (+0000) Subject: Media search/filter X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=f196adb63ae45114ed1cdc2a509a1cf6dc7f7be0;p=s9y.git Media search/filter --- diff --git a/docs/NEWS b/docs/NEWS index ed32e25..3778be1 100644 --- a/docs/NEWS +++ b/docs/NEWS @@ -31,13 +31,14 @@ Version 1.1-alpha4() already exists - Restrict file upload by size/dimensions via configuration options + - Sort media files by all custom property fields + - Enhanced media filter for keywords TODO: - Search/Filter for specific properties/keywords: - Sort by: Title, Filename, Creation date, Upload date, - file type, author - Search by: Title, Creation date (From-To), Filetype, - Comment(s), Keyword, Author + Search by: custom property fields. Evaluate input data from + serendipity_getImageFields(): 'date', 'intrange', 'text' + Make sure timestamps are saved as UNIX timestamp always! - New option for image_Selector to save a specific sized version (?fid=XXX&targetSize=XX) diff --git a/include/admin/images.inc.php b/include/admin/images.inc.php index ee16f86..ca59240 100644 --- a/include/admin/images.inc.php +++ b/include/admin/images.inc.php @@ -729,8 +729,7 @@ switch ($serendipity['GET']['adminAction']) { } } //--> - - + $keyword) { + $keywords[$i] = serendipity_db_escape_string($keyword); + } + + if (count($keywords) > 0) { + $fsql = "(mk.property IN ('" . implode("', '", $keywords) . "'))"; if (empty($directorysql)) { - $directorysql = " WHERE name like '%" . serendipity_db_escape_string($filename) . "%'"; + $directorysql = " WHERE $fsql"; } else { - $directorysql .= " AND name like '%" . serendipity_db_escape_string($filename) . "%'"; + $directorysql .= " AND $fsql"; } } @@ -81,6 +109,21 @@ function serendipity_fetchImagesFromDatabase($start=0, $limit=0, &$total, $order ); serendipity_ACL_SQL($cond, false, 'directory'); + if (count($keywords) > 0) { + $cond['joins'] .= "LEFT OUTER JOIN {$serendipity['dbPrefix']}mediaproperties AS mk + ON (mk.mediaid = i.id AND mk.property_group = 'base_keyword')"; + } + + if (substr($order, 0, 3) === 'bp.') { + $cond['orderproperty'] = substr($order, 3); + $cond['joins'] .= "LEFT OUTER JOIN {$serendipity['dbPrefix']}mediaproperties AS bp + ON (bp.mediaid = i.id AND bp.property_group = 'base_property' AND bp.property = '{$cond['orderproperty']}')"; + $cond['orderkey'] = 'bp.value'; + $order = 'bp.value'; + } else { + $cond['orderkey'] = "''"; + } + if ($serendipity['dbType'] == 'postgres') { $cond['group'] = ''; $cond['distinct'] = 'DISTINCT'; @@ -96,7 +139,7 @@ function serendipity_fetchImagesFromDatabase($start=0, $limit=0, &$total, $order {$cond['and']}"; - $query = "SELECT {$cond['distinct']} i.id, i.name, i.extension, i.mime, i.size, i.dimensions_width, i.dimensions_height, i.date, i.thumbnail_name, i.authorid, i.path, i.hotlink, i.realname, + $query = "SELECT {$cond['distinct']} i.id, {$cond[orderkey]} AS orderkey, i.name, i.extension, i.mime, i.size, i.dimensions_width, i.dimensions_height, i.date, i.thumbnail_name, i.authorid, i.path, i.hotlink, i.realname, a.realname AS authorname $basequery {$cond['group']} @@ -105,6 +148,7 @@ function serendipity_fetchImagesFromDatabase($start=0, $limit=0, &$total, $order $rs = serendipity_db_query($query, false, 'assoc'); if (!is_array($rs)) { + echo '
' . $rs . '
'; return array(); } @@ -1175,7 +1219,7 @@ function serendipity_displayImageList($page = 0, $lineBreak = NULL, $manage = fa static $debug = false; $sortParams = array('perpage', 'order', 'ordermode'); - $importParams = array('adminModule', 'htmltarget', 'filename_only', 'textarea', 'subpage'); + $importParams = array('adminModule', 'htmltarget', 'filename_only', 'textarea', 'subpage', 'keywords'); $extraParems = ''; $filterParams = array('only_path', 'only_filename'); @@ -1336,7 +1380,8 @@ function serendipity_displayImageList($page = 0, $lineBreak = NULL, $manage = fa (isset($serendipity['GET']['sortorder']['order']) ? $serendipity['GET']['sortorder']['order'] : false), (isset($serendipity['GET']['sortorder']['ordermode']) ? $serendipity['GET']['sortorder']['ordermode'] : false), (isset($serendipity['GET']['only_path']) ? $serendipity['GET']['only_path'] : ''), - (isset($serendipity['GET']['only_filename']) ? $serendipity['GET']['only_filename'] : '') + (isset($serendipity['GET']['only_filename']) ? $serendipity['GET']['only_filename'] : ''), + (isset($serendipity['GET']['keywords']) ? $serendipity['GET']['keywords'] : '') ); $pages = ceil($totalImages / $perPage); @@ -1649,15 +1694,50 @@ function serendipity_getimagesize($file, $ft_mime = '', $suf = '') { * @return array Array with available, sortable fields */ function serendipity_getImageFields() { - return array( - 'date' => SORT_ORDER_DATE, - 'name' => SORT_ORDER_NAME, - 'authorid' => AUTHOR, - 'extension' => SORT_ORDER_EXTENSION, - 'size' => SORT_ORDER_SIZE, - 'dimensions_width' => SORT_ORDER_WIDTH, - 'dimensions_height' => SORT_ORDER_HEIGHT + global $serendipity; + + $x = array( + 'date' => array('desc' => SORT_ORDER_DATE, + 'type' => 'date' + ), + + 'name' => array('desc' => SORT_ORDER_NAME + ), + + 'authorid' => array('desc' => AUTHOR, + 'type' => 'authors' + ), + + 'extension' => array('desc' => SORT_ORDER_EXTENSION + ), + + 'size' => array('desc' => SORT_ORDER_SIZE, + 'type' => 'intrange' + ), + + 'dimensions_width' => array('desc' => SORT_ORDER_WIDTH, + 'type' => 'intrange' + ), + + 'dimensions_height' => array('desc' => SORT_ORDER_HEIGHT, + 'type' => 'intrange' + ) ); + + $addProp = explode(';', $serendipity['mediaProperties']); + foreach($addProp AS $prop) { + $parts = explode(':', $prop); + $name = $parts[0]; + $x['bp.' . $name] = array('desc' => (defined('MEDIA_PROPERTY_' . $name) ? constant('MEDIA_PROPERTY_' . $name) : htmlspecialchars($name))); + if (preg_match('@date@i', $name)) { + $x['bp.' . $name]['type'] = 'date'; + } + if (preg_match('@length@i', $name)) { + $x['bp.' . $name]['type'] = 'intrange'; + } + } + + return $x; } /** @@ -2331,9 +2411,12 @@ function serendipity_showMedia(&$file, &$paths, $url = '', $manage = false, $lin 'only_path' => $serendipity['GET']['only_path'], 'only_filename' => $serendipity['GET']['only_filename'], 'sortorder' => $serendipity['GET']['sortorder'], + 'keywords_selected' => $serendipity['GET']['keywords'], + 'filter' => $serendipity['GET']['filter'], 'sort_order' => serendipity_getImageFields(), 'sort_row_interval' => array(8, 16, 50, 100), 'nr_files' => count($file), + 'keywords' => explode(';', $serendipity['mediaKeywords']), ); $media = array_merge($media, $smarty_vars); diff --git a/templates/default/admin/media_items.tpl b/templates/default/admin/media_items.tpl index 672bece..5e31eab 100644 --- a/templates/default/admin/media_items.tpl +++ b/templates/default/admin/media_items.tpl @@ -4,7 +4,7 @@ {/if} {if NOT $media.manage} - {$file.preview} + {$file.preview}{if $file.orderkey != ''}: {$file.orderkey|@escape}{/if} {else} @@ -20,14 +20,13 @@ {/if} @@ -39,7 +38,8 @@ {$CONST.ORIGINAL_SHORT}: {$file.dimensions_width}x{$file.dimensions_height}, {$CONST.THUMBNAIL_SHORT}: {$file.dim.0}x{$file.dim.1}
{/if} - {$file.nice_size}kb + {$file.nice_size}kb {if $file.realname != $file.diskname} [{$file.diskname}]{/if} + {/if} diff --git a/templates/default/admin/media_pane.tpl b/templates/default/admin/media_pane.tpl index da26390..ff9a3d3 100644 --- a/templates/default/admin/media_pane.tpl +++ b/templates/default/admin/media_pane.tpl @@ -1,7 +1,33 @@ + + {$media.token} {$media.form_hidden}
-
{$file.realname}
+
{$file.realname}{if $file.orderkey != ''}: {$file.orderkey|@escape}{/if}
{if $file.authorid != 0}{$file.authorname}{else}
{/if}
{$file.preview} - {if $file.realname != $file.diskname} [{$file.diskname}]{/if}
+ + + + + + + + + + @@ -15,8 +41,38 @@ - + + + + + + @@ -25,7 +81,7 @@
{$CONST.FILTERS} - {$CONST.FIND_MEDIA}
{$CONST.SORT_ORDER_NAME}» {$CONST.FILTERS}
+ + +
{$CONST.SORT_ORDER}