201 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			201 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
 | 
						|
namespace Nextend\SmartSlider3\Application\Model;
 | 
						|
 | 
						|
 | 
						|
use Exception;
 | 
						|
use Nextend\Framework\Database\Database;
 | 
						|
use Nextend\Framework\Model\AbstractModelTable;
 | 
						|
use Nextend\SmartSlider3\Application\Helper\HelperSliderChanged;
 | 
						|
use Nextend\SmartSlider3\SmartSlider3Info;
 | 
						|
 | 
						|
class ModelSlidersXRef extends AbstractModelTable {
 | 
						|
 | 
						|
    protected function createConnectorTable() {
 | 
						|
 | 
						|
        return Database::getTable('nextend2_smartslider3_sliders_xref');
 | 
						|
    }
 | 
						|
 | 
						|
    public function add($groupID, $sliderID) {
 | 
						|
        try {
 | 
						|
            $this->table->insert(array(
 | 
						|
                'group_id'  => $groupID,
 | 
						|
                'slider_id' => $sliderID,
 | 
						|
                'ordering'  => $this->getMaximalOrderValue($groupID)
 | 
						|
            ));
 | 
						|
 | 
						|
            $helper = new HelperSliderChanged($this);
 | 
						|
            $helper->setSliderChanged($sliderID, 1);
 | 
						|
            $helper->setSliderChanged($groupID, 1);
 | 
						|
 | 
						|
            SmartSlider3Info::sliderChanged();
 | 
						|
 | 
						|
            return true;
 | 
						|
        } catch (Exception $e) {
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param int $groupID
 | 
						|
     *
 | 
						|
     * @return array the IDs of the deleted child sliders.
 | 
						|
     */
 | 
						|
    public function deleteGroup($groupID) {
 | 
						|
        $sliders = $this->getSliders($groupID);
 | 
						|
 | 
						|
        $deletedSliders = array();
 | 
						|
 | 
						|
        $slidersModel = new ModelSliders($this);
 | 
						|
        foreach ($sliders as $slider) {
 | 
						|
            $relatedGroups = $this->getGroups($slider['slider_id']);
 | 
						|
            if (count($relatedGroups) == 1) {
 | 
						|
                if ($slidersModel->trashOrDelete($slider['slider_id'], $groupID) == 'delete') {
 | 
						|
                    $deletedSliders[] = $slider['slider_id'];
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        $this->table->deleteByAttributes(array(
 | 
						|
            'group_id' => $groupID
 | 
						|
        ));
 | 
						|
 | 
						|
        SmartSlider3Info::sliderChanged();
 | 
						|
 | 
						|
        return $deletedSliders;
 | 
						|
    }
 | 
						|
 | 
						|
    public function deleteSlider($sliderID) {
 | 
						|
 | 
						|
        $helper = new HelperSliderChanged($this);
 | 
						|
        $helper->setSliderChanged($sliderID, 1);
 | 
						|
 | 
						|
        SmartSlider3Info::sliderChanged();
 | 
						|
 | 
						|
        return $this->table->deleteByAttributes(array(
 | 
						|
            'slider_id' => $sliderID
 | 
						|
        ));
 | 
						|
    }
 | 
						|
 | 
						|
    public function deleteXref($groupID, $sliderID) {
 | 
						|
 | 
						|
        $helper = new HelperSliderChanged($this);
 | 
						|
        $helper->setSliderChanged($sliderID, 1);
 | 
						|
        $helper->setSliderChanged($groupID, 1);
 | 
						|
 | 
						|
        SmartSlider3Info::sliderChanged();
 | 
						|
 | 
						|
        return $this->table->deleteByAttributes(array(
 | 
						|
            'group_id'  => $groupID,
 | 
						|
            'slider_id' => $sliderID
 | 
						|
        ));
 | 
						|
    }
 | 
						|
 | 
						|
    public function getSliders($groupID, $status = '*') {
 | 
						|
 | 
						|
        if ($status !== '*') {
 | 
						|
            $slidersModel = new ModelSliders($this);
 | 
						|
 | 
						|
            return Database::queryAll("
 | 
						|
            SELECT xref.slider_id
 | 
						|
            FROM " . $this->getTableName() . " AS xref
 | 
						|
            LEFT JOIN " . $slidersModel->getTableName() . " AS sliders ON sliders.id = xref.slider_id
 | 
						|
            WHERE xref.group_id = '" . $groupID . "' AND sliders.slider_status LIKE " . Database::quote($status) . "
 | 
						|
            ORDER BY xref.ordering ASC");
 | 
						|
        }
 | 
						|
 | 
						|
        return Database::queryAll("
 | 
						|
            SELECT slider_id
 | 
						|
            FROM " . $this->getTableName() . "
 | 
						|
            WHERE group_id = '" . $groupID . "'
 | 
						|
            ORDER BY ordering ASC");
 | 
						|
    }
 | 
						|
 | 
						|
    public function getGroupsIDs($sliderID) {
 | 
						|
        $ids = array();
 | 
						|
 | 
						|
        $result = Database::queryAll("
 | 
						|
            SELECT group_id
 | 
						|
            FROM " . $this->getTableName() . "
 | 
						|
            WHERE slider_id = '" . $sliderID . "'
 | 
						|
            ORDER BY ordering ASC");
 | 
						|
 | 
						|
        foreach ($result as $row) {
 | 
						|
            $ids[] = $row['group_id'];
 | 
						|
        }
 | 
						|
 | 
						|
        return $ids;
 | 
						|
    }
 | 
						|
 | 
						|
    public function getGroups($sliderID, $status = '*') {
 | 
						|
        $slidersModel = new ModelSliders($this);
 | 
						|
 | 
						|
        $wheres = array("xref.slider_id = '" . $sliderID . "'");
 | 
						|
 | 
						|
        if ($status !== '*') {
 | 
						|
            $wheres[] = "sliders.slider_status LIKE '" . $status . "'";
 | 
						|
        }
 | 
						|
 | 
						|
        $result = Database::queryAll("
 | 
						|
            SELECT xref.group_id, sliders.title
 | 
						|
            FROM " . $this->getTableName() . " AS xref
 | 
						|
            LEFT JOIN " . $slidersModel->getTableName() . " AS sliders ON sliders.id = xref.group_id
 | 
						|
            WHERE " . implode(' AND ', $wheres) . "
 | 
						|
            ORDER BY xref.group_id ASC");
 | 
						|
 | 
						|
        if (!empty($result)) {
 | 
						|
            return $result;
 | 
						|
        }
 | 
						|
 | 
						|
        return array(
 | 
						|
            array(
 | 
						|
                "group_id" => 0,
 | 
						|
                "title"    => n2_('Dashboard')
 | 
						|
            )
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    protected function getMaximalOrderValue($groupID) {
 | 
						|
 | 
						|
        $query  = "SELECT MAX(ordering) AS ordering FROM " . $this->getTableName() . " WHERE group_id = '" . intval($groupID) . "'";
 | 
						|
        $result = Database::queryRow($query);
 | 
						|
 | 
						|
        if (isset($result['ordering'])) return $result['ordering'] + 1;
 | 
						|
 | 
						|
        return 0;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param $sliderID
 | 
						|
     *
 | 
						|
     * @return bool
 | 
						|
     */
 | 
						|
    public function isSliderAvailableInAnyGroups($sliderID) {
 | 
						|
        $allRelatedGroups = $this->getGroups($sliderID);
 | 
						|
 | 
						|
        $slidersModel = new ModelSliders($this);
 | 
						|
 | 
						|
        foreach ($allRelatedGroups as $group) {
 | 
						|
            if ($group['group_id'] != 0) {
 | 
						|
                /*
 | 
						|
                 * It is a group
 | 
						|
                 */
 | 
						|
                $sliderRow = $slidersModel->get($group['group_id']);
 | 
						|
                if (isset($sliderRow['slider_status']) && $sliderRow['slider_status'] === 'published') {
 | 
						|
                    return true;
 | 
						|
                }
 | 
						|
            } else {
 | 
						|
                /*
 | 
						|
                 * It is a slider
 | 
						|
                 */
 | 
						|
                $sliderRow = $slidersModel->get($sliderID);
 | 
						|
                if (isset($sliderRow['slider_status']) && $sliderRow['slider_status'] === 'published') {
 | 
						|
                    return true;
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
} |