<?php

/**
 * Temp
 *
 * @author Arkadiusz Rychlik <a.rychlik at eppe.com.pl>
 */
class Rtn_RB_Plugin_Temp implements RedBean_Plugin {

	static function extendRB(){
		R::ext('storeTemp', function(RedBean_OODBBean $bean) {
			if($bean->istemp && $bean->masterid > 0){
				return R::store($bean);
			}
			$bean->istemp = true;
			
			if($bean->getID()){
				$bean->masterid = $bean->getID();
				$bean->id = 0;
				return R::store($bean);
			}
			else{
				$id = R::store($bean);
				$bean->masterid = $id;
				return R::store($bean);
			}
		});
		R::ext('findOrMakeTemp', function($type, $id){
			$bean = R::findTemp($type,$id);
			if(!$bean){
				$masterBean = R::findOne($type,$id);
				if($masterBean){
					$bean = R::makeTemp($masterBean);
				}
			}
			return $bean;
		});
		R::ext('makeTemp', function(RedBean_OODBBean $masterBean){
			$type = $masterBean->getMeta('type');
			$tempBean = R::dispense($type);
			$tempBean->importFrom($masterBean);
			$tempBean->id = 0;
			$tempBean->masterid = $masterBean->id;
			$tempBean->istemp = true;
			$tempBean->wasedited = false;
			R::store($tempBean);
			return $tempBean;
		});
		R::ext( 'findTemp', function($type, $id ) {
			return R::findOne($type, 'masterid = ? ORDER BY id DESC', [$id]);
		});	
		R::ext( 'dispenseTemp', function($type) {
			$bean = R::dispense($type);
			$bean->istemp = true;
			return $bean;
		});
	}
		
}

