public function testGetSearchAttributesDataByModelClassNamesAndRelatedItemIds() { Yii::app()->user->userModel = User::getByUsername('super'); $modelClassNames = array('Meeting', 'Task', 'Note'); $relationItemIds = array(5, 7, 9); $searchAttributesData = LatestActivitiesUtil::getSearchAttributesDataByModelClassNamesAndRelatedItemIds($modelClassNames, $relationItemIds, LatestActivitiesConfigurationForm::OWNED_BY_FILTER_ALL); $compareSearchAttributesData = array(); $compareSearchAttributesData['Meeting']['clauses'] = array(1 => array('attributeName' => 'activityItems', 'relatedAttributeName' => 'id', 'operatorType' => 'oneOf', 'value' => array(5, 7, 9)), 2 => array('attributeName' => 'startDateTime', 'operatorType' => 'lessThan', 'value' => DateTimeUtil::convertTimestampToDbFormatDateTime(time())), 3 => array('attributeName' => 'logged', 'operatorType' => 'equals', 'value' => true)); $compareSearchAttributesData['Meeting']['structure'] = '1 and (2 or 3)'; $compareSearchAttributesData['Task']['clauses'] = array(1 => array('attributeName' => 'activityItems', 'relatedAttributeName' => 'id', 'operatorType' => 'oneOf', 'value' => array(5, 7, 9)), 2 => array('attributeName' => 'completed', 'operatorType' => 'equals', 'value' => (bool) 1)); $compareSearchAttributesData['Task']['structure'] = '1 and 2'; $compareSearchAttributesData['Note']['clauses'] = array(1 => array('attributeName' => 'activityItems', 'relatedAttributeName' => 'id', 'operatorType' => 'oneOf', 'value' => array(5, 7, 9))); $compareSearchAttributesData['Note']['structure'] = '1'; $this->assertEquals($compareSearchAttributesData['Meeting'], $searchAttributesData[0]['Meeting']); $this->assertEquals($compareSearchAttributesData['Task'], $searchAttributesData[1]['Task']); $this->assertEquals($compareSearchAttributesData['Note'], $searchAttributesData[2]['Note']); $searchAttributesData = LatestActivitiesUtil::getSearchAttributesDataByModelClassNamesAndRelatedItemIds($modelClassNames, $relationItemIds, LatestActivitiesConfigurationForm::OWNED_BY_FILTER_USER); $compareSearchAttributesData['Meeting']['structure'] = '1 and (2 or 3) and 4'; $compareSearchAttributesData['Meeting']['clauses'][4] = array('attributeName' => 'owner', 'operatorType' => 'equals', 'value' => Yii::app()->user->userModel->id); $compareSearchAttributesData['Task']['structure'] = '1 and 2 and 3'; $compareSearchAttributesData['Task']['clauses'][3] = array('attributeName' => 'owner', 'operatorType' => 'equals', 'value' => Yii::app()->user->userModel->id); $compareSearchAttributesData['Note']['structure'] = '1 and 2'; $compareSearchAttributesData['Note']['clauses'][2] = array('attributeName' => 'owner', 'operatorType' => 'equals', 'value' => Yii::app()->user->userModel->id); $this->assertEquals($compareSearchAttributesData['Meeting'], $searchAttributesData[0]['Meeting']); $this->assertEquals($compareSearchAttributesData['Task'], $searchAttributesData[1]['Task']); $this->assertEquals($compareSearchAttributesData['Note'], $searchAttributesData[2]['Note']); }
protected function getDataProvider($uniquePageId, $form) { assert('is_string($uniquePageId)'); assert('$form instanceOf LatestActivitiesConfigurationForm'); $pageSize = Yii::app()->pagination->resolveActiveForCurrentUserByType('subListPageSize'); $filteredMashableModelClassNames = LatestActivitiesUtil::resolveMashableModelClassNamesByFilteredBy(array_keys($form->mashableModelClassNamesAndDisplayLabels), $form->filteredByModelName); $modelClassNamesAndSearchAttributeData = LatestActivitiesUtil::getSearchAttributesDataByModelClassNamesAndRelatedItemIds($filteredMashableModelClassNames, array(), $form->ownedByFilter); $modelClassNamesAndSortAttributes = LatestActivitiesUtil::getSortAttributesByMashableModelClassNames($filteredMashableModelClassNames); return new RedBeanModelsDataProvider($uniquePageId, $modelClassNamesAndSortAttributes, true, $modelClassNamesAndSearchAttributeData, array('pagination' => array('pageSize' => $pageSize))); }
/** * Process copy email activity. * * @param RedBeanModel $primaryModel * @param RedBeanModel $selectedModel */ public static function processCopyEmailActivity($primaryModel, $selectedModel) { $searchAttributesData = LatestActivitiesUtil::getSearchAttributesDataByModelClassNamesAndRelatedItemIds(array('EmailMessage'), array($selectedModel->getClassId('Item')), LatestActivitiesConfigurationForm::OWNED_BY_FILTER_ALL); $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter('EmailMessage'); $where = RedBeanModelDataProvider::makeWhere('EmailMessage', $searchAttributesData[0]['EmailMessage'], $joinTablesAdapter); $models = EmailMessage::getSubset($joinTablesAdapter, null, null, $where, null); if (isset($searchAttributesData[1]['EmailMessage'])) { $where = RedBeanModelDataProvider::makeWhere('EmailMessage', $searchAttributesData[1]['EmailMessage'], $joinTablesAdapter); $models = array_merge($models, EmailMessage::getSubset($joinTablesAdapter, null, null, $where, null)); } foreach ($models as $model) { //Resolve sender if ($model->sender->personsOrAccounts->contains($selectedModel)) { $model->sender->personsOrAccounts->remove($selectedModel); if (!$model->sender->personsOrAccounts->contains($primaryModel)) { $model->sender->personsOrAccounts->add($primaryModel); } } //recipients foreach ($model->recipients as $key => $unused) { if ($model->recipients[$key]->personsOrAccounts->contains($selectedModel)) { $model->recipients[$key]->personsOrAccounts->remove($selectedModel); if (!$model->recipients[$key]->personsOrAccounts->contains($primaryModel)) { $model->recipients[$key]->personsOrAccounts->add($primaryModel); } } } $model->save(); } }
/** * @param string $uniquePageId * @param LatestActivitiesConfigurationForm $form * @return RedBeanModelsDataProvider */ protected function getDataProvider($uniquePageId, $form) { assert('is_string($uniquePageId)'); assert('$form instanceOf LatestActivitiesConfigurationForm'); $pageSize = Yii::app()->pagination->resolveActiveForCurrentUserByType('subListPageSize'); $filteredMashableModelClassNames = LatestActivitiesUtil::resolveMashableModelClassNamesByFilteredBy(array_keys($form->mashableModelClassNamesAndDisplayLabels), $form->filteredByModelName); $relationItemId = (int) $this->params['relationModel']->getClassId('Item'); if ($form->rollup) { $relationItemsIds = ModelRollUpUtil::getItemIdsByModelAndUser($this->params['relationModel'], Yii::app()->user->userModel); } else { $relationItemsIds = array($relationItemId); } $modelClassNamesAndSearchAttributeData = LatestActivitiesUtil::getSearchAttributesDataByModelClassNamesAndRelatedItemIds($filteredMashableModelClassNames, $relationItemsIds, $form->ownedByFilter); $modelClassNamesAndSortAttributes = LatestActivitiesUtil::getSortAttributesByMashableModelClassNames($filteredMashableModelClassNames); return new RedBeanModelsDataProvider($uniquePageId, $modelClassNamesAndSortAttributes, true, $modelClassNamesAndSearchAttributeData, array('pagination' => array('pageSize' => $pageSize))); }