/**
  * @param   string $moduleName
  * @param   bool $forceEmptyResults
  * Return an empty listView
  * @return  View
  */
 public function getListView($moduleName, $forceEmptyResults = false)
 {
     assert('is_string($moduleName)');
     $pageSize = $this->pageSize;
     $module = Yii::app()->findModule($moduleName);
     $searchFormClassName = $module::getGlobalSearchFormClassName();
     $modelClassName = $module::getPrimaryModelName();
     $model = new $modelClassName(false);
     $searchForm = new $searchFormClassName($model);
     $sanitizedSearchAttributes = MixedTermSearchUtil::getGlobalSearchAttributeByModuleAndPartialTerm($module, $this->term);
     $metadataAdapter = new SearchDataProviderMetadataAdapter($searchForm, $this->user->id, $sanitizedSearchAttributes);
     $listViewClassName = $module::getPluralCamelCasedName() . 'ForMixedModelsSearchListView';
     $sortAttribute = SearchUtil::resolveSortAttributeFromGetArray($modelClassName);
     $sortDescending = SearchUtil::resolveSortDescendingFromGetArray($modelClassName);
     if ($forceEmptyResults) {
         $dataProviderClass = 'EmptyRedBeanModelDataProvider';
         $emptyText = '';
     } else {
         $dataProviderClass = 'RedBeanModelDataProvider';
         $emptyText = null;
     }
     $dataProvider = RedBeanModelDataProviderUtil::makeDataProvider($metadataAdapter->getAdaptedMetadata(false), $modelClassName, $dataProviderClass, $sortAttribute, $sortDescending, $pageSize, $module->getStateMetadataAdapterClassName());
     $listView = new $listViewClassName('default', $module->getId(), $modelClassName, $dataProvider, GetUtil::resolveSelectedIdsFromGet(), '-' . $moduleName, array('route' => '', 'class' => 'SimpleListLinkPager', 'firstPageLabel' => '<span>first</span>', 'prevPageLabel' => '<span>previous</span>', 'nextPageLabel' => '<span>next</span>', 'lastPageLabel' => '<span>last</span>'));
     $listView->setRowsAreSelectable(false);
     $listView->setEmptyText($emptyText);
     return $listView;
 }
 /**
  * Supports setting metadata on both models.  The MyListForm model and the SearchModel
  * @see ModalConfigEditView::setMetadataFromPost()
  */
 public function setMetadataFromPost($postArray)
 {
     parent::setMetadataFromPost($postArray);
     $sanitizedPostArray = PostUtil::sanitizePostByDesignerTypeForSavingModel($this->searchModel, ArrayUtil::getArrayValue($_POST, $this->getSearchModelPostArrayName()));
     $searchAttributes = SearchUtil::getSearchAttributesFromSearchArrayForSavingExistingSearchCriteria($sanitizedPostArray);
     $searchAttributesAdaptedToSetInModel = SearchUtil::adaptSearchAttributesToSetInRedBeanModel($searchAttributes, $this->searchModel);
     $this->searchAttributes = $searchAttributesAdaptedToSetInModel;
 }
		private function getQueryKey ()
		{
			$optionsCopy = $this->searchOptions;
			$optionsCopy->clVars['query'] = SearchUtil::getKey ($this->searchOptions->clVars['query']);
			
			return
				$this->searchOptions->clType . 
				'/' . 
				md5 (serialize ($optionsCopy));
		}
 public function resolveSearchAttributesFromSourceData()
 {
     $anyMixedAttributes = SearchUtil::resolveSearchAttributesFromGetArray(get_class($this->model), get_class($this->model));
     if ($anyMixedAttributes != null) {
         return $anyMixedAttributes;
     }
     if ($this->model->anyMixedAttributes != null) {
         //might need to run this through the @see SearchUtil::getSearchAttributesFromSearchArray but not sure.
         return array('anyMixedAttributes' => $this->model->anyMixedAttributes);
     }
     return array();
 }
