Beispiel #1
0
 /**
  * Get one level of navigation
  *
  * @return Array containing navigation data
  */
 public static function get_product_group_navigation($id)
 {
     // Initialize the array
     $leaves = array();
     if (mgd_is_guid($id)) {
         try {
             $group = org_openpsa_products_product_group_dba::get_cached($id);
         } catch (midcom_error $e) {
             // Stop silently
             return $leaves;
         }
         $id = $group->id;
     }
     // Initialize the query builder
     $qb = org_openpsa_products_product_group_dba::new_query_builder();
     $qb->add_constraint('up', '=', $id);
     $qb->add_order('metadata.score', 'DESC');
     $qb->add_order('title');
     $qb->add_order('code');
     $groups = $qb->execute();
     // Get the properties of each group
     foreach ($groups as $group) {
         $leaves[$group->id] = array(MIDCOM_NAV_URL => $group->code ? "{$group->code}/" : "{$group->guid}/", MIDCOM_NAV_NAME => $group->title, MIDCOM_NAV_GUID => $group->guid, MIDCOM_NAV_OBJECT => $group, MIDCOM_NAV_NOENTRY => (bool) $group->metadata->navnoentry);
     }
     return $leaves;
 }
Beispiel #2
0
 /**
  * Helper, updates the context so that we get a complete breadcrumb line towards the current
  * location.
  */
 private function _update_breadcrumb_line()
 {
     $tmp = array();
     if ($this->_group->up != 0) {
         $group = new org_openpsa_products_product_group_dba($this->_group->up);
         while ($group) {
             $parent = $group->get_parent();
             if ($group->get_parent() != null) {
                 $tmp[] = array(MIDCOM_NAV_URL => "{$parent->code}/{$group->code}", MIDCOM_NAV_NAME => $group->title);
             } else {
                 $tmp[] = array(MIDCOM_NAV_URL => "{$group->code}/", MIDCOM_NAV_NAME => $group->title);
             }
             $group = $parent;
         }
     }
     $tmp = array_reverse($tmp);
     $tmp[] = array(MIDCOM_NAV_URL => "{$this->_group->guid}/", MIDCOM_NAV_NAME => $this->_group->title);
     $tmp[] = array(MIDCOM_NAV_URL => "edit/{$this->_group->guid}/", MIDCOM_NAV_NAME => $this->_l10n_midcom->get('edit'));
     midcom_core_context::get()->set_custom_key('midcom.helper.nav.breadcrumb', $tmp);
 }
Beispiel #3
0
 public function get_path()
 {
     $path = $this->guid;
     if ($this->code) {
         $path = $this->code;
         try {
             $parent = org_openpsa_products_product_group_dba::get_cached($this->productGroup);
             $path = $parent->code . '/' . $path;
         } catch (midcom_error $e) {
             $e->log();
         }
     }
     return $path;
 }
Beispiel #4
0
 public function testCRUD()
 {
     $time = time();
     midcom::get('auth')->request_sudo('org.openpsa.products');
     $group = new org_openpsa_products_product_group_dba();
     $group->code = 'TEST-100' . $time;
     $stat = $group->create();
     $this->assertTrue($stat);
     $this->assertEquals($group->code, 'TEST-100' . $time);
     $group->code = 'TEST-101' . $time;
     $stat = $group->update();
     $this->assertTrue($stat);
     $this->register_object($group);
     $this->assertEquals($group->code, 'TEST-101' . $time);
     $group2 = new org_openpsa_products_product_group_dba();
     $group2->code = 'TEST-101' . $time;
     $stat = $group2->create();
     $this->assertFalse($stat);
     $this->assertEquals(midcom_connection::get_error(), MGD_ERR_OBJECT_NAME_EXISTS);
     $stat = $group->delete();
     $this->assertTrue($stat);
     midcom::get('auth')->drop_sudo();
 }
