/**
  * @param $savedCalendar
  * @return Report
  */
 public static function makeReportBySavedCalendar(SavedCalendar $savedCalendar)
 {
     $report = new Report();
     if ($savedCalendar->id > 0) {
         $report->setId((int) $savedCalendar->id);
     }
     $report->setDescription($savedCalendar->description);
     if ($savedCalendar->moduleClassName != null) {
         $report->setModuleClassName($savedCalendar->moduleClassName);
     }
     if ($savedCalendar->name != null) {
         $report->setName($savedCalendar->name);
     }
     $report->setOwner($savedCalendar->owner);
     $report->setType(Report::TYPE_ROWS_AND_COLUMNS);
     $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($savedCalendar);
     $report->setExplicitReadWriteModelPermissions($explicitReadWriteModelPermissions);
     if ($savedCalendar->serializedData != null) {
         $unserializedData = unserialize($savedCalendar->serializedData);
         if (isset($unserializedData['filtersStructure'])) {
             $report->setFiltersStructure($unserializedData['filtersStructure']);
         }
         CalendarUtil::makeComponentFormAndPopulateReportFromData($unserializedData[ComponentForReportForm::TYPE_FILTERS], $report, 'Filter');
     }
     return $report;
 }
Esempio n. 2
0
 protected static function resolveAndMakeExplicitReadWriteModelPermissions($sanitizedData, $model)
 {
     if ($model instanceof SecurableItem) {
         return ExplicitReadWriteModelPermissionsUtil::resolveByPostDataAndModelThenMake($sanitizedData, $model);
     } else {
         return null;
     }
 }
 protected function getExplicitReadWriteModelPermissions()
 {
     if ($this->explicitReadWriteModelPermissions != null) {
         return $this->explicitReadWriteModelPermissions;
     }
     $this->explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($this->model);
     return $this->explicitReadWriteModelPermissions;
 }
 public function __construct(Import $import, ImportDataProvider $dataProvider)
 {
     $unserializedData = unserialize($import->serializedData);
     $this->import = $import;
     $this->mappingData = $unserializedData['mappingData'];
     $this->importRules = ImportRulesUtil::makeImportRulesByType($unserializedData['importRulesType']);
     $this->dataProvider = $dataProvider;
     if (isset($unserializedData['explicitReadWriteModelPermissions'])) {
         $this->explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeByMixedPermitablesData($unserializedData['explicitReadWriteModelPermissions']);
     } else {
         $this->explicitReadWriteModelPermissions = new ExplicitReadWriteModelPermissions();
     }
 }
 public static function setContactModelPermissionsByContactWebForm(SecurableItem $model, ContactWebForm $contactWebForm)
 {
     if ($model instanceof SecurableItem && count($model->permissions) === 0) {
         $defaultPermission = ContactWebFormAdapter::resolveAndGetDefaultPermissionSetting($contactWebForm);
         $nonEveryoneGroup = $contactWebForm->defaultPermissionGroupSetting;
         $type = DerivedExplicitReadWriteModelPermissionsElement::resolveUserPermissionConfigurationToPermissionType($defaultPermission);
         $postData = array('explicitReadWriteModelPermissions' => compact('type', 'nonEveryoneGroup'));
         $explicitReadWritePermissions = self::resolveAndMakeExplicitReadWriteModelPermissions($postData, $model);
         $updated = ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($model, $explicitReadWritePermissions);
         if (!$updated) {
             throw new NotSupportedException();
         }
     }
 }
 /**
  * @param DemoDataHelper $demoDataHelper
  */
 public function makeAll(&$demoDataHelper)
 {
     assert('$demoDataHelper instanceof DemoDataHelper');
     assert('$demoDataHelper->isSetRange("User")');
     assert('$demoDataHelper->isSetRange("Account")');
     $conversations = array();
     foreach (self::getConversationData() as $randomConversationData) {
         $postData = array();
         $conversation = new Conversation();
         $conversation->setScenario('importModel');
         $conversation->owner = $demoDataHelper->getRandomByModelName('User');
         $conversation->createdByUser = $conversation->owner;
         $conversation->conversationItems->add($demoDataHelper->getRandomByModelName('Account'));
         $conversation->subject = $randomConversationData['subject'];
         $conversation->description = $randomConversationData['description'];
         //Add some comments
         foreach ($randomConversationData['comments'] as $commentDescription) {
             $comment = new Comment();
             $comment->setScenario('importModel');
             $comment->createdByUser = $demoDataHelper->getRandomByModelName('User');
             $comment->description = $commentDescription;
             $conversation->comments->add($comment);
             self::addItemIdToPostData($postData, $comment->createdByUser->getClassId('Item'));
         }
         //Add Super user
         $comment = new Comment();
         $comment->description = 'Great idea guys. Keep it coming.';
         $conversation->comments->add($comment);
         self::addItemIdToPostData($postData, Yii::app()->user->userModel->getClassId('Item'));
         $saved = $conversation->save();
         assert('$saved');
         //any user who has made a comment should be added as a participant and resolve permissions
         $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($conversation);
         ConversationParticipantsUtil::resolveConversationHasManyParticipantsFromPost($conversation, $postData, $explicitReadWriteModelPermissions);
         $saved = $conversation->save();
         assert('$saved');
         $success = ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($conversation, $explicitReadWriteModelPermissions);
         $saved = $conversation->save();
         assert('$success');
         $conversations[] = $conversation->id;
     }
     $demoDataHelper->setRangeByModelName('Conversation', $conversations[0], $conversations[count($conversations) - 1]);
 }
 protected function actionInlineEditValidate($model)
 {
     $readyToUsePostData = ExplicitReadWriteModelPermissionsUtil::removeIfExistsFromPostData($_POST[get_class($model)]);
     $sanitizedPostData = PostUtil::sanitizePostByDesignerTypeForSavingModel($model, $readyToUsePostData);
     $sanitizedOwnerPostData = PostUtil::sanitizePostDataToJustHavingElementForSavingModel($sanitizedPostData, 'owner');
     $sanitizedPostDataWithoutOwner = PostUtil::removeElementFromPostDataForSavingModel($sanitizedPostData, 'owner');
     $model->setAttributes($sanitizedPostDataWithoutOwner);
     if ($model->validate()) {
         $modelToStringValue = strval($model);
         if ($sanitizedOwnerPostData != null) {
             $model->setAttributes($sanitizedOwnerPostData);
         }
         if ($model instanceof OwnedSecurableItem) {
             $model->validate(array('owner'));
         }
     }
     $errorData = ZurmoActiveForm::makeErrorsDataAndResolveForOwnedModelAttributes($model);
     echo CJSON::encode($errorData);
     Yii::app()->end(0, false);
 }
 /**
  * @param $savedReport
  * @return Report
  */
 public static function makeReportBySavedReport($savedReport)
 {
     $report = new Report();
     if ($savedReport->id > 0) {
         $report->setId((int) $savedReport->id);
     }
     $report->setDescription($savedReport->description);
     $report->setModuleClassName($savedReport->moduleClassName);
     $report->setName($savedReport->name);
     $report->setOwner($savedReport->owner);
     $report->setType($savedReport->type);
     $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($savedReport);
     $report->setExplicitReadWriteModelPermissions($explicitReadWriteModelPermissions);
     if ($savedReport->serializedData != null) {
         $unserializedData = unserialize($savedReport->serializedData);
         if (isset($unserializedData['filtersStructure'])) {
             $report->setFiltersStructure($unserializedData['filtersStructure']);
         }
         if (isset($unserializedData['currencyConversionType'])) {
             $report->setCurrencyConversionType((int) $unserializedData['currencyConversionType']);
         }
         if (isset($unserializedData['spotConversionCurrencyCode'])) {
             $report->setSpotConversionCurrencyCode($unserializedData['spotConversionCurrencyCode']);
         }
         self::makeComponentFormAndPopulateReportFromData($unserializedData[ComponentForReportForm::TYPE_FILTERS], $report, 'Filter');
         self::makeComponentFormAndPopulateReportFromData($unserializedData[ComponentForReportForm::TYPE_ORDER_BYS], $report, 'OrderBy');
         self::makeComponentFormAndPopulateReportFromData($unserializedData[ComponentForReportForm::TYPE_GROUP_BYS], $report, 'GroupBy');
         self::makeComponentFormAndPopulateReportFromData($unserializedData[ComponentForReportForm::TYPE_DISPLAY_ATTRIBUTES], $report, 'DisplayAttribute');
         self::makeComponentFormAndPopulateReportFromData($unserializedData[ComponentForReportForm::TYPE_DRILL_DOWN_DISPLAY_ATTRIBUTES], $report, 'DrillDownDisplayAttribute');
         if (isset($unserializedData['chart'])) {
             $moduleClassName = $report->getModuleClassName();
             $modelClassName = $moduleClassName::getPrimaryModelName();
             $adapter = ModelRelationsAndAttributesToSummationReportAdapter::make($moduleClassName, $modelClassName, $report->getType());
             $chart = new ChartForReportForm(ReportUtil::makeDataAndLabelsForSeriesOrRange($adapter->getAttributesForChartSeries($report->getGroupBys(), $report->getDisplayAttributes())), ReportUtil::makeDataAndLabelsForSeriesOrRange($adapter->getAttributesForChartRange($report->getDisplayAttributes())));
             $chart->setAttributes($unserializedData['chart']);
             $report->setChart($chart);
         }
     }
     return $report;
 }
 protected static function resolveAndMakeExplicitReadWriteModelPermissions($sanitizedData, $model)
 {
     return ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($model);
 }
 protected static function resolveEmailMessage(EmailTemplate $emailTemplate, Contact $contact = null, $htmlContent, $emailAddress = null)
 {
     // TODO: @Shoaibi: Critical: Refactor this and AutoresponderAndCampaignItemsUtil
     $emailMessage = new EmailMessage();
     $emailMessage->subject = $emailTemplate->subject;
     $emailContent = new EmailMessageContent();
     $emailContent->textContent = $emailTemplate->textContent;
     // we do not need to do : EmailTemplateSerializedDataToHtmlUtil::resolveHtmlByEmailTemplateModel($emailTemplate);
     // check __set of EmailTemplate.
     $emailContent->htmlContent = $htmlContent;
     $emailMessage->content = $emailContent;
     $emailMessage->sender = static::resolveSender();
     static::resolveRecipient($emailMessage, $contact, $emailAddress);
     $box = EmailBox::resolveAndGetByName(EmailBox::USER_DEFAULT_NAME);
     $emailMessage->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_DRAFT);
     Yii::app()->emailHelper->sendImmediately($emailMessage);
     $emailMessage->owner = $emailTemplate->owner;
     $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($emailTemplate);
     ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($emailMessage, $explicitReadWriteModelPermissions);
     if (!$emailMessage->save()) {
         throw new FailedToSaveModelException("Unable to save EmailMessage");
     }
 }
 /**
  * @depends testRegularUserEditExistingAccountAndChangeExplicitPermissions
  */
 public function testRegularUserCreateAccountAndChangeExplicitPermissions()
 {
     $nobody = $this->logoutCurrentUserLoginNewUserAndGetByUsername('nobody');
     $group1 = Group::getByName('Group1');
     $everyoneGroup = Group::getByName(Group::EVERYONE_GROUP_NAME);
     //Create an account for nobody with no explicit permissions.
     $this->resetGetArray();
     $postData = array('type' => null);
     $this->setPostArray(array('Account' => array('name' => 'myNewAccount', 'officePhone' => '456765421', 'explicitReadWriteModelPermissions' => $postData)));
     //Make sure the redirect is to the details view and not the list view.
     $this->runControllerWithRedirectExceptionAndGetContent('accounts/default/create');
     // Not Coding Standard
     //Confirm the permissions are set right based on how the account was saved.
     $accounts = Account::getByName('myNewAccount');
     $this->assertEquals(1, count($accounts));
     $accountId = $accounts[0]->id;
     $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem(Account::getById($accountId));
     $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables();
     $readOnlyPermitables = $explicitReadWriteModelPermissions->getReadOnlyPermitables();
     $this->assertEquals(0, count($readWritePermitables));
     $this->assertEquals(0, count($readOnlyPermitables));
     //Create an account for nobody and add explicit permissions for the everyone group.
     $this->resetGetArray();
     $postData = array('type' => ExplicitReadWriteModelPermissionsUtil::MIXED_TYPE_EVERYONE_GROUP);
     $this->setPostArray(array('Account' => array('name' => 'myNewAccount2', 'officePhone' => '456765421', 'explicitReadWriteModelPermissions' => $postData)));
     //Make sure the redirect is to the details view and not the list view.
     $this->runControllerWithRedirectExceptionAndGetContent('accounts/default/create');
     // Not Coding Standard
     //Confirm the permissions are set right based on how the account was saved.
     $accounts = Account::getByName('myNewAccount2');
     $this->assertEquals(1, count($accounts));
     $accountId = $accounts[0]->id;
     $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem(Account::getById($accountId));
     $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables();
     $readOnlyPermitables = $explicitReadWriteModelPermissions->getReadOnlyPermitables();
     $this->assertEquals(1, count($readWritePermitables));
     $this->assertEquals(0, count($readOnlyPermitables));
     $this->assertEquals($everyoneGroup, $readWritePermitables[$everyoneGroup->getClassId('Permitable')]);
     //Create an account for nobody and add explicit permissions for a non-everyone group.
     $this->resetGetArray();
     $postData = array('type' => ExplicitReadWriteModelPermissionsUtil::MIXED_TYPE_NONEVERYONE_GROUP, 'nonEveryoneGroup' => $group1->id);
     $this->setPostArray(array('Account' => array('name' => 'myNewAccount3', 'officePhone' => '456765421', 'explicitReadWriteModelPermissions' => $postData)));
     //Make sure the redirect is to the details view and not the list view.
     $this->runControllerWithRedirectExceptionAndGetContent('accounts/default/create');
     // Not Coding Standard
     //Confirm the permissions are set right based on how the account was saved.
     $accounts = Account::getByName('myNewAccount3');
     $this->assertEquals(1, count($accounts));
     $accountId = $accounts[0]->id;
     $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem(Account::getById($accountId));
     $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables();
     $readOnlyPermitables = $explicitReadWriteModelPermissions->getReadOnlyPermitables();
     $this->assertEquals(1, count($readWritePermitables));
     $this->assertEquals(0, count($readOnlyPermitables));
     $this->assertEquals($group1, $readWritePermitables[$group1->getClassId('Permitable')]);
 }
 /**
  * @depends testResolveExplicitReadWriteModelPermissions
  */
 public function testResolveByPostDataAndModelThenMake()
 {
     Yii::app()->user->userModel = User::getByUsername('super');
     $accounts = Account::getByName('aTestAccount');
     $this->assertEquals(1, count($accounts));
     $account = $accounts[0];
     $group3 = Group::getByName('Group3');
     //Remove group 2 and 4, and add group 3.
     $postData = array('explicitReadWriteModelPermissions' => array('type' => ExplicitReadWriteModelPermissionsUtil::MIXED_TYPE_NONEVERYONE_GROUP, 'nonEveryoneGroup' => $group3->id));
     $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::resolveByPostDataAndModelThenMake($postData, $account);
     $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables();
     $readOnlyPermitables = $explicitReadWriteModelPermissions->getReadOnlyPermitables();
     $this->assertEquals(1, count($readWritePermitables));
     $this->assertEquals(0, count($readOnlyPermitables));
     $this->assertEquals($group3, $readWritePermitables[$group3->id]);
 }
 /**
  * @depends testEditOfTheLeadUserForTheTagCloudFieldAfterRemovingAllTagsPlacedForLeadsModule
  */
 public function testEditOfTheLeadUserForTheCustomFieldsPlacedForLeadsModule()
 {
     $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super');
     //Retrieve the the super user id.
     $superUserId = $super->id;
     //Retrieve the lead id.
     $leadId = self::getModelIdByModelNameAndName('Contact', 'Sarah Williams Edit');
     //Set the date and datetime variable values here.
     $date = Yii::app()->dateFormatter->format(DateTimeUtil::getLocaleDateFormatForInput(), time());
     $dateAssert = date('Y-m-d');
     $datetime = Yii::app()->dateFormatter->format(DateTimeUtil::getLocaleDateTimeFormatForInput(), time());
     $datetimeAssert = date('Y-m-d H:i:') . "00";
     $baseCurrency = Currency::getByCode(Yii::app()->currencyHelper->getBaseCode());
     //Retrieve the Lead State (Status) Id based on the name.
     $leadState = ContactState::getByName('In Progress');
     $leadStateId = $leadState[0]->id;
     $explicitReadWriteModelPermission = ExplicitReadWriteModelPermissionsUtil::MIXED_TYPE_EVERYONE_GROUP;
     //Edit and save the lead.
     $this->setGetArray(array('id' => $leadId));
     $this->setPostArray(array('Contact' => array('title' => array('value' => 'Mrs.'), 'firstName' => 'Sarah', 'lastName' => 'Williams Edit', 'jobTitle' => 'Sales Director Edit', 'companyName' => 'ABC Telecom Edit', 'industry' => array('value' => 'Banking'), 'website' => 'http://www.companyedit.com', 'department' => 'Sales Edit', 'officePhone' => '739-742-3005', 'source' => array('value' => 'Inbound Call'), 'mobilePhone' => '285-300-8232', 'officeFax' => '255-454-1914', 'state' => array('id' => $leadStateId), 'owner' => array('id' => $superUserId), 'primaryEmail' => array('emailAddress' => '*****@*****.**', 'optOut' => '0', 'isInvalid' => '0'), 'secondaryEmail' => array('emailAddress' => '*****@*****.**', 'optOut' => '0', 'isInvalid' => '0'), 'primaryAddress' => array('street1' => '26378 South Arlington Ave', 'street2' => '', 'city' => 'San Jose', 'state' => 'CA', 'postalCode' => '95131', 'country' => 'USA'), 'secondaryAddress' => array('street1' => '1652 North Cedar Court', 'street2' => '', 'city' => 'Phoenix', 'state' => 'AZ', 'postalCode' => '85003', 'country' => 'USA'), 'explicitReadWriteModelPermissions' => array('type' => $explicitReadWriteModelPermission), 'description' => 'This is a Edit Description', 'checkboxCstm' => '0', 'currencyCstm' => array('value' => 40, 'currency' => array('id' => $baseCurrency->id)), 'dateCstm' => $date, 'datetimeCstm' => $datetime, 'decimalCstm' => '12', 'picklistCstm' => array('value' => 'b'), 'multiselectCstm' => array('values' => array('gg', 'hh')), 'tagcloudCstm' => array('values' => array('reading', 'surfing')), 'countrylistCstm' => array('value' => 'aaaa'), 'statelistCstm' => array('value' => 'aaa1'), 'citylistCstm' => array('value' => 'ab1'), 'integerCstm' => '11', 'phoneCstm' => '259-784-2069', 'radioCstm' => array('value' => 'e'), 'textCstm' => 'This is a test Edit Text', 'textareaCstm' => 'This is a test Edit TextArea', 'urlCstm' => 'http://wwww.abc-edit.com'), 'save' => 'Save'));
     $this->runControllerWithRedirectExceptionAndGetUrl('leads/default/edit');
     //Check the details if they are saved properly for the custom fields after the edit.
     $lead = Contact::getById($leadId);
     //Retrieve the permission of the lead.
     $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($lead);
     $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables();
     $readOnlyPermitables = $explicitReadWriteModelPermissions->getReadOnlyPermitables();
     $this->assertEquals($lead->title->value, 'Mrs.');
     $this->assertEquals($lead->firstName, 'Sarah');
     $this->assertEquals($lead->lastName, 'Williams Edit');
     $this->assertEquals($lead->state->id, $leadStateId);
     $this->assertEquals($lead->jobTitle, 'Sales Director Edit');
     $this->assertEquals($lead->companyName, 'ABC Telecom Edit');
     $this->assertEquals($lead->industry->value, 'Banking');
     $this->assertEquals($lead->website, 'http://www.companyedit.com');
     $this->assertEquals($lead->department, 'Sales Edit');
     $this->assertEquals($lead->officePhone, '739-742-3005');
     $this->assertEquals($lead->source->value, 'Inbound Call');
     $this->assertEquals($lead->mobilePhone, '285-300-8232');
     $this->assertEquals($lead->officeFax, '255-454-1914');
     $this->assertEquals($lead->primaryEmail->emailAddress, '*****@*****.**');
     $this->assertEquals($lead->primaryEmail->optOut, '0');
     $this->assertEquals($lead->primaryEmail->isInvalid, '0');
     $this->assertEquals($lead->secondaryEmail->emailAddress, '*****@*****.**');
     $this->assertEquals($lead->secondaryEmail->optOut, '0');
     $this->assertEquals($lead->secondaryEmail->isInvalid, '0');
     $this->assertEquals($lead->primaryAddress->street1, '26378 South Arlington Ave');
     $this->assertEquals($lead->primaryAddress->street2, '');
     $this->assertEquals($lead->primaryAddress->city, 'San Jose');
     $this->assertEquals($lead->primaryAddress->state, 'CA');
     $this->assertEquals($lead->primaryAddress->postalCode, '95131');
     $this->assertEquals($lead->primaryAddress->country, 'USA');
     $this->assertEquals($lead->secondaryAddress->street1, '1652 North Cedar Court');
     $this->assertEquals($lead->secondaryAddress->street2, '');
     $this->assertEquals($lead->secondaryAddress->city, 'Phoenix');
     $this->assertEquals($lead->secondaryAddress->state, 'AZ');
     $this->assertEquals($lead->secondaryAddress->postalCode, '85003');
     $this->assertEquals($lead->secondaryAddress->country, 'USA');
     $this->assertEquals(1, count($readWritePermitables));
     $this->assertEquals(0, count($readOnlyPermitables));
     $this->assertEquals($lead->description, 'This is a Edit Description');
     $this->assertEquals($lead->checkboxCstm, '0');
     $this->assertEquals($lead->currencyCstm->value, 40);
     $this->assertEquals($lead->currencyCstm->currency->id, $baseCurrency->id);
     $this->assertEquals($lead->dateCstm, $dateAssert);
     $this->assertEquals($lead->datetimeCstm, $datetimeAssert);
     $this->assertEquals($lead->decimalCstm, '12');
     $this->assertEquals($lead->picklistCstm->value, 'b');
     $this->assertEquals($lead->integerCstm, 11);
     $this->assertEquals($lead->phoneCstm, '259-784-2069');
     $this->assertEquals($lead->radioCstm->value, 'e');
     $this->assertEquals($lead->textCstm, 'This is a test Edit Text');
     $this->assertEquals($lead->textareaCstm, 'This is a test Edit TextArea');
     $this->assertEquals($lead->urlCstm, 'http://wwww.abc-edit.com');
     $this->assertEquals($lead->countrylistCstm->value, 'aaaa');
     $this->assertEquals($lead->statelistCstm->value, 'aaa1');
     $this->assertEquals($lead->citylistCstm->value, 'ab1');
     $this->assertContains('gg', $lead->multiselectCstm->values);
     $this->assertContains('hh', $lead->multiselectCstm->values);
     $this->assertContains('reading', $lead->tagcloudCstm->values);
     $this->assertContains('surfing', $lead->tagcloudCstm->values);
     $metadata = CalculatedDerivedAttributeMetadata::getByNameAndModelClassName('calcnumber', 'Contact');
     $testCalculatedValue = CalculatedNumberUtil::calculateByFormulaAndModelAndResolveFormat($metadata->getFormula(), $lead);
     $this->assertEquals(23, $testCalculatedValue);
 }
    public function generateAndProcessCampaignItems($count)
    {
        $contacts = array();
        $emails = array();
        for ($i = 0; $i < $count; $i++) {
            $emails[$i] = new Email();
            $emails[$i]->emailAddress = "demo{$i}@zurmo.com";
            $account = AccountTestHelper::createAccountByNameForOwner('account ' . $i, $this->user);
            $contact = ContactTestHelper::createContactWithAccountByNameForOwner('contact ' . $i, $this->user, $account);
            $contact->primaryEmail = $emails[$i];
            $this->assertTrue($contact->save());
            $contacts[$i] = $contact;
        }
        $content = <<<MTG
[[COMPANY^NAME]]
[[CREATED^DATE^TIME]]
[[DEPARTMENT]]
[[DESCRIPTION]]
[[FIRST^NAME]]
[[GOOGLE^WEB^TRACKING^ID]]
[[INDUSTRY]]
[[JOB^TITLE]]
[[LAST^NAME]]
[[LATEST^ACTIVITY^DATE^TIME]]
[[MOBILE^PHONE]]
[[MODIFIED^DATE^TIME]]
[[OFFICE^FAX]]
[[OFFICE^PHONE]]
[[TITLE]]
[[SOURCE]]
[[STATE]]
[[WEBSITE]]
[[MODEL^URL]]
[[BASE^URL]]
[[APPLICATION^NAME]]
[[CURRENT^YEAR]]
[[LAST^YEAR]]
[[OWNERS^AVATAR^SMALL]]
[[OWNERS^AVATAR^MEDIUM]]
[[OWNERS^AVATAR^LARGE]]
[[OWNERS^EMAIL^SIGNATURE]]
[[UNSUBSCRIBE^URL]]
[[MANAGE^SUBSCRIPTIONS^URL]]
[[PRIMARY^EMAIL__EMAIL^ADDRESS]]
[[PRIMARY^EMAIL__EMAIL^ADDRESS]]
[[SECONDARY^ADDRESS__CITY]]
[[SECONDARY^ADDRESS__COUNTRY]]
[[SECONDARY^ADDRESS__INVALID]]
[[SECONDARY^ADDRESS__LATITUDE]]
[[SECONDARY^ADDRESS__LONGITUDE]]
[[SECONDARY^ADDRESS__POSTAL^CODE]]
[[SECONDARY^ADDRESS__STATE]]
[[SECONDARY^ADDRESS__STREET1]]
[[SECONDARY^ADDRESS__STREET2]]
[[OWNER__DEPARTMENT]]
[[OWNER__FIRST^NAME]]
[[OWNER__IS^ACTIVE]]
[[OWNER__MOBILE^PHONE]]
[[OWNER__LAST^LOGIN^DATE^TIME]]
[[OWNER__LAST^NAME]]
[[CREATED^BY^USER__FIRST^NAME]]
[[CREATED^BY^USER__LAST^NAME]]
[[CREATED^BY^USER__MOBILE^PHONE]]
[[CREATED^BY^USER__TITLE]]
[[CREATED^BY^USER__USERNAME]]
[[ACCOUNT__ANNUAL^REVENUE]]
[[ACCOUNT__INDUSTRY]]
[[ACCOUNT__NAME]]
[[ACCOUNT__WEBSITE]]
[[ACCOUNT__BILLING^ADDRESS__COUNTRY]]
[[ACCOUNT__BILLING^ADDRESS__CITY]]
[[ACCOUNT__OWNER__FIRST^NAME]]
 ' " ` " '
MTG;
        $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList Test', 'description goes here', 'fromName', '*****@*****.**');
        $campaign = CampaignTestHelper::createCampaign('campaign Test', 'subject', $content, $content, null, null, null, Campaign::STATUS_PROCESSING, null, null, $marketingList, false);
        $fileNames = array('testImage.png', 'testZip.zip', 'testPDF.pdf');
        $files = array();
        foreach ($fileNames as $index => $fileName) {
            $file = ZurmoTestHelper::createFileModel($fileName);
            $files[$index]['name'] = $fileName;
            $files[$index]['type'] = $file->type;
            $files[$index]['size'] = $file->size;
            $files[$index]['contents'] = $file->fileContent->content;
            $campaign->files->add($file);
        }
        $this->assertTrue($campaign->save(false));
        $processed = 0;
        foreach ($contacts as $contact) {
            MarketingListMemberTestHelper::createMarketingListMember(0, $marketingList, $contact);
            CampaignItemTestHelper::createCampaignItem($processed, $campaign, $contact);
        }
        AutoresponderOrCampaignBatchSizeConfigUtil::setBatchSize($count);
        Yii::app()->jobQueue->deleteAll();
        ForgetAllCacheUtil::forgetAllCaches();
        $job = new CampaignQueueMessagesInOutboxJob();
        $this->assertCount(0, Yii::app()->jobQueue->getAll());
        $startedAt = microtime(true);
        $this->assertTrue($job->run());
        $timeTaken = microtime(true) - $startedAt;
        ForgetAllCacheUtil::forgetAllCaches();
        $campaignItemsCountExpected = $count;
        $campaignItemsCountAfter = CampaignItem::getCount();
        $this->assertEquals($campaignItemsCountExpected, $campaignItemsCountAfter);
        $campaignItemsProcessed = CampaignItem::getByProcessedAndCampaignId(1, $campaign->id);
        $this->assertCount($count, $campaignItemsProcessed);
        foreach ($campaignItemsProcessed as $i => $campaignItem) {
            $contact = $contacts[$i];
            $email = $emails[$i];
            $emailMessage = $campaignItem->emailMessage;
            $this->assertEquals($marketingList->owner->id, $emailMessage->owner->id);
            $marketingListPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($marketingList);
            $emailMessagePermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($emailMessage);
            $this->assertEquals($marketingListPermissions, $emailMessagePermissions);
            $this->assertEquals($campaign->subject, $emailMessage->subject);
            $this->assertNotEquals($campaign->textContent, $emailMessage->content->textContent);
            $this->assertNotEquals($campaign->htmlContent, $emailMessage->content->htmlContent);
            $this->assertEquals(2, substr_count($emailMessage->content->textContent, '/marketingLists/external/'));
            $this->assertContains('/marketingLists/external/', $emailMessage->content->htmlContent);
            $this->assertEquals(2, substr_count($emailMessage->content->htmlContent, '/marketingLists/external/'));
            $this->assertEquals('*****@*****.**', $emailMessage->sender->fromAddress);
            $this->assertEquals('Support Team', $emailMessage->sender->fromName);
            $this->assertEquals(1, $emailMessage->recipients->count());
            $recipients = $emailMessage->recipients;
            $this->assertEquals(strval($contact), $recipients[0]->toName);
            $this->assertEquals($email->emailAddress, $recipients[0]->toAddress);
            $this->assertEquals(EmailMessageRecipient::TYPE_TO, $recipients[0]->type);
            $this->assertNotEmpty($emailMessage->files);
            $this->assertCount(count($files), $emailMessage->files);
            foreach ($campaign->files as $index => $file) {
                $this->assertEquals($file->name, $emailMessage->files[$index]->name);
                $this->assertEquals($file->type, $emailMessage->files[$index]->type);
                $this->assertEquals($file->size, $emailMessage->files[$index]->size);
                //CampaingItem should share the Attachments content from Campaign
                $this->assertEquals($file->fileContent->content, $emailMessage->files[$index]->fileContent->content);
                $this->assertEquals($file->fileContent->id, $emailMessage->files[$index]->fileContent->id);
            }
            $headersArray = array('zurmoItemId' => $campaignItem->id, 'zurmoItemClass' => get_class($campaignItem), 'zurmoPersonId' => $contact->getClassId('Person'));
            $expectedHeaders = serialize($headersArray);
            $this->assertEquals($expectedHeaders, $emailMessage->headers);
        }
        return $timeTaken;
    }
 /**
  * Utilized to create or update model attribute values after a workflow's triggers are fired as true.
  * Currently only works with creating new and creating new related models. Not designed to support updating
  * existing models.
  * @param WorkflowActionProcessingModelAdapter $adapter
  * @param $attribute
  * @throws FailedToResolveExplicitReadWriteModelPermissionsException
  * @throws NotSupportedException
  */
 public function resolveValueAndSetToModel(WorkflowActionProcessingModelAdapter $adapter, $attribute)
 {
     assert('is_string($attribute)');
     if ($adapter->getModel()->id < 0) {
         throw new NotSupportedException();
     }
     if ($this->type == self::TYPE_DYNAMIC_SAME_AS_TRIGGERED_MODEL) {
         $triggeredModel = $adapter->getTriggeredModel();
         if (null == ($explicitReadWriteModelPermissions = $triggeredModel->getExplicitReadWriteModelPermissionsForWorkflow())) {
             $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($adapter->getTriggeredModel());
         }
     } elseif ($this->type == self::TYPE_DYNAMIC_OWNER) {
         //Do nothing, by default this will take.
         return;
     } elseif ($this->type == self::TYPE_DYNAMIC_EVERYONE_GROUP) {
         $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($adapter->getModel());
         $explicitReadWriteModelPermissions->addReadWritePermitable(Group::getByName(Group::EVERYONE_GROUP_NAME));
     } else {
         $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($adapter->getModel());
         try {
             $group = Group::getById((int) $this->type);
             $explicitReadWriteModelPermissions->addReadWritePermitable($group);
         } catch (NotFoundException $e) {
             //todo: handle exception better
             return;
         }
     }
     $success = ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($adapter->getModel(), $explicitReadWriteModelPermissions);
     if (!$success) {
         throw new FailedToResolveExplicitReadWriteModelPermissionsException();
     }
 }
 /**
  * @depends testEditOfTheProductForTheTagCloudFieldAfterRemovingAllTagsPlacedForProductsModule
  */
 public function testEditOfTheProductForTheCustomFieldsPlacedForProductsModule()
 {
     $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super');
     //Set the date and datetime variable values here.
     $date = Yii::app()->dateFormatter->format(DateTimeUtil::getLocaleDateFormatForInput(), time());
     $dateAssert = date('Y-m-d');
     $datetime = Yii::app()->dateFormatter->format(DateTimeUtil::getLocaleDateTimeFormatForInput(), time());
     $datetimeAssert = date('Y-m-d H:i:') . "00";
     $baseCurrency = Currency::getByCode(Yii::app()->currencyHelper->getBaseCode());
     //Retrieve the account id, the super user id and product Id.
     $accountId = self::getModelIdByModelNameAndName('Account', 'superAccount');
     $superUserId = $super->id;
     $explicitReadWriteModelPermission = ExplicitReadWriteModelPermissionsUtil::MIXED_TYPE_EVERYONE_GROUP;
     $product = Product::getByName('myEditProduct');
     $productId = $product[0]->id;
     //Edit a new Product based on the custom fields.
     $this->setGetArray(array('id' => $productId));
     $this->setPostArray(array('Product' => array('name' => 'myEditProduct', 'owner' => array('id' => $superUserId), 'type' => 1, 'sellPrice' => array('currency' => array('id' => $baseCurrency->id), 'value' => 200), 'account' => array('id' => $accountId), 'quantity' => 10, 'priceFrequency' => 2, 'stage' => array('value' => 'Open'), 'explicitReadWriteModelPermissions' => array('type' => $explicitReadWriteModelPermission), 'checkboxCstm' => '0', 'currencyCstm' => array('value' => 40, 'currency' => array('id' => $baseCurrency->id)), 'decimalCstm' => '12', 'dateCstm' => $date, 'datetimeCstm' => $datetime, 'picklistCstm' => array('value' => 'b'), 'multiselectCstm' => array('values' => array('gg', 'hh')), 'tagcloudCstm' => array('values' => array('reading', 'surfing')), 'countrylistCstm' => array('value' => 'aaaa'), 'statelistCstm' => array('value' => 'aaa1'), 'citylistCstm' => array('value' => 'ab1'), 'integerCstm' => '11', 'phoneCstm' => '259-784-2069', 'radioCstm' => array('value' => 'e'), 'textCstm' => 'This is a test Edit Text', 'textareaCstm' => 'This is a test Edit TextArea', 'urlCstm' => 'http://wwww.abc-edit.com')));
     $this->runControllerWithRedirectExceptionAndGetUrl('products/default/edit');
     //Check the details if they are saved properly for the custom fields.
     $productId = self::getModelIdByModelNameAndName('Product', 'myEditProduct');
     $product = Product::getById($productId);
     //Retrieve the permission of the product.
     $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($product);
     $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables();
     $readOnlyPermitables = $explicitReadWriteModelPermissions->getReadOnlyPermitables();
     $this->assertEquals($product->name, 'myEditProduct');
     $this->assertEquals($product->quantity, 10);
     $this->assertEquals($product->sellPrice->value, 200.0);
     $this->assertEquals($product->account->id, $accountId);
     $this->assertEquals($product->type, 1);
     $this->assertEquals($product->stage->value, 'Open');
     $this->assertEquals($product->owner->id, $superUserId);
     $this->assertEquals(1, count($readWritePermitables));
     $this->assertEquals(0, count($readOnlyPermitables));
     $this->assertEquals($product->checkboxCstm, '0');
     $this->assertEquals($product->currencyCstm->value, 40);
     $this->assertEquals($product->currencyCstm->currency->id, $baseCurrency->id);
     $this->assertEquals($product->dateCstm, $dateAssert);
     $this->assertEquals($product->datetimeCstm, $datetimeAssert);
     $this->assertEquals($product->decimalCstm, '12');
     $this->assertEquals($product->picklistCstm->value, 'b');
     $this->assertEquals($product->integerCstm, 11);
     $this->assertEquals($product->phoneCstm, '259-784-2069');
     $this->assertEquals($product->radioCstm->value, 'e');
     $this->assertEquals($product->textCstm, 'This is a test Edit Text');
     $this->assertEquals($product->textareaCstm, 'This is a test Edit TextArea');
     $this->assertEquals($product->urlCstm, 'http://wwww.abc-edit.com');
     $this->assertEquals($product->dateCstm, $dateAssert);
     $this->assertEquals($product->datetimeCstm, $datetimeAssert);
     $this->assertEquals($product->countrylistCstm->value, 'aaaa');
     $this->assertEquals($product->statelistCstm->value, 'aaa1');
     $this->assertEquals($product->citylistCstm->value, 'ab1');
     $this->assertContains('gg', $product->multiselectCstm->values);
     $this->assertContains('hh', $product->multiselectCstm->values);
     $this->assertContains('reading', $product->tagcloudCstm->values);
     $this->assertContains('surfing', $product->tagcloudCstm->values);
     $metadata = CalculatedDerivedAttributeMetadata::getByNameAndModelClassName('calcnumber', 'Product');
     $testCalculatedValue = CalculatedNumberUtil::calculateByFormulaAndModelAndResolveFormat($metadata->getFormula(), $product);
     $this->assertEquals(132, intval(str_replace(',', '', $testCalculatedValue)));
     // Not Coding Standard
 }
 public function testProcessWithDefaultSender()
 {
     $message = new EmailMessageForWorkflowForm('WorkflowModelTestItem', Workflow::TYPE_ON_SAVE);
     $recipients = array(array('type' => WorkflowEmailMessageRecipientForm::TYPE_DYNAMIC_TRIGGERED_MODEL_USER, 'audienceType' => EmailMessageRecipient::TYPE_TO, 'dynamicUserType' => DynamicTriggeredModelUserWorkflowEmailMessageRecipientForm::DYNAMIC_USER_TYPE_CREATED_BY_USER));
     $message->emailTemplateId = self::$emailTemplate->id;
     $message->sendFromType = EmailMessageForWorkflowForm::SEND_FROM_TYPE_DEFAULT;
     $message->setAttributes(array(EmailMessageForWorkflowForm::EMAIL_MESSAGE_RECIPIENTS => $recipients));
     $model = new WorkflowModelTestItem();
     $model->lastName = 'the lastName';
     $model->string = 'the string';
     $model->phone = 'the phone';
     $saved = $model->save();
     $this->assertTrue($saved);
     $helper = new WorkflowEmailMessageProcessingHelper($message, $model, Yii::app()->user->userModel);
     $this->assertEquals(0, Yii::app()->emailHelper->getQueuedCount());
     $this->assertEquals(0, Yii::app()->emailHelper->getSentCount());
     $helper->process();
     $this->assertEquals(1, Yii::app()->emailHelper->getQueuedCount());
     $this->assertEquals(0, Yii::app()->emailHelper->getSentCount());
     $emailMessages = EmailMessage::getAllByFolderType(EmailFolder::TYPE_OUTBOX);
     $this->assertEquals('some subject the lastName', $emailMessages[0]->subject);
     $this->assertEquals('text content the phone', $emailMessages[0]->content->textContent);
     $this->assertEquals('html content the string', $emailMessages[0]->content->htmlContent);
     $this->assertEquals('System User', $emailMessages[0]->sender->fromName);
     $this->assertEquals('*****@*****.**', $emailMessages[0]->sender->fromAddress);
     $this->assertEquals(1, $emailMessages[0]->recipients->count());
     $this->assertEquals('*****@*****.**', $emailMessages[0]->recipients[0]->toAddress);
     $this->assertEquals(self::$emailTemplate->files[0]->fileContent->content, $emailMessages[0]->files[0]->fileContent->content);
     //Assert explicit permissions are correct
     $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($emailMessages[0]);
     $this->assertTrue($explicitReadWriteModelPermissions instanceof ExplicitReadWriteModelPermissions);
     $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables();
     $this->assertEquals(1, count($readWritePermitables));
     $this->assertEquals(self::$alphaGroup, $readWritePermitables[self::$alphaGroup->getClassId('Permitable')]);
     $emailMessages[0]->delete();
 }
