/** * Create new version * @property Db_Object $object * @return boolean */ public function newVersion(Db_Object $object) { $object->commitChanges(); $newVersion = $this->getLastVersion($object->getName(), $object->getId()) + 1; $newData = $object->getData(); if ($object->getConfig()->hasEncrypted()) { $ivField = $object->getConfig()->getIvField(); $ivKey = $object->get($ivField); if (empty($ivKey)) { $ivKey = Utils_String::createEncryptIv(); $newData[$ivField] = $ivKey; } $newData = $this->getStore()->encryptData($object, $newData); } $newData['id'] = $object->getId(); try { $vObject = new Db_Object('vc'); $vObject->set('date', date('Y-m-d')); $vObject->set('data', base64_encode(serialize($newData))); $vObject->set('user_id', User::getInstance()->id); $vObject->set('version', $newVersion); $vObject->set('record_id', $object->getId()); $vObject->set('object_name', $object->getName()); $vObject->set('date', date('Y-m-d H:i:s')); if ($vObject->save()) { return $newVersion; } return false; } catch (Exception $e) { $this->logError('Cannot create new version for ' . $object->getName() . '::' . $object->getId() . ' ' . $e->getMessage()); return false; } }
/** * (non-PHPdoc) * @see Backend_Controller_Crud::loaddataAction() */ public function loaddataAction() { $id = Request::post('id', 'integer', false); if (!$id) { Response::jsonSuccess(array()); } try { $obj = new Db_Object($this->_objectName, $id); } catch (Exception $e) { Response::jsonError($this->_lang->CANT_EXEC); } $data = $obj->getData(); /* * Prepare mltilink properties */ $fields = $obj->getFields(); foreach ($fields as $field) { if ($field == 'id' || empty($data[$field])) { continue; } $linkObject = $obj->getLinkedObject($field); if ($linkObject !== false) { $data[$field] = array_values($this->_collectLinksData($data[$field], $linkObject)); } } $data['id'] = $obj->getId(); $menuItemModel = Model::factory('menu_item'); $data['data'] = $menuItemModel->getTreeList($data['id']); /* * Send response */ Response::jsonSuccess($data); }
/** * Load user info action */ public function userloadAction() { $id = Request::post('id', 'integer', false); if (!$id) { Response::jsonError($this->_lang->get('INVALID_VALUE')); } try { $user = new Db_Object('user', $id); $userData = $user->getData(); unset($userData['pass']); Response::jsonSuccess($userData); } catch (Exception $e) { Response::jsonError($this->_lang->get('WRONG_REQUEST')); } }
/** * Get the object data ready to be sent * @param Db_Object $object * @param integer $id * @param integer $version * @return array */ protected function _loadData(Db_Object $object, $version) { $id = $object->getId(); $vc = Model::factory('Vc'); if (!$version) { $version = $vc->getLastVersion($this->_objectName, $id); } if (!$version) { $data = $object->getData(); $data['id'] = $object->getId(); Response::jsonSuccess($data); } try { $object->loadVersion($version); } catch (Exception $e) { Model::factory($object->getName())->logError('Cannot load version ' . $version . ' for ' . $object->getName() . ':' . $object->getId()); Response::jsonError($this->_lang->get('CANT_LOAD')); } $data = $object->getData(); if (empty($data)) { Response::jsonError($this->_lang->get('CANT_LOAD')); } $data['id'] = $id; $data['version'] = $version; $data['published'] = $object->get('published'); $data['staging_url'] = static::getStagingUrl($object); /* * Prepare multilink properties */ $linkedObjects = $object->getConfig()->getLinks(array('multy')); foreach ($linkedObjects as $linkObject => $fieldCfg) { foreach ($fieldCfg as $field => $linkCfg) { if (empty($data[$field])) { continue; } $data[$field] = array_values($this->_collectLinksData($data[$field], $linkObject)); } } return $data; }
/** * Delete item from library * @param integer $id */ public function remove($id, $log = true) { if (!$id) { return false; } $obj = new Db_Object($this->_name, $id); $data = $obj->getData(); if (empty($data)) { return false; } $docRoot = Registry::get('main', 'config')->get('docroot'); if (strlen($data['path'])) { @unlink($docRoot . $data['path']); if ($data['type'] == 'image') { $conf = $this->getConfig()->__toArray(); foreach ($conf['image']['sizes'] as $k => $v) { @unlink($docRoot . self::getImgPath($data['path'], $data['ext'], $k)); } } } $obj->delete(); return true; }
/** * Get ORM object data * Sends a JSON reply in the result and * closes the application */ public function loaddataAction() { $id = Request::post('id', 'integer', false); if (!$id) { Response::jsonSuccess(array()); } try { $obj = new Db_Object($this->_objectName, $id); } catch (Exception $e) { Response::jsonError($this->_lang->CANT_EXEC); } $data = $obj->getData(); /* * Prepare mltilink properties */ $linkedObjects = $obj->getConfig()->getLinks(array('multy')); foreach ($linkedObjects as $linkObject => $fieldCfg) { foreach ($fieldCfg as $field => $linkCfg) { if (empty($data[$field])) { continue; } $data[$field] = array_values($this->_collectLinksData($data[$field], $linkObject)); } } $data['id'] = $obj->getId(); /* * Send response */ Response::jsonSuccess($data); }
protected function _insertOperation(Db_Object $object) { $insertId = $object->getInssertId(); if ($insertId) { $updates = array_merge($object->getData(), $object->getUpdates()); $updates[$object->getConfig()->getPrimaryKey()] = $insertId; } else { $updates = $object->getUpdates(); } if ($object->getConfig()->hasEncrypted()) { $updates = $this->encryptData($object, $updates); } if (empty($updates)) { return false; } /* * Validate unique values */ $values = $object->validateUniqueValues(); if (!empty($values)) { if ($this->_log) { $errors = array(); foreach ($values as $k => $v) { $errors[] = $k . ':' . $v; } $this->_log->log($object->getName() . '::insert ' . implode(', ', $errors)); } return false; } $db = $this->_getDbConnection($object); $objectTable = $object->getTable(); if (!$db->insert($objectTable, $object->serializeLinks($updates))) { return false; } $id = $db->lastInsertId($objectTable, $object->getConfig()->getPrimaryKey()); if (!$id) { return false; } $object->setId($id); if (!$this->_updateLinks($object)) { return false; } $object->commitChanges(); $object->setId($id); return true; }