Beispiel #5
0
 private function _list_products($limit = 5, $product_group = '')
 {
     $product_qb = new org_openpsa_qbpager('org_openpsa_products_product_dba', 'latest_products');
     $this->_request_data['product_qb'] =& $product_qb;
     $product_qb->results_per_page = $limit;
     $product_qb->set_limit($limit);
     $product_qb->add_order('metadata.published', 'DESC');
     if ($product_group != '') {
         $group_qb = org_openpsa_products_product_group_dba::new_query_builder();
         $group_qb->add_constraint('code', '=', $product_group);
         $groups = $group_qb->execute();
         if (count($groups) == 0) {
             return false;
             // No matching group
         } else {
             $categories_qb = org_openpsa_products_product_group_dba::new_query_builder();
             $categories_qb->add_constraint('up', '=', $groups[0]->id);
             $categories = $categories_qb->execute();
             $categories_in = array();
             if (count($categories) == 0) {
                 /* No matching categories belonging to this group
                  * So we can search for the application using only
                  * this group id
                  */
                 $product_qb->add_constraint('productGroup', 'INTREE', $groups[0]->id);
             } else {
                 for ($i = 0; $i < count($categories); $i++) {
                     $categories_in[$i] = $categories[$i]->id;
                 }
                 $product_qb->add_constraint('productGroup', 'IN', $categories_in);
             }
         }
     }
     if ($this->_config->get('enable_scheduling')) {
         $product_qb->add_constraint('start', '<=', time());
         $product_qb->begin_group('OR');
         /*
          * List products that either have no defined end-of-market dates
          * or are still in market
          */
         $product_qb->add_constraint('end', '=', 0);
         $product_qb->add_constraint('end', '>=', time());
         $product_qb->end_group();
     }
     $this->_request_data['products'] = $product_qb->execute();
     $this->_request_data['product_group'] = $product_group;
 }
Beispiel #6
0
 private function _load_objects_group($group_id)
 {
     $objects = array();
     $product_qb = org_openpsa_products_product_dba::new_query_builder();
     $product_qb->add_constraint('productGroup', '=', $group_id);
     $products = $product_qb->execute();
     foreach ($products as $product) {
         $objects[] = $product;
     }
     $group_qb = org_openpsa_products_product_group_dba::new_query_builder();
     $group_qb->add_constraint('up', '=', $group_id);
     $groups = $group_qb->execute();
     foreach ($groups as $group) {
         $objects[] = $group;
         $child_objects = $this->_load_objects_group($group->id);
         $objects = array_merge($objects, $child_objects);
     }
     return $objects;
 }
Beispiel #7
0
 function _load_data($handler_id, &$args, &$data)
 {
     if (empty($_POST) && $data['session']->exists('POST_data')) {
         $_POST = $data['session']->get('POST_data');
         $data['session']->remove('POST_data');
     }
     $qb = org_openpsa_products_product_dba::new_query_builder();
     $qb->add_order('code');
     $qb->add_order('title');
     $products = array();
     $root_group_guid = $this->_config->get('root_group');
     if ($root_group_guid) {
         $root_group = new org_openpsa_products_product_group_dba($root_group_guid);
         if (!isset($_POST['org_openpsa_products_export_all']) || empty($_POST['org_openpsa_products_export_all'])) {
             $qb->add_constraint('productGroup', '=', $root_group->id);
             // We have data only from one product group, though this seems to be too late...
             $this->_schema_fields_to_skip[] = 'productGroup';
         } else {
             $qb_groups = org_openpsa_products_product_group_dba::new_query_builder();
             $qb_groups->add_constraint('up', 'INTREE', $root_group->id);
             $groups = $qb_groups->execute();
             $qb->begin_group('OR');
             $qb->add_constraint('productGroup', '=', $root_group->id);
             foreach ($groups as $group) {
                 $qb->add_constraint('productGroup', '=', $group->id);
             }
             $qb->end_group('OR');
         }
     }
     $all_products = $qb->execute();
     foreach ($all_products as $product) {
         $schema = $product->get_parameter('midcom.helper.datamanager2', 'schema_name');
         if ($schema != $this->_schema) {
             continue;
         }
         $products[] = $product;
     }
     return $products;
 }
