public function copy($with_child = true, $copyTo = 0) { if (!empty($this->id)) { $copy = new ormObject(); $copy->setClass($this->getClass()->id()); // Перенос данных полей $fields = $this->getClass()->loadFields(); while (list($fname, $field) = each($fields)) { if (!empty($field['f_type']) && $field['f_type'] != 97 && $field['f_relation'] < 2) { $copy->__set($fname, $this->__get($fname)); } } if (empty($copyTo)) { $copy->__set('name', $this->__get('name') . lang::get('copy')); } // Устанавливаем родителя if (empty($copyTo)) { $parents = $this->getParents(); while (list($id, $parent) = each($parents)) { $copy->setNewParent($id); } } else { $copy->setNewParent($copyTo); } $copy->save(); if (!$copy->issetErrors() && $with_child) { while ($child = $this->getChild()) { $child->copy(true, $copy->id); } return true; } else { if ($copy->issetErrors()) { return false; } } } }
/** * @return null * @param string $callback - Имя php-функции для обработки добавления/изменения объектов. * @desc Сохраняет все пришедшие данные. Метод используется обработчиком формы. */ public function process($callback = '', $addit_parram = '') { if (isset($_POST['obj' . $this->form_name]) && isset($_POST['class_' . $this->form_name])) { $class = ormClasses::get($_POST['class_' . $this->form_name]); $mas = $class->loadFields(); while (list($id, $fields) = each($_POST['obj' . $this->form_name])) { $keys = array_keys($fields); if (is_numeric($id)) { $obj = ormObjects::get($id); } else { if (!$this->without_add && !empty($fields[$keys[0]])) { $obj = new ormObject(); $obj->setClass($class->getSName()); } } if (isset($obj) && $obj instanceof ormObject) { if (!$this->without_del && isset($_POST['delete_' . $obj->id])) { $obj->toTrash(); } else { reset($mas); while (list($key, $f_val) = each($mas)) { if ($f_val['f_type'] > 89 && $f_val['f_type'] < 101 && $f_val['f_relation'] == 2 && isset($fields[$key])) { // Справочник с типом "Выбор родителя" $obj->clearParents(); $ps = $obj->getParents(); $parents = $fields[$key]; if (!empty($parents)) { if (is_numeric($parents) && !empty($parents)) { $pos = isset($ps[$parents]) ? $ps[$parents]['position'] : 0; $obj->setNewParent($parents, $pos); } else { if (is_array($parents)) { while (list($key, $val) = each($parents)) { if (!empty($val)) { $pos = isset($ps[$val]) ? $ps[$val]['position'] : 0; $obj->setNewParent($val, $pos); } } } } } } else { if ($f_val['f_type'] == 50 && !isset($fields[$key])) { // Галочка $obj->__set($key, false); } else { if (isset($fields[$key])) { // Дополнительная проверка для файловых полей if ($f_val['f_type'] > 69 && $f_val['f_type'] < 86) { if (!empty($_FILES['file_obj' . $this->form_name]['tmp_name'][$id][$key])) { // Создаем переменную обманку, чтобы объект сам обработал файл $file = array('name' => $_FILES['file_obj' . $this->form_name]['name'][$id][$key], 'type' => $_FILES['file_obj' . $this->form_name]['type'][$id][$key], 'tmp_name' => $_FILES['file_obj' . $this->form_name]['tmp_name'][$id][$key], 'error' => $_FILES['file_obj' . $this->form_name]['error'][$id][$key], 'size' => $_FILES['file_obj' . $this->form_name]['size'][$id][$key]); $_FILES['file_' . $key] = $file; } } $obj->__set($key, $fields[$key]); } else { if (!empty($fields[$key . '_date']) && isset($fields[$key . '_time'])) { $datetime = $fields[$key . '_date'] . ' ' . $fields[$key . '_time'] . ':00'; $obj->__set($key, $datetime); } } } } } if (!empty($callback) && function_exists($callback)) { $is_ok = call_user_func($callback, $obj, $addit_parram); } else { $is_ok = true; } if ($is_ok) { $is_ok = $obj->save(); } if ($is_ok === false) { // echo $obj->getErrorListText(); system::savePostToSession(); ui::MessageBox(lang::get('TEXT_MESSAGE_ERROR'), $obj->getErrorListText()); //ui::selectErrorFields($obj->getErrorFields()); } unset($obj); } } } } }
static function addEmail($email, $subscriptions, $copyUserData = false) { $email = system::checkVar($email, isEmail); if (!empty($email) && !empty($subscriptions)) { $obj = new ormObject(); $obj->setClass('subscribe_user'); $obj->name = $email; if (!user::isGuest() && $copyUserData) { $obj->second_name = user::get('surname'); $obj->first_name = user::get('name'); $obj->user_id = user::get('id'); } // Указываем на какие подписки подписать while (list($key, $val) = each($subscriptions)) { $obj->setNewParent($val); } // Сохраняем изменения $sid = $obj->save(); if ($obj->issetErrors(29)) { // Если указанный e-mail уже существует, пытаемся найти его и подписать на рассылки. $sel = new ormSelect('subscribe_user'); $sel->where('name', '=', $email); $sel->limit(1); if ($obj = $sel->getObject()) { if (!user::isGuest() && $copyUserData) { $obj->second_name = user::get('surname'); $obj->first_name = user::get('name'); $obj->user_id = user::get('id'); } reset($subscriptions); while (list($key, $val) = each($subscriptions)) { $obj->setNewParent($val); } $sid = $obj->save(); } } return $sid; } }