27 import(
'lib.pkp.classes.filter.FilterGroup');
29 foreach ($filterGroupsNode->getChildren() as $filterGroupNode) {
30 $filterGroupSymbolic = $filterGroupNode->getAttribute(
'symbolic');
34 $existingFilterGroup =& $filterGroupDao->getObjectBySymbolic($filterGroupSymbolic);
35 if (!is_null($existingFilterGroup))
continue;
39 $filterGroup->setSymbolic($filterGroupSymbolic);
40 $filterGroup->setDisplayName($filterGroupNode->getAttribute(
'displayName'));
41 $filterGroup->setDescription($filterGroupNode->getAttribute(
'description'));
42 $filterGroup->setInputType($filterGroupNode->getAttribute(
'inputType'));
43 $filterGroup->setOutputType($filterGroupNode->getAttribute(
'outputType'));
46 $installedGroupId = $filterGroupDao->insertObject($filterGroup);
47 assert(is_integer($installedGroupId));
67 $filterGroupSymbolic = $filterNode->getAttribute(
'inGroup');
68 $filterClassName = $filterNode->getAttribute(
'class');
69 $isTemplate = $filterNode->getAttribute(
'isTemplate');
75 import($filterClassName);
80 $subNodes = $filterNode->getChildren();
82 $subFilters = array();
83 foreach($subNodes as $subNode) {
84 switch($subNode->getName()) {
88 $settings[$name] = $value;
95 $subFilters[] =& $subFilter;
103 $similarFilterFactory = $filterDao->getObjectsByGroupAndClass($filterGroupSymbolic, $filterClassName, 0, $isTemplate);
104 if ($similarFilterFactory->getCount() > 0) {
106 $similarFilters = $similarFilterFactory->toArray();
110 foreach($similarFilters as $index => $similarFilter) {
111 if (!$this->
compareFilters($similarFilter, $settings, $subFilters)) unset($similarFilters[$index]);
116 $identicalFilters = count($similarFilters);
117 assert($identicalFilters <= 1);
120 if ($identicalFilters) {
121 $existingFilter = array_pop($similarFilters);
122 return $existingFilter;
127 $installedFilter = $filterDao->configureObject($filterClassName, $filterGroupSymbolic, $settings, $isTemplate, 0, $subFilters, $persist);
128 assert(is_a($installedFilter,
'PersistableFilter'));
130 return $installedFilter;
143 foreach($filterBSettings as $name => $value) {
144 if (!($filterA->hasSetting($name) || in_array($name, $filterA->getInternalSettings()))
145 || $filterA->getData($name) != $value) {
151 if (is_a($filterA,
'CompositeFilter')) {
153 foreach($filterBSubfilters as $filterBSubfilter) {
154 $seq = $filterBSubfilter->getSequence();
155 $filterASubfilter =& $filterA->getFilter($seq);
156 if (!$filterASubfilter || !$filterBSubfilter || get_class($filterASubfilter) != get_class($filterBSubfilter)) {
161 $filterBSubfilterSettings = array();
162 foreach($filterBSubfilter->getSettingNames() as $filterBSubfilterSettingName) {
163 if ($filterBSubfilter->hasData($filterBSubfilterSettingName)) {
164 $filterBSubfilterSettings[$filterBSubfilterSettingName] = $filterBSubfilter->getData($filterBSubfilterSettingName);
169 if (is_a($filterBSubfilter,
'CompositeFilter')) {
170 $filterBSubfilterSubfilters =& $filterBSubfilter->getFilters();
172 $filterBSubfilterSubfilters = array();
176 if (!$this->
compareFilters($filterASubfilter, $filterBSubfilterSettings, $filterBSubfilterSubfilters))
return false;
193 $nameNode =& $settingNode->getChildByName(
'name');
194 assert(is_a($nameNode,
'XMLNode'));
195 $name = $nameNode->getValue();
198 $type = $settingNode->getAttribute(
'type');
199 $valueNode =& $settingNode->getChildByName(
'value');
200 assert(is_a($valueNode,
'XMLNode'));
203 $value = (string)$valueNode->getValue();
207 $value = (boolean)$valueNode->getValue();
211 $value = (integer)$valueNode->getValue();
215 $constName = $valueNode->getValue();
216 assert(defined($constName));
217 $value = constant($constName);
222 $arrayNode =& $valueNode->getChildByName(
'array');
233 $setting = array($name, $value);
243 $resultArray = array();
244 foreach($arrayNode->getChildren() as $elementNode) {
245 $key = $elementNode->getAttribute(
'key');
247 $subArrayNode = $elementNode->getChildByName(
'array');
248 if (is_a($subArrayNode,
'XMLNode')) {
253 $value = $elementNode->getValue();
258 $resultArray[$key] = $value;
260 $resultArray[] = $value;