Beispiel #8
0
 private function _list_group_products()
 {
     $product_qb = new org_openpsa_qbpager('org_openpsa_products_product_dba', 'org_openpsa_products_product_dba');
     $product_qb->results_per_page = $this->_config->get('products_per_page');
     if (count($this->_request_data['linked_products']) > 0) {
         $product_qb->begin_group('OR');
     }
     if ($this->_request_data['group'] && $this->_request_data['group']->orgOpenpsaObtype == org_openpsa_products_product_group_dba::TYPE_SMART) {
         // Smart group, query products by stored constraints
         $constraints = $this->_request_data['group']->list_parameters('org.openpsa.products:constraints');
         if (empty($constraints)) {
             $product_qb->add_constraint('productGroup', '=', $this->_request_data['parent_group']);
         }
         $reflector = new midgard_reflection_property('org_openpsa_products_product');
         foreach ($constraints as $constraint_string) {
             $constraint_members = explode(',', $constraint_string);
             if (count($constraint_members) != 3) {
                 throw new midcom_error("Invalid constraint '{$constraint_string}'");
             }
             // Reflection is needed here for safety
             $field_type = $reflector->get_midgard_type($constraint_members[0]);
             switch ($field_type) {
                 case 4:
                     throw new midcom_error("Invalid constraint: '{$constraint_members[0]}' is not a Midgard property");
                 case MGD_TYPE_INT:
                     $constraint_members[2] = (int) $constraint_members[2];
                     break;
                 case MGD_TYPE_FLOAT:
                     $constraint_members[2] = (double) $constraint_members[2];
                     break;
                 case MGD_TYPE_BOOLEAN:
                     $constraint_members[2] = (bool) $constraint_members[2];
                     break;
             }
             $product_qb->add_constraint($constraint_members[0], $constraint_members[1], $constraint_members[2]);
         }
     } else {
         if ($this->_request_data['handler_id'] == 'list_intree') {
             $product_qb->add_constraint('productGroup', '=', $this->_request_data['parent_category_id']);
         } else {
             if ($this->_request_data['handler_id'] == 'listall') {
                 $categories_qb = org_openpsa_products_product_group_dba::new_query_builder();
                 $categories_qb->add_constraint('up', '=', $this->_request_data['group']->id);
                 $categories = $categories_qb->execute();
                 for ($i = 0; $i < count($categories); $i++) {
                     $categories_in[$i] = $categories[$i]->id;
                 }
                 $product_qb->add_constraint('productGroup', 'IN', $categories_in);
             } else {
                 $product_qb->add_constraint('productGroup', '=', $this->_request_data['parent_group']);
             }
         }
     }
     if (count($this->_request_data['linked_products']) > 0) {
         $product_qb->add_constraint('id', 'IN', $this->_request_data['linked_products']);
         $product_qb->end_group();
     }
     // This should be a helper function, same functionality, but with different config-parameter is used in /handler/product/search.php
     foreach ($this->_config->get('products_listing_order') as $ordering) {
         $this->_add_ordering($product_qb, $ordering);
     }
     if ($this->_config->get('enable_scheduling')) {
         $product_qb->add_constraint('start', '<=', time());
         $product_qb->begin_group('OR');
         /*
          * List products that either have no defined end-of-market dates
          * or are still in market
          */
         $product_qb->add_constraint('end', '=', 0);
         $product_qb->add_constraint('end', '>=', time());
         $product_qb->end_group();
     }
     $this->_request_data['products'] = $product_qb->execute();
     $this->_request_data['products_qb'] =& $product_qb;
 }
Beispiel #9
0
 /**
  * Helper to make an array usable with DM2 select datatype for selecting product groups
  *
  * @param mixed $up            Either the ID or GUID of the product group
  * @param string $prefix       Prefix for the code
  * @param string $keyproperty  Property to use as the key of the resulting array
  * @param array $label_fields  Object properties to show in the label (will be shown space separated)
  * @return array
  */
 public static function list_groups($up = 0, $prefix = '', $keyproperty = 'id', $order_by_score = false, $label_fields = array('code', 'title'))
 {
     static $result_cache = array();
     $cache_key = md5($up . $keyproperty . $prefix . $order_by_score . implode('', $label_fields));
     if (isset($result_cache[$cache_key])) {
         return $result_cache[$cache_key];
     }
     $result_cache[$cache_key] = array();
     $ret =& $result_cache[$cache_key];
     if (empty($up)) {
         // TODO: use reflection to see what kind of property this is ?
         if ($keyproperty == 'id') {
             $ret[0] = midcom::get('i18n')->get_string('toplevel', 'org.openpsa.products');
         } else {
             $ret[''] = midcom::get('i18n')->get_string('toplevel', 'org.openpsa.products');
         }
     }
     if (mgd_is_guid($up)) {
         $group = new org_openpsa_products_product_group_dba($up);
         $up = $group->id;
     }
     $mc = org_openpsa_products_product_group_dba::new_collector('up', (int) $up);
     $mc->add_value_property('title');
     $mc->add_value_property('code');
     $mc->add_value_property('id');
     if ($keyproperty !== 'id') {
         $mc->add_value_property($keyproperty);
     }
     foreach ($label_fields as $fieldname) {
         if ($fieldname == 'id' || $fieldname == $keyproperty) {
             continue;
         }
         $mc->add_value_property($fieldname);
     }
     unset($fieldname);
     // Order by score if required
     if ($order_by_score) {
         $mc->add_order('metadata.score', 'DESC');
     }
     $mc->add_order('code');
     $mc->add_order('title');
     $mc->execute();
     $mc_keys = $mc->list_keys();
     foreach ($mc_keys as $mc_key => $dummy) {
         $id = $mc->get_subkey($mc_key, 'id');
         $key = $mc->get_subkey($mc_key, $keyproperty);
         $ret[$key] = $prefix;
         foreach ($label_fields as $fieldname) {
             $field_val = $mc->get_subkey($mc_key, $fieldname);
             $ret[$key] .= "{$field_val} ";
         }
         unset($fieldname, $field_val);
         $ret = $ret + org_openpsa_products_product_group_dba::list_groups($id, "{$prefix} > ", $keyproperty, $label_fields);
         unset($id, $key);
     }
     unset($mc, $mc_keys, $dummy, $mc_key);
     return $ret;
 }
