All pastes #957432 Raw Edit

Edit command

public php v1 · immutable
#957432 ·published 2008-03-25 23:44 UTC
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');		}	}}?>