Beispiel #1
0
 private function handleWebleadFormSubmission(X2Model $model, $extractedParams)
 {
     $newRecord = $model->isNewRecord;
     if (isset($_POST['Contacts'])) {
         $model->createEvent = false;
         $model->setX2Fields($_POST['Contacts'], true);
         // Extra sanitizing
         $p = Fields::getPurifier();
         foreach ($model->attributes as $name => $value) {
             if ($name != $model->primaryKey() && !empty($value)) {
                 $model->{$name} = $p->purify($value);
             }
         }
         $now = time();
         $model->visibility = 1;
         $model->validate(null, false);
         if (!$model->hasErrors()) {
             $model->lastUpdated = $now;
             $model->updatedBy = 'admin';
             if ($model->asa('X2DuplicateBehavior') && $model->checkForDuplicates()) {
                 $duplicates = $model->getDuplicates();
                 $oldest = $duplicates[0];
                 $fields = $model->getFields(true);
                 foreach ($fields as $field) {
                     if (!in_array($field->fieldName, $model->X2MergeableBehavior->restrictedFields) && !is_null($model->{$field->fieldName})) {
                         if ($field->type === 'text' && !empty($oldest->{$field->fieldName})) {
                             $oldest->{$field->fieldName} .= "\n--\n" . $model->{$field->fieldName};
                         } else {
                             $oldest->{$field->fieldName} = $model->{$field->fieldName};
                         }
                     }
                 }
                 $model = $oldest;
                 $newRecord = $model->isNewRecord;
             }
             if ($newRecord) {
                 $model->createDate = $now;
                 $model->assignedTo = $this->controller->getNextAssignee();
             }
             $success = $model->save();
             //TODO: upload profile picture url from webleadfb
             if ($success) {
                 if ($extractedParams['generateLead']) {
                     self::generateLead($model, $extractedParams['leadSource']);
                 }
                 if ($extractedParams['generateAccount']) {
                     self::generateAccount($model);
                 }
                 self::addTags($model);
                 $tags = !isset($_POST['tags']) || empty($_POST['tags']) ? array() : explode(',', $_POST['tags']);
                 if ($newRecord) {
                     X2Flow::trigger('WebleadTrigger', array('model' => $model, 'tags' => $tags));
                 }
                 //use the submitted info to create an action
                 Actions::associateAction($model, array('actionDescription' => Yii::t('contacts', 'Web Lead') . "\n\n" . Yii::t('contacts', 'Name') . ': ' . CHtml::decode($model->firstName) . " " . CHtml::decode($model->lastName) . "\n" . Yii::t('contacts', 'Email') . ": " . CHtml::decode($model->email) . "\n" . Yii::t('contacts', 'Phone') . ": " . CHtml::decode($model->phone) . "\n" . Yii::t('contacts', 'Background Info') . ": " . CHtml::decode($model->backgroundInfo), 'type' => 'note'));
                 // create a notification if the record is assigned to someone
                 $event = new Events();
                 $event->associationType = 'Contacts';
                 $event->associationId = $model->id;
                 $event->user = $model->assignedTo;
                 $event->type = 'weblead_create';
                 $event->save();
                 if ($model->assignedTo != 'Anyone' && $model->assignedTo != '') {
                     $notif = new Notification();
                     $notif->user = $model->assignedTo;
                     $notif->createdBy = 'API';
                     $notif->createDate = time();
                     $notif->type = 'weblead';
                     $notif->modelType = 'Contacts';
                     $notif->modelId = $model->id;
                     $notif->save();
                     $profile = Profile::model()->findByAttributes(array('username' => $model->assignedTo));
                     /* send user that's assigned to this weblead an email if the user's email
                        address is set and this weblead has a user email template */
                     if ($profile !== null && !empty($profile->emailAddress)) {
                         $subject = Yii::t('marketing', 'New Web Lead');
                         $message = Yii::t('marketing', 'A new web lead has been assigned to you: ') . CHtml::link($model->firstName . ' ' . $model->lastName, array('/contacts/contacts/view', 'id' => $model->id)) . '.';
                         $address = array('to' => array(array('', $profile->emailAddress)));
                         $emailFrom = Credentials::model()->getDefaultUserAccount(Credentials::$sysUseId['systemNotificationEmail'], 'email');
                         if ($emailFrom == Credentials::LEGACY_ID) {
                             $emailFrom = array('name' => $profile->fullName, 'address' => $profile->emailAddress);
                         }
                         $status = $this->controller->sendUserEmail($address, $subject, $message, null, $emailFrom);
                     }
                 }
             } else {
                 $errMsg = 'Error: WebListenerAction.php: model failed to save';
                 /**/
                 AuxLib::debugLog($errMsg);
                 Yii::log($errMsg, '', 'application.debug');
             }
             $this->controller->renderPartial('application.components.views.webFormSubmit', array('type' => 'weblead', 'redirectUrl' => $extractedParams['redirectUrl']));
             Yii::app()->end();
             // success!
         }
     }
     $sanitizedGetParams = self::sanitizeGetParams();
     $this->controller->renderPartial('application.components.views.webForm', array_merge(array('type' => 'weblead'), $sanitizedGetParams));
 }