54 $modelAttributeAndElementDataToMergeItemClass
57 assert(
'is_string($preContentViewClass)');
58 assert(
'is_array($selectedModels)');
59 assert(
'$primaryModel instanceof RedBeanModel');
60 assert(
'is_string($modelAttributeAndElementDataToMergeItemClass)');
62 if ($element->getAttribute() !=
'null')
64 $attributes = array($element->getAttribute());
68 $elementClassName = get_class($element);
69 $attributes = $elementClassName::getModelAttributeNames();
71 $preContent = Yii::app()->getController()->widget(
74 'selectedModels' => $selectedModels,
75 'attributes' => $attributes,
76 'primaryModel' => $primaryModel,
77 'element' => $element,
78 'modelAttributeAndElementDataToMergeItemClass'
79 => $modelAttributeAndElementDataToMergeItemClass
82 $element->editableTemplate =
'<th>{label}</th><td colspan="{colspan}">' . $preContent .
'{content}{error}</td>';
92 assert(
'$model instanceof ModelsListDuplicateMergedModelForm');
93 assert(
'is_array($getData)');
94 $modelsList = $model->selectedModels;
95 if (isset($getData[
'primaryModelId']))
97 $model->primaryModel = $modelsList[$getData[
'primaryModelId']];
101 $models = array_values($modelsList);
104 $model->primaryModel = $models[0];
117 assert(
'is_string($modelClassName)');
118 assert(
'is_array($getData)');
119 $modelsList = array();
120 if (isset($getData[
'selectedIds']) && $getData[
'selectedIds'] != null)
122 $selectedIds = explode(
',', $getData[
'selectedIds']);
123 foreach ($selectedIds as $id)
125 $model = $modelClassName::getById(intval($id));
126 $modelsList[$id] = $model;
139 assert(
'$primaryModel instanceof RedBeanModel');
140 assert(
'is_array($getData)');
141 $modelClassName = get_class($primaryModel);
142 $selectedModelsList = self::getSelectedModelsListForMerge($modelClassName, $getData);
143 self::processAssignRelationsToMergedModelFromModelsToBeDeleted($selectedModelsList, $primaryModel);
144 foreach ($selectedModelsList as $selectedModel)
146 if ($selectedModel->id != $primaryModel->id
147 &&(get_class($selectedModel) == get_class($primaryModel)))
150 $selectedModel->delete();
162 assert(
'is_array($selectedModelsList)');
163 foreach ($selectedModelsList as $selectedModel)
165 if ($selectedModel->getClassId(
'Item') != $primaryModel->getClassId(
'Item') &&
166 (get_class($selectedModel) == get_class($primaryModel)))
168 self::processNonDerivedRelationsAssignment($primaryModel, $selectedModel);
169 self::processDerivedRelationsAssignment($primaryModel, $selectedModel);
170 if ($primaryModel instanceof
Account || $primaryModel instanceof
Contact)
172 self::processCopyEmailActivity($primaryModel, $selectedModel);
176 $primaryModel->save();
186 assert(
'$primaryModel instanceof RedBeanModel');
187 assert(
'$selectedModel instanceof RedBeanModel');
188 $modelClassName = get_class($primaryModel);
189 foreach ($selectedModel->attributeNames() as $attribute)
191 if ($attribute ==
'owner')
195 if ($modelClassName::isRelation($attribute) &&
196 !$modelClassName::isOwnedRelation($attribute) &&
197 !$primaryModel->isAttributeReadOnly($attribute))
200 if ($modelClassName::isRelationTypeAHasOneVariant($attribute))
202 $primaryModel->$attribute = $selectedModel->$attribute;
205 if (($modelClassName::isRelationTypeAHasManyVariant($attribute) ||
206 $modelClassName::isRelationTypeAManyManyVariant($attribute)) &&
210 foreach ($selectedModel->$attribute as $offset => $relatedModel)
212 if (!$primaryModel->$attribute->contains($relatedModel))
214 $primaryModel->$attribute->add($relatedModel);
229 assert(
'$primaryModel instanceof RedBeanModel');
230 assert(
'$selectedModel instanceof RedBeanModel');
231 $metadata = $selectedModel->getMetadata();
232 foreach ($metadata as $modelClassName => $modelClassMetadata)
234 if (isset($metadata[$modelClassName][
"derivedRelationsViaCastedUpModel"]))
236 foreach ($metadata[$modelClassName][
"derivedRelationsViaCastedUpModel"] as $relation => $derivedRelationData)
238 $opposingModelClassName = $derivedRelationData[1];
239 $opposingRelation = $derivedRelationData[2];
240 if ($opposingRelation ==
'activityItems' &&
241 is_subclass_of($opposingModelClassName,
'Activity'))
243 $opposingModels = $opposingModelClassName::getByActivityItemsCastedDown($selectedModel->getClassId(
'Item'));
244 if ($opposingModels != null)
246 foreach ($opposingModels as $opposingModel)
248 $opposingModel->activityItems->add($primaryModel);
249 $opposingModel->save();
265 $modifiedElementsData = array();
266 foreach ($metadata[
'global'][
'panels'] as $panel)
268 foreach ($panel[
'rows'] as $row)
270 foreach ($row[
'cells'] as $cell)
272 foreach ($cell[
'elements'] as $elementData)
274 if ($elementData[
'attributeName'] ==
'null' && !class_exists($elementData[
'type'] .
'Element'))
278 elseif ($elementData[
'type'] ==
'TitleFullName')
280 $modifiedElementsData[] = array(
'attributeName' =>
'title',
'type' =>
'DropDown',
'addBlank' =>
true);
281 $modifiedElementsData[] = array(
'attributeName' =>
'firstName',
'type' =>
'Text');
282 $modifiedElementsData[] = array(
'attributeName' =>
'lastName',
'type' =>
'Text');
286 $modifiedElementsData[] = $elementData;
293 $panelsData = array();
294 foreach ($modifiedElementsData as $row => $elementData)
296 $panelsData[0][
'rows'][$row][
'cells'][0][
'elements'][0] = $elementData;
298 $metadata[
'global'][
'panels'] = $panelsData;
312 array($selectedModel->getClassId(
'Item')),
313 LatestActivitiesConfigurationForm::OWNED_BY_FILTER_ALL);
318 if (isset($searchAttributesData[1][
'EmailMessage']))
323 foreach ($models as $model)
326 if ($model->sender->personsOrAccounts->contains($selectedModel))
328 $model->sender->personsOrAccounts->remove($selectedModel);
329 if (!$model->sender->personsOrAccounts->contains($primaryModel))
331 $model->sender->personsOrAccounts->add($primaryModel);
335 foreach ($model->recipients as $key => $unused)
337 if ($model->recipients[$key]->personsOrAccounts->contains($selectedModel))
339 $model->recipients[$key]->personsOrAccounts->remove($selectedModel);
340 if (!$model->recipients[$key]->personsOrAccounts->contains($primaryModel))
342 $model->recipients[$key]->personsOrAccounts->add($primaryModel);
static processCopyEmailActivity($primaryModel, $selectedModel)
static processCopyRelationsAndDeleteNonPrimaryModelsInMerge($primaryModel, $getData)
static processDerivedRelationsAssignment($primaryModel, $selectedModel)
static getSelectedModelsListForMerge($modelClassName, $getData)
static resolveAccessCanCurrentUserDeleteModel(RedBeanModel $model, $fromAjax=false)
static getSearchAttributesDataByModelClassNamesAndRelatedItemIds($modelClassNames, $relationItemIds, $ownedByFilter)
static makeWhere($modelClassName, array $metadata, &$joinTablesAdapter)
static setPrimaryModelForListViewMerge($model, $getData)
static resolveFormLayoutMetadataForOneColumnDisplay($metadata)
static getSubset(RedBeanModelJoinTablesQueryAdapter $joinTablesAdapter=null, $offset=null, $count=null, $where=null, $orderBy=null, $modelClassName=null, $selectDistinct=false)
static processNonDerivedRelationsAssignment($primaryModel, $selectedModel)
static processAssignRelationsToMergedModelFromModelsToBeDeleted($selectedModelsList, $primaryModel)
const HAS_MANY_BELONGS_TO
static resolveElementDuringFormLayoutRenderForListViewMerge(&$element, $preContentViewClass, $selectedModels, $primaryModel, $modelAttributeAndElementDataToMergeItemClass)