Beispiel #10
0
 /**
  * Helper, updates the context so that we get a complete breadcrumb line towards the current
  * location.
  *
  * @param org_openpsa_products_product $object
  */
 public static function update_breadcrumb_line($object, $product_group = null)
 {
     $tmp = array();
     if (get_class($object) == 'org_openpsa_products_product_link_dba') {
         if ($object->product != 0) {
             try {
                 $product = new org_openpsa_products_product_dba($object->product);
                 $tmp[] = array(MIDCOM_NAV_URL => "{$object->guid}/", MIDCOM_NAV_NAME => $product->title);
             } catch (midcom_error $e) {
                 $e->log();
             }
         }
     }
     while ($object) {
         if (get_class($object) == 'org_openpsa_products_product_dba' && $product_group != null) {
             $parent = $product_group;
         } else {
             $parent = $object->get_parent();
         }
         if (get_class($object) == 'org_openpsa_products_product_dba') {
             $tmp[] = array(MIDCOM_NAV_URL => "product/{$object->code}/", MIDCOM_NAV_NAME => $object->title);
         } else {
             if (get_class($object) != 'org_openpsa_products_product_link_dba') {
                 $url = "{$object->code}/";
                 if (isset($object->up)) {
                     $parentgroup_qb = org_openpsa_products_product_group_dba::new_query_builder();
                     $parentgroup_qb->add_constraint('id', '=', $object->up);
                     $group = $parentgroup_qb->execute();
                     if (count($group) > 0) {
                         $url = "{$group[0]->code}/" . $url;
                     }
                 } else {
                     if ($parent != null) {
                         $url = "{$parent->code}/" . $url;
                     }
                 }
                 $tmp[] = array(MIDCOM_NAV_URL => $url, MIDCOM_NAV_NAME => $object->title);
             }
         }
         $object = $parent;
     }
     $tmp = array_reverse($tmp);
     return $tmp;
 }