示例#5
0
 /**
  * Utilizes information from the dataCollection object to
  * make a RedBeanDataProvider.  Either looks at saved search information or params in the $_GET array.
  * variables:
  *  modelName_sort
  *  modelName
  *  where modelName is Account for example.
  * Typically utilized by a listView action.
  */
 public function makeRedBeanDataProviderByDataCollection($searchModel, $pageSize, $stateMetadataAdapterClassName = null, $dataCollection = null)
 {
     assert('is_int($pageSize)');
     assert('$stateMetadataAdapterClassName == null || is_string($stateMetadataAdapterClassName)');
     assert('$dataCollection instanceof SearchAttributesDataCollection || $dataCollection == null');
     $listModelClassName = get_class($searchModel->getModel());
     if ($dataCollection == null) {
         $dataCollection = new SearchAttributesDataCollection($searchModel);
     }
     $searchAttributes = $dataCollection->resolveSearchAttributesFromSourceData();
     $dataCollection->resolveAnyMixedAttributesScopeForSearchModelFromSourceData();
     $dataCollection->resolveSelectedListAttributesForSearchModelFromSourceData();
     $sanitizedSearchAttributes = GetUtil::sanitizePostByDesignerTypeForSavingModel($searchModel, $searchAttributes);
     $sortAttribute = SearchUtil::resolveSortAttributeFromGetArray($listModelClassName);
     $sortDescending = SearchUtil::resolveSortDescendingFromGetArray($listModelClassName);
     $metadataAdapter = new SearchDataProviderMetadataAdapter($searchModel, Yii::app()->user->userModel->id, $sanitizedSearchAttributes);
     $metadata = static::resolveDynamicSearchMetadata($searchModel, $metadataAdapter->getAdaptedMetadata(), $dataCollection);
     return RedBeanModelDataProviderUtil::makeDataProvider($metadata, $listModelClassName, 'RedBeanModelDataProvider', $sortAttribute, $sortDescending, $pageSize, $stateMetadataAdapterClassName);
 }
示例#6
0
 protected function makeDataProviderBySearchAttributeData($searchAttributeData)
 {
     assert('is_array($searchAttributeData)');
     $pageSize = Yii::app()->pagination->resolveActiveForCurrentUserByType('subListPageSize');
     $sortAttribute = SearchUtil::resolveSortAttributeFromGetArray($this->modelClassName);
     $sortDescending = SearchUtil::resolveSortDescendingFromGetArray($this->modelClassName);
     return new RedBeanModelDataProvider($this->modelClassName, $sortAttribute, (bool) $sortDescending, $searchAttributeData, array('pagination' => array('pageSize' => $pageSize)));
 }
