<?php

/**************************************************************
* This file is part of Remository
* Copyright (c) 2006-17 Martin Brampton
* 
* License: GNU General Public License version 2 or later; see LICENSE.txt
* 
* For support and other information, visit http://remository.com
* To contact Martin Brampton, write to martin@remository.com
*
* Remository started life as the psx-dude script by psx-dude@psx-dude.net
* It was enhanced by Matt Smith up to version 2.10
* Since then development has been primarily by Martin Brampton,
* with contributions from other people gratefully accepted
*/

defined('_JEXEC') or die;

class remositoryControllerClassifications extends remositoryAdminControllers {

	function __construct (&$admin) {
		parent::__construct ($admin);
		$this->parentid = remositoryRepository::getParam($_REQUEST, 'parentid', 0);
	    $_REQUEST['act'] = 'classifications';

	}

	function listTask () {
		// Get the search string that will constrain the list of containers displayed
		$search = strtolower( remositoryRepository::getParam($_POST, 'search', ''));
		$type = remositoryRepository::getParam($_POST, 'type', '');
		$interface = remositoryInterface::getInstance();
		$database = $interface->getDB();
		$query = "FROM #__downloads_classify";
		if ($search) {
			$search = $interface->getEscaped($search);
			$where[] = "(name LIKE ('%$search%') OR description LIKE ('%$search%'))";
		}
		if ($type) {
			$type = $interface->getEscaped($type);
			$where[] = "type='$type'";
		}
		if (isset($where)) $query .= ' WHERE '.implode (' AND ', $where);
		$database->setQuery('SELECT COUNT(*) '.$query);
		$total = $database->loadResult();
		$query .= " ORDER BY type, name";
		$query .= " LIMIT {$this->admin->limitstart},{$this->admin->limit}";
		$database->setQuery('SELECT * '.$query);
		$classifications = $database->loadObjectList();
		if (!$classifications) $classifications = array();
		$database->setQuery("SELECT type FROM #__downloads_classify GROUP BY type ORDER BY type");
		$types = $database->loadColumn();
		if (!$types) $types = array();
		$view = $this->admin->newHTMLClassCheck ('listClassificationsHTML', $this, $total, '');
		$view->view($classifications, $search, $type, $types);
	}

	function addTask () {
		$classification = new remositoryClassification();
		// Create and activate a View object
		$view = $this->admin->newHTMLClassCheck ('editClassificationsHTML', $this, 0, '');
		$view->view($classification);
	}

	function editTask () {
		// Create a classification object that will be filled with data from the DB using currid as key
		$classification = new remositoryClassification($this->admin->currid);
		// Create and activate a View object
		$view = $this->admin->newHTMLClassCheck ('editClassificationsHTML', $this, 0, '');
		$view->view($classification);
	}

	function saveTask () {
		// Create a classification object that will be filled with data from the DB using currid as key
	    $classification = new remositoryClassification($this->admin->currid);
	    // Give tick box fields defaults as nothing will be received if they are unticked
	    $classification->published = 0;
	    $classification->hidden = 1;
	    // Add the new information from the form just submitted
	    $classification->addPostData();
	    // By default, a new classification is automatically published
	    if ($this->admin->currid == 0) $classification->published = 1;
	    // Save the new information about the container to the database
	    $classification->saveValues ();

        JFactory::getApplication()->enqueueMessage(_DOWN_CLASSIFICATION_SAVED, 'message');

		// Next we go back to listing the classifications
		$this->listTask();
	}

	function deleteTask () {
		// In case the Javascript cannot do the check, ensure at least one item selected
		$this->admin->check_selection(_DOWN_SEL_FILE_DEL);
		$inlist = implode(',', $this->admin->cfid);
		$sql = "DELETE FROM #__downloads_classify WHERE id IN ($inlist)";
		remositoryRepository::doSQL($sql);
		$sql = "DELETE FROM #__downloads_file_classify WHERE classify_id IN ($inlist)";
		remositoryRepository::doSQL($sql);

        $message = count($this->admin->cfid)>1?_DOWN_CLASSIFICATIONS_DELETED:_DOWN_CLASSIFICATION_DELETED;
        JFactory::getApplication()->enqueueMessage($message, 'message');

		$this->listTask();
	}

	function publishTask () {
        $message = count($this->admin->cfid)>1?_DOWN_CLASSIFICATIONS_PUBLISHED:_DOWN_CLASSIFICATION_PUBLISHED;
        JFactory::getApplication()->enqueueMessage($message, 'message');
		$this->publishToggle(1);
	}

	function unpublishTask () {
        $message = count($this->admin->cfid)>1?_DOWN_CLASSIFICATIONS_UNPUBLISHED:_DOWN_CLASSIFICATION_UNPUBLISHED;
        JFactory::getApplication()->enqueueMessage($message, 'message');
		$this->publishToggle(0);
	}

	function publishToggle ($publish) {
		// Check that one or more items have been selected (Javascript may not have run)
		$this->admin->check_selection(_DOWN_PUB_PROMPT.($publish ? 'publish' : 'unpublish'));
		$inlist = implode(',', $this->admin->cfid);
		$sql = "UPDATE #__downloads_classify SET published=$publish WHERE id IN($inlist)";
		remositoryRepository::doSQL($sql);
		$this->listTask();
	}

}

