public function action_delete($id = null) { if (!is_null($id) and $gid = Model_Group::find($id)->delete()) { \Session::set_flash('success', 'Group #' . $id . ' has been deleted.'); } else { \Session::set_flash('error', 'Could not delete group #' . $id); } \Response::redirect('groups'); }
public function get_search_items($parent_id = 0, $group_type) { $group_type = strtolower($group_type); $group_type = $group_type && in_array($group_type, array('property', 'pricing')) ? $group_type : 'property'; \View::set_global('group_type', $group_type); // Override category_id if its a search $parent_id = \Input::get('parent_id', $parent_id); // If we are viewing category products // We need to find all products from that and child categories if ($parent_id) { $group = \Product\Model_Group::find_one_by_id($parent_id); $group and \View::set_global('group', $group); } // Reset $parent_id if its invalid value is_numeric($parent_id) or $parent_id = 0; /************ Start generating query ***********/ $items = Model_Group::find(function ($query) use($group_type, $parent_id) { $query->where('type', '=', $group_type); $query->where('parent_id', '=', $parent_id); // Get search filters foreach (\Input::get() as $key => $value) { if (!empty($value) || $value == '0') { switch ($key) { case 'title': $query->where($key, 'like', "%{$value}%"); break; case 'status': if (is_numeric($value)) { $query->where($key, $value); } break; } } } // Order query $query->order_by('sort', 'asc'); $query->order_by('id', 'asc'); }); /************ End generating query ***********/ // Reset to empty array if there are no result found by query if (is_null($items)) { $items = array(); } // Initiate pagination $pagination = \Hybrid\Pagination::make(array('total_items' => count($items), 'per_page' => \Input::get('per_page', 10), 'uri_segment' => null)); // Remove unwanted items, and show only required ones $items = array_slice($items, $pagination->offset, $pagination->per_page); return array('items' => $items, 'pagination' => $pagination); }
/** * Get additional content data selected * * @param $result = Query result */ public static function post_find($result) { if ($result !== null) { if (is_array($result)) { foreach ($result as $item) { // It will first check if we already have result in temporary result, // and only execute query if we dont. That way we dont have duplicate queries // Get related products $item->get_products = static::lazy_load(function () use($item) { $products = Model_Product_To_Groups::find(function ($query) use($item) { return $query->where('group_id', $item->id); }, 'product_id'); if (!empty($products)) { $products = '(' . implode(',', array_keys($products)) . ')'; return Model_Product::find(function ($query) use($products, $item) { $query->where('id', 'IN', \DB::expr($products)); $query->order_by('sort', 'asc'); return $query; }, 'id'); } return array(); }, $item->id, 'products'); // Get content children $item->get_children = static::lazy_load(function () use($item) { return Model_Group::find(array('where' => array('parent_id' => $item->id), 'order_by' => array('sort' => 'asc'))); }, $item->id, 'children'); // Get group images $item->get_images = static::lazy_load(function () use($item) { return Model_Group_Image::find(array('where' => array('content_id' => $item->id), 'order_by' => array('sort' => 'asc'))); }, $item->id, 'images'); // Get product groups $item->get_product_groups = static::lazy_load(function () use($item) { $product_groups = \Product\Model_Group::find_by_type('discount'); foreach ($product_groups as $product_group) { $product_group->set_user_group_id($item->id); } return $product_groups; }, $item->id, 'product_groups'); } } } // return the result return $result; }
/** * * Building tree */ public function action_index() { if ($_POST) { $val = \Validation::forge(); $val->add_field('id', 'node id', 'required|min_length[1]|max_length[20]'); $val->add_field('rel', 'node type', 'required|min_length[1]|max_length[20]'); if ($val->run()) { switch ($this->gettype($val->validated('rel'))) { //room case 0: $data['groups'] = Model_Group::find()->where('meta_update_user', $this->user)->get(); return \Response::forge(\View::forge('tree/group', $data)); break; //group //group case 1: $tests = Model_Test::find()->where('group_id', $val->validated('id'))->get(); $data['tests'] = $tests; return \Response::forge(\View::forge('tree/test', $data)); break; //test //test case 2: $records = Model_Record::find()->where('test_id', $val->validated('id'))->get(); $data['records'] = $records; return \Response::forge(\View::forge('tree/record', $data)); break; //record //record case 3: echo '{:P}'; break; } //echo $val->validated('id'); } } }
/** * Get additional content data selected * * @param $result = Query result */ public static function post_find($result) { if ($result !== null) { if (is_array($result)) { foreach ($result as $item) { // It will first check if we already have result in temporary result, // and only execute query if we dont. That way we dont have duplicate queries // Get related products $item->get_products = static::lazy_load(function () use($item) { $products = Model_Product_To_Groups::find(function ($query) use($item) { return $query->where('group_id', $item->id); }, 'product_id'); if (!empty($products)) { $products = '(' . implode(',', array_keys($products)) . ')'; return Model_Product::find(function ($query) use($products, $item) { $query->where('id', 'IN', \DB::expr($products)); $query->order_by('sort', 'asc'); return $query; }, 'id'); } return array(); }, $item->id, 'products'); // Get content children $item->get_children = static::lazy_load(function () use($item) { return Model_Group::find(array('where' => array('parent_id' => $item->id), 'order_by' => array('sort' => 'asc'))); }, $item->id, 'children'); // Get group images $item->get_images = static::lazy_load(function () use($item) { return Model_Group_Image::find(array('where' => array('content_id' => $item->id), 'order_by' => array('sort' => 'asc'))); }, $item->id, 'images'); // Get group discount options // Use one more item property (user_group_id) // It can be set using methods (set_user_group_id and get_user_group_id) $item->get_discount_options = static::lazy_load(function () use($item) { $options = Model_Group_Options::find(array('where' => array('user_group_id' => $item->get_user_group_id(), 'product_group_id' => $item->id))); return isset($options[0]) ? $options[0] : array(); }, $item->id, 'discount_options', 'object'); // Get group discount options // Use one more item property (user_group_id) // It can be set using methods (set_user_group_id and get_user_group_id) $item->get_discounts = static::lazy_load(function () use($item) { return Model_Group_Discounts::find(array('where' => array('user_group_id' => $item->get_user_group_id(), 'product_group_id' => $item->id), 'order_by' => array('qty' => 'asc')), 'qty'); }, $item->id, 'discounts'); // DO NOT CHANGE THIS TWO FUNCTIONS AS THEY ARE NEEDED $item->set_user_group_id = function ($user_group_id = NULL) { \Product\Model_Group::$user_group_id = $user_group_id; }; $item->get_user_group_id = function () { return \Product\Model_Group::$user_group_id; }; } } } // return the result return $result; }
/** * Get additional content data selected * * @param $result = Query result */ public static function post_find($result) { if ($result !== null) { if (is_array($result)) { foreach ($result as $item) { // It will first check if we already have result in temporary result, // and only execute query if we dont. That way we dont have duplicate queries // Get product categories $item->get_categories = static::lazy_load(function () use($item) { $categories = Model_Product_To_Categories::find(function ($query) use($item) { return $query->where('product_id', $item->id); }, 'category_id'); if (!empty($categories)) { $categories = '(' . implode(',', array_keys($categories)) . ')'; return Model_Category::find(function ($query) use($categories) { return $query->where('id', 'IN', \DB::expr($categories)); }, 'id'); } return array(); }, $item->id, 'categories'); // Get product infotabs $item->get_infotabs = static::lazy_load(function () use($item) { return Model_Product_To_Infotabs::find(function ($query) use($item) { $query->order_by('sort', 'asc'); return $query->where('product_id', $item->id); }); }, $item->id, 'infotabs'); // Get product groups $item->get_groups = static::lazy_load(function () use($item) { $groups = Model_Product_To_Groups::find(function ($query) use($item) { return $query->where('product_id', $item->id); }, 'group_id'); if (!empty($groups)) { $groups = '(' . implode(',', array_keys($groups)) . ')'; return Model_Group::find(function ($query) use($groups, $item) { $query->where('id', 'IN', \DB::expr($groups)); $query->order_by('sort', 'asc'); return $query; }, 'id'); } return array(); }, $item->id, 'groups'); // Get product groups $item->get_pricing_group = static::lazy_load(function () use($item) { $groups = Model_Product_To_Groups::find(function ($query) use($item) { return $query->where('product_id', $item->id); }, 'group_id'); if (!empty($groups)) { $groups = '(' . implode(',', array_keys($groups)) . ')'; $groups = Model_Group::find(function ($query) use($groups, $item) { $query->where('type', 'pricing'); $query->where('id', 'IN', \DB::expr($groups)); $query->order_by('sort', 'asc'); return $query; }); return !empty($groups) ? $groups[0] : false; } return false; }, $item->id, 'pricing_group', 'object'); // Get related products $item->get_related_products = static::lazy_load(function () use($item) { $related = Model_Product_To_Related::find(function ($query) use($item) { return $query->where('product_id', $item->id); }, 'related_id'); if (!empty($related)) { $related = '(' . implode(',', array_keys($related)) . ')'; return Model_Product::find(function ($query) use($related, $item) { $query->where('id', 'IN', \DB::expr($related)); $query->where('id', '<>', $item->id); $query->order_by('sort', 'asc'); return $query; }, 'id'); } return array(); }, $item->id, 'related_products'); // Get upsell products $item->get_upsell_products = static::lazy_load(function () use($item) { $upsell = Model_Product_To_Upsell::find(function ($query) use($item) { return $query->where('product_id', $item->id); }, 'upsell_id'); if (!empty($upsell)) { $upsell = '(' . implode(',', array_keys($upsell)) . ')'; return Model_Product::find(function ($query) use($upsell, $item) { $query->select(Model_Product_To_Upsell::get_protected('_table_name') . '.discount', Model_Product::get_protected('_table_name') . '.*'); $query->join(Model_Product_To_Upsell::get_protected('_table_name')); $query->on(Model_Product_To_Upsell::get_protected('_table_name') . '.upsell_id', '=', Model_Product::get_protected('_table_name') . '.id'); $query->where(Model_Product::get_protected('_table_name') . '.id', 'IN', \DB::expr($upsell)); $query->where(Model_Product::get_protected('_table_name') . '.id', '<>', $item->id); $query->order_by(Model_Product::get_protected('_table_name') . '.sort', 'asc'); return $query; }, 'id'); } return array(); }, $item->id, 'upsell_products'); // Get content images $item->get_images = static::lazy_load(function () use($item) { return Model_Product_Image::find(array('where' => array('content_id' => $item->id), 'order_by' => array('sort' => 'asc'))); }, $item->id, 'images'); // Get content files $item->get_files = static::lazy_load(function () use($item) { return Model_Product_File::find(array('where' => array('content_id' => $item->id), 'order_by' => array('sort' => 'asc'))); }, $item->id, 'files'); // Get content videos $item->get_videos = static::lazy_load(function () use($item) { return Model_Product_Video::find(array('where' => array('content_id' => $item->id), 'order_by' => array('sort' => 'asc'))); }, $item->id, 'videos'); // Get content children $item->get_seo = static::lazy_load(function () use($item) { return Model_Product_Seo::find_one_by_content_id($item->id); }, $item->id, 'seo', 'object'); // Get attributes $item->get_attributes = static::lazy_load(function () use($item) { return Model_Attribute::find(array('where' => array('product_id' => $item->id))); }, $item->id, 'attributes'); // Get default attribute $item->get_default_attributes = static::lazy_load(function () use($item) { return Model_Attribute::find(array('where' => array('product_id' => $item->id, 'default' => 1, 'active' => 1))); }, $item->id, 'default_attributes'); // Get all active prices $item->get_all_prices = static::lazy_load(function () use($item) { $product_attributes = Model_Attribute::find(function ($query) use($item) { $query->join(Model_Attribute_Price::get_protected('_table_name')); $query->on(Model_Attribute_Price::get_protected('_table_name') . '.product_attribute_id', '=', Model_Attribute::get_protected('_table_name') . '.id'); $query->where('product_id', $item->id); $query->and_where('attributes', '!=', ''); $query->and_where('active', 1); return $query; }, 'id'); return $product_attributes; }, $item->id, 'unit_price'); // Get prices for product $item->get_prices = static::lazy_load(function () use($item) { $product_attributes = Model_Attribute::find(function ($query) use($item) { $query->join(Model_Attribute_Price::get_protected('_table_name')); $query->on(Model_Attribute_Price::get_protected('_table_name') . '.product_attribute_id', '=', Model_Attribute::get_protected('_table_name') . '.id'); $query->where('product_id', $item->id); return $query; }, 'id'); return $product_attributes; }, $item->id, 'unit_price'); // Get unit price $item->get_unit_price = static::lazy_load(function () use($item) { $product_attributes = Model_Attribute::find(function ($query) use($item) { $query->join(Model_Attribute_Price::get_protected('_table_name')); $query->on(Model_Attribute_Price::get_protected('_table_name') . '.product_attribute_id', '=', Model_Attribute::get_protected('_table_name') . '.id'); $query->where('product_id', $item->id); $query->and_where('type', 'unit_price'); $query->and_where('attributes', '!=', ''); $query->and_where('active', 1); $query->limit(1); return $query; }, 'id'); return $product_attributes; }, $item->id, 'unit_price'); // Get sale price $item->get_sale_price = static::lazy_load(function () use($item) { $product_attributes = Model_Attribute::find(function ($query) use($item) { $query->join(Model_Attribute_Price::get_protected('_table_name')); $query->on(Model_Attribute_Price::get_protected('_table_name') . '.product_attribute_id', '=', Model_Attribute::get_protected('_table_name') . '.id'); $query->where('product_id', $item->id); $query->and_where('type', 'sale_price'); $query->and_where('attributes', '!=', ''); $query->and_where('active', 1); $query->limit(1); return $query; }, 'id'); return $product_attributes; }, $item->id, 'sale_price'); // Get default price (RRP or Sale price) $item->get_default_price = static::lazy_load(function () use($item) { $out = array(0); $product_attributes = Model_Attribute::find(function ($query) use($item) { $query->join(Model_Attribute_Price::get_protected('_table_name')); $query->on(Model_Attribute_Price::get_protected('_table_name') . '.product_attribute_id', '=', Model_Attribute::get_protected('_table_name') . '.id'); $query->where('product_id', $item->id); $query->and_where('type', 'sale_price'); $query->and_where('attributes', '!=', ''); $query->and_where('active', 1); $query->and_where('default', 1); $query->limit(1); return $query; }, 'id'); if ($product_attributes) { $obj = reset($product_attributes); if ($obj->price > 0) { $out[0] = $obj->price; $out[1] = 'sale_price'; } else { $out[0] = $obj->retail_price; $out[1] = 'retail_price'; } } return $out; }, $item->id, 'default_price'); // Get active attribute group $item->get_active_attribute_group = static::lazy_load(function () use($item) { if ($attribute = Model_Attribute::find_one_by_product_id($item->id)) { return $attribute->attribute_group; } return false; }, $item->id, 'active_attribute_group'); // Get product data $item->get_data = static::lazy_load(function () use($item) { return \Product\Model_Product::product_data($item); }, $item->id, 'data'); } } } // return the result return $result; }
public static function _init() { parent::_init(); $objects = \Model_Group::find('all', array('order_by' => 'level')); static::$groups = Petro::obj_to_keyval($objects, 'level', 'name'); }
public function usergroups_select_array() { $groups = array(); foreach (Model_Group::find('all') as $group) { $groups[$group->id] = $group->name; } return $groups; }
public function get_search_items($category_id = false) { // Override category_id if its a search $category_id = \Input::get('category_id', $category_id); $product_ids = array(); // If we are viewing category products // We need to find all products from that and child categories if (is_numeric($category_id)) { $category = \Product\Model_Category::find_one_by_id($category_id); if ($category) { \View::set_global('category', $category); if ($category->all_products) { $product_ids = array_keys($category->all_products); } } } // If we are filtering products by category and there is nothing found // We return empty array of products without even going to database if (empty($product_ids) && is_numeric($category_id)) { $items = array(); } else { /************ Start generating query ***********/ $items = Model_Product::find(function ($query) use($product_ids) { if (!empty($product_ids)) { $query->where('product.id', 'in', $product_ids); } // Get search filters foreach (\Input::get() as $key => $value) { if (!empty($value) || $value == '0') { switch ($key) { case 'title': $query->select('product.*'); $query->distinct(); $query->join('product_attributes'); $query->on('product.id', '=', 'product_attributes.product_id'); $query->where('product.' . $key, 'like', "%{$value}%"); // ->or_where('product.code', 'like', "%$value%") //->or_where('product_attributes.product_code', 'like', "%$value%"); break; case 'status': if (is_numeric($value)) { $query->where($key, $value); } break; case 'active_from': $date = strtotime($value); if ($date) { $query->where($key, '>=', $date); } break; case 'active_to': $date = strtotime($value); if ($date) { $query->where($key, '<=', $date); } break; } } } // Order query $query->order_by('product.sort', 'asc'); $query->order_by('product.id', 'asc'); }); } /************ End generating query ***********/ // Reset to empty array if there are no result found by query if (is_null($items)) { $items = array(); } // Initiate pagination $pagination = \Hybrid\Pagination::make(array('total_items' => count($items), 'per_page' => \Input::get('per_page', 10), 'uri_segment' => null)); // Remove unwanted items, and show only required ones $items = array_slice($items, $pagination->offset, $pagination->per_page); $status = array('false' => 'Select', '1' => 'Active', '0' => 'Inactive', '2' => 'Active in period'); $group = Model_Group::find(); return array('items' => $items, 'group' => $group, 'pagination' => $pagination, 'status' => $status); }