示例#7
0
 /**
  * @param string $getArrayName
  */
 public static function getDynamicSearchAttributesFromGetArray($getArrayName)
 {
     assert('is_string($getArrayName)');
     if (!empty($_GET[$getArrayName]) && isset($_GET[$getArrayName][DynamicSearchForm::DYNAMIC_NAME])) {
         $dynamicSearchAttributes = SearchUtil::getSearchAttributesFromSearchArray($_GET[$getArrayName][DynamicSearchForm::DYNAMIC_NAME]);
         if (isset($dynamicSearchAttributes[DynamicSearchForm::DYNAMIC_STRUCTURE_NAME])) {
             unset($dynamicSearchAttributes[DynamicSearchForm::DYNAMIC_STRUCTURE_NAME]);
         }
         foreach ($dynamicSearchAttributes as $key => $data) {
             if (is_string($data) && $data == 'undefined' || $data == null) {
                 unset($dynamicSearchAttributes[$key]);
             }
         }
         return $dynamicSearchAttributes;
     }
 }
 /**
  * @depends testSetAndGetMultiSelectDropDownAttribute
  */
 public function testSearchForMultiSelectDropDownAttributePlacedForAccountsModule()
 {
     //Test that the multiple select attribute can query properly for search.
     $super = User::getByUsername('super');
     Yii::app()->user->userModel = $super;
     //Create an account to test searching multiple fields on for search.
     $account = new Account();
     $this->assertEquals(1, $account->testHobbiesCstm->values->count());
     $account->name = 'my test account';
     $account->owner = Yii::app()->user->userModel;
     $customFieldValue2 = new CustomFieldValue();
     $customFieldValue2->value = 'Reading';
     $account->testHobbiesCstm->values->add($customFieldValue2);
     $this->assertTrue($account->save());
     $accountId = $account->id;
     $account = Account::getById($accountId);
     $this->assertEquals(2, $account->testHobbiesCstm->values->count());
     $this->assertContains('Writing', $account->testHobbiesCstm->values);
     $this->assertContains('Reading', $account->testHobbiesCstm->values);
     //Create a second account with different hobbies
     $account = new Account();
     //Remove the default value of 'Writing';
     $account->testHobbiesCstm->values->removeByIndex(0);
     $account->name = 'my test account2';
     $account->owner = Yii::app()->user->userModel;
     $customFieldValue1 = new CustomFieldValue();
     $customFieldValue1->value = 'Singing';
     $account->testHobbiesCstm->values->add($customFieldValue1);
     $customFieldValue2 = new CustomFieldValue();
     $customFieldValue2->value = 'Surfing';
     $account->testHobbiesCstm->values->add($customFieldValue2);
     $this->assertTrue($account->save());
     $accountId = $account->id;
     $account = Account::getById($accountId);
     $this->assertEquals(2, $account->testHobbiesCstm->values->count());
     $this->assertContains('Singing', $account->testHobbiesCstm->values);
     $this->assertContains('Surfing', $account->testHobbiesCstm->values);
     //Searching with a custom field that is not blank should not produce an errors.
     $searchPostData = array('name' => 'my test account', 'officePhone' => '', 'testHobbies' => array('values' => array(0 => '')), 'officeFax' => '');
     $modifiedSearchPostData = SearchUtil::getSearchAttributesFromSearchArray($searchPostData);
     $this->assertEquals(array('name' => 'my test account', 'officePhone' => null, 'officeFax' => null), $modifiedSearchPostData);
     $account = new Account(false);
     $searchForm = new AccountsSearchForm($account);
     $metadataAdapter = new SearchDataProviderMetadataAdapter($searchForm, $super->id, $modifiedSearchPostData);
     $searchAttributeData = $metadataAdapter->getAdaptedMetadata();
     //Make sure the search params are empty
     $compareClauses = array(1 => array('attributeName' => 'name', 'operatorType' => 'startsWith', 'value' => 'my test account'));
     $compareStructure = '1';
     $this->assertEquals($compareClauses, $searchAttributeData['clauses']);
     $this->assertEquals($compareStructure, $searchAttributeData['structure']);
     //Run search and make sure the data returned matches how many total accounts are available.
     $dataProvider = new RedBeanModelDataProvider('Account', null, false, $searchAttributeData);
     $data = $dataProvider->getData();
     $this->assertEquals(2, count($data));
 }
 public function resolveFilteredByFromSourceData()
 {
     SearchUtil::resolveFilteredByFromArray($this->model, get_class($this->model), $this->getSourceData());
 }
