/** * 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; }
/** * 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); }
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; }
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(); }
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; }
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; }
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; }
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; }
/** * 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; }
/** * 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; }
/** * 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); }
/** * @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(); } }
/** * 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(); }
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; }
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); } } }
</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);
/** * 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']); }