<?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
 */

/**
 * Metainformation
 *
 * Eine Metainformation ist eine zusätzliche Information, die einem Artikel /
 * Kategorie / Medium / Benutzer zugewiesen werden kann. Sie besteht aus einem
 * internen Namen, einem Ttel, einem Datentyp sowie einigen weiteren Daten.
 *
 * Metainformationen können über Artikeltypen gruppiert werden. Auf diese Weise
 * kann einem Artikel immer eine ganz bestimmte Teilmenge aller verfügbaren
 * Metainformationen zugewiesen werden.
 *
 * Eine einzelne Metainformation kann nur entweder für Artikel oder für Kategorien
 * oder für Medien oder für Benutzer verwendet werden. Die internen Namen müssen
 * für jeden dieser drei Bereiche jeweils eindeutig sein.
 *
 * Artikel-Metainformationen können noch einmal in zwei Bereiche unterteilt
 * werden:
 *
 *  - Content-Seite: Die Information (das Formular) wird direkt auf der
 *    Slice-Seite eines Artikels angezeigt.
 *  - Extra-Seite: Die Information wird auf der separaten Meta-Seite von
 *    Sally angezeigt.
 *
 * @ingroup objects
 * @author  Christoph
 */
class _WV2_Info extends WV_Property {
	protected $metapage;      ///< boolean  wenn true, wird die Information nur auf der separaten Meta-Seite von Artikeln angezeigt
	protected $articleTypes;  ///< array    Liste von Artikeltypen, denen diese Information zugewiesen ist
	protected $type;          ///< int      Typ (Artikel-, Kategorie- oder Medium-Metainformation)
	protected $pos;
	protected $group;
	protected $backend; // show metadata in backend forms

	/**
	 * Konstruktor
	 */
	public function __construct($type, $name, array $data) {
		parent::__construct($name, $data);

		$this->type         = (int) $type; // TYPE_ARTICLE, ...
		$this->metapage     = (bool) $this->getData('metapage', false);
		$this->articleTypes = $this->getData('types', array());
		$this->pos          = isset($data['pos']) ? (int) $data['pos'] : null;
		$this->group        = isset($data['group']) ? $data['group'] : '';
		$this->backend      = isset($data['backend']) ? $data['backend'] : true;

		if (empty($this->articleTypes)) {
			$this->articleTypes = sly_Service_Factory::getArticleTypeService()->getArticleTypes();
			$this->articleTypes = array_keys($this->articleTypes);
		}

		$this->multilingual = false;
	}

	public static function getDatatypeWithParams($metainfo, $type = WV2_Metainfo::TYPE_ARTICLE) {
		$metainfo = WV2_Metainfo::getMetainfo($metainfo, $type);
		return array('datatype' => $metainfo->getDatatype(), 'params' => $metainfo->getParams());
	}

	public function getID() {
		return sprintf('%u', crc32($this->type.$this->name));
	}

	public function getArticleTypes() { return $this->articleTypes; }
	public function getMetapage()     { return $this->metapage;     }
	public function getType()         { return $this->type;         }
	public function getPosition()     { return $this->pos;          }
	public function getGroup()        { return $this->group;        }
	public function getBackend()      { return $this->backend;      }
}