Esempio n. 18
0
 /**
  * @depends testProcessDueCampaignItemWithOptout
  */
 public function testProcessDueCampaignItemWithReturnPathHeaders()
 {
     ZurmoConfigurationUtil::setByModuleName('EmailMessagesModule', 'bounceReturnPath', '*****@*****.**');
     $email = new Email();
     $email->emailAddress = '*****@*****.**';
     $contact = ContactTestHelper::createContactByNameForOwner('contact 09', $this->user);
     $contact->primaryEmail = $email;
     $this->assertTrue($contact->save());
     $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 09', 'description', 'CustomFromName', '*****@*****.**');
     $campaign = CampaignTestHelper::createCampaign('campaign 09', 'subject 09', 'Dr. [[FIRST^NAME]] [[LAST^NAME]]', '<b>[[LAST^NAME]]</b>, [[FIRST^NAME]]', null, null, null, null, null, null, $marketingList);
     $processed = 0;
     $campaignItem = CampaignItemTestHelper::createCampaignItem($processed, $campaign, $contact);
     CampaignItemsUtil::processDueItem($campaignItem);
     $this->assertEquals(1, $campaignItem->processed);
     $emailMessage = $campaignItem->emailMessage;
     $this->assertEquals($marketingList->owner, $emailMessage->owner);
     $marketingListPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($marketingList);
     $emailMessagePermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($emailMessage);
     $this->assertEquals($marketingListPermissions, $emailMessagePermissions);
     $this->assertEquals($campaign->subject, $emailMessage->subject);
     $this->assertNotEquals($campaign->textContent, $emailMessage->content->textContent);
     $this->assertNotEquals($campaign->htmlContent, $emailMessage->content->htmlContent);
     $this->assertTrue(strpos($emailMessage->content->textContent, 'Dr. contact 09 contact 09son') !== false);
     $this->assertTrue(strpos($emailMessage->content->textContent, '/marketingLists/external/') !== false);
     $this->assertEquals(2, substr_count($emailMessage->content->textContent, '/marketingLists/external/'));
     $this->assertTrue(strpos($emailMessage->content->htmlContent, '<b>contact 09son</b>, contact 09') !== false);
     $this->assertTrue(strpos($emailMessage->content->htmlContent, '/marketingLists/external/') !== false);
     $this->assertEquals(2, substr_count($emailMessage->content->htmlContent, '/marketingLists/external/'));
     $this->assertEquals('*****@*****.**', $emailMessage->sender->fromAddress);
     $this->assertEquals('Support Team', $emailMessage->sender->fromName);
     $this->assertEquals(1, $emailMessage->recipients->count());
     $recipients = $emailMessage->recipients;
     $this->assertEquals(strval($contact), $recipients[0]->toName);
     $this->assertEquals($email->emailAddress, $recipients[0]->toAddress);
     $this->assertEquals(EmailMessageRecipient::TYPE_TO, $recipients[0]->type);
     $this->assertEquals($contact, $recipients[0]->personOrAccount);
     $headersArray = array('zurmoItemId' => $campaignItem->id, 'zurmoItemClass' => get_class($campaignItem), 'zurmoPersonId' => $contact->getClassId('Person'), 'Return-Path' => '*****@*****.**');
     $expectedHeaders = serialize($headersArray);
     $this->assertEquals($expectedHeaders, $emailMessage->headers);
 }
