Beispiel #1
0
 /**
  * Prepare event listing query builder that takes all configured filters into account
  *
  * @access static
  */
 static function prepare_event_qb(&$data, &$config)
 {
     // Load filters
     $filters = fi_kilonkipinat_events_viewer::prepare_filters($config);
     $qb = fi_kilonkipinat_events_event_dba::new_query_builder();
     if (!$_MIDGARD['user']) {
         $qb->add_constraint('visibility', '=', FI_KILONKIPINAT_EVENTS_EVENT_VISIBILITY_PUBLIC);
     }
     // Add node or root event constraints
     if ($config->get('list_from_master')) {
         // List under an event tree by up field
         $qb->add_constraint('up', 'INTREE', $data['master_event']);
     } else {
         $list_from_folders = $config->get('list_from_folders');
         if ($list_from_folders) {
             // We have specific folders to list from, therefore list from them and current node
             $guids = explode('|', $config->get('list_from_folders'));
             $guids_array = array();
             $guids_array[] = $data['content_topic']->guid;
             foreach ($guids as $guid) {
                 if (!$guid || !mgd_is_guid($guid)) {
                     // Skip empty and broken guids
                     continue;
                 }
                 $guids_array[] = $guid;
             }
             /**
              * Ref #1776, expands GUIDs before adding them as constraints, should save query time
              */
             $topic_ids = array();
             $topic_ids[] = $data['content_topic']->id;
             if (!empty($guids_array)) {
                 $mc = midcom_db_topic::new_collector('sitegroup', $_MIDGARD['sitegroup']);
                 $mc->add_constraint('guid', 'IN', $guids_array);
                 $mc->add_value_property('id');
                 $mc->execute();
                 $keys = $mc->list_keys();
                 foreach ($keys as $guid => $dummy) {
                     $topic_ids[] = $mc->get_subkey($guid, 'id');
                 }
                 unset($mc, $keys, $guid, $dummy);
             }
             $qb->add_constraint('topic', 'IN', $topic_ids);
         } else {
             // List from current node only
             $qb->add_constraint('topic', '=', $data['content_topic']->id);
         }
     }
     // Add filtering constraint
     if (isset($filters['type_filter'])) {
         $qb->add_constraint('type', '=', (int) $filters['type_filter']);
     }
     if (isset($filters['other'])) {
         // Handle other direct field mapping constraints
         foreach ($filters['other'] as $field => $filter) {
             $qb->add_constraint($field, '=', $filter);
         }
     }
     // Handle category filter
     if (isset($filters['category_filter'])) {
         $qb->add_constraint('category', 'LIKE', "%|{$filters['category_filter']}|%");
     }
     return $qb;
 }