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/moderation/controllers/SiteController.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 Moderation_SiteController extends AppController
{
    function init()
    {
        $this->acl->allow('moderator', $this->name, "*");
        $this->acl->allow('administrator', $this->name, "*");

        if (!$this->acl->isAllowed($this->session->get("role"), $this->name, $this->action)) {
            $this->redirect(AppRouter::getRewrittedUrl("/moderation/main/logIn"));
        }
    }

    function indexAction()
    {
        $this->redirect($this->moduleLink("waiting"));
    }

    function waitingAction($page = 1)
    {
        $emailMessages = $this->customMessage->getUserDefinedMessages();
        $this->set("emailMessages", $emailMessages);
        $this->set("emailMessagesJSON", JsonView::php2js($emailMessages));

        $page = intval($page);
        $perPage = 5;

        $this->set("sites", $this->siteList->getWaitingSites(false, $page, $perPage));
        $totalCount = $this->siteList->getFoundRowsCount();

        $this->set("totalCount", $totalCount);
        $totalPages = ceil($totalCount / $perPage);
        $this->set("pageNavigation", array("baseLink" => "/moderation/site/waiting/",
                                           "totalPages" => $totalPages,
                                           "currentPage" => $page));

        if ($totalCount >= $perPage) {
            $this->set("skipAutoRefresh", true);
        }
    }

    function getMetaDataAction()
    {
        $httpClient = new HttpClient();
        $metaData = $httpClient->getMetaValues($this->request->url);
        $this->set($metaData);
        $this->viewClass = "JsonView";
    }

    function getWebsiteDataAction()
    {
        $siteId = $this->request->siteId;
        $site = $this->site->findByPk($siteId);

        if ($site->status == "waiting") {
            $site->keywordIds = $site->getKeywordIds();
            $this->set($site->toArray());
        }

        $this->viewClass = "JsonView";
    }

    function getWebmasterDataAction()
    {
        $c = new Criteria();
        $c->add("userId", $this->request->webmasterId);
        $c->add("role", "webmaster");
        $site = $this->user->find($c, "login, email");
        $this->set($site->toArray());
        $this->viewClass = "JsonView";
    }

    function editAction($siteId)
    {
        $this->set("siteId", $siteId);
        $c = new Criteria();
        $c->add("siteId", $siteId);
        $c->add("status", "waiting");

        $site = $this->site->find($c);

        if (empty($site)) {
            return $this->return404();
        }

        $package = $site->packageId ? $this->package->findByPk($site->packageId) : null;
        $this->set("package", $package);

        // Decide to display link to remove image or not
        $this->set("displayRemoveImage", ($site->imageSrc && !$site->ascreen ? true : false));

        $site->updateImageSrc();
        $site->categoryParentsData = $this->category->getParents($site->categoryId);

        $this->site->attachPhotos($site);
        $this->site->fillExtraFields($site);
        $this->site->attachKeywordIds($site);

        $this->set("site", $site);
        $this->set("siteJson", JsonView::php2js($site));

        $c = new Criteria();
        $c->add("siteId", $siteId);
        $this->set("comments", $this->comment->findAll($c));

        $this->set("selectCategories", $this->category->createOptionsList());
        $c = new Criteria();
        $c->add("role", "webmaster");
        $this->set("webmasters", $this->user->getArray($c, "email"));

        $this->set("allKeywordsList", $this->keyword->generateSortedList());
        $this->set("yesNoOptions", array("0" => _t("No"), "1" => _t("Yes")));
        $this->set("priorites", range(0, 10));

        $this->set("adCriterias", $this->adCriteria->getSelectList());

        require (CODE_ROOT_DIR . "config/flags.php");
        $this->set("countryFlags", $countryFlags);
    }

    function updateSiteStateAction()
    {
        if (!empty($this->request->siteIds)
            && in_array($this->request->status, array("validated", "banned", "refused"))
        ) {
            $siteIds = $this->request->siteIds;
            $status = $this->request->status;

            $mailer = Mailer::getInstance();

            $c = new Criteria();
            $c->add("status", "waiting");
            $c->add("siteId", $siteIds, "IN");
            $sites = $this->site->findAll($c, "*", true);

            foreach ($sites as $site) {
                $site['status'] = $status;
                $customSubject = false;
                $customDescription = false;
                $siteId = $site['siteId'];

                if ($this->request->emailType[$siteId] == "custom") {
                    $customSubject = $this->request->subject[$siteId];
                    $customDescription = $this->request->description[$siteId];
                }

                $mailer->sendSiteStateUpdate($site['webmasterEmail'], $site, $customSubject, $customDescription);
            }

            if ($status == "refused") {
                $this->site->del($c);
                $this->refusal->updateRefusedSitesCount($this->userId, count($sites));
            } else {
                $this->site->update(array("status" => $status,
                                          "proposalForKeywords" => "",
                                          "proposalForCategory" => "",
                                          "moderatorId" => $this->userId,
                                          "_creationDate" => "NOW()"),
                                    $c);
            }
        }

        $this->redirect($this->moduleLink("waiting"));
    }

    function saveSiteAction()
    {
        $this->viewClass = "JsonView";
        $edit = !empty($this->request->siteId);
        $validationOptions = array("admin" => true,
                                   "forceCategoryDuplicate" => true,
                                   "forcePossibleTender" => true);

        if ($edit) {
            $site = $this->site->findByPk($this->request->siteId);

            if ($site->status != "validated" && $this->request->status == "validated") {
                $site->_creationDate = "NOW()";
            }

            $package = $site->packageId ? $this->package->findByPk($site->packageId) : null;
            $errorMessage = $this->siteValidator->validate($this->request,
                                                           $site,
                                                           $validationOptions + array("package" => $package));
        } else {
            $site = new SiteRecord();
            $this->request->webmasterEmail = $this->session->get("email");
            $errorMessage = $this->siteValidator->validate($this->request, null, $validationOptions);
        }

        if ($errorMessage) {
            $status = "error";
            $this->set("status", $status);
            $this->set("message", _t($errorMessage));
            return;
        }

        $fields = array("categoryId", "webmasterName", "webmasterEmail", "webmasterId", "siteTitle",
                        "url", "rssTitle", "rssFeedOfSite", "description", "returnBond",
                        "status", "problemExists", "priority", "visitsCount", "referrerTimes");

        if (Config::get("countryFlagsEnabled")) {
            array_push($fields, "countryCode");
        }

        if (Config::get("companyInfoEnabled")) {
            array_push($fields, "address", "zipCode", "city", "country", "phoneNumber", "faxNumber");
        }

        $site->fromArray($this->request->getArray($fields));
        $site->save();

        // store keywords
        if (!empty($this->request->keywords)) {
            $maxKeywordsCountPerSite = $package ? $package->maxKeywordsCountPerSite : Config::get("maxKeywordsCountPerSite");
            $this->keywordsOfSite->storeKeywords($site->siteId, $this->request->keywords, $maxKeywordsCountPerSite);
        }

        if (!empty($this->request->tempId)) {
            $c = new Criteria();
            $c->add("tempId", $this->request->siteId);

            $this->photo->update(array("siteId" => $site->siteId, "_tempId" => "NULL"), $c);
            $site->updatePhotos();
        }

        $this->extraField->saveExtraFieldsValues($site, $this->request);
        $site->updateSuffix();

        $this->set("status", "ok");
        $this->set("message", _t("The site was successfully submitted."));
        $this->set("redirectUrl", AppRouter::getRewrittedUrl("/moderation/site/waiting"));
    }

    function uploadSiteImageAction($siteId)
    {
        $siteId = intval($siteId);
        $site = $this->site->findByPk($siteId);

        $siteImage = new UploadedFile("siteImage");
        $siteImage->addFilter("extension", array("jpg", "png", "gif"));
        $thumbsPath = Config::get("SITES_THUMBS_PATH");
        $newImageSrc = $siteImage->save($thumbsPath);

        if ($newImageSrc) {
            if ($site->imageSrc) {
                $oldFilePath = $thumbsPath . basename($site->imageSrc);

                if (file_exists($oldFilePath)) {
                    unlink($oldFilePath);
                }
            }

            $site->imageSrc = $newImageSrc;
            $site->save();
        }

        $site->updateImageSrc(false);

        echo "<html><body>" . $site->imageSrc . "</body></html>";
        $this->autoRender = false;
    }

    function getWaitingSitesHtmlAction()
    {
        $siteIds = explode(",", $this->request->siteIds);
        $c = new Criteria();
        $c->add("status", "waiting");
        $this->set("sites", $this->siteList->getWaitingSites($siteIds));
        $this->viewFile = "item";
    }

    function compareWaitingSitesAction()
    {
        $waitingSitesOnHtml = $this->request->waitingSitesIds ? explode(",", $this->request->waitingSitesIds) : array();

        $c = new Criteria();
        $c->add("status", "waiting");
        $sites = $this->site->getArray($c, "siteId");

        $actualWaitingSitesInDb = array_values($sites);

        $sitesToRemove = array_diff($waitingSitesOnHtml, $actualWaitingSitesInDb);
        $sitesToAdd = array_diff($actualWaitingSitesInDb, $waitingSitesOnHtml);

        $this->set("toRemove", array_values($sitesToRemove));
        $this->set("toAdd", array_values($sitesToAdd));
        $this->set("waiting", array_values($actualWaitingSitesInDb));

        $this->viewClass = "JsonView";

    }
}