rendered paste body<?php/**************************************************************************\* Copyright 2006-2007 Loopshot Inc. ** Written by: Eric Jennings ** <ericj@loopshot.com> ** -------------------------------------------- ** This program is free software; you can redistribute it and/or modify it ** under the terms of the GNU Lesser General Public License as published ** by the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. *\**************************************************************************/ class PFProductEditCommand extends PFDefaultCommand implements PFFormCommand { public function DoExecute(PFRequest $request) { // initialize form rules/datasets and populate data $form = $this->InitializeForm($request); $this->PopulateForm($request, $form); // render form $page = PFRegistry::GetInstance()->GetPage(); if (is_numeric($request->GetProperty('pid'))) { $page->Assign('SHOP_EDIT_PRODUCT', true); $page->Assign('pid', $request->GetProperty('pid')); PFFactory::GetInstance()->InitPropelObject('ShopProduct'); $product = ShopProductPeer::RetrieveByPk($request->GetProperty('pid')); if(is_numeric($request->GetProperty('delete_photo'))){ $product->GetMainPhoto()->Remove(); } $page->Assign('main_photo', $product->GetMainPhoto()); } // populate data from the database PFFactory::GetInstance()->InitPropelObject('ShopProductItem'); // Get product $c = new Criteria(); $c->add(ShopProductItemPeer::SHOP_PRODUCT_ID, $request->GetProperty('pid')); $products = ShopProductItemPeer::doSelect($c); $page->Assign('items', ShopProductItemPeer::AssignData($products)); $page->Assign('SHOP_ADD_PRODUCT_ITEM_LINK', PFSession::GetInstance()->GetURL('shop/productitemedit?pid=' . $request->GetProperty('pid'), true)); $page->Assign('SHOP_EDIT_PRODUCT_ITEM_LINK', PFSession::GetInstance()->GetURL('shop/productitemedit', true)); $page->Assign('FORM_ELEMENTS', $form->RenderForm()); return $this->HandleSubmittedForm($request, $form); } public function InitializeForm(PFRequest $request) { // create form for this page $form = PFFactory::GetInstance()->CreateObject('api.form', $request, 'shop.productedit', 'saveproduct'); $form->SetAction(PFSession::GetInstance()->GetURL('shop/productedit', true)); $el = &$form->GetFormObject()->getElementByName('pid'); $el->setValue($request->getProperty('pid')); // set button info $pid = $request->GetProperty('pid'); $el = &$form->getFormObject()->getElementByName('cancel'); if (empty($pid)) { $el->setAttribute('onclick', "document.location.href='" . PFSession::GetInstance()->GetURL('shop/productlist', true) . "';"); $el->setValue('Cancel'); } else { $el->setAttribute('onclick', "if (confirm(\"Are you sure you want to delete this product and all of its items?\")) { document.location.href='" . PFSession::GetInstance()->GetURL('shop/productdelete?pid=' . $pid, true) . "'; }"); $el->setValue('Delete Product'); } // product category datasource PFFactory::GetInstance()->InitPropelObject('ShopProductCategory'); $cats = array(); $results = ShopProductCategoryPeer::GetAllPublishedCategories(null, false); foreach ($results as $result) { $cats[] = array('label' => $result['name'], 'value' => $result['shop_product_category_id']); } $el = &$form->getFormObject()->getElementByName('categories'); $el->SetValues($cats); $brands = array(); $results = ShopProductCategoryPeer::GetAllPublishedBrands(); foreach ($results as $result) { $brands[] = array('label' => $result['name'], 'value' => $result['shop_product_category_id']); } $el = &$form->GetFormObject()->GetElementByName('brands'); $el->SetValues($brands);/* $types = array( array('label' => 'Clothing', 'value' => 'clothing'), array('label' => 'Jewelry', 'value' => 'jewelry'), array('label' => 'None', 'value' => 'none') ); $el = &$form->GetFormObject()->GetElementByName('product_type'); $el->SetValues($types); $el->SetValue('none');*/ PFFactory::GetInstance()->InitObject('api.imagefile'); $el = &$form->GetFormObject()->getElementByName('photo'); $el->setAttribute('tempdir', PF_TEMP_PATH); $el->setAttribute('uploaddir', PFImageFile::GetInstance()->GetUploadDir('shop')); /* // file upload directories $el = &$form->GetFormObject()->getElementByName('product_thumb_image'); $el->setAttribute('tempdir', PF_TEMP_PATH); $el->setAttribute('uploaddir', '/www/premium/www.hotaugustnights.net/htdocs/modules/shop/misc/images/products/thumbnail'); $el = &$form->GetFormObject()->getElementByName('product_full_image'); $el->setAttribute('tempdir', PF_TEMP_PATH); $el->setAttribute('uploaddir', '/www/premium/www.hotaugustnights.net/htdocs/modules/shop/misc/images/products/fullsize'); */ // trim filters $fields = array('name', 'gender', 'search_tags', 'short_description', 'long_description', 'attribute_1_key', 'attribute_2_key', 'attribute_3_key', 'attribute_4_key', 'attribute_5_key' ); $form->ApplyTrimFilters($fields); return $form; } public function PopulateForm(PFRequest $request, PFForm $form) { // if no pid is set, just return $pid = $request->GetProperty('pid'); if (empty($pid)) { return false; } // populate data from the database PFFactory::GetInstance()->InitPropelObject('ShopProduct'); PFFactory::GetInstance()->InitPropelObject('ShopProductItem'); PFFactory::GetInstance()->InitPropelObject('ShopProductCategoryXref'); // Get product $c = new Criteria(); $c->add(ShopProductPeer::SHOP_PRODUCT_ID, $pid); $product = ShopProductPeer::doSelect($c); // Get product_item $c = new Criteria(); $c->add(ShopProductItemPeer::SHOP_PRODUCT_ID, $pid); $c->add(ShopProductItemPeer::DELETED, false); $productItems = ShopProductItemPeer::doSelect($c); PFRegistry::GetInstance()->GetPage()->Assign('SHOP_PRODUCT_ITEM_COUNT',count($productItems)); // Get product_category $c = new Criteria(); $c->add(ShopProductCategoryXrefPeer::SHOP_PRODUCT_ID, $pid); $c->add(ShopProductCategoryPeer::BRAND, 0); $productCategories = ShopProductCategoryXrefPeer::doSelectJoinShopProductCategory($c); $categories = array(); if (isset($productCategories)) { foreach($productCategories as $category) { $categories[] = $category->getShopProductCategoryId(); } } $c = new Criteria(); $c->add(ShopProductCategoryXrefPeer::SHOP_PRODUCT_ID, $pid); $c->add(ShopProductCategoryPeer::BRAND, true); $productBrands = ShopProductCategoryXrefPeer::doSelectJoinShopProductCategory($c); $brands = array(); if (isset($productBrands)) { foreach($productBrands as $category) { $brands[] = $category->getShopProductCategoryId(); } } // set default form values $form->GetFormObject()->setValues( array( 'name' => $product[0]->getName(), 'search_tags' => $product[0]->getSearchTags(), 'short_description' => $product[0]->getShortDescription(), 'long_description' => $product[0]->getLongDescription(), 'publish' => $product[0]->getPublish(), 'gender' => $product[0]->GetGender(), 'product_type' => $product[0]->GetProductType(), 'attribute_1_key' => $product[0]->getAttribute1Key(), 'attribute_2_key' => $product[0]->getAttribute2Key(), 'attribute_3_key' => $product[0]->getAttribute3Key(), 'attribute_4_key' => $product[0]->getAttribute4Key(), 'attribute_5_key' => $product[0]->getAttribute5Key(), 'categories' => $categories, 'brands' => $brands ), false ); } public function HandleSubmittedForm(PFRequest $request, PFForm $form) { if($request->GetProperty('crop_complete')){ } // check the form and display error messages if any if ($form->GetFormObject()->isSubmitted()) { if ($form->ReportErrors()) { return self::Statuses('CMD_INSUFFICIENT_DATA'); } $con = Propel::getConnection(PF_DATABASE_NAME); try { $con->begin(); $timestamp = mktime(); PFFactory::GetInstance()->InitObject('api.imagefile'); PFFactory::GetInstance()->InitPropelObject('ShopProduct'); PFFactory::GetInstance()->InitPropelObject('ShopProductPhoto'); PFFactory::GetInstance()->InitPropelObject('ShopProductItem'); PFFactory::GetInstance()->InitPropelObject('ShopProductCategoryXref'); $pid = $request->GetProperty('pid'); if (empty($pid)) { $product = PFFactory::GetInstance()->CreatePropelObject('ShopProduct'); $productItem = PFFactory::GetInstance()->CreatePropelObject('ShopProductItem'); } else { $product = ShopProductPeer::retrieveByPK($pid); } // assign to shop_product table $ptype = $request->GetProperty('product_type'); $product_type = (is_array($ptype)) ? $ptype[0] : $ptype; $product->setName($request->GetProperty('name')); $product->SetGender($request->GetProperty('gender')); $product->setSearchTags($request->GetProperty('search_tags')); $product->setShortDescription($request->GetProperty('short_description')); $product->setLongDescription($request->GetProperty('long_description')); $product->setPublish($request->GetProperty('publish')); $product->SetProductType($product_type); $product->setAttribute1Key($request->GetProperty('attribute_1_key')); $product->setAttribute2Key($request->GetProperty('attribute_2_key')); $product->setAttribute3Key($request->GetProperty('attribute_3_key')); $product->setAttribute4Key($request->GetProperty('attribute_4_key')); $product->setAttribute5Key($request->GetProperty('attribute_5_key')); $product->setDateCreated($timestamp); $product->setDateModified($timestamp); $product->setDeleted(0); if (!$product->save($con)) { $con->rollback(); $request->AddFeedback('shop', array('ERROR_SAVING_TO_DATABASE', 'shop_product'), 'ERROR'); return self::Statuses('CMD_ERROR'); } if (empty($pid)) { $productItem->setShopProductId($product->getShopProductId()); if (!$productItem->save($con)) { $con->rollback(); $request->AddFeedback('shop', array('ERROR_SAVING_TO_DATABASE', 'shop_product_item'), 'ERROR'); return self::Statuses('CMD_ERROR'); } } $photos = PFImageFile::GenerateThreeThumbnails($form->GetFormObject()->GetElementByName('photo'), 'shop'); if($photos !== false){ ShopProductPhotoPeer::ResetMainPhoto($product->getShopProductId()); $photo = PFFactory::GetInstance()->CreatePropelObject('ShopProductPhoto'); $photo->SetPhoto($photos['ex']); $photo->SetPhotoMed($photos['med']); $photo->SetPhotoSmall($photos['small']); $photo->SetShopProductId($product->getShopProductId()); $photo->SetMainPhoto(1); $photo->Save($con); } // delete all category references for this product ShopProductCategoryXrefPeer::DeleteAllCategoriesForProduct($pid); // assign to shop_product_category_xref table foreach ($request->GetProperty('categories') as $cat) { $productCategory = PFFactory::GetInstance()->CreatePropelObject('ShopProductCategoryXref'); $productCategory->setShopProductId($product->getShopProductId()); $productCategory->setShopProductCategoryId($cat); if (!$productCategory->save($con)) { $con->rollback(); $request->AddFeedback('shop', array('ERROR_SAVING_TO_DATABASE', 'shop_product_category_xref'), 'ERROR'); return self::Statuses('CMD_ERROR'); } } foreach ($request->GetProperty('brands') as $cat) { $productCategory = PFFactory::GetInstance()->CreatePropelObject('ShopProductCategoryXref'); $productCategory->setShopProductId($product->getShopProductId()); $productCategory->setShopProductCategoryId($cat); if (!$productCategory->save($con)) { $con->rollback(); $request->AddFeedback('shop', array('ERROR_SAVING_TO_DATABASE', 'shop_product_category_xref'), 'ERROR'); return self::Statuses('CMD_ERROR'); } } $request->AddFeedback('shop', 'NOTICE_PRODUCT_SAVED', 'NOTICE'); $con->commit(); } catch (Exception $e) { $con->rollback(); PFException::HandleVanillaException($e->getMessage(), $e->getCode()); return self::Statuses('CMD_ERROR'); } $request->SetProperty('pid', $product->getShopProductId()); return self::Statuses('CMD_OK'); } }}?>