Esempio n. 19
0
 /**
  * Based on the self::$importToFormAttributeMap, create an array of elements from the
  * import wizard form.  Serialize the array and set the import serializedData attribute.
  * @param object $importWizardForm
  * @param object $import
  */
 public static function setImportSerializedDataFromForm($importWizardForm, $import)
 {
     assert('$importWizardForm instanceof ImportWizardForm');
     assert('$import instanceof Import');
     $dataToSerialize = array();
     foreach (self::$importToFormAttributeMap as $attributeName) {
         $dataToSerialize[$attributeName] = $importWizardForm->{$attributeName};
     }
     $dataToSerialize['explicitReadWriteModelPermissions'] = ExplicitReadWriteModelPermissionsUtil::makeMixedPermitablesDataByExplicitReadWriteModelPermissions($importWizardForm->explicitReadWriteModelPermissions);
     $import->serializedData = serialize($dataToSerialize);
 }
 public function testSuperUserCreateMessageAndViewDetails()
 {
     $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super');
     Yii::app()->emailHelper->outboundHost = 'temporaryForTesting';
     $superContactId = self::getModelIdByModelNameAndName('Contact', 'superContact superContactson');
     $contact = Contact::getById($superContactId);
     //Just going to compose without coming from any specific record
     $this->resetGetArray();
     $this->runControllerWithNoExceptionsAndGetContent('emailMessages/default/createEmailMessage');
     //Go to compose without the email address set but the contact set
     $this->setGetArray(array('relatedId' => $superContactId, 'relatedModelClassName' => 'Contact'));
     $this->runControllerWithNoExceptionsAndGetContent('emailMessages/default/createEmailMessage');
     //Go to compose with the email address set and the contact set
     $this->setGetArray(array('toAddress' => '*****@*****.**', 'relatedId' => $superContactId, 'relatedModelClassName' => 'Contact'));
     $this->runControllerWithNoExceptionsAndGetContent('emailMessages/default/createEmailMessage');
     //confirm there are no email messages currently
     $this->assertEquals(0, EmailMessage::getCount());
     $this->assertEquals(0, Yii::app()->emailHelper->getQueuedCount());
     $this->assertEquals(0, Yii::app()->emailHelper->getSentCount());
     //Test create email with invalid form
     $createEmailMessageFormData = array('recipientsData' => array('to' => '*****@*****.**'), 'subject' => '', 'content' => '');
     $this->setPostArray(array('ajax' => 'edit-form', 'CreateEmailMessageForm' => $createEmailMessageFormData));
     $content = $this->runControllerWithExitExceptionAndGetContent('emailMessages/default/createEmailMessage');
     //Confirm that error messages are displayed
     $this->assertContains(Zurmo::t('emailMessagesModule', 'Subject cannot be blank.'), $content);
     //Confirm that no email messages was sent
     $this->assertEquals(0, EmailMessage::getCount());
     $this->assertEquals(0, Yii::app()->emailHelper->getQueuedCount());
     $this->assertEquals(0, Yii::app()->emailHelper->getSentCount());
     //Validate form
     $createEmailMessageFormData = array('recipientsData' => array('to' => '*****@*****.**'), 'subject' => 'test subject', 'content' => array('htmlContent' => '<p>html body content</p>'));
     $this->setGetArray(array('toAddress' => '*****@*****.**', 'relatedId' => $superContactId, 'relatedModelClassName' => 'Contact'));
     $this->setPostArray(array('ajax' => 'edit-form', 'CreateEmailMessageForm' => $createEmailMessageFormData));
     $this->runControllerWithExitExceptionAndGetContent('emailMessages/default/createEmailMessage');
     //create email message
     $this->setGetArray(array('toAddress' => '*****@*****.**', 'relatedId' => $superContactId, 'relatedModelClassName' => 'Contact'));
     $this->setPostArray(array('CreateEmailMessageForm' => $createEmailMessageFormData));
     $this->runControllerWithNoExceptionsAndGetContent('emailMessages/default/createEmailMessage', true);
     //confirm there is one email
     $this->assertEquals(1, EmailMessage::getCount());
     $this->assertEquals(1, Yii::app()->emailHelper->getQueuedCount());
     $this->assertEquals(0, Yii::app()->emailHelper->getSentCount());
     //To address must be the one in postArray
     $emailMessages = EmailMessage::getAll();
     $this->assertEquals('*****@*****.**', $emailMessages[0]->recipients[0]->toAddress);
     //Test the default permission was setted
     $everyoneGroup = Group::getByName(Group::EVERYONE_GROUP_NAME);
     $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($emailMessages[0]);
     $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables();
     $this->assertEquals($everyoneGroup, $readWritePermitables[$everyoneGroup->getClassId('Permitable')]);
 }
 public function testResolveConversationHasManyParticipantsFromPost()
 {
     $super = Yii::app()->user->userModel;
     $mary = UserTestHelper::createBasicUser('mary');
     $steven = User::getByUsername('steven');
     $conversation = new Conversation();
     $conversation->owner = Yii::app()->user->userModel;
     $conversation->subject = 'My test subject2';
     $conversation->description = 'My test description2';
     $this->assertTrue($conversation->save());
     $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($conversation);
     $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables();
     $this->assertEquals(0, count($readWritePermitables));
     //test no existing participants. Do not add owner of conversation
     $postData = array();
     $postData['itemIds'] = $super->getClassId('Item');
     ConversationParticipantsUtil::resolveConversationHasManyParticipantsFromPost($conversation, $postData, $explicitReadWriteModelPermissions);
     $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables();
     $this->assertEquals(0, count($readWritePermitables));
     $this->assertEquals(0, $conversation->conversationParticipants->count());
     //test adding 2 more participants
     $postData = array();
     $postData['itemIds'] = $super->getClassId('Item') . ',' . $steven->getClassId('Item') . ',' . $mary->getClassId('Item');
     // Not Coding Standard
     ConversationParticipantsUtil::resolveConversationHasManyParticipantsFromPost($conversation, $postData, $explicitReadWriteModelPermissions);
     $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables();
     $this->assertEquals(2, count($readWritePermitables));
     $this->assertEquals(2, $conversation->conversationParticipants->count());
     $this->assertTrue($conversation->save());
     $success = ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($conversation, $explicitReadWriteModelPermissions);
     $this->assertTrue($success);
     //Just making sure the readWrite count is still 2
     $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($conversation);
     $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables();
     $this->assertEquals(2, count($readWritePermitables));
     //test removing a participant (remove steven)
     $postData = array();
     $postData['itemIds'] = $super->getClassId('Item') . ',' . $mary->getClassId('Item');
     // Not Coding Standard
     ConversationParticipantsUtil::resolveConversationHasManyParticipantsFromPost($conversation, $postData, $explicitReadWriteModelPermissions);
     $this->assertTrue($conversation->save());
     $success = ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($conversation, $explicitReadWriteModelPermissions);
     $this->assertTrue($success);
     $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($conversation);
     $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables();
     $this->assertEquals(1, count($readWritePermitables));
     $this->assertEquals(1, $conversation->conversationParticipants->count());
     $this->assertEquals($mary, $conversation->conversationParticipants[0]->person);
     //test removing all participants.
     $postData = array();
     $postData['itemIds'] = '';
     ConversationParticipantsUtil::resolveConversationHasManyParticipantsFromPost($conversation, $postData, $explicitReadWriteModelPermissions);
     $this->assertTrue($conversation->save());
     $success = ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($conversation, $explicitReadWriteModelPermissions);
     $this->assertTrue($success);
     $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($conversation);
     $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables();
     $this->assertEquals(0, count($readWritePermitables));
     $this->assertEquals(0, $conversation->conversationParticipants->count());
 }
 public function actionSave($type, $id = null, $isBeingCopied = false)
 {
     $postData = PostUtil::getData();
     $savedReport = null;
     $report = null;
     $this->resolveSavedReportAndReportByPostData($postData, $savedReport, $report, $type, $id, (bool) $isBeingCopied);
     $reportToWizardFormAdapter = new ReportToWizardFormAdapter($report);
     $model = $reportToWizardFormAdapter->makeFormByType();
     if (isset($postData['ajax']) && $postData['ajax'] === 'edit-form') {
         $errorData = ReportUtil::validateReportWizardForm($postData, $model);
         echo CJSON::encode($errorData);
         Yii::app()->end(0, false);
     }
     $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::resolveByPostDataAndModelThenMake($postData[get_class($model)], $savedReport);
     SavedReportToReportAdapter::resolveReportToSavedReport($report, $savedReport);
     if ($savedReport->id > 0) {
         ControllerSecurityUtil::resolveCanCurrentUserAccessModule($savedReport->moduleClassName);
     }
     ControllerSecurityUtil::resolveAccessCanCurrentUserWriteModel($savedReport);
     if ($savedReport->save()) {
         StickyReportUtil::clearDataByKey($savedReport->id);
         if ($explicitReadWriteModelPermissions != null) {
             ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($savedReport, $explicitReadWriteModelPermissions);
         }
         //i can do a safety check on perms, then do flash here, on the jscript we can go to list instead and this should come up...
         //make sure you add to list of things to test.
         $redirectToList = $this->resolveAfterSaveHasPermissionsProblem($savedReport, $postData[get_class($model)]['name']);
         echo CJSON::encode(array('id' => $savedReport->id, 'redirectToList' => $redirectToList));
         Yii::app()->end(0, false);
     } else {
         throw new FailedToSaveModelException();
     }
 }
 /**
  * @depends testResolveConversationParticipantsForExplicitModelPermissions
  */
 public function testGetUnreadConversationCount()
 {
     $super = User::getByUsername('super');
     $mary = User::getByUsername('mary');
     $count = Conversation::getUnreadCountByUser($super);
     $account2 = AccountTestHelper::createAccountByNameForOwner('anAccount2', $super);
     $conversation = new Conversation();
     $conversation->owner = $super;
     $conversation->subject = 'My test subject2';
     $conversation->description = 'My test description2';
     $conversation->conversationItems->add($account2);
     $this->assertTrue($conversation->save());
     //when super adds a comment, it should remain same count
     $comment = new Comment();
     $comment->description = 'This is my first comment';
     $conversation->comments->add($comment);
     $this->assertTrue($conversation->save());
     $count = Conversation::getUnreadCountByUser($super);
     $this->assertEquals(1, $count);
     //Add mary as a participant
     $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($conversation);
     $postData = array();
     $postData['itemIds'] = $super->getClassId('Item') . ',' . $mary->getClassId('Item');
     // Not Coding Standard
     ConversationParticipantsUtil::resolveConversationHasManyParticipantsFromPost($conversation, $postData, $explicitReadWriteModelPermissions);
     $success = ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($conversation, $explicitReadWriteModelPermissions);
     $this->assertTrue($success);
     $conversation->save();
     //when mary adds a comment, super's count should go up (assumming count was previously 0)
     Yii::app()->user->userModel = $mary;
     $comment = new Comment();
     $comment->description = 'This is mary\'s first comment';
     $conversation->comments->add($comment);
     $this->assertTrue($conversation->save());
     Yii::app()->user->userModel = $super;
     $count = Conversation::getUnreadCountByUser($super);
     $this->assertEquals(2, $count);
 }
 public function actionConvertFinal($id)
 {
     assert('!empty($id)');
     $accountPostData = LeadsUtil::getFromSession(LeadsUtil::LEAD_CONVERSION_ACCOUNT_DATA_SESSION_KEY);
     if (empty($accountPostData)) {
         $urlParams = array('/leads/' . $this->getId() . '/convert', 'id' => $id);
         $this->redirect($urlParams);
     }
     $contact = Contact::getById(intval($id));
     if (!LeadsUtil::isStateALead($contact->state)) {
         $urlParams = array('/contacts/' . $this->getId() . '/details', 'id' => $contact->id);
         $this->redirect($urlParams);
     }
     $convertToAccountSetting = LeadsModule::getConvertToAccountSetting();
     $convertToOpportunitySetting = LeadsModule::getConvertToOpportunitySetting();
     $opportunity = new Opportunity();
     ControllerSecurityUtil::resolveAccessCanCurrentUserWriteModel($contact);
     $userCanAccessContacts = RightsUtil::canUserAccessModule('ContactsModule', Yii::app()->user->userModel);
     $userCanAccessAccounts = RightsUtil::canUserAccessModule('AccountsModule', Yii::app()->user->userModel);
     $userCanAccessOpportunities = RightsUtil::canUserAccessModule('OpportunitiesModule', Yii::app()->user->userModel);
     $userCanCreateOpportunity = RightsUtil::doesUserHaveAllowByRightName('OpportunitiesModule', OpportunitiesModule::RIGHT_CREATE_OPPORTUNITIES, Yii::app()->user->userModel);
     LeadsControllerSecurityUtil::resolveCanUserProperlyConvertLead($userCanAccessContacts, $userCanAccessAccounts, $convertToAccountSetting);
     LeadsControllerSecurityUtil::resolveCanUserProperlyConvertLeadFinalStep($userCanAccessContacts, $userCanAccessOpportunities, $convertToOpportunitySetting);
     if (isset($_POST['Opportunity'])) {
         $controllerUtil = static::getZurmoControllerUtil();
         $savedSuccessfully = false;
         $modelToStringValue = null;
         $postData = $_POST['Opportunity'];
         $opportunity = $controllerUtil->saveModelFromPost($postData, $opportunity, $savedSuccessfully, $modelToStringValue, false);
         if ($savedSuccessfully) {
             $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($contact);
             ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($opportunity, $explicitReadWriteModelPermissions);
             $account = LeadsUtil::createAccountForLeadConversionFromAccountPostData($accountPostData, $contact, $controllerUtil);
             $opportunity->account = $account;
             if (!$opportunity->save()) {
                 throw new NotSupportedException();
             }
             LeadsUtil::removeFromSession(LeadsUtil::LEAD_CONVERSION_ACCOUNT_DATA_SESSION_KEY);
             $this->actionSaveConvertedContact($contact, $account, $opportunity);
         }
     } elseif (isset($_POST['OpportunitySkip']) || $convertToOpportunitySetting == LeadsModule::CONVERT_NO_OPPORTUNITY || $convertToOpportunitySetting == LeadsModule::CONVERT_OPPORTUNITY_NOT_REQUIRED && !$userCanAccessOpportunities) {
         $controllerUtil = static::getZurmoControllerUtil();
         $account = LeadsUtil::createAccountForLeadConversionFromAccountPostData($accountPostData, $contact, $controllerUtil);
         LeadsUtil::removeFromSession(LeadsUtil::LEAD_CONVERSION_ACCOUNT_DATA_SESSION_KEY);
         $this->actionSaveConvertedContact($contact, $account, null);
     }
     $progressBarAndStepsView = new LeadConversionStepsAndProgressBarForWizardView(1);
     $convertView = new LeadConvertOpportunityView($this->getId(), $this->getModule()->getId(), $contact->id, strval($contact), $opportunity, $convertToOpportunitySetting, $userCanCreateOpportunity);
     $view = new LeadsPageView(ZurmoDefaultViewUtil::makeTwoStandardViewsForCurrentUser($this, $progressBarAndStepsView, $convertView));
     echo $view->render();
 }
 public function testMissionReadUnreadStatus()
 {
     $steven = User::getByUsername('steven');
     $sally = User::getByUsername('sally');
     $mary = User::getByUsername('mary');
     $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super');
     $mission = new Mission();
     $mission->owner = $steven;
     $mission->description = 'My test mission description';
     $mission->status = Mission::STATUS_AVAILABLE;
     $this->assertTrue($mission->save());
     $missionId = $mission->id;
     $explicitReadWriteModelPermissions = new ExplicitReadWriteModelPermissions();
     $explicitReadWriteModelPermissions->addReadWritePermitable(Group::getByName(Group::EVERYONE_GROUP_NAME));
     ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($mission, $explicitReadWriteModelPermissions);
     $mission = Mission::getById($missionId);
     //Confirm users have mission marked as unread but not owner
     $this->assertTrue(MissionsUtil::hasUserReadMissionLatest($mission, $steven));
     $this->assertFalse(MissionsUtil::hasUserReadMissionLatest($mission, $super));
     $this->assertFalse(MissionsUtil::hasUserReadMissionLatest($mission, $sally));
     $this->assertFalse(MissionsUtil::hasUserReadMissionLatest($mission, $mary));
     //Super reads the mission
     $this->setGetArray(array('id' => $missionId));
     $this->runControllerWithNoExceptionsAndGetContent('missions/default/details');
     $mission = Mission::getById($missionId);
     $this->assertTrue(MissionsUtil::hasUserReadMissionLatest($mission, $steven));
     $this->assertTrue(MissionsUtil::hasUserReadMissionLatest($mission, $super));
     $this->assertFalse(MissionsUtil::hasUserReadMissionLatest($mission, $sally));
     $this->assertFalse(MissionsUtil::hasUserReadMissionLatest($mission, $mary));
     //Mary marks mission as read and post a comment
     $this->logoutCurrentUserLoginNewUserAndGetByUsername('mary');
     MissionsUtil::markUserHasReadLatest($mission, $mary);
     $this->setGetArray(array('relatedModelId' => $missionId, 'relatedModelClassName' => 'Mission', 'relatedModelRelationName' => 'comments', 'redirectUrl' => 'someRedirect'));
     $this->setPostArray(array('Comment' => array('description' => 'Mary\'s new comment')));
     $this->runControllerWithRedirectExceptionAndGetContent('comments/default/inlineCreateSave');
     $mission = Mission::getById($missionId);
     $this->assertFalse(MissionsUtil::hasUserReadMissionLatest($mission, $steven));
     $this->assertFalse(MissionsUtil::hasUserReadMissionLatest($mission, $super));
     $this->assertFalse(MissionsUtil::hasUserReadMissionLatest($mission, $sally));
     $this->assertTrue(MissionsUtil::hasUserReadMissionLatest($mission, $mary));
     //Sally reads and takes the mission
     $this->logoutCurrentUserLoginNewUserAndGetByUsername('sally');
     $this->setGetArray(array('id' => $missionId));
     $this->resetPostArray();
     $this->runControllerWithNoExceptionsAndGetContent('missions/default/details');
     $mission = Mission::getById($missionId);
     $this->assertFalse(MissionsUtil::hasUserReadMissionLatest($mission, $steven));
     $this->assertFalse(MissionsUtil::hasUserReadMissionLatest($mission, $super));
     $this->assertTrue(MissionsUtil::hasUserReadMissionLatest($mission, $sally));
     $this->assertTrue(MissionsUtil::hasUserReadMissionLatest($mission, $mary));
     $this->setGetArray(array('status' => Mission::STATUS_TAKEN, 'id' => $missionId));
     $this->runControllerWithNoExceptionsAndGetContent('missions/default/ajaxChangeStatus');
     //Every user other than owner and takenby are marked as read latest
     $mission = Mission::getById($missionId);
     $this->assertFalse(MissionsUtil::hasUserReadMissionLatest($mission, $steven));
     $this->assertTrue(MissionsUtil::hasUserReadMissionLatest($mission, $super));
     $this->assertTrue(MissionsUtil::hasUserReadMissionLatest($mission, $sally));
     $this->assertTrue(MissionsUtil::hasUserReadMissionLatest($mission, $mary));
 }
 public function testCopy()
 {
     Yii::app()->user->userModel = User::getByUsername('sally');
     $currencyValue = new CurrencyValue();
     $currencyValue->value = 100;
     $currencyValue->currency = Currency::getByCode('EUR');
     $testItem = new ModelToArrayAdapterTestItem();
     $testItem->firstName = 'Bob';
     $testItem->lastName = 'Bobson';
     $testItem->boolean = true;
     $testItem->date = '2002-04-03';
     $testItem->dateTime = '2002-04-03 02:00:43';
     $testItem->float = 54.22;
     $testItem->integer = 10;
     $testItem->phone = '21313213';
     $testItem->string = 'aString';
     $testItem->textArea = 'Some Text Area';
     $testItem->url = 'http://www.asite.com';
     $testItem->primaryEmail->emailAddress = '*****@*****.**';
     $testItem->primaryAddress->street1 = 'some street';
     $testItem->owner = Yii::app()->user->userModel;
     $testItem->currencyValue = $currencyValue;
     $customFieldValue = new CustomFieldValue();
     $customFieldValue->value = 'Multi 1';
     $testItem->multiDropDown->values->add($customFieldValue);
     $customFieldValue = new CustomFieldValue();
     $customFieldValue->value = 'Multi 3';
     $testItem->multiDropDown->values->add($customFieldValue);
     $customFieldValue = new CustomFieldValue();
     $customFieldValue->value = 'Cloud 2';
     $testItem->tagCloud->values->add($customFieldValue);
     $customFieldValue = new CustomFieldValue();
     $customFieldValue->value = 'Cloud 3';
     $testItem->tagCloud->values->add($customFieldValue);
     $testItem->dropDown->value = 'Sample';
     $testItem2 = new ModelToArrayAdapterTestItem2();
     $testItem2->name = 'John';
     $this->assertTrue($testItem2->save());
     $testItem4 = new ModelToArrayAdapterTestItem4();
     $testItem4->name = 'John';
     $this->assertTrue($testItem4->save());
     //HAS_MANY and MANY_MANY relationships should be ignored.
     $testItem3_1 = new ModelToArrayAdapterTestItem3();
     $testItem3_1->name = 'Kevin';
     $this->assertTrue($testItem3_1->save());
     $testItem3_2 = new ModelToArrayAdapterTestItem3();
     $testItem3_2->name = 'Jim';
     $this->assertTrue($testItem3_2->save());
     $testItem->hasOne = $testItem2;
     $testItem->hasMany->add($testItem3_1);
     $testItem->hasMany->add($testItem3_2);
     $testItem->hasOneAlso = $testItem4;
     $this->assertTrue($testItem->save());
     $testItem->addPermissions(self::$groupA, Permission::READ_WRITE_CHANGE_PERMISSIONS_CHANGE_OWNER);
     $this->assertTrue($testItem->save());
     $id = $testItem->id;
     $testItem->forget();
     unset($testItem);
     //Switch to super and copy the model
     Yii::app()->user->userModel = User::getByUsername('super');
     $testItem = ModelToArrayAdapterTestItem::getById($id);
     $copyToItem = new ModelToArrayAdapterTestItem();
     ZurmoCopyModelUtil::copy($testItem, $copyToItem);
     $this->assertEquals('Bob', $copyToItem->firstName);
     $this->assertEquals('Bobson', $copyToItem->lastName);
     $this->assertEquals(true, $copyToItem->boolean);
     $this->assertEquals('2002-04-03', $copyToItem->date);
     $this->assertEquals('2002-04-03 02:00:43', $copyToItem->dateTime);
     $this->assertEquals(54.22, $copyToItem->float);
     $this->assertEquals(10, $copyToItem->integer);
     $this->assertEquals('21313213', $copyToItem->phone);
     $this->assertEquals('aString', $copyToItem->string);
     $this->assertEquals('Some Text Area', $copyToItem->textArea);
     $this->assertEquals('http://www.asite.com', $copyToItem->url);
     $this->assertEquals('*****@*****.**', $copyToItem->primaryEmail->emailAddress);
     $this->assertEquals('some street', $copyToItem->primaryAddress->street1);
     $this->assertEquals('Sample', $copyToItem->dropDown->value);
     $this->assertEquals(2, $copyToItem->multiDropDown->values->count());
     $this->assertTrue($copyToItem->multiDropDown->values[0] == 'Multi 1' || $copyToItem->multiDropDown->values[0] == 'Multi 3');
     $this->assertEquals(2, $copyToItem->tagCloud->values->count());
     $this->assertTrue($copyToItem->tagCloud->values[0] == 'Cloud 2' || $copyToItem->tagCloud->values[0] == 'Cloud 3');
     $this->assertEquals(100, $copyToItem->currencyValue->value);
     $this->assertEquals(2, $copyToItem->currencyValue->rateToBase);
     $this->assertEquals('EUR', $copyToItem->currencyValue->currency->code);
     $this->assertTrue($copyToItem->owner->isSame(self::$sally));
     $this->assertTrue($copyToItem->createdByUser->id < 0);
     $this->assertEquals(Yii::app()->user->userModel->id, $copyToItem->modifiedByUser->id);
     $this->assertEquals(0, $copyToItem->hasMany->count());
     $this->assertTrue($copyToItem->hasOne->isSame($testItem2));
     $this->assertTrue($copyToItem->hasOneAlso->isSame($testItem4));
     $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($copyToItem);
     $permitables = $explicitReadWriteModelPermissions->getReadWritePermitables();
     $this->assertEquals(1, count($permitables));
     $this->assertEquals('AAA', $permitables[self::$groupA->getClassId('Permitable')]->name);
 }
