コード例 #1
0
ファイル: crud.php プロジェクト: vukasins/ocp
 public function save($sys_object_id, $row_id = '')
 {
     $sys_object = new Crud_Models_Object();
     $sys_object->load(intval($sys_object_id));
     $sys_object->loadFieldsForObject();
     if ($sys_object->is_system == 1 && $this->user->role->safe_title != 'administrator') {
         $response = array();
         $response['errors'] = array('Can\'t edit this object');
         echo json_encode($response);
         return;
     }
     if (!$this->user->role->canExecuteAction('can_edit_' . $sys_object->table_name)) {
         $response = array();
         $response['errors'] = array('Can\'t edit this object');
         echo json_encode($response);
         return;
     }
     if ($sys_object->custom_crud_class != '' && new $sys_object->custom_crud_class() instanceof Crud_Interfaces_Crud) {
         echo call_user_func(array(new $sys_object->custom_crud_class(), 'save'), $sys_object_id, $row_id);
     } else {
         $object = new Libraries_Db_Mysql_Model($sys_object->table_name);
         if (!empty($row_id)) {
             $object->load(intval($row_id));
             if (isset($_POST['last_modify']) && $_POST['last_modify'] != $object->last_modify) {
                 $response = array();
                 $response['errors']['general'] = array('Object is already saved by another user!');
                 echo json_encode($response);
                 return;
             }
         }
         $response = array();
         $response['errors'] = array();
         $response['message'] = '';
         foreach ($sys_object->sys_field_list as $field) {
             if ($field->is_hidden == 1) {
                 continue;
             }
             $field->loadValidators();
             $field_value = isset($_POST[$field->field_name]) ? $_POST[$field->field_name] : null;
             if (!empty($field->validators)) {
                 foreach ($field->validators as $validator) {
                     $validator_response = call_user_func(array($validator->class, 'validate'), $field_value);
                     if (!$validator_response) {
                         $response['errors'][] = array('field' => $field->field_name, 'message' => call_user_func(array($validator->class, 'getFalseMessage')));
                         continue 2;
                         // goto next field
                     }
                 }
             }
             $object->{$field->field_name} = $field_value;
         }
         unset($object->data['last_modify']);
         /*
         echo '<pre>'; print_r($_POST); echo '</pre>';
         echo '<pre>'; print_r($object); echo '</pre>'; exit;
         */
         if (empty($response['errors'])) {
             $response['message'] = 'Object is saved';
             Libraries_Event::trigger('beforeCrudSave', $sys_object, $object);
             $object->save();
             $response['id'] = $object->id;
             Libraries_Event::trigger('afterCrudSave', $sys_object, $object);
         }
         echo json_encode($response);
     }
 }