示例#10
0
 protected function makeDataProviderBySearchAttributeData($searchAttributeData)
 {
     assert('is_array($searchAttributeData)');
     list($sortAttribute, $sortDescending) = SearchUtil::resolveSortFromStickyData($this->modelClassName, $this->uniqueLayoutId);
     $pageSize = Yii::app()->pagination->resolveActiveForCurrentUserByType('dashboardListPageSize');
     $redBeanModelDataProvider = new RedBeanModelDataProvider($this->modelClassName, $sortAttribute, $sortDescending, $searchAttributeData, array('pagination' => array('pageSize' => $pageSize)));
     $sort = new RedBeanSort($redBeanModelDataProvider->modelClassName);
     $sort->sortVar = $redBeanModelDataProvider->getId() . '_sort';
     $sort->route = 'default/index';
     $redBeanModelDataProvider->setSort($sort);
     return $redBeanModelDataProvider;
 }
 private function makeDataCollectionAndResolveSavedSearch($searchModel, $stickySearchKey = null, $setSticky = true)
 {
     $dataCollection = new SearchAttributesDataCollection($searchModel);
     if ($searchModel instanceof SavedDynamicSearchForm) {
         $getData = GetUtil::getData();
         if ($stickySearchKey != null && isset($getData['clearingSearch']) && $getData['clearingSearch']) {
             StickySearchUtil::clearDataByKey($stickySearchKey);
         }
         if ($stickySearchKey != null && null != ($stickySearchData = StickySearchUtil::getDataByKey($stickySearchKey))) {
             SavedSearchUtil::resolveSearchFormByStickyDataAndModel($stickySearchData, $searchModel);
             SavedSearchUtil::resolveSearchFormByStickySortData($getData, $searchModel, $stickySearchData);
             SearchUtil::resolveSearchFormByStickyFilterByStarredData($getData, $searchModel, $stickySearchData);
             SearchUtil::resolveSearchFormByStickyFilteredByData($getData, $searchModel, $stickySearchData);
             SearchUtil::resolveSearchFormByStickyFilteredByData($getData, $searchModel, $stickySearchData);
             $dataCollection = new SavedSearchAttributesDataCollection($searchModel);
         } else {
             SavedSearchUtil::resolveSearchFormByData($getData, $searchModel);
             if ($searchModel->savedSearchId != null) {
                 $dataCollection = new SavedSearchAttributesDataCollection($searchModel);
             }
         }
         if ($stickySearchKey != null && ($setSticky || $searchModel->getKanbanBoard() != null && $searchModel->getKanbanBoard()->getClearSticky())) {
             if ($stickySearchData == null) {
                 $stickySearchData = array();
             }
             SavedSearchUtil::setDataByKeyAndDataCollection($stickySearchKey, $dataCollection, $stickySearchData);
         }
         $searchModel->loadSavedSearchUrl = Yii::app()->createUrl($this->getModule()->getId() . '/' . $this->getId() . '/list/');
     }
     return $dataCollection;
 }
示例#12
0
 /**
  * Checks if the empty values are properly converted to null when nested
  */
 public function testGetSearchAttributesFromSearchArrayWithRecursiveNullResolution()
 {
     $searchArray = array('a' => 'apple', 'b' => array('relatedModelData' => true, 'bMember' => ''), 'c' => array('relatedModelData' => true, 'd' => array('relatedModelData' => true, 'dMember' => '')));
     $testArray = array('a' => 'apple', 'b' => array('relatedModelData' => true, 'bMember' => null), 'c' => array('relatedModelData' => true, 'd' => array('relatedModelData' => true, 'dMember' => null)));
     $newArray = SearchUtil::getSearchAttributesFromSearchArray($searchArray);
     $this->assertEquals($testArray, $newArray);
 }
示例#13
0
?>
	
			</div>
    		<div class="next left nav"><img width="10" height="10" src="<?php 
echo $_zp_themeroot;
?>
/resources/images/chevron.png" /></div>
			<div class="clear"></div>
		</div>
	</div>	
	<div>
	<?php 
foreach ($years as $year => $months) {
    echo "<div id='year-detail-wrapper-{$year}' class='year-detail-wrapper'><ul id='year-detail-{$year}' class='year-detail'>";
    foreach ($months as $month => $a) {
        $link = SearchUtil::getArchiveMonthLink($year, $month, $a[0], $a[1], 'a');
        echo "<li text='{$month} {$year}'>{$link}</li>";
    }
    echo "</ul></div>\n";
}
?>
	</div>
</div>

