public function save()
 {
     parent::save();
     /**
      * У сотрудников, которых нет приказов по
      * ГАК в году комиссии автоматически устанавливается
      * приказ от комиссии
      */
     if ($this->order_id !== 0) {
         $persons = new CArrayList();
         foreach ($this->members->getItems() as $person) {
             $persons->add($person->getId(), $person);
         }
         if (!is_null($this->manager)) {
             $persons->add($this->manager->getId(), $this->manager);
         }
         foreach ($persons->getItems() as $person) {
             if (is_null($person->getSABOrdersByYear($this->year))) {
                 $ar = new CActiveRecord(array("id" => null, "person_id" => $person->getId(), "year_id" => $this->year->getId(), "order_id" => $this->order_id));
                 $ar->setTable(TABLE_SAB_PERSON_ORDERS);
                 $ar->insert();
             }
         }
     }
 }
 public function save()
 {
     $group = $this->group;
     $roles = array();
     if (array_key_exists("roles", $group)) {
         $roles = $group["roles"];
         unset($group["roles"]);
     }
     $groupObj = new CUserGroup();
     $groupObj->setAttributes($group);
     /**
      * Удаляем старые задачи группы и пользователей
      */
     foreach (CActiveRecordProvider::getWithCondition(TABLE_USER_GROUP_HAS_ROLES, "user_group_id = " . $groupObj->getId())->getItems() as $ar) {
         $ar->remove();
     }
     $groupObj->save();
     /**
      * Создаем новые задачи группы и пользователей
      */
     foreach ($roles as $role => $level) {
         if ($level != 0) {
             $ar = new CActiveRecord(array("id" => null, "user_group_id" => $groupObj->getId(), "task_id" => $role, "task_rights_id" => $level));
             $ar->setTable(TABLE_USER_GROUP_HAS_ROLES);
             $ar->insert();
         }
     }
 }
 public function save()
 {
     $this->grant->save();
     /**
      * Работа с участниками
      */
     $members = array();
     if (array_key_exists("members", $this->_fields)) {
         $members = $this->_fields["members"];
     }
     /**
      * Делаем руководителя тоже участником
      */
     if ($this->grant->manager_id != "0") {
         $members[] = $this->grant->manager_id;
     }
     /**
      * Удаляем старых участников
      */
     foreach (CActiveRecordProvider::getWithCondition(TABLE_GRANT_MEMBERS, "grant_id= " . $this->grant->getId())->getItems() as $ar) {
         $ar->remove();
     }
     /**
      * Добавляем новых
      */
     foreach ($members as $member) {
         $ar = new CActiveRecord(array("id" => null, "grant_id" => $this->grant->getId(), "person_id" => $member));
         $ar->setTable(TABLE_GRANT_MEMBERS);
         $ar->insert();
     }
 }
 public function save()
 {
     $commission = $this->commission;
     $members = array();
     if (array_key_exists("members", $commission)) {
         $members = $commission["members"];
         unset($commission["members"]);
     }
     $commObj = new CDiplomPreviewComission();
     $commObj->setAttributes($commission);
     $commObj->save();
     $this->commission = $commObj;
     foreach (CActiveRecordProvider::getWithCondition(TABLE_DIPLOM_PREVIEW_MEMBERS, "comm_id=" . $commObj->getId())->getItems() as $ar) {
         $ar->remove();
     }
     foreach ($members as $m) {
         if ($m !== 0) {
             $ar = new CActiveRecord(array("comm_id" => $commObj->getId(), "kadri_id" => $m, "id" => null));
             $ar->setTable(TABLE_DIPLOM_PREVIEW_MEMBERS);
             $ar->insert();
         }
     }
 }
 public function save()
 {
     $personArr = $this->person;
     /**
      * Сохраняем сотрудника
      */
     $this->person->save();
     /**
      * Удаляем старые типы участия на кафедре
      */
     foreach (CActiveRecordProvider::getWithCondition(TABLE_PERSON_BY_TYPES, "kadri_id=" . $this->person->getId())->getItems() as $ar) {
         $ar->remove();
     }
     /**
      * Сохраняем новые типы участия на кафедре
      */
     foreach ($this->_types as $type) {
         if ($type != "" && $type != "0") {
             $ar = new CActiveRecord(array("kadri_id" => $this->person->getId(), "person_type_id" => $type, "id" => null));
             $ar->setTable(TABLE_PERSON_BY_TYPES);
             $ar->insert();
         }
     }
 }