Beispiel #11
0
 /**
  * Looks up a product to display.
  *
  * @param mixed $handler_id The ID of the handler.
  * @param Array $args The argument list.
  * @param Array &$data The local request data.
  */
 public function _handler_view($handler_id, array $args, array &$data)
 {
     if (preg_match('/_raw$/', $handler_id)) {
         midcom::get()->skip_page_style = true;
     }
     $qb = org_openpsa_products_product_dba::new_query_builder();
     if (preg_match('/^view_product_intree/', $handler_id)) {
         $group_qb = org_openpsa_products_product_group_dba::new_query_builder();
         if (mgd_is_guid($args[0])) {
             $group_qb->add_constraint('guid', '=', $args[0]);
         } else {
             $group_qb->add_constraint('code', '=', $args[0]);
         }
         $groups = $group_qb->execute();
         if (empty($groups)) {
             throw new midcom_error_notfound("Product group {$args[0]} not found");
         }
         $categories_mc = org_openpsa_products_product_group_dba::new_collector('up', $groups[0]->id);
         $categories_in = $categories_mc->get_values('id');
         if (count($categories_in) == 0) {
             /* No matching categories belonging to this group
              * So we can search for the application using only
              * this group id
              */
             $qb->add_constraint('productGroup', 'INTREE', $groups[0]->id);
         } else {
             $categories_in[] = $groups[0]->id;
             $qb->add_constraint('productGroup', 'IN', $categories_in);
         }
         if (mgd_is_guid($args[1])) {
             $qb->add_constraint('guid', '=', $args[1]);
         } else {
             $qb->add_constraint('code', '=', $args[1]);
         }
     } else {
         if (mgd_is_guid($args[0])) {
             $qb->add_constraint('guid', '=', $args[0]);
         } else {
             $qb->add_constraint('code', '=', $args[0]);
         }
     }
     if ($this->_config->get('enable_scheduling')) {
         $qb->add_constraint('start', '<=', time());
         $qb->begin_group('OR');
         /*
          * List products that either have no defined end-of-market dates
          * or are still in market
          */
         $qb->add_constraint('end', '=', 0);
         $qb->add_constraint('end', '>=', time());
         $qb->end_group();
     }
     $results = $qb->execute();
     $this->_request_data['is_linked_from'] = '';
     if (!empty($results)) {
         $this->_product = $results[0];
         if ($this->_config->get('enable_productlinks') && $this->_product->productGroup != 0) {
             $root_group_guid = $this->_config->get('root_group');
             if ($root_group_guid != '') {
                 $root_group = org_openpsa_products_product_group_dba::get_cached($root_group_guid);
             }
             if ($root_group->id != $this->_product->productGroup) {
                 $product_group = new org_openpsa_products_product_group_dba($this->_product->productGroup);
                 $mc_intree = org_openpsa_products_product_group_dba::new_collector('id', $product_group->id);
                 $mc_intree->add_constraint('up', 'INTREE', $root_group->id);
                 $count = $mc_intree->count();
                 if ($count == 0) {
                     $mc_intree = org_openpsa_products_product_link_dba::new_collector('product', $this->_product->id);
                     $mc_intree->add_constraint('productGroup', 'INTREE', $root_group->id);
                     $mc_intree->execute();
                     $results = $mc_intree->list_keys();
                     if (count($results) > 0) {
                         foreach ($results as $guid => $array) {
                             $this->_request_data['is_linked_from'] = $guid;
                         }
                     }
                 }
             }
         }
     } else {
         if (preg_match('/^view_product_intree/', $handler_id)) {
             $this->_product = new org_openpsa_products_product_dba($args[1]);
         } else {
             $this->_product = new org_openpsa_products_product_dba($args[0]);
         }
     }
     if ($GLOBALS['midcom_config']['enable_ajax_editing']) {
         $data['controller'] = midcom_helper_datamanager2_controller::create('ajax');
         $data['controller']->schemadb =& $data['schemadb_product'];
         $data['controller']->set_storage($this->_product);
         $data['controller']->process_ajax();
         $data['datamanager'] =& $data['controller']->datamanager;
     } else {
         $data['controller'] = null;
         $data['datamanager'] = new midcom_helper_datamanager2_datamanager($data['schemadb_product']);
         if (!$data['datamanager']->autoset_storage($this->_product)) {
             throw new midcom_error("Failed to create a DM2 instance for product {$this->_product->guid}.");
         }
     }
     $this->_prepare_request_data();
     $this->bind_view_to_object($this->_product, $data['datamanager']->schema->name);
     if (isset($product_group)) {
         unset($product_group);
     }
     $product_group = null;
     if ($this->_request_data['is_linked_from'] != '') {
         $linked_product = new org_openpsa_products_product_link_dba($data['is_linked_from']);
         if ($linked_product->productGroup != 0) {
             $product_group = new org_openpsa_products_product_group_dba($linked_product->productGroup);
         }
     }
     $breadcrumb = org_openpsa_products_viewer::update_breadcrumb_line($this->_product, $product_group);
     midcom_core_context::get()->set_custom_key('midcom.helper.nav.breadcrumb', $breadcrumb);
     midcom::get('metadata')->set_request_metadata($this->_product->metadata->revised, $this->_product->guid);
     $title = $this->_config->get('product_page_title');
     if (strstr($title, '<PRODUCTGROUP')) {
         try {
             $productgroup = new org_openpsa_products_product_group_dba($this->_product->productGroup);
             $title = str_replace('<PRODUCTGROUP_TITLE>', $productgroup->title, $title);
             $title = str_replace('<PRODUCTGROUP_CODE>', $productgroup->code, $title);
         } catch (midcom_error $e) {
             $title = str_replace('<PRODUCTGROUP_TITLE>', '', $title);
             $title = str_replace('<PRODUCTGROUP_CODE>', '', $title);
         }
     }
     $title = str_replace('<PRODUCT_CODE>', $this->_product->code, $title);
     $title = str_replace('<PRODUCT_TITLE>', $this->_product->title, $title);
     $title = str_replace('<TOPIC_TITLE>', $this->_topic->extra, $title);
     midcom::get('head')->set_pagetitle($title);
 }