<div id="image-wrap-scroll" class="archive">
	<div>
		<div id="image-wrapper">
			<div id="image-full-preview-container" class="opa80"></div>
		</div>	
	</div>
 protected function makeDataProviderBySearchAttributeData($searchAttributeData)
 {
     assert('is_array($searchAttributeData)');
     $sortAttribute = SearchUtil::resolveSortAttributeFromArray($this->modelClassName, $_GET);
     $sortDescending = SearchUtil::resolveSortDescendingFromArray($this->modelClassName, $_GET);
     if ($sortAttribute === null) {
         $sortAttribute = $this->getSortAttributeForDataProvider();
         $sortDescending = $this->resolveSortDescendingForDataProvider();
     }
     return new RedBeanModelDataProvider($this->modelClassName, $sortAttribute, (bool) $sortDescending, $searchAttributeData, $this->resolveConfigForDataProvider());
 }
 protected function resolveAndSanitizeDynamicSearchAttributesByPostData($postData, DynamicSearchForm $searchForm)
 {
     if (isset($postData['dynamicClauses'])) {
         $dynamicSearchAttributes = SearchUtil::getSearchAttributesFromSearchArray($postData['dynamicClauses']);
         $sanitizedDynamicSearchAttributes = SearchUtil::sanitizeDynamicSearchAttributesByDesignerTypeForSavingModel($searchForm, $dynamicSearchAttributes);
         $postData['dynamicClauses'] = $sanitizedDynamicSearchAttributes;
     }
     return $postData;
 }
示例#16
0
 protected function makeDataProviderBySearchAttributeData($searchAttributeData)
 {
     assert('is_array($searchAttributeData)');
     list($sortAttribute, $sortDescending) = SearchUtil::resolveSortFromStickyData($this->modelClassName, $this->uniqueLayoutId);
     $pageSize = Yii::app()->pagination->resolveActiveForCurrentUserByType('dashboardListPageSize');
     if ($sortAttribute === null) {
         $sortAttribute = $this->getSortAttributeForDataProvider();
         $sortDescending = $this->resolveSortDescendingForDataProvider();
     }
     $redBeanModelDataProvider = new RedBeanModelDataProvider($this->modelClassName, $sortAttribute, $sortDescending, $searchAttributeData, array('pagination' => array('pageSize' => $pageSize)));
     $sort = new RedBeanSort($redBeanModelDataProvider->modelClassName);
     $sort->sortVar = $redBeanModelDataProvider->getId() . '_sort';
     $sort->route = 'defaultPortlet/myListDetails';
     $sort->params = array_merge(GetUtil::getData(), array('portletId' => $this->params['portletId']));
     $redBeanModelDataProvider->setSort($sort);
     return $redBeanModelDataProvider;
 }
 public function resolveSortDescendingFromSourceData($name)
 {
     assert('is_string($name)');
     $sortDescending = SearchUtil::resolveSortDescendingFromGetArray($name);
     if ($sortDescending === false) {
         if (!empty($this->model->sortDescending)) {
             $sortDescending = true;
         } else {
             $sortDescending = false;
         }
     }
     return $sortDescending;
 }
示例#18
0
	<div class="left">
		<img id='search-icon' src="<?php 
echo PersonalityUtil::getPersonaIconURL("search", "{$_zp_themeroot}/resources/images/search.png");
?>
" width="64" height="64"/>
		<?php 
PersonalityUtil::printPersonalityIconSwitcher('search');
?>
	</div>
	<div id="search_words" class="text left">
		<span>
			<em class="wrap"><?php 
echo gettext('Search');
?>
: <a><?php 
echo SearchUtil::getSearchQuery();
?>
</a></em>
		</span>
	</div>
	<div class="clear"></div>
</div>

<div id="image-wrap-scroll">
	<div>
		<div id="image-wrapper">
			<div id="image-full-preview-container" class="opa80"></div>
		</div>	
	</div>

	<div id="scroller" class="opa80">
 public function testGetFilteredByFromArray()
 {
     $getArrayName = 'someArray';
     $result = SearchUtil::getFilteredByFromArray($getArrayName, $_GET);
     $this->assertNull($result);
     $_GET['someArray']['filteredBy'] = 'all';
     $result = SearchUtil::getFilteredByFromArray($getArrayName, $_GET);
     $this->assertEquals('all', $result);
     $_GET['someArray']['filteredBy'] = 'none';
     $result = SearchUtil::getFilteredByFromArray($getArrayName, $_GET);
     $this->assertEquals('none', $result);
 }
 public function resolveFilterByStarredFromSourceData()
 {
     SearchUtil::resolveFilterByStarredFromGetArray($this->model, get_class($this->model));
 }