Beispiel #6
0
 public function insert($attributes = null)
 {
     $succeeded = parent::insert($attributes);
     // Alter and save the nameId field:
     if ($succeeded && self::$autoPopulateFields) {
         $this->updateNameId(true);
         if ($this->hasEventHandler('onAfterInsert')) {
             $this->onAfterInsert(new CEvent($this));
         }
     }
     return $succeeded;
 }
Beispiel #7
0
 public function insert($attributes = null)
 {
     $this->createDate = time();
     return parent::insert($attributes);
 }
 /**
  * Обновление модели на основе данных, пришедших из json-контроллера
  *
  * @param $jsonString
  * @return array
  */
 public function updateWithJsonString($jsonString)
 {
     // данные модели
     $modelData = json_decode($jsonString, true);
     // убираем служебную инфу
     if (array_key_exists("_translation", $modelData)) {
         unset($modelData["_translation"]);
     }
     // попробуем сохранить данные, которые находятся в отношениях
     // многие-ко-многим
     foreach ($this->relations() as $field => $properties) {
         if ($properties["relationPower"] == RELATION_MANY_TO_MANY) {
             if (array_key_exists($field, $modelData)) {
                 $data = $modelData[$field];
                 // уберем их из модели
                 unset($modelData[$field]);
                 // уберем уже имеющиеся данные из связанной таблицы
                 /**
                  * @var CActiveRecord $ar
                  */
                 if (array_key_exists("id", $modelData)) {
                     foreach (CActiveRecordProvider::getWithCondition($properties["joinTable"], trim(CUtils::strLeft($properties["leftCondition"], "=")) . "=" . $modelData["id"])->getItems() as $ar) {
                         $ar->remove();
                     }
                 }
                 // добавим туда новые данные
                 foreach ($data as $value) {
                     $ar = new CActiveRecord(array($properties["rightKey"] => $value["id"], trim(CUtils::strLeft($properties["leftCondition"], "=")) => $modelData["id"], "id" => null));
                     $ar->setTable($properties["joinTable"]);
                     $ar->insert();
                 }
             }
         } elseif ($properties["relationPower"] == RELATION_HAS_MANY) {
             if (array_key_exists($field, $modelData)) {
                 $data = $modelData[$field];
                 // уберем данные из модели
                 unset($modelData[$field]);
                 // если в свойствах отношения указан целевой класс, то
                 // будем обновлять автоматом
                 if (array_key_exists("targetClass", $properties)) {
                     // получим список записей, которые уже есть
                     $targetClass = $properties["targetClass"];
                     /**
                      * @var CActiveModel $targetObj
                      */
                     $targetObj = new $targetClass();
                     $docsToRemove = array();
                     // его может не быть, если запись новая
                     if (array_key_exists("id", $modelData)) {
                         $items = CActiveRecordProvider::getWithCondition($targetObj->getTable(), trim(CUtils::strLeft($properties["storageCondition"], "=")) . "=" . $modelData["id"]);
                         /**
                          * @var CActiveRecord $item
                          */
                         foreach ($items->getItems() as $item) {
                             $docsToRemove[] = $item->getId();
                         }
                     }
                     /**
                      * @var string $item
                      */
                     foreach ($data as $item) {
                         // полученные данные обратно в json, чтобы
                         // можно было все сделать одинаково рекурсивно
                         $childJsonData = json_encode($item);
                         // создадим экземпляр целевого класса
                         /**
                          * @var CActiveModel $targetObj
                          */
                         $targetObj = new $targetClass();
                         $targetObj->updateWithJsonString($childJsonData);
                         $targetObj->save();
                         // уберем из списка добавленную запись
                         if (in_array($targetObj->getId(), $docsToRemove)) {
                             unset($docsToRemove[array_search($targetObj->getId(), $docsToRemove)]);
                         }
                     }
                     // удалим элементы из списка на удаление - мы
                     // их удалили и вместе с другими данными с клиента
                     // они не пришли
                     if (count($docsToRemove) > 0) {
                         CActiveRecordProvider::removeWithCondition($targetObj->getTable(), "id in (" . implode(", ", $docsToRemove) . ")");
                     }
                 }
             }
         }
     }
     // данные обратно в модель
     foreach ($modelData as $key => $value) {
         $this->{$key} = $value;
     }
     return $modelData;
 }
 /**
  * Сохранение данных поручим модели чтобы
  * контроллер не нагружать
  */
 public function save()
 {
     /**
      * Извлечем все данные из текущей модели.
      * Мы будем сохранять их по отдельности
      */
     $user = $this->user;
     $roles = array();
     $groups = array();
     if (array_key_exists("groups", $user)) {
         $groups = $user["groups"];
         unset($user["groups"]);
     }
     if (array_key_exists("roles", $user)) {
         $roles = $user["roles"];
         unset($user["roles"]);
     }
     $userObj = new CUser();
     $userObj->setAttributes($user);
     if ($this->changePassword == 1) {
         if ($this->newPassword !== "") {
             $userObj->password = md5($this->newPassword);
         }
     }
     $userObj->save();
     $this->user = $userObj;
     /**
      * Удаляем старые упоминания о группах, в которых
      * пользователь состоял
      */
     foreach (CActiveRecordProvider::getWithCondition(TABLE_USER_IN_GROUPS, "user_id = " . $userObj->getId())->getItems() as $ar) {
         $ar->remove();
     }
     foreach ($groups as $group) {
         $ar = new CActiveRecord(array("user_id" => $userObj->getId(), "group_id" => $group, "id" => null));
         $ar->setTable(TABLE_USER_IN_GROUPS);
         $ar->insert();
     }
     /**
     * Исключаем из личных прав пользователей те, которые совпадают с правами
     * на задачу
     *
     * 08.11.2014
     * Больше так не делаем - пусть система работает тривиально. Если это
     * личные права, то они до конца личные
     * 
             foreach ($userObj->getGroups()->getItems() as $group) {
        foreach ($group->getRoles()->getItems() as $role) {
            if (array_key_exists($role->getId(), $roles)) {
                if ($role->level == $roles[$role->getId()]) {
                    unset($roles[$role->getId()]);
                }
            }
        }
             }
     */
     /**
      * Удаляем старые и сохраняем отличающиеся
      */
     foreach (CActiveRecordProvider::getWithCondition(TABLE_USER_HAS_ROLES, "user_id = " . $userObj->getId())->getItems() as $ar) {
         $ar->remove();
     }
     /**
      * Сохраняем личные права пользователя
      */
     foreach ($roles as $role => $level) {
         /**
          * Можно индивидуально запрещать доступ к задаче
          */
         // if ($level != 0) {
         $ar = new CActiveRecord(array("id" => null, "user_id" => $userObj->getId(), "task_id" => $role, "task_rights_id" => $level));
         $ar->setTable(TABLE_USER_HAS_ROLES);
         $ar->insert();
         // }
     }
 }
Beispiel #10
0
 public function insert($attributes = null)
 {
     $this->id = EncryptUtil::secureUniqueIdHash64();
     $this->requested = time();
     $this->getIpAddr();
     return parent::insert($attributes);
 }