Beispiel #12
0
 /**
  * @param mixed $handler_id The ID of the handler.
  * @param Array $args The argument list.
  * @param Array &$data The local request data.
  */
 public function _handler_csv_select($handler_id, array $args, array &$data)
 {
     $this->_prepare_handler($args);
     $data['product_groups'] = array();
     $up = 0;
     if ($this->_config->get('root_group') != 0) {
         $root_group_guid = $this->_config->get('root_group');
         $root_group_obj = org_openpsa_products_product_group_dba::get_cached($root_group_guid);
         $up = $root_group_obj->up;
     }
     $data['product_groups'] = $this->_get_product_group_tree($up);
     if (isset($_POST['org_openpsa_products_import_schema'])) {
         $data['schema'] = $_POST['org_openpsa_products_import_schema'];
     } else {
         $data['schema'] = 'default';
     }
     $this->_datamanager->set_schema($data['schema']);
     if (array_key_exists('org_openpsa_products_import_separator', $_POST)) {
         $data['time_start'] = time();
         $data['rows'] = array();
         switch ($_POST['org_openpsa_products_import_separator']) {
             case ';':
                 $data['separator'] = ';';
                 break;
             case ',':
             default:
                 $data['separator'] = ',';
                 break;
         }
         $data['new_products_product_group'] = $_POST['org_openpsa_products_import_new_products_product_group'];
         if (is_uploaded_file($_FILES['org_openpsa_products_import_upload']['tmp_name'])) {
             // Copy the file for later processing
             $data['tmp_file'] = tempnam($GLOBALS['midcom_config']['midcom_tempdir'], 'org_openpsa_products_import_csv');
             $src = fopen($_FILES['org_openpsa_products_import_upload']['tmp_name'], 'r');
             $dst = fopen($data['tmp_file'], 'w+');
             while (!feof($src)) {
                 $buffer = fread($src, 131072);
                 /* 128 kB */
                 fwrite($dst, $buffer, 131072);
             }
             fclose($src);
             fclose($dst);
             // Read cell headers from the file
             $read_rows = 0;
             $handle = fopen($_FILES['org_openpsa_products_import_upload']['tmp_name'], 'r');
             $separator = $data['separator'];
             $total_columns = 0;
             while ($read_rows < 2 && ($csv_line = fgetcsv($handle, 3000, $separator))) {
                 if ($total_columns == 0) {
                     $total_columns = count($csv_line);
                 }
                 $columns_with_content = 0;
                 foreach ($csv_line as $value) {
                     if ($value != '') {
                         $columns_with_content++;
                     }
                 }
                 $percentage = round(100 / $total_columns * $columns_with_content);
                 if ($percentage >= $this->_config->get('import_csv_data_percentage')) {
                     $data['rows'][] = $csv_line;
                     $read_rows++;
                 }
             }
         }
         $data['time_end'] = time();
     }
 }
