/** * 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(); } }
/** * @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; }
protected function getExplicitReadWriteModelPermissions() { if ($this->explicitReadWriteModelPermissions != null) { return $this->explicitReadWriteModelPermissions; } $this->explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($this->model); return $this->explicitReadWriteModelPermissions; }
/** * Override to process the note as a social item when needed. * (non-PHPdoc) * @see ZurmoBaseController::actionAfterSuccessfulModelSave() */ protected function actionAfterSuccessfulModelSave($model, $modelToStringValue, $redirectUrlParams = null) { assert('$model instanceof Note'); if (ArrayUtil::getArrayValue(PostUtil::getData(), 'postToProfile')) { $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($model); $socialItem = new SocialItem(); $socialItem->note = $model; $saved = $socialItem->save(); if (!$saved) { throw new FailedToSaveModelException(); } ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($socialItem, $explicitReadWriteModelPermissions); } parent::actionAfterSuccessfulModelSave($model, $modelToStringValue, $redirectUrlParams); }
/** * @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]); }
/** * @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; }
public static function makeMeetingsCategoryAndMonthStartTimeByOwner() { $report = new Report(); $report->setModuleClassName('MeetingsModule'); $report->setName('Meettings Category And Month Start Time By Owner'); $report->setType(Report::TYPE_MATRIX); $report->setOwner(Yii::app()->user->userModel); $report->setFiltersStructure(''); $report->setCurrencyConversionType(Report::CURRENCY_CONVERSION_TYPE_BASE); $groupBy = new GroupByForReportForm('MeetingsModule', 'Meeting', $report->getType()); $groupBy->attributeIndexOrDerivedType = 'startDateTime__Month'; $groupBy->axis = 'x'; $report->addGroupBy($groupBy); $groupBy = new GroupByForReportForm('MeetingsModule', 'Meeting', $report->getType()); $groupBy->attributeIndexOrDerivedType = 'category'; $groupBy->axis = 'x'; $report->addGroupBy($groupBy); $groupBy = new GroupByForReportForm('MeetingsModule', 'Meeting', $report->getType()); $groupBy->attributeIndexOrDerivedType = 'owner__User'; $groupBy->axis = 'y'; $report->addGroupBy($groupBy); $displayAttribute = new DisplayAttributeForReportForm('MeetingsModule', 'Meeting', $report->getType()); $displayAttribute->attributeIndexOrDerivedType = 'Count'; $report->addDisplayAttribute($displayAttribute); $savedReport = new SavedReport(); SavedReportToReportAdapter::resolveReportToSavedReport($report, $savedReport); //set explicit $saved = $savedReport->save(); assert('$saved'); $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($savedReport); $explicitReadWriteModelPermissions->addReadWritePermitable(Group::getByName(Group::EVERYONE_GROUP_NAME)); $success = ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($savedReport, $explicitReadWriteModelPermissions); assert('$success'); $saved = $savedReport->save(); assert('$saved'); }
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(); }
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')]); }
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()); }
/** * @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); }
/** * @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); }
/** * @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 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); }
protected static function resolveExplicitPermissions(RedBeanModel $model, RedBeanModel $copyToModel) { if ($model instanceof SecurableItem) { $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($model); ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissionsForDisplay($copyToModel, $explicitReadWriteModelPermissions); } }
public function testPermissionsResolveValueAndSetToModelUpdateAsDynamicCreatedByUser() { //Setup a triggered model that has Sarah creating and owning it. $super = Yii::app()->user->userModel; Yii::app()->user->userModel = User::getByUsername('sarah'); $triggeredModel = new WorkflowModelTestItem(); $triggeredModel->lastName = 'test'; $triggeredModel->string = 'test'; $saved = $triggeredModel->save(); $this->assertTrue($saved); Yii::app()->user->userModel = $super; //Now the super is who modified it $triggeredModel->string = 'test2'; $saved = $triggeredModel->save(); $this->assertTrue($saved); //Test same as triggered where triggered is owner $form = new ExplicitReadWriteModelPermissionsWorkflowActionAttributeForm('WorkflowsTestModule', 'WorkflowModelTestItem'); $form->type = ExplicitReadWriteModelPermissionsWorkflowActionAttributeForm::TYPE_DYNAMIC_SAME_AS_TRIGGERED_MODEL; $model = new WorkflowModelTestItem(); $model->lastName = 'test'; $model->string = 'test'; $saved = $model->save(); $this->assertTrue($saved); $adapter = new WorkflowActionProcessingModelAdapter($model, Yii::app()->user->userModel, $triggeredModel); $form->resolveValueAndSetToModel($adapter, 'permissions'); $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($model); $this->assertEquals(0, $explicitReadWriteModelPermissions->getReadWritePermitablesCount()); //Test same as triggered where triggered is not owner $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($triggeredModel); $explicitReadWriteModelPermissions->addReadWritePermitable(self::$groupTest); $success = ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($triggeredModel, $explicitReadWriteModelPermissions); $this->assertTrue($success); $form = new ExplicitReadWriteModelPermissionsWorkflowActionAttributeForm('WorkflowsTestModule', 'WorkflowModelTestItem'); $form->type = ExplicitReadWriteModelPermissionsWorkflowActionAttributeForm::TYPE_DYNAMIC_SAME_AS_TRIGGERED_MODEL; $model = new WorkflowModelTestItem(); $model->lastName = 'test'; $model->string = 'test'; $saved = $model->save(); $this->assertTrue($saved); $adapter = new WorkflowActionProcessingModelAdapter($model, Yii::app()->user->userModel, $triggeredModel); $form->resolveValueAndSetToModel($adapter, 'permissions'); $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($model); $this->assertEquals(1, $explicitReadWriteModelPermissions->getReadWritePermitablesCount()); $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables(); $this->assertTrue(isset($readWritePermitables[self::$groupTest->id])); //Test same as owner $form = new ExplicitReadWriteModelPermissionsWorkflowActionAttributeForm('WorkflowsTestModule', 'WorkflowModelTestItem'); $form->type = ExplicitReadWriteModelPermissionsWorkflowActionAttributeForm::TYPE_DYNAMIC_OWNER; $model = new WorkflowModelTestItem(); $model->lastName = 'test'; $model->string = 'test'; $saved = $model->save(); $this->assertTrue($saved); $adapter = new WorkflowActionProcessingModelAdapter($model, Yii::app()->user->userModel, $triggeredModel); $form->resolveValueAndSetToModel($adapter, 'permissions'); $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($model); $this->assertEquals(0, $explicitReadWriteModelPermissions->getReadWritePermitablesCount()); //Test everyone group $form = new ExplicitReadWriteModelPermissionsWorkflowActionAttributeForm('WorkflowsTestModule', 'WorkflowModelTestItem'); $form->type = ExplicitReadWriteModelPermissionsWorkflowActionAttributeForm::TYPE_DYNAMIC_EVERYONE_GROUP; $model = new WorkflowModelTestItem(); $model->lastName = 'test'; $model->string = 'test'; $saved = $model->save(); $this->assertTrue($saved); $adapter = new WorkflowActionProcessingModelAdapter($model, Yii::app()->user->userModel, $triggeredModel); $form->resolveValueAndSetToModel($adapter, 'permissions'); $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($model); $this->assertEquals(1, $explicitReadWriteModelPermissions->getReadWritePermitablesCount()); $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables(); $everyoneGroup = Group::getByName(Group::EVERYONE_GROUP_NAME); $this->assertTrue(isset($readWritePermitables[$everyoneGroup->id])); //Test a specific group $form = new ExplicitReadWriteModelPermissionsWorkflowActionAttributeForm('WorkflowsTestModule', 'WorkflowModelTestItem'); $form->type = self::$groupTest->id; $model = new WorkflowModelTestItem(); $model->lastName = 'test'; $model->string = 'test'; $saved = $model->save(); $this->assertTrue($saved); $adapter = new WorkflowActionProcessingModelAdapter($model, Yii::app()->user->userModel, $triggeredModel); $form->resolveValueAndSetToModel($adapter, 'permissions'); $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($model); $this->assertEquals(1, $explicitReadWriteModelPermissions->getReadWritePermitablesCount()); $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables(); $this->assertTrue(isset($readWritePermitables[self::$groupTest->id])); }
public function testEditAnAccountUserAfterTheCustomDateFieldNullValueBugForAccountsModule() { $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super'); $baseCurrency = Currency::getByCode(Yii::app()->currencyHelper->getBaseCode()); $account = Account::getByName('myNewAccount'); $accountId = $account[0]->id; //Edit and save the account. $this->setGetArray(array('id' => $accountId)); $this->setPostArray(array('Account' => array('name' => 'myNewAccount', 'officePhone' => '259-784-2169', 'industry' => array('value' => 'Automotive'), 'officeFax' => '299-845-7863', 'employees' => '930', 'annualRevenue' => '474000000', 'type' => array('value' => 'Prospect'), 'website' => 'http://www.Unnamed.com', 'primaryEmail' => array('emailAddress' => '*****@*****.**', 'optOut' => '1', 'isInvalid' => '0'), 'secondaryEmail' => array('emailAddress' => '', 'optOut' => '0', 'isInvalid' => '0'), 'billingAddress' => array('street1' => '6466 South Madison Creek', 'street2' => '', 'city' => 'Chicago', 'state' => 'IL', 'postalCode' => '60652', 'country' => 'USA'), 'shippingAddress' => array('street1' => '27054 West Michigan Lane', 'street2' => '', 'city' => 'Austin', 'state' => 'TX', 'postalCode' => '78759', 'country' => 'USA'), 'description' => 'This is a Description', 'explicitReadWriteModelPermissions' => array('type' => null), 'datenotreqCstm' => ''))); //setting null value $this->runControllerWithRedirectExceptionAndGetUrl('accounts/default/edit'); //Check the details if they are saved properly for the custom fields. $account = Account::getByName('myNewAccount'); //Retrieve the permission for the account. $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem(Account::getById($account[0]->id)); $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables(); $readOnlyPermitables = $explicitReadWriteModelPermissions->getReadOnlyPermitables(); $this->assertEquals(1, count($account)); $this->assertEquals($account[0]->name, 'myNewAccount'); $this->assertEquals($account[0]->officePhone, '259-784-2169'); $this->assertEquals($account[0]->industry->value, 'Automotive'); $this->assertEquals($account[0]->officeFax, '299-845-7863'); $this->assertEquals($account[0]->employees, '930'); $this->assertEquals($account[0]->annualRevenue, '474000000'); $this->assertEquals($account[0]->type->value, 'Prospect'); $this->assertEquals($account[0]->website, 'http://www.Unnamed.com'); $this->assertEquals($account[0]->primaryEmail->emailAddress, '*****@*****.**'); $this->assertEquals($account[0]->primaryEmail->optOut, '1'); $this->assertEquals($account[0]->primaryEmail->isInvalid, '0'); $this->assertEquals($account[0]->secondaryEmail->emailAddress, ''); $this->assertEquals($account[0]->secondaryEmail->optOut, '0'); $this->assertEquals($account[0]->secondaryEmail->isInvalid, '0'); $this->assertEquals($account[0]->billingAddress->street1, '6466 South Madison Creek'); $this->assertEquals($account[0]->billingAddress->street2, ''); $this->assertEquals($account[0]->billingAddress->city, 'Chicago'); $this->assertEquals($account[0]->billingAddress->state, 'IL'); $this->assertEquals($account[0]->billingAddress->postalCode, '60652'); $this->assertEquals($account[0]->billingAddress->country, 'USA'); $this->assertEquals($account[0]->shippingAddress->street1, '27054 West Michigan Lane'); $this->assertEquals($account[0]->shippingAddress->street2, ''); $this->assertEquals($account[0]->shippingAddress->city, 'Austin'); $this->assertEquals($account[0]->shippingAddress->state, 'TX'); $this->assertEquals($account[0]->shippingAddress->postalCode, '78759'); $this->assertEquals($account[0]->shippingAddress->country, 'USA'); $this->assertEquals($account[0]->description, 'This is a Description'); $this->assertEquals(0, count($readWritePermitables)); $this->assertEquals(0, count($readOnlyPermitables)); $this->assertEquals($account[0]->datenotreqCstm, null); }
/** * Before fixing this issue: https://www.pivotaltracker.com/story/show/58051244 * this test fails. After fixing it, it passes. */ public function testPermissionsResolveValueAndSetToModelUpdateWhenExplicitPermissionsNotSetImmediately() { //Setup a triggered model that has Sarah creating and owning it. $super = Yii::app()->user->userModel; Yii::app()->user->userModel = User::getByUsername('sarah'); $triggeredModel = new WorkflowModelTestItem(); $triggeredModel->lastName = 'test'; $triggeredModel->string = 'test'; $saved = $triggeredModel->save(); $this->assertTrue($saved); Yii::app()->user->userModel = $super; //Now the super is who modified it $triggeredModel->string = 'test2'; $saved = $triggeredModel->save(); $this->assertTrue($saved); //Test same as triggered where triggered is not owner $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($triggeredModel); $explicitReadWriteModelPermissions->addReadWritePermitable(self::$groupTest); $form = new ExplicitReadWriteModelPermissionsWorkflowActionAttributeForm('WorkflowsTestModule', 'WorkflowModelTestItem'); $form->type = ExplicitReadWriteModelPermissionsWorkflowActionAttributeForm::TYPE_DYNAMIC_SAME_AS_TRIGGERED_MODEL; $model = new WorkflowModelTestItem(); $model->lastName = 'test'; $model->string = 'test'; $triggeredModel->setExplicitReadWriteModelPermissionsForWorkflow($explicitReadWriteModelPermissions); $this->assertTrue($triggeredModel->getExplicitReadWriteModelPermissionsForWorkflow() instanceof ExplicitReadWriteModelPermissions); $saved = $model->save(); $this->assertTrue($saved); $adapter = new WorkflowActionProcessingModelAdapter($model, Yii::app()->user->userModel, $triggeredModel); $form->resolveValueAndSetToModel($adapter, 'permissions'); //Now after setting, officially set the permissions on the model and save. $success = ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($triggeredModel, $explicitReadWriteModelPermissions); $this->assertTrue($success); //Now check that the permissions match up $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($model); $this->assertEquals(1, $explicitReadWriteModelPermissions->getReadWritePermitablesCount()); $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables(); $this->assertTrue(isset($readWritePermitables[self::$groupTest->getClassId('Permitable')])); //Test clearing out the ExplicitReadWriteModelPermissionsForWorkflow $this->assertTrue($triggeredModel->getExplicitReadWriteModelPermissionsForWorkflow() instanceof ExplicitReadWriteModelPermissions); $triggeredModel->clearExplicitReadWriteModelPermissionsForWorkflow(); $this->assertTrue($triggeredModel->getExplicitReadWriteModelPermissionsForWorkflow() == null); }
/** * @covers resolveExplicitPermissionsForRequestedByUser */ public function testResolveExplicitPermissionsForRequestedByUser() { Yii::app()->user->userModel = User::getByUsername('super'); $mark = UserTestHelper::createBasicUser('mark'); $user = User::getByUsername('steven'); $tasks = Task::getByName('MyTest'); $task = $tasks[0]; $task->requestedByUser = $user; $this->assertTrue($task->save()); $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($task); $this->assertEquals($explicitReadWriteModelPermissions->getReadWritePermitablesCount(), 0); TasksUtil::resolveExplicitPermissionsForRequestedByUser($task, $mark, $user, $explicitReadWriteModelPermissions); $this->assertEquals($explicitReadWriteModelPermissions->getReadWritePermitablesCount(), 1); $this->assertEquals($explicitReadWriteModelPermissions->getReadWritePermitablesToRemoveCount(), 1); }
public function actionUpdateParticipants($id) { $postData = PostUtil::getData(); if (isset($postData['ConversationParticipantsForm'])) { $conversation = Conversation::getById((int) $id); $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($conversation); $currentUserWasParticipant = ConversationParticipantsUtil::isUserAParticipant($conversation, Yii::app()->user->userModel); $peopleAdded = ConversationParticipantsUtil::resolveConversationHasManyParticipantsFromPost($conversation, $postData['ConversationParticipantsForm'], $explicitReadWriteModelPermissions); ConversationParticipantsUtil::resolveEmailInvitesByPeople($conversation, $peopleAdded); $saved = $conversation->save(); if ($saved) { $success = ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($conversation, $explicitReadWriteModelPermissions); $currentUserIsParticipant = ConversationParticipantsUtil::isCurrentUserAParticipant($conversation); if ($currentUserWasParticipant && !$currentUserIsParticipant) { echo 'redirectToList'; } } else { throw new FailedToSaveModelException(); } } }
/** * @depends testMakeBySecurableItem */ public function testResolveExplicitReadWriteModelPermissions() { Yii::app()->user->userModel = User::getByUsername('super'); $accounts = Account::getByName('aTestAccount'); $this->assertEquals(1, count($accounts)); $account = $accounts[0]; $accountId = $account->id; $group4 = Group::getByName('Group4'); $group3 = Group::getByName('Group3'); $group2 = Group::getByName('Group2'); $explicitReadWriteModelPermissions = new ExplicitReadWriteModelPermissions(); $explicitReadWriteModelPermissions->addReadWritePermitableToRemove($group3); $explicitReadWriteModelPermissions->addReadWritePermitable($group4); ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($account, $explicitReadWriteModelPermissions); $account->forget(); $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem(Account::getById($accountId)); $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables(); $readOnlyPermitables = $explicitReadWriteModelPermissions->getReadOnlyPermitables(); $this->assertEquals(2, count($readWritePermitables)); $this->assertEquals(0, count($readOnlyPermitables)); $this->assertEquals($group2, $readWritePermitables[$group2->id]); $this->assertEquals($group4, $readWritePermitables[$group4->id]); }
/** * @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 }
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"); } }
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(); }
protected static function resolveAndMakeExplicitReadWriteModelPermissions($sanitizedData, $model) { return ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($model); }
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')]); }
/** * @depends testSuperUserAllSimpleControllerActions */ public function testSuperUserCreateMission() { $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super'); $mary = User::getByUsername('mary'); $missions = Mission::getAll(); $this->assertEquals(0, count($missions)); $this->setPostArray(array('Mission' => array('description' => 'TestDescription', 'reward' => 'Reward'))); $this->runControllerWithRedirectExceptionAndGetContent('missions/default/create'); //Confirm mission saved. $missions = Mission::getAll(); $this->assertEquals(1, count($missions)); $this->assertEquals('TestDescription', $missions[0]->description); $this->assertEquals(Mission::STATUS_AVAILABLE, $missions[0]->status); //Confirm everyone has read/write $everyoneGroup = Group::getByName(Group::EVERYONE_GROUP_NAME); $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($missions[0]); $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables(); $this->assertEquals(1, count($readWritePermitables)); $this->assertTrue(isset($readWritePermitables[$everyoneGroup->id])); //Confirm email was sent $this->assertEquals(1, Yii::app()->emailHelper->getQueuedCount()); $this->assertEquals(0, Yii::app()->emailHelper->getSentCount()); $emailMessages = EmailMessage::getAll(); //Dont send message to super neither to steven (he has turned off) $this->assertEquals(2, count($emailMessages[0]->recipients)); $this->assertEquals(4, count(User::getAll())); }
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); }
/** * @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 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; }