continue;
// return all available (= not selected) tags
- print "<a href=\"javascript:Tags('add', ". $tag .");\">". $this->tags[$tag] ."</a> ";
+ print "<a href=\"javascript:Tags('add', ". $tag .");\" class=\"tag\">". $this->tags[$tag] ."</a> ";
}
{
// return all selected tags
if(isset($_SESSION['selected_tags']) && in_array($tag, $_SESSION['selected_tags'])) {
- print "<a href=\"javascript:Tags('del', ". $tag .");\">". $this->tags[$tag] ."</a> ";
+ print "<a href=\"javascript:Tags('del', ". $tag .");\" class=\"tag\">". $this->tags[$tag] ."</a> ";
}
}
if(isset($_SESSION['selected_tags'])) {
$key = array_search($tag, $_SESSION['selected_tags']);
unset($_SESSION['selected_tags'][$key]);
+ sort($_SESSION['selected_tags']);
}
} // delTag()
WHERE pt.tag_id IN (". $selected .")
ORDER BY p.time ASC
");
- while($row = $this->db->db_fetch_object($result)) {
- array_push($tagged_photos, $row['photo_id']);
- }
}
elseif($_SESSION['tag_condition'] == 'and') {
- $result = $this->db->db_query("
- SELECT DISTINCT photo_id, tag_id
- FROM photo_tags pt
- INNER JOIN photos p
- on p.id=pt.photo_id
- WHERE pt.tag_id IN (". $selected .")
- ORDER BY p.time ASC
- ");
- /* now we need to check if each object fulfills the condition
- and has all the selected tags assigned
+ /* Join together a table looking like
+
+ pt1.photo_id pt1.tag_id pt2.photo_id pt2.tag_id ...
+
+ so the query can quickly return all images matching the
+ selected tags in an AND condition
+
*/
- $match_object = Array();
- $matches_needed = count($_SESSION['selected_tags']);
- while($row = $this->db->db_fetch_object($result)) {
- /* set the counter for this object */
- if(!isset($match_object[$row['photo_id']]))
- $match_object[$row['photo_id']] = $matches_needed;
-
- /* we have a match? decrement the counter */
- if(in_array($row['tag_id'], $_SESSION['selected_tags']))
- $match_object[$row['photo_id']]--;
- /* if the object has all necessary tags, add it to the result */
- if($match_object[$row['photo_id']] == 0)
- array_push($tagged_photos, $row['photo_id']);
+ $query_str = "
+ SELECT DISTINCT pt1.photo_id
+ FROM photo_tags pt1
+ ";
+
+ for($i = 0; $i < count($_SESSION['selected_tags']); $i++) {
+ $query_str.= "
+ INNER JOIN photo_tags pt". ($i+2) ."
+ ON pt1.photo_id=pt". ($i+2) .".photo_id
+ ";
}
+ $query_str.= "WHERE pt1.tag_id=". $_SESSION['selected_tags'][0];
+ for($i = 1; $i < count($_SESSION['selected_tags']); $i++) {
+ $query_str.= "
+ AND pt". ($i+1) .".tag_id=". $_SESSION['selected_tags'][$i] ."
+ ";
+ }
+ $result = $this->db->db_query($query_str);
+ }
+
+ while($row = $this->db->db_fetch_object($result)) {
+ array_push($tagged_photos, $row['photo_id']);
}
return $tagged_photos;
}
public function create_thumbnail($image, $width)
{
- // if thumbnail already exists, don't recreate it
- if(file_exists(dirname($image) ."/thumbs/". $width ."_". basename($image)))
- return;
-
$meta = $this->get_meta_informations($image);
$rotate = 0;