Esempio n. 27
0
 public function testProductSaveWithPermissions()
 {
     Yii::app()->user->userModel = User::getByUsername('super');
     $contacts = Contact::getAll();
     $accounts = Account::getByName('superAccount');
     $opportunities = Opportunity::getByName('superOpportunity');
     $productTemplates = ProductTemplate::getByName('superProductTemplate');
     $account = $accounts[0];
     $user = $account->owner;
     $everyoneGroup = Group::getByName(Group::EVERYONE_GROUP_NAME);
     $explicitReadWriteModelPermissions = new ExplicitReadWriteModelPermissions();
     $currencyHelper = Yii::app()->currencyHelper;
     $currencyCode = $currencyHelper->getBaseCode();
     $currency = Currency::getByCode($currencyCode);
     $postData = array('productTemplate' => array('id' => $productTemplates[0]->id), 'name' => 'ProductPermissionTest', 'quantity' => 6, 'account' => array('id' => $accounts[0]->id), 'contact' => array('id' => $contacts[0]->id), 'opportunity' => array('id' => ''), 'type' => ProductTemplate::TYPE_PRODUCT, 'priceFrequency' => ProductTemplate::PRICE_FREQUENCY_ONE_TIME, 'sellPrice' => array('currency' => array('id' => $currency->id), 'value' => 210), 'stage' => array('value' => 'Open'), 'owner' => array('id' => $user->id), 'explicitReadWriteModelPermissions' => array('type' => ExplicitReadWriteModelPermissionsUtil::MIXED_TYPE_EVERYONE_GROUP, 'nonEveryoneGroup' => ''));
     $model = new Product();
     $sanitizedPostData = PostUtil::sanitizePostByDesignerTypeForSavingModel($model, $postData);
     if ($model instanceof SecurableItem) {
         $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::resolveByPostDataAndModelThenMake($sanitizedPostData, $model);
     } else {
         $explicitReadWriteModelPermissions = null;
     }
     $readyToUseData = ExplicitReadWriteModelPermissionsUtil::removeIfExistsFromPostData($sanitizedPostData);
     $sanitizedOwnerData = PostUtil::sanitizePostDataToJustHavingElementForSavingModel($readyToUseData, 'owner');
     $sanitizedDataWithoutOwner = PostUtil::removeElementFromPostDataForSavingModel($readyToUseData, 'owner');
     $model->setAttributes($sanitizedDataWithoutOwner);
     if ($model->validate()) {
         $modelToStringValue = strval($model);
         if ($sanitizedOwnerData != null) {
             $model->setAttributes($sanitizedOwnerData);
         }
         if ($model instanceof OwnedSecurableItem) {
             $passedOwnerValidation = $model->validate(array('owner'));
         } else {
             $passedOwnerValidation = true;
         }
         if ($passedOwnerValidation && $model->save(false)) {
             if ($explicitReadWriteModelPermissions != null) {
                 $success = ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($model, $explicitReadWriteModelPermissions);
                 //todo: handle if success is false, means adding/removing permissions save failed.
             }
             $savedSuccessfully = true;
         }
     } else {
     }
     $this->assertEquals('ProductPermissionTest', $model->name);
 }