示例#21
0
 public static function renderDynamicSearchAttributeInput($viewClassName, $modelClassName, $formModelClassName, $rowNumber, $attributeIndexOrDerivedType, $searchAttributes = array(), $suffix = null)
 {
     assert('is_string($viewClassName)');
     assert('is_string($modelClassName)');
     assert('is_string($formModelClassName)');
     assert('is_int($rowNumber)');
     assert('is_string($attributeIndexOrDerivedType) || $attributeIndexOrDerivedType == null');
     assert('is_array($searchAttributes)');
     assert('is_string($suffix) || $suffix == null');
     $content = null;
     if (count(explode(FormModelUtil::RELATION_DELIMITER, $attributeIndexOrDerivedType)) > 1) {
         $model = new $modelClassName(false);
         $nestedAttributes = explode(FormModelUtil::RELATION_DELIMITER, $attributeIndexOrDerivedType);
         $inputPrefix = array($formModelClassName, DynamicSearchForm::DYNAMIC_NAME, $rowNumber);
         $totalNestedCount = count($nestedAttributes);
         $processCount = 1;
         $nestedSearchAttributes = $searchAttributes;
         foreach ($nestedAttributes as $attribute) {
             if ($processCount < $totalNestedCount && isset($nestedSearchAttributes[$attribute])) {
                 $nestedSearchAttributes = $nestedSearchAttributes[$attribute];
                 if (isset($nestedSearchAttributes['relatedData'])) {
                     unset($nestedSearchAttributes['relatedData']);
                 }
             }
             if ($processCount < $totalNestedCount) {
                 $model = SearchUtil::resolveModelToUseByModelAndAttributeName($model, $attribute);
                 $inputPrefix[] = $attribute;
                 $relatedDataName = Element::resolveInputNamePrefixIntoString($inputPrefix) . '[relatedData]';
                 $content .= ZurmoHtml::hiddenField($relatedDataName, true);
             }
             $processCount++;
         }
         $attributeIndexOrDerivedType = $attribute;
         $modelToUse = $model;
         $modelToUse->setAttributes($nestedSearchAttributes);
         $cellElementModelClassName = get_class($model->getModel());
         //Dynamic Search needs to always assume there is an available SearchForm
         //Always assumes the SearchView to use matches the exact pluralCamelCasedName.
         //Does not support nested relations to leads persay.  It will resolve as a Contact.
         //This is not a problem since you can't relate a model to a lead, it is related to a contact.
         //So this scenario would not come up naturally.
         $moduleClassName = $model->getModel()->getModuleClassName();
         $viewClassName = $moduleClassName::getPluralCamelCasedName() . 'SearchView';
         $element = DynamicSearchUtil::getCellElement($viewClassName, $cellElementModelClassName, $attributeIndexOrDerivedType);
     } else {
         $model = new $modelClassName(false);
         $model->setScenario('importModel');
         //this is so attributes such as modified user can be set
         $modelToUse = new $formModelClassName($model);
         $modelToUse->setAttributes($searchAttributes);
         $inputPrefix = array($formModelClassName, DynamicSearchForm::DYNAMIC_NAME, $rowNumber);
         $element = DynamicSearchUtil::getCellElement($viewClassName, $modelClassName, $attributeIndexOrDerivedType);
     }
     $form = new NoRequiredsActiveForm();
     $form->id = "search-form";
     $element['inputPrefix'] = $inputPrefix;
     $elementclassname = $element['type'] . 'Element';
     $element = new $elementclassname($modelToUse, $element['attributeName'], $form, array_slice($element, 2));
     $element->editableTemplate = '{content}{error}';
     $content .= $element->render();
     DropDownUtil::registerScripts(CClientScript::POS_END);
     return $content;
 }
 public static function resolveSortDescendingFromSourceData($name)
 {
     assert('is_string($name)');
     return SearchUtil::resolveSortDescendingFromGetArray(${$name});
 }