Beispiel #13
0
 /**
  * Displays an article edit view.
  *
  * Note, that the article for non-index mode operation is automatically determined in the can_handle
  * phase.
  *
  * If create privileges apply, we relocate to the index creation article
  *
  * @param mixed $handler_id The ID of the handler.
  * @param Array $args The argument list.
  * @param Array &$data The local request data.
  */
 public function _handler_create($handler_id, array $args, array &$data)
 {
     $this->_request_data['up'] = (int) $args[0];
     if ($this->_request_data['up'] == 0) {
         midcom::get('auth')->require_user_do('midgard:create', null, 'org_openpsa_products_product_group_dba');
     } else {
         $parent = new org_openpsa_products_product_group_dba($data['up']);
         $parent->require_do('midgard:create');
         $data['parent'] = $parent;
     }
     $data['selected_schema'] = $args[1];
     if (!array_key_exists($data['selected_schema'], $data['schemadb_group'])) {
         throw new midcom_error_notfound('Schema ' . $data['selected_schema'] . ' was not found it schemadb');
     }
     $this->_schema =& $data['selected_schema'];
     $data['controller'] = $this->get_controller('create');
     switch ($data['controller']->process_form()) {
         case 'save':
             if ($this->_config->get('index_groups')) {
                 // Index the group
                 $indexer = midcom::get('indexer');
                 org_openpsa_products_viewer::index($data['controller']->datamanager, $indexer, $this->_topic);
             }
             midcom::get('cache')->invalidate($this->_topic->guid);
             return new midcom_response_relocate("{$this->_group->guid}/");
         case 'cancel':
             if ($this->_request_data['up'] == 0) {
                 return new midcom_response_relocate('');
             } else {
                 return new midcom_response_relocate("{$this->_request_data['up']}/");
             }
     }
     $this->_prepare_request_data();
     // Add toolbar items
     org_openpsa_helpers::dm2_savecancel($this);
     $this->_request_data['view_title'] = sprintf($this->_l10n_midcom->get('create %s'), $this->_l10n->get($this->_schemadb[$this->_schema]->description));
     midcom::get('head')->set_pagetitle($this->_request_data['view_title']);
     $this->_update_breadcrumb_line();
 }
Beispiel #14
0
 public function _on_reindex_tree_iterator(&$indexer, &$dms, &$topic, &$group, &$topic, &$config)
 {
     if ($dms['group']->autoset_storage($group)) {
         if ($config->get('index_groups')) {
             org_openpsa_products_viewer::index($dms['group'], $indexer, $topic, $config);
         }
     } else {
         debug_add("Warning, failed to initialize datamanager for product group {$group->id}. Skipping it.", MIDCOM_LOG_WARN);
     }
     if ($config->get('index_products')) {
         $qb_products = org_openpsa_products_product_dba::new_query_builder();
         $qb_products->add_constraint('productGroup', '=', $group->id);
         $products = $qb_products->execute();
         unset($qb_products);
         if (is_array($products)) {
             foreach ($products as $product) {
                 if (!$dms['product']->autoset_storage($product)) {
                     debug_add("Warning, failed to initialize datamanager for product {$product->id}. Skipping it.", MIDCOM_LOG_WARN);
                     continue;
                 }
                 org_openpsa_products_viewer::index($dms['product'], $indexer, $topic, $config);
                 unset($product);
             }
         }
         unset($products);
     }
     $subgroups = array();
     $qb_groups = org_openpsa_products_product_group_dba::new_query_builder();
     $qb_groups->add_constraint('up', '=', $group->id);
     $subgroups = $qb_groups->execute();
     unset($qb_groups);
     if (!is_array($subgroups)) {
         return true;
     }
     foreach ($subgroups as $subgroup) {
         $this->_on_reindex_tree_iterator($indexer, $dms, $topic, $subgroup, $topic, $config);
         unset($subgroup);
     }
     unset($subgroups);
     return true;
 }
Beispiel #15
0
 private function _import_groups()
 {
     $secondary_groups = array();
     $tertiary_groups = array();
     if (count($this->_request_data['groups']) > 0) {
         foreach ($this->_request_data['groups'] as $group) {
             if (isset($group['org_openpsa_products_import_parent_group'])) {
                 $qb = org_openpsa_products_product_group_dba::new_query_builder();
                 $qb->add_constraint('code', '=', (string) $group['org_openpsa_products_import_parent_group']);
                 if ($qb->count() == 0) {
                     // Parent not found, process later
                     $secondary_groups[] = $group;
                     continue;
                 }
             }
             $this->_import_group($group);
         }
     }
     if (count($secondary_groups) > 0) {
         foreach ($secondary_groups as $group) {
             if (isset($group['org_openpsa_products_import_parent_group'])) {
                 $qb = org_openpsa_products_product_group_dba::new_query_builder();
                 $qb->add_constraint('code', '=', (string) $group['org_openpsa_products_import_parent_group']);
                 if ($qb->count() == 0) {
                     // Parent not found, process later
                     $tertiary_groups[] = $group;
                     continue;
                 }
             }
             $this->_import_group($group);
         }
     }
 }
