}
$this->db = new PHPFSPOT_DB($this, $this->cfg->fspot_db);
+ if(!is_writeable($this->cfg->fspot_db)) {
+ print $this->cfg->fspot_db ." is not writeable for user ". $this->getuid() ."\n";
+ exit(1);
+ }
if(!is_writeable(dirname($this->cfg->phpfspot_db))) {
print dirname($this->cfg->phpfspot_db) .": directory is not writeable!";
/* check if all necessary indices exist */
$this->checkDbIndices();
- $this->get_tags();
-
session_start();
if(!isset($_SESSION['tag_condition']))
*/
public function getAvailableTags()
{
+ $this->get_tags();
+
$output = "";
$result = $this->db->db_query("
*/
public function getSelectedTags()
{
+ $this->get_tags();
+
$output = "";
foreach($this->avail_tags as $tag)
{
/* return a search result */
if(isset($_SESSION['searchfor']) && $_SESSION['searchfor'] != '') {
$query_str = "
- SELECT DISTINCT photo_id
- FROM photo_tags pt
+ SELECT DISTINCT pt1.photo_id
+ FROM photo_tags pt1
+ INNER JOIN photo_tags pt2
+ ON pt1.photo_id=pt2.photo_id
+ INNER JOIN tags t1
+ ON pt1.tag_id=t1.id
INNER JOIN photos p
- ON p.id=pt.photo_id
- INNER JOIN tags t
- ON pt.tag_id=t.id
- WHERE t.name LIKE '%". $_SESSION['searchfor'] ."%'";
+ ON pt1.photo_id=p.id
+ INNER JOIN tags t2
+ ON pt2.tag_id=t2.id
+ WHERE t1.name LIKE '%". $_SESSION['searchfor'] ."%' ";
if(isset($additional_where_cond))
$query_str.= "AND ". $additional_where_cond ." ";
if(isset($this->cfg->show_tags) && !empty($this->cfg->show_tags)) {
- $query_str.= "AND t.name IN ('".implode("','",$this->cfg->show_tags)."')";
+ $query_str.= "AND t2.name IN ('".implode("','",$this->cfg->show_tags)."')";
}
if(isset($order_str))
$selected.= $tag .",";
$selected = substr($selected, 0, strlen($selected)-1);
+ /* photo has to match at least on of the selected tags */
if($_SESSION['tag_condition'] == 'or') {
$query_str = "
- SELECT DISTINCT pt.photo_id
- FROM photo_tags pt
- INNER JOIN photos p
- ON p.id=pt.photo_id
+ SELECT DISTINCT pt1.photo_id
+ FROM photo_tags pt1
+ INNER JOIN photo_tags pt2
+ ON pt1.photo_id=pt2.photo_id
INNER JOIN tags t
- ON pt.tag_id=t.id
- WHERE pt.tag_id IN (". $selected .")
+ ON pt2.tag_id=t.id
+ INNER JOIN photos p
+ ON pt1.photo_id=p.id
+ WHERE pt1.tag_id IN (". $selected .")
";
if(isset($additional_where_cond))
$query_str.= "AND ". $additional_where_cond ." ";
if(isset($order_str))
$query_str.= $order_str;
}
+ /* photo has to match all selected tags */
elseif($_SESSION['tag_condition'] == 'and') {
if(count($_SESSION['selected_tags']) >= 32) {
*/
public function startSearch($searchfor, $sort_order, $from = 0, $to = 0)
{
+ $this->get_tags();
+
$_SESSION['searchfor'] = $searchfor;
$_SESSION['sort_order'] = $sort_order;
if($from != 0)