예제 #1
0
 public function updateTask()
 {
     $user = $this->authenticate();
     $emptyrequest = !isset($_GET) && !isset($_POST) || sizeof($_GET) == 0 && sizeof($_POST) == 0;
     $input;
     if (!$emptyrequest) {
         $input = new Validation(array_merge($_GET, $_POST));
         $input->add_rules('task_id', 'required', 'numeric');
         $input->add_rules('task_description', 'length[1,255]');
         $input->add_rules('setting_id', 'numeric');
         $input->add_rules('due_date', 'chars[0,1,2,3,4,5,6,7,8,9,-]');
         $input->add_rules('project_id', 'numeric');
         $validator = new TaskValidation_Model();
         $validator->expectedUser_id = $user->user_id;
         $input->add_callbacks('task_id', array($validator, "validateExists"));
         $input->add_callbacks('task_id', array($validator, "validateUserOwnsTask"));
         if ($input->validate() && isset($input['setting_id']) && $input->setting_id != NULL && $input->setting_id != 0) {
             $setting_validator = new SettingValidation_Model();
             $setting_validator->expectedUser_id = $user->user_id;
             $input->add_callbacks('setting_id', array($setting_validator, "validateExists"));
             $input->add_callbacks('setting_id', array($setting_validator, "validateUserOwnsSetting"));
         }
         if ($input->validate() && isset($input['project_id']) && $input->project_id != NULL) {
             $project_validator = new ProjectValidation_Model();
             $project_validator->expectedUser_id = $user->user_id;
             $input->add_callbacks('project_id', array($project_validator, "validateExists"));
             $input->add_callbacks('project_id', array($project_validator, "validateUserOwnsProject"));
         }
         if ($input->validate() && isset($input->due_date) && $input->due_date != NULL && $input->due_date != "00-00-0000") {
             $pattern = "/^\\d\\d-\\d\\d-\\d\\d\\d\\d\$/";
             if (preg_match($pattern, $input->due_date) == 0) {
                 $input->add_error('due_date', 'invalid format');
             } else {
                 if (!$this->isValidDate($input->due_date)) {
                     $input->add_error('due_date', 'invalid date');
                 }
             }
         }
     } else {
         $input = new Validation(array());
         $input->add_error('task_id', 'required');
     }
     if ($input->validate()) {
         $task = new Task_Model();
         $task->task_id = $input->task_id;
         $task->retrieveInfoFromDB();
         if (isset($input->task_description) && $input->task_description != NULL) {
             $task->task_description = $input->task_description;
         }
         if (isset($input->setting_id) && $input->setting_id != NULL) {
             if ($input->setting_id == 0) {
                 $task->setting_id = NULL;
             } else {
                 $task->setting_id = $input->setting_id;
             }
         }
         //When updating a task, if setting id is not specified, leave it to what it is
         if (isset($input->project_id) && $input->project_id != NULL) {
             $task->project_id = $input->project_id;
         }
         if (isset($input->due_date) && $input->due_date != NULL && $input->due_date != "00-00-0000") {
             $task->due_date = $this->reformat($input->due_date);
         } else {
             if (isset($input->due_date) && $input->due_date != NULL) {
                 $task->due_date = NULL;
                 // if the due_date is 00-00-0000 set it to NULL
                 // otherwise don't update it
             }
         }
         $task->updateInDB();
         Kohana::render($this->encode($task));
     } else {
         //@TODO : make better error messages......
         Kohana::render($this->encode(NULL, $input->errors()));
     }
 }