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)));
 }