public static function cascadeCreate($names, $separator = " > ") { $array = explode($separator, $names); foreach ($array as $index => $name) { $array[$index] = trim($name); } $producttypearray = array(); //do first one (special treatment for root) $producttype = Fetcher::fetchOne("Producttype", array('name' => '"' . $array[0] . '"')); $parent_id = $producttype->getId(); $producttypearray[] = $producttype; foreach ($array as $index => $name) { //skip first one if ($index == 0) { continue; } //fetch next producttype based on previous $producttype = Doctrine_Query::create()->from('Producttype p')->where('p.name="' . $name . '"')->andWhere('p.parent_id="' . $parent_id . '"')->fetchOne(); //one of the nodes not found //if null, create if (!$producttype) { //create $producttype = ProducttypeTable::createOne(array('name' => $name, 'parent_id' => $parent_id, 'priority' => 2)); } //prepare for next round $parent_id = $producttype->getId(); //add to array, whether fetched object or null $producttypearray[] = $producttype; } return $producttypearray; }
public function save() { foreach ($this->items as $index => $item) { //if exists, update if ($item["object"]) { $item["object"]->update($item); //$item is of type array['category1'=>...,] } else { //create new producttype plus parents $heirarchy = ProducttypeTable::cascadeCreate($item["name"]); //update details for last node $item["object"] = $heirarchy[count($producttypes) - 1]; $item["object"]->update(array('description' => $item["description"], 'category1' => $item["category1"], 'category2' => $item["category2"], 'category3' => $item["category3"], 'category4' => $item["category4"], 'category5' => $item["category5"], 'category6' => $item["category6"], 'category7' => $item["category7"], 'category8' => $item["category8"], 'category9' => $item["category9"], 'category10' => $item["category10"])); } } }
public function executeProductmassoper(sfWebRequest $request) { $producttype_id = $request->getParameter("producttype_id"); $producttype = ProducttypeTable::fetch($producttype_id); $prefix = $request->getParameter("prefix"); $suffix = $request->getParameter("suffix"); $replace = $request->getParameter("replace"); $with = $request->getParameter("with"); $maxsellprices = $request->getParameter("maxsellprices"); $maxbuyprices = $request->getParameter("maxbuyprices"); $minsellprices = $request->getParameter("minsellprices"); $minbuyprices = $request->getParameter("minbuyprices"); $autocalcsellprices = $request->getParameter("autocalcsellprices"); $autocalcbuyprices = $request->getParameter("autocalcbuyprices"); $ids = $request->getParameter("product_ids"); $products = $producttype->getProductsByIds($ids); //if no checked products, do nothing if (count($ids)) { if ($request->getParameter("submit") == "Merge") { $this->redirect("producttype/merge?producttype_id=" . $producttype_id . "&product_id=" . $request->getParameter("input") . "&duplicate_ids=" . implode(",", $ids)); //$this->mainproduct=ProductTable::fetch($request->getParameter("input")); //$this->products=$products; // $this->merge($mainproduct, $product); // } else { if ($request->getParameter("submit") == "Save") { foreach ($products as $product) { if ($maxsellprices[$product->getId()] != "") { $product->setMaxsellprice($maxsellprices[$product->getId()]); $product->setAutocalcsellprice(0); } if ($minsellprices[$product->getId()] != "") { $product->setMinsellprice($minsellprices[$product->getId()]); $product->setAutocalcsellprice(0); } if ($maxbuyprices[$product->getId()] != "") { $product->setMaxbuyprice($maxbuyprices[$product->getId()]); $product->setAutocalcbuyprice(0); } if ($minbuyprices[$product->getId()] != "") { $product->setMinbuyprice($minbuyprices[$product->getId()]); $product->setAutocalcbuyprice(0); } $product->save(); } } else { if ($request->getParameter("submit") == "Monitor") { foreach ($products as $product) { $product->setMonitored(1); $product->save(); } } else { if ($request->getParameter("submit") == "Unmonitor") { foreach ($products as $product) { $product->setMonitored(0); $product->save(); } } else { foreach ($products as $product) { $product->setName($prefix . str_replace($replace, $with, $product->getName()) . $suffix); //$product->setDescription($product->getName()); $product->save(); } } } } } } //$parent->calc(); $this->redirect($request->getReferer()); }