예제 #1
0
 public function actionPublisherCreate()
 {
     if (isset($_POST['SelectedTab'], $_POST['Actions']) && (!Yii::app()->user->isGuest || Yii::app()->user->checkAccess($_POST['Actions']['associationType'] . 'View'))) {
         Yii::app()->clientScript->scriptMap['*.css'] = false;
         // if association name is sent without id, try to lookup the record by name and type
         if (isset($_POST['calendarEventTab']) && $_POST['calendarEventTab'] && isset($_POST['Actions']['associationName']) && empty($_POST['Actions']['associationId'])) {
             $associatedModel = X2Model::getModelOfTypeWithName($_POST['Actions']['associationType'], $_POST['Actions']['associationName']);
             if ($associatedModel) {
                 $_POST['Actions']['associationId'] = $associatedModel->id;
             } else {
                 echo CJSON::encode(array('error' => Yii::t('actions', 'Invalid association name')));
                 Yii::app()->end();
             }
         }
         if (!Yii::app()->user->isGuest) {
             $model = new Actions();
         } else {
             $model = new Actions('guestCreate');
             $model->verifyCode = $_POST['Actions']['verifyCode'];
         }
         $model->setX2Fields($_POST['Actions']);
         // format dates,
         if (isset($_POST[get_class($model)]['dueDate'])) {
             $model->dueDate = Formatter::parseDateTime($_POST[get_class($model)]['dueDate']);
         }
         if ($_POST['SelectedTab'] == 'new-event' || $_POST['SelectedTab'] == 'new-small-calendar-event') {
             $model->disableBehavior('changelog');
             $event = new Events();
             $event->type = 'calendar_event';
             $event->visibility = $model->visibility;
             $event->associationType = 'Actions';
             $event->timestamp = $model->dueDate;
             $model->type = 'event';
             if ($model->completeDate) {
                 $model->completeDate = Formatter::parseDateTime($model->completeDate);
             } else {
                 $model->completeDate = $model->dueDate;
             }
         }
         // format association
         if ($model->associationId == '') {
             $model->associationId = 0;
         }
         $association = $this->getAssociation($model->associationType, $model->associationId);
         if ($association) {
             $model->associationName = $association->name;
             if ($association->hasAttribute('lastActivity')) {
                 $association->lastActivity = time();
                 $association->update(array('lastActivity'));
                 X2Flow::trigger('RecordUpdateTrigger', array('model' => $association));
             }
         } else {
             $model->associationName = 'none';
         }
         if ($model->associationName == 'None' && $model->associationType != 'none') {
             $model->associationName = ucfirst($model->associationType);
         }
         if (in_array($_POST['SelectedTab'], array('log-a-call', 'new-comment', 'log-time-spent'))) {
             // Set the complete date accordingly:
             if (!empty($_POST[get_class($model)]['completeDate'])) {
                 $model->completeDate = Formatter::parseDateTime($_POST[get_class($model)]['completeDate']);
             }
             foreach (array('dueDate', 'completeDate') as $attr) {
                 if (empty($model->{$attr})) {
                     $model->{$attr} = time();
                 }
             }
             if ($model->dueDate > $model->completeDate) {
                 // User specified a negative time range! Let's say that the
                 // starting time is equal to when it ended (which is earlier)
                 $model->dueDate = $model->completeDate;
             }
             $model->complete = 'Yes';
             $model->visibility = '1';
             $model->assignedTo = Yii::app()->user->getName();
             $model->completedBy = Yii::app()->user->getName();
             if ($_POST['SelectedTab'] == 'log-a-call') {
                 $model->type = 'call';
             } elseif ($_POST['SelectedTab'] == 'log-time-spent') {
                 $model->type = 'time';
             } else {
                 $model->type = 'note';
             }
         }
         if (in_array($model->type, array('call', 'time', 'note'))) {
             $event = new Events();
             $event->associationType = 'Actions';
             $event->type = 'record_create';
             $event->user = Yii::app()->user->getName();
             $event->visibility = $model->visibility;
             $event->subtype = $model->type;
         }
         // save model
         $model->createDate = time();
         if (!empty($model->type)) {
             $model->disableBehavior('changelog');
         }
         if ($model->save()) {
             // action saved to database *
             if (isset($_POST['Actions']['reminder']) && $_POST['Actions']['reminder']) {
                 $model->createNotifications($_POST['notificationUsers'], $model->dueDate - $_POST['notificationTime'] * 60, 'action_reminder');
             }
             X2Model::updateTimerTotals($model->associationId, X2Model::getModelName($model->associationType));
             if (isset($event)) {
                 $event->associationId = $model->id;
                 $event->save();
             }
             $model->syncGoogleCalendar('create', true);
         } else {
             if ($model->hasErrors('verifyCode')) {
                 echo CJSON::encode(array('error' => $model->getError('verifyCode')));
                 Yii::app()->end();
             }
         }
         echo CJSON::encode(array('success'));
         Yii::app()->end();
     } else {
         throw new CHttpException(400, Yii::t('app', 'Bad request'));
     }
 }