public function runByParameter($invokeParams = null)
 {
     if (is_null($invokeParams)) {
         return false;
     }
     if (!EhrlichAndreas_Util_Object::isInstanceOf($invokeParams, 'EhrlichAndreas_Mvc_Request')) {
         $invokeParams = EhrlichAndreas_Util_Array::objectToArray($invokeParams);
         $request = new EhrlichAndreas_Mvc_Request();
         $this->getRouter()->setRequestParams($request, $invokeParams);
     } else {
         $request = $invokeParams;
     }
     $class = implode('_', array(ucfirst($request->getModuleName()), ucfirst($request->getSubmoduleName()), ucfirst($request->getControllerName()) . 'Controller'));
     $action = $request->getActionName();
     $controller = new $class($request);
     $controller->setView($this->getView());
     return $controller->dispatch($action);
 }
 /**
  * Factory for EhrlichAndreas_Db_Adapter_Abstract classes.
  *
  * First argument may be a string containing the base of the adapter class
  * name, e.g. 'Mysqli' corresponds to class EhrlichAndreas_Db_Adapter_Mysqli. This
  * name is currently case-insensitive, but is not ideal to rely on this
  * behavior.
  * If your class is named 'EhrlichAndreas_Db_Adapter_Pdo_Mysql', where
  * 'EhrlichAndreas_Db_Adapter' is the
  * namespace
  * and 'Pdo_Mysql' is the adapter name, it is best to use the name exactly
  * as it
  * is defined in the class. This will ensure proper use of the factory API.
  *
  * First argument may alternatively be array.
  * The adapter class base name is read from the 'adapter' property.
  * The adapter config parameters are read from the 'params' property.
  *
  * Second argument is optional and may be an associative array of key-value
  * pairs. This is used as the argument to the adapter constructor.
  *
  * If the first argument is of type Iterator, it is assumed to contain
  * all parameters, and the second argument is ignored.
  *
  * @param mixed $adapter
  *            String name of base adapter class, or array.
  * @param mixed $config
  *            OPTIONAL; an array or array with adapter
  *            parameters.
  * @return EhrlichAndreas_Db_Adapter_Abstract
  * @throws EhrlichAndreas_Db_Exception
  */
 public static function factory($adapter, $config = array())
 {
     if (is_object($config) && method_exists($config, 'toArray')) {
         $config = $config->toArray();
     }
     if (is_object($adapter) && method_exists($adapter, 'toArray')) {
         $adapter = $adapter->toArray();
     }
     /*
      * Convert array argument to plain string adapter name and separate
      * config object.
      */
     if (is_array($adapter)) {
         if (isset($adapter['params'])) {
             $config = $adapter['params'];
         }
         if (empty($config)) {
             $config = $adapter;
         }
         if (isset($adapter['adapter'])) {
             $adapter = (string) $adapter['adapter'];
         } else {
             $adapter = null;
         }
     }
     /*
      * Verify that adapter parameters are in an array.
      */
     if (!is_array($config)) {
         /**
          *
          * @see EhrlichAndreas_Db_Exception
          */
         throw new EhrlichAndreas_Db_Exception('Adapter parameters must be in an array or a Iterator object');
     }
     if (isset($config['dsn'])) {
         $dsn = EhrlichAndreas_Util_Dsn::parseDsn($config['dsn']);
         $uri = EhrlichAndreas_Util_Dsn::parseUri($config['dsn']);
         $driver_name = $uri[0];
         $config = $config + $dsn;
         /*
          * Verify that an adapter name has been specified.
          */
         if ((!is_string($adapter) || empty($adapter)) && isset($config['driver']) && stripos($config['driver'], '_') === false) {
             $adapter = $config['driver'] . '_' . $driver_name;
         }
     }
     /*
      * Verify that an adapter name has been specified.
      */
     if (!is_string($adapter) || empty($adapter)) {
         /**
          *
          * @see EhrlichAndreas_Db_Exception
          */
         throw new EhrlichAndreas_Db_Exception('Adapter name must be specified in a string');
     }
     /*
      * Form full adapter class name
      */
     $adapterNamespace = 'EhrlichAndreas_Db_Adapter';
     if (isset($config['adapterNamespace'])) {
         if ($config['adapterNamespace'] != '') {
             $adapterNamespace = $config['adapterNamespace'];
         }
         unset($config['adapterNamespace']);
     }
     $adapterName = $adapterNamespace . '_';
     $adapterName .= str_replace(' ', '_', ucwords(str_replace('_', ' ', strtolower($adapter))));
     /*
      * Load the adapter class. This throws an exception if the specified
      * class cannot be loaded.
      */
     if (!class_exists($adapterName)) {
         throw new EhrlichAndreas_Db_Exception("Adapter class '{$adapterName}' does not exist");
     }
     $notInstanceOf = true;
     $notInstanceOf = $notInstanceOf && !EhrlichAndreas_Util_Object::isInstanceOf($adapterName, 'EhrlichAndreas_Db_Adapter_Abstract');
     $notInstanceOf = $notInstanceOf && !EhrlichAndreas_Util_Object::isInstanceOf($adapterName, 'Zend_Db_Adapter_Abstract');
     $notInstanceOf = $notInstanceOf && !EhrlichAndreas_Util_Object::isInstanceOf($adapterName, 'MiniPhp_Db_Adapter_Abstract');
     /*
      * Verify that the object created is a descendent of the abstract
      * adapter type.
      */
     if ($notInstanceOf) {
         /**
          *
          * @see EhrlichAndreas_Db_Exception
          */
         throw new EhrlichAndreas_Db_Exception("Adapter class '{$adapterName}' does not extend EhrlichAndreas_Db_Adapter_Abstract");
     }
     /*
      * Create an instance of the adapter class. Pass the config to the
      * adapter class constructor.
      */
     $adapter = str_replace(' ', '_', ucwords(str_replace('_', ' ', $adapter)));
     $config['adapter'] = $adapter;
     $dbAdapter = new $adapterName($config);
     return $dbAdapter;
 }
 /**
  * Return the connection resource
  * If we are not connected, the connection is made
  *
  * @throws EhrlichAndreas_AbstractCms_Exception
  * @return EhrlichAndreas_Db_Adapter_Abstract Connection resource
  */
 public function getConnection()
 {
     if (!empty($this->db) || !empty($this->options['db'])) {
         if (EhrlichAndreas_Util_Object::isInstanceOf($this->db, 'EhrlichAndreas_Db_Adapter_Abstract') || EhrlichAndreas_Util_Object::isInstanceOf($this->db, 'Zend_Db_Adapter_Abstract')) {
             return $this->db;
         } else {
             $this->db = $this->options['db'];
             if (!EhrlichAndreas_Util_Object::isInstanceOf($this->db, 'EhrlichAndreas_Db_Adapter_Abstract') && !EhrlichAndreas_Util_Object::isInstanceOf($this->db, 'Zend_Db_Adapter_Abstract')) {
                 $this->throwException("Impossible to open " . $this->options['db'] . " DB", $this->options['exceptionclass']);
             }
             return $this->db;
         }
     } elseif (!empty($this->options['dbconfig'])) {
         $adapter = EhrlichAndreas_Db_Db::getAdapterName($this->options['dbconfig']);
         if (!EhrlichAndreas_Util_Object::isInstanceOf($adapter, 'EhrlichAndreas_Db_Adapter_Abstract') && !EhrlichAndreas_Util_Object::isInstanceOf($this->db, 'Zend_Db_Adapter_Abstract')) {
             $this->throwException("Impossible to open " . $adapter . " DB", $this->options['exceptionclass']);
         }
         $dbconfig = $this->options['dbconfig'];
         if (isset($dbconfig['dbtableprefix'])) {
             unset($dbconfig['dbtableprefix']);
         }
         if (isset($dbconfig['dbtableprefixlength'])) {
             unset($dbconfig['dbtableprefixlength']);
         }
         if (isset($dbconfig['dbtableprefixlengthmax'])) {
             unset($dbconfig['dbtableprefixlengthmax']);
         }
         if (isset($dbconfig['dbtableprefixoffset'])) {
             unset($dbconfig['dbtableprefixoffset']);
         }
         if (isset($dbconfig['dbtablesuffix'])) {
             unset($dbconfig['dbtablesuffix']);
         }
         if (isset($dbconfig['dbtablesuffixlength'])) {
             unset($dbconfig['dbtablesuffixlength']);
         }
         if (isset($dbconfig['dbtablesuffixlengthmax'])) {
             unset($dbconfig['dbtablesuffixlengthmax']);
         }
         if (isset($dbconfig['dbtablesuffixoffset'])) {
             unset($dbconfig['dbtablesuffixoffset']);
         }
         $this->db = EhrlichAndreas_Db_Db::factory($dbconfig);
         return $this->db;
     } else {
         $this->throwException("Impossible to open DB", $this->options['exceptionclass']);
     }
 }
 /**
  * Fetches all result rows as a sequential array.
  *
  * @param EhrlichAndreas_AbstractCms_Abstract_Adapter_Abstract|EhrlichAndreas_Db_Adapter_Abstract|Zend_Db_Adapter_Abstract $adapter
  * @param string $table
  * @param string|array $where
  *            OPTIONAL An SQL WHERE clause.
  * @param string|array $cols
  *            OPTIONAL The columns to select from the joined table.
  * @param string|array $order
  *            OPTIONAL The column(s) and direction to order by.
  * @param string|array $group
  *            OPTIONAL The column(s) to group by.
  * @param string|array $having
  *            OPTIONAL The HAVING condition.
  * @param int $count
  *            OPTIONAL An SQL LIMIT count.
  * @param int $offset
  *            OPTIONAL An SQL LIMIT offset.
  * @param string $returnAsString
  *            Return the computed query as string.
  * @return array The row results per assoc array fetch mode.
  * @throws Exception
  */
 public function fetchAll($adapter, $table, $where = null, $cols = null, $order = null, $group = null, $having = null, $count = null, $offset = null, $returnAsString = false)
 {
     $db = EhrlichAndreas_AbstractCms_Abstract_Model::getConnection($adapter);
     if (!EhrlichAndreas_Util_Object::isInstanceOf($where, 'EhrlichAndreas_Db_Select')) {
         $query = new EhrlichAndreas_Db_Select($db);
         $cols = $cols == null ? '*' : $cols;
         if (!is_array($cols)) {
             $cols = array($cols);
         }
         foreach ($cols as $key => $value) {
             $escape = true;
             if (is_array($value)) {
                 if (array_key_exists('escape', $value) && !is_null($value['escape'])) {
                     $escape = $value['escape'];
                 } elseif (count($value) == 2 && array_key_exists(0, $value) && array_key_exists(1, $value) && !is_null($value[1]) && is_bool($value[1])) {
                     $escape = $value[1];
                 }
                 if (array_key_exists('value', $value)) {
                     $value = $value['value'];
                 } elseif (array_key_exists(0, $value)) {
                     $value = $value[0];
                 } else {
                     $value = array_shift($value);
                 }
             } elseif (is_object($value) && method_exists($value, '__toString')) {
                 $value = $value->__toString();
                 $escape = false;
             }
             $escape = (bool) intval($escape);
             if (!$escape) {
                 $value = new EhrlichAndreas_Db_Expr($value);
             }
             $cols[$key] = $value;
         }
         $query->from($table, $cols);
         if ($where !== null) {
             $where = (array) $where;
             foreach ($where as $key => $value) {
                 $escape = true;
                 if (is_array($value)) {
                     if (array_key_exists('escape', $value) && !is_null($value['escape'])) {
                         $escape = $value['escape'];
                     } elseif (count($value) == 2 && array_key_exists(0, $value) && array_key_exists(1, $value) && !is_null($value[1]) && is_bool($value[1])) {
                         $escape = $value[1];
                     }
                     if (array_key_exists('value', $value)) {
                         $value = $value['value'];
                     } elseif (count($value) == 2 && array_key_exists(0, $value) && array_key_exists(1, $value) && !is_null($value[1]) && is_bool($value[1])) {
                         $value = $value[0];
                     } else {
                         //$value = array_shift($value);
                     }
                 } elseif (is_object($value) && method_exists($value, '__toString')) {
                     $value = $value->__toString();
                     $escape = false;
                 }
                 $escape = (bool) intval($escape);
                 if (!$escape) {
                     $value = new EhrlichAndreas_Db_Expr($value);
                 }
                 if (is_int($key)) {
                     // $value is the full condition
                     $query->where($value);
                 } elseif (!is_array($value)) {
                     // $key is the condition with placeholder,
                     // and $val is quoted into the condition
                     $query->where($db->quoteIdentifier($key) . ' = ?', $value);
                 } else {
                     // $key is the condition with placeholder,
                     // and $val is array quoted into the condition
                     $query->where($db->quoteIdentifier($key) . ' in (?)', $value);
                 }
             }
         }
         if ($order !== null) {
             if (is_string($order)) {
                 $order = explode(',', $order);
             }
             if (!is_array($order)) {
                 $order = array($order);
             }
             foreach ($order as $val) {
                 $query->order($val);
             }
         }
         if ($group !== null) {
             if (is_string($group)) {
                 $group = explode(',', $group);
             }
             if (!is_array($group)) {
                 $group = array($group);
             }
             foreach ($group as $val) {
                 $query->group($val);
             }
         }
         if ($having !== null) {
             if (!is_array($having)) {
                 $having = array($having);
             }
             foreach ($having as $val) {
                 $query->having($val);
             }
         }
         if ($count !== null || $offset !== null) {
             $query->limit($count, $offset);
         }
     } else {
         $query = $where;
     }
     $query = $query->assemble();
     if ($returnAsString) {
         return $query;
     }
     $fetchMode = $db->getFetchMode();
     $stmt = $db->query($query);
     $return = $stmt->fetchAll($fetchMode);
     $stmt->closeCursor();
     // $return = $db->fetchAll($query);
     return $return;
 }
 /**
  * Test if a connection is active
  *
  * @return boolean
  */
 public function isConnected()
 {
     return (bool) (EhrlichAndreas_Util_Object::isInstanceOf($this->_connection, 'EhrlichAndreas_Pdo_Pdo') || EhrlichAndreas_Util_Object::isInstanceOf($this->_connection, 'PDO'));
 }
 /**
  * 
  * @param mixed $options
  * @return array
  */
 protected function _getCmsConfigFromAdapter($options = array())
 {
     if (!is_array($options)) {
         if (EhrlichAndreas_Util_Object::isInstanceOf($options, 'Zend\\Db\\Adapter\\Adapter')) {
             $options = new EhrlichAndreas_Db_ZF2Bridge_Adapter($options);
         }
         if (EhrlichAndreas_Util_Object::isInstanceOf($options, 'Doctrine\\Bundle\\DoctrineBundle\\Registry')) {
             $options = new EhrlichAndreas_Db_DoctrineBridge_Adapter($options);
         }
         if (EhrlichAndreas_Util_Object::isInstanceOf($options, 'EhrlichAndreas_Db_Adapter_Abstract') || EhrlichAndreas_Util_Object::isInstanceOf($options, 'Zend_Db_Adapter_Abstract')) {
             $adapter = $options;
             $dbConfig = $options->getConfig();
             if (isset($dbConfig['dsn'])) {
                 $data = EhrlichAndreas_Util_Dsn::parseDsn($dbConfig['dsn']);
                 foreach ($data as $key => $value) {
                     $dbConfig[$key] = $value;
                 }
                 $data = EhrlichAndreas_Util_Dsn::parseUri($dbConfig['dsn']);
                 if (isset($data[0])) {
                     $dbConfig['adapter'] = ucfirst($data[0]);
                 }
                 if (isset($dbConfig['adapter']) && $dbConfig['driver']) {
                     $dbConfig['adapter'] = $dbConfig['driver'] . '_' . $dbConfig['adapter'];
                 }
             }
             $options = array('db' => $adapter, 'dbconfig' => $dbConfig, 'params' => $dbConfig);
             if (isset($dbConfig['adapter'])) {
                 $options['adapter'] = $dbConfig['adapter'];
             }
             if (isset($dbConfig['install'])) {
                 $options['install'] = $dbConfig['install'];
             }
         }
     }
     return $options;
 }
 protected function _mapEhrlichAndreasToZend($param)
 {
     if ($this->_adapterIsEhrlichAndreas || !is_array($param) && !is_object($param)) {
         return $param;
     }
     if (is_array($param)) {
         $return = array();
         foreach ($param as $key => $value) {
             $key = $this->_mapEhrlichAndreasToZend($key);
             $value = $this->_mapEhrlichAndreasToZend($value);
             $return[$key] = $value;
         }
         $param = $return;
     }
     if (EhrlichAndreas_Util_Object::isInstanceOf($param, 'EhrlichAndreas_Db_Expr')) {
         $param = $param->__toString();
         $param = new Zend_Db_Expr($param);
     }
     if (EhrlichAndreas_Util_Object::isInstanceOf($param, 'EhrlichAndreas_Db_Select')) {
         $param = $param->assamble();
         $param = new EhrlichAndreas_Zend_Db_Select($param);
     }
     return $param;
 }