Beispiel #16
0
    </p>

    <form enctype="multipart/form-data" action="&(prefix);api/product/csv/" method="post" class="datamanager">
        <label for="org_openpsa_products_export_schema">
            <span class="field_text"><?php 
echo $data['l10n']->get('schema');
?>
</span>
            <select class="dropdown" name="org_openpsa_products_export_schema" id="org_openpsa_products_export_schema">
                <?php 
// FIXME: this schema counting is *really* inefficient
$root_group_guid = $data['config']->get('root_group');
if (!empty($root_group_guid)) {
    try {
        $root_group = org_openpsa_products_product_group_dba::get_cached($root_group_guid);
        $qb_groups = org_openpsa_products_product_group_dba::new_query_builder();
        $qb_groups->add_constraint('up', 'INTREE', $root_group->id);
        $groups = $qb_groups->execute();
    } catch (midcom_error $e) {
        $root_group = null;
    }
}
foreach (array_keys($data['schemadb_product']) as $name) {
    $count_by_schema = 0;
    if ($root_group) {
        $qb = org_openpsa_products_product_dba::new_query_builder();
        $qb->add_constraint('code', '<>', '');
        $qb->begin_group('OR');
        $qb->add_constraint('productGroup', '=', $root_group->id);
        foreach ($groups as $group) {
            $qb->add_constraint('productGroup', '=', $group->id);
Beispiel #17
0
 /**
  * The handler for the group_groupsblock article.
  *
  * @param mixed $handler_id the array key from the request array
  * @param array $args the arguments given to the handler
  * @param Array &$data The local request data.
  */
 public function _handler_groupsblock($handler_id, array $args, array &$data)
 {
     // Query for sub-objects
     $group_qb = org_openpsa_products_product_group_dba::new_query_builder();
     $guidgroup_qb = org_openpsa_products_product_group_dba::new_query_builder();
     $guidgroup_qb->add_constraint('guid', '=', $args[0]);
     $groups = $guidgroup_qb->execute();
     if (count($groups) > 0) {
         $categories_qb = org_openpsa_products_product_group_dba::new_query_builder();
         $categories_qb->add_constraint('id', '=', $groups[0]->up);
         $categories = $categories_qb->execute();
         $data['parent_category'] = $categories[0]->code;
     } else {
         //do not set the parent category. The category is already a top category.
     }
     $group_qb->add_constraint('up', '=', $data['parent_group']);
     foreach ($this->_config->get('groups_listing_order') as $ordering) {
         $this->_add_ordering($group_qb, $ordering);
     }
     $data['groups'] = $group_qb->execute();
     $data['products'] = array();
     if ($this->_config->get('group_list_products')) {
         $this->_list_group_products();
     }
     // Prepare datamanager
     $data['datamanager_group'] = new midcom_helper_datamanager2_datamanager($data['schemadb_group']);
     $data['datamanager_product'] = new midcom_helper_datamanager2_datamanager($data['schemadb_product']);
     if ($data['group']) {
         if ($GLOBALS['midcom_config']['enable_ajax_editing']) {
             $data['controller'] = midcom_helper_datamanager2_controller::create('ajax');
             $data['controller']->schemadb =& $data['schemadb_group'];
             $data['controller']->set_storage($data['group']);
             $data['controller']->process_ajax();
             $data['datamanager_group'] =& $data['controller']->datamanager;
         } else {
             $data['controller'] = null;
             if (!$data['datamanager_group']->autoset_storage($data['group'])) {
                 throw new midcom_error("Failed to create a DM2 instance for product group {$data['group']->guid}.");
             }
         }
         $this->bind_view_to_object($data['group'], $data['datamanager_group']->schema->name);
     }
     $this->_populate_toolbar();
     $this->_update_breadcrumb_line();
     // Set the active leaf
     if ($this->_config->get('display_navigation') && $data['group']) {
         $group =& $data['group'];
         // Loop as long as it is possible to get the parent group
         while ($group->guid) {
             // Break to the requested level (probably the root group of the products content topic)
             if ($group->id === $this->_config->get('root_group') || $group->guid === $this->_config->get('root_group')) {
                 break;
             }
             $temp = $group->id;
             if ($group->up == 0) {
                 break;
             }
             $group = new org_openpsa_products_product_group_dba($group->up);
         }
         if (isset($temp)) {
             // Active leaf of the topic
             $this->set_active_leaf($temp);
         }
     }
     midcom::get('head')->set_pagetitle($data['view_title']);
 }