_context = $context; $this->_resource = $resource; $this->_animationFactory = $animationFactory; $this->_backupFactory = $backupFactory; $this->_cssFactory = $cssFactory; $this->_navigationFactory = $navigationFactory; $this->_slideFactory = $slideFactory; $this->_sliderFactory = $sliderFactory; $this->_staticSlideFactory = $staticSlideFactory; parent::__construct($this->_context); } /** * Get query results * * @param string Query * @param string Result format * @return array */ public function get_results($query, $mode = self::ARRAY_A) { $queryArray = explode('FROM', $query); if (count($queryArray) < 2) { die(); } $queryArray = explode('WHERE', $queryArray[1]); $table = trim($queryArray[0]); $collection = $this->getFactory($table)->create()->getCollection(); $where = isset($queryArray[1]) ? trim($queryArray[1]) : ''; if (strpos($where, 'ORDER BY') !== false) { $whereArray = explode('ORDER BY', $where); $where = trim($whereArray[0]); $orderArray = explode(' ', trim($whereArray[1])); $orderBy = trim($orderArray[0], '"\' '); $orderDir = isset($orderArray[1]) ? trim($orderArray[1], '"\' ') : 'ASC'; } if ($where) { if (strpos($where, ' IN(') !== false) { list($field, $value) = explode(' IN(', $where); $condition = ['in' => explode(',', trim($value, '"\' )'))]; } elseif (strpos($where, '!=') === false) { list($field, $value) = explode('=', $where); $condition = trim($value, '"\' '); } else { list($field, $value) = explode('!=', $where); $condition = ['neq' => trim($value, '"\' ')]; } if (isset($field)) { $collection->addFieldToFilter(trim($field, '`"\' '), $condition); } } if ( ! empty($orderBy)) { $collection->setOrder($orderBy, $orderDir); } $response = array(); foreach ($collection as $_item) { $response[] = $_item->getData(); } return $response; } /** * Get query row * * @param string Query * @param string Result format * @return array */ public function get_row($query, $mode = '') { $query = $this->_convertTableNames($query); $readConnection = $this->_resource->getConnection('core_read'); $result = $readConnection->fetchRow($query); return $mode == self::ARRAY_A ? $result : (object) $result; } /** * Insert row * * @param string Table name * @param array Data * @return int */ public function insert($table, $data = array()) { $model = $this->getFactory($table)->create(); $model->setData($data); try { $model->save(); } catch (\Exception $e) { Data::logException($e); $this->throwError($e->getMessage()); } $this->lastRowID = $model->getId(); $this->insert_id = $this->lastRowID; return $this->lastRowID; } /** * Update row * * @param string Table name * @param array Data * @param array Where */ public function update($table, $data = array(), $where = false) { if (is_array($where) && $where) { $collection = $this->getFactory($table)->create()->getCollection(); foreach ($where as $_field => $_value) { $collection->addFieldToFilter($_field, $_value); } $item = $collection->getFirstItem(); try { $item ->addData($data) ->setId( $item->getId() ) ->save(); } catch (\Exception $e) { Data::logException($e); $this->throwError($e->getMessage()); } } else { $this->throwError('No id provided.'); } return true; } /** * Delete row * * @param string Table name * @param array Data * @param array Where */ public function delete($table, $where) { if ( ! $table) { $this->throwError(__('Table name should not be empty.')); } if ( ! $where) { $this->throwError(__('Where should not be empty.')); } $collection = $this->getFactory($table)->create()->getCollection(); foreach ($where as $field => $value) { $collection->addFieldToFilter($field, $value); } foreach ($collection as $_item) { $_item->delete(); } } /** * Prepare query * * @param string Query * @param mixed Args * @return array */ public function prepare($query, $args) { $args = func_get_args(); array_shift( $args ); // If args were passed as an array (as in vsprintf), move them up if ( isset( $args[0] ) && is_array($args[0]) ) $args = $args[0]; $query = str_replace( "'%s'", '%s', $query ); // in case someone mistakenly already singlequoted it $query = str_replace( '"%s"', '%s', $query ); // doublequote unquoting $query = preg_replace( '|(?_resource->getConnection('core_write')->quote($arg); } /** * Run sql query * * param string Query */ public function query($query) { $query = $this->_convertTableNames($query); $writeConnection = $this->_resource->getConnection('core_write'); $result = $writeConnection->query($query); $this->insert_id = $writeConnection->lastInsertId(); return $result; } /** * Get results of SQL query * * @param string $query * @return array */ public function get_query_results($query) { return $this->query($query)->fetchAll(); } /** * Run sql query and get result variable * * param string Query * return var */ public function get_var($query) { $query = $this->_convertTableNames($query); $readConnection = $this->_resource->getConnection('core_read'); return $readConnection->fetchOne($query); } /** * Generate DB alter query by difference * * @param string Query * @param boolean Is Execute * @return string */ public function dbDelta($sql, $isExecute = true) { return false; } /** * Get model factory by name * * @param string Name * @return object */ public function getFactory($name) { switch ($name) { case 'nwdthemes_revslider_animations' : $factory = $this->_animationFactory; break; case 'nwdthemes_revslider_backup' : $factory = $this->_backupFactory; break; case 'nwdthemes_revslider_css' : $factory = $this->_cssFactory; break; case 'nwdthemes_revslider_navigations' : $factory = $this->_navigationFactory; break; case 'nwdthemes_revslider_slides' : $factory = $this->_slideFactory; break; case 'nwdthemes_revslider_sliders' : $factory = $this->_sliderFactory; break; case 'nwdthemes_revslider_static_slides' : $factory = $this->_staticSlideFactory; break; } return $factory; } /** * Convert table names in query * * @param string $query * @return string */ protected function _convertTableNames($query) { preg_match('#\b(nwdthemes_revslider_\w+)\b#', $query, $modelNames); $modelNames = array_unique($modelNames); foreach ($modelNames as $modelName) { $query = str_replace($modelName, $this->_resource->getTableName($modelName), $query); } return $query; } }