<?php

/**
 * Description of Core
 *
 * @author Arkadiusz Rychlik <a.rychlik at eppe.com.pl>
 */
class Rtn_CRUD_Core {

	use Rtn_CRUD_Trait_Reorder,
	 Rtn_CRUD_Trait_Active;

	const CONTEXT_CREATE = 1;
	const CONTEXT_UPDATE = 2;

	protected $beanName;

	public function create($data) {
		$bean = R::dispense($this->beanName);
		$bean->setFromArray($data);
		$this->_beforeStore(self::CONTEXT_CREATE, $bean);

		return (R::store($bean));
	}

	public function update($beanId, $data) {
		$bean = $this->findBean($beanId);

		if ($bean) {
			$bean->setFromArray($data);
			$this->_beforeStore(self::CONTEXT_UPDATE, $bean);
			return R::store($bean);
		}
	}

	public function delete($beanId) {
		$bean = R::load($this->beanName, $beanId);
		R::trash($bean);
		return true;
	}

	/**
	 * Wyszukuje bean z uwzglednieniem tego, czy używamy wielojęzyczności
	 *
	 * @param int $beanId
	 * @return bean
	 */
	public function findBean($beanId) {
		return R::findOne($this->beanName, 'id = :beanId', array('beanId' => $beanId));
	}

	/**
	 * Zwraca nazwę klasy formularza
	 * Końcówka nazwy klasy jest taka sama jak końcówka nazwy klasy CRUD'a
	 * @param type $context
	 * @param type $module
	 * @return \class
	 */
	public function getFormClassName($context = 'Admin', $module = null) {
		$module = $module? : Zend_Controller_Front::getInstance()->getRequest()->getModuleName();
		$class = $module . '_Form_' . $context . '_' . preg_replace(['/.*CRUD_Admin_/','/.*CRUD_/'] , '', get_class($this));
		return $class;
	}

	/**
	 * Wykonywane zawsze przed zapisem beana
	 * @param int $context
	 * @param RedBean_OODBBean $bean
	 */
	protected function _beforeStore($context, &$bean) {

	}

}
