コード例 #1
0
 /**
  * Saves the model.
  *
  * @param Calendar2_Models_Calendar2 $model  The model object
  * @param Array                      $params The request's parameters. All
  *                                           values taken from this array
  *                                           will be validated.
  *
  * @return int The id of the (new) model object.
  */
 private function _saveAction($model, $params)
 {
     $participants = array_key_exists('newParticipants', $params) ? $params['newParticipants'] : array();
     $location = trim($params['location']);
     $start = $params['start'];
     $end = $params['end'];
     $summary = trim($params['summary']);
     $description = trim($params['description']);
     $comments = trim($params['comments']);
     $visibility = $params['visibility'];
     $rrule = array_key_exists('rrule', $params) ? trim($params['rrule']) : null;
     $multiple = array_key_exists('multipleEvents', $params) ? $params['multipleEvents'] : 'true';
     if (!is_array($participants)) {
         throw new Zend_Controller_Action_Exception("Invalid newParticipants '{$participants}'", 400);
     }
     foreach ($participants as $p) {
         if (!Cleaner::validate('int', $p)) {
             //TODO: Check if the participant exists? Many db calls, little
             //      gain...
             throw new Zend_Controller_Action_Exception("Invalid participant {$p}", 400);
         }
     }
     if (!self::_validateTimestamp($start)) {
         throw new Zend_Controller_Action_Exception("Invalid start '{$start}'", 400);
     }
     if (!self::_validateTimestamp($end)) {
         throw new Zend_Controller_Action_Exception("Invalid end '{$end}'", 400);
     }
     if (!Cleaner::validate('int', $visibility) || !Calendar2_Models_Calendar2::isValidVisibility((int) $visibility)) {
         throw new Zend_Controller_Action_Exception("Invalid visibility '{$visibility}'", 400);
     }
     $visibility = (int) $visibility;
     if (!Cleaner::validate('int', $params['userId'])) {
         throw new Zend_Controller_Action_Exception("Invalid userId " . $params['userId'], 400);
     }
     $params['userId'] = (int) $params['userId'];
     if (!Cleaner::validate('boolean', $multiple)) {
         throw new Zend_Controller_Action_Exception("Invalid multiple '{$multiple}'", 400);
     }
     $multiple = 'true' == strtolower($multiple);
     $model->ownerId = $params['userId'];
     $model->setParticipants($participants);
     if ($model->id && ($model->location !== $location || $model->start !== $start || $model->end !== $end)) {
         $model->setParticipantsConfirmationStatuses(Calendar2_Models_Calendar2::STATUS_PENDING);
     }
     $model->summary = $summary;
     $model->description = $description;
     $model->location = $location;
     $model->comments = $comments;
     $model->visibility = $visibility;
     // Using Datetime would be much nicer here.
     // But Phprojekt doesn't really support Datetime yet.
     // (Dates will automatically be converted from Usertime to UTC)
     $model->start = $start;
     $model->end = $end;
     $model->rrule = $rrule;
     if ($multiple) {
         $model->save();
     } else {
         $model->saveSingleEvent();
     }
     return $model->id;
 }