<?php
/**
 * Open Source - Content Managment System
 * Next Generation v2
 * @Coder:  Mutzii
 * @copyright  Copyright (c) 2012-2013 by Mutzii
 * File: module.class.php
 * @Description: 
      ModulLoader ist im CMS intigriert. Er lädt automatisch
	  alle Module im Ordner module.
	  
	  Die abstrakte klasse (sieh unten), muss bei jedem Modul als extends angehängt werden
	  damit alle Module automatisch intialisert werden. Das funktioniert mit der 
	  onEnable() Methode. Des weiteren hat jedes Modul den zugriff zu der jeweiligen
	  CMS Instance, wodurch Sie alle Methoden ausführen können die im CMS intigriert sind.
	  Darunter fallen auch API Methoden.
	  
	  Example:
	  Modul1 >>>>>>>>>         
	                   CMS  <<<<<<< >>>>>> API
	  Modul2 >>>>>>>>>
	  
	  Module können miteinander nicht Kommunizieren. 
  
 */ 
 
 
interface Modul_Interface
{
  public function onEnable();
  public function onDisable();
}


abstract class Modul implements Modul_Interface
{
   protected $instance = null;
 
   public function setInstance($instance) 
   {
     $this->instance = $instance;
   }
   
   
   public function getInstance()
   {
     return $this->instance;
   }
   
   public function getPlaceHolder()
   {
      return $this->getInstance()->getPlaceHolder();
   }
   
   public function getErrorList()
   {
     return $this->getInstance()->getErrorList();
   }
   
   public function isStatus($Class_Name)
   {
     /* Verbindung zur Datenbank herstellen.. */
	 return true; /*  Momentan werden alle Module Aktiviert*/

   }  
	
}


class ModulLoader
{ 
  protected $_klasse       = null;
  protected $_instance     = null;
  protected $_class_ini    = null;
  protected $_cms_instance = null;
     
      public function getCMSInstance()
	  {
	    return $this->_cms_instance;
	  }
	  
	  public function setCMSInstance($instance)
	  {
	    $this->_cms_instance = $instance;
	  }

	  public function ClassLoad($Class)
	  {
		   $this->_klasse   = $Class;  
		   require_once(ROOT.'/module/'.$Class.'.modul.php');	   	 
	  }
	  
	  
	  public function getClassInstance()
	  {
	      if(null != $this->_klasse)
		  { 
		       if($this->_class_ini == null){
		            $this->_class_ini = new $this->_klasse();
		            return $this->_class_ini;
			   }else{
			        return $this->_class_ini;
			   }
		  }
	  }
	  
	  public function Run()
	  { 
	    if( null == $this->_class_ini)
		{
	       if($this->getClassInstance()->isStatus($this->_klasse))
		   {
		        /* Enable */
		        $this->getClassInstance()->setInstance($this->getCMSInstance()); 
		        $this->getClassInstance()->onEnable();
		   }else{
		        /* Disable */
				$this->getClassInstance()->setInstance($this->getCMSInstance());
				$this->getClassInstance()->onDisable();
		   }
		}else{
		
		   if($this->_class_ini->isStatus($this->_klasse))
		   {
		        $this->_class_ini->setInstance($this->getCMSInstance()); 
		        $this->_class_ini->onEnable();
		   }else{
		   
		        $this->_class_ini->setInstance($this->getCMSInstance());
                $this->_class_ini->onDisable();				
		   }
		
		}
		
	
	  }
}










?>