function serendipity_fetchImagesFromDatabase($start=0, $limit=0, &$total, $order = false, $ordermode = false, $directory = '', $filename = '', $keywords = '', $filter = array()) {
global $serendipity;
+ $cond = array(
+ 'joinparts' => array(),
+ 'parts' => array(),
+ );
+
$orderfields = serendipity_getImageFields();
if (empty($order) || !isset($orderfields[$order])) {
$order = 'i.date';
$limitsql = serendipity_db_limit_sql(serendipity_db_limit($start, $limit));
}
- $where_sql = "WHERE 1 \n";
if (!empty($directory)) {
- $where_sql .= " AND i.path LIKE '" . serendipity_db_escape_string($directory) . "%'\n";
+ $cond['parts']['directory'] = " AND i.path LIKE '" . serendipity_db_escape_string($directory) . "%'\n";
}
if (!empty($filename)) {
- $where_sql .= " AND (i.name like '%" . serendipity_db_escape_string($filename) . "%' OR
+ $cond['parts']['filename'] = " AND (i.name like '%" . serendipity_db_escape_string($filename) . "%' OR
i.realname like '%" . serendipity_db_escape_string($filename) . "%')\n";
}
$keywords[$i] = serendipity_db_escape_string($keyword);
}
- $join_properties = $join_keywords = $join_filterproperties = $join_hiddenproperties = false;
if (count($keywords) > 0) {
- $where_sql .= " AND (mk.property IN ('" . implode("', '", $keywords) . "'))\n";
- $join_keywords = true;
+ $cond['parts']['keywords'] = " AND (mk.property IN ('" . implode("', '", $keywords) . "'))\n";
+ $cond['joinparts']['keywords'] = true;
}
foreach($filter AS $f => $fval) {
if (substr($f, 0, 3) === 'bp.') {
$realf = substr($f, 3);
- $where_sql .= " AND (bp2.property = '$realf' AND bp2.value >= " . (int)$fval['from'] . " AND bp2.value <= " . (int)$fval['to'] . ")\n";
+ $cond['parts']['filter'] .= " AND (bp2.property = '$realf' AND bp2.value >= " . (int)$fval['from'] . " AND bp2.value <= " . (int)$fval['to'] . ")\n";
} else {
- $where_sql .= " AND ($f >= " . (int)$fval['from'] . " AND $f <= " . (int)$fval['to'] . ")\n";
+ $cond['parts']['filter'] .= " AND ($f >= " . (int)$fval['from'] . " AND $f <= " . (int)$fval['to'] . ")\n";
}
} elseif ($f == 'i.authorid') {
- $where_sql .= " AND (
+ $cond['parts']['filter'] .= " AND (
(hp.property = 'authorid' AND hp.value = " . (int)$fval . ")
OR
(i.authorid = " . (int)$fval . ")
)\n";
- $join_hiddenproperties = true;
+ $cond['joinparts']['hiddenproperties'] = true;
} elseif ($orderfields[$f]['type'] == 'int') {
if (substr($f, 0, 3) === 'bp.') {
$realf = substr($f, 3);
- $where_sql .= " AND (bp2.property = '$realf' AND bp2.value = '" . serendipity_db_escape_string(trim($fval)) . "')\n";
+ $cond['parts']['filter'] .= " AND (bp2.property = '$realf' AND bp2.value = '" . serendipity_db_escape_string(trim($fval)) . "')\n";
} else {
- $where_sql .= " AND ($f = '" . serendipity_db_escape_string(trim($fval)) . "')\n";
+ $cond['parts']['filter'] .= " AND ($f = '" . serendipity_db_escape_string(trim($fval)) . "')\n";
}
} else {
if (substr($f, 0, 3) === 'bp.') {
$realf = substr($f, 3);
- $where_sql .= " AND (bp2.property = '$realf' AND bp2.value LIKE '%" . serendipity_db_escape_string(trim($fval)) . "%')\n";
+ $cond['parts']['filter'] .= " AND (bp2.property = '$realf' AND bp2.value LIKE '%" . serendipity_db_escape_string(trim($fval)) . "%')\n";
} else {
- $where_sql .= " AND ($f LIKE '%" . serendipity_db_escape_string(trim($fval)) . "%')\n";
+ $cond['parts']['filter'] .= " AND ($f LIKE '%" . serendipity_db_escape_string(trim($fval)) . "%')\n";
}
}
- $join_filterproperties = true;
+ $cond['joinparts']['filterproperties'] = true;
}
if (isset($serendipity['authorid']) && !serendipity_checkPermission('adminImagesViewOthers')) {
- $where_sql .= " AND (i.authorid = 0 OR i.authorid = " . (int)$serendipity['authorid'] . ")\n";
+ $cond['parts']['authorid'] .= " AND (i.authorid = 0 OR i.authorid = " . (int)$serendipity['authorid'] . ")\n";
}
- $cond = array(
- 'and' => $where_sql
- );
+ $cond['and'] = 'WHERE 1 ' . implode("\n", $cond['parts']);
+ $cond['args'] = func_get_args();
+ serendipity_plugin_api::hook_event('fetch_images_sql', $cond);
serendipity_ACL_SQL($cond, false, 'directory');
- if ($join_keywords) {
+ if ($cond['joinparts']['keywords']) {
$cond['joins'] .= "\n LEFT OUTER JOIN {$serendipity['dbPrefix']}mediaproperties AS mk
ON (mk.mediaid = i.id AND mk.property_group = 'base_keyword')\n";
}
if (substr($order, 0, 3) === 'bp.') {
$cond['orderproperty'] = substr($order, 3);
- $cond['orderkey'] = 'bp.value';
- $order = 'bp.value';
- $join_properties = true;
+ $cond['orderkey'] = 'bp.value';
+ $order = 'bp.value';
+ $cond['joinparts']['properties'] = true;
} else {
$cond['orderkey'] = "''";
}
- if ($join_properties) {
+ if ($cond['joinparts']['properties']) {
$cond['joins'] .= "\n LEFT OUTER JOIN {$serendipity['dbPrefix']}mediaproperties AS bp
ON (bp.mediaid = i.id AND bp.property_group = 'base_property' AND bp.property = '{$cond['orderproperty']}')\n";
}
- if ($join_filterproperties) {
+ if ($cond['joinparts']['filterproperties']) {
$cond['joins'] .= "\n LEFT OUTER JOIN {$serendipity['dbPrefix']}mediaproperties AS bp2
ON (bp2.mediaid = i.id AND bp2.property_group = 'base_property')\n";
}
- if ($join_hiddenproperties) {
+ if ($cond['joinparts']['hiddenproperties']) {
$cond['joins'] .= "\n LEFT OUTER JOIN {$serendipity['dbPrefix']}mediaproperties AS hp
ON (hp.mediaid = i.id AND hp.property_group = 'base_hidden')\n";
}
$lineBreak = floor(750 / ($serendipity['thumbSize'] + 20));
}
+ $dprops = $keywords = array();
+ if ($serendipity['parseMediaOverview']) {
+ $ids = array();
+ foreach ($serendipity['imageList'] as $k => $file) {
+ $ids[] = $file['id'];
+ }
+ $allprops =& serendipity_fetchMediaProperties($ids);
+ }
+
if (count($serendipity['imageList']) > 0) {
foreach ($serendipity['imageList'] as $k => $file) {
if (!($serendipity['authorid'] == $file['authorid'] || $file['authorid'] == '0' || serendipity_checkPermission('adminImagesViewOthers'))) {
}
serendipity_prepareMedia($serendipity['imageList'][$k], $url);
+
+ if ($serendipity['parseMediaOverview']) {
+ $serendipity['imageList'][$k]['props'] =& $allprops[$file['id']];
+ if (!is_array($serendipity['imageList'][$k]['props']['base_metadata'])) {
+ $serendipity['imageList'][$k]['metadata'] =& serendipity_getMetaData($serendipity['imageList'][$k]['realfile'], $serendipity['imageList'][$k]['header']);
+ } else {
+ $serendipity['imageList'][$k]['metadata'] = $serendipity['imageList'][$k]['props']['base_metadata'];
+ serendipity_plugin_api::hook_event('media_getproperties_cached', $serendipity['imageList'][$k]['metadata'], $serendipity['imageList'][$k]['realfile']);
+ }
+ serendipity_parseMediaProperties($dprops, $keywords, $serendipity['imageList'][$k], $serendipity['imageList'][$k]['props'], 3, false);
+ }
}
}
function &serendipity_fetchMediaProperties($id) {
global $serendipity;
- $sql = "SELECT property, property_group, property_subgroup, value
+ $sql = "SELECT mediaid, property, property_group, property_subgroup, value
FROM {$serendipity['dbPrefix']}mediaproperties
- WHERE mediaid = " . (int)$id;
+ WHERE mediaid IN (" . (is_array($id) ? implode(',', $id) : (int)$id) . ")";
$rows = serendipity_db_query($sql, false, 'assoc');
$props = array();
if (is_array($rows)) {
foreach($rows AS $row) {
if (empty($row['property_subgroup'])) {
- $props[$row['property_group']][$row['property']] = $row['value'];
+ if (is_array($id)) {
+ $props[$row['mediaid']][$row['property_group']][$row['property']] = $row['value'];
+ } else {
+ $props[$row['property_group']][$row['property']] = $row['value'];
+ }
} else {
- $props[$row['property_group']][$row['property_subgroup']][$row['property']] = $row['value'];
+ if (is_array($id)) {
+ $props[$row['mediaid']][$row['property_group']][$row['property_subgroup']][$row['property']] = $row['value'];
+ } else {
+ $props[$row['property_group']][$row['property_subgroup']][$row['property']] = $row['value'];
+ }
}
}
}
$file['thumbHeight'] = $file['dim'][1];
$file['preview'] .= '<img src="' . $serendipity['serendipityHTTPPath'] . $serendipity['uploadHTTPPath'] . $sThumbSource . '" border="0" title="' . $file['path'] . $file['name'] . '" alt="'. $file['realname'] . '" />';
if ($url) {
- $file['preview'] = '<a href="'. $url .'&serendipity[image]='. $file['id'] .'">'. $file['preview'] .'</a>';
+ $file['preview_url'] = $url .'&serendipity[image]='. $file['id'];
+ $file['preview'] = '<a href="'. $file['preview_url'] .'">'. $file['preview'] .'</a>';
}
} elseif ($file['is_image'] && $file['hotlink']) {
$sizes = serendipity_calculate_aspect_size($file['dimensions_width'], $file['dimensions_height'], $serendipity['thumbSize']);
$file['thumbHeight'] = $sizes[1];
$file['preview'] .= '<img src="' . $file['path'] . '" width="' . $sizes[0] . '" height="' . $sizes[1] . '" border="0" title="' . $file['path'] . '" alt="'. $file['realname'] . '" />';
if ($url) {
- $file['preview'] = '<a href="'. $url .'&serendipity[image]='. $file['id'] .'">'. $file['preview'] .'</a>';
+ $file['preview_url'] = $url .'&serendipity[image]='. $file['id'];
+ $file['preview'] = '<a href="'. $file['preview_url'] .'">'. $file['preview'] .'</a>';
}
/* If it's not an image, or the thumbnail does not exist */
} else {
}
$file['preview'] .= '<img src="'. $mimeicon .'" title="' . $file['path'] . $file['name'] . ' (' . $file['mime'] . ')" alt="'. $file['mime'] .'" /><br /><span style="font-weight: bold; font-size: 8pt">- ' . (($file['hotlink']) ? MEDIA_HOTLINKED : $file['mime']) .' -</span>';
if ($url) {
- $file['preview'] .= '<br /><a href="' . $url . '&serendipity[image]=' . $file['id'] . '">' . $file['name'] . '.' . $file['extension'] . '</a>';
+ $file['preview_url'] = $url .'&serendipity[image]='. $file['id'];
+ $file['preview'] .= '<br /><a href="' . $file['preview_url'] . '">' . $file['name'] . '.' . $file['extension'] . '</a>';
}
}