<?php
/*
 * Copyright (c) 2013, webvariants GbR, http://www.webvariants.de
 *
 * This file is released under the terms of the MIT license. You can find the
 * complete text in the attached LICENSE file or online at:
 *
 * http://www.opensource.org/licenses/mit-license.php
 */

class _WV2_Extensions_Category extends _WV2_Extensions_Base {
	/**
	 * Handler für CAT_FORM_EDIT
	 *
	 * Erzeugt das Frontend-Formular für Kategorien.
	 *
	 * @param  array $params  die von Sally übergebenen Parameter
	 * @return string         das Subject inkl. des Formulars
	 */
	public static function onCategoryEditForm(array $params) {
		if (!self::canEdit() && !self::canView()) return $params['subject'];

		$subjectHTML    = $params['subject'];
		$availableInfos = WV2_MetaProvider::getAllCategoryMetaInfos();

		// Keine Metainfos für Kategorien gesetzt?

		if (empty($availableInfos)) {
			return $subjectHTML;
		}

		// Zugewiesene Daten ermitteln

		$categoryID    = (int) $params['category']->getId();
		$assignedData  = WV2_MetaProvider::categoryData(null, null, null, $categoryID, true);
		$dataToDisplay = _WV2_Metainfo::getInfosToDisplay($availableInfos, false, $assignedData, $availableInfos);

		ob_start();
		require _WV2_PATH.'templates/categories/meta_frontend.phtml';
		return $subjectHTML.ob_get_clean();
	}

	/**
	 * Handler für SLY_CAT_ADDED
	 *
	 * Fügt der neuen Kategorie alle vorhandenen Metainformationen
	 * hinzu.
	 *
	 * @param array $params  die von Sally übergebenen Parameter
	 */
	public static function onCategoryAdded(array $params) {
		$metainfos = WV2_MetaProvider::getAllCategoryMetaInfos();

		foreach ($metainfos as $name => $metainfo) {
			$metainfos[$name] = $metainfo->getDefault();
		}

		$cat     = (int) $params['subject'];
		$clang   = (int) $params['clang'];
		$service = new _WV2_Service_Metadata();

		$service->insertObject($cat, $clang, WV2_Metainfo::TYPE_CATEGORY, $metainfos);

		_WV2_Extensions_Article::onArticleAdded($params);
	}

	/**
	 * Handler für SLY_CAT_UPDATED
	 *
	 * Serialisiert das Frontend-Formular.
	 *
	 * @param array $params  die von Sally übergebenen Parameter
	 */
	public static function onCategoryUpdated(array $params) {
		if (!self::canEdit()) return;

		$catID  = $params['subject']->getId();
		$errors = _WV2_Serializer::processCategoryFrontendForm($catID);

		if (is_array($errors)) {
			// NO WV2_Exception, Sally wouldn't catch it!
			throw new sly_Exception(self::getErrorText($errors, WV2_Metainfo::TYPE_CATEGORY));
		}
	}

	/**
	 * Handler für SLY_CAT_DELETED
	 *
	 * Entfernt alle Metadaten für die gelöschte Kategorie.
	 *
	 * @param  array $params  die von Sally übergebenen Parameter
	 */
	public static function onCategoryDeleted(array $params) {
		$service = new _WV2_Service_Metadata();
		$service->deleteCategory($params['subject']);

		// Since the category has been deleted, we cannot access the start article
		// anymore and have to use the service the hard way.
		$service->deleteObject($params['subject']->getId(), WV2_Metainfo::TYPE_ARTICLE);

		WV2_Metainfo::clearDataCache();
	}

	/**
	 * Handler für SLY_CAT_STATUS
	 *
	 * Leert den Datencache. Wichtig für Operationen mit "onlineonly".
	 *
	 * @param array $params  die von Sally übergebenen Parameter
	 */
	public static function onCategoryStatus(array $params) {
		WV2_Metainfo::clearDataCache();
	}
}
