+
+ /* return according the selected tags */
+ if(isset($_SESSION['selected_tags'])) {
+ $selected = "";
+ foreach($_SESSION['selected_tags'] as $tag)
+ $selected.= $tag .",";
+ $selected = substr($selected, 0, strlen($selected)-1);
+
+ if($_SESSION['tag_condition'] == 'or') {
+ $result = $this->db->db_query("
+ SELECT DISTINCT photo_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
+ ");
+ 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
+ */
+ $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']);
+ }
+ }
+ return $tagged_photos;