Esempio n. 1
0
 public function actionGetItems($term)
 {
     X2LinkableBehavior::getItems($term);
 }
Esempio n. 2
0
 /**
  * Returns a JSON array of the names of all campaigns filtered by a search term.
  *
  * @return string A JSON array of strings
  */
 public function actionGetItems($modelType)
 {
     $term = $_GET['term'] . '%';
     X2LinkableBehavior::getItems($term);
 }
Esempio n. 3
0
 public function getText(array $params = array(), array $htmlOptions = array())
 {
     $truncated = array_key_exists('truncated', $params) ? $params['truncated'] : false;
     $requireAbsoluteUrl = array_key_exists('requireAbsoluteUrl', $params) ? $params['requireAbsoluteUrl'] : false;
     $text = "";
     $authorText = "";
     if (Yii::app()->user->getName() == $this->user) {
         $authorText = CHtml::link(Yii::t('app', 'You'), $this->profile->url, $htmlOptions);
     } else {
         $authorText = User::getUserLinks($this->user);
     }
     if (!empty($authorText)) {
         $authorText .= " ";
     }
     switch ($this->type) {
         case 'notif':
             $parent = X2Model::model('Notification')->findByPk($this->associationId);
             if (isset($parent)) {
                 $text = $parent->getMessage();
             } else {
                 $text = Yii::t('app', "Notification not found");
             }
             break;
         case 'record_create':
             $actionFlag = false;
             if (class_exists($this->associationType)) {
                 if (count(X2Model::model($this->associationType)->findAllByPk($this->associationId)) > 0) {
                     if ($this->associationType == 'Actions') {
                         $action = X2Model::model('Actions')->findByPk($this->associationId);
                         if (isset($action) && (strcasecmp($action->associationType, 'contacts') === 0 || in_array($action->type, array('call', 'note', 'time')))) {
                             // Special considerations for publisher-created actions, i.e. call,
                             // note, time, and anything associated with a contact
                             $actionFlag = true;
                             // Retrieve the assigned user from the related action
                             $relatedAction = Actions::model()->findByPk($this->associationId);
                             if ($relatedAction) {
                                 $authorText = User::getUserLinks($relatedAction->assignedTo);
                             }
                         }
                     }
                     if ($actionFlag) {
                         $authorText = empty($authorText) ? Yii::t('app', 'Someone') : $authorText;
                         switch ($action->type) {
                             case 'call':
                                 $text = Yii::t('app', '{authorText} logged a call ({duration}) with {modelLink}.', array('{authorText}' => $authorText, '{duration}' => empty($action->dueDate) || empty($action->completeDate) ? Yii::t('app', 'duration unknown') : Formatter::formatTimeInterval($action->dueDate, $action->completeDate, '{hoursMinutes}'), '{modelLink}' => X2Model::getModelLink($action->associationId, ucfirst($action->associationType), $requireAbsoluteUrl)));
                                 break;
                             case 'note':
                                 $text = Yii::t('app', '{authorText} posted a comment on {modelLink}.', array('{authorText}' => $authorText, '{modelLink}' => X2Model::getModelLink($action->associationId, ucfirst($action->associationType), $requireAbsoluteUrl)));
                                 break;
                             case 'time':
                                 $text = Yii::t('app', '{authorText} logged {time} on {modelLink}.', array('{authorText}' => $authorText, '{time}' => Formatter::formatTimeInterval($action->dueDate, $action->dueDate + $action->timeSpent, '{hoursMinutes}'), '{modelLink}' => X2Model::getModelLink($action->associationId, ucfirst($action->associationType))));
                                 break;
                             default:
                                 if (!empty($authorText) && $authorText != Yii::t('app', 'Anyone') && $authorText != Yii::t('app', 'Someone')) {
                                     $text = Yii::t('app', "A new {actionLink} associated with the contact " . "{contactLink} has been assigned to {authorText}", array('{authorText}' => $authorText, '{actionLink}' => $this->renderFrameLink($htmlOptions), '{contactLink}' => X2Model::getModelLink($action->associationId, ucfirst($action->associationType), $requireAbsoluteUrl)));
                                 } else {
                                     $text = Yii::t('app', "A new {actionLink} associated with the contact " . "{contactLink} has been created.", array('{actionLink}' => $this->renderFrameLink($htmlOptions), '{contactLink}' => X2Model::getModelLink($action->associationId, ucfirst($action->associationType), $requireAbsoluteUrl)));
                                 }
                         }
                     } else {
                         if (!empty($authorText)) {
                             $modelLink = X2Model::getModelLink($this->associationId, $this->associationType, $requireAbsoluteUrl);
                             if (isset($action) && $this->user !== $action->assignedTo) {
                                 // Include the assignee if this is for an action assigned to someone other than the creator
                                 $translateText = "created a new {modelName} for {assignee}, {modelLink}";
                             } elseif ($modelLink !== '') {
                                 $translateText = "created a new {modelName}, {modelLink}";
                             } else {
                                 $translateText = "created a new {modelName}";
                             }
                             $text = $authorText . Yii::t('app', $translateText, array('{modelName}' => Events::parseModelName($this->associationType), '{modelLink}' => $modelLink, '{assignee}' => isset($action) ? User::getUserLinks($action->assignedTo) : null));
                         } else {
                             $text = Yii::t('app', "A new {modelName}, {modelLink}, has been created.", array('{modelName}' => Events::parseModelName($this->associationType), '{modelLink}' => X2Model::getModelLink($this->associationId, $this->associationType, $requireAbsoluteUrl)));
                         }
                     }
                 } else {
                     $deletionEvent = X2Model::model('Events')->findByAttributes(array('type' => 'record_deleted', 'associationType' => $this->associationType, 'associationId' => $this->associationId));
                     if (isset($deletionEvent)) {
                         if (!empty($authorText)) {
                             $text = $authorText . Yii::t('app', "created a new {modelName}, {deletionText}. It has been deleted.", array('{modelName}' => Events::parseModelName($this->associationType), '{deletionText}' => $deletionEvent->text));
                         } else {
                             $text = Yii::t('app', "A {modelName}, {deletionText}, was created. It has been deleted.", array('{modelName}' => Events::parseModelName($this->associationType), '{deletionText}' => $deletionEvent->text));
                         }
                     } else {
                         if (!empty($authorText)) {
                             $text = $authorText . Yii::t('app', "created a new {modelName}, but it could not be found.", array('{modelName}' => Events::parseModelName($this->associationType)));
                         } else {
                             $text = Yii::t('app', "A {modelName} was created, but it could not be found.", array('{modelName}' => Events::parseModelName($this->associationType)));
                         }
                     }
                 }
             }
             break;
         case 'weblead_create':
             if (count(X2Model::model($this->associationType)->findAllByPk($this->associationId)) > 0) {
                 $text = Yii::t('app', "A new web lead has come in: {modelLink}", array('{modelLink}' => X2Model::getModelLink($this->associationId, $this->associationType)));
             } else {
                 $deletionEvent = X2Model::model('Events')->findByAttributes(array('type' => 'record_deleted', 'associationType' => $this->associationType, 'associationId' => $this->associationId));
                 if (isset($deletionEvent)) {
                     $text = Yii::t('app', "A new web lead has come in: {deletionText}. It has been deleted.", array('{deletionText}' => $deletionEvent->text));
                 } else {
                     $text = Yii::t('app', "A new web lead has come in, but it could not be found.");
                 }
             }
             break;
         case 'record_deleted':
             if (class_exists($this->associationType)) {
                 if (Yii::app()->params->profile !== null && Yii::app()->params->profile->language != 'en' && !empty(Yii::app()->params->profile->language) || Yii::app()->params->profile === null && Yii::app()->language !== 'en' || strpos($this->associationType, 'A') !== 0 && strpos($this->associationType, 'E') !== 0 && strpos($this->associationType, 'I') !== 0 && strpos($this->associationType, 'O') !== 0 && strpos($this->associationType, 'U') !== 0) {
                     if (!empty($authorText)) {
                         $text = $authorText . Yii::t('app', "deleted a {modelType}, {text}", array('{modelType}' => Events::parseModelName($this->associationType), '{text}' => $this->text));
                     } else {
                         $text = Yii::t('app', "A {modelType}, {text}, was deleted", array('{modelType}' => Events::parseModelName($this->associationType), '{text}' => $this->text));
                     }
                 } else {
                     if (!empty($authorText)) {
                         $text = $authorText . Yii::t('app', "deleted an {modelType}, {text}.", array('{modelType}' => Events::parseModelName($this->associationType), '{text}' => $this->text));
                     } else {
                         $text = Yii::t('app', "An {modelType}, {text}, was deleted.", array('{modelType}' => Events::parseModelName($this->associationType), '{text}' => $this->text));
                     }
                 }
             }
             break;
         case 'workflow_start':
             $action = X2Model::model('Actions')->findByPk($this->associationId);
             if (isset($action)) {
                 $record = X2Model::model(ucfirst($action->associationType))->findByPk($action->associationId);
                 if (isset($record)) {
                     if (isset($action->workflowStage)) {
                         $text = $authorText . Yii::t('app', 'started the process stage "{stage}" for the {modelName} {modelLink}', array('{stage}' => $action->workflowStage->name, '{modelName}' => Events::parseModelName($action->associationType), '{modelLink}' => X2Model::getModelLink($action->associationId, $action->associationType)));
                     } else {
                         $text = $authorText . Yii::t('app', "started a process stage for the {modelName} {modelLink}, but the process stage could not be found.", array('{modelName}' => Events::parseModelName($action->associationType), '{modelLink}' => X2Model::getModelLink($action->associationId, $action->associationType)));
                     }
                 } else {
                     $text = $authorText . Yii::t('app', "started a process stage, but the associated {modelName} was not found.", array('{modelName}' => Events::parseModelName($action->associationType)));
                 }
             } else {
                 $text = $authorText . Yii::t('app', "started a process stage, but the process record could not be found.");
             }
             break;
         case 'workflow_complete':
             $action = X2Model::model('Actions')->findByPk($this->associationId);
             if (isset($action)) {
                 $record = X2Model::model(ucfirst($action->associationType))->findByPk($action->associationId);
                 if (isset($record)) {
                     if (isset($action->workflowStage)) {
                         $text = $authorText . Yii::t('app', 'completed the process stage "{stageName}" for the {modelName} {modelLink}', array('{stageName}' => $action->workflowStage->name, '{modelName}' => Events::parseModelName($action->associationType), '{modelLink}' => X2Model::getModelLink($action->associationId, $action->associationType)));
                     } else {
                         $text = $authorText . Yii::t('app', "completed a process stage for the {modelName} {modelLink}, but the process stage could not be found.", array('{modelName}' => Events::parseModelName($action->associationType), '{modelLink}' => X2Model::getModelLink($action->associationId, $action->associationType)));
                     }
                 } else {
                     $text = $authorText . Yii::t('app', "completed a process stage, but the associated {modelName} was not found.", array('{modelName}' => Events::parseModelName($action->associationType)));
                 }
             } else {
                 $text = $authorText . Yii::t('app', "completed a process stage, but the process record could not be found.");
             }
             break;
         case 'workflow_revert':
             $action = X2Model::model('Actions')->findByPk($this->associationId);
             if (isset($action)) {
                 $record = X2Model::model(ucfirst($action->associationType))->findByPk($action->associationId);
                 if (isset($record)) {
                     if (isset($action->workflowStage)) {
                         $text = $authorText . Yii::t('app', 'reverted the process stage "{stageName}" for the {modelName} {modelLink}', array('{stageName}' => $action->workflowStage->name, '{modelName}' => Events::parseModelName($action->associationType), '{modelLink}' => X2Model::getModelLink($action->associationId, $action->associationType)));
                     } else {
                         $text = $authorText . Yii::t('app', "reverted a process stage for the {modelName} {modelLink}, but the process stage could not be found.", array('{modelName}' => Events::parseModelName($action->associationType), '{modelLink}' => X2Model::getModelLink($action->associationId, $action->associationType)));
                     }
                 } else {
                     $text = $authorText . Yii::t('app', "reverted a process stage, but the associated {modelName} was not found.", array('{modelName}' => Events::parseModelName($action->associationType)));
                 }
             } else {
                 $text = $authorText . Yii::t('app', "reverted a process stage, but the process record could not be found.");
             }
             break;
         case 'structured-feed':
         case 'feed':
             if (Yii::app()->user->getName() == $this->user) {
                 $author = CHtml::link(Yii::t('app', 'You'), Yii::app()->controller->createAbsoluteUrl('/profile/view', array('id' => Yii::app()->user->getId())), $htmlOptions) . " ";
             } else {
                 $author = User::getUserLinks($this->user);
             }
             $modifier = '';
             $recipient = $this->getRecipient();
             if ($recipient) {
                 $modifier = ' » ';
             }
             $text = $author . $modifier . $recipient . ": " . ($truncated ? strip_tags(Formatter::convertLineBreaks(x2base::convertUrls($this->text), true, true), '<a></a>') : $this->text);
             break;
         case 'email_sent':
             if (class_exists($this->associationType)) {
                 $model = X2Model::model($this->associationType)->findByPk($this->associationId);
                 if (!empty($model)) {
                     switch ($this->subtype) {
                         case 'quote':
                             $text = $authorText . Yii::t('app', "issued the {transModelName} \"{modelLink}\" via email", array('{transModelName}' => Yii::t('quotes', 'quote'), '{modelLink}' => X2Model::getModelLink($this->associationId, $this->associationType)));
                             break;
                         case 'invoice':
                             $text = $authorText . Yii::t('app', "issued the {transModelName} \"{modelLink}\" via email", array('{transModelName}' => Yii::t('quotes', 'invoice'), '{modelLink}' => X2Model::getModelLink($this->associationId, $this->associationType)));
                             break;
                         default:
                             $text = $authorText . Yii::t('app', "sent an email to the {transModelName} {modelLink}", array('{transModelName}' => Events::parseModelName($this->associationType), '{modelLink}' => X2Model::getModelLink($this->associationId, $this->associationType)));
                             break;
                     }
                 } else {
                     $deletionEvent = X2Model::model('Events')->findByAttributes(array('type' => 'record_deleted', 'associationType' => $this->associationType, 'associationId' => $this->associationId));
                     switch ($this->subtype) {
                         case 'quote':
                             if (isset($deletionEvent)) {
                                 $text = $authorText . Yii::t('app', "issued a quote by email, but that record has been deleted.");
                             } else {
                                 $text = $authorText . Yii::t('app', "issued a quote by email, but that record could not be found.");
                             }
                             break;
                         case 'invoice':
                             if (isset($deletionEvent)) {
                                 $text = $authorText . Yii::t('app', "issued an invoice by email, but that record has been deleted.");
                             } else {
                                 $text = $authorText . Yii::t('app', "issued an invoice by email, but that record could not be found.");
                             }
                             break;
                         default:
                             if (isset($deletionEvent)) {
                                 $text = $authorText . Yii::t('app', "sent an email to a {transModelName}, but that record has been deleted.", array('{transModelName}' => Events::parseModelName($this->associationType)));
                             } else {
                                 $text = $authorText . Yii::t('app', "sent an email to a {transModelName}, but that record could not be found.", array('{transModelName}' => Events::parseModelName($this->associationType)));
                             }
                             break;
                     }
                 }
             }
             break;
         case 'email_opened':
             switch ($this->subtype) {
                 case 'quote':
                     $emailType = Yii::t('app', 'a quote email');
                     break;
                 case 'invoice':
                     $emailType = Yii::t('app', 'an invoice email');
                     break;
                 default:
                     $emailType = Yii::t('app', 'an email');
                     break;
             }
             if (X2Model::getModelName($this->associationType) && count(X2Model::model($this->associationType)->findAllByPk($this->associationId)) > 0) {
                 $text = X2Model::getModelLink($this->associationId, $this->associationType) . Yii::t('app', ' has opened {emailType}!', array('{emailType}' => $emailType, '{modelLink}' => X2Model::getModelLink($this->associationId, $this->associationType)));
             } else {
                 $text = Yii::t('app', "A contact has opened {emailType}, but that contact cannot be found.", array('{emailType}' => $emailType));
             }
             break;
         case 'email_clicked':
             if (count(X2Model::model($this->associationType)->findAllByPk($this->associationId)) > 0) {
                 $text = X2Model::getModelLink($this->associationId, $this->associationType) . Yii::t('app', ' opened a link in an email campaign and is visiting your website!', array('{modelLink}' => X2Model::getModelLink($this->associationId, $this->associationType)));
             } else {
                 $text = Yii::t('app', "A contact has opened a link in an email campaign, but that contact cannot be found.");
             }
             break;
         case 'web_activity':
             if (count(X2Model::model($this->associationType)->findAllByPk($this->associationId)) > 0) {
                 $text = "";
                 $text .= X2Model::getModelLink($this->associationId, $this->associationType) . " " . Yii::t('app', "is currently on your website!");
             } else {
                 $text = Yii::t('app', "A contact was on your website, but that contact cannot be found.");
             }
             break;
         case 'case_escalated':
             if (count(X2Model::model($this->associationType)->findAllByPk($this->associationId)) > 0) {
                 $case = X2Model::model($this->associationType)->findByPk($this->associationId);
                 $text = $authorText . Yii::t('app', "escalated service case {modelLink} to {userLink}", array('{modelLink}' => X2Model::getModelLink($this->associationId, $this->associationType), '{userLink}' => User::getUserLinks($case->escalatedTo)));
             } else {
                 $text = $authorText . Yii::t('app', "escalated a service case but that case could not be found.");
             }
             break;
         case 'calendar_event':
             $action = X2Model::model('Actions')->findByPk($this->associationId);
             if (!Yii::app()->params->isMobileApp || X2LinkableBehavior::isMobileLinkableRecordType('Calendar')) {
                 $calendarText = CHtml::link(Yii::t('calendar', 'Calendar'), Yii::app()->controller->createAbsoluteUrl('/calendar/calendar/index'), $htmlOptions);
             } else {
                 $calendarText = Yii::t('calendar', 'Calendar');
             }
             if (isset($action)) {
                 $text = Yii::t('app', "{calendarText} event: {actionDescription}", array('{calendarText}' => $calendarText, '{actionDescription}' => CHtml::encode($action->actionDescription)));
             } else {
                 $text = Yii::t('app', "{calendarText} event: event not found.", array('{calendarText}' => $calendarText));
             }
             break;
         case 'action_reminder':
             $action = X2Model::model('Actions')->findByPk($this->associationId);
             if (isset($action)) {
                 $text = Yii::t('app', "Reminder! The following {action} is due now: {transModelLink}", array('{transModelLink}' => X2Model::getModelLink($this->associationId, $this->associationType), '{action}' => strtolower(Modules::displayName(false, 'Actions'))));
             } else {
                 $text = Yii::t('app', "An {action} is due now, but the record could not be found.", array('{action}' => strtolower(Modules::displayName(false, 'Actions'))));
             }
             break;
         case 'action_complete':
             $action = X2Model::model('Actions')->findByPk($this->associationId);
             if (isset($action)) {
                 $text = $authorText . Yii::t('app', "completed the following {action}: {actionDescription}", array('{actionDescription}' => X2Model::getModelLink($this->associationId, $this->associationType, $requireAbsoluteUrl), '{action}' => strtolower(Modules::displayName(false, 'Actions'))));
             } else {
                 $text = $authorText . Yii::t('app', "completed an {action}, but the record could not be found.", array('{action}' => strtolower(Modules::displayName(false, 'Actions'))));
             }
             break;
         case 'doc_update':
             $text = $authorText . Yii::t('app', 'updated a document, {docLink}', array('{docLink}' => X2Model::getModelLink($this->associationId, $this->associationType)));
             break;
         case 'email_from':
             if (class_exists($this->associationType)) {
                 if (count(X2Model::model($this->associationType)->findAllByPk($this->associationId)) > 0) {
                     $email = Yii::t('app', 'email');
                     if ($this->associationType === 'Actions' && ($this->subtype = 'email')) {
                         $action = X2Model::model('Actions')->findByPk($this->associationId);
                         if ($action) {
                             $multiAssociations = $action->getMultiassociations();
                             if (isset($multiAssociations['Contacts'])) {
                                 // Link to the first multiassociated Contact
                                 $contact = $multiAssociations['Contacts'][0];
                                 $modelName = Events::parseModelName('Contacts');
                                 $emailLink = X2Model::getModelLink($action->id, 'Actions');
                                 $modelLink = X2Model::getModelLink($contact->id, 'Contacts');
                                 $email = Yii::t('app', 'email') . ' ' . $emailLink;
                             }
                         }
                     } else {
                         $modelName = Events::parseModelName($this->associationType);
                         $modelLink = X2Model::getModelLink($this->associationId, $this->associationType);
                     }
                     $text = $authorText . Yii::t('app', "received an {email} from a {transModelName}, {modelLink}", array('{email}' => $email, '{transModelName}' => $modelName, '{modelLink}' => $modelLink));
                 } else {
                     $deletionEvent = X2Model::model('Events')->findByAttributes(array('type' => 'record_deleted', 'associationType' => $this->associationType, 'associationId' => $this->associationId));
                     if (isset($deletionEvent)) {
                         $text = $authorText . Yii::t('app', "received an email from a {transModelName}, but that record has been deleted.", array('{transModelName}' => Events::parseModelName($this->associationType)));
                     } else {
                         $text = $authorText . Yii::t('app', "received an email from a {transModelName}, but that record could not be found.", array('{transModelName}' => Events::parseModelName($this->associationType)));
                     }
                 }
             }
             break;
         case 'voip_call':
             if (count(X2Model::model($this->associationType)->findAllByPk($this->associationId)) > 0) {
                 $text = Yii::t('app', "{modelLink} called.", array('{modelLink}' => X2Model::getModelLink($this->associationId, $this->associationType)));
             } else {
                 $deletionEvent = X2Model::model('Events')->findByAttributes(array('type' => 'record_deleted', 'associationType' => $this->associationType, 'associationId' => $this->associationId));
                 if (isset($deletionEvent)) {
                     $text = $authorText . Yii::t('app', "A contact called, but the contact record has been deleted.");
                 } else {
                     $text = $authorText . Yii::t('app', "Call from a contact whose record could not be found.");
                 }
             }
             break;
         case 'media':
             $media = $this->legacyMedia;
             $text = substr($authorText, 0, -1) . ": " . $this->text;
             if (isset($media)) {
                 if (!$truncated) {
                     $text .= "<br>" . Media::attachmentSocialText($media->getMediaLink(), true, true);
                 } else {
                     $text .= "<br>" . Media::attachmentSocialText($media->getMediaLink(), true, false);
                 }
             } else {
                 $text .= "<br>Media file not found.";
             }
             break;
         case 'topic_reply':
             $reply = TopicReplies::model()->findByPk($this->associationId);
             if (isset($reply)) {
                 if (!Yii::app()->params->isMobileApp) {
                     $topicLink = X2Html::link($reply->topic->name, Yii::app()->controller->createUrl('/topics/topics/view', array('id' => $reply->topic->id, 'replyId' => $reply->id)));
                 } else {
                     $topicLink = $reply->topic->name;
                 }
                 $text = Yii::t('topics', '{poster} posted a new reply to {topic}.', array('{poster}' => $authorText, '{topic}' => $topicLink));
                 // TODO: add topic preview
                 // reliable rich text truncation tool needed
                 //                    $text .= '<br/>';
                 //                    $text .= '<blockquote class="topic-preview">';
                 //                    $text .= $reply->text;
                 //                    $text .= '</blockquote>';
             } else {
                 $text = Yii::t('topics', '{poster} posted a new reply to a topic, but that reply has been deleted.', array('{poster}' => $authorText));
             }
             break;
         default:
             $text = $authorText . CHtml::encode($this->text);
             break;
     }
     if ($truncated && mb_strlen($text, 'UTF-8') > 250) {
         $text = mb_substr($text, 0, 250, 'UTF-8') . "...";
     }
     return $text;
 }
Esempio n. 4
0
 public static function getMobileLinkableRecordTypes()
 {
     if (!isset(self::$_mobileLinkableRecordTypes)) {
         self::$_mobileLinkableRecordTypes = array_flip(array_merge(array('Contacts', 'Accounts', 'X2Leads', 'Opportunity', 'User', 'Product', 'Quote', 'BugReports'), Yii::app()->db->createCommand("\n                select name\n                from x2_modules\n                where custom\n            ")->queryColumn()));
     }
     return self::$_mobileLinkableRecordTypes;
 }