/** * * Get model properties as array. * return array */ public function getData() { $data = array(); $data['id'] = $this->model->id; $retrievableAttributes = static::resolveRetrievableAttributesByModel($this->model); foreach ($this->model->getAttributes($retrievableAttributes) as $attributeName => $notUsed) { $type = ModelAttributeToMixedArrayTypeUtil::getType($this->model, $attributeName); $adapterClassName = $type . 'RedBeanModelAttributeValueToArrayValueAdapter'; if ($type != null && @class_exists($adapterClassName) && !($this->model->isRelation($attributeName) && $this->model->getRelationType($attributeName) != RedBeanModel::HAS_ONE)) { $adapter = new $adapterClassName($this->model, $attributeName); $adapter->resolveData($data); } elseif ($this->model->isOwnedRelation($attributeName) && ($this->model->getRelationType($attributeName) == RedBeanModel::HAS_ONE || $this->model->getRelationType($attributeName) == RedBeanModel::HAS_MANY_BELONGS_TO)) { if ($this->model->{$attributeName}->id > 0) { $util = new ModelToArrayAdapter($this->model->{$attributeName}); $relatedData = $util->getData(); $data[$attributeName] = $relatedData; } else { $data[$attributeName] = null; } } elseif ($this->model->isRelation($attributeName) && $this->model->getRelationType($attributeName) == RedBeanModel::HAS_ONE) { if ($this->model->{$attributeName}->id > 0) { $data[$attributeName] = array('id' => $this->model->{$attributeName}->id); } else { $data[$attributeName] = null; } } } return $data; }
/** * @depends testDetailsJsonActionForWorkflow */ public function testDetailsJsonActionForWorkflowWithFiles() { $emailTemplateId = self::getModelIdByModelNameAndName('EmailTemplate', 'workflow 01'); $emailTemplate = EmailTemplate::getById($emailTemplateId); // attach some files $fileNames = array('testImage.png', 'testZip.zip', 'testPDF.pdf'); foreach ($fileNames as $fileName) { $emailTemplate->files->add(ZurmoTestHelper::createFileModel($fileName)); } $emailTemplate->save(); $emailTemplate->forgetAll(); unset($emailTemplate); $emailTemplate = EmailTemplate::getById($emailTemplateId); $emailTemplateDataUtil = new ModelToArrayAdapter($emailTemplate); $emailTemplateDetailsArray = $emailTemplateDataUtil->getData(); $this->assertNotEmpty($emailTemplateDetailsArray); $this->setGetArray(array('id' => $emailTemplateId, 'renderJson' => true, 'includeFilesInJson' => true)); // @ to avoid headers already sent error. $content = @$this->runControllerWithExitExceptionAndGetContent('emailTemplates/default/detailsJson'); $emailTemplateDetailsResolvedArray = CJSON::decode($content); $emailTemplateDetailsResolvedArrayWithoutFiles = $emailTemplateDetailsResolvedArray; unset($emailTemplateDetailsResolvedArrayWithoutFiles['filesIds']); $this->assertNotEmpty($emailTemplateDetailsResolvedArray); $this->assertNotEquals($emailTemplateDetailsArray, $emailTemplateDetailsResolvedArray); $this->assertEquals($emailTemplateDetailsArray, $emailTemplateDetailsResolvedArrayWithoutFiles); $this->assertNotEmpty($emailTemplateDetailsResolvedArray['filesIds']); $this->assertEquals($emailTemplate->files->count(), count($emailTemplateDetailsResolvedArray['filesIds'])); foreach ($emailTemplate->files as $index => $file) { $this->assertEquals($file->id, $emailTemplateDetailsResolvedArray['filesIds'][$index]); } }
protected function resolveEmailTemplateAsJson(EmailTemplate $emailTemplate, $includeFilesInJson) { $emailTemplateDataUtil = new ModelToArrayAdapter($emailTemplate); $emailTemplateData = $emailTemplateDataUtil->getData(); if ($includeFilesInJson) { $emailTemplateData['filesIds'] = array(); foreach ($emailTemplate->files as $file) { $emailTemplateData['filesIds'][] = $file->id; } } if ($emailTemplate->builtType == EmailTemplate::BUILT_TYPE_BUILDER_TEMPLATE) { unset($emailTemplateData['serializedData']); } $emailTemplateJson = CJSON::encode($emailTemplateData); return $emailTemplateJson; }
public function testGetDataWithHasOneRelatedModel() { $super = User::getByUsername('super'); Yii::app()->user->userModel = $super; $currencies = Currency::getAll(); $currencyValue = new CurrencyValue(); $currencyValue->value = 100; $currencyValue->currency = $currencies[0]; $this->assertEquals('USD', $currencyValue->currency->code); $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 = new ModelToArrayAdapterTestItem(); $testItem->firstName = 'Bob3'; $testItem->lastName = 'Bob3'; $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->owner = $super; $testItem->currencyValue = $currencyValue; $testItem->hasOne = $testItem2; $testItem->hasMany->add($testItem3_1); $testItem->hasMany->add($testItem3_2); $testItem->hasOneAlso = $testItem4; $createStamp = strtotime(DateTimeUtil::convertTimestampToDbFormatDateTime(time())); $this->assertTrue($testItem->save()); $id = $testItem->id; $testItem->forget(); unset($testItem); $testItem = ModelToArrayAdapterTestItem::getById($id); $adapter = new ModelToArrayAdapter($testItem); $data = $adapter->getData(); $compareData = array('id' => $id, 'firstName' => 'Bob3', 'lastName' => 'Bob3', 'boolean' => 1, 'date' => '2002-04-03', 'dateTime' => '2002-04-03 02:00:43', 'float' => 54.22, 'integer' => 10, 'phone' => '21313213', 'string' => 'aString', 'textArea' => 'Some Text Area', 'url' => 'http://www.asite.com', 'currencyValue' => array('id' => $currencyValue->id, 'value' => 100, 'rateToBase' => 1, 'currency' => array('id' => $currencies[0]->id)), 'dropDown' => null, 'radioDropDown' => null, 'hasOne' => array('id' => $testItem2->id), 'hasOneAlso' => array('id' => $testItem4->id), 'primaryEmail' => null, 'primaryAddress' => null, 'secondaryEmail' => null, 'owner' => array('id' => $super->id, 'username' => 'super'), 'createdByUser' => array('id' => $super->id, 'username' => 'super'), 'modifiedByUser' => array('id' => $super->id, 'username' => 'super'), 'multiDropDown' => array('values' => null), 'tagCloud' => array('values' => null)); // Because small delay in IO operation, allow tresholds $this->assertEquals($createStamp, strtotime($data['createdDateTime']), '', 2); $this->assertEquals($createStamp, strtotime($data['modifiedDateTime']), '', 2); unset($data['createdDateTime']); unset($data['modifiedDateTime']); $this->assertEquals($compareData, $data); }
protected function resolveEmailTemplateAsJson(EmailTemplate $emailTemplate, $includeFilesInJson) { $emailTemplateDataUtil = new ModelToArrayAdapter($emailTemplate); $emailTemplateData = $emailTemplateDataUtil->getData(); if ($includeFilesInJson) { $emailTemplateData['filesIds'] = array(); foreach ($emailTemplate->files as $file) { $emailTemplateData['filesIds'][] = $file->id; } } $emailTemplateJson = CJSON::encode($emailTemplateData); return $emailTemplateJson; }
/** * @depends testSuperUserEditActionForWorkflow */ public function testSuperUserDetailsJsonActionForWorkflow() { $emailTemplateId = self::getModelIdByModelNameAndName('EmailTemplate', 'New Test Workflow Email Template 00'); $emailTemplate = EmailTemplate::getById($emailTemplateId); $emailTemplateDataUtil = new ModelToArrayAdapter($emailTemplate); $emailTemplateDetailsArray = $emailTemplateDataUtil->getData(); $this->assertNotEmpty($emailTemplateDetailsArray); $this->setGetArray(array('id' => $emailTemplateId, 'renderJson' => true)); // @ to avoid headers already sent error. $content = @$this->runControllerWithExitExceptionAndGetContent('emailTemplates/default/details'); $emailTemplateDetailsResolvedArray = CJSON::decode($content); $this->assertNotEmpty($emailTemplateDetailsResolvedArray); $this->assertEquals($emailTemplateDetailsArray, $emailTemplateDetailsResolvedArray); }