Esempio n. 28
0
 /**
  * Given a row of data, resolve each value of the row for import and either create or update an existing model.
  * @param object $importRules
  * @param array $rowData
  * @param array $mappingData
  * @param object $importRowDataResultsUtil
  */
 public static function importByImportRulesRowData(ImportRules $importRules, $rowBean, $mappingData, ImportRowDataResultsUtil $importRowDataResultsUtil, ExplicitReadWriteModelPermissions $explicitReadWriteModelPermissions)
 {
     assert('$rowBean instanceof RedBean_OODBBean');
     assert('is_array($mappingData)');
     $makeNewModel = true;
     $modelClassName = $importRules->getModelClassName();
     $externalSystemId = null;
     $importSanitizeResultsUtil = new ImportSanitizeResultsUtil();
     $afterSaveActionsData = array();
     $attributeValueData = array();
     $skippedColumns = array();
     $model = new $modelClassName();
     $model->setScenario('importModel');
     //Process the 'id' column first if available.
     if (false !== ($idColumnName = static::getMappedColumnNameByMappingData('id', $mappingData))) {
         $columnMappingData = $mappingData[$idColumnName];
         $attributeValueData = static::getAttributeValueData($importRules, $idColumnName, $columnMappingData, $rowBean, $importSanitizeResultsUtil);
         assert('count($attributeValueData) == 0 || count($attributeValueData) == 1');
         if (isset($attributeValueData['id']) && $attributeValueData['id'] != null) {
             $model = $modelClassName::getById($attributeValueData['id']);
         } elseif (isset($attributeValueData[ExternalSystemIdUtil::EXTERNAL_SYSTEM_ID_COLUMN_NAME]) && $attributeValueData[ExternalSystemIdUtil::EXTERNAL_SYSTEM_ID_COLUMN_NAME] != null) {
             $externalSystemId = $attributeValueData[ExternalSystemIdUtil::EXTERNAL_SYSTEM_ID_COLUMN_NAME];
         }
         $skippedColumns[] = $idColumnName;
     }
     //Dedupe fields processing
     if (static::processDedupeAttributesToCheckForSkipIfRequired($importRules, $model, $mappingData, $rowBean, $importRowDataResultsUtil, $importSanitizeResultsUtil, $skippedColumns) !== true) {
         if (null != ($matchedModel = $importSanitizeResultsUtil->getMatchedModel())) {
             $model = $matchedModel;
             $makeNewModel = false;
         }
         //Process the dedupe fields
         foreach ($importRules->getDedupeAttributes() as $dedupeField) {
             $sourceColumnName = static::getMappedColumnNameByMappingData($dedupeField, $mappingData);
             if (false !== $sourceColumnName) {
                 $columnMappingData = $mappingData[$sourceColumnName];
                 static::processImportInformationForAttributeDataAndPopulateModel($importRules, $sourceColumnName, $columnMappingData, $rowBean, $importSanitizeResultsUtil, $model, $afterSaveActionsData);
             }
         }
     } else {
         //as the row should be skipped
         return;
     }
     //Process the rest of the mapped colummns. ignoring owner.
     foreach ($mappingData as $columnName => $columnMappingData) {
         if ($columnMappingData['attributeIndexOrDerivedType'] != null && $columnMappingData['attributeIndexOrDerivedType'] != 'owner' && in_array($columnName, $skippedColumns) === false) {
             static::processImportInformationForAttributeDataAndPopulateModel($importRules, $columnName, $columnMappingData, $rowBean, $importSanitizeResultsUtil, $model, $afterSaveActionsData);
         }
     }
     //Process the owner column if present
     foreach ($mappingData as $columnName => $columnMappingData) {
         if ($columnMappingData['attributeIndexOrDerivedType'] != null && $columnMappingData['attributeIndexOrDerivedType'] == 'owner' && in_array($columnName, $skippedColumns) === false) {
             static::processImportInformationForAttributeDataAndPopulateModel($importRules, $columnName, $columnMappingData, $rowBean, $importSanitizeResultsUtil, $model, $afterSaveActionsData);
         }
     }
     $validated = $model->validate();
     if ($validated && $importSanitizeResultsUtil->shouldSaveModel()) {
         $saved = $model->save();
         if ($saved) {
             static::processAfterSaveActions($afterSaveActionsData, $model);
             if ($externalSystemId != null) {
                 ExternalSystemIdUtil::updateByModel($model, $externalSystemId);
             }
             $importRowDataResultsUtil->addMessage(Zurmo::t('ImportModule', '{modelLabel} saved correctly: {linkToModel}', array('{modelLabel}' => $model->getModelLabelByTypeAndLanguage('Singular'), '{linkToModel}' => static::resolveLinkMessageToModel($model))));
             $importRowDataResultsUtil->addMessages($importSanitizeResultsUtil->getRelatedModelMessages());
             if ($makeNewModel) {
                 if ($model instanceof SecurableItem) {
                     $model->setScenario('doNotSetModifiedDateTimeOrUser');
                     try {
                         $resolved = ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($model, $explicitReadWriteModelPermissions);
                         $importRowDataResultsUtil->setStatusToCreated();
                         if (!$resolved) {
                             $importRowDataResultsUtil->addMessage('The record saved, but there was a problem ' . 'setting the security permissions. It will at least be viewable by the owner.');
                             $importRowDataResultsUtil->setStatusToError();
                         }
                     } catch (AccessDeniedSecurityException $e) {
                         $importRowDataResultsUtil->addMessage('The record saved, but you do not have permissions ' . 'to set the security the way you did. The record will only be viewable by the owner.');
                         $importRowDataResultsUtil->setStatusToError();
                     }
                     $model->setScenario('importModel');
                 } else {
                     $importRowDataResultsUtil->setStatusToCreated();
                 }
             } else {
                 $importRowDataResultsUtil->setStatusToUpdated();
             }
         } else {
             $importRowDataResultsUtil->addMessage('The record failed to save. Reason unknown.');
             $importRowDataResultsUtil->setStatusToError();
         }
     } else {
         if (!$importSanitizeResultsUtil->shouldSaveModel()) {
             $importRowDataResultsUtil->addMessages($importSanitizeResultsUtil->getMessages());
         }
         $messages = RedBeanModelErrorsToMessagesUtil::makeMessagesByModel($model);
         if (count($messages) > 0) {
             $importRowDataResultsUtil->addMessages($messages);
         }
         $importRowDataResultsUtil->setStatusToError();
     }
 }
 /**
  * @depends testEditOfTheNoteForTheTagCloudFieldAfterRemovingAllTagsPlacedForNotesModule
  */
 public function testEditOfTheNoteForTheCustomFieldsPlacedForNotesModule()
 {
     $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super');
     //Set the date and datetime variable values here.
     $date = Yii::app()->dateFormatter->format(DateTimeUtil::getLocaleDateFormat(), time());
     $dateAssert = date('Y-m-d');
     $datetime = Yii::app()->dateFormatter->format(DateTimeUtil::getLocaleDateTimeFormat(), time());
     $datetimeAssert = date('Y-m-d H:i:') . "00";
     //Get the super user, account, opportunity and contact id.
     $superUserId = $super->id;
     $superAccount = Account::getByName('superAccount');
     $superContactId = self::getModelIdByModelNameAndName('Contact', 'superContact2 superContact2son');
     $superOpportunityId = self::getModelIdByModelNameAndName('Opportunity', 'superOpp');
     $baseCurrency = Currency::getByCode(Yii::app()->currencyHelper->getBaseCode());
     $explicitReadWriteModelPermission = ExplicitReadWriteModelPermissionsUtil::MIXED_TYPE_EVERYONE_GROUP;
     //Retrieve the note Id based on the created note.
     $note = Note::getByName('Note Edit Description');
     //Edit a note based on the custom fields.
     $this->setGetArray(array('id' => $note[0]->id));
     $this->setPostArray(array('Note' => array('occurredOnDateTime' => $datetime, 'description' => 'Note Edit Description', 'explicitReadWriteModelPermissions' => array('type' => $explicitReadWriteModelPermission), 'owner' => array('id' => $superUserId), 'checkboxCstm' => '0', 'currencyCstm' => array('value' => 40, 'currency' => array('id' => $baseCurrency->id)), 'dateCstm' => $date, 'datetimeCstm' => $datetime, 'decimalCstm' => '12', 'picklistCstm' => array('value' => 'b'), 'multiselectCstm' => array('values' => array('gg', 'hh')), 'tagcloudCstm' => array('values' => array('reading', 'surfing')), 'countrylistCstm' => array('value' => 'aaaa'), 'statelistCstm' => array('value' => 'aaa1'), 'citylistCstm' => array('value' => 'ab1'), 'integerCstm' => '11', 'phoneCstm' => '259-784-2069', 'radioCstm' => array('value' => 'e'), 'textCstm' => 'This is a test Edit Text', 'textareaCstm' => 'This is a test Edit TextArea', 'urlCstm' => 'http://wwww.abc-edit.com'), 'ActivityItemForm' => array('Account' => array('id' => $superAccount[0]->id), 'Contact' => array('id' => $superContactId), 'Opportunity' => array('id' => $superOpportunityId))));
     $this->runControllerWithRedirectExceptionAndGetUrl('notes/default/edit');
     //Check the details if they are saved properly for the custom fields.
     $note = Note::getByName('Note Edit Description');
     //Retrieve the permission of the note.
     $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem(Note::getById($note[0]->id));
     $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables();
     $readOnlyPermitables = $explicitReadWriteModelPermissions->getReadOnlyPermitables();
     $this->assertEquals($note[0]->description, 'Note Edit Description');
     $this->assertEquals($note[0]->occurredOnDateTime, $datetimeAssert);
     $this->assertEquals($note[0]->owner->id, $superUserId);
     $this->assertEquals($note[0]->activityItems->count(), 3);
     $this->assertEquals(1, count($readWritePermitables));
     $this->assertEquals(0, count($readOnlyPermitables));
     $this->assertEquals($note[0]->checkboxCstm, '0');
     $this->assertEquals($note[0]->currencyCstm->value, 40);
     $this->assertEquals($note[0]->currencyCstm->currency->id, $baseCurrency->id);
     $this->assertEquals($note[0]->dateCstm, $dateAssert);
     $this->assertEquals($note[0]->datetimeCstm, $datetimeAssert);
     $this->assertEquals($note[0]->decimalCstm, '12');
     $this->assertEquals($note[0]->picklistCstm->value, 'b');
     $this->assertEquals($note[0]->integerCstm, 11);
     $this->assertEquals($note[0]->phoneCstm, '259-784-2069');
     $this->assertEquals($note[0]->radioCstm->value, 'e');
     $this->assertEquals($note[0]->textCstm, 'This is a test Edit Text');
     $this->assertEquals($note[0]->textareaCstm, 'This is a test Edit TextArea');
     $this->assertEquals($note[0]->urlCstm, 'http://wwww.abc-edit.com');
     $this->assertEquals($note[0]->countrylistCstm->value, 'aaaa');
     $this->assertEquals($note[0]->statelistCstm->value, 'aaa1');
     $this->assertEquals($note[0]->citylistCstm->value, 'ab1');
     $this->assertContains('gg', $note[0]->multiselectCstm->values);
     $this->assertContains('hh', $note[0]->multiselectCstm->values);
     $this->assertContains('reading', $note[0]->tagcloudCstm->values);
     $this->assertContains('surfing', $note[0]->tagcloudCstm->values);
     $metadata = CalculatedDerivedAttributeMetadata::getByNameAndModelClassName('calcnumber', 'Note');
     $testCalculatedValue = CalculatedNumberUtil::calculateByFormulaAndModelAndResolveFormat($metadata->getFormula(), $note[0]);
     $this->assertEquals(23, $testCalculatedValue);
 }
 public function testSuperUserCompleteMatchVariations()
 {
     $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super');
     $this->runControllerWithNoExceptionsAndGetContent('emailMessages/default/matchingList');
     $message1 = EmailMessageTestHelper::createArchivedUnmatchedReceivedMessage($super);
     $message1Id = $message1->id;
     $message2 = EmailMessageTestHelper::createArchivedUnmatchedReceivedMessage($super);
     $message2Id = $message2->id;
     $message3 = EmailMessageTestHelper::createArchivedUnmatchedReceivedMessage($super);
     $contact = ContactTestHelper::createContactByNameForOwner('gail', $super);
     $startingContactState = ContactsUtil::getStartingState();
     $startingLeadState = LeadsUtil::getStartingState();
     //test validating selecting an existing contact
     $this->setGetArray(array('id' => $message1->id));
     $this->setPostArray(array('ajax' => 'select-contact-form-' . $message1->id, 'AnyContactSelectForm' => array($message1->id => array('contactId' => $contact->id, 'contactName' => 'Some Name'))));
     $this->runControllerWithExitExceptionAndGetContent('emailMessages/default/completeMatch');
     //test validating creating a new contact
     $this->setGetArray(array('id' => $message1->id));
     $this->setPostArray(array('ajax' => 'contact-inline-create-form-' . $message1->id, 'Contact' => array($message1->id => array('firstName' => 'Gail', 'lastName' => 'Green', 'officePhone' => '456765421', 'state' => array('id' => $startingContactState->id)))));
     $this->runControllerWithExitExceptionAndGetContent('emailMessages/default/completeMatch');
     //test validating creating a new lead
     $this->setGetArray(array('id' => $message1->id));
     $this->setPostArray(array('ajax' => 'lead-inline-create-form-' . $message1->id, 'Lead' => array($message1->id => array('firstName' => 'Gail', 'lastName' => 'Green', 'officePhone' => '456765421', 'state' => array('id' => $startingLeadState->id)))));
     $this->runControllerWithExitExceptionAndGetContent('emailMessages/default/completeMatch');
     //test selecting existing contact and saving
     $this->assertNull($contact->primaryEmail->emailAddress);
     $this->setGetArray(array('id' => $message1->id));
     $this->setPostArray(array('AnyContactSelectForm' => array($message1->id => array('contactId' => $contact->id, 'contactName' => 'Some Name'))));
     $this->runControllerWithNoExceptionsAndGetContent('emailMessages/default/completeMatch', true);
     $message1->forget();
     $message1 = EmailMessage::getById($message1Id);
     $this->assertNull($contact->primaryEmail->emailAddress);
     $this->assertCount(1, $message1->sender->personsOrAccounts);
     $this->assertTrue($message1->sender->personsOrAccounts[0]->isSame($contact));
     $this->assertEquals('Archived', $message1->folder);
     //assert subject of the email going to edit.
     $this->setGetArray(array('id' => $contact->id));
     $this->runControllerWithNoExceptionsAndGetContent('contacts/default/details');
     $this->assertEquals('A test unmatched archived received email', $message1->subject);
     //edit subject of email message.
     $this->setGetArray(array('id' => $message1->id));
     $createEmailMessageFormData = array('subject' => 'A test unmatched archived received email edited');
     $this->setPostArray(array('ajax' => 'edit-form', 'EmailMessage' => $createEmailMessageFormData));
     $this->runControllerWithRedirectExceptionAndGetUrl('emailMessages/default/edit');
     //assert subject is edited or not.
     $this->setGetArray(array('id' => $contact->id));
     $this->runControllerWithNoExceptionsAndGetContent('contacts/default/details');
     $this->assertEquals('A test unmatched archived received email edited', $message1->subject);
     //delete email message.
     $this->setGetArray(array('id' => $message1->id));
     $this->runControllerWithRedirectExceptionAndGetUrl('emailMessages/default/delete', true);
     //assert subject not present.
     try {
         EmailMessage::getById($message1->id);
         $this->fail();
     } catch (NotFoundException $e) {
         //success
     }
     //Test the default permission was setted
     $everyoneGroup = Group::getByName(Group::EVERYONE_GROUP_NAME);
     $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($message1);
     $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables();
     $this->assertEquals($everyoneGroup, $readWritePermitables[$everyoneGroup->getClassId('Permitable')]);
     //test creating new contact and saving
     $this->assertEquals(1, Contact::getCount());
     $this->setGetArray(array('id' => $message2->id));
     $this->setPostArray(array('Contact' => array($message2->id => array('firstName' => 'George', 'lastName' => 'Patton', 'officePhone' => '456765421', 'state' => array('id' => $startingContactState->id)))));
     $this->runControllerWithNoExceptionsAndGetContent('emailMessages/default/completeMatch', true);
     $message2->forget();
     $message2 = EmailMessage::getById($message2Id);
     $this->assertEquals(2, Contact::getCount());
     $contacts = Contact::getByName('George Patton');
     $contact = $contacts[0];
     $this->assertCount(1, $message2->sender->personsOrAccounts);
     $this->assertTrue($message2->sender->personsOrAccounts[0]->isSame($contact));
     $this->assertEquals('Archived', $message2->folder);
     //Test the default permission was setted
     $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($message2);
     $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables();
     $this->assertEquals($everyoneGroup, $readWritePermitables[$everyoneGroup->getClassId('Permitable')]);
     //test creating new lead and saving
     $this->assertEquals(2, Contact::getCount());
     $this->setGetArray(array('id' => $message3->id));
     $this->setPostArray(array('Lead' => array($message3->id => array('firstName' => 'Billy', 'lastName' => 'Kid', 'officePhone' => '456765421', 'state' => array('id' => $startingLeadState->id)))));
     $this->runControllerWithNoExceptionsAndGetContent('emailMessages/default/completeMatch', true);
     $this->assertEquals(3, Contact::getCount());
     $contacts = Contact::getByName('Billy Kid');
     $contact = $contacts[0];
     $this->assertCount(1, $message3->sender->personsOrAccounts);
     $this->assertTrue($message3->sender->personsOrAccounts[0]->isSame($contact));
     $this->assertEquals('Archived', $message3->folder);
     //Test the default permission was setted
     $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($message3);
     $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables();
     $this->assertEquals($everyoneGroup, $readWritePermitables[$everyoneGroup->getClassId('Permitable')]);
 }