Esempio n. 1
0
 /**
  * Returns all available search form placements - those data bundles that can be searches for the given content type, in other words.
  * The returned value is a list of arrays; each array contains a 'bundle' specifier than can be passed got Model::get() or SearchResult::get() and a display name
  *
  * @param mixed $pm_table_name_or_num The table name or number specifying the content type to fetch bundles for. If omitted the content table of the currently loaded search form will be used.
  * @return array And array of bundles keyed on display label. Each value is an array with these keys:
  *		bundle = The bundle name (eg. ca_objects.idno)
  *		display = Display label for each available bundle
  *		description = Description of bundle
  * 
  * Will return null if table name or number is invalid.
  */
 public function getAvailableBundles($pm_table_name_or_num = null, $pa_options = null)
 {
     if (!$pm_table_name_or_num) {
         $pm_table_name_or_num = $this->get('table_num');
     }
     $pm_table_name_or_num = $this->_DATAMODEL->getTableNum($pm_table_name_or_num);
     if (!$pm_table_name_or_num) {
         return null;
     }
     $t_instance = $this->_DATAMODEL->getInstanceByTableNum($pm_table_name_or_num, true);
     $va_search_settings = $this->opo_search_indexing_config->getAssoc($this->_DATAMODEL->getTableName($pm_table_name_or_num));
     $vs_primary_table = $t_instance->tableName();
     $vs_table_display_name = $t_instance->getProperty('NAME_PLURAL');
     $t_placement = new ca_search_form_placements(null, array());
     $va_available_bundles = array();
     $va_additional_settings = array('width' => array('formatType' => FT_TEXT, 'displayType' => DT_FIELD, 'width' => 4, 'height' => 1, 'takesLocale' => false, 'default' => "100px", 'label' => _t('Width'), 'description' => _t('Width, in characters, of search form elements.')));
     $t_placement->setSettingDefinitionsForPlacement($va_additional_settings);
     // Full-text
     $vs_bundle = "_fulltext";
     $vs_display = "<div id='searchFormEditor__fulltext'><span class='bundleDisplayEditorPlacementListItemTitle'>" . _t("General") . '</span> ' . ($vs_label = _t('Full text')) . "</div>";
     $va_available_bundles[strip_tags($vs_display)][$vs_bundle] = array('bundle' => $vs_bundle, 'label' => $vs_label, 'display' => $vs_display, 'description' => $vs_description = _t('Searches on all content that has been indexed'), 'settingsForm' => $t_placement->getHTMLSettingForm(array('id' => $vs_bundle . '_0')), 'settings' => $va_additional_settings);
     TooltipManager::add("#searchFormEditor__fulltext", "<h2>{$vs_label}</h2>{$vs_description}");
     // get fields
     foreach ($va_search_settings as $vs_table => $va_fields) {
         if (!is_array($va_fields['fields'])) {
             continue;
         }
         if ($vs_table == $vs_primary_table) {
             $va_element_codes = method_exists($t_instance, 'getApplicableElementCodes') ? $t_instance->getApplicableElementCodes(null, false, false) : array();
             $va_field_list = array();
             foreach ($va_fields['fields'] as $vs_field => $va_field_indexing_info) {
                 if ($vs_field === '_metadata') {
                     foreach ($va_element_codes as $vs_code) {
                         $va_field_list[$vs_code] = array();
                     }
                 } else {
                     $va_field_list[$vs_field] = $va_field_indexing_info;
                 }
             }
             foreach ($va_field_list as $vs_field => $va_field_indexing_info) {
                 if (in_array('DONT_INCLUDE_IN_SEARCH_FORM', $va_field_indexing_info)) {
                     continue;
                 }
                 if (!($va_field_info = $t_instance->getFieldInfo($vs_field))) {
                     // is it an attribute?
                     if (in_array($vs_field, $va_element_codes)) {
                         $t_element = $this->_getElementInstance($vs_field);
                         if (!$t_element) {
                             continue;
                         }
                         if (in_array($t_element->get('datatype'), array(15, 16))) {
                             continue;
                         }
                         // skip file and media attributes - never searchable
                         if (!$t_element->getSetting('canBeUsedInSearchForm')) {
                             continue;
                         }
                         if (caGetBundleAccessLevel($vs_primary_table, $vs_field) == __CA_BUNDLE_ACCESS_NONE__) {
                             continue;
                         }
                         $vs_bundle = $vs_table . '.' . $vs_field;
                         $vs_display = "<div id='searchFormEditor_{$vs_table}_{$vs_field}'><span class='bundleDisplayEditorPlacementListItemTitle'>" . caUcFirstUTF8Safe($t_instance->getProperty('NAME_SINGULAR')) . "</span> " . ($vs_label = $t_instance->getDisplayLabel($vs_bundle)) . "</div>";
                         $va_available_bundles[strip_tags($vs_display)][$vs_bundle] = array('bundle' => $vs_bundle, 'label' => $vs_label, 'display' => $vs_display, 'description' => $vs_description = $t_instance->getDisplayDescription($vs_bundle), 'settingsForm' => $t_placement->getHTMLSettingForm(array('id' => $vs_bundle . '_0')), 'settings' => $va_additional_settings);
                         TooltipManager::add("#searchFormEditor_{$vs_table}_{$vs_field}", "<h2>{$vs_label}</h2>{$vs_description}");
                     }
                 } else {
                     if (isset($va_field_info['DONT_USE_AS_BUNDLE']) && $va_field_info['DONT_USE_AS_BUNDLE']) {
                         continue;
                     }
                     if (in_array($va_field_info['FIELD_TYPE'], array(FT_MEDIA, FT_FILE))) {
                         continue;
                     }
                     $vs_bundle = $vs_table . '.' . $vs_field;
                     $vs_display = "<div id='searchFormEditor_{$vs_table}_{$vs_field}'><span class='bundleDisplayEditorPlacementListItemTitle'>" . caUcFirstUTF8Safe($t_instance->getProperty('NAME_SINGULAR')) . "</span> " . ($vs_label = $t_instance->getDisplayLabel($vs_bundle)) . "</div>";
                     $va_available_bundles[strip_tags($vs_display)][$vs_bundle] = array('bundle' => $vs_bundle, 'label' => $vs_label, 'display' => $vs_display, 'description' => $vs_description = $t_instance->getDisplayDescription($vs_bundle), 'settingsForm' => $t_placement->getHTMLSettingForm(array('id' => $vs_bundle . '_0')), 'settings' => $va_additional_settings);
                     TooltipManager::add("#searchFormEditor_{$vs_table}_{$vs_field}", "<h2>{$vs_label}</h2>{$vs_description}");
                 }
             }
         } else {
             // related table
             if ($this->getAppConfig()->get($vs_table . '_disable')) {
                 continue;
             }
             $t_table = $this->_DATAMODEL->getInstanceByTableName($vs_table, true);
             if (method_exists($t_table, "getSubjectTableName") && ($vs_subject_table = $t_table->getSubjectTableName())) {
                 if ($this->getAppConfig()->get($vs_subject_table . '_disable')) {
                     continue;
                 }
             }
             if (caGetBundleAccessLevel($vs_primary_table, $vs_subject_table) == __CA_BUNDLE_ACCESS_NONE__) {
                 continue;
             }
             foreach ($va_fields['fields'] as $vs_field => $va_field_indexing_info) {
                 if (in_array('DONT_INCLUDE_IN_SEARCH_FORM', $va_field_indexing_info)) {
                     continue;
                 }
                 if ($va_field_info = $t_table->getFieldInfo($vs_field)) {
                     if (isset($va_field_info['DONT_USE_AS_BUNDLE']) && $va_field_info['DONT_USE_AS_BUNDLE']) {
                         continue;
                     }
                     $vs_bundle = $vs_table . '.' . $vs_field;
                     $vs_related_table = caUcFirstUTF8Safe($t_table->getProperty('NAME_SINGULAR'));
                     if (method_exists($t_table, 'getSubjectTableInstance')) {
                         $t_subject = $t_table->getSubjectTableInstance();
                         $vs_related_table = caUcFirstUTF8Safe($t_subject->getProperty('NAME_SINGULAR'));
                     }
                     $vs_label = $t_instance->getDisplayLabel($vs_bundle);
                     if (method_exists($t_table, "getSubjectTableName") && $vs_primary_table == $vs_subject_table) {
                         $vs_display = "<div id='searchFormEditor_{$vs_table}_{$vs_field}'><span class='bundleDisplayEditorPlacementListItemTitle'>" . caUcFirstUTF8Safe($t_subject->getProperty('NAME_SINGULAR')) . "</span> {$vs_label}</div>";
                     } else {
                         $vs_display = "<div id='searchFormEditor_{$vs_table}_{$vs_field}'><span class='bundleDisplayEditorPlacementListItemTitle'>{$vs_related_table}</span> {$vs_label}</div>";
                     }
                     $va_available_bundles[strip_tags($vs_display)][$vs_bundle] = array('bundle' => $vs_bundle, 'label' => $vs_label, 'display' => $vs_display, 'description' => $vs_description = $t_instance->getDisplayDescription($vs_bundle), 'settingsForm' => $t_placement->getHTMLSettingForm(array('id' => $vs_bundle . '_0')), 'settings' => $va_additional_settings);
                     TooltipManager::add("#searchFormEditor_{$vs_table}_{$vs_field}", "<h2>{$vs_label}</h2>{$vs_description}");
                 }
             }
         }
     }
     //
     // access points
     //
     $va_access_points = isset($va_search_settings['_access_points']) && is_array($va_search_settings['_access_points']) ? $va_search_settings['_access_points'] : array();
     //unset($va_search_settings['_access_points']);
     foreach ($va_access_points as $vs_access_point => $va_access_point_info) {
         if (isset($va_access_point_info['options']) && is_array($va_access_point_info['options'])) {
             if (in_array('DONT_INCLUDE_IN_SEARCH_FORM', $va_access_point_info['options'])) {
                 continue;
             }
         }
         $vs_display = "<div id='searchFormEditor_{$vs_access_point}'><span class='bundleDisplayEditorPlacementListItemTitle'>" . _t('Access point') . '</span> ' . ($vs_label = isset($va_access_point_info['name']) && $va_access_point_info['name'] ? $va_access_point_info['name'] : $vs_access_point) . "</div>";
         $va_available_bundles[strip_tags($vs_display)][$vs_access_point] = array('bundle' => $vs_access_point, 'label' => $vs_label, 'display' => $vs_display, 'description' => $vs_description = isset($va_access_point_info['description']) && $va_access_point_info['description'] ? $va_access_point_info['description'] : '', 'settingsForm' => $t_placement->getHTMLSettingForm(array('id' => $vs_access_point . '_0')), 'settings' => $va_additional_settings);
         TooltipManager::add("#searchFormEditor_{$vs_access_point}", "<h2>{$vs_label}</h2>{$vs_description}");
     }
     //
     // created and modified
     //
     $t_placement->setSettingDefinitionsForPlacement($va_additional_settings);
     foreach (array('created', 'modified') as $vs_bundle) {
         $vs_display = "<div id='searchFormEditor_{$vs_bundle}'><span class='bundleDisplayEditorPlacementListItemTitle'>" . _t('General') . "</span> " . ($vs_label = $t_instance->getDisplayLabel($vs_bundle)) . "</div>";
         $va_available_bundles[strip_tags($vs_display)][$vs_bundle] = array('bundle' => $vs_bundle, 'label' => $vs_label, 'display' => $vs_display, 'description' => $vs_description = $t_instance->getDisplayDescription($vs_bundle), 'settingsForm' => $t_placement->getHTMLSettingForm(array('id' => $vs_bundle . '_0')), 'settings' => $va_additional_settings);
         TooltipManager::add("#searchFormEditor_{$vs_bundle}", "<h2>{$vs_label}</h2>{$vs_description}");
     }
     ksort($va_available_bundles);
     $va_sorted_bundles = array();
     foreach ($va_available_bundles as $vs_k => $va_val) {
         foreach ($va_val as $vs_real_key => $va_info) {
             $va_sorted_bundles[$vs_real_key] = $va_info;
         }
     }
     return $va_sorted_bundles;
 }