HEX
Server: Apache/2.4.25 (Debian)
System: Linux server17 4.9.0-19-amd64 #1 SMP Debian 4.9.320-2 (2022-06-30) x86_64
User: web37 (1062)
PHP: 7.4.30
Disabled: show_source, highlight_file, apache_child_terminate, apache_get_modules, apache_note, apache_setenv, virtual, dl, disk_total_space, posix_getpwnam, posix_getpwuid, posix_mkfifo, posix_mknod, posix_setpgid, posix_setsid, posix_setuid, posix_uname, proc_nice, openlog, syslog, pfsockopen
Upload Files
File: /var/www/web37/htdocs/fickanzeiger/models/AdModel.php
<?php
/**
 * Arfooo
 * 
 * @package    Arfooo
 * @copyright  Copyright (c) Arfooo Annuaire (fr) and Arfooo Directory (en)
 *             by Guillaume Hocine (c) 2007 - 2010
 *             http://www.arfooo.com/ (fr) and http://www.arfooo.net/ (en)
 * @author     Guillaume Hocine & Adrian Galewski
 * @license    http://creativecommons.org/licenses/by/2.0/fr/ Creative Commons
 */


class AdModel extends Model
{
    protected $primaryKey = "adId";

    function setAdOnPage($data)
    {
        $c = new Criteria();
        $c->add("page", $data['page']);
        $c->add("place", $data['place']);

        if ($data['adCriterionId'] == 0
            && !in_array($data['place'], array("general", "predefine"))
        ) {
            $this->del($c);
        } else {
            $ad = $this->ad->find($c);

            if ($ad) {
                $ad->adCriterionId = $data['adCriterionId'];
                $ad->save();
            } else {
                $ad = new AdRecord();
                $ad->fromArray($data);
                $ad->save();
            }
        }

        //if globall switch was set delete category specified settings
        if ($data['place'] == "general"
            && preg_match("#^predefine(Category|Site|Keyword|Letter|Tag)#", $data['page'], $match)
        ) {
            $pagePrefix = strtolower($match[1]);
            $c = new Criteria();
            $c->add("page LIKE '$pagePrefix%'");

            $c2 = new Criteria();
            $c2->add("place", "general");
            $c2->addOr("place", "predefine");

            $c->add($c2);

            $this->del($c);
        }
    }

    function getAdsOnPage($page)
    {
        $c = new Criteria();
        $c->add("page", $page);
        $ads = array();

        foreach ($this->findAll($c, "adCriterionId, place") as $ad) {
            $ads[$ad['place']] = $ad['adCriterionId'];
        }

        $globalSwitchOn = false;

        //checking global switches
        if (preg_match("#^(site|category|keyword|letter|tag)#", $page, $match)
            && strpos($page, "Custom") === false
        ) {
            $pagePrefix = $match[1];
            $c = new Criteria();
            $c->add("page", "predefine" . ucfirst($pagePrefix));
            $c->add("place", "general");
            $c->add("adCriterionId", 1);

            if ($this->getCount($c)) {
                $globalSwitchOn = true;
            }
        }

        //checking predefine in site category
        if (substr_compare("site", $page, 0, 4) == 0
            && strpos($page, "Custom") === false
        ) {
            //only check ads on in category if site haven't on
            if (empty($ads['general'])) {
                $siteId = substr($page, 4);

                $site = Model::factoryInstance("site")->findByPk($siteId, "categoryId");

                $categoryPredefine = $this->isSiteAdsPredefinedInCategory($site->categoryId);

                if ($categoryPredefine !== null) {
                    $globalSwitchOn = $categoryPredefine;
                }
            }

            $customCategorySiteAds = $this->getCustomCategorySiteAds($site->categoryId);

            if (!empty($customCategorySiteAds['general'])) {
                foreach ($customCategorySiteAds as $key => $value) {
                    if (!isset($ads[$key])) {
                        $ads[$key] = $customCategorySiteAds[$key];
                    }
                }
            }
        }

        if (!isset($ads['general'])) {
            $ads['general'] = $globalSwitchOn ? 1 : 0;
        }
        if (!isset($ads['predefine'])) {
            $ads['predefine'] = $globalSwitchOn ? 1 : 0;
        }

        return $ads;
    }

    function getAllPredefinitions()
    {
        $c = new Criteria();
        $c->add("page", array("predefineCategory",
                              "predefineSite",
                              "predefineKeyword",
                              "predefineLetter",
                              "predefineTag"),
                "IN");

        $predefinitions = array();

        foreach ($this->findAll($c) as $ad) {
            $key = strtolower(substr($ad['page'], 9));
            $predefinitions[$key][$ad['place']] = $ad['adCriterionId'];
        }

        return $predefinitions;

    }

    function isSiteAdsPredefinedInCategory($categoryId)
    {
        $c = new Criteria();
        $c->add("page", "category" . $categoryId);
        $c->add("place", "predefine");
        $ad = $this->find($c);

        if (empty($ad)) {
            return null;
        }

        return ($ad->adCriterionId == "1");
    }

    function getCustomCategorySiteAds($categoryId)
    {
        $c = new Criteria();
        $c->add("page", "siteCustomCategory" . $categoryId);
        $ads = array();

        foreach ($this->findAll($c, "adCriterionId, place") as $ad) {
            $ads[$ad['place']] = $ad['adCriterionId'];
        }

        return $ads;
    }
}

class AdRecord extends ModelRecord
{

}