/** * Render a date JUI widget * @return The element's content as a string. */ protected function renderControlEditable() { $valueTypeId = $this->getValueTypeEditableInputId(); $firstDateSpanAreaSuffix = '-first-date-area'; $secondDateSpanAreaSuffix = '-second-date-area'; $firstDateSpanAreaId = $valueTypeId . $firstDateSpanAreaSuffix; $secondDateSpanAreaId = $valueTypeId . $secondDateSpanAreaSuffix; $valueTypesRequiringFirstDateInput = MixedDateTypesSearchFormAttributeMappingRules::getValueTypesRequiringFirstDateInput(); $valueTypesRequiringSecondDateInput = MixedDateTypesSearchFormAttributeMappingRules::getValueTypesRequiringSecondDateInput(); Yii::app()->clientScript->registerScript('mixedDateTypes', "\n \$('.dateValueType').change( function()\n {\n arr = " . CJSON::encode($valueTypesRequiringFirstDateInput) . ";\n arr2 = " . CJSON::encode($valueTypesRequiringSecondDateInput) . ";\n firstDateSpanAreaQualifier = '#' + \$(this).attr('id') + '" . $firstDateSpanAreaSuffix . "';\n secondDateSpanAreaQualifier = '#' + \$(this).attr('id') + '" . $secondDateSpanAreaSuffix . "';\n if (\$.inArray(\$(this).val(), arr) != -1)\n {\n \$(firstDateSpanAreaQualifier).show();\n \$(firstDateSpanAreaQualifier).find('.hasDatepicker').prop('disabled', false);\n }\n else\n {\n \$(firstDateSpanAreaQualifier).hide();\n \$(firstDateSpanAreaQualifier).find('.hasDatepicker').prop('disabled', true);\n }\n if (\$.inArray(\$(this).val(), arr2) != -1)\n {\n \$(secondDateSpanAreaQualifier).show();\n \$(secondDateSpanAreaQualifier).find('.hasDatepicker').prop('disabled', false);\n }\n else\n {\n \$(secondDateSpanAreaQualifier).hide();\n \$(secondDateSpanAreaQualifier).find('.hasDatepicker').prop('disabled', true);\n }\n }\n );\n "); $startingDivStyleFirstDate = null; $startingDivStyleSecondDate = null; if (!in_array($this->getValueType(), $valueTypesRequiringFirstDateInput)) { $startingDivStyleFirstDate = "display:none;"; $firstDateDisabled = 'disabled'; } else { $firstDateDisabled = null; } if (!in_array($this->getValueType(), $valueTypesRequiringSecondDateInput)) { $startingDivStyleSecondDate = "display:none;"; $secondDateDisabled = 'disabled'; } else { $secondDateDisabled = null; } $content = ZurmoHtml::tag('span', array('id' => $firstDateSpanAreaId, 'class' => 'first-date-area', 'style' => $startingDivStyleFirstDate), $this->renderEditableFirstDateContent($firstDateDisabled)); $content .= ZurmoHtml::tag('span', array('id' => $secondDateSpanAreaId, 'class' => 'second-date-area', 'style' => $startingDivStyleSecondDate), ZurmoHtml::Tag('span', array('class' => 'dynamic-and-for-mixed'), Zurmo::t('Core', 'and')) . $this->renderEditableSecondDateContent($secondDateDisabled)); return $content; }
/** * Render a date JUI widget * @return The element's content as a string. */ protected function renderControlEditable() { $valueTypeid = $this->getEditableInputId($this->attribute, 'type'); $valueFirstDateId = $this->getEditableInputId($this->attribute, 'firstDate'); $firstDateSpanAreaId = $valueTypeid . '-first-date-area'; $valueSecondDateId = $this->getEditableInputId($this->attribute, 'secondDate'); $secondDateSpanAreaId = $valueTypeid . '-second-date-area'; $valueTypesRequiringFirstDateInput = MixedDateTypesSearchFormAttributeMappingRules::getValueTypesRequiringFirstDateInput(); $valueTypesRequiringSecondDateInput = MixedDateTypesSearchFormAttributeMappingRules::getValueTypesRequiringSecondDateInput(); Yii::app()->clientScript->registerScript('mixedDateTypesForSearch' . $valueTypeid, "\n \$('#{$valueTypeid}').change( function()\n {\n arr = " . CJSON::encode($valueTypesRequiringFirstDateInput) . ";\n arr2 = " . CJSON::encode($valueTypesRequiringSecondDateInput) . ";\n if (\$.inArray(\$(this).val(), arr) != -1)\n {\n \$('#{$firstDateSpanAreaId}').show();\n \$('#{$valueFirstDateId}').prop('disabled', false);\n }\n else\n {\n \$('#{$firstDateSpanAreaId}').hide();\n \$('#{$valueFirstDateId}').prop('disabled', true);\n }\n if (\$.inArray(\$(this).val(), arr2) != -1)\n {\n \$('#{$secondDateSpanAreaId}').show();\n \$('#{$valueSecondDateId}').prop('disabled', false);\n }\n else\n {\n \$('#{$secondDateSpanAreaId}').hide();\n \$('#{$valueSecondDateId}').prop('disabled', true);\n }\n }\n );\n "); $startingDivStyleFirstDate = null; $startingDivStyleSecondDate = null; $valueType = ArrayUtil::getArrayValue($this->model->{$this->attribute}, 'type'); if (!in_array($valueType, $valueTypesRequiringFirstDateInput)) { $startingDivStyleFirstDate = "style='display:none;'"; } if (!in_array($valueType, $valueTypesRequiringSecondDateInput)) { $startingDivStyleSecondDate = "style='display:none;'"; } $content = $this->renderEditableValueTypeContent(); $content .= '<span id="' . $firstDateSpanAreaId . '" ' . $startingDivStyleFirstDate . '>'; $content .= ' ' . $this->renderEditableFirstDateContent(); $content .= '</span>'; $content .= '<span id="' . $secondDateSpanAreaId . '" ' . $startingDivStyleSecondDate . '>'; $content .= ' ' . Yii::t('Default', 'and') . $this->renderEditableSecondDateContent(); $content .= '</span>'; return $content; }
public function testGetMetadataForDynamicDateTimeAttribute() { $super = User::getByUsername('super'); Yii::app()->user->userModel = $super; $searchForm = new ASearchFormTestModel(new MixedRelationsModel()); //Make sure the timeZone is different than UTC for testing. Yii::app()->user->userModel->timeZone = 'America/Chicago'; //TEST when no value present $metadata = SearchFormAttributesToSearchDataProviderMetadataUtil::getMetadata($searchForm, 'dateTime__DateTime', null); $compareData = array(array('dateTime' => array('value' => null))); $this->assertEquals($compareData, $metadata); //Test Date = Today $value = array(); $value['type'] = MixedDateTypesSearchFormAttributeMappingRules::TYPE_TODAY; $metadata = SearchFormAttributesToSearchDataProviderMetadataUtil::getMetadata($searchForm, 'dateTime__DateTime', $value); $todayDateTime = new DateTime(null, new DateTimeZone(Yii::app()->timeZoneHelper->getForCurrentUser())); $today = Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $todayDateTime->getTimeStamp()); $compareData = array(array('dateTime' => array('value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeBeginningOfDay($today), 'operatorType' => 'greaterThanOrEqualTo', 'appendStructureAsAnd' => true)), array('dateTime' => array('value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeEndOfDay($today), 'operatorType' => 'lessThanOrEqualTo', 'appendStructureAsAnd' => true))); $this->assertEquals($compareData, $metadata); //Test Date = Tomorrow $value = array(); $value['type'] = MixedDateTypesSearchFormAttributeMappingRules::TYPE_TOMORROW; $metadata = SearchFormAttributesToSearchDataProviderMetadataUtil::getMetadata($searchForm, 'dateTime__DateTime', $value); $tomorrowDateTime = new DateTime(null, new DateTimeZone(Yii::app()->timeZoneHelper->getForCurrentUser())); $tomorrow = Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $tomorrowDateTime->getTimeStamp() + 60 * 60 * 24); $compareData = array(array('dateTime' => array('value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeBeginningOfDay($tomorrow), 'operatorType' => 'greaterThanOrEqualTo', 'appendStructureAsAnd' => true)), array('dateTime' => array('value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeEndOfDay($tomorrow), 'operatorType' => 'lessThanOrEqualTo', 'appendStructureAsAnd' => true))); $this->assertEquals($compareData, $metadata); //Test Date = Yesterday $value = array(); $value['type'] = MixedDateTypesSearchFormAttributeMappingRules::TYPE_YESTERDAY; $metadata = SearchFormAttributesToSearchDataProviderMetadataUtil::getMetadata($searchForm, 'dateTime__DateTime', $value); $yesterdayDateTime = new DateTime(null, new DateTimeZone(Yii::app()->timeZoneHelper->getForCurrentUser())); $yesterday = Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $yesterdayDateTime->getTimeStamp() - 60 * 60 * 24); $compareData = array(array('dateTime' => array('value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeBeginningOfDay($yesterday), 'operatorType' => 'greaterThanOrEqualTo', 'appendStructureAsAnd' => true)), array('dateTime' => array('value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeEndOfDay($yesterday), 'operatorType' => 'lessThanOrEqualTo', 'appendStructureAsAnd' => true))); $this->assertEquals($compareData, $metadata); //Test Date = After X $value = array(); $value['type'] = MixedDateTypesSearchFormAttributeMappingRules::TYPE_AFTER; $value['firstDate'] = '2011-05-05'; $metadata = SearchFormAttributesToSearchDataProviderMetadataUtil::getMetadata($searchForm, 'dateTime__DateTime', $value); $compareData = array(array('dateTime' => array('value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeBeginningOfDay('2011-05-05'), 'operatorType' => 'greaterThanOrEqualTo'))); $this->assertEquals($compareData, $metadata); //Test Date = Before X $value = array(); $value['type'] = MixedDateTypesSearchFormAttributeMappingRules::TYPE_BEFORE; $value['firstDate'] = '2011-05-04'; $metadata = SearchFormAttributesToSearchDataProviderMetadataUtil::getMetadata($searchForm, 'dateTime__DateTime', $value); $compareData = array(array('dateTime' => array('value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeEndOfDay('2011-05-04'), 'operatorType' => 'lessThanOrEqualTo'))); $this->assertEquals($compareData, $metadata); //Test Date next 7 days $value = array(); $value['type'] = MixedDateTypesSearchFormAttributeMappingRules::TYPE_NEXT_7_DAYS; $metadata = SearchFormAttributesToSearchDataProviderMetadataUtil::getMetadata($searchForm, 'dateTime__DateTime', $value); $todayDateTime = new DateTime(null, new DateTimeZone(Yii::app()->timeZoneHelper->getForCurrentUser())); $today = Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $todayDateTime->getTimeStamp()); $todayPlus7Days = MixedDateTypesSearchFormAttributeMappingRules::calculateNewDateByDaysFromNow(7); $compareData = array(array('dateTime' => array('value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeBeginningOfDay($today), 'operatorType' => 'greaterThanOrEqualTo', 'appendStructureAsAnd' => true)), array('dateTime' => array('value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeEndOfDay($todayPlus7Days), 'operatorType' => 'lessThanOrEqualTo', 'appendStructureAsAnd' => true))); $this->assertEquals($compareData, $metadata); //Test Date last 7 days $value = array(); $value['type'] = MixedDateTypesSearchFormAttributeMappingRules::TYPE_LAST_7_DAYS; $metadata = SearchFormAttributesToSearchDataProviderMetadataUtil::getMetadata($searchForm, 'dateTime__DateTime', $value); $todayDateTime = new DateTime(null, new DateTimeZone(Yii::app()->timeZoneHelper->getForCurrentUser())); $today = Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $todayDateTime->getTimeStamp()); $todayMinus7Days = MixedDateTypesSearchFormAttributeMappingRules::calculateNewDateByDaysFromNow(-7); $compareData = array(array('dateTime' => array('value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeBeginningOfDay($todayMinus7Days), 'operatorType' => 'greaterThanOrEqualTo', 'appendStructureAsAnd' => true)), array('dateTime' => array('value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeEndOfDay($today), 'operatorType' => 'lessThanOrEqualTo', 'appendStructureAsAnd' => true))); $this->assertEquals($compareData, $metadata); }
/** * @return array */ protected static function getValueTypesWhereSecondValueIsRequired() { return MixedDateTypesSearchFormAttributeMappingRules::getValueTypesWhereSecondValueIsRequired(); }
public function testSearchFormDynamicAttributes() { $super = User::getByUsername('super'); Yii::app()->user->userModel = $super; $searchAttributes = array('aaaMember' => 'Vomitorio Corp', 'bbb' => array('relatedData' => true, 'ccc' => array('relatedData' => true, 'date__Date' => array('type' => MixedDateTypesSearchFormAttributeMappingRules::TYPE_AFTER, 'firstDate' => '1991-03-04'), 'dateTime__DateTime' => array('type' => MixedDateTypesSearchFormAttributeMappingRules::TYPE_TODAY), 'dateTime2__DateTime' => array('value' => null), 'eee' => array('relatedData' => true, 'eeeMember' => 'eeeMemberValue'), 'iii' => array('relatedData' => true, 'date__Date' => array('type' => MixedDateTypesSearchFormAttributeMappingRules::TYPE_AFTER, 'firstDate' => '1991-03-04'), 'dateTime__DateTime' => array('type' => MixedDateTypesSearchFormAttributeMappingRules::TYPE_TODAY), 'dateTime2__DateTime' => array('value' => null))))); $metadataAdapter = new SearchDataProviderMetadataAdapter(new AAA(false), 1, $searchAttributes); $todayDateTime = new DateTime(null, new DateTimeZone(Yii::app()->timeZoneHelper->getForCurrentUser())); $today = Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $todayDateTime->getTimeStamp()); $todayPlus7Days = MixedDateTypesSearchFormAttributeMappingRules::calculateNewDateByDaysFromNow(7); $metadata = $metadataAdapter->getAdaptedMetadata(); $compareClauses = array(1 => array('attributeName' => 'aaaMember', 'operatorType' => 'startsWith', 'value' => 'Vomitorio Corp'), 2 => array('attributeName' => 'bbb', 'relatedModelData' => array('attributeName' => 'ccc', 'relatedModelData' => array('attributeName' => 'date', 'operatorType' => 'greaterThanOrEqualTo', 'value' => '1991-03-04'))), 3 => array('attributeName' => 'bbb', 'relatedModelData' => array('attributeName' => 'ccc', 'relatedModelData' => array('attributeName' => 'dateTime', 'operatorType' => 'greaterThanOrEqualTo', 'value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeBeginningOfDay($today)))), 4 => array('attributeName' => 'bbb', 'relatedModelData' => array('attributeName' => 'ccc', 'relatedModelData' => array('attributeName' => 'dateTime', 'operatorType' => 'lessThanOrEqualTo', 'value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeEndOfDay($today)))), 5 => array('attributeName' => 'bbb', 'relatedModelData' => array('attributeName' => 'ccc', 'relatedModelData' => array('attributeName' => 'eee', 'relatedModelData' => array('attributeName' => 'eeeMember', 'operatorType' => 'startsWith', 'value' => 'eeeMemberValue')))), 6 => array('attributeName' => 'bbb', 'relatedModelData' => array('attributeName' => 'ccc', 'relatedModelData' => array('attributeName' => 'iii', 'relatedModelData' => array('attributeName' => 'date', 'operatorType' => 'greaterThanOrEqualTo', 'value' => '1991-03-04')))), 7 => array('attributeName' => 'bbb', 'relatedModelData' => array('attributeName' => 'ccc', 'relatedModelData' => array('attributeName' => 'iii', 'relatedModelData' => array('attributeName' => 'dateTime', 'operatorType' => 'greaterThanOrEqualTo', 'value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeBeginningOfDay($today))))), 8 => array('attributeName' => 'bbb', 'relatedModelData' => array('attributeName' => 'ccc', 'relatedModelData' => array('attributeName' => 'iii', 'relatedModelData' => array('attributeName' => 'dateTime', 'operatorType' => 'lessThanOrEqualTo', 'value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeEndOfDay($today)))))); $compareStructure = '1 and (2) and (3 and 4) and 5 and (6) and (7 and 8)'; $this->assertEquals($compareClauses, $metadata['clauses']); $this->assertEquals($compareStructure, $metadata['structure']); }
public function testSearchFormDynamicAttributes() { $super = User::getByUsername('super'); Yii::app()->user->userModel = $super; $searchAttributes = array('date__Date' => array('type' => MixedDateTypesSearchFormAttributeMappingRules::TYPE_AFTER, 'firstDate' => '1991-03-04'), 'dateTime__DateTime' => array('type' => MixedDateTypesSearchFormAttributeMappingRules::TYPE_TODAY), 'dateTime2__DateTime' => array('value' => null)); $searchForm = new MixedRelationsModelSearchFormTestModel(new MixedRelationsModel()); $metadataAdapter = new SearchDataProviderMetadataAdapter($searchForm, $super->id, $searchAttributes); $todayDateTime = new DateTime(null, new DateTimeZone(Yii::app()->timeZoneHelper->getForCurrentUser())); $today = Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $todayDateTime->getTimeStamp()); $todayPlus7Days = MixedDateTypesSearchFormAttributeMappingRules::calculateNewDateByDaysFromNow(7); $metadata = $metadataAdapter->getAdaptedMetadata(); $compareClauses = array(1 => array('attributeName' => 'date', 'operatorType' => 'greaterThanOrEqualTo', 'value' => '1991-03-04'), 2 => array('attributeName' => 'dateTime', 'operatorType' => 'greaterThanOrEqualTo', 'value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeBeginningOfDay($today)), 3 => array('attributeName' => 'dateTime', 'operatorType' => 'lessThanOrEqualTo', 'value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeEndOfDay($today))); $compareStructure = '(1) and (2 and 3)'; $this->assertEquals($compareClauses, $metadata['clauses']); $this->assertEquals($compareStructure, $metadata['structure']); }