AAAA.htaccess000066600000000177151373377110006363 0ustar00 Order allow,deny Deny from all com_virtuemart.php000066600000017431151373377110010337 0ustar00link); parse_str(html_entity_decode($link_query['query']), $link_vars); $catid = JArrayHelper::getValue($link_vars, 'virtuemart_category_id', 0); $prodid = JArrayHelper::getValue($link_vars, 'virtuemart_product_id', 0); if (!$catid) { $menu = & JSite::getMenu(); $menuParams = $menu->getParams($node->id); $catid = $menuParams->get('virtuemart_category_id', 0); } if (!$prodid) { $menu = & JSite::getMenu(); $menuParams = $menu->getParams($node->id); $prodid = $menuParams->get('virtuemart_product_id', 0); } if ($prodid && $catid) { $node->uid = 'com_virtuemartc' . $catid . 'p' . $prodid; $node->expandible = false; } elseif ($catid) { $node->uid = 'com_virtuemartc' . $catid; $node->expandible = true; } } /** Get the content tree for this kind of content */ static function getTree($xmap, $parent, &$params) { self::initialize(); $menu = & JSite::getMenu(); $link_query = parse_url($parent->link); parse_str(html_entity_decode($link_query['query']), $link_vars); $catid = intval(JArrayHelper::getValue($link_vars, 'virtuemart_category_id', 0)); $params['Itemid'] = intval(JArrayHelper::getValue($link_vars, 'Itemid', $parent->id)); $view = JArrayHelper::getValue($link_vars, 'view', ''); // we currently support only categories if (!in_array($view, array('categories','category'))) { return true; } $include_products = JArrayHelper::getValue($params, 'include_products', 1); $include_products = ( $include_products == 1 || ( $include_products == 2 && $xmap->view == 'xml') || ( $include_products == 3 && $xmap->view == 'html')); $params['include_products'] = $include_products; $params['include_product_images'] = (JArrayHelper::getValue($params, 'include_product_images', 1) && $xmap->view == 'xml'); $params['product_image_license_url'] = trim(JArrayHelper::getValue($params, 'product_image_license_url', '')); $priority = JArrayHelper::getValue($params, 'cat_priority', $parent->priority); $changefreq = JArrayHelper::getValue($params, 'cat_changefreq', $parent->changefreq); if ($priority == '-1') $priority = $parent->priority; if ($changefreq == '-1') $changefreq = $parent->changefreq; $params['cat_priority'] = $priority; $params['cat_changefreq'] = $changefreq; $priority = JArrayHelper::getValue($params, 'prod_priority', $parent->priority); $changefreq = JArrayHelper::getValue($params, 'prod_changefreq', $parent->changefreq); if ($priority == '-1') $priority = $parent->priority; if ($changefreq == '-1') $changefreq = $parent->changefreq; $params['prod_priority'] = $priority; $params['prod_changefreq'] = $changefreq; xmap_com_virtuemart::getCategoryTree($xmap, $parent, $params, $catid); return true; } /** Virtuemart support */ static function getCategoryTree($xmap, $parent, &$params, $catid=0) { $database = &JFactory::getDBO(); if (!isset($urlBase)) { $urlBase = JURI::base(); } $vendorId = 1; $cache = & JFactory::getCache('com_virtuemart','callback'); $children = $cache->call( array( 'VirtueMartModelCategory', 'getChildCategoryList' ),$vendorId, $catid ); $xmap->changeLevel(1); foreach ($children as $row) { $node = new stdclass; $node->id = $parent->id; $node->uid = $parent->uid . 'c' . $row->virtuemart_category_id; $node->browserNav = $parent->browserNav; $node->name = stripslashes($row->category_name); $node->priority = $params['cat_priority']; $node->changefreq = $params['cat_changefreq']; $node->expandible = true; $node->link = 'index.php?option=com_virtuemart&view=category&virtuemart_category_id=' . $row->virtuemart_category_id . '&Itemid='.$parent->id; if ($xmap->printNode($node) !== FALSE) { xmap_com_virtuemart::getCategoryTree($xmap, $parent, $params, $row->virtuemart_category_id); } } $xmap->changeLevel(-1); if ($params['include_products']) { $products = self::$productModel->getProductsInCategory($catid); if ($params['include_product_images']) { self::$categoryModel->addImages($products,1); } $xmap->changeLevel(1); foreach ($products as $row) { $node = new stdclass; $node->id = $parent->id; $node->uid = $parent->uid . 'c' . $row->virtuemart_category_id . 'p' . $row->virtuemart_product_id; $node->browserNav = $parent->browserNav; $node->priority = $params['prod_priority']; $node->changefreq = $params['prod_changefreq']; $node->name = $row->product_name; $node->modified = strtotime($row->modified_on); $node->expandible = false; $node->link = 'index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $row->virtuemart_product_id.'&virtuemart_category_id=' . $row->virtuemart_category_id . '&Itemid='.$parent->id; if ($params['include_product_images']) { foreach ($row->images as $image) { if (isset($image->file_url)) { $imagenode = new stdClass; $imagenode->src = $urlBase . $image->file_url_thumb; $imagenode->title = $row->product_name; $imagenode->license = $params['product_image_license_url']; $node->images[] = $imagenode; } } } $xmap->printNode($node); } $xmap->changeLevel(-1); } } static protected function initialize() { if (self::$initialized) return; $app = JFactory::getApplication (); if (!class_exists( 'VmConfig' )) { require(JPATH_ADMINISTRATOR . '/components/com_virtuemart/helpers/config.php'); VmConfig::loadConfig(); } JTable::addIncludePath(JPATH_VM_ADMINISTRATOR . '/tables'); $app->setUserState('com_virtuemart.htmlc0.limit',9000); $app->setUserState('com_virtuemart.xmlc0.limit',9000); if (!class_exists('VirtueMartModelCategory')) require(JPATH_VM_ADMINISTRATOR . '/models/category.php'); self::$categoryModel = new VirtueMartModelCategory(); if (!class_exists('VirtueMartModelProduct')) require(JPATH_VM_ADMINISTRATOR . '/models/product.php'); self::$productModel = new VirtueMartModelProduct(); } } com_virtuemart.xml000066600000013043151373377110010343 0ustar00 Xmap - Virtuemart Plugin Guillermo Vargas January 2012 GNU GPL http://www.gnu.org/copyleft/gpl.html GNU/GPL guille@vargas.co.cr joomla.vargas.co.cr 2.0.1 XMAP_VM_PLUGIN_DESCRIPTION com_virtuemart.php index.html en-GB.plg_xmap_com_virtuemart.ini es-ES.plg_xmap_com_virtuemart.ini fa-IR.plg_xmap_com_virtuemart.ini cs-CZ.plg_xmap_com_virtuemart.ini nl-NL.plg_xmap_com_virtuemart.ini ru-RU.plg_xmap_com_virtuemart.ini
index.html000066600000000036151373377110006554 0ustar00controllers/invoice.php000066600000021101151373621660011270 0ustar00useSSL = VmConfig::get('useSSL',0); $this->useXHTML = true; VmConfig::loadJLang('com_virtuemart_shoppers',TRUE); VmConfig::loadJLang('com_virtuemart_orders',TRUE); } /** * Override of display to prevent caching * * @return JController A JController object to support chaining. */ public function display($cachable = false, $urlparams = false) { $format = JRequest::getWord('format','html'); $layout = JRequest::getWord('layout', 'invoice'); if ($format != 'pdf') { $viewName='invoice'; $view = $this->getView($viewName, $format); $view->headFooter = true; $view->display(); } else { //PDF needs more RAM than usual VmConfig::ensureMemoryLimit(64); $viewName='invoice'; $format="html"; // Create the invoice PDF file on disk and send that back $orderDetails = $this->getOrderDetails(); $fileLocation = $this->getInvoicePDF($orderDetails, 'invoice',$layout); $fileName = basename ($fileLocation); if (file_exists ($fileLocation)) { $maxSpeed = 200; $range = 0; $size = filesize ($fileLocation); $contentType = 'application/pdf'; header ("Cache-Control: public"); header ("Content-Transfer-Encoding: binary\n"); header ('Content-Type: application/pdf'); $contentDisposition = 'attachment'; $agent = strtolower ($_SERVER['HTTP_USER_AGENT']); if (strpos ($agent, 'msie') !== FALSE) { $fileName = preg_replace ('/\./', '%2e', $fileName, substr_count ($fileName, '.') - 1); } header ("Content-Disposition: $contentDisposition; filename=\"$fileName\""); header ("Accept-Ranges: bytes"); if (isset($_SERVER['HTTP_RANGE'])) { list($a, $range) = explode ("=", $_SERVER['HTTP_RANGE']); str_replace ($range, "-", $range); $size2 = $size - 1; $new_length = $size - $range; header ("HTTP/1.1 206 Partial Content"); header ("Content-Length: $new_length"); header ("Content-Range: bytes $range$size2/$size"); } else { $size2 = $size - 1; header ("Content-Range: bytes 0-$size2/$size"); header ("Content-Length: " . $size); } if ($size == 0) { die('Zero byte file! Aborting download'); } //$contents = file_get_contents ($fileName); //echo $contents; // set_magic_quotes_runtime(0); $fp = fopen ("$fileLocation", "rb"); fseek ($fp, $range); while (!feof ($fp) and (connection_status () == 0)) { set_time_limit (0); print(fread ($fp, 1024 * $maxSpeed)); flush (); ob_flush (); sleep (1); } fclose ($fp); JFactory::getApplication()->close(); } else { // TODO: Error message // vmError("File $fileName not found!"); } } } public function getOrderDetails() { $orderModel = VmModel::getModel('orders'); $orderDetails = 0; // If the user is not logged in, we will check the order number and order pass if ($orderPass = JRequest::getString('order_pass',false) and $orderNumber = JRequest::getString('order_number',false)){ $orderId = $orderModel->getOrderIdByOrderPass($orderNumber,$orderPass); if(empty($orderId)){ vmDebug ('Invalid order_number/password '.JText::_('COM_VIRTUEMART_RESTRICTED_ACCESS')); return 0; } $orderDetails = $orderModel->getOrder($orderId); } if($orderDetails==0) { $_currentUser = JFactory::getUser(); $cuid = $_currentUser->get('id'); // If the user is logged in, we will check if the order belongs to him $virtuemart_order_id = JRequest::getInt('virtuemart_order_id',0) ; if (!$virtuemart_order_id) { $virtuemart_order_id = VirtueMartModelOrders::getOrderIdByOrderNumber(JRequest::getString('order_number')); } $orderDetails = $orderModel->getOrder($virtuemart_order_id); if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if(!Permissions::getInstance()->check("admin")) { if(!empty($orderDetails['details']['BT']->virtuemart_user_id)){ if ($orderDetails['details']['BT']->virtuemart_user_id != $cuid) { echo 'view '.JText::_('COM_VIRTUEMART_RESTRICTED_ACCESS'); return ; } } } } return $orderDetails; } public function samplePDF() { if(!class_exists('VmVendorPDF')){ vmError('vmPdf: For the pdf, you must install the tcpdf library at '.JPATH_VM_LIBRARIES.DS.'tcpdf'); return 0; } $pdf = new VmVendorPDF(); $pdf->AddPage(); $pdf->PrintContents(JText::_('COM_VIRTUEMART_PDF_SAMPLEPAGE')); $pdf->Output("vminvoice_sample.pdf", 'I'); JFactory::getApplication()->close(); } function getInvoicePDF($orderDetails = 0, $viewName='invoice', $layout='invoice', $format='html', $force = false){ // $force = true; $path = VmConfig::get('forSale_path',0); if(empty($path) ){ vmError('No path set to store invoices'); return false; } else { $path .= shopFunctions::getInvoiceFolderName().DS; if(!file_exists($path)){ vmError('Path wrong to store invoices, folder invoices does not exist '.$path); return false; } else if(!is_writable( $path )){ vmError('Cannot store pdf, directory not writeable '.$path); return false; } } $orderModel = VmModel::getModel('orders'); $invoiceNumberDate=array(); if (! $orderModel->createInvoiceNumber($orderDetails['details']['BT'], $invoiceNumberDate)) { return 0; } if(!empty($invoiceNumberDate[0])){ $invoiceNumber = $invoiceNumberDate[0]; } else { $invoiceNumber = FALSE; } if(!$invoiceNumber or empty($invoiceNumber)){ vmError('Cant create pdf, createInvoiceNumber failed'); return 0; } if (shopFunctions::InvoiceNumberReserved($invoiceNumber)) { return 0; } $path .= preg_replace('/[^A-Za-z0-9_\-\.]/', '_', 'vm'.$layout.'_'.$invoiceNumber.'.pdf'); if(file_exists($path) and !$force){ return $path; } //We come from the be, so we need to load the FE langauge VmConfig::loadJLang('com_virtuemart',true); $this->addViewPath( JPATH_VM_SITE.DS.'views' ); $view = $this->getView($viewName, $format); $view->addTemplatePath( JPATH_VM_SITE.DS.'views'.DS.$viewName.DS.'tmpl' ); $vmtemplate = VmConfig::get('vmtemplate',0); if(!empty($vmtemplate) and $vmtemplate=='default'){ if(JVM_VERSION == 2){ $q = 'SELECT `template` FROM `#__template_styles` WHERE `client_id`="0" AND `home`="1"'; } else { $q = 'SELECT `template` FROM `#__templates_menu` WHERE `client_id`="0" AND `menuid`="0"'; } $db = JFactory::getDbo(); $db->setQuery($q); $templateName = $db->loadResult(); } else { $templateName = shopFunctionsF::setTemplate($vmtemplate); } if(!empty($templateName)){ $TemplateOverrideFolder = JPATH_SITE.DS."templates".DS.$templateName.DS."html".DS."com_virtuemart".DS."invoice"; if(file_exists($TemplateOverrideFolder)){ $view->addTemplatePath( $TemplateOverrideFolder); } } $view->invoiceNumber = $invoiceNumberDate[0]; $view->invoiceDate = $invoiceNumberDate[1]; $view->orderDetails = $orderDetails; $view->uselayout = $layout; $view->showHeaderFooter = false; $vendorModel = VmModel::getModel('vendor'); $virtuemart_vendor_id = 1; //We could set this automatically by the vendorId stored in the order. $vendor = $vendorModel->getVendor($virtuemart_vendor_id); $metadata = array ( 'title' => JText::sprintf('COM_VIRTUEMART_INVOICE_TITLE', $vendor->vendor_store_name, $view->invoiceNumber, $orderDetails['details']['BT']->order_number), 'keywords' => JText::_('COM_VIRTUEMART_INVOICE_CREATOR')); return VmPdf::createVmPdf($view, $path, 'F', $metadata); } } // No closing tag controllers/manufacturer.php000066600000003002151373621660012330 0ustar00getType(); $viewName = JRequest::getCmd('view', $this->default_view); $viewLayout = JRequest::getCmd('layout', 'default'); $view = $this->getView($viewName, $viewType, '', array('base_path' => $this->basePath, 'layout' => $viewLayout)); $view->assignRef('document', $document); $view->display(); return $this; } } // No closing tag controllers/state.php000066600000003035151373621660010762 0ustar00getStates( JFilterInput::clean($country, 'INTEGER'),true,true ); } echo json_encode($states); jExit(); } }controllers/cart.php000066600000040160151373621660010573 0ustar00redirect('index.php'); } else { if (!class_exists('VirtueMartCart')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'cart.php'); if (!class_exists('calculationHelper')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'calculationh.php'); } $this->useSSL = VmConfig::get('useSSL', 0); $this->useXHTML = false; } /** * Override of display * * @return JController A JController object to support chaining. * * @since 11.1 */ public function display($cachable = false, $urlparams = false) { $document = JFactory::getDocument(); $viewType = $document->getType(); $viewName = JRequest::getCmd('view', $this->default_view); $viewLayout = JRequest::getCmd('layout', 'default'); $view = $this->getView($viewName, $viewType, '', array('base_path' => $this->basePath, 'layout' => $viewLayout)); $view->assignRef('document', $document); $view->display(); return $this; } /** * Add the product to the cart * * @author RolandD * @author Max Milbers * @access public */ public function add() { $mainframe = JFactory::getApplication(); if (VmConfig::get('use_as_catalog', 0)) { $msg = JText::_('COM_VIRTUEMART_PRODUCT_NOT_ADDED_SUCCESSFULLY'); $type = 'error'; $mainframe->redirect('index.php', $msg, $type); } $cart = VirtueMartCart::getCart(); if ($cart) { $virtuemart_product_ids = JRequest::getVar('virtuemart_product_id', array(), 'default', 'array'); $success = true; if ($cart->add($virtuemart_product_ids,$success)) { $msg = JText::_('COM_VIRTUEMART_PRODUCT_ADDED_SUCCESSFULLY'); $type = ''; } else { $msg = JText::_('COM_VIRTUEMART_PRODUCT_NOT_ADDED_SUCCESSFULLY'); $type = 'error'; } $mainframe->enqueueMessage($msg, $type); $mainframe->redirect(JRoute::_('index.php?option=com_virtuemart&view=cart', FALSE)); } else { $mainframe->enqueueMessage('Cart does not exist?', 'error'); } } /** * Add the product to the cart, with JS * * @author Max Milbers * @access public */ public function addJS() { $this->json = new stdClass(); $cart = VirtueMartCart::getCart(false); if ($cart) { $virtuemart_product_ids = JRequest::getVar('virtuemart_product_id', array(), 'default', 'array'); $view = $this->getView ('cart', 'json'); $errorMsg = 0;//JText::_('COM_VIRTUEMART_CART_PRODUCT_ADDED'); $products = $cart->add($virtuemart_product_ids, $errorMsg ); if ($products) { if(is_array($products) and isset($products[0])){ $view->assignRef('product',$products[0]); } $view->setLayout('padded'); $this->json->stat = '1'; } else { $view->setLayout('perror'); $this->json->stat = '2'; $tmp = false; $view->assignRef('product',$tmp); } $view->assignRef('products',$products); $view->assignRef('errorMsg',$errorMsg); ob_start(); $view->display (); $this->json->msg = ob_get_clean(); } else { $this->json->msg = '' . JText::_('COM_VIRTUEMART_CONTINUE_SHOPPING') . ''; $this->json->msg .= '

' . JText::_('COM_VIRTUEMART_MINICART_ERROR') . '

'; $this->json->stat = '0'; } echo json_encode($this->json); jExit(); } /** * Add the product to the cart, with JS * * @author Max Milbers * @access public */ public function viewJS() { if (!class_exists('VirtueMartCart')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'cart.php'); $cart = VirtueMartCart::getCart(false); $this->data = $cart->prepareAjaxData(); $extension = 'com_virtuemart'; VmConfig::loadJLang($extension); // when AJAX it needs to be loaded manually here >> in case you are outside virtuemart ! if ($this->data->totalProduct > 1) $this->data->totalProductTxt = JText::sprintf('COM_VIRTUEMART_CART_X_PRODUCTS', $this->data->totalProduct); else if ($this->data->totalProduct == 1) $this->data->totalProductTxt = JText::_('COM_VIRTUEMART_CART_ONE_PRODUCT'); else $this->data->totalProductTxt = JText::_('COM_VIRTUEMART_EMPTY_CART'); if ($this->data->dataValidated == true) { $taskRoute = '&task=confirm'; $linkName = JText::_('COM_VIRTUEMART_ORDER_CONFIRM_MNU'); } else { $taskRoute = ''; $linkName = JText::_('COM_VIRTUEMART_CART_SHOW'); } $this->data->cart_show = 'useXHTML, $this->useSSL) . '" rel="nofollow">' . $linkName . ''; $this->data->billTotal = vmText::_('COM_VIRTUEMART_CART_TOTAL') . ' : ' . $this->data->billTotal . ''; echo json_encode($this->data); Jexit(); } /** * For selecting couponcode to use, opens a new layout * * @author Max Milbers */ public function edit_coupon() { $view = $this->getView('cart', 'html'); $view->setLayout('edit_coupon'); // Display it all $view->display(); } /** * Store the coupon code in the cart * @author Max Milbers */ public function setcoupon() { /* Get the coupon_code of the cart */ $coupon_code = JRequest::getVar('coupon_code', ''); //TODO VAR OR INT OR WORD? if ($coupon_code) { $cart = VirtueMartCart::getCart(); if ($cart) { $app = JFactory::getApplication(); $msg = $cart->setCouponCode($coupon_code); //$cart->setDataValidation(); //Not needed already done in the getCart function if ($cart->getInCheckOut()) { $app = JFactory::getApplication(); $app->redirect(JRoute::_('index.php?option=com_virtuemart&view=cart&task=checkout', FALSE),$msg); } else { $app->redirect(JRoute::_('index.php?option=com_virtuemart&view=cart', FALSE),$msg); } } } $this->display(); } /** * For selecting shipment, opens a new layout * * @author Max Milbers */ public function edit_shipment() { $view = $this->getView('cart', 'html'); $view->setLayout('select_shipment'); // Display it all $view->display(); } /** * Sets a selected shipment to the cart * * @author Max Milbers */ public function setshipment() { /* Get the shipment ID from the cart */ $cart = VirtueMartCart::getCart(); if ($cart) { $virtuemart_shipmentmethod_id = JRequest::getInt('virtuemart_shipmentmethod_id', $cart->virtuemart_shipmentmethod_id); //Now set the shipment ID into the cart if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); JPluginHelper::importPlugin('vmshipment'); $cart->setShipment($virtuemart_shipmentmethod_id); //Add a hook here for other payment methods, checking the data of the choosed plugin $_dispatcher = JDispatcher::getInstance(); $_retValues = $_dispatcher->trigger('plgVmOnSelectCheckShipment', array( &$cart)); $dataValid = true; foreach ($_retValues as $_retVal) { if ($_retVal === true ) { // Plugin completed successfull; nothing else to do $cart->setCartIntoSession(); break; } else if ($_retVal === false ) { $mainframe = JFactory::getApplication(); $mainframe->redirect(JRoute::_('index.php?option=com_virtuemart&view=cart&task=edit_shipment',$this->useXHTML,$this->useSSL), $_retVal); break; } } if ($cart->getInCheckOut() && !VmConfig::get('oncheckout_opc', 1)) { $mainframe = JFactory::getApplication(); $mainframe->redirect(JRoute::_('index.php?option=com_virtuemart&view=cart&task=checkout', FALSE) ); } } // self::Cart(); $this->display(); } /** * To select a payment method * * @author Max Milbers */ public function editpayment() { $view = $this->getView('cart', 'html'); $view->setLayout('select_payment'); // Display it all $view->display(); } /** * To set a payment method * * @author Max Milbers * @author Oscar van Eijk * @author Valerie Isaksen */ function setpayment() { // Get the payment id of the cart //Now set the payment rate into the cart $cart = VirtueMartCart::getCart(); if ($cart) { if(!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS.DS.'vmpsplugin.php'); JPluginHelper::importPlugin('vmpayment'); //Some Paymentmethods needs extra Information like $virtuemart_paymentmethod_id = JRequest::getInt('virtuemart_paymentmethod_id', $cart->virtuemart_paymentmethod_id); $cart->setPaymentMethod($virtuemart_paymentmethod_id); //Add a hook here for other payment methods, checking the data of the choosed plugin $msg = ''; $_dispatcher = JDispatcher::getInstance(); $_retValues = $_dispatcher->trigger('plgVmOnSelectCheckPayment', array( $cart, &$msg)); $dataValid = true; foreach ($_retValues as $_retVal) { if ($_retVal === true ) { // Plugin completed succesfull; nothing else to do $cart->setCartIntoSession(); break; } else if ($_retVal === false ) { $app = JFactory::getApplication(); $app->redirect(JRoute::_('index.php?option=com_virtuemart&view=cart&task=editpayment',$this->useXHTML,$this->useSSL), $msg); break; } } // $cart->setDataValidation(); //Not needed already done in the getCart function // vmdebug('setpayment $cart',$cart); if ($cart->getInCheckOut() && !VmConfig::get('oncheckout_opc', 1)) { $app = JFactory::getApplication(); $app->redirect(JRoute::_('index.php?option=com_virtuemart&view=cart&task=checkout', FALSE), $msg); } } $this->display(); } /** * Delete a product from the cart * * @author RolandD * @access public */ public function delete() { $mainframe = JFactory::getApplication(); /* Load the cart helper */ $cart = VirtueMartCart::getCart(); if ($cart->removeProductCart()) $mainframe->enqueueMessage(JText::_('COM_VIRTUEMART_PRODUCT_REMOVED_SUCCESSFULLY')); else $mainframe->enqueueMessage(JText::_('COM_VIRTUEMART_PRODUCT_NOT_REMOVED_SUCCESSFULLY'), 'error'); $mainframe->redirect(JRoute::_('index.php?option=com_virtuemart&view=cart', FALSE)); } /** * Delete a product from the cart * * @author RolandD * @access public */ public function update() { $mainframe = JFactory::getApplication(); /* Load the cart helper */ $cartModel = VirtueMartCart::getCart(); if ($cartModel->updateProductCart()) $mainframe->enqueueMessage(JText::_('COM_VIRTUEMART_PRODUCT_UPDATED_SUCCESSFULLY')); else $mainframe->enqueueMessage(JText::_('COM_VIRTUEMART_PRODUCT_NOT_UPDATED_SUCCESSFULLY'), 'error'); $mainframe->redirect(JRoute::_('index.php?option=com_virtuemart&view=cart', FALSE)); } /** * Change the shopper * * @author Maik K�nnemann * */ public function changeShopper() { JRequest::checkToken () or jexit ('Invalid Token'); //get data of current and new user $usermodel = VmModel::getModel('user'); $user = $usermodel->getCurrentUser(); //check for permissions if(!JFactory::getUser(JFactory::getSession()->get('vmAdminID'))->authorise('core.admin', 'com_virtuemart') || !VmConfig::get ('oncheckout_change_shopper')){ $mainframe = JFactory::getApplication(); $mainframe->enqueueMessage(JText::sprintf('COM_VIRTUEMART_CART_CHANGE_SHOPPER_NO_PERMISSIONS', $user->name .' ('.$user->username.')'), 'error'); $mainframe->redirect(JRoute::_('index.php?option=com_virtuemart&view=cart')); } $newUser = JFactory::getUser(JRequest::getCmd('userID')); //update session $session = JFactory::getSession(); $adminID = $session->get('vmAdminID'); if(!isset($adminID)) $session->set('vmAdminID', $user->virtuemart_user_id); $session->set('user', $newUser); //update cart data $cart = VirtueMartCart::getCart(); $data = $usermodel->getUserAddressList(JRequest::getCmd('userID'), 'BT'); foreach($data[0] as $k => $v) { $data[$k] = $v; } $cart->BT['email'] = $newUser->email; unset($cart->ST); $cart->saveAddressInCart($data, 'BT'); $mainframe = JFactory::getApplication(); $mainframe->enqueueMessage(JText::sprintf('COM_VIRTUEMART_CART_CHANGED_SHOPPER_SUCCESSFULLY', $newUser->name .' ('.$newUser->username.')'), 'info'); $mainframe->redirect(JRoute::_('index.php?option=com_virtuemart&view=cart')); } /** * Checks for the data that is needed to process the order * * @author Max Milbers * */ public function checkout() { $cart = VirtueMartCart::getCart(); $cart->getFilterCustomerComment(); $cart->tosAccepted = JRequest::getInt('tosAccepted', $cart->tosAccepted); $task = JRequest::getString('task'); $update = vRequest::getString('update',false); if(($update and is_array($update)) or $task=='update'){ reset($update); $key = key($update); $quantity = vRequest::getInt('quantity'); $cart->updateProductCart(key($update),$quantity[$key]); $this->display(); } else if(isset($_POST['setcoupon']) or $task=='setcoupon'){ $this->setcoupon(); } else if(isset($_POST['setshipment']) or $task=='setshipment'){ $this->setshipment(); } else if(isset($_POST['setpayment']) or $task=='setpayment'){ $this->setpayment(); } else { if (VmConfig::get('oncheckout_opc', 1) && $cart->virtuemart_shipmentmethod_id != JRequest::getInt('virtuemart_shipmentmethod_id')) { $this->setshipment(); } if (VmConfig::get('oncheckout_opc', 1) && $cart->virtuemart_paymentmethod_id != JRequest::getInt('virtuemart_paymentmethod_id')) { $this->setpayment(); } if ($cart && !VmConfig::get('use_as_catalog', 0)) { $cart->checkout(); } } } /** * Executes the confirmDone task, * cart object checks itself, if the data is valid * * @author Max Milbers * */ public function confirm() { vmdebug('confirm my post, get and so on',$_POST,$_GET); $cart = VirtueMartCart::getCart(); $cart->getFilterCustomerComment(); $cart->tosAccepted = JRequest::getInt('tosAccepted', $cart->tosAccepted); $task = JRequest::getString('task'); $update = vRequest::getString('update',false); if(($update and is_array($update)) or $task=='update'){ reset($update); $key = key($update); $quantity = vRequest::getInt('quantity'); $cart->updateProductCart(key($update),$quantity[$key]); $this->display(); } else if(isset($_POST['setcoupon']) or $task=='setcoupon'){ $this->setcoupon(); } else if(isset($_POST['setshipment']) or $task=='setshipment'){ $this->setshipment(); } else if(isset($_POST['setpayment']) or $task=='setpayment'){ $this->setpayment(); } else if($task=='confirm'){ $cart->confirmDone(); $view = $this->getView('cart', 'html'); $view->setLayout('order_done'); $view->display(); } } function cancel() { $cart = VirtueMartCart::getCart(); if ($cart) { $cart->setOutOfCheckout(); } $mainframe = JFactory::getApplication(); $mainframe->redirect(JRoute::_('index.php?option=com_virtuemart&view=cart', FALSE), 'Cancelled'); } } //pure php no Tag controllers/index.html000066600000000000151373621660011113 0ustar00controllers/categories.php000066600000002613151373621660011770 0ustar00'INT','return'=>'BASE64','lang'=>'CMD'); parent::display(true, $safeurlparams); } public function json(){ $view = $this->getView('categories', 'json'); $layoutName = JRequest::getWord('layout', 'default'); $view->setLayout($layoutName); // Display it all $view->display(); } } // pure php no closing tag controllers/pluginresponse.php000066600000012340151373621660012716 0ustar00PaymentResponseReceived(); $this->ShipmentResponseReceived(); } /** * ResponseReceived() * From the payment page, the user returns to the shop. The order email is sent, and the cart emptied. * * @author Valerie Isaksen * */ function PaymentResponseReceived() { if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); JPluginHelper::importPlugin('vmpayment'); $return_context = ""; $dispatcher = JDispatcher::getInstance(); $html = ""; $paymentResponse = Jtext::_('COM_VIRTUEMART_CART_THANKYOU'); $returnValues = $dispatcher->trigger('plgVmOnPaymentResponseReceived', array( 'html' => &$html,&$paymentResponse)); // JRequest::setVar('paymentResponse', Jtext::_('COM_VIRTUEMART_CART_THANKYOU')); // JRequest::setVar('paymentResponseHtml', $html); $view = $this->getView('pluginresponse', 'html'); $layoutName = JRequest::getVar('layout', 'default'); $view->setLayout($layoutName); $view->assignRef('paymentResponse', $paymentResponse); $view->assignRef('paymentResponseHtml', $html); // Display it all $view->display(); } function ShipmentResponseReceived() { // TODO: not ready yet if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); JPluginHelper::importPlugin('vmshipment'); $return_context = ""; $dispatcher = JDispatcher::getInstance(); $html = ""; $shipmentResponse = Jtext::_('COM_VIRTUEMART_CART_THANKYOU'); $dispatcher->trigger('plgVmOnShipmentResponseReceived', array( 'html' => &$html,&$shipmentResponse)); /* // JRequest::setVar('paymentResponse', Jtext::_('COM_VIRTUEMART_CART_THANKYOU')); // JRequest::setVar('paymentResponseHtml', $html); $view = $this->getView('pluginresponse', 'html'); $layoutName = JRequest::getVar('layout', 'default'); $view->setLayout($layoutName); $view->assignRef('shipmentResponse', $shipmentResponse); $view->assignRef('shipmentResponseHtml', $html); // Display it all $view->display(); */ } /** * PaymentUserCancel() * From the payment page, the user has cancelled the order. The order previousy created is deleted. * The cart is not emptied, so the user can reorder if necessary. * then delete the order * @author Valerie Isaksen * */ function pluginUserPaymentCancel() { if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); if (!class_exists('VirtueMartCart')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'cart.php'); $cart = VirtueMartCart::getCart (); if (!empty($cart->couponCode)) { if (!class_exists('CouponHelper')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'coupon.php'); CouponHelper::setInUseCoupon($cart->couponCode, false); } JPluginHelper::importPlugin('vmpayment'); $dispatcher = JDispatcher::getInstance(); $dispatcher->trigger('plgVmOnUserPaymentCancel', array()); // return to cart view $view = $this->getView('cart', 'html'); $layoutName = JRequest::getWord('layout', 'default'); $view->setLayout($layoutName); // Display it all $view->display(); } /** * Attention this is the function which processs the response of the payment plugin * * @author Valerie Isaksen * @return success of update */ function pluginNotification() { if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); if (!class_exists('VirtueMartCart')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'cart.php'); if (!class_exists('VirtueMartModelOrders')) require( JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'orders.php' ); JPluginHelper::importPlugin('vmpayment'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmOnPaymentNotification', array()); } } //pure php no Tag controllers/productdetails.php000066600000032221151373621660012667 0ustar00registerTask ('recommend', 'MailForm'); $this->registerTask ('askquestion', 'MailForm'); } function display() { $format = JRequest::getWord ('format', 'html'); if ($format == 'pdf') { $viewName = 'Pdf'; } else { $viewName = 'Productdetails'; } $view = $this->getView ($viewName, $format); $view->display (); } /** * Send the ask question email. * * @author Kohl Patrick, Christopher Roussel * @author Max Milbers */ public function mailAskquestion () { JRequest::checkToken () or jexit ('Invalid Token'); $app = JFactory::getApplication (); if(!VmConfig::get('ask_question',false)){ $app->redirect (JRoute::_ ('index.php?option=com_virtuemart&tmpl=component&view=productdetails&task=askquestion&virtuemart_product_id=' . JRequest::getInt ('virtuemart_product_id', 0)), 'Function disabled'); } $view = $this->getView ('askquestion', 'html'); if (!class_exists ('shopFunctionsF')) { require(JPATH_VM_SITE . DS . 'helpers' . DS . 'shopfunctionsf.php'); } $vars = array(); $min = VmConfig::get ('asks_minimum_comment_length', 50) + 1; $max = VmConfig::get ('asks_maximum_comment_length', 2000) - 1; $commentSize = mb_strlen (JRequest::getString ('comment')); $validMail = filter_var (JRequest::getVar ('email'), FILTER_VALIDATE_EMAIL); if ($commentSize < $min or $commentSize > $max or !$validMail) { $errmsg = JText::_ ('COM_VIRTUEMART_COMMENT_NOT_VALID_JS'); if ($commentSize < $min) { vmdebug ('mailAskquestion', $min, $commentSize); $errmsg = JText::_ ('COM_VIRTUEMART_ASKQU_CS_MIN'); ; } else { if ($commentSize > $max) { $errmsg = JText::_ ('COM_VIRTUEMART_ASKQU_CS_MAX'); ; } else { if (!$validMail) { $errmsg = JText::_ ('COM_VIRTUEMART_ASKQU_INV_MAIL'); ; } } } $this->setRedirect (JRoute::_ ('index.php?option=com_virtuemart&tmpl=component&view=productdetails&task=askquestion&virtuemart_product_id=' . JRequest::getInt ('virtuemart_product_id', 0)), $errmsg); return; } if(JFactory::getUser()->guest == 1 and VmConfig::get ('ask_captcha')){ $recaptcha = vRequest::getVar ('recaptcha_response_field'); JPluginHelper::importPlugin('captcha'); $dispatcher = JDispatcher::getInstance(); $res = $dispatcher->trigger('onCheckAnswer',$recaptcha); $session = JFactory::getSession(); if(!$res[0]){ $askquestionform = array('name' => vRequest::getVar ('name'), 'email' => vRequest::getVar ('email'), 'comment' => vRequest::getString ('comment')); $session->set('askquestion', $askquestionform, 'vm'); $errmsg = vmText::_('PLG_RECAPTCHA_ERROR_INCORRECT_CAPTCHA_SOL'); $this->setRedirect (JRoute::_ ('index.php?option=com_virtuemart&tmpl=component&view=productdetails&task=askquestion&virtuemart_product_id=' . vRequest::getInt ('virtuemart_product_id', 0)), $errmsg); return; } else { $session->set('askquestion', 0, 'vm'); } } $user = JFactory::getUser (); if (empty($user->id)) { $fromMail = JRequest::getVar ('email'); //is sanitized then $fromName = JRequest::getVar ('name', ''); //is sanitized then $fromMail = str_replace (array('\'', '"', ',', '%', '*', '/', '\\', '?', '^', '`', '{', '}', '|', '~'), array(''), $fromMail); $fromName = str_replace (array('\'', '"', ',', '%', '*', '/', '\\', '?', '^', '`', '{', '}', '|', '~'), array(''), $fromName); } else { $fromMail = $user->email; $fromName = $user->name; } $vars['user'] = array('name' => $fromName, 'email' => $fromMail); $virtuemart_product_id = vRequest::getInt ('virtuemart_product_id', 0); $productModel = VmModel::getModel ('product'); $vars['product'] = $productModel->getProduct ($virtuemart_product_id); $vendorModel = VmModel::getModel ('vendor'); $VendorEmail = $vendorModel->getVendorEmail ($vars['product']->virtuemart_vendor_id); if (shopFunctionsF::renderMail ('askquestion', $VendorEmail, $vars, 'productdetails')) { $string = 'COM_VIRTUEMART_MAIL_SEND_SUCCESSFULLY'; } else { $string = 'COM_VIRTUEMART_MAIL_NOT_SEND_SUCCESSFULLY'; } $app->enqueueMessage (JText::_ ($string)); $view->setLayout ('mail_confirmed'); $view->display (); } /** * Send the Recommend to a friend email. * * @author Kohl Patrick * @author Max Milbers */ public function mailRecommend () { JRequest::checkToken () or jexit ('Invalid Token'); $app = JFactory::getApplication (); if(!VmConfig::get('show_emailfriend',false)){ $app->redirect (JRoute::_ ('index.php?option=com_virtuemart&tmpl=component&view=productdetails&task=recommend&virtuemart_product_id=' . JRequest::getInt ('virtuemart_product_id', 0)), 'Function disabled'); } if(JFactory::getUser()->guest == 1 and VmConfig::get ('ask_captcha')){ $recaptcha = vRequest::getVar ('recaptcha_response_field'); JPluginHelper::importPlugin('captcha'); $dispatcher = JDispatcher::getInstance(); $res = $dispatcher->trigger('onCheckAnswer',$recaptcha); $session = JFactory::getSession(); if(!$res[0]){ $mailrecommend = array('email' => vRequest::getVar ('email'), 'comment' => vRequest::getString ('comment')); $session->set('mailrecommend', $mailrecommend, 'vm'); $errmsg = vmText::_('PLG_RECAPTCHA_ERROR_INCORRECT_CAPTCHA_SOL'); $this->setRedirect (JRoute::_ ('index.php?option=com_virtuemart&tmpl=component&view=productdetails&task=recommend&virtuemart_product_id=' . vRequest::getInt ('virtuemart_product_id', 0)), $errmsg); return; } else { $session->set('mailrecommend', 0, 'vm'); } } if (!class_exists ('shopFunctionsF')) { require(JPATH_VM_SITE . DS . 'helpers' . DS . 'shopfunctionsf.php'); } if(!class_exists('ShopFunctions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'shopfunctions.php'); $vars = array(); $toMail = JRequest::getVar ('email'); //is sanitized then $toMail = str_replace (array('\'', '"', ',', '%', '*', '/', '\\', '?', '^', '`', '{', '}', '|', '~'), array(''), $toMail); if (shopFunctionsF::renderMail ('recommend', $toMail, $vars, 'productdetails', TRUE)) { $string = 'COM_VIRTUEMART_MAIL_SEND_SUCCESSFULLY'; } else { $string = 'COM_VIRTUEMART_MAIL_NOT_SEND_SUCCESSFULLY'; } $app->enqueueMessage (JText::_ ($string)); // Display it all $view = $this->getView ('recommend', 'html'); $view->setLayout ('mail_confirmed'); $view->display (); } /** * Ask Question form * Recommend form for Mail */ public function MailForm () { if (JRequest::getCmd ('task') == 'recommend') { $view = $this->getView ('recommend', 'html'); } else { $view = $this->getView ('askquestion', 'html'); } /* Set the layout */ $view->setLayout ('form'); // Display it all $view->display (); } /** * Add or edit a review */ public function review () { $msg=""; $model = VmModel::getModel ('ratings'); $virtuemart_product_id = vRequest::getInt('virtuemart_product_id',0); $allowReview = $model->allowReview($virtuemart_product_id); $allowRating = $model->allowRating($virtuemart_product_id); if($allowReview || $allowRating){ $return = $model->saveRating (); if ($return !== FALSE) { $errors = $model->getErrors (); if (empty($errors)) { $msg = JText::sprintf ('COM_VIRTUEMART_STRING_SAVED', JText::_ ('COM_VIRTUEMART_REVIEW')); } foreach ($errors as $error) { $msg = ($error) . '
'; } if (!class_exists ('ShopFunctionsF')) { require(JPATH_VM_SITE . DS . 'helpers' . DS . 'shopfunctionsf.php'); } $data = vRequest::getPost(); if($allowReview){ } shopFunctionsF::sendRatingEmailToVendor($data); } } $this->setRedirect (JRoute::_ ('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $virtuemart_product_id, FALSE), $msg); } /** * Json task for recalculation of prices * * @author Max Milbers * @author Patrick Kohl * */ public function recalculate () { //$post = JRequest::get('request'); // echo '
'.print_r($post,1).'
'; jimport ('joomla.utilities.arrayhelper'); $virtuemart_product_idArray = JRequest::getVar ('virtuemart_product_id', array()); //is sanitized then if(is_array($virtuemart_product_idArray)){ JArrayHelper::toInteger ($virtuemart_product_idArray); $virtuemart_product_id = $virtuemart_product_idArray[0]; } else { $virtuemart_product_id = $virtuemart_product_idArray; } $customPrices = array(); $customVariants = JRequest::getVar ('customPrice', array()); //is sanitized then //echo '
'.print_r($customVariants,1).'
'; //MarkerVarMods foreach ($customVariants as $customVariant) { //foreach ($customVariant as $selected => $priceVariant) { //In this case it is NOT $selected => $variant, because we get it that way from the form foreach ($customVariant as $priceVariant => $selected) { //Important! sanitize array to int $selected = (int)$selected; $customPrices[$selected] = $priceVariant; } } $quantityArray = JRequest::getVar ('quantity', array()); //is sanitized then JArrayHelper::toInteger ($quantityArray); $quantity = 1; if (!empty($quantityArray[0])) { $quantity = $quantityArray[0]; } $product_model = VmModel::getModel ('product'); //VmConfig::$echoDebug = TRUE; $prices = $product_model->getPrice ($virtuemart_product_id, $customPrices, $quantity); $priceFormated = array(); if (!class_exists ('CurrencyDisplay')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php'); } $currency = CurrencyDisplay::getInstance (); foreach ($prices as $name => $product_price) { // echo 'Price is '.print_r($name,1).'
'; if ($name != 'costPrice') { $priceFormated[$name] = $currency->createPriceDiv ($name, '', $prices, TRUE); } } // Get the document object. $document = JFactory::getDocument (); // stAn: setName works in JDocumentHTML and not JDocumentRAW if (method_exists($document, 'setName')){ $document->setName ('recalculate'); } JResponse::setHeader ('Cache-Control', 'no-cache, must-revalidate'); JResponse::setHeader ('Expires', 'Mon, 6 Jul 2000 10:00:00 GMT'); // Set the MIME type for JSON output. $document->setMimeEncoding ('application/json'); JResponse::setHeader ('Content-Disposition', 'attachment;filename="recalculate.json"', TRUE); JResponse::sendHeaders (); echo json_encode ($priceFormated); jexit (); } public function getJsonChild () { $view = $this->getView ('productdetails', 'json'); $view->display (NULL); } /** * Notify customer * * @author Seyi Awofadeju * */ public function notifycustomer () { $data = JRequest::get ('post'); $model = VmModel::getModel ('waitinglist'); if (!$model->adduser ($data)) { $errors = $model->getErrors (); foreach ($errors as $error) { $msg = ($error) . '
'; } $this->setRedirect (JRoute::_ ('index.php?option=com_virtuemart&view=productdetails&layout=notify&virtuemart_product_id=' . $data['virtuemart_product_id'], FALSE), $msg); } else { $msg = JText::sprintf ('COM_VIRTUEMART_STRING_SAVED', JText::_ ('COM_VIRTUEMART_CART_NOTIFY')); $this->setRedirect (JRoute::_ ('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $data['virtuemart_product_id'], FALSE), $msg); } } /* * Send an email to all shoppers who bought a product */ public function sentProductEmailToShoppers () { $model = VmModel::getModel ('product'); $model->sentProductEmailToShoppers (); } /* * View email layout on browser */ function viewRecommendMail(){ $view = $this->getView('recommend', 'html'); $viewLayout = JRequest::getCmd('layout', 'mail_html'); $view->setLayout($viewLayout); // Display it all $view->display(); } function viewAskQuestionMail(){ $view = $this->getView('askquestion', 'html'); $viewLayout = JRequest::getCmd('layout', 'mail_confirmed'); $view->setLayout($viewLayout); // Display it all $view->display(); } } // pure php no closing tag controllers/virtuemart.php000066600000003455151373621660012052 0ustar00getType(); $viewName = JRequest::getCmd('view', $this->default_view); $viewLayout = JRequest::getCmd('layout', 'default'); $view = $this->getView($viewName, $viewType, '', array('base_path' => $this->basePath, 'layout' => $viewLayout)); $view->assignRef('document', $document); $view->display(); return $this; } } //pure php no closing tag controllers/vendor.php000066600000007441151373621660011144 0ustar00getType(); $viewName = JRequest::getCmd('view', $this->default_view); $viewLayout = JRequest::getCmd('layout', 'default'); $view = $this->getView($viewName, $viewType, '', array('base_path' => $this->basePath, 'layout' => $viewLayout)); $view->assignRef('document', $document); $view->display(); return $this; } /** * Send the ask question email. * @author Kohl Patrick, Christopher Roussel */ public function mailAskquestion () { JRequest::checkToken() or jexit( 'Invalid Token' ); if(!class_exists('shopFunctionsF')) require(JPATH_VM_SITE.DS.'helpers'.DS.'shopfunctionsf.php'); $model = VmModel::getModel('vendor'); $mainframe = JFactory::getApplication(); $vars = array(); $min = VmConfig::get('asks_minimum_comment_length', 50)+1; $max = VmConfig::get('asks_maximum_comment_length', 2000)-1 ; $commentSize = mb_strlen( JRequest::getString('comment') ); $validMail = filter_var(JRequest::getVar('email'), FILTER_VALIDATE_EMAIL); $virtuemart_vendor_id = JRequest::getInt('virtuemart_vendor_id',1); if(!class_exists('VirtueMartModelVendor')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'vendor.php'); $userId = VirtueMartModelVendor::getUserIdByVendorId($virtuemart_vendor_id); //$vendorUser = JFactory::getUser($userId); if ( $commentSize<$min || $commentSize>$max || !$validMail ) { $this->setRedirect(JRoute::_ ( 'index.php?option=com_virtuemart&view=vendor&task=contact&virtuemart_vendor_id=' . $virtuemart_vendor_id , FALSE),JText::_('COM_VIRTUEMART_COMMENT_NOT_VALID_JS')); return ; } $user = JFactory::getUser(); $fromMail = JRequest::getVar('email'); //is sanitized then $fromName = JRequest::getVar('name','');//is sanitized then $fromMail = str_replace(array('\'','"',',','%','*','/','\\','?','^','`','{','}','|','~'),array(''),$fromMail); $fromName = str_replace(array('\'','"',',','%','*','/','\\','?','^','`','{','}','|','~'),array(''),$fromName); if (!empty($user->id)) { if(empty($fromMail)){ $fromMail = $user->email; } if(empty($fromName)){ $fromName = $user->name; } } $vars['user'] = array('name' => $fromName, 'email' => $fromMail); $VendorEmail = $model->getVendorEmail($virtuemart_vendor_id); $vars['vendor'] = array('vendor_store_name' => $fromName ); if (shopFunctionsF::renderMail('vendor', $VendorEmail, $vars,'vendor')) { $string = 'COM_VIRTUEMART_MAIL_SEND_SUCCESSFULLY'; } else { $string = 'COM_VIRTUEMART_MAIL_NOT_SEND_SUCCESSFULLY'; } $mainframe->enqueueMessage(JText::_($string)); // Display it all $view = $this->getView('vendor', 'html'); $view->setLayout('mail_confirmed'); $view->display(); } } // No closing tag controllers/plugin.php000066600000005144151373621660011143 0ustar00trigger ('plgVmOnSelfCallFE', array($type, $name, &$render)); if ($render) { // Get the document object. $document = JFactory::getDocument (); if (JRequest::getWord ('cache') == 'no') { JResponse::setHeader ('Cache-Control', 'no-cache, must-revalidate'); JResponse::setHeader ('Expires', 'Mon, 6 Jul 2000 10:00:00 GMT'); } $format = JRequest::getWord ('format', 'json'); if ($format == 'json') { $document->setMimeEncoding ('application/json'); // Change the suggested filename. JResponse::setHeader ('Content-Disposition', 'attachment;filename="' . $type . '".json"'); echo json_encode ($render); } else { echo $render; } } } } controllers/user.php000066600000025610151373621660010623 0ustar00useSSL = VmConfig::get('useSSL',0); $this->useXHTML = false; VmConfig::loadJLang('com_virtuemart_shoppers',TRUE); } /** * Override of display to prevent caching * * @return JController A JController object to support chaining. */ public function display(){ $document = JFactory::getDocument(); $viewType = $document->getType(); $viewName = JRequest::getCmd('view', $this->default_view); $viewLayout = JRequest::getCmd('layout', 'default'); $view = $this->getView($viewName, $viewType, '', array('base_path' => $this->basePath, 'layout' => $viewLayout)); $view->assignRef('document', $document); $view->display(); return $this; } function edit(){ } /** * deprecated */ function editAddressST(){ $view = $this->getView('user', 'html'); $view->setLayout('edit_address'); $ftask ='saveAddressST'; $view->assignRef('fTask', $ftask); // Display it all $view->display(); } /** * This is for use in the cart, it calls a standard template for editing user adresses. It sets the task following into the form * of the template to saveCartUser, the task saveCartUser just sets the right redirect in the js save(). This is done just to have the * controll flow in the controller and not in the layout. The layout is everytime calling a standard joomla task. * * @author Max Milbers */ function editAddressCart(){ $view = $this->getView('user', 'html'); $view->setLayout('edit_address'); $ftask ='savecartuser'; $view->assignRef('fTask', $ftask); // Display it all $view->display(); } /** * This is for use in the checkout process, it is the same like editAddressCart, but it sets the save task * to saveCheckoutUser, the task saveCheckoutUser just sets the right redirect. This is done just to have the * controll flow in the controller and not in the layout. The layout is everytime calling a standard joomla task. * * @author Max Milbers */ function editAddressCheckout(){ $view = $this->getView('user', 'html'); $view->setLayout('edit_address'); $ftask ='savecheckoutuser'; $view->assignRef('fTask', $ftask); // Display it all $view->display(); } /** * This function is called from the layout edit_adress and just sets the right redirect back to the cart * We use here the saveData(true) function, because within the cart shouldnt be done any registration. * * @author Max Milbers */ function saveCheckoutUser(){ $msg = $this->saveData(true,VmConfig::get('reg_silent',0)); //We may add here the option for silent registration. $this->setRedirect( JRoute::_('index.php?option=com_virtuemart&view=cart&task=checkout',$this->useXHTML,$this->useSSL), $msg ); } function registerCheckoutUser(){ if($this->checkCaptcha('index.php?option=com_virtuemart&view=user&task=editaddresscheckout&addrtype=BT') != FALSE) { $msg = $this->saveData(true,true); $this->setRedirect(JRoute::_( 'index.php?option=com_virtuemart&view=cart&task=checkout',$this->useXHTML,$this->useSSL ),$msg); } } /** * This function is called from the layout edit_adress and just sets the right redirect back to the cart. * We use here the saveData(true) function, because within the cart shouldnt be done any registration. * * @author Max Milbers */ function saveCartUser(){ $addressType = vRequest::getString('address_type'); if($addressType=='BT'){ $msg = $this->saveData(true,VmConfig::get('reg_silent',0)); } else { $msg = $this->saveData(false,false,true); } $this->setRedirect(JRoute::_( 'index.php?option=com_virtuemart&view=cart', FALSE ),$msg); } function registerCartuser(){ if($this->checkCaptcha('index.php?option=com_virtuemart&view=user&task=editaddresscart&addrtype=BT') != FALSE) { $msg = $this->saveData(true, true); $this->setRedirect(JRoute::_('index.php?option=com_virtuemart&view=cart', FALSE) , $msg); } } /** * This is the save function for the normal user edit.php layout. * We use here directly the userModel store function, because this view is for registering also * it redirects to the standard user view. * * @author Max Milbers */ function saveUser(){ $layout = JRequest::getWord('layout','edit'); if($this->checkCaptcha('index.php?option=com_virtuemart&view=user&layout='.$layout) != FALSE) { $msg = $this->saveData(true, true); $this->setRedirect( JRoute::_('index.php?option=com_virtuemart&view=user&layout='.$layout, FALSE), $msg ); } } function saveAddressST(){ $msg = $this->saveData(false,false,true); $layout = 'edit';// JRequest::getWord('layout','edit'); $this->setRedirect( JRoute::_('index.php?option=com_virtuemart&view=user&layout='.$layout, FALSE), $msg ); } /** * Save the user info. The saveData function don't use the userModel store function for anonymous shoppers, because it would register them. * We make this function private, so we can do the tests in the tasks. * * @author Max Milbers * @author Valérie Isaksen * * @param boolean Defaults to false, the param is for the userModel->store function, which needs it to determine how to handle the data. * @return String it gives back the messages. */ private function saveData($cart=false,$register=false, $onlyAddress=false) { $mainframe = JFactory::getApplication(); $currentUser = JFactory::getUser(); $msg = ''; $data = JRequest::get('post'); if(empty($data['address_type'])){ $data['address_type'] = vRequest::getCmd('addrtype','BT'); } if($currentUser->guest!=1 || $register){ $userModel = VmModel::getModel('user'); if(!$cart){ // Store multiple selectlist entries as a ; separated string if (array_key_exists('vendor_accepted_currencies', $data) && is_array($data['vendor_accepted_currencies'])) { $data['vendor_accepted_currencies'] = implode(',', $data['vendor_accepted_currencies']); } $data['vendor_store_name'] = JRequest::getVar('vendor_store_name','','post','STRING',JREQUEST_ALLOWHTML); $data['vendor_store_desc'] = JRequest::getVar('vendor_store_desc','','post','STRING',JREQUEST_ALLOWHTML); $data['vendor_terms_of_service'] = JRequest::getVar('vendor_terms_of_service','','post','STRING',JREQUEST_ALLOWHTML); $data['vendor_letter_css'] = JRequest::getVar('vendor_letter_css','','post','STRING',JREQUEST_ALLOWHTML); $data['vendor_letter_header_html'] = JRequest::getVar('vendor_letter_header_html','','post','STRING',JREQUEST_ALLOWHTML); $data['vendor_letter_footer_html'] = JRequest::getVar('vendor_letter_footer_html','','post','STRING',JREQUEST_ALLOWHTML); } //It should always be stored if($onlyAddress){ $ret = $userModel->storeAddress($data); } else { $ret = $userModel->store($data); } if(!$onlyAddress and $currentUser->guest==1){ $msg = (is_array($ret)) ? $ret['message'] : $ret; $usersConfig = JComponentHelper::getParams( 'com_users' ); $useractivation = $usersConfig->get( 'useractivation' ); if (is_array($ret) and $ret['success'] and !$useractivation) { // Username and password must be passed in an array $credentials = array('username' => $ret['user']->username, 'password' => $ret['user']->password_clear ); $return = $mainframe->login($credentials); } else if(VmConfig::get('oncheckout_only_registered',0)){ $layout = JRequest::getWord('layout','edit'); $this->redirect( JRoute::_('index.php?option=com_virtuemart&view=user&layout='.$layout, FALSE), $msg ); } } } if(!class_exists('VirtueMartCart')) require(JPATH_VM_SITE.DS.'helpers'.DS.'cart.php'); $cart = VirtueMartCart::getCart(); $cart->saveAddressInCart($data, $data['address_type']); return $msg; } /** * Editing a user address was cancelled when called from the cart; return to the cart * * @author Oscar van Eijk */ function cancelCartUser(){ $this->setRedirect( JRoute::_('index.php?option=com_virtuemart&view=cart', FALSE) ); } /** * Editing a user address was cancelled during chaeckout; return to the cart * * @author Oscar van Eijk */ function cancelCheckoutUser(){ $this->setRedirect( JRoute::_('index.php?option=com_virtuemart&view=cart&task=checkout',$this->useXHTML,$this->useSSL) ); } /** * Action cancelled; return to the previous view * * @author Oscar van Eijk */ function cancel() { $return = JURI::base(); $this->setRedirect( $return ); } function removeAddressST(){ $virtuemart_userinfo_id = JRequest::getVar('virtuemart_userinfo_id'); //Lets do it dirty for now $userModel = VmModel::getModel('user'); $userModel->removeAddress($virtuemart_userinfo_id); $layout = JRequest::getWord('layout','edit'); $this->setRedirect( JRoute::_('index.php?option=com_virtuemart&view=user&layout='.$layout, $this->useXHTML,$this->useSSL) ); } /** * Check the Joomla ReCaptcha Plg * * @author Maik Künnemann */ function checkCaptcha($retUrl){ if(JFactory::getUser()->guest==1 and VmConfig::get ('reg_captcha')){ $recaptcha = vRequest::getVar ('recaptcha_response_field'); JPluginHelper::importPlugin('captcha'); $dispatcher = JDispatcher::getInstance(); $res = $dispatcher->trigger('onCheckAnswer',$recaptcha); if(!$res[0]){ $data = vRequest::getPost(); $data['address_type'] = vRequest::getVar('addrtype','BT'); if(!class_exists('VirtueMartCart')) require(JPATH_VM_SITE.DS.'helpers'.DS.'cart.php'); $cart = VirtueMartCart::getCart(); $cart->saveAddressInCart($data, $data['address_type']); $errmsg = vmText::_('PLG_RECAPTCHA_ERROR_INCORRECT_CAPTCHA_SOL'); $this->setRedirect (JRoute::_ ($retUrl . '&captcha=1', FALSE), $errmsg); return FALSE; } else { return TRUE; } } else { return TRUE; } } } // No closing tag controllers/category.php000066600000004012151373621660011453 0ustar00registerTask('browse','category'); } /** * Function Description * * @author RolandD * @author George * @access public */ public function display($cachable = false, $urlparams = false) { if (JRequest::getvar('search')) { $view = $this->getView('category', 'html'); $view->display(); } else { // Display it all $document = JFactory::getDocument(); $viewType = $document->getType(); $viewName = JRequest::getCmd('view', $this->default_view); $viewLayout = JRequest::getCmd('layout', 'default'); $view = $this->getView($viewName, $viewType, '', array('base_path' => $this->basePath, 'layout' => $viewLayout)); $view->assignRef('document', $document); $view->display(); } if($categoryId = JRequest::getInt('virtuemart_category_id',0)){ shopFunctionsF::setLastVisitedCategoryId($categoryId); } return $this; } } // pure php no closing tag controllers/.htaccess000066600000000177151373621660010733 0ustar00 Order allow,deny Deny from all controllers/orders.php000066600000002665151373621660011150 0ustar00getView($viewName, $format); // Display it all $view->display(); } } // No closing tag router.php000066600000122754151373621660006626 0ustar00router_disabled) { foreach ($query as $key => $value){ if ($key != 'option') { if ($key != 'Itemid') { $segments[]=$key.'/'.$value; unset($query[$key]); } } } return $segments; } if ($helper->edit) return $segments; /* Full route , heavy work*/ // $lang = $helper->lang ; $view = ''; $jmenu = $helper->menu ; if(isset($query['langswitch'])) unset($query['langswitch']); if(isset($query['view'])){ $view = $query['view']; unset($query['view']); } switch ($view) { case 'virtuemart'; $query['Itemid'] = $jmenu['virtuemart'] ; break; /* Shop category or virtuemart view All ideas are wellcome to improve this because is the biggest and more used */ case 'category'; $start = null; $limitstart = null; $limit = null; if ( isset($query['virtuemart_manufacturer_id']) ) { $segments[] = $helper->lang('manufacturer').'/'.$helper->getManufacturerName($query['virtuemart_manufacturer_id']) ; unset($query['virtuemart_manufacturer_id']); } if ( isset($query['search']) ) { $segments[] = $helper->lang('search') ; unset($query['search']); } if ( isset($query['keyword'] )) { $segments[] = $query['keyword']; unset($query['keyword']); } if ( isset($query['virtuemart_category_id']) ) { if (isset($jmenu['virtuemart_category_id'][ $query['virtuemart_category_id'] ] ) ) $query['Itemid'] = $jmenu['virtuemart_category_id'][$query['virtuemart_category_id']]; else { $categoryRoute = $helper->getCategoryRoute($query['virtuemart_category_id']); if ($categoryRoute->route) $segments[] = $categoryRoute->route; //http://forum.virtuemart.net/index.php?topic=121642.0 if (!empty($categoryRoute->itemId)) { $query['Itemid'] = $categoryRoute->itemId; } else { $query['Itemid'] = false; } } unset($query['virtuemart_category_id']); } if ( isset($jmenu['category']) ) $query['Itemid'] = $jmenu['category']; if ( isset($query['orderby']) ) { $segments[] = $helper->lang('by').','.$helper->lang( $query['orderby']) ; unset($query['orderby']); } if ( isset($query['dir']) ) { if ($query['dir'] =='DESC'){ $dir = 'dirDesc'; } else { $dir = 'dirAsc'; } $segments[] = $dir;//$helper->lang('dir'.$dir) ; unset($query['dir']); } // Joomla replace before route limitstart by start but without SEF this is start ! if ( isset($query['limitstart'] ) ) { $limitstart = $query['limitstart'] ; unset($query['limitstart']); } if ( isset($query['start'] ) ) { $start = $query['start'] ; unset($query['start']); } if ( isset($query['limit'] ) ) { $limit = $query['limit'] ; unset($query['limit']); } if ($start !== null && $limitstart!== null ) { //$segments[] = $helper->lang('results') .',1-'.$start ; } else if ( $start>0 ) { // using general limit if $limit is not set if ($limit === null) $limit= vmrouterHelper::$limit ; $segments[] = $helper->lang('results') .','. ($start+1).'-'.($start+$limit); } else if ($limit !== null && $limit != vmrouterHelper::$limit ) $segments[] = $helper->lang('results') .',1-'.$limit ;//limit change return $segments; break; /* Shop product details view */ case 'productdetails'; $virtuemart_product_id = false; if (isset($jmenu['virtuemart_product_id'][ $query['virtuemart_product_id'] ] ) ) { $query['Itemid'] = $jmenu['virtuemart_product_id'][$query['virtuemart_product_id']]; unset($query['virtuemart_product_id']); unset($query['virtuemart_category_id']); } else { if(isset($query['virtuemart_product_id'])) { if ($helper->use_id) $segments[] = $query['virtuemart_product_id']; $virtuemart_product_id = $query['virtuemart_product_id']; unset($query['virtuemart_product_id']); } if(empty( $query['virtuemart_category_id'])){ $query['virtuemart_category_id'] = $helper->getParentProductcategory($virtuemart_product_id); } if(!empty( $query['virtuemart_category_id'])){ $categoryRoute = $helper->getCategoryRoute($query['virtuemart_category_id']); if ($categoryRoute->route) $segments[] = $categoryRoute->route; if ($categoryRoute->itemId) $query['Itemid'] = $categoryRoute->itemId; else $query['Itemid'] = $jmenu['virtuemart']; } else { $query['Itemid'] = $jmenu['virtuemart']?$jmenu['virtuemart']:@$jmenu['virtuemart_category_id'][0]; } unset($query['virtuemart_category_id']); if($virtuemart_product_id) $segments[] = $helper->getProductName($virtuemart_product_id); } if (!count($query)) return $segments; break; case 'manufacturer'; if(isset($query['virtuemart_manufacturer_id'])) { if (isset($jmenu['virtuemart_manufacturer_id'][ $query['virtuemart_manufacturer_id'] ] ) ) { $query['Itemid'] = $jmenu['virtuemart_manufacturer_id'][$query['virtuemart_manufacturer_id']]; } else { $segments[] = $helper->lang('manufacturers').'/'.$helper->getManufacturerName($query['virtuemart_manufacturer_id']) ; if ( isset($jmenu['manufacturer']) ) $query['Itemid'] = $jmenu['manufacturer']; else $query['Itemid'] = $jmenu['virtuemart']; } unset($query['virtuemart_manufacturer_id']); } else { if ( isset($jmenu['manufacturer']) ) $query['Itemid'] = $jmenu['manufacturer']; else $query['Itemid'] = $jmenu['virtuemart']; } break; case 'user'; if ( isset($jmenu['user']) ) $query['Itemid'] = $jmenu['user']; else { $segments[] = $helper->lang('user') ; $query['Itemid'] = $jmenu['virtuemart']; } if (isset($query['task'])) { //vmdebug('my task in user view',$query['task']); if($query['task']=='editaddresscart'){ if ($query['addrtype'] == 'ST'){ $segments[] = $helper->lang('editaddresscartST') ; } else { $segments[] = $helper->lang('editaddresscartBT') ; } } else if($query['task']=='editaddresscheckout'){ if ($query['addrtype'] == 'ST'){ $segments[] = $helper->lang('editaddresscheckoutST') ; } else { $segments[] = $helper->lang('editaddresscheckoutBT') ; } } else if($query['task']=='editaddress'){ if (isset($query['addrtype']) and $query['addrtype'] == 'ST'){ $segments[] = $helper->lang('editaddressST') ; } else { $segments[] = $helper->lang('editaddressBT') ; } } else { $segments[] = $helper->lang($query['task']); } /* if ($query['addrtype'] == 'BT' && $query['task']='editaddresscart') $segments[] = $helper->lang('editaddresscartBT') ; elseif ($query['addrtype'] == 'ST' && $query['task']='editaddresscart') $segments[] = $helper->lang('editaddresscartST') ; elseif ($query['addrtype'] == 'BT') $segments[] = $helper->lang('editaddresscheckoutST') ; elseif ($query['addrtype'] == 'ST') $segments[] = $helper->lang('editaddresscheckoutST') ; else $segments[] = $query['task'] ;*/ unset ($query['task'] , $query['addrtype']); } break; case 'vendor'; /* VM208 */ if(isset($query['virtuemart_vendor_id'])) { if (isset($jmenu['virtuemart_vendor_id'][ $query['virtuemart_vendor_id'] ] ) ) { $query['Itemid'] = $jmenu['virtuemart_vendor_id'][$query['virtuemart_vendor_id']]; } else { if ( isset($jmenu['vendor']) ) { $query['Itemid'] = $jmenu['vendor']; } else { $segments[] = $helper->lang('vendor') ; $query['Itemid'] = $jmenu['virtuemart']; } } } else if ( isset($jmenu['vendor']) ) { $query['Itemid'] = $jmenu['vendor']; } else { $segments[] = $helper->lang('vendor') ; $query['Itemid'] = $jmenu['virtuemart']; } if (isset($query['virtuemart_vendor_id'])) { //$segments[] = $helper->lang('vendor').'/'.$helper->getVendorName($query['virtuemart_vendor_id']) ; $segments[] = $helper->getVendorName($query['virtuemart_vendor_id']) ; unset ($query['virtuemart_vendor_id'] ); } break; case 'cart'; if ( isset($jmenu['cart']) ) $query['Itemid'] = $jmenu['cart']; else { $segments[] = $helper->lang('cart') ; $query['Itemid'] = $jmenu['virtuemart']; } break; case 'orders'; if ( isset($jmenu['orders']) ) $query['Itemid'] = $jmenu['orders']; else { $segments[] = $helper->lang('orders') ; $query['Itemid'] = $jmenu['virtuemart']; } if ( isset($query['order_number']) ) { $segments[] = 'number/'.$query['order_number']; unset ($query['order_number'],$query['layout']); } else if ( isset($query['virtuemart_order_id']) ) { $segments[] = 'id/'.$query['virtuemart_order_id']; unset ($query['virtuemart_order_id'],$query['layout']); } //else unset ($query['layout']); break; // sef only view default ; $segments[] = $view; } // if (!class_exists( 'VmConfig' )) require(JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_virtuemart'.DS.'helpers'.DS.'config.php'); // vmdebug("case 'productdetails'",$query); if (isset($query['task'])) { $segments[] = $helper->lang($query['task']); unset($query['task']); } if (isset($query['layout'])) { $segments[] = $helper->lang($query['layout']) ; unset($query['layout']); } // sef the slimbox View /* if (isset($query['tmpl'])) { //if ( $query['tmpl'] = 'component') $segments[] = 'modal' ; $segments[] = $query['tmpl'] ; unset($query['tmpl']); }*/ return $segments; } /* This function can be slower because is used only one time to find the real URL*/ function virtuemartParseRoute($segments) { $vars = array(); $helper = vmrouterHelper::getInstance(); if ($helper->router_disabled) { $total = count($segments); for ($i = 0; $i < $total; $i=$i+2) { $vars[ $segments[$i] ] = $segments[$i+1]; } return $vars; } if (empty($segments)) { return $vars; } //$lang = $helper->lang ; // revert '-' (Joomla change - to :) // foreach ($segments as &$value) { $value = str_replace(':', '-', $value); } /*$vars['view'] = 'category'; if(isset($helper->activeMenu->virtuemart_category_id)){ $vars['virtuemart_category_id'] = $helper->activeMenu->virtuemart_category_id ; }*/ // $splitted = explode(',',$segments[0],2); $splitted = explode(',',end($segments),2); if ( $helper->compareKey($splitted[0] ,'results')){ // array_shift($segments); array_pop($segments); $results = explode('-',$splitted[1],2); //Pagination has changed, removed the -1 note by Max Milbers NOTE: Works on j1.5, but NOT j1.7 // limitstart is swapped by joomla to start ! See includes/route.php if ($start = $results[0]-1) $vars['limitstart'] = $start; else $vars['limitstart'] = 0 ; $vars['limit'] = $results[1]-$results[0]+1; } else { $vars['limitstart'] = 0 ; if(vmrouterHelper::$limit === null){ vmrouterHelper::$limit = VmConfig::get('list_limit', 20); } $vars['limit'] = vmrouterHelper::$limit; } if (empty($segments)) { $vars['view'] = 'category'; $vars['virtuemart_category_id'] = $helper->activeMenu->virtuemart_category_id ; return $vars; } //Translation of the ordering direction is not really useful and costs just energy //if ( $helper->compareKey(end($segments),'dirDesc') ){ if ( end($segments) == 'dirDesc' ){ $vars['dir'] ='DESC' ; array_pop($segments); if (empty($segments)) { $vars['view'] = 'category'; $vars['virtuemart_category_id'] = $helper->activeMenu->virtuemart_category_id ; return $vars; } } else //if ( $helper->compareKey(end($segments),'dirAsc') ){ if ( end($segments) == 'dirAsc' ){ $vars['dir'] ='ASC' ; array_pop($segments); if (empty($segments)) { $vars['view'] = 'category'; $vars['virtuemart_category_id'] = $helper->activeMenu->virtuemart_category_id ; return $vars; } } // $orderby = explode(',',$segments[0],2); $orderby = explode(',',end($segments),2); if ( $helper->compareKey($orderby[0] , 'by') ) { $vars['orderby'] = $helper->getOrderingKey($orderby[1]) ; // array_shift($segments); array_pop($segments); if (empty($segments)) { $vars['view'] = 'category'; $vars['virtuemart_category_id'] = $helper->activeMenu->virtuemart_category_id ; return $vars; } } if ( $segments[0] == 'product') { $vars['view'] = 'product'; $vars['task'] = $segments[1]; $vars['tmpl'] = 'component'; return $vars; } if ( $segments[0] == 'checkout') { $vars['view'] = 'cart'; $vars['task'] = $segments[0]; return $vars; } if ( $helper->compareKey($segments[0] ,'manufacturer') ) { if(!empty($segments[1])){ array_shift($segments); $vars['virtuemart_manufacturer_id'] = $helper->getManufacturerId($segments[0]); } array_shift($segments); // OSP 2012-02-29 removed search malforms SEF path and search is performed // $vars['search'] = 'true'; if (empty($segments)) { $vars['view'] = 'category'; $vars['virtuemart_category_id'] = $helper->activeMenu->virtuemart_category_id ; return $vars; } } /* added in vm208 */ // if no joomla link: vendor/vendorname/layout // if joomla link joomlalink/vendorname/layout if ( $helper->compareKey($segments[0] ,'vendor') ) { $vars['virtuemart_vendor_id'] = $helper->getVendorId($segments[1]); // OSP 2012-02-29 removed search malforms SEF path and search is performed // $vars['search'] = 'true'; // this can never happen if (empty($segments)) { $vars['view'] = 'vendor'; $vars['virtuemart_vendor_id'] = $helper->activeMenu->virtuemart_vendor_id ; return $vars; } } if ( $helper->compareKey($segments[0] ,'search') ) { $vars['search'] = 'true'; array_shift($segments); if ( !empty ($segments) ) { $vars['keyword'] = array_shift($segments); } $vars['view'] = 'category'; $vars['virtuemart_category_id'] = $helper->activeMenu->virtuemart_category_id ; if (empty($segments)) return $vars; } if (end($segments) == 'modal') { $vars['tmpl'] = 'component'; array_pop($segments); } if ( $helper->compareKey(end($segments) ,'askquestion') ) { $vars = (array)$helper->activeMenu ; $vars['task'] = 'askquestion'; array_pop($segments); } elseif ( $helper->compareKey(end($segments) ,'recommend') ) { $vars = (array)$helper->activeMenu ; $vars['task'] = 'recommend'; array_pop($segments); } elseif ( $helper->compareKey(end($segments) ,'notify') ) { $vars = (array)$helper->activeMenu ; $vars['layout'] = 'notify'; array_pop($segments); } if (empty($segments)) return $vars ; // View is first segment now $view = $segments[0]; if ( $helper->compareKey($view,'orders') || $helper->activeMenu->view == 'orders') { $vars['view'] = 'orders'; if ( $helper->compareKey($view,'orders')){ array_shift($segments); } if (empty($segments)) { $vars['layout'] = 'list'; } else if ($helper->compareKey($segments[0],'list') ) { $vars['layout'] = 'list'; array_shift($segments); } if ( !empty($segments) ) { if ($segments[0] =='number') $vars['order_number'] = $segments[1] ; else $vars['virtuemart_order_id'] = $segments[1] ; $vars['layout'] = 'details'; } return $vars; } else if ( $helper->compareKey($view,'user') || $helper->activeMenu->view == 'user') { $vars['view'] = 'user'; if ( $helper->compareKey($view,'user') ) { array_shift($segments); } if ( !empty($segments) ) { if ( $helper->compareKey($segments[0] ,'editaddresscartBT') ) { $vars['addrtype'] = 'BT' ; $vars['task'] = 'editaddresscart' ; } elseif ( $helper->compareKey($segments[0] ,'editaddresscartST') ) { $vars['addrtype'] = 'ST' ; $vars['task'] = 'editaddresscart' ; } elseif ( $helper->compareKey($segments[0] ,'editaddresscheckoutBT') ) { $vars['addrtype'] = 'BT' ; $vars['task'] = 'editaddresscheckout' ; } elseif ( $helper->compareKey($segments[0] ,'editaddresscheckoutST') ) { $vars['addrtype'] = 'ST' ; $vars['task'] = 'editaddresscheckout' ; } elseif ( $helper->compareKey($segments[0] ,'editaddressST') ) { $vars['addrtype'] = 'ST' ; $vars['task'] = 'editaddressST' ; } elseif ( $helper->compareKey($segments[0] ,'editaddressBT') ) { $vars['addrtype'] = 'BT' ; $vars['task'] = 'edit' ; $vars['layout'] = 'edit' ; //I think that should be the layout, not the task } elseif ( $helper->compareKey($segments[0] ,'edit') ) { $vars['layout'] = 'edit' ; //uncomment and lets test } else $vars['task'] = $segments[0] ; } return $vars; } else if ( $helper->compareKey($view,'vendor') || $helper->activeMenu->view == 'vendor') { /* vm208 */ $vars['view'] = 'vendor'; if ( $helper->compareKey($view,'vendor') ) { array_shift($segments); if (empty($segments)) return $vars; } //$vars['virtuemart_vendor_id'] = array_shift($segments);//// already done //array_shift($segments); $vars['virtuemart_vendor_id'] = $helper->getVendorId($segments[0]); array_shift($segments); if(!empty($segments)) { if ( $helper->compareKey($segments[0] ,'contact') ) $vars['layout'] = 'contact' ; elseif ( $helper->compareKey($segments[0] ,'tos') ) $vars['layout'] = 'tos' ; elseif ( $helper->compareKey($segments[0] ,'details') ) $vars['layout'] = 'details' ; } else $vars['layout'] = 'details' ; return $vars; } elseif ( $helper->compareKey($segments[0] ,'pluginresponse') ) { $vars['view'] = 'pluginresponse'; array_shift($segments); if ( !empty ($segments) ) { $vars['task'] = $segments[0]; array_shift($segments); } if ( isset($segments[0]) && $segments[0] == 'modal') { $vars['tmpl'] = 'component'; array_shift($segments); } return $vars; } else if ( $helper->compareKey($view,'cart') || $helper->activeMenu->view == 'cart') { $vars['view'] = 'cart'; if ( $helper->compareKey($view,'cart') ) { array_shift($segments); if (empty($segments)) return $vars; } if ( $helper->compareKey($segments[0] ,'edit_shipment') ) $vars['task'] = 'edit_shipment' ; elseif ( $helper->compareKey($segments[0] ,'editpayment') ) $vars['task'] = 'editpayment' ; elseif ( $helper->compareKey($segments[0] ,'delete') ) $vars['task'] = 'delete' ; elseif ( $helper->compareKey($segments[0] ,'checkout') ) $vars['task'] = 'checkout' ; else $vars['task'] = $segments[0]; return $vars; } else if ( $helper->compareKey($view,'manufacturers') || $helper->activeMenu->view == 'manufacturer') { $vars['view'] = 'manufacturer'; if ( $helper->compareKey($view,'manufacturers') ) { array_shift($segments); } if (!empty($segments) ) { $vars['virtuemart_manufacturer_id'] = $helper->getManufacturerId($segments[0]); array_shift($segments); } if ( isset($segments[0]) && $segments[0] == 'modal') { $vars['tmpl'] = 'component'; array_shift($segments); } // if (isset($helper->activeMenu->virtuemart_manufacturer_id)) // $vars['virtuemart_manufacturer_id'] = $helper->activeMenu->virtuemart_manufacturer_id ; vmdebug('my parsed URL vars',$vars); return $vars; } /* * seo_sufix must never be used in category or router can't find it * eg. suffix as "-suffix", a category with "name-suffix" get always a false return * Trick : YOu can simply use "-p","-x","-" or ".htm" for better seo result if it's never in the product/category name ! */ /* if (substr(end($segments ), -(int)$helper->seo_sufix_size ) == $helper->seo_sufix ) { vmdebug('$segments productdetail',$segments,end($segments ));*/ $last_elem = end($segments); $slast_elem = prev($segments); if ( (substr($last_elem, -(int)$helper->seo_sufix_size ) == $helper->seo_sufix) || ($last_elem=='notify' && substr($slast_elem, -(int)$helper->seo_sufix_size ) == $helper->seo_sufix) ) { $vars['view'] = 'productdetails'; if($last_elem=='notify') { $vars['layout'] = 'notify'; array_pop($segments); } if (!$helper->use_id ) { $product = $helper->getProductId($segments ,$helper->activeMenu->virtuemart_category_id); $vars['virtuemart_product_id'] = $product['virtuemart_product_id']; $vars['virtuemart_category_id'] = $product['virtuemart_category_id']; //vmdebug('View productdetails, using case !$helper->use_id',$vars,$helper->activeMenu); } elseif (isset($segments[1]) ){ $vars['virtuemart_product_id'] = $segments[0]; $vars['virtuemart_category_id'] = $segments[1]; //vmdebug('View productdetails, using case isset($segments[1]',$vars); } else { $vars['virtuemart_product_id'] = $segments[0]; $vars['virtuemart_category_id'] = $helper->activeMenu->virtuemart_category_id ; //vmdebug('View productdetails, using case "else", which uses $helper->activeMenu->virtuemart_category_id ',$vars); } } elseif (!$helper->use_id && ($helper->activeMenu->view == 'category' ) ) { $vars['virtuemart_category_id'] = $helper->getCategoryId (end($segments) ,$helper->activeMenu->virtuemart_category_id); $vars['view'] = 'category' ; } elseif (isset($segments[0]) && ctype_digit ($segments[0]) || $helper->activeMenu->virtuemart_category_id>0 ) { $vars['virtuemart_category_id'] = $segments[0]; $vars['view'] = 'category'; } elseif ($helper->activeMenu->virtuemart_category_id >0 && $vars['view'] != 'productdetails') { $vars['virtuemart_category_id'] = $helper->activeMenu->virtuemart_category_id ; $vars['view'] = 'category'; } elseif ($id = $helper->getCategoryId (end($segments) ,$helper->activeMenu->virtuemart_category_id )) { // find corresponding category . If not, segment 0 must be a view $vars['virtuemart_category_id'] = $id; $vars['view'] = 'category' ; } else { $vars['view'] = $segments[0] ; if ( isset($segments[1]) ) { $vars['task'] = $segments[1] ; } } //vmdebug('Router vars',$vars); return $vars; } class vmrouterHelper { /* language array */ public $lang = null ; public $query = array(); /* Joomla menus ID object from com_virtuemart */ public $menu = null ; /* Joomla active menu( itemId ) object */ public $activeMenu = null ; public $menuVmitems = null; /* * $use_id type boolean * Use the Id's of categorie and product or not */ public $use_id = false ; public $seo_translate = false ; private $orderings = null ; public static $limit = null ; /* * $router_disabled type boolean * true = don't Use the router */ public $router_disabled = false ; /* instance of class */ private static $_instance = false; private static $_catRoute = array (); public $CategoryName = array(); private $dbview = array('vendor' =>'vendor','category' =>'category','virtuemart' =>'virtuemart','productdetails' =>'product','cart' => 'cart','manufacturer' => 'manufacturer','user'=>'user'); private function __construct($query) { if (!$this->router_disabled = VmConfig::get('seo_disabled', false)) { $this->seo_translate = VmConfig::get('seo_translate', false); $this->vmlang = VMLANG; if ( $this->seo_translate ) { $this->Jlang = VmConfig::loadJLang('com_virtuemart.sef',true); } else { $this->Jlang = JFactory::getLanguage(); } if ( JVM_VERSION===1 ) $this->setMenuItemId(); else $this->setMenuItemIdJ17(); $this->setActiveMenu(); $this->use_id = VmConfig::get('seo_use_id', false); $this->seo_sufix = VmConfig::get('seo_sufix', '-detail'); $this->seo_sufix_size = strlen($this->seo_sufix) ; $this->edit = ('edit' == JRequest::getCmd('task') ); // if language switcher we must know the $query $this->query = $query; } } public static function getInstance(&$query = null) { if (!class_exists( 'VmConfig' )) { require(JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_virtuemart'.DS.'helpers'.DS.'config.php'); } VmConfig::loadConfig(); if (! self::$_instance){ self::$_instance = new vmrouterHelper ($query); if (self::$limit===null){ $mainframe = Jfactory::getApplication(); ; $view = 'virtuemart'; if(isset($query['view'])) $view = $query['view']; self::$limit= $mainframe->getUserStateFromRequest('com_virtuemart.'.$view.'.limit', VmConfig::get('list_limit', 20), 'int'); // self::$limit= $mainframe->getUserStateFromRequest('global.list.limit', 'limit', VmConfig::get('list_limit', 20), 'int'); } } return self::$_instance; } /* Set $this-lang (Translator for language from virtuemart string) to load only once*/ /*public function setLangs(){ $this->vmlang = VMLANG; $this->Jlang = JFactory::getLanguage(); if ( $this->seo_translate ) { // use translator $extension = 'com_virtuemart.sef'; $base_dir = JPATH_SITE; $this->Jlang->load($extension, $base_dir); } }/*/ public function getCategoryRoute($virtuemart_category_id){ $cache = JFactory::getCache('_virtuemart',''); $key = $virtuemart_category_id. $this->vmlang ; // internal cache key if (!($CategoryRoute = $cache->get($key))) { $CategoryRoute = $this->getCategoryRouteNocache($virtuemart_category_id); $cache->store($CategoryRoute, $key); } return $CategoryRoute ; } /* Get Joomla menu item and the route for category */ public function getCategoryRouteNocache($virtuemart_category_id){ if (! array_key_exists ($virtuemart_category_id . $this->vmlang, self::$_catRoute)){ $category = new stdClass(); $category->route = ''; $category->itemId = 0; $menuCatid = 0 ; $ismenu = false ; // control if category is joomla menu if (isset($this->menu['virtuemart_category_id'])) { if (isset( $this->menu['virtuemart_category_id'][$virtuemart_category_id])) { $ismenu = true; $category->itemId = $this->menu['virtuemart_category_id'][$virtuemart_category_id] ; } else { $CatParentIds = $this->getCategoryRecurse($virtuemart_category_id,0) ; /* control if parent categories are joomla menu */ foreach ($CatParentIds as $CatParentId) { // No ? then find the parent menu categorie ! if (isset( $this->menu['virtuemart_category_id'][$CatParentId]) ) { $category->itemId = $this->menu['virtuemart_category_id'][$CatParentId] ; $menuCatid = $CatParentId; break; } } } } if ($ismenu==false) { if ( $this->use_id ) $category->route = $virtuemart_category_id.'/'; if (!isset ($this->CategoryName[$virtuemart_category_id])) { $this->CategoryName[$virtuemart_category_id] = $this->getCategoryNames($virtuemart_category_id, $menuCatid ); } $category->route .= $this->CategoryName[$virtuemart_category_id] ; if ($menuCatid == 0 && $this->menu['virtuemart']) $category->itemId = $this->menu['virtuemart'] ; } self::$_catRoute[$virtuemart_category_id . $this->vmlang] = $category; } return self::$_catRoute[$virtuemart_category_id . $this->vmlang] ; } /*get url safe names of category and parents categories */ public function getCategoryNames($virtuemart_category_id,$catMenuId=0){ static $categoryNamesCache = array(); $strings = array(); $db = JFactory::getDBO(); $parents_id = array_reverse($this->getCategoryRecurse($virtuemart_category_id,$catMenuId)) ; foreach ($parents_id as $id ) { if(!isset($categoryNamesCache[$id])){ $q = 'SELECT `slug` as name FROM `#__virtuemart_categories_'.$this->vmlang.'` WHERE `virtuemart_category_id`='.(int)$id; $db->setQuery($q); $cslug = $db->loadResult(); $categoryNamesCache[$id] = $cslug; $strings[] = $cslug; } else { $strings[] = $categoryNamesCache[$id]; } } if(function_exists('mb_strtolower')){ return mb_strtolower(implode ('/', $strings ) ); } else { return strtolower(implode ('/', $strings ) ); } } /* Get parents of category*/ public function getCategoryRecurse($virtuemart_category_id,$catMenuId,$first=true ) { static $idsArr = array(); if ($first==true) $idsArr = array(); $db = JFactory::getDBO(); $q = "SELECT `category_child_id` AS `child`, `category_parent_id` AS `parent` FROM #__virtuemart_category_categories AS `xref` WHERE `xref`.`category_child_id`= ".(int)$virtuemart_category_id; $db->setQuery($q); $ids = $db->loadObject(); if (isset ($ids->child)) { $idsArr[] = $ids->child; if($ids->parent != 0 and $catMenuId != $virtuemart_category_id and $catMenuId != $ids->parent) { $this->getCategoryRecurse($ids->parent,$catMenuId,false); } } return $idsArr ; } /* return id of categories * $names are segments * $virtuemart_category_ids is joomla menu virtuemart_category_id */ public function getCategoryId($slug,$virtuemart_category_id ){ $db = JFactory::getDBO(); $q = "SELECT `virtuemart_category_id` FROM `#__virtuemart_categories_".$this->vmlang."` WHERE `slug` LIKE '".$db->getEscaped($slug)."' "; $db->setQuery($q); if (!$category_id = $db->loadResult()) { $category_id = $virtuemart_category_id; } return $category_id ; } /* Get URL safe Product name */ public function getProductName($id){ static $productNamesCache = array(); if(!isset($productNamesCache[$id])){ $db = JFactory::getDBO(); $query = 'SELECT `slug` FROM `#__virtuemart_products_'.$this->vmlang.'` ' . ' WHERE `virtuemart_product_id` = ' . (int) $id; $db->setQuery($query); $name = $db->loadResult(); $productNamesCache[$id] = $name ; } else { $name = $productNamesCache[$id]; } return $name.$this->seo_sufix; } var $counter = 0; /* Get parent Product first found category ID */ public function getParentProductcategory($id){ $virtuemart_category_id = 0; $db = JFactory::getDBO(); $query = 'SELECT `product_parent_id` FROM `#__virtuemart_products` ' . ' WHERE `virtuemart_product_id` = ' . (int) $id; $db->setQuery($query); /* If product is child then get parent category ID*/ if ($parent_id = $db->loadResult()) { $query = 'SELECT `virtuemart_category_id` FROM `#__virtuemart_product_categories` ' . ' WHERE `virtuemart_product_id` = ' . $parent_id; $db->setQuery($query); //When the child and parent id is the same, this creates a deadlock //add $counter, dont allow more then 10 levels if (!$virtuemart_category_id = $db->loadResult()){ $this->counter++; if($this->counter<10){ $this->getParentProductcategory($parent_id) ; } } } $this->counter = 0; return $virtuemart_category_id ; } /* get product and category ID */ public function getProductId($names,$virtuemart_category_id = NULL ){ $productName = array_pop($names); $productName = substr($productName, 0, -(int)$this->seo_sufix_size ); $product = array(); $categoryName = end($names); $product['virtuemart_category_id'] = $this->getCategoryId($categoryName,$virtuemart_category_id ) ; $db = JFactory::getDBO(); $q = 'SELECT `p`.`virtuemart_product_id` FROM `#__virtuemart_products_'.$this->vmlang.'` AS `p` LEFT JOIN `#__virtuemart_product_categories` AS `xref` ON `p`.`virtuemart_product_id` = `xref`.`virtuemart_product_id` WHERE `p`.`slug` LIKE "'.$db->getEscaped($productName).'" '; //$q .= " AND `xref`.`virtuemart_category_id` = ".(int)$product['virtuemart_category_id']; $db->setQuery($q); $product['virtuemart_product_id'] = $db->loadResult(); /* WARNING product name must be unique or you can't acces the product */ return $product ; } /* Get URL safe Manufacturer name */ public function getManufacturerName($virtuemart_manufacturer_id ){ $db = JFactory::getDBO(); $query = 'SELECT `slug` FROM `#__virtuemart_manufacturers_'.$this->vmlang.'` WHERE virtuemart_manufacturer_id='.(int)$virtuemart_manufacturer_id; $db->setQuery($query); return $db->loadResult(); } /* Get Manufacturer id */ public function getManufacturerId($slug ){ $db = JFactory::getDBO(); $query = "SELECT `virtuemart_manufacturer_id` FROM `#__virtuemart_manufacturers_".$this->vmlang."` WHERE `slug` LIKE '".$db->getEscaped($slug)."' "; $db->setQuery($query); return $db->loadResult(); } /* Get URL safe Manufacturer name */ public function getVendorName($virtuemart_vendor_id ){ $db = JFactory::getDBO(); $query = 'SELECT `slug` FROM `#__virtuemart_vendors_'.$this->vmlang.'` WHERE virtuemart_vendor_id='.(int)$virtuemart_vendor_id; $db->setQuery($query); return $db->loadResult(); } /* Get Manufacturer id */ public function getVendorId($slug ){ $db = JFactory::getDBO(); $query = "SELECT `virtuemart_vendor_id` FROM `#__virtuemart_vendors_".$this->vmlang."` WHERE `slug` LIKE '".$db->getEscaped($slug)."' "; $db->setQuery($query); return $db->loadResult(); } /* Set $this->menu with the Item ID from Joomla Menus */ private function setMenuItemIdJ17(){ $home = false ; $component = JComponentHelper::getComponent('com_virtuemart'); //else $items = $menus->getItems('component_id', $component->id); //get all vm menus $db = JFactory::getDBO(); $fallback = ''; $jLangTag = $this->Jlang->getTag(); if($jLangTag!=VmConfig::$langTag){ $fallback= 'or language = "'.$jLangTag.'"'; } $query = 'SELECT * FROM `#__menu` where `link` like "index.php?option=com_virtuemart%" and client_id=0 and published=1 and (language="*" or language = "'.VmConfig::$langTag.'" '.$fallback.' )' ; $db->setQuery($query); // vmdebug('setMenuItemIdJ17 q',$query); $this->menuVmitems= $db->loadObjectList(); $homeid =0; if(empty($this->menuVmitems)){ VmConfig::loadJLang('com_virtuemart', true); vmWarn(JText::_('COM_VIRTUEMART_ASSIGN_VM_TO_MENU')); } else { // Search Virtuemart itemID in joomla menu foreach ($this->menuVmitems as $item) { $linkToSplit= explode ('&',$item->link); $link =array(); foreach ($linkToSplit as $tosplit) { $splitpos = strpos($tosplit, '='); $link[ (substr($tosplit, 0, $splitpos) ) ] = substr($tosplit, $splitpos+1); } //vmDebug('menu view link',$link); //This is fix to prevent entries in the errorlog. if(!empty($link['view'])){ $view = $link['view'] ; if (array_key_exists($view,$this->dbview) ){ $dbKey = $this->dbview[$view]; } else { $dbKey = false ; } if ( isset($link['virtuemart_'.$dbKey.'_id']) && $dbKey ){ $this->menu['virtuemart_'.$dbKey.'_id'][ $link['virtuemart_'.$dbKey.'_id'] ] = $item->id; } elseif ($home == $view ) continue; else $this->menu[$view]= $item->id ; if ((int)$item->home === 1) { $home = $view; $homeid = $item->id; } } else { vmdebug('my item with empty $link["view"]',$item); vmError('$link["view"] is empty'); } } } // init unsetted views to defaut front view or nothing(prevent duplicates routes) if ( !isset( $this->menu['virtuemart']) ) { if (isset ($this->menu['virtuemart_category_id'][0]) ) { $this->menu['virtuemart'] = $this->menu['virtuemart_category_id'][0] ; }else $this->menu['virtuemart'] = $homeid; } // if ( !isset( $this->menu['manufacturer']) ) { // $this->menu['manufacturer'] = $this->menu['virtuemart'] ; // } // if ( !isset( $this->menu['vendor']) ) { // $this->menu['manufacturer'] = $this->menu['virtuemart'] ; // } } /* Set $this->menu with the Item ID from Joomla Menus */ private function setMenuItemId(){ $app = JFactory::getApplication(); $menus = $app->getMenu('site'); $component = JComponentHelper::getComponent('com_virtuemart'); $items = $menus->getItems('componentid', $component->id); if(empty($items)){ VmConfig::loadJLang('com_virtuemart', true); vmWarn(JText::_('COM_VIRTUEMART_ASSIGN_VM_TO_MENU')); } else { // Search Virtuemart itemID in joomla menu foreach ($items as $item) { $view = $item->query['view'] ; if ($view=='virtuemart') $this->menu['virtuemart'] = $item->id; $dbKey = $this->dbview[$view]; if ( isset($item->query['virtuemart_'.$dbKey.'_id']) ) $this->menu['virtuemart_'.$dbKey.'_id'][ $item->query['virtuemart_'.$dbKey.'_id'] ] = $item->id; else $this->menu[$view]= $item->id ; } } // init unsetted views to defaut front view or nothing(prevent duplicates routes) if ( !isset( $this->menu['virtuemart'][0]) ) { $this->menu['virtuemart'][0] = null; } if ( !isset( $this->menu['manufacturer']) ) { $this->menu['manufacturer'] = $this->menu['virtuemart'][0] ; } } /* Set $this->activeMenu to current Item ID from Joomla Menus */ private function setActiveMenu(){ if ($this->activeMenu === null ) { //$menu = JSite::getMenu(); //$menu = JFactory::getApplication()->getMenu(); $app = JFactory::getApplication(); $menu = $app->getMenu('site'); if ($Itemid = JRequest::getInt('Itemid',0) ) { $menuItem = $menu->getItem($Itemid); } else { $menuItem = $menu->getActive(); } //vmdebug('What is my active menu now?',$menuItem); $this->activeMenu = new stdClass(); $this->activeMenu->view = (empty($menuItem->query['view'])) ? null : $menuItem->query['view']; $this->activeMenu->virtuemart_category_id = (empty($menuItem->query['virtuemart_category_id'])) ? 0 : $menuItem->query['virtuemart_category_id']; $this->activeMenu->virtuemart_product_id = (empty($menuItem->query['virtuemart_product_id'])) ? null : $menuItem->query['virtuemart_product_id']; $this->activeMenu->virtuemart_manufacturer_id = (empty($menuItem->query['virtuemart_manufacturer_id'])) ? null : $menuItem->query['virtuemart_manufacturer_id']; /* added in 208 */ $this->activeMenu->virtuemart_vendor_id = (empty($menuItem->query['virtuemart_vendor_id'])) ? null : $menuItem->query['virtuemart_vendor_id']; $this->activeMenu->Component = (empty($menuItem->component)) ? null : $menuItem->component; } } /* * Get language key or use $key in route */ public function lang($key) { if ($this->seo_translate ) { $jtext = (strtoupper( $key ) ); if ($this->Jlang->hasKey('COM_VIRTUEMART_SEF_'.$jtext) ){ //vmdebug('router lang translated '.$jtext); return JText::_('COM_VIRTUEMART_SEF_'.$jtext); } } //vmdebug('router lang '.$key); //falldown return $key; } /* * revert key or use $key in route */ public function getOrderingKey($key) { if ($this->seo_translate ) { if ($this->orderings == null) { $this->orderings = array( 'virtuemart_product_id'=> JText::_('COM_VIRTUEMART_SEF_PRODUCT_ID'), 'product_sku' => JText::_('COM_VIRTUEMART_SEF_PRODUCT_SKU'), 'product_price' => JText::_('COM_VIRTUEMART_SEF_PRODUCT_PRICE'), 'category_name' => JText::_('COM_VIRTUEMART_SEF_CATEGORY_NAME'), 'category_description'=> JText::_('COM_VIRTUEMART_SEF_CATEGORY_DESCRIPTION'), 'mf_name' => JText::_('COM_VIRTUEMART_SEF_MF_NAME'), 'product_s_desc' => JText::_('COM_VIRTUEMART_SEF_PRODUCT_S_DESC'), 'product_desc' => JText::_('COM_VIRTUEMART_SEF_PRODUCT_DESC'), 'product_weight' => JText::_('COM_VIRTUEMART_SEF_PRODUCT_WEIGHT'), 'product_weight_uom'=> JText::_('COM_VIRTUEMART_SEF_PRODUCT_WEIGHT_UOM'), 'product_length' => JText::_('COM_VIRTUEMART_SEF_PRODUCT_LENGTH'), 'product_width' => JText::_('COM_VIRTUEMART_SEF_PRODUCT_WIDTH'), 'product_height' => JText::_('COM_VIRTUEMART_SEF_PRODUCT_HEIGHT'), 'product_lwh_uom' => JText::_('COM_VIRTUEMART_SEF_PRODUCT_LWH_UOM'), 'product_in_stock' => JText::_('COM_VIRTUEMART_SEF_PRODUCT_IN_STOCK'), 'low_stock_notification'=> JText::_('COM_VIRTUEMART_SEF_LOW_STOCK_NOTIFICATION'), 'product_available_date'=> JText::_('COM_VIRTUEMART_SEF_PRODUCT_AVAILABLE_DATE'), 'product_availability' => JText::_('COM_VIRTUEMART_SEF_PRODUCT_AVAILABILITY'), 'product_special' => JText::_('COM_VIRTUEMART_SEF_PRODUCT_SPECIAL'), 'created_on' => JText::_('COM_VIRTUEMART_SEF_CREATED_ON'), // 'p.modified_on' => JText::_('COM_VIRTUEMART_SEF_MDATE'), 'product_name' => JText::_('COM_VIRTUEMART_SEF_PRODUCT_NAME'), 'product_sales' => JText::_('COM_VIRTUEMART_SEF_PRODUCT_SALES'), 'product_unit' => JText::_('COM_VIRTUEMART_SEF_PRODUCT_UNIT'), 'product_packaging' => JText::_('COM_VIRTUEMART_SEF_PRODUCT_PACKAGING'), 'intnotes' => JText::_('COM_VIRTUEMART_SEF_INTNOTES'), 'pc.ordering' => JText::_('COM_VIRTUEMART_SEF_ORDERING') ); } if ($result = array_search($key,$this->orderings )) { return $result; } } return $key; } /* * revert string key or use $key in route */ public function compareKey($string, $key) { if ($this->seo_translate ) { if (JText::_('COM_VIRTUEMART_SEF_'.$key) == $string ) { return true; } } if ($string == $key) return true; return false; } } // pure php no closing tagvirtuemart.php000066600000010200151373621660007466 0ustar00setCaching (1); $_controller = 'virtuemart'; require (JPATH_VM_SITE.DS.'controllers'.DS.'virtuemart.php'); JRequest::setVar('view', 'virtuemart'); $task=''; $basePath = JPATH_VM_SITE; } else { //$cache->setCaching (0); /* Front-end helpers */ if(!class_exists('VmImage')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'image.php'); //dont remove that file it is actually in every view except the state view if(!class_exists('shopFunctionsF'))require(JPATH_VM_SITE.DS.'helpers'.DS.'shopfunctionsf.php'); //dont remove that file it is actually in every view $_controller = JRequest::getWord('view', JRequest::getWord('controller', 'virtuemart')) ; $trigger = 'onVmSiteController'; // $task = JRequest::getWord('task',JRequest::getWord('layout',$_controller) ); $this makes trouble! $task = JRequest::getWord('task','') ; if ((($_controller == 'product' || $_controller == 'category') && ($task == 'save' || $task == 'edit')) || ($_controller == 'translate' && $task='paste') ) { $app = JFactory::getApplication(); if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if (Permissions::getInstance()->check("admin,storeadmin")) { VmConfig::loadJLang('com_virtuemart'); $basePath = JPATH_VM_ADMINISTRATOR; $trigger = 'onVmAdminController'; vmJsApi::jQuery(false); //vmJsApi::js('vmsite'); } else { $app->redirect('index.php?option=com_virtuemart', jText::_('COM_VIRTUEMART_RESTRICTED_ACCESS') ); } } elseif($_controller) { vmJsApi::jQuery(); vmJsApi::jSite(); vmJsApi::cssSite(); $basePath = JPATH_VM_SITE; } } /* Create the controller name */ $_class = 'VirtuemartController'.ucfirst($_controller); if (file_exists($basePath.DS.'controllers'.DS.$_controller.'.php')) { if (!class_exists($_class)) { require ($basePath.DS.'controllers'.DS.$_controller.'.php'); } } else { // try plugins JPluginHelper::importPlugin('vmextended'); JPluginHelper::importPlugin('vmshipment'); JPluginHelper::importPlugin('vmpayment'); $dispatcher = JDispatcher::getInstance(); $dispatcher->trigger($trigger, array($_controller)); } if (class_exists($_class)) { $controller = new $_class(); // try plugins JPluginHelper::importPlugin('vmuserfield'); $dispatcher = JDispatcher::getInstance(); $dispatcher->trigger('plgVmOnMainController', array($_controller)); /* Perform the Request task */ $controller->execute($task); // vmTime($_class.' Finished task '.$task,'Start'); vmRam('End'); vmRamPeak('Peak'); /* Redirect if set by the controller */ $controller->redirect(); } else { vmDebug('VirtueMart controller not found: '. $_class); if (VmConfig::get('handle_404',1)) { $mainframe = Jfactory::getApplication(); $mainframe->redirect(JRoute::_ ('index.php?option=com_virtuemart&view=virtuemart', FALSE)); } else { JError::raise(E_ERROR,'404','Not found'); } } language/en-GB/en-GB.com_virtuemart.sys.ini000066600000010263151373621660014504 0ustar00; VirtueMart Project" ; Copyright (C) 2008 VirtueMart, 2009 VirtueMart Team. All rights reserved." ; License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php" ; Note : All ini files need to be saved as UTF-8 - No BOM" ; System COM_VIRTUEMART="VirtueMart" COM_VIRTUEMART_DESCRIPTION="Welcome to VirtueMart!
The complete Online Shopsystem for Joomla 1.5+" COM_VIRTUEMART_INSTALLATION_FINISH="Basic Installation has been finished." COM_VIRTUEMART_INSTALLATION_STEP_ONE="The first step of the Installation was SUCCESSFUL" COM_VIRTUEMART_INSTALL_DONATION="Please consider a small donation to help us keep up the work on this component." COM_VIRTUEMART_INSTALL_FURTHER_HELP="Go to VirtueMart for further Help" COM_VIRTUEMART_INSTALL_GO_SHOP="Go to the Shop" COM_VIRTUEMART_INSTALL_SAMPLE_DATA="Install Sample Data" COM_VIRTUEMART_MENU="VirtueMart" COM_VIRTUEMART_UNINSTALL_NOTE="Uninstall Note:" COM_VIRTUEMART_UNINSTALL_NOTE_DESC="Uninstalling VirtueMart does not remove the VirtueMart tables from your database. This is done intentionally to allow for upgrading your current data to new versions of VirtueMart.
To remove the VirtueMart tables, remove all tables with the _virtuemart_ prefix." COM_VIRTUEMART_UNINSTALL_THANKYOU="Thank you for using VirtueMart!" VIRTUEMART="VirtueMart" ; components/com_virtuemart/views/cart/tmpl/default.xml COM_VIRTUEMART_CART_VIEW_DEFAULT_DESC="Displays the Shopping Cart" COM_VIRTUEMART_CART_VIEW_DEFAULT_TITLE="VirtueMart Shopping Cart" ; components/com_virtuemart/views/cart/tmpl/minicart.xml COM_VIRTUEMART_MINICART_DESC="Displays VirtueMart minicart" COM_VIRTUEMART_MINICART_MENU="VirtueMart mini cart" ; components/com_virtuemart/views/categories/tmpl/default.xml COM_VIRTUEMART_CATEGORIES_VIEW_DEFAULT_DESC="To set the parent category" COM_VIRTUEMART_CATEGORIES_VIEW_DEFAULT_TITLE="VirtueMart Categories Layout" ; components/com_virtuemart/views/category/tmpl/default.xml COM_VIRTUEMART_CATEGORY_FIELD_SELECT="Select a category" COM_VIRTUEMART_CATEGORY_FIELD_SELECT_DESC="Creates a link to display the selected Category" COM_VIRTUEMART_CATEGORY_VIEW_DEFAULT_DESC="Displays a single VirtueMart category" COM_VIRTUEMART_CATEGORY_VIEW_DEFAULT_TITLE="Category Layout" ; components/com_virtuemart/views/manufacturer/tmpl/details.xml COM_VIRTUEMART_MANUFACTURER_FIELD_SELECT="Select a Manufacturer" COM_VIRTUEMART_MANUFACTURER_FIELD_SELECT_DESC="Creates a link to display the selected Manufacturer" COM_VIRTUEMART_MANUFACTURER_VIEW_DEFAULT_DESC="Displays VirtueMart manufacturers List" COM_VIRTUEMART_MANUFACTURER_VIEW_DEFAULT_TITLE="VirtueMart Manufacturer Default Layout" COM_VIRTUEMART_MANUFACTURER_VIEW_DETAILS_DESC="Displays a single VirtueMart manufacturer" COM_VIRTUEMART_MANUFACTURER_VIEW_DETAILS_TITLE="VirtueMart Manufacturer Details Layout" ; components/com_virtuemart/views/orders/tmpl/details.xml COM_VIRTUEMART_ORDERS_LIST="List Orders" COM_VIRTUEMART_ORDERS_VIEW_DEFAULT_DESC="List All Orders" COM_VIRTUEMART_ORDERS_VIEW_DEFAULT_TITLE="List Orders" ; components/com_virtuemart/views/productdetails/tmpl/default.xml COM_VIRTUEMART_PRODUCTDETAILS_FIELD_SELECT="Select a Product" COM_VIRTUEMART_PRODUCTDETAILS_FIELD_SELECT_DESC="Creates a link to this display the selected Product" COM_VIRTUEMART_PRODUCTDETAILS_PRODUCT="Product" COM_VIRTUEMART_PRODUCTDETAILS_TO_SET_PRODUCT_VIEW="To set the product view" COM_VIRTUEMART_PRODUCTDETAILS_VIEW_DEFAULT_DESC="Displays a single product" COM_VIRTUEMART_PRODUCTDETAILS_VIEW_DEFAULT_TITLE="VirtueMart Product Details Layout" ; components/com_virtuemart/views/user/tmpl/edit.xml COM_VIRTUEMART_USER_VIEW_DEFAULT_DESC="Displays the VirtueMart Customer Account Maintenance" COM_VIRTUEMART_USER_VIEW_DEFAULT_TITLE="VirtueMart Account Maintenance" ; components/com_virtuemart/views/virtuemart/tmpl/default.xml COM_VIRTUEMART_VIRTUEMART_VIEW_DEFAULT_TITLE="VirtueMart Front page" COM_VIRTUEMART_VIRTUEMART_VIEW_DEFAULT_TITLE_DESC="Displays the VirtueMart front page" ; components/com_virtuemart/views/recommend/tmpl/edit.xml ;COM_VIRTUEMART_RECCOMEND_MENU="VirtueMart Account Maintenance" ;COM_VIRTUEMART_RECOMMEND_MENU_DESC="Displays the VirtueMart Customer Account Maintenance"language/en-GB/en-GB.com_virtuemart.ini000066600000076577151373621660013713 0ustar00; Virtuemart! Project ; Copyright (C) 2011 Virtuemart Team. All rights reserved. ; License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 - No BOM ; COM_VIRTUEMART_ACC_BILL_DEF="- Default (Same as Billing)" COM_VIRTUEMART_ACC_NO_ORDER="You have no existing orders" COM_VIRTUEMART_ADDTOCART_CHOOSE_VARIANT="Choose a product variant first" COM_VIRTUEMART_ALL="all" COM_VIRTUEMART_ASC="-/+" COM_VIRTUEMART_ASKQU_CS_MAX="Maximum characters for your question is reached" COM_VIRTUEMART_ASKQU_CS_MIN="Minimum characters for your question is not reached" COM_VIRTUEMART_ASK_COMMENT="Please write your question....(min. %s, max. %s characters)" COM_VIRTUEMART_ASK_COUNT="Characters written: " COM_VIRTUEMART_ASK_ERR_COMMENT1="Please write down some more words for your question. Minimum characters allowed: %s" COM_VIRTUEMART_ASK_ERR_COMMENT2="Please shorten your question. Maximum characters allowed: %s" COM_VIRTUEMART_ASK_QUESTION_THANK_YOU="Thank you for your Question. We will contact you as soon as possible." COM_VIRTUEMART_ASK_SUBMIT="Send your question" COM_VIRTUEMART_ASSIGN_VM_TO_MENU="Assign the component VirtueMart to a menu item" COM_VIRTUEMART_BACK_TO_ACCOUNT="Back to Account Details" COM_VIRTUEMART_BOX_CLOSE="close" COM_VIRTUEMART_BOX_CURRENT="product {current} of {total}" COM_VIRTUEMART_BOX_NEXT="next" COM_VIRTUEMART_BOX_PREVIOUS="previous" COM_VIRTUEMART_BUTTON_LOGOUT="Logout" COM_VIRTUEMART_CANCEL="Cancel" COM_VIRTUEMART_CART_ACTION="Update" COM_VIRTUEMART_CART_ACTIVE_ADMIN="Active administrator:" COM_VIRTUEMART_CART_ADD_TO="Add to Cart" COM_VIRTUEMART_CART_CHANGED_SHOPPER_SUCCESSFULLY="Shopper successfully changed to %1$s" COM_VIRTUEMART_CART_CHANGE_PAYMENT="Change Payment" COM_VIRTUEMART_CART_CHANGE_SHIPPING="Change Shipment" COM_VIRTUEMART_CART_CHANGE_SHOPPER="Change Shopper" COM_VIRTUEMART_CART_CHANGE_SHOPPER_NO_PERMISSIONS="No permissions to change shopper" COM_VIRTUEMART_CART_CHECKOUT_DATA_NOT_VALID="Invalid data entered" COM_VIRTUEMART_CART_CHECKOUT_DONE_CONFIRM_ORDER="Checkout done, please confirm the order" COM_VIRTUEMART_CART_COUPON_VALID="Discount Coupon successfully added" COM_VIRTUEMART_CART_DATA_NOT_VALID="Cart data not valid" COM_VIRTUEMART_CART_DELETE="Delete Product From Cart" COM_VIRTUEMART_CART_EDIT_COUPON="Edit coupon" COM_VIRTUEMART_CART_EDIT_PAYMENT="Select payment" COM_VIRTUEMART_CART_EDIT_SHIPPING="Select shipment" COM_VIRTUEMART_CART_ENTER_ADDRESS_FIRST="Please enter your address first" COM_VIRTUEMART_CART_ERROR_NO_NEGATIVE="Negative quantities are not allowed." COM_VIRTUEMART_CART_ERROR_NO_PRODUCT_IDS="Error while adding product in cart: no product ids" COM_VIRTUEMART_CART_ERROR_NO_VALID_QUANTITY="Please enter a valid quantity for this item." COM_VIRTUEMART_CART_FREE_SHIPPING="Shipment is free on this Order" COM_VIRTUEMART_CART_MAIL_FOOTER="mail footer message" COM_VIRTUEMART_CART_MAIL_SHOPPER_CONTENT="Dear %1$s,
you bought and confirmed an order with a total of %3$s at %2$s,
your order number is = %4$s
and your order password = %5$s" COM_VIRTUEMART_CART_MAIL_SHOPPER_QUESTION="Your comment:
%1$s" COM_VIRTUEMART_CART_MAIL_VENDOR_CONTENT="Hello %1$s,
%2$s confirmed an order with a total of %3$s, his order_id = %4$s" COM_VIRTUEMART_CART_MAIL_VENDOR_SHOPPER_QUESTION="The shopper commented the order:
%1$s" COM_VIRTUEMART_CART_MAIL_VENDOR_TITLE="Hello" COM_VIRTUEMART_CART_MAX_ORDER="The maximum order level for this product is %d items." COM_VIRTUEMART_CART_MIN_ORDER="The minimum order level for this product is %d items." COM_VIRTUEMART_CART_MIN_PURCHASE="The minimum purchase value is %s." COM_VIRTUEMART_CART_NAME="Name" COM_VIRTUEMART_CART_NOTIFY="Notify Me" COM_VIRTUEMART_CART_NOTIFY_DESC="We regret to inform you that this product (%s) is either temporarily out of stock or not in stock in the desired quantity. Please submit your email address if you would like to be notified when new stock arrives for this product.

Thank you!" COM_VIRTUEMART_CART_NOTIFY_MAIL_HTML="
Thank you for your patience.

Our %s is now in stock and can be purchased by following this link:
%s

This is a one time notice, you will not receive this e-mail again.
" COM_VIRTUEMART_CART_NOTIFY_MAIL_RAW="Thank you for your patience.\r\n\r\nOur %s is now in stock and can be purchased by following this link:\r\n%s\r\n\r\nThis is a one time notice, you will not receive this e-mail again." COM_VIRTUEMART_CART_NOTIFY_MAIL_SUBJECT="Product Notification" COM_VIRTUEMART_CART_NO_PAYMENT_METHOD_PUBLIC="We are sorry, no payment method matches the characteristics of your order. Please %s." COM_VIRTUEMART_CART_NO_PAYMENT_SELECTED="No payment selected" COM_VIRTUEMART_CART_NO_PRODUCT="There are no products in your cart." COM_VIRTUEMART_CART_NO_SHIPMENT_SELECTED="No shipment selected" COM_VIRTUEMART_CART_NO_SHIPPINGRATE="No shipping rate could be selected, you may not have entered your address or the vendor/shipment does not support your location" COM_VIRTUEMART_CART_NO_SHIPPING_METHOD="No Shipment plugin installed or configured for this vendor, or no shipment method is defined for your shippping address." COM_VIRTUEMART_CART_NO_SHIPPING_METHOD_PUBLIC="We are sorry, no shipment method matches the characteristics of your order." COM_VIRTUEMART_CART_ONE_PRODUCT="1 product" COM_VIRTUEMART_CART_ONLY_REGISTERED="Please register to checkout" COM_VIRTUEMART_CART_ORDERDONE_DATA_NOT_VALID="Order not completed, data is not valid" COM_VIRTUEMART_CART_ORDERDONE_THANK_YOU="Thank you for your order!" COM_VIRTUEMART_CART_OVERVIEW="Shopping cart" COM_VIRTUEMART_CART_PAYMENT="Payment" COM_VIRTUEMART_CART_PLEASE_ACCEPT_TOS="Please accept the terms of service to confirm" COM_VIRTUEMART_CART_PRICE="Price: " COM_VIRTUEMART_CART_PRICE_FREE="No additional charge" COM_VIRTUEMART_CART_PRICE_PER_UNIT="Price per Unit" COM_VIRTUEMART_CART_PRODUCT_ADDED="%2$s x %1$s was added to your cart." COM_VIRTUEMART_CART_PRODUCT_OUT_OF_QUANTITY="Max quantity reached, new quantity set to %s" COM_VIRTUEMART_CART_PRODUCT_OUT_OF_STOCK="Product out of stock" COM_VIRTUEMART_CART_PRODUCT_UPDATED="The product quantity has been updated." COM_VIRTUEMART_CART_QUANTITY="Quantity" COM_VIRTUEMART_CART_SELECTCOUPON="Select your coupon" COM_VIRTUEMART_CART_SELECTPAYMENT="Select payment method" COM_VIRTUEMART_CART_SELECTSHIPMENT="Select shipment" COM_VIRTUEMART_CART_SELECT_PAYMENT="Please select a payment method" COM_VIRTUEMART_CART_SELECT_SHIPMENT="Please select a shipment method" COM_VIRTUEMART_CART_SETPAYMENT_PLUGIN_FAILED="The payment plugin failed" COM_VIRTUEMART_CART_SHIPPING="Shipment" COM_VIRTUEMART_CART_SHOW="Show Cart" COM_VIRTUEMART_CART_SKU="SKU" COM_VIRTUEMART_CART_STEP_ORDER="You can buy this product only in steps of %d items." COM_VIRTUEMART_CART_SUBTOTAL="Subtotal" COM_VIRTUEMART_CART_SUBTOTAL_DISCOUNT_AMOUNT="Discount" COM_VIRTUEMART_CART_SUBTOTAL_TAX_AMOUNT="Tax" COM_VIRTUEMART_CART_THANKYOU="Thank you for your Order!" COM_VIRTUEMART_CART_TITLE="Cart" COM_VIRTUEMART_CART_TOS="Terms of service" COM_VIRTUEMART_CART_TOS_READ_AND_ACCEPTED="Click here to read terms of service and check the box to accept them." COM_VIRTUEMART_CART_TOTAL="Total" COM_VIRTUEMART_CART_TOTAL_PAYMENT="Total in Payment Currency" COM_VIRTUEMART_CART_UPDATE="Update Quantity In Cart" COM_VIRTUEMART_CART_X_PRODUCTS="%s products" COM_VIRTUEMART_CATEGORIES="Categories" COM_VIRTUEMART_CATEGORIES_RELATED_SEARCH="Search" COM_VIRTUEMART_CATEGORY="Category" COM_VIRTUEMART_CATEGORY_BACK_TO="Back to: %s" COM_VIRTUEMART_CATEGORY_DESCRIPTION="Category Description" COM_VIRTUEMART_CATEGORY_ID="Category Id" COM_VIRTUEMART_CATEGORY_NAME="Category" COM_VIRTUEMART_CATEGORY_NOT_FOUND="Category not found" COM_VIRTUEMART_CATEGORY_TOP_LEVEL="Top Category" COM_VIRTUEMART_CAT_NOT_PUBL="Category %1$s id %2$s not published" COM_VIRTUEMART_CHECKOUT_AS_GUEST="Checkout as Guest" COM_VIRTUEMART_CHECKOUT_PLEASE_ENTER_ADDRESS="Please enter your billto address" COM_VIRTUEMART_CHECKOUT_TITLE="Check Out Now" COM_VIRTUEMART_CLOSE="Close" COM_VIRTUEMART_COMMENT="Please write your recommendation....(min. %s, max. %s characters)" COM_VIRTUEMART_COMMENT_CART="Notes and special requests" COM_VIRTUEMART_COMMENT_MIN_MAX_JS="Please min. %s, max. %s characters" COM_VIRTUEMART_COMMENT_NOT_VALID_JS="Some Fields are invalid, please verify your inputs" COM_VIRTUEMART_CONF_WARN_NO_CURRENCY_DEFINED="No Shop Currency defined! Contact the administrator, if you are one go to %s" COM_VIRTUEMART_CONF_WARN_NO_FORMAT_DEFINED="Currency is not formatted! Contact the administrator, if you are one go to %s" COM_VIRTUEMART_CONTINUE_SHOPPING="Continue Shopping" COM_VIRTUEMART_COUPON_CODE_CHANGE="Change your Coupon code" COM_VIRTUEMART_COUPON_CODE_ENTER="Enter your Coupon code" COM_VIRTUEMART_COUPON_CODE_EXPIRED="This coupon is expired" COM_VIRTUEMART_COUPON_CODE_INVALID="Coupon code not found. Please try again." COM_VIRTUEMART_COUPON_CODE_NOTYET="Coupon is not yet active, it can be used after " COM_VIRTUEMART_COUPON_CODE_TOOLOW="This coupon is valid for an order with a minimum of" COM_VIRTUEMART_COUPON_DISCOUNT="Coupon Discount" COM_VIRTUEMART_COUPON_ENTER_HERE="If you have a coupon code, please enter it below:" COM_VIRTUEMART_CREATED_ON="Creation Date" COM_VIRTUEMART_CREDIT_CARD_INVALID_EXPIRE_DATE="Credit Card has expired" COM_VIRTUEMART_CREDIT_CARD_INVALID_FORMAT="Credit card number has in invalid format" COM_VIRTUEMART_CREDIT_CARD_INVALID_NUMBER="Credit card number is invalid" COM_VIRTUEMART_CREDIT_CARD_NO_NUMBER="No card number provided" COM_VIRTUEMART_CREDIT_CARD_UNKNOWN_TYPE="Unknown card type" COM_VIRTUEMART_CREDIT_CARD_WRONG_DIGIT="Credit card number has an inappropriate number of digits" COM_VIRTUEMART_CURRENCY="Currency" COM_VIRTUEMART_CUSTOMER_RATING="Average customer rating" COM_VIRTUEMART_DATE="Date" COM_VIRTUEMART_DATE_FORMAT_INPUT_JS="y.mm.dd" ; THis is not valid joomla 1.7 !!! COM_VIRTUEMART_DATE_FORMAT_LC="%A, %d %B %Y" ; Date joomla 1.5 >1.6 format changed %d is d now COM_VIRTUEMART_DATE_FORMAT_INPUT="%y.%m.%d" COM_VIRTUEMART_DATE_FORMAT_INPUT_J16="y.m.d" COM_VIRTUEMART_DEAR="Dear " COM_VIRTUEMART_DELIVERYNOTE="Delivery Note" COM_VIRTUEMART_DESC=" +/-" COM_VIRTUEMART_DESCRIPTION="Welcome to" COM_VIRTUEMART_DISABLED="Disabled" COM_VIRTUEMART_DISABLE_ITEM="Disable Item" COM_VIRTUEMART_DISPLAYED_NAME="Displayed name:" COM_VIRTUEMART_EMAIL="Email" COM_VIRTUEMART_EMPTY_CART="Cart empty" COM_VIRTUEMART_ENABLED="Enabled" COM_VIRTUEMART_ENABLE_ITEM="Enable item" COM_VIRTUEMART_ENTERED_ADDRESS="Entered address" COM_VIRTUEMART_ENTER_A_VALID_EMAIL_ADDRESS="Please enter a valid email address" COM_VIRTUEMART_FEATURED_PRODUCT="Featured Products" COM_VIRTUEMART_FEED_READMORE="Read more" COM_VIRTUEMART_FILES_FILE_DELETE_FAILURE="Could not delete the File." COM_VIRTUEMART_FILES_FILE_DELETE_SUCCESS="File successfully deleted." COM_VIRTUEMART_FREE_SHIPPING_AMOUNT="Minimum Amount for Free Shipment" COM_VIRTUEMART_HI="Hello" COM_VIRTUEMART_HINAME="Hello %s" COM_VIRTUEMART_HOME="Welcome to %1$s" COM_VIRTUEMART_I_AGREE_TO_TOS="I agree to the Terms of Service" COM_VIRTUEMART_LAST_UPDATED="Last Updated" COM_VIRTUEMART_LATEST_PRODUCT="Latest Products" COM_VIRTUEMART_LINK_ACTIVATE_ACCOUNT="Please use this link to activate your account" COM_VIRTUEMART_LIST_EMPTY_OPTION="-- Select --" COM_VIRTUEMART_LOGIN="Login" COM_VIRTUEMART_LOW_STOCK_NOTIFICATION="Stock" COM_VIRTUEMART_MAIL_FOOTER="Thank you for purchasing at " COM_VIRTUEMART_MAIL_NOT_SEND_SUCCESSFULLY="Mail not sent successfully" COM_VIRTUEMART_MAIL_ORDER_STATUS="Your order status is: %s" COM_VIRTUEMART_MAIL_SEND_SUCCESSFULLY="Mail sent successfully" COM_VIRTUEMART_MAIL_SHOPPER_CONTENT="your order password = %5$s" COM_VIRTUEMART_MAIL_SHOPPER_NAME="Hello %1$s," COM_VIRTUEMART_MAIL_SHOPPER_QUESTION="Your comment:
%1$s" COM_VIRTUEMART_MAIL_SHOPPER_SUMMARY="

Order confirmed

You bought and confirmed an order in %1$s shop online.

You can check the status of your order by going on your personal account

" COM_VIRTUEMART_MAIL_SHOPPER_TOTAL_ORDER="

Your order Total: %1$s

" COM_VIRTUEMART_MAIL_SHOPPER_YOUR_ORDER="Your order number: " COM_VIRTUEMART_MAIL_SHOPPER_YOUR_ORDER_LINK="view your order online" COM_VIRTUEMART_MAIL_SHOPPER_YOUR_PASSWORD="Your order password: " COM_VIRTUEMART_MAIL_SKU="SKU" COM_VIRTUEMART_MAIL_SUBJ_SHOPPER_C="[%3$s], Confirmed order at %1$s, total %2$s" COM_VIRTUEMART_MAIL_SUBJ_SHOPPER_P="[%3$s], Order is pending at %1$s, total %2$s" COM_VIRTUEMART_MAIL_SUBJ_SHOPPER_R="[%3$s], Refunded order by %1$s, total %2$s" COM_VIRTUEMART_MAIL_SUBJ_SHOPPER_S="[%3$s], Shipped order from %1$s, total %2$s" COM_VIRTUEMART_MAIL_SUBJ_SHOPPER_U="[%3$s], Order confirmed by %1$s, total %2$s" COM_VIRTUEMART_MAIL_SUBJ_SHOPPER_X="[%3$s], Cancelled order by %1$s, total %2$s" COM_VIRTUEMART_MAIL_SUBJ_VENDOR_C="[%3$s], Confirmed order by %1$s, total %2$s" COM_VIRTUEMART_MAIL_SUBJ_VENDOR_P="[%3$s], Pending order by %1$s, total %2$s" COM_VIRTUEMART_MAIL_SUBJ_VENDOR_R="[%3$s], Refunded order for %1$s, total %2$s" COM_VIRTUEMART_MAIL_SUBJ_VENDOR_S="[%3$s], Shipped order for %1$s, total %2$s" COM_VIRTUEMART_MAIL_SUBJ_VENDOR_U="[%3$s], Order confirmed by %1$s, total %2$s" COM_VIRTUEMART_MAIL_SUBJ_VENDOR_X="[%3$s], Cancelled order for %1$s, total %2$s" COM_VIRTUEMART_MAIL_VENDOR_CONTENT="Hello %1$s,
%2$s confirmed an order with a total of %3$s, his/her order number = %4$s" COM_VIRTUEMART_MAIL_VENDOR_SHOPPER_QUESTION="The shopper commented the order:
%1$s" COM_VIRTUEMART_MAIL_VENDOR_TITLE="Hello" COM_VIRTUEMART_MEDIA_ENLARGE="enlarge" COM_VIRTUEMART_MANUFACTURER_DETAILS="Manufacturer Details" COM_VIRTUEMART_MANUFACTURER_PAGE="Manufacturer Page" COM_VIRTUEMART_MF_NAME="Manufacturer name" COM_VIRTUEMART_MIGRATION_WARN_VM1_EXTENSIONS="Attention: You have still old vm extensions in your joomla installation active, uninstall or disable them" ;todo legacy will be removed COM_VIRTUEMART_MINICART_ERROR_JS="There was an error while updating your cart." COM_VIRTUEMART_MODIFIED_ON="modified" COM_VIRTUEMART_MORE_REVIEWS="More reviews" COM_VIRTUEMART_NEVER="-Never-" COM_VIRTUEMART_NEW_ORDER_CONFIRMED="[%3$s], Confirmed order by %1$s, total %2$s" COM_VIRTUEMART_NEW_SHOPPER="A new shopper %s registered" COM_VIRTUEMART_NEW_SHOPPER_SUBJECT="Your registration %s at %s" COM_VIRTUEMART_NEW_USER_MESSAGE_VENDOR_SUBJECT="A new user %1$s registered at your shop" COM_VIRTUEMART_NO="No" COM_VIRTUEMART_NONE="None" COM_VIRTUEMART_NOTIFY_CUSTOMER_ERR_SEND="Could not send a message to " COM_VIRTUEMART_NOTIFY_CUSTOMER_SEND_MSG="Message sent to" COM_VIRTUEMART_NOT_ABLE_TO_SAVE_USER_DATA="Was not able to save the VirtueMart user data" COM_VIRTUEMART_NO_IMAGE_FOUND="No image found" COM_VIRTUEMART_NO_IMAGE_SET="No image set" COM_VIRTUEMART_NO_MORE_ORDERS="No more Orders" COM_VIRTUEMART_NO_PAYMENT_METHODS_CONFIGURED="No payment method has been configurated %1$s" COM_VIRTUEMART_NO_PAYMENT_METHODS_CONFIGURED_LINK=", please visit %1$s" COM_VIRTUEMART_NO_PAYMENT_PLUGIN="The Payment method didn't find the used payment plugin" COM_VIRTUEMART_NO_RESULT="No result" COM_VIRTUEMART_NO_REVIEWS="There are yet no reviews for this product." COM_VIRTUEMART_NO_SHIPMENT_PLUGIN="The Shipment method didn't find the used shipment plugin" COM_VIRTUEMART_NO_SHIPPING_METHODS_CONFIGURED="No shipment method has been configurated %1$s" COM_VIRTUEMART_NO_SHIPPING_METHODS_CONFIGURED_LINK=", please visit %1$s" COM_VIRTUEMART_ONCHECKOUT_DEFAULT_TEXT_REGISTER="Please use %1$s to easily get access to your order history, or use %2$s" COM_VIRTUEMART_ORDERBY="Sort by" COM_VIRTUEMART_ORDERING="Ordering" COM_VIRTUEMART_ORDERS_VIEW_DEFAULT_DESC="List All Orders" COM_VIRTUEMART_ORDERS_VIEW_DEFAULT_TITLE="List Orders" COM_VIRTUEMART_ORDER_ANONYMOUS="Track My Order" COM_VIRTUEMART_ORDER_BUTTON_VIEW="See Order" COM_VIRTUEMART_ORDER_COMMENT="Comment" COM_VIRTUEMART_ORDER_CONFIRM_MNU="Confirm Purchase" COM_VIRTUEMART_ORDER_CONNECT_FORM="When you are already registered, please login directly here" COM_VIRTUEMART_ORDER_FORGOT_YOUR_PASSWORD="Forgot your password?" COM_VIRTUEMART_ORDER_FORGOT_YOUR_USERNAME="Forgot your username?" COM_VIRTUEMART_ORDER_NOTFOUND="Order not found! It may have been deleted." COM_VIRTUEMART_ORDER_PRINT_PRODUCT_PRICES_TOTAL="Product prices result" COM_VIRTUEMART_ORDER_PROCESSED="Your order has been processed." COM_VIRTUEMART_ORDER_REGISTER="Create an account" COM_VIRTUEMART_ORDER_REGISTER_GUEST_CHECKOUT="Checkout" COM_VIRTUEMART_PASSWORD="Password" COM_VIRTUEMART_PAYMENT_CANCELLED_BY_SHOPPER="Payment cancelled by the shopper" COM_VIRTUEMART_PAYMENT_INVOICE="Payment method is preventing VirtueMart to create an invoice." COM_VIRTUEMART_PAYMENT_USER_CANCEL="Payment cancelled by user" COM_VIRTUEMART_PDF="PDF" COM_VIRTUEMART_PDF_CREATOR="VirtueMart 2, using the TCPDF library" COM_VIRTUEMART_PDF_SAMPLEPAGE="

Invoice Header/Footer Sample Page

This page shows how the page header and footer of the VirtueMart invoices will look like.

" COM_VIRTUEMART_PKEY="Primary Keys" COM_VIRTUEMART_PLUGIN_COST_DISPLAY="Discount/Fee: " COM_VIRTUEMART_PRINT="Print" COM_VIRTUEMART_PRODUCT_ADDED_SUCCESSFULLY="Product successfully added" COM_VIRTUEMART_PRODUCT_ADD_PRODUCT="Add a product" COM_VIRTUEMART_PRODUCT_ASKPRICE="Call for price" COM_VIRTUEMART_PRODUCT_ASK_QUESTION="Ask a question" COM_VIRTUEMART_PRODUCT_AVAILABILITY="Product Availability" COM_VIRTUEMART_PRODUCT_AVAILABLE_DATE="Product Available Date" COM_VIRTUEMART_PRODUCT_BASEPRICE="Base price: " COM_VIRTUEMART_PRODUCT_BASEPRICE_VARIANT="Base price for variant: " COM_VIRTUEMART_PRODUCT_BASEPRICE_WITHTAX="Base price with tax: " COM_VIRTUEMART_PRODUCT_DESC="Product Description" COM_VIRTUEMART_PRODUCT_DESC_TITLE="Description" COM_VIRTUEMART_PRODUCT_DETAILS="Product details" COM_VIRTUEMART_PRODUCT_DETAILS_MANUFACTURER_LBL="Manufacturer: " COM_VIRTUEMART_PRODUCT_DETAILS_SHORT_DESC_LBL="Short description" COM_VIRTUEMART_PRODUCT_DETAILS_TITLE="Product details %1$s" COM_VIRTUEMART_PRODUCT_DETAILS_VENDOR_LBL="Vendor:" COM_VIRTUEMART_PRODUCT_DISCOUNTED_PRICE="Price with discount: " COM_VIRTUEMART_PRODUCT_DISCOUNT_AMOUNT="Discount: " COM_VIRTUEMART_PRODUCT_ENQUIRY_LBL="Ask a question about this product" COM_VIRTUEMART_PRODUCT_FORM_ALIAS="Product Alias" COM_VIRTUEMART_PRODUCT_FORM_CALCULATE_PRICE_FINAL_TIP="Check this to calculate the costprice with the desired final price" COM_VIRTUEMART_PRODUCT_FORM_CHILD_PARENT="Parent & Child Products" COM_VIRTUEMART_PRODUCT_FORM_CREATION_DATE="Creation Date" COM_VIRTUEMART_PRODUCT_FORM_EDIT_PRODUCT="Edit this product" COM_VIRTUEMART_PRODUCT_FORM_UNIT_DEFAULT="piece" COM_VIRTUEMART_PRODUCT_FORM_URL="URL" COM_VIRTUEMART_PRODUCT_FORM_VENDOR="Vendor Status" COM_VIRTUEMART_PRODUCT_FROM_MF="View all %s Products " COM_VIRTUEMART_PRODUCT_HEIGHT="Product Heigth" COM_VIRTUEMART_PRODUCT_ID="Product ID" COM_VIRTUEMART_PRODUCT_IN_STOCK="product in stock" COM_VIRTUEMART_PRODUCT_LENGTH="Product Length" COM_VIRTUEMART_PRODUCT_LOW_STOCK_EMAIL_BODY="The product %s has a stock of %d." COM_VIRTUEMART_PRODUCT_LOW_STOCK_EMAIL_SUBJECT="The product %s has a low stock" COM_VIRTUEMART_PRODUCT_LWH_UOM="Length/Weight/Height Unit of Measure" COM_VIRTUEMART_PRODUCT_NAME="Product Name" COM_VIRTUEMART_PRODUCT_NAME_TITLE="Product Name" COM_VIRTUEMART_PRODUCT_NOT_ADDED_SUCCESSFULLY="Product not successfully added" COM_VIRTUEMART_PRODUCT_NOT_FOUND="404 The requested product does not exist." COM_VIRTUEMART_PRODUCT_NOT_REMOVED_SUCCESSFULLY="Product not successfully removed" COM_VIRTUEMART_PRODUCT_NOT_UPDATED_SUCCESSFULLY="Product quantity not successfully updated" COM_VIRTUEMART_PRODUCT_ORDER_LEVELS="Product Order Levels" COM_VIRTUEMART_PRODUCT_PACKAGING1="Number {unit}s in packaging: " COM_VIRTUEMART_PRODUCT_PACKAGING2="Number {unit}s in box:" COM_VIRTUEMART_PRODUCT_PACKAGING="Product Packaging" COM_VIRTUEMART_PRODUCT_PRICE="Product Price" COM_VIRTUEMART_PRODUCT_RECOMMEND="Recommend to a friend" COM_VIRTUEMART_PRODUCT_REMOVED_SUCCESSFULLY="Product successfully removed" COM_VIRTUEMART_PRODUCT_SALES="Product Sales" COM_VIRTUEMART_PRODUCT_SALESPRICE="Sales price: " COM_VIRTUEMART_PRODUCT_SALESPRICE_WITHOUT_TAX="Sales price without tax: " COM_VIRTUEMART_PRODUCT_SALESPRICE_WITH_DISCOUNT="Salesprice with discount: " COM_VIRTUEMART_PRODUCT_SKU="Product SKU" COM_VIRTUEMART_PRODUCT_SPECIAL="Featured Product" COM_VIRTUEMART_PRODUCT_S_DESC="Product Short description" COM_VIRTUEMART_PRODUCT_TAX_AMOUNT="Tax amount: " COM_VIRTUEMART_PRODUCT_UNIT="Product Unit" COM_VIRTUEMART_PRODUCT_UNITPRICE="Price / %s: " COM_VIRTUEMART_PRODUCT_UNITS_IN_BOX="Units in box: " COM_VIRTUEMART_PRODUCT_UPDATED_SUCCESSFULLY="Product quantity successfully updated" COM_VIRTUEMART_PRODUCT_VARIANT_MOD="Variant price modifier: " COM_VIRTUEMART_PRODUCT_WEIGHT="Product Weight" COM_VIRTUEMART_PRODUCT_WEIGHT_UOM="Product Weight Measure" COM_VIRTUEMART_PRODUCT_WIDTH="Product Width" COM_VIRTUEMART_PUBLISHED="Published" COM_VIRTUEMART_PUBLISH_ITEM="Publish item" COM_VIRTUEMART_QUESTION_ABOUT="Question About " COM_VIRTUEMART_QUESTION_MAIL_FROM="A question was asked by %s (%s)" COM_VIRTUEMART_QUESTION_MAIL_PRODUCT="A question was asked about %s" COM_VIRTUEMART_RATING="Rating: " COM_VIRTUEMART_RATING_EMAIL_SUBJECT="New review for the product %s" COM_VIRTUEMART_RATING_EMAIL_BODY="A new review has been submitted for the product %s." COM_VIRTUEMART_RATING_FIRST_RATE="First: Rate the product. Please select a rating between 0 (poorest) and 5 stars (best)." COM_VIRTUEMART_RATING_NOT_SAVED_SUCCESSFULLY="Rating not saved" COM_VIRTUEMART_RATING_SAVED_SUCCESSFULLY="Rating saved" COM_VIRTUEMART_RATING_TITLE="Rating: " COM_VIRTUEMART_RECENT_PRODUCT="Recently Viewed Products" COM_VIRTUEMART_RECENT_PRODUCTS="Recently Viewed Products" COM_VIRTUEMART_RECOMMEND_COMMENT="Hi! I found this on %s and thought you might like it! Check it out now!" COM_VIRTUEMART_RECOMMEND_NAME="Your Name" COM_VIRTUEMART_RECOMMEND_EMAIL="Friend's Email" COM_VIRTUEMART_RECOMMEND_MAIL_BODY="%s recommend you %s out of our online shop" COM_VIRTUEMART_RECOMMEND_PRODUCT="%s recommends you: %s" COM_VIRTUEMART_RECOMMEND_SUBMIT="Send recommendation" COM_VIRTUEMART_RECOMMEND_THANK_YOU="Thank you for recommending the product." COM_VIRTUEMART_REGISTER="Register" COM_VIRTUEMART_REGISTER_ACCOUNT="Register an Account?
An Account allows you to come back to this shop and view all the orders you have made." COM_VIRTUEMART_REGISTER_AND_CHECKOUT="Register And Checkout" COM_VIRTUEMART_REGISTRATION_DATA="The Registration data" COM_VIRTUEMART_REG_COMPLETE="
Registration Complete!
" COM_VIRTUEMART_REG_COMPLETE_ACTIVATE="
Registration Completed!

Your account has been created and an activation link has been sent to the e-mail address you entered. Note that you must activate the account by clicking on the activation link when you get the e-mail before you can login." COM_VIRTUEMART_RELATED_CATEGORIES="Related Categories" COM_VIRTUEMART_RELATED_CATEGORIES_DESC=" " COM_VIRTUEMART_RELATED_PRODUCTS="Related Products" COM_VIRTUEMART_RELATED_PRODUCTS_DESC=" " COM_VIRTUEMART_RELATED_PRODUCTS_HEADING="You may also be interested in this/these product(s)" COM_VIRTUEMART_RESET="Reset" COM_VIRTUEMART_RESTRICTED_ACCESS="Restricted access!" COM_VIRTUEMART_REVIEW="Review" COM_VIRTUEMART_REVIEWS="Reviews" COM_VIRTUEMART_REVIEW_ALREADYDONE="You already have written a review for this product. Thank you." COM_VIRTUEMART_REVIEW_COMMENT="Now please write a (short) review....(min. %s, max. %s characters) " COM_VIRTUEMART_REVIEW_COUNT="Characters written: " COM_VIRTUEMART_REVIEW_ERR_COMMENT1_JS="Please write down some more words for your review. Minimum characters allowed: %s" COM_VIRTUEMART_REVIEW_ERR_COMMENT2_JS="Please shorten your review. Maximum characters allowed: %s" COM_VIRTUEMART_REVIEW_ERR_RATE="Please rate the product to complete your review" COM_VIRTUEMART_REVIEW_LOGIN="Please log in to write a review." COM_VIRTUEMART_REVIEW_RATE="Rate" COM_VIRTUEMART_REVIEW_STARS="Stars" COM_VIRTUEMART_REVIEW_SUBMIT="Submit Review" COM_VIRTUEMART_SAVE="Save" COM_VIRTUEMART_SEARCH="Search in shop" COM_VIRTUEMART_SEARCH_SELECT_ALL_MANUFACTURER="All Manufacturers" COM_VIRTUEMART_SEARCH_SELECT_MANUFACTURER="Select manufacturer" COM_VIRTUEMART_SET_PRODUCT_TYPE="Choose product type" COM_VIRTUEMART_SHIPMENT_NOT_VALID_FOR_THIS_VENDOR="%s not valid for %d
" COM_VIRTUEMART_SHOPPER_PAYMENT_FORM_LBL="Payment form" COM_VIRTUEMART_SHOPPER_REGISTRATION_DATA="Your Registration data" COM_VIRTUEMART_SHOPPER_SHIPMENT_FORM_LBL="Shipment form" COM_VIRTUEMART_SHOP_HOME="Shop home" COM_VIRTUEMART_SLUG="Sef Alias" COM_VIRTUEMART_STOCK_LEVEL_DISPLAY_LOW_TIP="We are getting low on stock for this item" COM_VIRTUEMART_STOCK_LEVEL_DISPLAY_NORMAL_TIP="We have plenty of stock for this product" COM_VIRTUEMART_STOCK_LEVEL_DISPLAY_OUT_TIP="Sorry, we currently have no stock for this item" COM_VIRTUEMART_STOCK_LEVEL_DISPLAY_TITLE_TIP="Current Stock Level" COM_VIRTUEMART_STORE_CURRENCY_DISPLAY="Currency" COM_VIRTUEMART_STORE_FORM_ACCEPTED_CURRENCIES="List of accepted currencies" COM_VIRTUEMART_STORE_FORM_COMPANY_NAME="Shop Company Name" COM_VIRTUEMART_STORE_FORM_CURRENCY="Currency" COM_VIRTUEMART_STORE_FORM_DESCRIPTION="Description" COM_VIRTUEMART_STORE_FORM_LEGAL="Legal Information" COM_VIRTUEMART_STORE_FORM_MPOV="Minimum purchase order value for your shop" COM_VIRTUEMART_STORE_FORM_STORE_NAME="Shop Name" COM_VIRTUEMART_STORE_FORM_TOS="Terms of Service" COM_VIRTUEMART_STRING_CANCELLED="%s record cancelled." COM_VIRTUEMART_STRING_COULD_NOT_BE_DELETED="%s could not be deleted." COM_VIRTUEMART_STRING_DELETED="%s successfully deleted." COM_VIRTUEMART_STRING_DELETED_ERROR="Error: The %s could not be deleted." COM_VIRTUEMART_STRING_ERROR_NOT_UNIQUE_NAME="The given %s already exists." COM_VIRTUEMART_STRING_ERROR_OBLIGATORY_KEY="%1$s in record is missing ! Can't save the record with no %1$s." COM_VIRTUEMART_STRING_ERROR_PRIMARY_KEY="Error with the primary key" COM_VIRTUEMART_STRING_FORBIDDEN_FOR_NON_VENDORS="%s function forbidden for non vendors" COM_VIRTUEMART_STRING_PUBLISHED_ERROR="Error: The %s could not be published." COM_VIRTUEMART_STRING_PUBLISHED_SUCCESS="%s successfully published." COM_VIRTUEMART_STRING_SAVED="%s successfully saved" COM_VIRTUEMART_STRING_SAVED_ERROR="Error: %s could not be saved " COM_VIRTUEMART_STRING_SAVED_SUCCESS="%s successfully saved" COM_VIRTUEMART_STRING_TOGGLE_ERROR="Error: The %s state could not be updated." COM_VIRTUEMART_STRING_TOGGLE_SUCCESS="%s state successfully updated." COM_VIRTUEMART_STRING_UNPUBLISHED_ERROR="Error: The %s could not be unpublished." COM_VIRTUEMART_STRING_UNPUBLISHED_SUCCESS="%s successfully unpublished." COM_VIRTUEMART_SUBCATEGORIES="Subcategories" COM_VIRTUEMART_TITLE_TOO_LONG="Title too long %s for database field, allowed 126" COM_VIRTUEMART_TOPTEN_PRODUCT="Top ten Products" COM_VIRTUEMART_TOTAL_VOTES="Total votes" COM_VIRTUEMART_UNIT_NAME_100MG="100 milligrams" COM_VIRTUEMART_UNIT_NAME_100ML="100 milliliters" COM_VIRTUEMART_UNIT_NAME_CM="Centimetres" COM_VIRTUEMART_UNIT_NAME_CUBM="Cubic meters" COM_VIRTUEMART_UNIT_NAME_FOOT="Foot" COM_VIRTUEMART_UNIT_NAME_G="Gramme" COM_VIRTUEMART_UNIT_NAME_INCH="Inches" COM_VIRTUEMART_UNIT_NAME_KG="Kilogramme" COM_VIRTUEMART_UNIT_NAME_L="Liter" COM_VIRTUEMART_UNIT_NAME_LB="Pounds" COM_VIRTUEMART_UNIT_NAME_M="Metres" COM_VIRTUEMART_UNIT_NAME_MG="Milligramme" COM_VIRTUEMART_UNIT_NAME_MM="Millimetres" COM_VIRTUEMART_UNIT_NAME_ONCE="Ounce" COM_VIRTUEMART_UNIT_NAME_SM="Square meters" COM_VIRTUEMART_UNIT_NAME_YARD="Yards" COM_VIRTUEMART_UNIT_SYMBOL_100G="100 g" COM_VIRTUEMART_UNIT_SYMBOL_100ML="100 ml" COM_VIRTUEMART_UNIT_SYMBOL_CM="cm" COM_VIRTUEMART_UNIT_SYMBOL_CUBM="m³" COM_VIRTUEMART_UNIT_SYMBOL_FOOT="ft" COM_VIRTUEMART_UNIT_SYMBOL_G="g" COM_VIRTUEMART_UNIT_SYMBOL_INCH="in" COM_VIRTUEMART_UNIT_SYMBOL_KG="kg" COM_VIRTUEMART_UNIT_SYMBOL_L="l" COM_VIRTUEMART_UNIT_SYMBOL_LB="lb" COM_VIRTUEMART_UNIT_SYMBOL_M="m" COM_VIRTUEMART_UNIT_SYMBOL_MG="mg" COM_VIRTUEMART_UNIT_SYMBOL_MM="mm" COM_VIRTUEMART_UNIT_SYMBOL_OUNCE="oz" COM_VIRTUEMART_UNIT_SYMBOL_SM="m²" COM_VIRTUEMART_UNIT_SYMBOL_YARD="yd" COM_VIRTUEMART_UNPUBLISHED="Unpublished" COM_VIRTUEMART_UNPUBLISH_ITEM="Unpublish Item" COM_VIRTUEMART_UNRATED="Not Rated Yet" COM_VIRTUEMART_UPDATE="Update" COM_VIRTUEMART_URL="URL" COM_VIRTUEMART_URL_NOT_VALID="Url is not valid" COM_VIRTUEMART_URL_TOO_LONG="Url too long %s for database field, allowed 254" COM_VIRTUEMART_USERNAME="Username" COM_VIRTUEMART_USER_CART_INFO_CREATE_ACCOUNT="Fill in those fields to create an account" COM_VIRTUEMART_USER_DATA_STORED="User data stored" COM_VIRTUEMART_USER_DELETE_ST="Delete address" COM_VIRTUEMART_USER_DISPLAYED_NAME="Displayed Name" COM_VIRTUEMART_USER_FORM_ADDRESS_LABEL="Address Nickname" COM_VIRTUEMART_USER_FORM_ADD_SHIPTO_LBL="Add/Edit shipment address" ;the next one is special, we need it also in the cart, therefore atm in main file COM_VIRTUEMART_USER_FORM_BILLTO_LBL="Bill To" COM_VIRTUEMART_USER_FORM_BILLTO_TOS_NO="Please agree to the Terms of Service" COM_VIRTUEMART_USER_FORM_BILLTO_TOS_YES="You agreed to the Terms of Service" COM_VIRTUEMART_USER_FORM_CART_STEP1="Checkout Step 1" COM_VIRTUEMART_USER_FORM_CART_STEP2="Checkout Step 2" COM_VIRTUEMART_USER_FORM_CART_STEP3="Checkout Step 3" COM_VIRTUEMART_USER_FORM_CART_STEP4="Checkout Step 4" COM_VIRTUEMART_USER_FORM_CAPTCHA="If you wish to register an account please complete this additional security panel" COM_VIRTUEMART_USER_FORM_EDIT_BILLTO_EXPLAIN="Only in case shipment address is different from billing address,
click »%s« button below" COM_VIRTUEMART_USER_FORM_EDIT_BILLTO_LBL="Add/Edit billing address information" COM_VIRTUEMART_USER_FORM_EMAIL="E-Mail" COM_VIRTUEMART_USER_FORM_MISSING_REQUIRED_JS="Required field is missing" COM_VIRTUEMART_USER_FORM_NAME="Name" COM_VIRTUEMART_USER_FORM_NEWPASSWORD="New Password" COM_VIRTUEMART_USER_FORM_RECEIVESYSTEMEMAILS="Receive System Emails" COM_VIRTUEMART_USER_FORM_REGISTERDATE="Register date" COM_VIRTUEMART_USER_FORM_SHIPTO_LBL="Ship To" COM_VIRTUEMART_USER_FORM_ST_SAME_AS_BT="Use for the shipto same as billto address" COM_VIRTUEMART_USER_FORM_VERIFYPASSWORD="Verify Password" COM_VIRTUEMART_USER_NOSHIPPINGADDR="No shipment addresses." COM_VIRTUEMART_USER_NOT_A_VENDOR="You are not a vendor" COM_VIRTUEMART_USER_STORE_ERROR="Could not store user %s" COM_VIRTUEMART_VENDOR="Vendor" COM_VIRTUEMART_VENDOR_ASK_QUESTION="You may use this form to contact the shop owner directly from here" COM_VIRTUEMART_VENDOR_CONTACT="Contact" COM_VIRTUEMART_VENDOR_DATA_STORED="Vendor data stored" COM_VIRTUEMART_VENDOR_DETAILS="About" COM_VIRTUEMART_VENDOR_FORM_INFO_LBL="Vendor Information" COM_VIRTUEMART_VENDOR_FORM_MEDIA="Image & Thumb" COM_VIRTUEMART_VENDOR_ID="Vendor ID" COM_VIRTUEMART_VENDOR_LIST="Vendors" COM_VIRTUEMART_VENDOR_MOD="Vendor" COM_VIRTUEMART_VENDOR_NAME="Vendor name" COM_VIRTUEMART_VENDOR_NEW_SHOPPER_SUBJECT="A new shopper %s registered at your shop %s" COM_VIRTUEMART_VENDOR_REGISTRATION_DATA="The new shopper registration data" COM_VIRTUEMART_VENDOR_TOS="Terms of Services " COM_VIRTUEMART_VIRTUEMART_PRODUCT_ID="Product id" COM_VIRTUEMART_WELCOME_USER="Welcome %s" COM_VIRTUEMART_WELCOME_VENDOR="Hi vendor %s" COM_VIRTUEMART_WRITABLE="Writeable" COM_VIRTUEMART_WRITE_FIRST_REVIEW="Be the first to write a review..." COM_VIRTUEMART_WRITE_REVIEW="Submit Review" COM_VIRTUEMART_WRONG_AMOUNT_ADDED="You can buy this product only in multiples of %s pieces!" COM_VIRTUEMART_YES="Yes" COM_VIRTUEMART_YOUR_ACCOUNT_DETAILS="Your account details" COM_VIRTUEMART_YOUR_ACCOUNT_REG="Register" COM_VIRTUEMART_YOUR_ADDRESS="Your entered address: " COM_VIRTUEMART_YOUR_DISPLAYED_NAME="your displayed name: " COM_VIRTUEMART_YOUR_LOGINAME="Your Login Name: " COM_VIRTUEMART_YOUR_ORDERS="Your Orders" COM_VIRTUEMART_YOUR_PASSWORD="your password: " ;COM_VIRTUEMART_CART_TOS_LINK_TEXT="Show me the terms of service"language/en-GB/en-GB.com_virtuemart_orders.ini000066600000010720151373621660015243 0ustar00; Virtuemart! Project ; for translation in the orders ; Copyright (C) 2011 Virtuemart Team. All rights reserved. ; License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 - No BOM ; This file will be cleared for vm2.1 version, this needs changes in the layout, so we do not change it now COM_VIRTUEMART_ACC_ORDER_INFO="Order Information" COM_VIRTUEMART_DELIVERY_DATE="Delivery Date" COM_VIRTUEMART_DELDATE_INV="Same as invoice date" COM_VIRTUEMART_INVOICE="Invoice" COM_VIRTUEMART_INVOICE_CREATOR="Invoice by VirtueMart 2" COM_VIRTUEMART_INVOICE_DATE="Invoice date" COM_VIRTUEMART_INVOICE_SUBJ="Invoice Nr. %2$s (Order %3$s), %1$s" COM_VIRTUEMART_INVOICE_TITLE="Invoice Nr. %2$s (Order %3$s), %1$s" COM_VIRTUEMART_ORDER_CDATE="Order Date" COM_VIRTUEMART_ORDER_HISTORY="Order History" COM_VIRTUEMART_ORDER_HISTORY_COMMENT="Comment" COM_VIRTUEMART_ORDER_HISTORY_COMMENT_EMAIL="Comments on your Order : " COM_VIRTUEMART_ORDER_HISTORY_CUSTOMER_NOTIFIED="Shopper Notified?" COM_VIRTUEMART_ORDER_HISTORY_DATE_ADDED="Date Added" COM_VIRTUEMART_ORDER_HISTORY_INCLUDE_COMMENT="Include this Comment?" COM_VIRTUEMART_ORDER_ID="Order id" COM_VIRTUEMART_ORDER_INFO="Your Order Informations" COM_VIRTUEMART_ORDER_ITEM="Order Items" COM_VIRTUEMART_ORDER_LIST_CDATE="Order Date" COM_VIRTUEMART_ORDER_LIST_LBL="Order List" COM_VIRTUEMART_ORDER_LIST_MDATE="Last Modified" COM_VIRTUEMART_ORDER_LIST_ORDER_NUMBER="Order Number" COM_VIRTUEMART_ORDER_LIST_STATUS="Order Status" COM_VIRTUEMART_ORDER_LIST_TOTAL="Total" COM_VIRTUEMART_ORDER_NUMBER="Order Number" COM_VIRTUEMART_ORDER_PASS="Secret key (P_xxxxx)" COM_VIRTUEMART_ORDER_PRINT_BILL_TO_LBL="Bill To" COM_VIRTUEMART_ORDER_PRINT_CUSTOMER_NOTE="Shopper's note" COM_VIRTUEMART_ORDER_PRINT_CUST_INFO_LBL="Shopper Information" COM_VIRTUEMART_ORDER_PRINT_INV_NUMBER="Invoice Number" COM_VIRTUEMART_ORDER_PRINT_ITEM_STATUS="Status of ordered products" COM_VIRTUEMART_ORDER_PRINT_NAME="Name" COM_VIRTUEMART_ORDER_PRINT_PAYMENT="Payment Fee" COM_VIRTUEMART_ORDER_PRINT_PAYMENT_LBL="Payment Method" COM_VIRTUEMART_ORDER_PRINT_PAYMENT_SHIPMENT="Payment & Shipment" COM_VIRTUEMART_ORDER_PRINT_PAYMENT_TAX="Payment Tax" COM_VIRTUEMART_ORDER_PRINT_PO_DATE="Order Date" COM_VIRTUEMART_ORDER_PRINT_PO_IPADDRESS="IP Address" COM_VIRTUEMART_ORDER_PRINT_PO_LBL="Purchase Order" COM_VIRTUEMART_ORDER_PRINT_PO_NUMBER="Order Number" COM_VIRTUEMART_ORDER_PRINT_PO_PASS="Secret Key" COM_VIRTUEMART_ORDER_PRINT_PO_STATUS="Order Status" COM_VIRTUEMART_ORDER_PRINT_PRICE="Price" COM_VIRTUEMART_ORDER_PRINT_PRODUCT_STATUS="Product status" COM_VIRTUEMART_ORDER_PRINT_PRODUCT_TAX="Tax" COM_VIRTUEMART_ORDER_PRINT_QTY="Qty" COM_VIRTUEMART_ORDER_PRINT_QUANTITY="Quantity" COM_VIRTUEMART_ORDER_PRINT_SHIPMENT_LBL="Shipment" COM_VIRTUEMART_ORDER_PRINT_SHIPPING="Shipment Fee" COM_VIRTUEMART_ORDER_PRINT_SHIPPING_LBL="Shipment Information" COM_VIRTUEMART_ORDER_PRINT_SHIPPING_MODE_LBL="Shipment Mode" COM_VIRTUEMART_ORDER_PRINT_SHIPPING_PRICE_LBL="Shipment Price" COM_VIRTUEMART_ORDER_PRINT_SHIPPING_TAX="Shipment Tax" COM_VIRTUEMART_ORDER_PRINT_SHIP_TO_LBL="Ship To" COM_VIRTUEMART_ORDER_PRINT_SKU="SKU" COM_VIRTUEMART_ORDER_PRINT_SUBTOTAL="SubTotal" COM_VIRTUEMART_ORDER_PRINT_SUBTOTAL_DISCOUNT_AMOUNT="Discount" COM_VIRTUEMART_ORDER_PRINT_TAX="Tax" COM_VIRTUEMART_ORDER_PRINT_TOTAL="Total" COM_VIRTUEMART_ORDER_PRINT_TOTAL_PAYMENT="Total in Payment Currency" COM_VIRTUEMART_ORDER_PRINT_TOTAL_TAX="Tax Total" COM_VIRTUEMART_ORDER_STATUS_CANCELLED="Cancelled" COM_VIRTUEMART_ORDER_STATUS_CONFIRMED="Confirmed" COM_VIRTUEMART_ORDER_STATUS_CONFIRMED_BY_SHOPPER="Confirmed by shopper" COM_VIRTUEMART_ORDER_STATUS_NAME="Order Status Name" COM_VIRTUEMART_ORDER_STATUS_PENDING="Pending" COM_VIRTUEMART_ORDER_STATUS_REFUNDED="Refunded" COM_VIRTUEMART_ORDER_STATUS_SHIPPED="Shipped" COM_VIRTUEMART_ORDER_STATUS_STOCK_AVAILABLE="Is available" COM_VIRTUEMART_ORDER_STATUS_STOCK_HANDLE="Stock handling" COM_VIRTUEMART_ORDER_STATUS_STOCK_HANDLE_TIP="Choose the movement of stock to make when changing order status.
Reserved Stocks are deducted from the Stock to sale, but are in Stock" COM_VIRTUEMART_ORDER_STATUS_STOCK_OUT="is removed" COM_VIRTUEMART_ORDER_STATUS_STOCK_RESERVED="Is reserved" COM_VIRTUEMART_ORDER_UPDATED_SUCCESSFULLY="%1$s order(s) have been updated" COM_VIRTUEMART_ORDER_UPDATE_LINESTATUS="Update status for all lines?" COM_VIRTUEMART_ORDER_UPDATE_STATUS="Update Status" COM_VIRTUEMART_ORDER_USER_CURRENCY_RATE="Currency rate" COM_VIRTUEMART_ORDER_VIEW_ORDER="View your order" language/en-GB/en-GB.com_virtuemart.sef.ini000066600000005200151373621660014436 0ustar00; This file is for SEF router Auto Translating only ; Always use the same formating TO prevent false route : ; No Numbers as first character ; No Uppercase First character !!!! ; Valid chars are A-Z a-z 0-9 and _ (underscore) ; don't use same name as your own categories and product in all language ; No foreign Language strings(chinese , arabic...) ; then you have a nice SEF translator ! COM_VIRTUEMART_SEF_ASKQUESTION="ask_a_question" COM_VIRTUEMART_SEF_BY="by" COM_VIRTUEMART_SEF_CART="cart" COM_VIRTUEMART_SEF_CATEGORY_DESCRIPTION="category_description" COM_VIRTUEMART_SEF_CATEGORY_NAME="category_name" COM_VIRTUEMART_SEF_CHECKOUT="check" COM_VIRTUEMART_SEF_CONFIRM="confirm" COM_VIRTUEMART_SEF_CONTACT="contact" COM_VIRTUEMART_SEF_CREATED_ON="creation_date" COM_VIRTUEMART_SEF_DETAILS="details" COM_VIRTUEMART_SEF_EDITADDRESSCARTBT="bill_address" COM_VIRTUEMART_SEF_EDITADDRESSCARTST="shipping_address" COM_VIRTUEMART_SEF_EDITPAYMENT="edit_payment" COM_VIRTUEMART_SEF_EDIT_SHIPMENT="edit_shipment" COM_VIRTUEMART_SEF_INTNOTES="intnotes" COM_VIRTUEMART_SEF_LIST="list" COM_VIRTUEMART_SEF_LOW_STOCK_NOTIFICATION="low_stock_notification" COM_VIRTUEMART_SEF_MANUFACTURER="manufacturer" COM_VIRTUEMART_SEF_MANUFACTURERS="manufacturers" COM_VIRTUEMART_SEF_MDATE="modified_date" COM_VIRTUEMART_SEF_METAAUTHOR="meta_author" COM_VIRTUEMART_SEF_METADESC="meta_description" COM_VIRTUEMART_SEF_METAKEY="meta_key" COM_VIRTUEMART_SEF_METAROBOT="meta_robot" COM_VIRTUEMART_SEF_MF_NAME="manufacturer_name" COM_VIRTUEMART_SEF_ORDERDESC="order_desc" COM_VIRTUEMART_SEF_ORDERING="ordering" COM_VIRTUEMART_SEF_ORDERS="orders" COM_VIRTUEMART_SEF_PAGE="page" COM_VIRTUEMART_SEF_PRODUCT_AVAILABILITY="availability" COM_VIRTUEMART_SEF_PRODUCT_AVAILABLE_DATE="available_date" COM_VIRTUEMART_SEF_PRODUCT_DESC="description" COM_VIRTUEMART_SEF_PRODUCT_HEIGHT="height" COM_VIRTUEMART_SEF_PRODUCT_ID="id" COM_VIRTUEMART_SEF_PRODUCT_IN_STOCK="stock_level" COM_VIRTUEMART_SEF_PRODUCT_LENGTH="lenght" COM_VIRTUEMART_SEF_PRODUCT_LWH_UOM="lwh_unit" COM_VIRTUEMART_SEF_PRODUCT_NAME="name" COM_VIRTUEMART_SEF_PRODUCT_ORDER_LEVELS="order_levels" COM_VIRTUEMART_SEF_PRODUCT_PACKAGING="packaging" COM_VIRTUEMART_SEF_PRODUCT_PRICE="price" COM_VIRTUEMART_SEF_PRODUCT_SALES="sales" COM_VIRTUEMART_SEF_PRODUCT_SKU="sku" COM_VIRTUEMART_SEF_PRODUCT_SPECIAL="product_special" COM_VIRTUEMART_SEF_PRODUCT_S_DESC="short_desc" COM_VIRTUEMART_SEF_PRODUCT_UNIT="unit" COM_VIRTUEMART_SEF_PRODUCT_WEIGHT="weight" COM_VIRTUEMART_SEF_PRODUCT_WEIGHT_UOM="weight_unit" COM_VIRTUEMART_SEF_PRODUCT_WIDTH="width" COM_VIRTUEMART_SEF_SEARCH="search" COM_VIRTUEMART_SEF_TOS="tos" COM_VIRTUEMART_SEF_USER="user" COM_VIRTUEMART_SEF_VENDOR="vendor" language/en-GB/.htaccess000066600000000177151373621660011040 0ustar00 Order allow,deny Deny from all language/en-GB/index.html000066600000000037151373621660011232 0ustar00 language/en-GB/en-GB.com_virtuemart_shoppers.ini000066600000007447151373621660015624 0ustar00; Virtuemart! Project ; for translation of the shopperfields ; Copyright (C) 2011 Virtuemart Team. All rights reserved. ; License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 - No BOM COM_VIRTUEMART_BUTTON_SEND_REG="Send Registration" COM_VIRTUEMART_ORDER_PRINT_CUST_INFO_LBL="Shopper Information" ;for vm2.1 email is used more than once COM_VIRTUEMART_MISSING_VALUE_FOR_FIELD="Missing value for %s" COM_VIRTUEMART_REGISTER_EMAIL="E-Mail" COM_VIRTUEMART_SHOPPER_FORM_ADDRESS_1="Address 1" COM_VIRTUEMART_SHOPPER_FORM_ADDRESS_2="Address 2" COM_VIRTUEMART_SHOPPER_FORM_ADDRESS_INFO_LBL="Information" COM_VIRTUEMART_SHOPPER_FORM_ADDRESS_LABEL="Address Nickname" COM_VIRTUEMART_SHOPPER_FORM_BIRTHDAY="Date of birth" COM_VIRTUEMART_SHOPPER_FORM_CITY="City" COM_VIRTUEMART_SHOPPER_FORM_COMPANY_NAME="Company Name" COM_VIRTUEMART_SHOPPER_FORM_COUNTRY="Country" COM_VIRTUEMART_SHOPPER_FORM_EMAIL="Email" COM_VIRTUEMART_SHOPPER_FORM_EU_VATID="VAT Number(European Union Countries only)" COM_VIRTUEMART_SHOPPER_FORM_FAX="Fax" COM_VIRTUEMART_SHOPPER_FORM_FIRST_NAME="First Name" COM_VIRTUEMART_SHOPPER_FORM_GROUP="Shopper Group" COM_VIRTUEMART_SHOPPER_FORM_GROUP_PRICE_TIP="Select a shopper group, if this price is specific to a shopper group. If no shopper group is selected, the price is the same for all shopper groups." COM_VIRTUEMART_SHOPPER_FORM_GROUP_PRODUCT_TIP="If one or more shopper group(s) is/are selected, the product will be displayed only to those shopper groups. If no shopper group is selected, the product is displayed to all shopper group." COM_VIRTUEMART_SHOPPER_FORM_HOUSE_EXTENSION="Building Name" COM_VIRTUEMART_SHOPPER_FORM_HOUSE_NO="House Number" COM_VIRTUEMART_SHOPPER_FORM_LAST_NAME="Last Name" COM_VIRTUEMART_SHOPPER_FORM_LBL="Additional Information" COM_VIRTUEMART_SHOPPER_FORM_LBL="Shopper Information" COM_VIRTUEMART_SHOPPER_FORM_MIDDLE_NAME="Middle Name" COM_VIRTUEMART_SHOPPER_FORM_PASSWORD_1="Password" COM_VIRTUEMART_SHOPPER_FORM_PASSWORD_2="Confirm Password" COM_VIRTUEMART_SHOPPER_FORM_PHONE2="Mobile phone" COM_VIRTUEMART_SHOPPER_FORM_PHONE="Phone" COM_VIRTUEMART_SHOPPER_FORM_SHIPTO_LBL="Shipment Information" COM_VIRTUEMART_SHOPPER_FORM_SOCIALNUMBER="Social Security Number" COM_VIRTUEMART_SHOPPER_FORM_STATE="State / Province / Region" COM_VIRTUEMART_SHOPPER_FORM_TAXEXEMPTION_NBR="Tax Exemption Number" COM_VIRTUEMART_SHOPPER_FORM_TAX_USAGE="Tax Usage Type" COM_VIRTUEMART_SHOPPER_FORM_TITLE="Title" COM_VIRTUEMART_SHOPPER_FORM_USERNAME="User Name" COM_VIRTUEMART_SHOPPER_FORM_ZIP="Zip / Postal Code" COM_VIRTUEMART_SHOPPER_TITLE_MISS="Miss" COM_VIRTUEMART_SHOPPER_TITLE_MR="Mr" COM_VIRTUEMART_SHOPPER_TITLE_MRS="Mrs" COM_VIRTUEMART_USERFIELDS_FORM_LBL="Additional Informations" COM_VIRTUEMART_USER_FORM_ADDRESS_LABEL="Address Nickname" COM_VIRTUEMART_USER_FORM_BLOCKUSER="Block User" COM_VIRTUEMART_USER_FORM_CONTACTDETAILS_NAME="Name" COM_VIRTUEMART_USER_FORM_CONTACTDETAILS_POSITION="Position" COM_VIRTUEMART_USER_FORM_CONTACTDETAILS_TELEPHONE="Telephone" COM_VIRTUEMART_USER_FORM_CUSTOMER_NUMBER="Shopper Number / ID" COM_VIRTUEMART_USER_FORM_LASTVISITDATE="Last Visit Date" COM_VIRTUEMART_USER_FORM_LASTVISIT_NEVER="Never" COM_VIRTUEMART_USER_FORM_LEGEND_CONTACTINFO="Contact Information" COM_VIRTUEMART_USER_FORM_LEGEND_PARAMETERS="Parameters" COM_VIRTUEMART_USER_FORM_LEGEND_PARAMETERS="Parameters" COM_VIRTUEMART_USER_FORM_LEGEND_USERDETAILS="User Details" COM_VIRTUEMART_USER_FORM_LEGEND_USERDETAILS="User Details" COM_VIRTUEMART_USER_FORM_NOCONTACTDETAILS_1="No Contact details linked to this User" COM_VIRTUEMART_USER_FORM_NOCONTACTDETAILS_2="See Components -> Contact -> Manage Contacts for details." COM_VIRTUEMART_USER_FORM_PERMS="User Permissions" COM_VIRTUEMART_USER_FORM_TAB_GENERALINFO="General User Information" COM_VIRTUEMART_USER_GROUP="User Group"language/index.html000066600000000037151373621660010342 0ustar00 language/.htaccess000066600000000177151373621660010150 0ustar00 Order allow,deny Deny from all assets/.htaccess000066600000000177151373621660007667 0ustar00 Order allow,deny Deny from all assets/images/fancybox/fancy_title_main.png000066600000000140151373621660015150 0ustar00PNG  IHDR yڑ'IDATc``g`en&Le`b`pg`WVYSIENDB`assets/images/fancybox/index.html000066600000000000151373621660013125 0ustar00assets/images/fancybox/.htaccess000066600000000177151373621660012745 0ustar00 Order allow,deny Deny from all assets/images/fancybox/fancy_shadow_e.png000066600000000153151373621660014620 0ustar00PNG  IHDRޒ%2IDATc```7H?x g# IENDB`assets/images/fancybox/fancy_close.png000066600000002755151373621660014146 0ustar00PNG  IHDR;0IDATHǝWkLWRr[B\ 2&!$&%BLgd&K%&Lp3 # b%Q(-螷yG+>o|!///##Cw^^lkk w͑ Ϻ[~HI(mIIIN\v-E_WWի̌pB4~?D:+HV$#\~p]ӧOX։7fō;wFGGlkSr BvݼyR'O8/_Ҵj6e4V|Qȧc bZ+<1nSGGl6f}Z%v.o,u2tm{ll쪔Pd]=X<9ꔔ]kkkn_"~\._ٌT^ti] -j1d9\ =}$ʯNB*FOOl ?`.PŹ{Id29k77XѬX\c+65::-l%`# wuuY Ip_SSӺ0o3(:oxOv"xXvFɅ7b)=fbUs.$$$c: aHCqqq z)nkbrȹHlÇDkhh NXGANWv JK ɷ*&%̙3i3Avӗ@1<{rO1'ڬMC}~ȐZr߳M]I rKcccKrGT\ڼ.*3Q + q9ɹrjPV}[VIrlX5#m 29T4y;4Ν0Vmi˔֩\;|vvR^^n]H_#lp|t|ע.79 DԔE(t(\jp,]:#c:;;x/<. PS"5-@ה]|vU=N;-^:xϟm<**jv1Me[^>n=aQ6~-@Ls'X6ucVf\hjn^9; |T ;2mlz~E(BH,;I&x.eCYW>_"(؈(A)YO^P*fq-miIENDB`assets/images/fancybox/fancy_shadow_w.png000066600000000147151373621660014645 0ustar00PNG  IHDRޒ%.IDATc?H1)f L e3C1;s@@ |yc:IENDB`assets/images/fancybox/fancy_nav_right.png000066600000002656151373621660015022 0ustar00PNG  IHDR;0uIDATHǥWmHW1Dk̚1WUJ jH-'LA\6۟Q7'`nB2P5ƤsyEĤ ɽs{_}pqTIBBN655;;;Mwd#~hmmm1 CIKK,))zj~@cxu&@4s)dggo޼6,//߰Zc/ǫ } Hˣ e111AgΜ}Ŗvϟi5JRA\)RqQQnpp>OX `pj6_,=JP(QفT999$wڢ7o|MX=}~(6mZb'Qd{ڵMAF$n}!!!c_m@WW8>p4XK$~rqVVι`4k޽{߀=8Ă_(>677wttXݑ"rAIBvϞ= D W+/_`5LO8==0%%(/]o V{>-zphh>//잂[qGVƣ/# Pަ]|K2yZHKΝ;7r `zQ2y>'N0 CJ;)bʇ[VfffVʊW;M+'8ܿL﫫e2G %,H`%]*uT`H)/p:ӰgggGȰ6|Y j'[㑑#|`Wp9 8,J pq *c[Ʀ+ª* p႙KZtsfTKH!Ra< ӹTΒQLF>6-..6[,y\2Et*: oQ)KAAݾS m4DB=p8{!},ѥr ^}ON *Y>)5`@)q1+⮋@v2` qf}{{333S/]SxOrU5:4x'O~ʕ8F{z&1۫ϮF(?._u H$w6F2kh/xDv (wmxAxur)$$I.mw}뮻կ~Uqg9Z_oH{WZzi[~WLJ+|=|玾;vw '׿>?{9猽v1kK3 ti3%MiDM~_}]wodɒ[?z|Ӗ/_oqG@ysk~,[9vaѣG䳲֙M̜9tslanᆍ /8)?(m{|a_|q_|5t|gXKnNi8`n\>qzrC5eee ^>qRYY>;q e˖}JY $E1VUU?Q_a:9/8]O>I&5Ÿy$t7UĘ@X"tu] aRg>Y]܈{.sw9\pdONΐ-o8^ǡS~/Š,A<_`!8`D/0c>XYoq#]tQd)CećkXW邓Ei>+%l 0?˧Ug5t{TBLc["b}>f>'lf^U-H':sC|9s Z~~;i,S/| =O &ԉq؇݆ki{I=Fnn~Ӽ%AL9` ɵ~8X,tMeShOa2a8ҏƚ dK,w:Y>M²A6>v'x үgz3ffZd&T|t5ރ8F/,$MNQrY&7Zߖsgy#;}xK5q_~32 aTvnH]*s"Y"M^zш3gΜ rz߱{wt" 3yO}29ҭ:Ą\KͺL?|&Q)[J;RX-  c LesMt̐snE-Ҿ{{v`{g6]~m?Oھ7pۺ62s,8pg>󙙇rL&~>FnUT:@1#O;9KhoooMR}/ύ0hqp heN5Ctdh}k_˰P 0sDa[؆>H SĢoC _җ߫jMV"v3{`m$;hƥ[~Œ1O>Q3 +-9gg("tv|8^06Fj`4HkCYگ_l\>wvfxZaWq} ~N\Ï`%ta%vt &'-&i ڴ@[|X N+2`,/VԃTQ:כ}Զ^]Sz" {15lN^FRRefk ccYP_-*\m>̊_ 7j\a2fɞl##F5]˧O "L:25ߏF %Ll+B=eRw!|4p5?!aޤ^(~W7i} 8T[<Β6/ddM;Y-(5poK|7nvT.Ʈ-(42"{0t/fs2^¼F0h(2,oy?{=/vpB7Jca|}AED;M;C" hsi/vSڡ9__C6drSG|:o!818_Wv.1`ā%퐊 ]6n5J; qK;xB!2_7\EP _^&#,EIV|"'b0l0ul|'l~yyzasê:::?K?=t7Ml d^ .E䫰"qkuϮME_qguV1Ds=,>Z{.g?YᏄ@X8o@Zڀo8i#o~󛅢t']aY`)S>*bs^!#t g)ܴ(TxnGq71 kMk's!_ش=WfU8߸L5X 8~)/CBS}2֋-t!E!dn7pi5AFMfT< @-#: v0eg]?яhW\q<2CJe B+5m v.P .s~6\.A78gGrWi{!pnIэQ"|{v!o}AT 8_p3[58-B;d%:5AC`Y݌bs膈#]+CFOll !5ʬr.!~wa!`PWVRV-E;d $a 0ẅ~j! w]¤2̪\֙0fY  DJ+ Elf$!&C87ƊHB>Ťxe> i43r]ہǷoX a )' gCGmӠ2E"s]m]5su8 *\x,o`o6<X13kC.8no9@CPqa|vLLfHnP־ C9_ߴC&^ B; D;2a|~ɪLC9yL&ڡ %\Atvηh@{v;kC!ڡ P|CK;sF;eSE[ 8tRp)CeEH_ĄdLӟg8_"ֵPUyAU! ȃ>hdt¢,VYۂJ-+2QB ۜ/8<gr0Z2*2u_:Rr:Ct3Lsu K%$E+%HaU[[1W?wAnʜbZļ5̛ȁ1O}P)NJ+.߸q_dXO{;kJ3 1DK3UbGWH"H&NXٳ^yTJ,If]2XHvj%ex`Md9n/ź@C^\1Kİ ꁠniSW\[6آɏc*&fӦMe꧞zjD#i|5~ǃ]0L'NFa`s΢ōzn#N9T>] ,P__RF1RRo]jZH%ohRpU $!u@Fcz|mQr)-אJx5=tǮ«tA`?8mt'H{qYX!á vex =x/VBdg66Pbb9' B3laJmt;76wUAE1*5wv(( pL2J5TO Cfċ|LW_}7Ilᵼ{hUa[Mz|T~ֳ|dyy,י>!@b{QՍ&ÀeJDpw(i{6 pO=47ʃUN( Fs V7N#!O!5Sax`B"8N-2D;*d)qU)tC"| g1Ct  Nl0+ Co ET1L֑8\n"\7?/1Lx&D ,dQ]Gaӿ1̗0Z[ĭ8U6<Kb5/+m9`nGNȂ\w%S='l~iJRRWIEIEI| # {vg`a_^&~X" ;u&e=O6߮4cƌs=\󞁻GJ0l,C_,a]g+LJ6yf'篴d+ 5<3rƬ\8>ƦɜYõde\%{f3\|ҙd ;ITέSl>"h:ދvъ,7t[H;XډVٜe2n;k6xKs%A9_{ ̢yųݨf8Q|w }^UP׽9JRHFt{;=R_f!|vaw^ϵ]|^_ +δY ̜o,8vTy:R$'YIz}Ξ!):pbPݖst{Co6@mt:^wvw ;o +m1 $oLGҼ|5*J+ „ s%JRS뫹V-)_Q M!QlqJJSΗ=YbJ\J|Ql·嶞o*K[1{| pR𢁢Qt+)"t+"+%R5%fYK_~_n}7aP}ꫯnȰp"TTdSkT2(hM\yƴ2אϲ _|QΗ&:pYqNC-S!L72HwD Pȉ-Aݥd*eWbʏ8.`V]nR^k%c F!*h-;LPaDm_Bez A!"p.abhd.U*̶څƫ({J[9 $@V0gΗ9 >Z#/k ScjH4Ս&.|22oĿP~ƎnΤOX"r|U0%@_˿ThW⌲eWjr' ('.do E,aÌTUt&w-] q 0Zn_[iv*r* <՚$pt+nt3@D-^c d ?>GOɦ+K33 5í=ݨ*$.~p, =|=F%{K!@N ƾΨP|͖u9ߘ+[f56c*5fu- JRMVe=8y&l7xE ʬmMk@ÂjCwL:1U+0|=k}Rkv\nOl;MA1۔Z9&G#4sśm2dk3Oe9n`AɪPs0ϱ}͓x -c/''(|zrb(|=?A)h7js[j׵pL|3Ps+W-o„ȕz˚>B4bbr65k-K\ EnI.I=_N6#mzpYoTYP}]mˢxq(Sh:6#`/VԐlqVgK]>[b*ILFGl⣭R":IUh9sz Lߊ V| D:"J a(%5;\M)`2˜knU)I[;΀%qmҤIt6* ^`h-2_M5L[Pẙ=jFrk#w'^^F&%T0ۀ3q% VH2%t;8`I#6;DE,hhսq| t77L!r7xm;օc> |W%tld[-2(Iɹ0484\|N#O _9ix 7‚~bVTa{YݪխJ{3pMõ cC38_G}t1h;5(XWFZ]ke5}ey1&ho,(CI7w8l u}-η:xgcH!V+Pb͖Sq,LҠj(y|OrZ'2Ju=ܳϮj9uj +$+9y.g(e*"fF,7-ڭ>SřXhujrLJpfL @cu@3Z8"}saUrOf'ߌvA 4uKہeXI'IfS >gZ툇&}f~@lgRVTRSrRi<,Q0Tg77c]3Ԛ׸GҼM5|sF܆^G欐| rjr kv֮4F}HJC,aLi^&x 05OLF0#:3^RzCc^#6 {j]q:鳻 ˿fyO?حcnFk"7 ΗlZHN#U0cok1iG RN=V}t 0bJj5z]e,}v0;X2B!1ߕT׵{ + #&єE<`k ;( V"uұ2*=,a3 `dmV'veڜIN扙 s+>^&Ԝk۽H(=&ԜEx^Ēt1l 5UxDJ=|K 51yᅁ+NL`SPkp(ԜQfQPs#淨Ro?"η8&|{z%ȱ009|1zf1u$,jT W,) Q)3";6{7PbpwSI0PUT)&Q'K^ؤSsi0AD̜ށuh8e ŹfbMB- '0 hME*qH8>Њ[oI7[~aR(pJj.B;%l)PJ5hjQbZvW"Fa ]e68+ğ#syTF0M- psr3c1F#b.ΗUW]5﮻BD S֊e9Z@\LQcsN}2"1GZF1$/Ha qӆZ=7 :&F~dY OSS,2 s)4IrE(U /v =#aCgkHfs9f-Be|d2>0za |JBSHljjhhXoӃ3ӨT ύ$ZcTRI8묳HdvO.Z),6kTg}v I_jdas\$bASW7ڹTǻ ]J"TŸ9_r`-rVޏ=Yfa]^^ r%ݳb[$ǰ$0{//1c=o8ғ{1ZL=_>#Őo0g; {3E/5 'kc&9ŻFU2 ȹ& 8_ )h,|ɓ'7ɘ}cL'kHp~6pF+[W4bd&fc!1׏0c '4r )\Cqv $zPn\`T5c%X@뵪Xqt@DכZ$|''蚩x8_|ҬK0?Ƀ\`n8P.dlf;SoF;XxF'oqR*DJ2+t42L^刂EFm_jow} B/BXN#;/^'XM;*A_A:bBS0G*)RWWZ(8"7(ٗ5RSBb|L}GPQz뭝0zCf>CXKaFiµR}uMMjeGW_}uk%$sŶW,ɷ69{Y(H_r[uIϰq_q8߈EoF4 LF])#|S 8׶C,|r5)]:\?8KkEeqpj;p Ka/2^a@Wahx3!Ϗ0dHfr L8ˇXsf|1#|)+1#{>ƍI IVIOpLUiɂj??+>"j*STҍ 5/v0V@)7dl)ݜ9sBOD#5 CׂARǐ?@Y[rv'r]jժ^xᅥL֨l[ D Ułl6pM29 V-2o^I xZ;C"V윯Ij/\sHpG8j8eK^{ Ξ>gݬ8S}-aq*LuC%8߈8XFyDoG'yDoa"7Jb8_GxDob9J(8_!cu2h1=B#[KH#tlfFSBNm*dYN!DҘ( 504bL{*| RPRt%)0taD@Z S Gw޾^] /2Y2! F.L U<% O>Fr٢/}q8aA[ Ҽ>|ΗqArf|2x,Mi!. ĉV~͏=ؒsXyYEn"iRJ,Ǥ)BXy=\ ** x㫯+dٚ&o(qug~s.,&P$mQtTvEYWSL'3 {f Uź DbžQq@Ӱ1k!ݭI8qcG<+5p, mr @uflW(>ΗuʩIM|c[o Go,|#7|cqzDoa"7Jb8_GxDv8ߘ PUs1),ČpI1iֵ|IĆE,@F@Zt#LYI@S1@Z1ZXd#St QL)[a1z"k#e &g@gBBobJ};r@0뢖'J,~!ȑr򖖖u0yz0yS㗬,AĂ3SLs:jjQ +Tc)MN3g}E:uDbn5&"V1qFk2-)4C'N;I-%㧏Sf.C"lU.8apo E .i߿ȐRa28m@"4W)SHb8_gBb]p_ 7Y'*a6AW=_&e|eR#0ҍbl<,Oኧ^ 04XIn\9 Hc gXtPdQ~G V† MM_Zkۍ qtVw:Jtu0zѶk;t&WbRp 9g49_p"n&%̨D rSYܥ9չ8;(Fo,|#7|S<"7#|<"7#<"70uM1\G#|S<"7_M&6a׭ueJJY 9QAAI[h"]9}[T \յeZ)~FY -1\|(IND\NA$@iJ.ZX!Xec9q88S-kJ| W+B'C/v]HQyO=ViEՄlB*02Ē(̵(vyWSɌRn 0y=b*r k hŏF9}hŹjrܡ-|\m$op>+ 2+UM@בg`=vYXp;PSD=!M kf4&N<u'hFwbbԂgP SOvI["OtF)Y2 c4QhPGB.K%+qXGrWu-N8a.$g&׌J|&Ē Ϊ2\wNBKͿ8Bҍ 5AM[>-'/H*VRl^q$a䯙 nV&%Kg%-BYZ*"JkbHF-V UX ֡E)mv@n;n&Ih5%$- #uPqs(Xt2K10f"zi+FΗ59<6jη:q[Eo,|#7|cq'%[PrKN:7T[IENDB`assets/images/fancybox/fancy_title_over.png000066600000000106151373621660015201 0ustar00PNG  IHDRĉ IDATc```X š IENDB`assets/images/fancybox/fancy_nav_left.png000066600000002646151373621660014636 0ustar00PNG  IHDR;0mIDATHǭWkHWĘKmk58/sJQ69"jU N Nl17M:tsb[֭ CVjŘ=ox?јہ9罝yx<^ɒSNyjikk;wO9yk7Z$$'N+n߾ܬ<~֭ODG644D-4?ZkůKIIVVS322}M<ʮmoo?Y__fxxü興 ހu$,&&& ???Nleeź`*11Q(']S>+W?Z '݁iͰ2fѸòOqK{\.$N.ʎ=υ-R444d޴'G\\X)b\\ǫZZZ.X,EZk:WHiK w^R$̱p~!!!ʊs"Zݻfҁwc\"!O^o7]NMMY缽uۤktt+zAjbG(>7?? wuu#MJJ/..ڂ~ɔh~uu0>__V`0pjj0Ro"VlHǘ ==844Ts666XglV[[[6OzRZZ9 XRƒ8oPN- hΠ֐ >ap'lĸP:OSJBq&--,ŷ{199i$FLK$*tJB CN52Ba 0?_#*uENu/?ѿ$ۛZ߲ܳ6|sYi'4}eK'T*58Oh^[T)**2r\ ı7\U^^^iAAA%Hn!zIg8r4`H/ "9D.ɗ(}}Fd# tۗL H5kA|zzTPP`tw ?0\%{%{-եA^}A! D&£GLBp XnkkKPFXkqCK;9NH+' =GCdG/HC`gJ$MUF~/nAاWymrcH6Eu  +D_"mE9[ 1,<`l20Qae휥JK|Vƣ *,'ZȃIENDB`assets/images/fancybox/fancybox-y.png000066600000000260151373621660013725 0ustar00PNG  IHDR(]tEXtSoftwareAdobe ImageReadyqe<RIDATxL] zOG8 >K-EQˀ٧:CX?q;1do1H@59IENDB`assets/images/fancybox/fancy_shadow_s.png000066600000000157151373621660014642 0ustar00PNG  IHDRLW6IDATE 0a!o r.?۲k; f7xn[gpKUvduIENDB`assets/images/fancybox/blank.gif000066600000000053151373621660012716 0ustar00GIF89a!,D;assets/images/fancybox/fancybox-x.png000066600000000313151373621660013723 0ustar00PNG  IHDRH7B-tEXtSoftwareAdobe ImageReadyqe<mIDATxڴ10  RʧyOQB!Q@&RB @LU6{xODU=ek`͊ZM .:o;RNL#tu+GIENDB`assets/images/fancybox/fancy_shadow_se.png000066600000000540151373621660015003 0ustar00PNG  IHDR 'IDAT8ˍTQnC13^9z MF$رž] ~5;|"y֡ 7pEbУz}7[D:$0'YRY rMpQ:Pm.Q׫<@-&BqR ޙk$۴l7:c5q]FCg} 6\hy7=q&CwB´ZKfMozӡG[FFF.{s;s׹uu{ ?AZtfA,i[;}{C{׿ 8<<' xnE=Waխn5CO|z^gկ~U <uw[ڋa |`M}Ӟ .uYgm!G?:Alw=phN[GqĚ3VKM{G!l&`+k׾w]=ChpKU\m: 2?Vmo[:v衇~3N-o>HdqnRan(`y_Ƹ6|_}n7p*uea,K±?a+.k6{R/~$G=QKEa N&!4\v'qg>_ɖƋo/A::l2{"UmKL$&x3=O^ʛc^\\V7MbX}h^ξ~ gLŜ4?IOZ=n rWM@Ӌq7AHFnڱBĜ=a"vҗt0ȥ̤& N,m9cO|׼5+3 h-bim%yWpiipm[w oXy!2% GJHT/ݭ 뀷5Bc4!p1ŧ?K9 loM7rW :IspZ+JPZWzEy^Ϯ[}{ꉉNjlg]ՠ!LxJ>LߚN:i!&3<>'W7cs:@MpoB=?ӷ>W^yU_7&2͓~/yJN;ꨣւhfC ׿H~S%0 nx9J`FnK/h*}v'P6sĿOKP_I⳦&'TO*OG$ O$ O$ O$ O$IZ3{Ǔ8Tݴ{ʓ8FXޘм̓8sm]g?)>OI~;a} SO=uӝ{b X=0n O%LY24_ZSNٔu&o'q6*l @$dI%`?ϷBg!$5NC/j7]PS/ne|]f>?cZXv&Mص$W9Co,=rJ$/I9'1'g]-vIIIId$v؊0%d2Xwٯ$BcB{@}k4JJJpOR8vVNÓ{"~]ك$$Y@c>fV,@)J*\ xɬNuo`ث>u-P}.畞$uu^?(:E tt~e-ATͧ0 V;PnEJڧ3$D64Lz "x@pNXi@ТVy%xd2OI@gbnVX; (rPRyVm~=Xe~WM@v(Xl5G ,hms۵iESe͞ =!]"I&= sRiF< \kP [ڲ[PfsyV')pe^iXj?䕔xxgfWbh^[-/}i.z.iv<8Ȝf WNFE]ۙKv5 'Ǐ܉+9F!nXʻ^\Ε(ovعLhъln$E<R^5]c^}UW]nݺGۮ-Ztd{p]~iuW%KLԦ !Ne9`"vϰK+Vv~{Xde;wOwvB(~ {Ix> 7'Ovg Iy5Pi[T=VP4Wmڷ^Y59~r )`=Ilp8it!Z)ObYr %v7O2ãh<`Ó4`5J 1Ow'<0T.2|gaځ6%L$ 萎rI1C+'jè7mID#$ gƣ6q t+pBܪ3a܋go3=M<*q7я@;\>JI*(, <@Z0),˓<̰vJT!h T.{h ߩ.e̮0XNtMTVnQKy5:_#e:x\xIe<~F٤zό'aWV wIx~6ʓ $Ĵm'у~+V\_cdTpnwb$eD5kNF}LXm䶾K#uҀI7%ТְMZVDDVݹVmr LǗFrLP]b^(bIZ9Dt;9Ӷlڴ?ZfwI`gbM y.8Dž ^//KM{ ȉ,yC,mpsL@s٢!/yu? ;*•I5IIIIIky\[ۭY$6ߵ xw'qO,?%~PQ GI)P^EEDnz!ְ<X5)Gj7+WZ>I9 VCT+D-P):oiUشXpH@72+J]a3maD,328NQXʩmj2arla+ \Y[$}FFFQHK˟kyk3 kL;Q6rd 'x f/trRذ /{ؓρvS>mHMō()2v% ٟVa) VDNӮ4Cc1Rxmd&l;m$4m9\_͍e< ʁGRhroX UW/yNxp M.:R?IY, _+4,`; 954Q[pd@cHhS'OZ@gV,9NW.ˬ9sv$Δ3eS4NΓaTpE03yt.I.NϊY"`)rRooIlω|2-S){Γ\= [URK+wLa̫J  ā]DnvFjL[ ,] 1t wC~P?ObXSCɟ DV!r;",=j <蠃VhwxSgQ w}< [{ı}f̊' c6FcQh/c%z>dz"҅$Ƴ~T|g3\O%g&.ڧ#![m@r IFm6z[8HI-tIhPee(F>U3J j<ַ(eRAbh#m3Iug6j-h%ábN 6O$#wRc0QJxvj>`JDCyUn0PRza8MxEc2_])%]7yIrE, ܸej665'񽍨UCLau-'bKÓ4 cW/O5z(($g'1jQd@<}d@ }|:#LW xᇯJ^^O|q,$">q)qcY87}&k5 f@>&Vpd'|JmAl[9]d+"uꊁ llWl43F{|%A#JkEw2Eq7\L+s mE9kǐvW/{Z;G, ae굥6H7ɓ:*eIP*D*7dzN11u^Nݭ'ix'ix'ix'ix'Ils〹ghPyy'):9M!(#exߙdf$`Q; c޺uQ±s~NdAJ: @ÎG)d?DNpJOz'Ls_.O8 !Hk c\I٫FlEW&m\,5Ex &77(# 4NU2Э(߉'ņ4:MkK4)2Z죾xs[u}?Ǿ1H0fuqn0ay@V` PuhK.<<5PJ2m%LyNHEFgQIoyEMVIP G܏ċd'A6P3^% SPuņf'٫Fho\:FahBȔ0Dvf!%>3H[rR:QslEIBquj),t$ HikAْʸBRL&, puګXkuIt~/OSٜ/zU3%$Cթ߀mXڤ;,ktWF_@FfO#|[Е?IENDB`assets/images/fancybox/fancy_shadow_nw.png000066600000000504151373621660015020 0ustar00PNG  IHDR  IDAT8˭ 0 E4S)uXԖD{C?~fSAs' `}:hkpp~mt<%t֑@,h)@$u5iKx6Vb9FtZVxd:HDWeE2h`~zhEc5+Xy"YĴV]ųȜr HRW"M,X7 >#aMI~DEi6,ovTOIENDB`assets/images/fancybox/fancy_shadow_n.png000066600000000152151373621660014630 0ustar00PNG  IHDRLW1IDATU gQ7{SRU^1I(3IENDB`assets/images/vm2-sprite.png000066600000064607151373621660012064 0ustar00PNG  IHDR@H.[bKGD X pHYsHHFk>i'IDATxw|Tu?י93 I@@PT׺mvͶս+"VTzo t&}z;dz !!C|WSSߺu̘I22Ək<4(%e`?tZk4Z@c#e,aJJܭ[ c]eT5''?ϣ] I,/(;'O?>+pAt'\GH$.^xs}UՆ׋!99) C6o^j@ۻggIL><3StUW>_(f^>_GGk+t9 :X]۷OQBPHQn ((!CAG$Y喖c 3Vl"5kB}֮ݽ~9Rh p8|_7h4ʲ\n/IO0(MM@a?_GTU Q뫪kj7ÇU`Ϟ}Iy8r(,vNzt9ۿp0f0TV>޽ݗ1W7> }P?;L':A=86M$ ''~W_;aPHW2`rk+FP*0ᥗ_:4>Ǐ?ٳ])S,y9 ?'?in,('qq))66f2j(+$x<@vࢋ,1nX|rΜʲ/i"w キre~G=m=n0С?~u :ԩ3gԴ_o|b?dyaq+͙1{7N 2bDBp@86{&r0!'/XpEf՚1dP^p#^/ttD@ ӗ.r1/Y;thFƔ)YY͘ 2a@{8JJrA*I 0uEtP(cƨxhiiAQ^^e%ݟ}VX~0qc t6F^Ur2f2eTC<﫭mlՈ7@b"ƌ3#qBͦ@i-@mmaaiisxt] `0>(/߻MZe`3fqU5 q@"FiiVx`0bj7E Tp:/ ]midY&q__]Nq8~/OHZf1f͚u3gt&]rɐ!N>L^^K~*~R NzC!Uojr].U ᯾f?.<8,׿ӧ>jԝw̙i\ 8.{`{wu$,N2xT]-(y<._zg?I^y;~zvU}}Un37].OŒtr}$pҤjB!U㓓m'pp6 9]"""""""""""""""""""""""""""""""""""""""""""""""""""""""#.\p?X,e}zkj6lذaÆ[nw#S/袋.,333333%E{63S ho>}W=G1cqƍ Y6 ho8^h4ߏSߐΝ;w_l6iĔ&h4fdt]@{G}GWI|>/'g͛7oG=z)S ̼ヤ 99999Y;# ӧM6r@MMmmmm8,@wNlZ,gddddd>nvE$I:^!>>>>>^^`0 7ҲukwL+VX+ :t?bwoxo9o>|_YYYYYy <>qcw6m}ho8?SN;uM71}z8ӭ^zG;NBBB:_x&LMLr9)i`ȑ#G޾رp6mzݱ][OSS}}]5ISSSSK?oW]))>B]3]ॗwPIڳnO?씤dh .2&N0ayjky˫κGSt}vÆm1Ν5kTKg͚9lv)S] |_x-6v̘]f  m6w^ T<><333nt:;;﹧ȑ{YxJK_'Ύ7Nm yg]]\ܥ> ݀**I:NBz|b4l_u,V?ܟ%Mqq6[l, fE"I &%j`۶+'`Ӧް:5+k8@~cU5V7Uu] M){gfnX^F%9Yaq ԯӉȲu:=I,%6TU>oxHHHMpUYYÆϿ /X,d0 ٜ`G`nرGj,zYSEUUP1Mt(N'>e0 z=`&%o<0p7p @}}L̤I3o |o~бc/l6,IEzmIX  2x婧;:55XWzEMXhX`l-;ˀ3Fno{oKK{uq(.@UÓO'3gfd.WssCC]+Nz$yA\|>`knwGo,\XYy79C Kf#F5z4Ot7gd\tyWG]wW_=o5 Ӧ)VmZX ii̯11v{|iʕ۶mȲ^o0cXO~lߞ{U'_y%0su׍X,VPU ==)nuP9!!-mvy~{R?/_%$Ǘ=ZY ,]v֭c$%c >l/׿> pMy' |>`2l6["2zAq[[_UeHNNLLHZ[h |C,m7v t^/))WYvdd g2 tv˗[y3ן|f /cw G>"QQd2 \sC꿪j},jW@d`2>^:lZ,ܲ(( x/.kf?>- n:vn@ , xD^{Aj(](-t:^UCPH\R_m[z}}}KKK`4FcdA7`0c'N^BP("Ih 3sԨ#i.l`бc'Lf56V{h' q(z^^ir$i?l9vZ-)rWEQ  A k'UU p liiksxUH b0rP?A_a*miå¿oots3F븓0`4F@`GxTUe &Ѩ(II.ۅs!#Gٺߟ}I&MY6q+ ff666[DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDt>bKeYWOL鮺nONRRFXTUDzO(--^oss{{}ӹkW(x<˖۶EWg0dy)S`xK.f`Pt^q|> x@UEdY7DȴWTS[f (ʵ.i yŊnO6l|سhhޖ;:<Ѻ\uEx^ &b$`̘ٳDP}Z%%~(5|s }Oj0,^qՒ|--@MMiig`<`|>q| I~w~y/p4hҤ ]^ÆFoI;#:x|> zEm("ma&(vBz,G 7.T .f.lҤD ar8Nnj<CD77 \l[,ر78w.`2ee͘47;v@Fۇ IKbb :p x BP(v9Ncʕ$E@  b\K/33]t+hmmlqH$i?u I]#}{ 3}0]E(b@t"y\܉@kIӉVXY  :݉k;+1? ן89x F,t^N N#ZZhjWUxT@8:oQU I E7\~P[p*`X$fId`d^VUUsFd(p^fؿ~_LNF٬VͦVkL^6N* Q-z^USU"vI<ۗ$q7L&1!vկ]R*J8,I+&T5xz=vڲyϞ[HKUٹs]?|kgB߿Fb,66%l:U1ccu:I3Exx<~(wttv| \/ GDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDYƝJqqqqq…111111?l6ӧj |>nvĉ'Nys }@^^^^^,SRRRRR|`0 E¨t:p8,>6j6ť.ЅОOHHHHHXjРA z!NK dYt,:p8"HJJJJJ?~СCl6-&f/11+kƍ=[ٻ/v.4Gw?xpjjjjjG%%%&&&Κ%I"\U`0khJJJKˁX +k„qfA@9.Iz &Mڵ+څP)ȑѣ?6Fi֎N8rjjQSUছΝ9/4I @ @lllll, B0𷿭Xϛ7u*PS޾~}Rn4qEM2yr BTk:++##1bY9hhhkxhk,;3ŋ,rl6F@\Fp8ENFhkkkkkq& |]Ng|٬Æ]zӦEUSC:$Iuu3f|77wv|ii>5:]8sN>j?9@ZZjjr2BHGwȩ@\TF/..&lpwŻg`06vď> ZZ:;^`nJ`)SƍGڽ^dYe$q((>C 2d -ol: **]ȁu:IrnʡCӁѣ/4+kpk0 @@t0hG6hr\. 333333*`6&$ᓚtoL2yɡP( ~DpXQXDHx<^/9r#^PbO9Bdt'l4 @(+ʈ.@m`  n68U~.v=rHj60s AYFh0;I ?TC]`4L&S}}kk{{g'`L,fE|MU{sv}dO AlTUQB!1H. &F_~LOfVj\kGt)7*NZkGcqqbF2voOtʂ),۷ᨯlmmj*)ߧ @o=65òr%%Wⶶ={>zᒒܒmjk+*}>\z]>e̙g?peeiC;w^U]->F{G..rU;"N\XjwQUb+Rv~+W?}}077''5mFW__"¶򲳳|=g<*.ƍa}W₂`85}__q8T5.Nn#wuu7NDmrرII޽G> jzzFE~رZю`ĸx8777E']^.֧6}rU>\,o4sVWWU|pѣi~m;ҶSnm?IIU[^~_~:8******AĔbOK>⋁yDjkZvv[[k+$. CP(رcǀV:&f?#C\;Ç1rqS@Pwc?.I7p=y_T5\LlǠA┢m~hgC0ZzZVG.Rg~I7{";nݲcc{]xb@eY#SW_{$n"Ç.)t:>}… qY1ƍ'IZ!>\kwضm֞٩}{ O:u*p=^:kVdvnG^'l||vݻvnwNNn.{r`6o޼iPXgϞ=}W8ǟno߻\ %%.8bJ|?ڵVrŰkDQ7o޲ZE:ӹoW_(Ӯd9&&&pD:xo#Fi)Njڿ_$b_/ڈ3DHuffjAwpׯ\;'+k1|fmڴqf#Ftb'L Rvӷv]ƍn}_veHii裏> ,\x3qĉ U]ח/bb^|e޽νjfnG?яOKKKÇfqچ8}ϟ?=ǀ8rDukEϯ_>ĉ'&Ӷm۷99[l["ur tHԡo˽?T|7ⶖ'"""""""""""""""""""""""""""""""""""""""""""""""""+EO킍wD^Nή]v}/wyy X,6m >|}~ǟ輋_ :tZ+*NءX \Ngϛ"nxlٲ(*ѲEE}駑K8v˲wg|y_VvСCb|9`4Uu:}GQk[oe|fǯ[[o\+W\ 6m}P\\\r˿?#3>^3ϫjjjJJĔ! [kggoݺe [nx<Ǐ/䓀˵xfH)+(x?wq ]tEW}GZQ!˲,rS__uwqǝwJYYYYNw#.'=1>{D|fի?bf3gܸq$i毾ڰAU=cF1hui&;˖*-fFMw߽xŒt䈸ZB&>WN"}ꫯ/Yd {x"""""""""""""""""""""""""""""""""""""""""""""""""B߷omTu~+>>;{ǎ;5ǟI-'Wf1/9sz`|cǴ'|-VMLo-:+%#c`lɌj(~'Vgi̝;w. ?7>_Wpo۶m{:ݪUVÉ ZQ{`̫*x]ARS#!fs#I}0>?zQUUBMMM?OO>_:xhӖm?㳳ŀ ő?O?_˿D?P\+7lY%K^|KUw޴iޏhqKxQT0>h|9Oۅ-y?MJ||aD2 ~ǟ߷wy\.q2>~ vSiӉZvkuuڰAwe0#Sgd0kwqڵkתѣ_~)$$fJm?Ni &L`||7o|r]F /|17o< &{X衇z8>^l]fΞyub|y_U%+*[O 3'Gb|yu.㷿o ;q&O2E?@U/Z;|%/:\D7x"""""""""""""""""""""""""""""""""""""""""""""""""":)ǟ?0E?dgڵs癯4>>7Wp3x@+Qvfse/xvpr 'O$(66.(*ӮueQѣ{0>^v||iHݰ!R^3c=(0z?[-b|_7|pW|hG|:pDhm:ii]?8ku֮]G0(I뷞:+>^' "b~ $>~RQ'Io22D.oCTuIDDix~Gt4pWΟ`|<㉈(~W‚]~zuuN:@ MM55,rew[x<Uehlll}2jXUٯZVwY*sHLLJ*,+\sQ[ $%%%;v֯d2lv8~ k۝,\ԩHJJN.,˙GpdoS[|ɵ@~~^^}=ҢvݮŦ/ A`0 wN&O2hookkl*+++++U5#ᒒ #cG{z)JM PP_W':UUcbDI55NC ZS45~Fh<.>ȑÇ k]S% HO((BׁRqNupXB!_4/6nx>_'$"Z "QX 8|СEQt:dIJzE{kIPmltbEU=q?t:YzhN/+s$QP:iu(@rrJJQUGa^o2%']W\UUUU\>[X=f̧ #;|b@ccIɰacW\1zHHMVCUrsѣGs &&&%&55_퉉#F5qb$zpUMHHLܻHOOO=N=^ \ФI)Ӧ]~ydUUEENGٙiˁ##uJIujjRꪪmC /)˻&f7>| N#>rNU-++-=x7nudG$RUC!qqxE"+1cƍ>]D랉egqq;w|C-Z$b=cWT<X,fz,NuTu1t:m655555yC='''gV~m.)ٷOUsssr~jNNvZWWWwhG;{oخӭSGGNp:V'D?TUOtb˵{[Ʈk}>suzr\.޻._\yy{ݼ<\740>Ǘ:?s'PTTTgO{||[۹onw?U4>8cUU|$%}%%yy@YYiii<<jv$71;7">?xݺUE D,y8IC!1"#cH||RݞڵcGG{lwUCRRYz-@QApL4`E5%>>>eeݭ@c7gf4?抩w˖q6_QQQQQ RU8&]sm&deM"I_}k֨c6  B!q*˧ߴ\75]99">^zͥKUuի_}UUǎk-[׿jQQQQas繍߿?Z;vckkkkkjTU[1>DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDtjZP⹎_/!I"o]Hs|޽'ǟ*L*(@~~^ޮ]}_ )>2Jv{p!Bw7f\''k55}E|ѣz=Y||}}}}}=eƍ|\rɄ @SS[[u޲EUg̘9s̞wuͩG<">;8>^&>^V `РT-r~URSEXrUUEEl,pHQц ONH4h0`ʔ)SƍXGKJTuӦ{=KVz_{&&--:~1qy5,Xp-Qk|1">>1񼌏6mإKx-Oׯ_Z> xCxn{a`РAB|< d||EEqq_kY[|"Df`PON23'L2\(">5Jt{Nr--.׈;hxt/?`2Y,^ df5opu7tmtCi_$'ĔӉwx\ggo"fžP||qqqqqk/-_-S7x%KΏ}D dJ׾_۞6>^{oJ۞ޖc|<㉈:-(Qw?WsܿvU=xڴxIRs\ ojjldWUE)>~s&U5Zd2jk#֊xs|/xe˦M~xYv͚22wW_}'סx2e->ID' |> %eԨZ z^wf4. =[||Q8">^E| 7D#>wWT5##%ρo IQz?bcx?xE#Gǎ9_1zH|w~||vʯ~bq]|q?_}?}_y$-Y~ĈsG7>\UfU=zpEnCC0xm@C$)J(ѣz[O@㫫e|~.ssnC^/'&>8Z*50ݻg&>~ٲ)>^lOoZj寽⋪}7~Dk{e^|'gOo?g|<+.r{.{mNs|=N坻x@Q n||^^n݀QOI۵\1p:iQTTTo_G\X侍oh6o޸"NuuUUV::egGjZZzzzzC!oX'8D :こ*>^๎:TvUUso6lZѣݑs',lcN !B`|">?w%RǏplټy:Umnnjڰ=KW8: xwD$N1Do>x766664:0}qK:y<+Ōx7/Z=שx@)lL'Ϙ!Rcb)>~܁oI||nʕNN딞\sͭNP6v'?tWv}||o||ss+TU=SC7wnd?SN֭_'#">~s?zNou1_E?D|w&vRY5,Xpq&L$I_~gWj]]eM@]]mmyy*7o>u||C9վ?t{|R#}lmǺuk,[vzuU^{տEU:/) 555555}?g['m{>}]8x+>wW\\U6O㛛b||^񑺇@nnnSSv{].DE||aaA޽@Jݾcp3uIIXtwS$>>6L{S}}]]]e˦M|\zĉGGGGM u֭N3fN6fQ||Njl]"xz.߯ԩ~$$= f v奥v;PUU^ D#Ǐ%boXSğONj:x/+++;tHU7o޸q*gxm 55%$1d~A`Ԩͻڛo>SnjYT?G3fD3>:`5@ffZΝ@( Čo_AO Ǒ4?C=>^Ssw.¼Uuίڶ P->bGGכ 4q=wE\#>dmm'6򲳷mF?/hllk5 p8@`H*+ON_U%bx@v۹5Jt@7M|Ve0tٳ!CL7X/CUu 3PEEߏtXuZ棏^}UUz7_}{~aku"""""""""""""""""""""""""""""""""""""""""""""""""􏐢ի?^|QgV{cDb?mqwhGH~?nxOV 6m0(Z_|3+k G/%%Ӧᰢ?Q~?A3GYY;뮻*.֖ElsωZʕmh%Zmn2>Ep8 kqs8rDZG{h~^X[pOFj1hXt>E]ÒTYٿ߮ ^h^-ڗ^ .N,/MM^:s==aD|MG~7sMED[Z*Zg~#~ᅨD}ѿ'9vFc9En_w]߈۷V[墭v~~ gP8(O||֧CE#.^yeqnozꩧ_7jQ_~~ /}DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDԟSX?6f̚5NA|Z Z4䓷vw=2F{{Y؆IJI)++.,V@RT?fSՏ~Ҟ+6C¾23E;ghD{wq]wU\-)77gfk%%4t;v&SggG ˁ'':ô0!7 {[h^>h/֖[ZӇ qTVoaϔVήqZ^)իEK]}>Y6%dr8YGt(BٿGFOGtsm믻./TW?DEEM⩟$ X⑰$8)DAw_3NIԾWҞ*G]w+.wΝ;[Z2333׭s:22~fӦD__8,IfuNںx-̞Sv'^%ڢ"n*Zj)曢я{+ #Fhi]! ̀tv&'ƪ^RUu-:gSO}򉶴,R{NܳG+WV $| ?S;ZѨd4vv2x$BqqKOv^+^>hmchr-/Z2:{EUewzx@8&MJOԷ@|(/MM'՟{+V[o{ۣQNUUI< t:EEu: áR򉑧TG]ΟHNEQ.OU3@u2 {'x"mp&A8,Z~Z rE (Gֱ:]d{Ns뺝 :^QpvO@\ p` 툋6m;%: m|hu?{.m+DfH6T.׳>OGbڷgGZUU}44$$dttw]߈۷`墭v~{SNI ̛?L&뭯4UbIOohx≮K\>SOio~ LK.љ`PQdjz E{HDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDIz7|-MD ,\%'I*"t:VҢlVj튢(2oL11eeeeee Nt˖-[l٪UZHk҆ 6l]ve].r:Nw|-ߪ,˲,Kh4z}S!c6f3`0 >`Μ3g֬m۶o߶mhB1bĈ#bb^DC#u`׎^ks@Ҿ~m@0.tD @{{[[[|>_:m`)J׿P(=Fa@t ǿh4E ihNEQTE`0:^( @$ddGzW X'nnt:qCv,K^/"J5 fm9Ae`bbbbbb")v/ Aq&rY6de^#WzwN,׽cE]t-@) ЎX^끘-&&.`#O_{O;m|o@@{#2Ջ[]aZG~3'Wo@;vl߾}{ p=?'qp47#L]ijBq-׋k_"Fbcbczgq2yX[PǎwgKw*vdjwW&s,bcOl >^6f$EҪUo߾}m;wn߾mNr|3;o)>_#S60t:YV5&fǟO@'bt:E><+k.F5>>66.P T>*+ߞE YIs8D`"AmmGcɯ< rj0Vӓ,Odg7ݴp5| Ij|~0faannQoLVT](UUU B!qj3H[N|{BdמTV676ttt11,VkIIYYE7ر}/V[~M^ѣ{<.؅pvt*zq(.Eks^/$ᰢ-6nn+*d2cǏW^Yؿǎ;^|ښ7chS^o0@llBBz) 'c4 w޽99b\A))$''%YY&]t ]@Q;chG~8 l@kkgx4|_"S8gy tttv*PSSSSZ յ&eeM L0qрjY,099..HF`Aw}§ yv,/"SN8444664_|Zx<[hVâpX\ Xz$YFcccccccgv77;UUUU%%Ȳ^~FZQav@BIx6n?dɒhm7@m5W"S,>q"|.~[`@Qn@UVh=z̼b`̚rsoQ MMS$Y,68_qj(r@8ryá`0 x" 3g^s `6'$$%V֭O> 4565}B@Y'<40t$:qYNg6t@(dY> `0 F^ 5(>_dy`xpx!C1ctbСuhWEmhe_ٹr%?_>`p:E8qH@ 1NUnUxB!`Č@|xq(I@bbLL}AXX*x:(I$Mdf;'O=v ضmTuPhf 6,1.r׽`dm(!.< +k(Q& ~#{ `0RRf̌f>$$2uPPwNVY?>_\ #F HuH+I ,_Gy=A޶6M<lmZ[ĖH \t8E' >߆ b cjjÇm'I`4H`( `$%|՚r:`Sb0l9d4l2!Rۀv>x\N'vt^oKx<>x(p2\]:nw0XR(ܹƳg@ep8lt ~Ųxc4|f3`4:z=`410l60V M&LO@8@0|@0v|cq:a pz , PlNv&n<{}6eiWUUՑg$ zPUUUUd3Of!:}IENDB`assets/images/icon_external_link.gif000066600000000076151373621660013672 0ustar00GIF89a fff!,  ǡoVjnaeѣ;assets/images/.htaccess000066600000000177151373621660011134 0ustar00 Order allow,deny Deny from all assets/images/index.html000066600000000000151373621660011314 0ustar00assets/images/color-stars-small.png000066600000010037151373621660013416 0ustar00PNG  IHDR <ъtEXtSoftwareAdobe ImageReadyqe<$iTXtXML:com.adobe.xmp <諻 IDATxXypUol@6CB!T82EK 5Eq!ukiъeJ`b!4+Ixyz{oBJᙜ{99e|[>ŧ8FDo!$UO#V 9`$@BzQ_VYR Dݴtgt_WX16l$cʷ.:'uڣfgJ81D=hh?n˿yQ!KK>ɖȉ09.39A#0ѺO>r{f:~?!/?0 !q$8.eڑnjHD"ug^M~vrg݂ \".݇-0k4g\G-u*v_yʅ rbŬ'.h,^Z7L"4 3M۽G|ŻJ)g5\+H ⴳB`F=W?Rf[.'PO~EY(j uHxJȮ1J)yA>g_mf=xk {Dתl ~ oˆ *&ZrЫҲXzލ<ģF&*!r a%ЯeAE8L41X,.8,I4CZ"y+z *WT3$h0ŀd"]*APU1v {?Cf+knv G^u(?NNc|[VHEڅ/:<7Ɋ3dqF$+*w*!<RUg%vz1[h2б}>vZalٽQoT ,3?ye0j=v#ֈpLTIѯhqI&tf9 FUm}2)NM9ҶR8ڇooFTLJUD.0+%"*ϱa F 3Q(.åS2X&ÏܢUf {ȭ13SnN!l"QhÔxVK “POb60Xch& F[]7**]s PC ~8w8K9F>xS!HpM ")io4l^OUrtӮ^dja䈔p뉏~?$;vz5[0llv˓w<ѐE7bC"")>J@` 4g'b8I,-SCL)ѳ1C6u}^BmƏ\byƫ/2~Y[06R,n~W7N ,PKtv dj'3Ygh Igws @ yo U5h4h@Vf=ŧP@9k!~K#ܚI0"Xu_rgA[)4 ߷|6;-{^ST_مW97qT>T#%W2ܽlYUQc^S'{dpɅ]hYa.cj ᩧS9 *{jUV:Q9 N.)B>(*o:애e SE\ݦF*S _E& sc.2RJ1>WgV7@D~M-ihBr0o%!4؊x}D2TW;ڌD~JЌn?HW]w_4Ts"MjsBDzH?>CH;2M3)}B[-ULG{%h>\ctzXK^nT IKKn[l. =?ucyZlNNmGK&!Kes\`iGSQ]ĵtO!D7&Ԉ "ۄAو?KWvVӹ~ڃM *#vv-(.`HH3fc̞^Ġܴ>Hn1=T~&o*'R{pe#4Tz|#6V,o&$ eYI_ ґ9zR4DB +7-J(iRTWPo!NDtҏ2H-vUG/UJGL\نL!T+5>zd'} zJ,g' ^;Ke nv^]} WAbl<֭~q~\yXF8AD8 +DX.!)*)Ut.D dq9qCBJI$$%T^|ΦcJsޓT25l)Ft}~}󋫂W2qfN*NS.=xo{ݵ<[@W*f>{xЉÙ Dd:x!5ő"ߘO?08yKcXRNŮ6}y&&*W[kNsWeeJ׽zm'Ia&|z> y4(X #1⨘5L䭱Ç2d )))B!i2mĉD?~v}D0м瑟W:[fs #Dȵuuu˩NsT;q7lٲ2JQ`Aҕ '~EEEIH blՕJQ\vW||q 2RN'#wKG6l|K,D NyLSĆ2}ףVp$D{O~ԩS7o,=I՛233B.͡F=Fqyh(5?ep#tIENDB`assets/images/vmgeneral/next_16x16.png000066600000002577151373621660013655 0ustar00PNG  IHDRatEXtSoftwareAdobe ImageReadyqe<"iTXtXML:com.adobe.xmp GIDATxڌS?HqyzNQhij)[Ţt]h"i) [ڛEN%S}߽w\d M 8ǑHS  $%FFaJ~8Nv;DQX,6vp8x>F} t`x^gf$zŖ*z?yL-hZf2HDE" / ya d0FBaйF `换$UjX@o^Q,x鋄}{ [@ПJFz?A'j[Pu_rL&ϐJ~MLS{/!AX$c3sbqvDl6{3WKҮQzA*1%2Z@f;Q6r 77!?r)2B cؾK,]~ 0<gIENDB`assets/images/vmgeneral/default_bg.jpg000066600000002314151373621660014107 0ustar00ExifII*DuckyQohttp://ns.adobe.com/xap/1.0/ Adobed       S a ?TP/APQtpassets/images/vmgeneral/noimage.gif000066600000010460151373621660013420 0ustar00GIF89aZW㦯馲ڱ﮿ҷ먺ɺઽӴᴼŻӻڸ߾릨Ԭ޲駵讱٪׹޿۶԰­Ѽ樳ﷻⰼݯ޶ǰ֨ɩૹƩռꦷ!,ZW˴`)\ȰÇ#JL6e8  Iɓ(S\K5v4x)*zɳϟ@ H!,իXjmׯ`!z`nBݻx˷߾tvFf55 Y@˘3k̹3ek^ɅBf0\y{@۸sͻ7m} Af/S놁wXpHNسk.˻a64_(`0A 5h3˟O &| JT8=5'NJQXs{(3prgxX2C8?k(&SB| " #3ʘ( / gM^8`^pqBXɗ`i>Ȁ'+?|?Sd >'_i>kRgw"&` \TyZf@M8d}f:@+j#i8bg &O"ti0¦PhVjX R)(lڑlpB+"KZ?0'(SOlʮ^R &d9L+Ikb();I 0k?k#h 2 6dF84X0y)㲹ˇ%%?E 4JLC8jd`CYXb\w]o?( ?lvەp*bJp[+wĭ\[RS}7AD._OؑKW$J!I'60~H2v.Ig.@7l03@'_9c>"3VU0$sކK;[Tcr7䠌;oPFz>{x:_ssT% 6,B GH(L 1,8 ,> ȡw@  wp14,da2AQ4'J`0%4eʀ2 5NpZN* `JQd*Zъbҏ@B+GDb0 a,E)FTb,9a0,%VɀyhE ~p9`1pC6Rp$—H*IL`s$*fL3Lh>$`C6ܐ:")` )Mjәf-yv3L7h B-~ @JЂ AG b0Sܲ1xB>iЊZ'B:!(!2(MJWҖrH ?xHKҕ= Pa*S" 87YAu7%6{ y#6ߐ ooAVLN`eA|žp+`0·^]Nh9&RFPԧNuBշuubDX:o0/0y?Bw0>х7+H1"&?x <#;1gpy?o?qy1l&Oy0` ,Y|PctFχ"ƬG|Bb@ "1@c>s=¹XLozWo\~;@f6jfe- :FiiGfV_U_{pVt`U_Bj"_v/`g`t`,'(iX ȶlŶxy j0ƶlepRmMhm`(RUlghl "0Sy@ooGRUoIVpPAGt|ͥoO\ n ,0Eh0 UPXͶ `g"VX xxU ƨ iy0n-hxڀ(bh@(ͦfx`0 ۸Ȍ҈ \X@mevfH Order allow,deny Deny from all assets/images/vmgeneral/update_quantity_cart.png000066600000002325151373621660016252 0ustar00PNG  IHDRĴl;IDATx^mh?u_qO6\;ldJZi ) M"|QXDPћ 5M-6g Г[s9jx1| 5Fݧh@i0 qfrt,A0A,>2;|~`ێ\ΆO.y@_@i2;+Pz.d9srٸa޹~nY/J  nIhIyۖzr*a<5#OSX0t/]_<݂#7rP 2Rkx*a #mشWqf mg`@@2 Є)@"UJkkIR8#:,BR壅D3 < X&dd ˒y-/Zw*Hg +.+8QXwL1S oK{ m[2Z_]P(@߸uYk|ơL0c'_RXxKܓI''$3Cj GWڧe=9Օw7 !#'V ZkrgQ4#Lk!h>F~ۦ>5M@O?SPavE@éaM{yzq-`3w}6$h"6*4$Pk&n qhN14a` ?鳒h}ebB LOqpa /)LԴ{&u28kiYo[ .~y!p{b?҃&nL3?&%#cR=۹y> [Qܙ5(o_&#wkTd۲h"bWirtPIENDB`assets/images/vmgeneral/remove_from_cart.png000066600000002233151373621660015350 0ustar00PNG  IHDRj PLTE   '% */11 72!:#4(<)=(8?E.?KRQVPVPVPVOWOWOVHWY_TY[!k\2zW   # &% *-258<9@D#?<I$FM&KQS&MWX Ga.XObOQ2]0\"fVW9aZYX\*a\3['\#cc#w%a$c%c$d&f g&g&hi'h'h(j!l+kFu.o/r0rG{0s1t-xErJx/x<{:3v1yAv2{3}^r17}M>9PSq;<>>ADO@ABKWGLMPUdTe[\_cedglmkr|}隲->EtRNSO¼K>7yB ,IDATӕJA\6n^%ZXJ@%lm|[ , _@7PШQ6k ;3msʏs`0h2"8y@>Ͼ:4۽Lkljdֽw "46\7i+mdc)6M,l?$JL76 &S1?Ro|Ҝ;\ v9b1sU=ۊϋ8vb %OO%~|c v_鰢"!/!+˰4U+wߑ]>nJN_cdL]*&477ٷ8IENDB`assets/images/vmgeneral/warning.png000066600000002073151373621660013466 0ustar00PNG  IHDR(-SgAMA7tEXtSoftwareAdobe ImageReadyqe<PLTEνΔ{{ZBRBkcRJc9!)R1ƽc!)kkckJBJB9991ƵR1skZcZ!RsZccZZRƽRJ֔cccƌBJscckkcRRJJk֔s{sR)99B!Z!cc9kW=tRNS@fIDATxb`s#ʈOKBHLJNICcb\0(@`04IWO $% KHJIIKJ+(2001pprA'pq00 ;# `09AIENDB`assets/images/vmgeneral/previous_16x16.png000066600000002562151373621660014545 0ustar00PNG  IHDRatEXtSoftwareAdobe ImageReadyqe<"iTXtXML:com.adobe.xmp ]iIDATxڌSKqy~h*p`H 4ESI-Q `MBHCwzdƒ?>Ͻu:6*b؜dDνT*iF n߶lvz^Qp"PdrrjeA4͇_>Q D1H ,xxtr/#<҃l6;O!0u2ݷZ-Z^Ϟu4 r9 3TL 8hh,/vG9z}c)l6w$Rt@b 6MYUȢ0~~`,c @7X,8<Er ~M0](R$a=t4ĝ@ elK37~|PUBl. P~"8>DZ1﯑\.Oca02| 0C]bEIENDB`assets/images/vmgeneral/arrow_down.png000066600000002345151373621660014204 0ustar00PNG  IHDRatEXtSoftwareAdobe ImageReadyqe<fiTXtXML:com.adobe.xmp \:IDATxb?%B0j 2c#'',;v'}}KQɓ'2$@AQ񣆺:V֏$ &''"CX[K$ؤǏjL(fkdh cx Nװpqr&III-`+///'###XB@@dwVVVoe#,3-^V^Nn;< >_>z{_0"ŋ9+((l`-c?fSrIENDB`assets/images/vmgeneral/filetype_pdf.png000066600000013033151373621660014471 0ustar00PNG  IHDRJ`!tEXtSoftwareAdobe ImageReadyqe<diTXtXML:com.adobe.xmp ̂iWMIDATx] te~I'!$<">wqfuvuGϞgt笣=Όggv'#( ">@&] ystwU۽{wPU5,!I!qw'lhl6\UUqGK׻rl߾}3} XW|)PaL/S\MFj<.085ѧA޼yHX znGuu5l6yƍΝgֈue2eMHJ2ʔR@?F 4yQx<._...^ ,.^>e' =%]v݌3JˬQjӍH*g~ޥ͋Ow4tn^'OHyW^:uh֨MuH!Ֆ>H( n|Lnݺ +FN:1)jөjԦ{~I՛YSdeR5|ssEPCt뵓'r,z~ϫlVep# xZX)Y fO!vcލ-s|yB iXPEaV,P3EV-],iu35FݟY&AwS=rC[&c, XyyݫWސ3z ,Ϧ5|ƀd0pz 88 W6Z]|Wp-'Bt4pȍ5kVa֋/);;ZZ$V*݂Yџ2q]xl ހEU/?7Blѓ Bu `u+.Øc?f5'@kmɾǁh KEK1͜8i-8۶ꎿ Z[ }ȏ}XcU/6 ԙwu EygP5|0/֐Sǃ\'t1~-佷36E1ŸՈ||~?!vwd  BH"L 'DſG1'o6QTT8e͚5n *Y@;;⾧weݛ- 88.wzW̳Jg ނ߇h^.T64 n6at&!%ō4L0g:]˥9NTT̙EET e XA1*΂[/5k`)eǪZ<4];n0QMZMxlU&:Q8bČM9XBÉM={z?a15{ Tϱfƴw&ҭJ^P t$>/]`@2e2uWtiYӨ61uUŲ.Ÿ6PZځ=4JG#5o*t\x\ⳤ'""E╰_>a8Օ*c>CrC%1`?=  jYQp\G ܴb" @b@% lZ]cr,Ҩ<*ufU#!aΓ cw0'{q( L\,ϡ.{*&8ʍǮ`f0)Iiju@U Y$83Wͻ*:ɋJiWO4ZnœQg`OidId2XU_שd*tCBt_V4BF!seΟ,=@+Sf.ER0='s?!%~r'$SǍV--o'6q'OBZQ1r3ϱGa79\Vn.ASs38l2 ^TdρSљ7 ;!"ׯ%cQBOF#^J .C64t/gԱ|)N\|@AfNAeaQώg1#U۶]|@5fp6Kafa݊`BH(tX/!^<@|=s5v,}2!u*Բۯ$Ώ{]<@5>$;TNnj. sK;׳h!Nx\tIzdQ߆G{'+C`M''MyUp[\h9oa{wpoamAG%Y!r$Q۱0Li>RkՇQw(HgC6 C#Z!@DlFDw$C$tA-/VoXkMl7- %} Mhlaxa9V+KGJ%V ,vN64֣i`+.5S!dd#hd8E@AN6,De7X`&99NJyx!d֎h hړ2X6j!dXvn) \kܽ 3ng˫;Ӆ8ӘTVJQK geC)Ec!؏#=;ZI7D pfo%m"`rő,RҡϛKz&$@Mόh XEHtע5If7 AQ3?I>pDy gl}BS=&MJW: 0>?nԻsL0s.Ly0uDb^7hƆ6@`~.V6Hw/UT|Şk\|SԪFiGt+tGCQ_I4(iZ{u0RYI+n&^Q"PC:Ez zAc[Y:Q*'9 $L7Mpu%ꪫqЙks=l!qxg(O{&79sl_لI@@6"6,\E #b6Oezi&d+P+NU?GGnSe)KQB ۣQΝNeb R;!e$ZBrPJ䡩t9̚91+ ;m}gɕ8NtfOhQ`&R[=@nO }elt,_w~!椤 Km5L\`o~1|7V, A9Jm࿐O׉`G^)nY9gf_jn}w zIAYl|a %/PjQr|g_x%6K]˓L R)B{螸vZׅs?òHPvA~)DA0[LW™pSm!~ @Zq-JaG1[FE=P H#"0(Pv05> 5׺vˠ.˦^P CO>cghiq=uy(-A7c%MKƅ%*"=S0?kk$E/kTOFՔX/]a4HPc'DH5Ƈ+GLgD]96+rS4H6FJ8՞$,a@ tϓ^C)}b(<18F}TGq˨z"GĎ]/zzꉢNM@7d1Q @%J*TD$J*TP0Y%%`>oӅb`?VT%Ԅ(hO !:?>.(bcRŊڷ|gW̆Wѿi^Fewzv}Pj<?n_f w1;\=EOzsgq&gkY'K%ba,`Qޫ3~ĀtDIENDB`assets/images/vmgeneral/default_hover_bg.jpg000066600000002303151373621660015310 0ustar00ExifII*Ducky<ohttp://ns.adobe.com/xap/1.0/ Adobed       P ?( jassets/images/vmgeneral/index.html000066600000000000151373621660013274 0ustar00assets/images/vmgeneral/menu_icon.png000066600000001766151373621660014005 0ustar00PNG  IHDR6.PLTELHEOKIPLJ`][c`^ea_fbagdbnjhpljplkromsposqotqotqourpurqwtryvtyvtyvtyvuzwuzxv{xv{xv{yw|yw|yx|yx}zx~{y~{z~|z|z|{|{}|}|}|~}~}}~􆃂qctRNSшMz?m^Mq&6qi4mYPĶarrTc6|b(]TB`wsaU"\# )t gf^x /$IDATx^%vQ^ێm۶m۶cΙz+pk{[c) !JwqGus^m+@+t$E70:g@^ƒQ.d_bƸU+k;VIRCT}=>\_Š,|G{R֔F-IڎL)W584]0Q m84vjU@4?84;HDGo] IENDB`assets/images/vmgeneral/quantity-controls.png000066600000002531151373621660015537 0ustar00PNG  IHDR89tEXtSoftwareAdobe ImageReadyqe<fiTXtXML:com.adobe.xmp W&IDATxb?CZJ4C/1 <#@\ :{IDATxkluw^H%ӒI,+6Ҡy4h F\8_M  bhѢԮc~Bc5i#SjJXmRDryOϹ3;rI.WݙosC믛cccF@WXK6 Cis=_y饗VgQq`bbWz; /ujw[P4w7VUj|:diO?[o;/rCm*QFFF0558~nزzU(hr< Mz`Vq5'ȑ# @Qd2r)$v?wPg.8)YK׈!ϫT\۷Cy'wGznQ JTҭjݓc=VO&'Ǯ t),+ؼZϖN~Ͽ;9q#F3P\߿ xW&ެse|;Z֭kjrݘa 8])ɍatG={>K痃U0v3슱m>Š8ƲX9e=}OW Tj[_[1 ^󍶃g`b_Dq@qdy2\²=,En' +ҮA1n[/7%7%YlIf5nc0 Z8 ԫKcvHX,=SdY&X/3H\%֢E%4ڔҵ*g,'#ÅP $YEiE ~ÇoQkܮ]@%XyZV7,-/iu†e.{U+¤8뷧Ԭ7A5%ZX8*6Jj;رs F?mdn˅a=zdIv6nen"Kf1N>n6|.s5] ԫ#YQȓM eLV Y/1נ yl) {\ K lM @ye9_pis7W . c;a_|,K-UEv۲ 8DŠڸ]~K~Or/% q x)qM<"@fh,_<lc09CSdRH5;^0i',wzGMr5n:t.:Nm`Vl V,Yc570D 3 슈@jd˖ɘO2~a,5 d!C02t{G-Mo!M%ص jurUp)jU%*}iDA9 2 4[\*! Hhh0젛$hSMɏ"{ d2iäV繮6l -Yjyjdu O|aM" >aF6rkje':6P3)W&䦎egRЇ^JhQT)-7_F0SvzMBl+!n`&fsū799 '3#28E: u_YQԡ:ިC=Qoe[;(wbT}8)CLM$7;R;.F=~ ~2@~ݸk0k&rC=9ȢЕ[S;eb}\恜*ݪ[DC¤238` |T+_PdJέF\זO(NѢp̋tn'#eAF"AZiӶ,mi#WGq޲jPV]o~q9yF#CN5Dqс)BM;INVPAEr-')㧖L|ؿU;d1z* ky\J糣`LFAN9ZʩFM= [s5ZOF`INYbrTѼtvu9GIbndϪ4T8|,--`kY YYql8e%(: #-!HM"0 (9}OVj$Cɤvenh![>ՈecÃ{QQkZ6z(˲n"HXm FqrV> i+VӕZ!Pz4W)M.%XӤO /ZaGYέyxtzrL_ OUﻮӲdPJyvHk Yq Q*l(O͑}MضuLAii%Td}0y 0DgIq%mFHlFd'/vSob>txHyݑs RJ¢ԢL`-B8)A WK., 2ʭmqj k!fA Y: eV(FKI)#X ,ɝ% JPa8/ x?u}_]אC E%Ư:Cmh ѥmUiq zR&C/blrAu:0Ȍjtlc?Uvጼx콞 Jy%ϗR>le51x_[z*Ta}6V. ̥|i> Tr@Zejjjjj&|>aKq]g@T+K "Xf>7IN8}yOPv`Oe=x< dPh:ЬzawcMI.Rg*t`\IENDB`assets/images/availability/48h.gif000066600000004614151373621660013102 0ustar00GIF87al/ !"$#%!(# *%"+'$.)&,(%1,*3.+51.952=96:63A=:C?GC@IECMIGKGDOKIQMJUQNSOMVSPXUS]YWZWU^[Y_\Zb_\`][da_fcaifdlhfnkirompljtqowtryvuxus|yw{xv~{y}}{<ܔՐ۔֑͌̏*̑,Ώ#ӓ%ԕ+ڙ&Í8ǐ6˓5ő<͕;ҙ:ՙ4$ܢ:#*+'45==8KHŒBɖC͚EÕL̜JʖHќC˜R̞SÛ\ɟ[SҠJ͡Tˡ\ԤUBBğcˤdʥmΩkȣgҬjҨd̫s̬zѮ{Эuӳ}ͯͱҴҶպٺռؿœţȥʩͭˬͱ̬ɣϲѶѵ־Ժ׽,l/ HxyF(TX"Ah8" 0dqǂHɂ*Xء$VʴxɓyCgh̋G1JJfk <5\iQ,g'VhHͨE-AyπdHHfV0Q 6K[4`hheȤֱي'*YI5@РjR)Xl>r1LF- ! n|><CnU#:+BG .*G`G93J J4[YĀ"cL 4O,$CIUJlG}{PcATkUsE} WW5UYgjE!ADG S  &XZE`"2Art9>}D Y4I *)A̴II{xV++%G@}agb)ALZpӉV< G ^4PJ,ǩE#2R""D35o[̘I_VĀ%"_YM(4HZMV!`xVI ]eM," @gw砇.褗n_2T01zeRI3ߔz%~8TRM(S0›ԍ6K|5zO0;J @8(=SQD% ;_I'u_ 4Fx.yЀdH* Order allow,deny Deny from all assets/images/availability/14d.gif000066600000003677151373621660013077 0ustar00GIF89aY!"&!*&#-)&/+('" 1-*3/,51.952<75:63=96?;8730A=;C?=@;9EA>GCAIEBIEBKGDMIFLHEOKHOLIPMJQNKSOLUQNSPMVSPXUR[WU]YWZWU^ZX]ZX_\Z`][b_]c_^c`^da_fbagdbhecjfdligkhfnkipmkrnmspntqourpwtrxuszwu{xv}zy~}}{Ϗ3˒?ؗ6ۙ5֖:ԛ9ݞ9ڠ=9>˕BȓCϘJ͙LӜE—UƝ_ܢC٤Mϡ]Ҥ]B@ŞaɢcЧeԨaέyԭpӱ~Բ|յӳڻػӼٽԽƝŢơ̭εּ! ,Y! ؏ \(POb =JIȱG\T1C<6arc\bE61 4iMI (\19mev::Bi0MC‚5,h &S7pI,uC:,x!.d$Bq!4T@kPj Ah$:2\g:QBqE@OJsA`U!ZǙ6A_92{Y&<)q5T!0 yj*6 !)#F? Ph T =T Bu,JBhtJ`]-B43B{ `xsZ[?sG7Vb a>JBSD @+!40 -IGN@h QGjU) UP(Q@1И!$]MC(ABXl4Be BH_i`# BIC)hYKi)rL4! T+(9B@`"dm a \,C>  BP@4ќ@ Bv*hXAb?Qz@ESQ$C/pGш CC;G G? (x$K$pTI' b,dLLP5UC8Lm6A GFJDgmD^wwGg߄.P*КP"1a2YG瞃9ZG/loĺ1/DMxd;-t;b/w"EM3DCDLP/P:b<./|o/-~f#r;'?,w2ge|@:`?Q >0,%?%P #|MltEB p`2nx7Jဦۈbx6$ dlb^c}t_2@*:qC!Á#ta9Hґ<>q \H:ұv ,)Hq%C;assets/images/availability/2-3d.gif000066600000004117151373621660013142 0ustar00GIF89ab$#'"*%".*'3/,61.:52;64?;8>:7A=:C?=EA>GC@IEBHCAMIFNIGKGENJHQMJQNKSOMTPNWSQUQNXTRYVS[WU]YW[XV^[Y_\Z`][a^[b_]da_c`^fc`gdbheckgeligkhfnkioljpmkqnltqovsqwtsyvu|yw{xv~{y|z}}{̓=ϐ6ԕ6ٗ4ڙ6ݚ4ҕ;Ԛ;ۜ:ˏ79ڡ?;<~˖E̖HΙJ˙LƑCҜK֜C̜SŜ]˝YڢDۥJԤUդXϠXBABƞdˢd̦lǡfԥcөdӫmͩsͫuӭsԲ}֯vմԶֹٻعԼּڿֻֿÜţʪˬɦαͭ˧αѶҴ־Ӻ! ,b$ hNћ5 \Ȑ:ijH߫Va͊VǏ @8 FP$ yǵ,I8s LU2$瀄'dHx䀧3IH s)U tG8 Jw"! #( @G4V,,ZrNkuVr ;1 s T50cc ıpȖ" a `Mo VKjIyOi:8@<:C?=@;9EA>EA>GC@IEBIEBKGEMIFMIFOKHQMJQNKTPNSOMWSPWTQYUSYVS[WU\XV[XU^[X]ZX`\Zb_]a^\da_c`^fb`gdbhecjfdkhflignjioljrompmkspntqovsqwtryvtxus|yw{xv}zy|z~}}}{Ϗ3˒?ٙ7ڠ=<ʔBΙKӜE—UƝ_٤MܢCϡ]Ҥ]AŞaɢcөgέyԭqӱ~Բ|յӳٻӼԽٽƝš̭εּ! ,t$ ؏\Ȑ*5Hᾅ7 F[( CȐ@q!́th .#h &@VBH*i Hc?.8Ep ( ~.@!'GDU lGf4:]b`l.07^ԹsQܘ(@#xx>TUO$܇P@4؜gR@wƸ&Ck;S@Z-LM7T!Q!d]9 7=Ky! f13 4 h B, T BvTip t_?dWK0*H @{`<@v5Zqa@" +pڌ@m@^֏(%Dki"} TB0@`C? CTC? C*/pZyN!AAΈE'!&މ&m#a ԃj}+ 4I UA)%x1Gԗ=@Nw.DH=! {A, dPy$G %!}[r3*6b {Ol2"7.@1C .&u'.B%8Ч[@IzC0ÌBM?OESM_#E4a7BP(< P@u!q95QB+ J?s CW_DzqrːSe BkD]4B \$9 ԫx @0iT*Bdo1X" YBDn,Dk5pMCCXE@B?dpBCpV? dH68@JT #u0]*" !~5c~`CDxb4 A(qР W0 gH8̡w@bK1"P$B2N%Dp8E)$R N-p"H(ƉWH2P!dm;fYdu/r4J8(RGPHB2B0΢-~1_B oN~5Y Sql,@K!Q ,,@6޲c.\sDH0ILc1(-YcB, Kd&C1a9ytfCh^jq"'-ِl8e?9 d4q A a(! Q$lEQb %@r"#-I^Ò,Kaʐ_ i2pKt=U"C܁΁!*4jŁ(ըHMM̚ U]:Աwp [W)9Vx5hc@;assets/images/availability/3-5d.gif000066600000004014151373621660013141 0ustar00GIF89ab#&!*%".)&2.+51.730952;64=96?:8A=;C?EA>GC@IEBJECKFDMIGLHENJHQMJRNKROLTQNTPMVSPVSQXUR]YWZWT^ZX_\Z`][b_]a^\da_fb`gdbhdcjgekhflignkioljpmkrnmtqospnurqwtrzwuxus{xv|yw}{y|z~}Ϗ3˒?ؗ6ۙ5֖:ԛ9ݞ9ڠ=9>~˕BȓCϘJ͙LӜE—UƝ_ܢC٤Mϡ]Ҥ]B@ŞaɢcЧeԨaԭoέyԭqӱ~Բ|յӳڻػӼٽԽƝŢơ̭εּ! ,b# f4Ȱ@O#ᐡ3%QVǏ `A@ 񠛏ZdM `/_sTB @FH} @|]ʁpͫYqTaT9x +ДY}ܔQcI)9TȩB8 yӸT@ ڨ`G,'Agpi"D\:DD |8 1 B 0L8h48h@r` ĐJ% !}C#z0@q5`J4q@@B4D`C!b|vt$}cR4O(y2%7D21&j$̐C~#P+pP3XGG!R-3A4 Q* tAX3?#u@8ДzVo>G ^З?|P,]'P''@fn( M  c8s5A+$9 Cp8ISA T B.%|&Tw[!ܑ4j#H4P8͡iRSÐ;$ I Ɠ 5cCU0G`$&CqBā1q Ei 11B9i'0U2H)Bv78^{7樧3ÎinM /MT|MǃTMM//= ҃D=H;=D>HRG<2IHO{,:/&$! Az6a < BЀIAA Esa ZA/L8B[B@ ?*ذ8LBA"ؐ 8{ p  . \8QG1lD&:Q$2xC P [T 0v_D_dP"2F- $EA>GC@IEBIEBKGDLGEMIFOKHOLIQMJQMJSOMUQOUROSPMWSPWTQXUSZWTYUS\YV[XU^ZX]ZW_\Y`][b_\a^\ea_c`^fb`gdbhecjfeligkhfnjholjqnlrompmktqospnvrqwtryvuxus{xv|yw}zy|z~}}{,4 H`Fk BBH"O3jȱG&ْE P9>ʜI/8\ɳF`ij@ѣl泩SapQ`~=ёQ iճV)6m_TK`nj1J%o^M:Xa M$ U?dUE#.xpMOvVqQF@Fݐ`Z`+?d\uIGVT1dQtAXJ@Amu;}aT=QMQsQ$t??5i2Q QKɑ1BA$IktcZT` Ov$Q`4QdQQظg7BG182q(!rq[}CmQHd̅<FO$GXd` e !0 :;9G@ve̠`l Y045`N,3B@&+ $zA,8yIp#$xR s@# W|O V# <  WI7l :p(AI|@J@rXPh#8QX" QǍWMI40xO'R<(yK`QRLe)5 Wq  ZQn "=>qQ3 Hq$*gu ȑU[X7D[$0y =$H6g Oa΢Hu2QF!GVPR#0[QH2&@Q"rc^ @dr/ ?H0l!ƭBT)QXp m# I[ # ZQHPAFA!ɢ(7D E9'ZЇ8nkA6X(+ҼYGA:Yܡ9v(H!  fQY Uv+ N$ ({$"%s2ш@"Sш;! m#u"O_ԩnKz2'+֮"Aownz\ 6w+<)^xg _wߵ)o{վ`+w?}Slo=yJ;[PlIw*fyB-0o}F4򮽣Oqv~㏿84T?K;E@>FA?GCAIEBJFCJFDHDALIFMIFNJHOLIQMKQMJSOMTQNSPNVRPUROWTQXTRYVSZWU]YW[XU_[Y^ZX_\Z`][b_]c_^da_fb`gdbjgekgfheckhfnkioljpmkqnmtqospourqwtrxusyvuzvu{xw}zy|z~|~}{ˏ7͓>ؙ7ؠ?<ʕD͘JӝMӜEƜ\̞Z͝TۥIAƞc̣bխoӨ`ΫuЬrղ}ӳټعռÜŢѶ׾! ,~$ (\*\ 6JHŋ=e:6A]`He'Hd ˗0#9f b.A% $A t*]*pF1&0 YhH:HO+XlAE~ Ȍd$ǩ͙DIԦ$тFR$WJD^RH>R9vAcMdTd!(oEtXP A)Q c8E0 Q* 9ɜkɫ2d(02)x@#JİIhu 8CWI&{ DspxtZSJ\B$0HF $!P^>4P I@Տ>(EB@ A  $!P%$?%cYBjE@ ZCR@B:mARM4nAh 4B #  @dtY$-p@ΐ4I?3*ArT A߬"k)ď bM$&P$A<$яP , DIB@GEc@2'$&@iBfԥ@48M$IhȕBQ0 td( IJ%&KP r4Pp0EHjT$Ot0s̛ XS?Ȑ@*Bi P@Ќɣ .A"[Wp @;$ J + I1I #O`? BuQ>w .AACB)$alX ,It-B Z Tf,deDw<)P, 5B8Ade"0R0,0PO# 4;˰K@Ћ8K1&2(a%H2/<$NR.3bO:о1)$IbJ-E"9E@k!Њ)DTV HK 3Ax$I@"*< PQƅrX%8 &+ؼH2hL6pHG8B9/rs\D~5X | -acQ5pɉ$$F0B"Ā%-bW9.YuФKф# aF,`ʅ4DXĒ"ܥ,+& D3لcN،+^M`|E,hMl+I\`;INl\H!p('X#ʂ4+Y i8cQфB#gzR! 5(-IU%:!NZX!(G ѐJde!@*s\HJS#$j?sT UkeQWͨŌ<2S y!S!9Ba)JͩJQ&\ B!Q $[q~Lĩ*+;IJ4 l?I*6%H٪GV]L {)ہrc@;assets/images/availability/not_available.gif000066600000002271151373621660015274 0ustar00GIF89a~$Ͽ񀀀```000꯯PPPΏ ppp@@@!,~$'dihlp,tm9'N$ Eݢ$PIΒt8$0V5RmEUҝ5Ky"j:dm-g(,ab#p<-y) [$V_(Lt#Vv vVN(q"R$S ~D":V #xÁͬ "{StVD&V|#Uߣv"7NX‡!8 㓠ֲz #-i<`ل'(JV6h۔P$PbވoOXy8r<|rK& ͲWuS:6`5R6R*hVjEQ)Ѭ :BBq! paGfbxQ3:c5 aq<'pjuPW k2CclԦ`[\#n]x"L#-5)=O6fC1 _CT}#e f%\# m@`t!v u@vG3Yܧ tSgJ(uP7IK84C3B@xѕL5} bB0@Ken"xr8 (Pi裐F*餔Vj饘f馜v駠Z:@-Z,* PB k ,`+ @p(@- @О-R@\ ,`B ;Kz+\PoxP+ B +p@. hm#dq[+s챳Vp$B1P(o|zг?\62 ``$ό1dP s]R3b9u m3&Ľݎ0mB%kp o[%t'~ 4 p #>6 {+֤zH k!K zB_.A󜷪ALONx/;assets/images/availability/7d.gif000066600000003442151373621660013007 0ustar00GIF89aK!"&!+&#.)&/+('" 2-+62/942;74=96?;8730A=:B>;C?=D@>EA>GC@IEBKGEHCAMIFMIFOJHOLIQMJSOMUQOTPMVSPWTRYUSYVSZVT\YW^[Y`][b_]ea_c`^fcagdbhecjfdlignkioljpmkrnmtqourqwtrxusyvu{xv~{y|{}}{Ϗ3˒?ؗ6ۙ5֖:ԛ9ݞ9ڠ=9>˕BȓCϘJ͙LӜE—UƝ_ܢC٤Mϡ]Ҥ]B@ŞaɢcЧeԨaέyԭpӱ~Բ|յӳڻػӼٽԽƝŢơ̭εּ! ,K!  (Ȱ ̡ŋ3bᡣG[h@G  ˗I()㸂c*sQp2@ SЈFKY$SPCzuf @5i2z*F4YGR<D0b-F\JZ7PtqބZL(x cEAɉRA::#c p j ZM 1%VOTAH OB XZ~+X㚂((!\">ð i4p> tpF/93f(!P 2F>S.iF-KAq\n0O`M@C t7/@QE?@O(VgȨAAy/\ hD=gQ`, $0 L3CAl0tFH0AE~ 89Clv Cp()Ј9o '1~2d7h =` qR1@WB搆{59$g P@Va%ÞŐY P'J2}PN &+pPL@'0C* //Q?#?i .<&t.̲-T4s-K3F: 1HDKD;FL; .蒑.L 3u l9:99Ž6D4!t(B? ;assets/images/availability/24h.gif000066600000003154151373621660013072 0ustar00GIF89aL# !"$&"+&#)%"+'$,'$'# .)&/+(0,)3/,2-*62/51.730;74:52=96?;8A=:B>;C?<@;9EA?GC@KGDIEBMIGMIFOKIQMKQMJRNLTPNSPMVRPWTQYUSZWU\XV[XV_[Ya][b_]b^\a^\da_c`^fcahebjgekhfligmjhqnlrompmktqourqzwuwts|yw~{z~|}{Ϗ3ȑ?͓>ؗ6ؘ4ݚ5֖:ԛ9ݞ9ڠ=9>ȓC˕B˘JϘIΘJϚNӜE—UƝ_ܢC٢L٦MϠ[΢_Ң\Ҧ]AB@ŞaɡaɢdЧeԨaԭoέyԭqԲ{Ұ}ӲԲ}вմմյڻػӻӼԼٽԽşƝŢơˬͭεԺ׾! ,L# o X8`Co#JME B8n5aɓ'>;Nh)qIE4 WT1`RNNn$P``5$2I\KD *uj: gNcDv nLޘ*IFIyxBv0?&KUZ`_DLO+P;0㏢ZD0' &D &2Ys+Ia,/\T"#7ID}P"uH#zDv@@'}PÑ Q49,rAhD4B2xVImTOX 8DM<`8I-XNC G[-AܡB 1Gw(%%J8SI|ruO=8`t 7^jѤI!q$Bx U`**h8M`i|a+ba9R@D;c @(_0Ft?L:M)£gИH,tgj뭸뮼k)M-!+4)c6>-"9K-GNuдm-}.K6FQ`q‡b$@iVt!B !IC4O_Xl)zLKt{V0A"dc;H_U,7 ZA 1ՊB*p#gԀWlCGh7.@,I!Kh>:IJuEu`04.@TuPqļ$(%5EMTCk$C!.͟K̗z\\͙DAZvq`l 4,&אy|IHfF * Uxza jB5Pr\ @^URdÜk PC%]晏2 čOzC}HѠ"S)B!Cr6KH7|c_ m\SY7T9>ز`'ۓ4ÚA>3jLAæ4Ҡ9ٹ[ l]/~ssi.er s!c³c֔ҍ&*{yspXϟdC7CwhǛҒgk;͑0%= }?{M`j#&H[q^?xb^jgn`$:HE.wcH 843Pŝ,y xnA~(Uhʹ/9C:2p$;SU͐*A:LS+ǯս\ٳ֣u 8o ܘGa։+qz$JOw 3[^Hy\KU.^9'{޻<|(@8 #7qD4ҽ2'!D#U(B%pppj֏(F1w<,ֲROD~Yn{khܭ$}>C׃J>9Af6 ҸEZGJBޠ&}O(, Y6ÜrxFHV*Gr"#扸n0sSfu()ljBmq#^16(^SjrQ!0>d7l⣑<ϦaUT6)k6y{1E2IκO~}WBsNl'as&Y6faS^kpXh_rV/+@![l~O7׍&+IJmR%,0(B.3Aqɱt6B ("".$ⳂZԙ((yhzjiY|g$H\}?hvt/rרo mt˒f(O/O$n\y0 s$=2AѼՋIk0PZd WM.fL7$&>'˵A vyޞɜ)fo̞5&4Ou\7M; 7 | ɹX\wHڙh?/)cB!ga@XGB~N8{^Y,*ףG% fUSj۠(+suM9ѠxvC2bj9w5XO)x* cTIYҤQ%M15ppfhj@4cMeՑfD[gd+el8_1d -}>T5~ )X?=#ΚݑZ&kޭJ7|n[_&LA͜$Dd0WN2v&*6$.'#i"2 dȀfТ7(}V}!icyZDG%'!p7د+|ٹ#CݖU0v_ʅ:T*+clLd6#d5UGj+ʷ%d$5LI'f4So(:i, ?+ΝC("љ7>c֋j})$>u`gyæر֮myH[&x\W29\kR{ҠR! 3(l{ 볽% ZŨ:굆=5.\F1~MX sQ:]zꏷ%]埡^406]$:YǔҨw~cxە$ewW'GOՑN@?1J۾\]u4?ts]64B6DcȐRZUGof\{ȡ}~U']u"BpQdCZ09Dol8IZZQ ]uQi&?Q%f<s ݊ك~:}v)&6Bk5ZQDH#pC9~{\Qx[ʅ˾~ڭLK |(UG,>O*~yi8x'Se}">\3UKv.Yp䟢wšXoo!&QUG7fՑ;UGppTuW)oUB?}|q$b%ˉ9EK$52@'! 7(ebϐFZ -fwZ:F#ǻYRkHv#VNͷY/ a-,bꍼ8R ƛx^)Ɔ9|4yIxED} p;~(ɪܺm߾}3ec}j_|+IK[9FHfyؙClfa{M#ej;`.cJ9WUo7.,*\& qrVWހ%P{tUݥKxXIw+6߻ȋ#њ/ZV wwG~9hmlnp1P~ᇻ<=Ȇ籈מ^򣫫|噻Ȧͬ: 4>x1֖ÁHLLdҬRu i󹓔ʎMWj1*3֤PxͰdMאsm,ri8000'G<5H};99Ѐe{k1_Q䬹ّ1@e p_ɒ[f"'uj"Gwe:::*97ܸ@n`"z"T<VYmxxp„ `w_;{Wu .n%SAgg(ku= }kniʮwGdձyEMT񺣳w~)l[rOIC3Q-+j1hATՑYuNpp \D(}7> x W!_v{]J?E__ xw g?؎wwhĉoy睫zĉE#aÆMČ-l1$DٳWNm^r$%$$HJJJ;fSN wܹswf\n #39(q.8ۑmg`b:3gM6)))ԧ>Zܾ1ꫯ.&kh*GZ@ \Oscpp ID- tXH-Y$q0G1-bK.=RYY*MDs>7ڧckg;Cܗ_LF}q뭷wС6A@0Mk"n}<O Order allow,deny Deny from all assets/images/facebox/loading.gif000066600000005317151373621660013052 0ustar00GIF89a 򺺺444ėTTT! NETSCAPE2.0! , H *\p hp"8G>D)R4CIË\9p:ȹs1_2`p` u< uSYڐkǞ`Fhvƴ6S>u+ryJ/QM.0@p_ ++/KY&]9ى Mr `ixr\˪ vfjMO&*Z؇o>;ܦŝ",,@CPؼrSE.ٴjTWYR Y+ѫKb ڌ! ,H* p:first-child{ margin-top:0; } #facebox .content > p:last-child{ margin-bottom:0; } #facebox .close{ position:absolute; top:5px; right:5px; padding:2px; width:8px; height:8px; background:url(../images/facebox/closelabel.png) no-repeat #FFF; opacity:0.3; } #facebox .close:hover{ opacity:1.0; } #facebox .close img{ opacity:0.3; } #facebox .close:hover img{ opacity:1.0; } #facebox .loading { text-align: center; } #facebox .image { text-align: center; } #facebox img { border: 0; margin: 0; } #facebox_overlay { z-index: 65558; position: fixed; top: 0px; left: 0px; height:100%; width:100%; } .facebox_hide { z-index:-100; } .facebox_overlayBG { background-color: #000; z-index: 99; } #facebox > span { display: block; margin: -25px 0 0 5px; position: relative; }assets/css/chosen-sprite.png000066600000003030151373621660012141 0ustar00PNG  IHDR<(tEXtSoftwareAdobe ImageReadyqe<"iTXtXML:com.adobe.xmp eNIDATx;H\A,"Ie# J" V%I!#MHHB@""%HQHg2ܻxYWs|2?gƊ?7˲<>c-Sn 8|W^yZSEG.(@v/5\h=5L&n)KZ"BE1% xYt0'j>q%[ Տ)-{Ca`N=o291c$5•e0!Y%x VA$ Ni.8'b=b=%a;ub{'cTo-SxSqcM˷6H aPl+U H,=N)Id7m-9R-Hу/!Vr7nAiQ qfNLZZ"_4qu)Nky/^O3sX /VsKI1UIb`|!g98LR=9.i 7lbF𻪤%_[( N&*`VӴ57P!aPFr KC9V$V_)5cYx9R<S1E5Zm;M%*amx&)8IENDB`assets/css/tipTip.css000066600000005002151373621660010634 0ustar00/* TipTip CSS - Version 1.2 */ #tiptip_holder { display: none; position: absolute; top: 0; left: 0; z-index: 99999; } #tiptip_holder.tip_top { padding-bottom: 5px; } #tiptip_holder.tip_bottom { padding-top: 5px; } #tiptip_holder.tip_right { padding-left: 5px; } #tiptip_holder.tip_left { padding-right: 5px; } #tiptip_content,#tiptip_title { font-size: 11px; color: #fff; text-shadow: 0 0 2px #000; padding: 4px 8px; border: 1px solid rgba(255,255,255,0.25); background-color: rgb(98,98,98); background-color: background-color: rgba(98,98,98,0.88); background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(transparent), to(#000)); border-radius: 3px; -webkit-border-radius: 3px; -moz-border-radius: 3px; box-shadow: 0 0 3px #555; -webkit-box-shadow: 0 0 3px #555; -moz-box-shadow: 0 0 3px #555; } #tiptip_arrow, #tiptip_arrow_inner { position: absolute; border-color: transparent; border-style: solid; border-width: 6px; height: 0; width: 0; } #tiptip_holder.tip_top #tiptip_arrow { border-top-color: #fff; border-top-color: rgba(255,255,255,0.35); } #tiptip_holder.tip_bottom #tiptip_arrow { border-bottom-color: #fff; border-bottom-color: rgba(255,255,255,0.35); } #tiptip_holder.tip_right #tiptip_arrow { border-right-color: #fff; border-right-color: rgba(255,255,255,0.35); } #tiptip_holder.tip_left #tiptip_arrow { border-left-color: #fff; border-left-color: rgba(255,255,255,0.35); } #tiptip_holder.tip_top #tiptip_arrow_inner { margin-top: -7px; margin-left: -6px; border-top-color: rgb(25,25,25); border-top-color: rgba(25,25,25,0.92); } #tiptip_holder.tip_bottom #tiptip_arrow_inner { margin-top: -5px; margin-left: -6px; border-bottom-color: rgb(25,25,25); border-bottom-color: rgba(25,25,25,0.92); } #tiptip_holder.tip_right #tiptip_arrow_inner { margin-top: -6px; margin-left: -5px; border-right-color: rgb(25,25,25); border-right-color: rgba(25,25,25,0.92); } #tiptip_holder.tip_left #tiptip_arrow_inner { margin-top: -6px; margin-left: -7px; border-left-color: rgb(25,25,25); border-left-color: rgba(25,25,25,0.92); } /* Webkit Hacks */ @media screen and (-webkit-min-device-pixel-ratio:0) { #tiptip_content,#tiptip_title { padding: 4px 8px 5px 8px; background-color: rgba(98,98,98,0.88); } #tiptip_holder.tip_bottom #tiptip_arrow_inner { background-color: rgba(98,98,98,0.88); } #tiptip_holder.tip_top #tiptip_arrow_inner { border-top-color: rgba(20,20,20,0.92); } } #tiptip_title {font-weight:bold;font-size:12px;background-color: rgba(45,45,45,0.88);}assets/css/validationEngine.jquery.css000066600000004635151373621660014174 0ustar00.inputContainer { position: relative; float: left; } .formError { position: absolute; top: 300px; left: 300px; display: block; z-index: 5000; cursor: pointer; } .ajaxSubmit { padding: 20px; background: #55ea55; border: 1px solid #999; display: none } .formError .formErrorContent { width: 100%; background: #ee0101; position:relative; z-index:5001; color: #fff; width: 150px; font-family: tahoma; font-size: 11px; border: 2px solid #ddd; box-shadow: 0 0 6px #000; -moz-box-shadow: 0 0 6px #000; -webkit-box-shadow: 0 0 6px #000; padding: 4px 10px 4px 10px; border-radius: 6px; -moz-border-radius: 6px; -webkit-border-radius: 6px; } .greenPopup .formErrorContent { background: #33be40; } .blackPopup .formErrorContent { background: #393939; color: #FFF; } .formError .formErrorArrow { width: 15px; margin: -2px 0 0 13px; position:relative; z-index: 5006; } .formError .formErrorArrowBottom { box-shadow: none; -moz-box-shadow: none; -webkit-box-shadow: none; margin: 0px 0 0 12px; top:2px; } .formError .formErrorArrow div { border-left: 2px solid #ddd; border-right: 2px solid #ddd; box-shadow: 0 2px 3px #444; -moz-box-shadow: 0 2px 3px #444; -webkit-box-shadow: 0 2px 3px #444; font-size: 0px; height: 1px; background: #ee0101; margin: 0 auto; line-height: 0; font-size: 0; display: block; } .formError .formErrorArrowBottom div { box-shadow: none; -moz-box-shadow: none; -webkit-box-shadow: none; } .greenPopup .formErrorArrow div { background: #33be40; } .blackPopup .formErrorArrow div { background: #393939; color: #FFF; } .formError .formErrorArrow .line10 { width: 15px; border: none; } .formError .formErrorArrow .line9 { width: 13px; border: none; } .formError .formErrorArrow .line8 { width: 11px; } .formError .formErrorArrow .line7 { width: 9px; } .formError .formErrorArrow .line6 { width: 7px; } .formError .formErrorArrow .line5 { width: 5px; } .formError .formErrorArrow .line4 { width: 3px; } .formError .formErrorArrow .line3 { width: 1px; border-left: 2px solid #ddd; border-right: 2px solid #ddd; border-bottom: 0 solid #ddd; } .formError .formErrorArrow .line2 { width: 3px; border: none; background: #ddd; } .formError .formErrorArrow .line1 { width: 1px; border: none; background: #ddd; } assets/css/.htaccess000066600000000177151373621660010457 0ustar00 Order allow,deny Deny from all assets/css/jquery.fancybox-1.3.4.css000066600000022207151373621660013161 0ustar00/* * FancyBox - jQuery Plugin * Simple and fancy lightbox alternative * * Examples and documentation at: http://fancybox.net * * Copyright (c) 2008 - 2010 Janis Skarnelis * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated. * * Version: 1.3.4 (11/11/2010) * Requires: jQuery v1.3+ * * Dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html */ #fancybox-loading { position: fixed; top: 50%; left: 50%; width: 40px; height: 40px; margin-top: -20px; margin-left: -20px; cursor: pointer; overflow: hidden !important; z-index: 1104; display: none; } #fancybox-loading div { position: absolute; top: 0; left: 0; width: 40px; height: 480px; background-image: url('../images/fancybox/fancybox.png'); } #fancybox-overlay { position: absolute; top: 0; left: 0; width: 100%; z-index: 1100; display: none; } #fancybox-tmp { padding: 0; margin: 0; border: 0; overflow: auto; display: none; } #fancybox-wrap { position: absolute; top: 0; left: 0; padding: 20px; z-index: 1101; outline: none; display: none; } #fancybox-outer { position: relative; width: 100%; height: 100%; background: #fff; } #fancybox-content { width: 0; height: 0; padding: 0; outline: none; position: relative; overflow: hidden; z-index: 1102; border: 0px solid #fff; } #fancybox-hide-sel-frame { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: transparent; z-index: 1101; } #fancybox-close { position: absolute; top: -15px; right: -15px; width: 30px; height: 30px; background: transparent url('../images/fancybox/fancybox.png') -40px 0px; cursor: pointer; z-index: 1103; display: none; } #fancybox-error { color: #444; font: normal 12px/20px Arial; padding: 14px; margin: 0; } #fancybox-img { width: 100%; height: 100%; padding: 0; margin: 0; border: none; outline: none; line-height: 0; vertical-align: top; } #fancybox-frame { width: 100%; height: 100%; border: none; display: block; } #fancybox-left, #fancybox-right { position: absolute; bottom: 0px; height: 100%; width: 35%; cursor: pointer; outline: none; background: transparent url('../images/fancybox/blank.gif') ; z-index: 1102; display: none; } #fancybox-left { left: 0px; } #fancybox-right { right: 0px; } #fancybox-left-ico, #fancybox-right-ico { position: absolute; top: 50%; left: -9999px; width: 30px; height: 30px; margin-top: -15px; cursor: pointer; z-index: 1102; display: block; } #fancybox-left-ico { background-image: url('../images/fancybox/fancybox.png'); background-position: -40px -30px; } #fancybox-right-ico { background-image: url('../images/fancybox/fancybox.png'); background-position: -40px -60px; } #fancybox-left:hover, #fancybox-right:hover { visibility: visible; /* IE6 */ } #fancybox-left:hover span { left: 20px; } #fancybox-right:hover span { left: auto; right: 20px; } .fancybox-bg { position: absolute; padding: 0; margin: 0; border: 0; width: 20px; height: 20px; z-index: 1001; } #fancybox-bg-n { top: -20px; left: 0; width: 100%; background-image: url('../images/fancybox/fancybox-x.png'); } #fancybox-bg-ne { top: -20px; right: -20px; background-image: url('../images/fancybox/fancybox.png'); background-position: -40px -162px; } #fancybox-bg-e { top: 0; right: -20px; height: 100%; background-image: url('../images/fancybox/fancybox-y.png'); background-position: -20px 0px; } #fancybox-bg-se { bottom: -20px; right: -20px; background-image: url('../images/fancybox/fancybox.png'); background-position: -40px -182px; } #fancybox-bg-s { bottom: -20px; left: 0; width: 100%; background-image: url('../images/fancybox/fancybox-x.png'); background-position: 0px -20px; } #fancybox-bg-sw { bottom: -20px; left: -20px; background-image: url('../images/fancybox/fancybox.png'); background-position: -40px -142px; } #fancybox-bg-w { top: 0; left: -20px; height: 100%; background-image: url('../images/fancybox/fancybox-y.png'); } #fancybox-bg-nw { top: -20px; left: -20px; background-image: url('../images/fancybox/fancybox.png'); background-position: -40px -122px; } #fancybox-title { font-family: Helvetica; /*font-size: 12px;*/ z-index: 1102; } .fancybox-title-inside { padding-bottom: 10px; text-align: center; color: #333; background: #fff; position: relative; } .fancybox-title-outside { padding-top: 10px; color: #fff; } .fancybox-title-over { position: absolute; bottom: 0; left: 0; color: #FFF; text-align: left; } #fancybox-title-over { padding: 10px; background-image: url('../images/fancybox/fancy_title_over.png'); display: block; } .fancybox-title-float { position: absolute; left: 0; bottom: -20px; height: 32px; } #fancybox-title-float-wrap { border: none; border-collapse: collapse; width: auto; } #fancybox-title-float-wrap td { border: none; white-space: nowrap; } #fancybox-title-float-left { padding: 0 0 0 15px; background: url('../images/fancybox/fancybox.png') -40px -90px no-repeat; } #fancybox-title-float-main { color: #FFF; line-height: 29px; font-weight: bold; padding: 0 0 3px 0; background: url('../images/fancybox/fancybox-x.png') 0px -40px; } #fancybox-title-float-right { padding: 0 0 0 15px; background: url('../images/fancybox/fancybox.png') -55px -90px no-repeat; } /* IE6 */ .fancybox-ie6 #fancybox-close { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/fancybox/fancy_close.png', sizingMethod='scale'); } .fancybox-ie6 #fancybox-left-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/fancybox/fancy_nav_left.png', sizingMethod='scale'); } .fancybox-ie6 #fancybox-right-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/fancybox/fancy_nav_right.png', sizingMethod='scale'); } .fancybox-ie6 #fancybox-title-over { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/fancybox/fancy_title_over.png', sizingMethod='scale'); zoom: 1; } .fancybox-ie6 #fancybox-title-float-left { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/fancybox/fancy_title_left.png', sizingMethod='scale'); } .fancybox-ie6 #fancybox-title-float-main { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/fancybox/fancy_title_main.png', sizingMethod='scale'); } .fancybox-ie6 #fancybox-title-float-right { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/fancybox/fancy_title_right.png', sizingMethod='scale'); } .fancybox-ie6 #fancybox-bg-w, .fancybox-ie6 #fancybox-bg-e, .fancybox-ie6 #fancybox-left, .fancybox-ie6 #fancybox-right, #fancybox-hide-sel-frame { height: expression(this.parentNode.clientHeight + "px"); } #fancybox-loading.fancybox-ie6 { position: absolute; margin-top: 0; top: expression( (-20 + (document.documentElement.clientHeight ? document.documentElement.clientHeight/2 : document.body.clientHeight/2 ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop )) + 'px'); } #fancybox-loading.fancybox-ie6 div { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/fancybox/fancy_loading.png', sizingMethod='scale'); } /* IE6, IE7, IE8 */ .fancybox-ie .fancybox-bg { background: transparent !important; } .fancybox-ie #fancybox-bg-n { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/fancybox/fancy_shadow_n.png', sizingMethod='scale'); } .fancybox-ie #fancybox-bg-ne { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/fancybox/fancy_shadow_ne.png', sizingMethod='scale'); } .fancybox-ie #fancybox-bg-e { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/fancybox/fancy_shadow_e.png', sizingMethod='scale'); } .fancybox-ie #fancybox-bg-se { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/fancybox/fancy_shadow_se.png', sizingMethod='scale'); } .fancybox-ie #fancybox-bg-s { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/fancybox/fancy_shadow_s.png', sizingMethod='scale'); } .fancybox-ie #fancybox-bg-sw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/fancybox/fancy_shadow_sw.png', sizingMethod='scale'); } .fancybox-ie #fancybox-bg-w { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/fancybox/fancy_shadow_w.png', sizingMethod='scale'); } .fancybox-ie #fancybox-bg-nw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/fancybox/fancy_shadow_nw.png', sizingMethod='scale'); }assets/css/chosen.css000066600000034032151373621660010647 0ustar00/* @group Base */ .chzn-container { /* font-size: 13px; */ position: relative; display: inline-block; zoom: 1; *display: inline; } .tabs select{ width:180px;} .chzn-container .chzn-drop { background: #fff; border: 1px solid #aaa; border-top: 0; position: absolute; top: 29px; left: 0; -webkit-box-shadow: 0 4px 5px rgba(0,0,0,.15); -moz-box-shadow : 0 4px 5px rgba(0,0,0,.15); -o-box-shadow : 0 4px 5px rgba(0,0,0,.15); box-shadow : 0 4px 5px rgba(0,0,0,.15); z-index: 999; } /* @end */ /* @group Single Chosen */ .chzn-container-single .chzn-single { background-color: #ffffff; filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0 ); background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #ffffff), color-stop(50%, #f6f6f6), color-stop(52%, #eeeeee), color-stop(100%, #f4f4f4)); background-image: -webkit-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); background-image: -moz-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); background-image: -o-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); background-image: -ms-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); background-image: linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); -webkit-border-radius: 5px; -moz-border-radius : 5px; border-radius : 5px; -moz-background-clip : padding; -webkit-background-clip: padding-box; background-clip : padding-box; border: 1px solid #aaaaaa; -webkit-box-shadow: 0 0 3px #ffffff inset, 0 1px 1px rgba(0,0,0,0.1); -moz-box-shadow : 0 0 3px #ffffff inset, 0 1px 1px rgba(0,0,0,0.1); box-shadow : 0 0 3px #ffffff inset, 0 1px 1px rgba(0,0,0,0.1); display: block; overflow: visible !important; white-space: nowrap; position: relative; height: 23px; line-height: 24px; padding: 0 0 0 8px; color: #444444; text-decoration: none; } .chzn-container-single .chzn-single span { margin-right: 26px; display: block; overflow: hidden; white-space: nowrap; -o-text-overflow: ellipsis; -ms-text-overflow: ellipsis; text-overflow: ellipsis; } .chzn-container-single .chzn-single abbr { display: block; position: absolute; right: 26px; top: 6px; width: 12px; height: 13px; /* font-size: 1px; */ background: url(chosen-sprite.png) right top no-repeat; } .chzn-container-single .chzn-single abbr:hover { background-position: right -11px; } .chzn-container-single .chzn-single div { position: absolute; right: 0; top: 0; display: block; height: 100%; width: 18px; } .chzn-container-single .chzn-single div b { background: url('chosen-sprite.png') no-repeat 0 0; display: block; width: 100%; height: 100%; } .chzn-container-single .chzn-search { padding: 3px 4px; position: relative; margin: 0; white-space: nowrap; z-index: 1010; } .chzn-container-single .chzn-search input { background: #fff url('chosen-sprite.png') no-repeat 100% -22px; background: url('chosen-sprite.png') no-repeat 100% -22px, -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff)); background: url('chosen-sprite.png') no-repeat 100% -22px, -webkit-linear-gradient(top, #eeeeee 1%, #ffffff 15%); background: url('chosen-sprite.png') no-repeat 100% -22px, -moz-linear-gradient(top, #eeeeee 1%, #ffffff 15%); background: url('chosen-sprite.png') no-repeat 100% -22px, -o-linear-gradient(top, #eeeeee 1%, #ffffff 15%); background: url('chosen-sprite.png') no-repeat 100% -22px, -ms-linear-gradient(top, #eeeeee 1%, #ffffff 15%); background: url('chosen-sprite.png') no-repeat 100% -22px, linear-gradient(top, #eeeeee 1%, #ffffff 15%); margin: 1px 0; padding: 4px 20px 4px 5px; outline: 0; border: 1px solid #aaa; font-family: sans-serif; font-size: 1em; } .chzn-container-single .chzn-drop { -webkit-border-radius: 0 0 4px 4px; -moz-border-radius : 0 0 4px 4px; border-radius : 0 0 4px 4px; -moz-background-clip : padding; -webkit-background-clip: padding-box; background-clip : padding-box; } /* @end */ .chzn-container-single-nosearch .chzn-search input { position: absolute; left: -9000px; } /* @group Multi Chosen */ .chzn-container-multi .chzn-choices { background-color: #fff; background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff)); background-image: -webkit-linear-gradient(top, #eeeeee 1%, #ffffff 15%); background-image: -moz-linear-gradient(top, #eeeeee 1%, #ffffff 15%); background-image: -o-linear-gradient(top, #eeeeee 1%, #ffffff 15%); background-image: -ms-linear-gradient(top, #eeeeee 1%, #ffffff 15%); background-image: linear-gradient(top, #eeeeee 1%, #ffffff 15%); border: 1px solid #aaa; margin: 0; padding: 0; cursor: text; overflow: hidden; height: auto !important; height: 1%; position: relative; } .chzn-container-multi .chzn-choices li { float: left; list-style: none; } .chzn-container-multi .chzn-choices .search-field { white-space: nowrap; margin: 0; padding: 0; } .chzn-container-multi .chzn-choices .search-field input { color: #666; background: transparent !important; border: 0 !important; font-family: sans-serif; font-size: 100%; height: 15px; padding: 5px; margin: 1px 0; outline: 0; -webkit-box-shadow: none; -moz-box-shadow : none; -o-box-shadow : none; box-shadow : none; } .chzn-container-multi .chzn-choices .search-field .default { color: #999; } .chzn-container-multi .chzn-choices .search-choice { -webkit-border-radius: 3px; -moz-border-radius : 3px; border-radius : 3px; -moz-background-clip : padding; -webkit-background-clip: padding-box; background-clip : padding-box; background-color: #e4e4e4; filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f4f4f4', endColorstr='#eeeeee', GradientType=0 ); background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee)); background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); background-image: -o-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); background-image: -ms-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); -webkit-box-shadow: 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05); -moz-box-shadow : 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05); box-shadow : 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05); color: #333; border: 1px solid #aaaaaa; line-height: 13px; padding: 3px 20px 3px 5px; margin: 3px 0 3px 5px; position: relative; cursor: default; } .chzn-container-multi .chzn-choices .search-choice-focus { background: #d4d4d4; } .chzn-container-multi .chzn-choices .search-choice .search-choice-close { display: block; position: absolute; right: 3px; top: 4px; width: 12px; height: 13px; font-size: 1px; background: url(chosen-sprite.png) right top no-repeat; } .chzn-container-multi .chzn-choices .search-choice .search-choice-close:hover { background-position: right -11px; } .chzn-container-multi .chzn-choices .search-choice-focus .search-choice-close { background-position: right -11px; } /* @end */ /* @group Results */ .chzn-container .chzn-results { margin: 0 4px 4px 0; max-height: 240px; padding: 0 0 0 4px; position: relative; overflow-x: hidden; overflow-y: auto; } .chzn-container-multi .chzn-results { margin: -1px 0 0; padding: 0; } .chzn-container .chzn-results li { display: none; line-height: 15px; padding: 5px 6px; margin: 0; list-style: none; } .chzn-container .chzn-results .active-result { cursor: pointer; display: list-item; } .chzn-container .chzn-results .highlighted { background-color: #3875d7; filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#3875d7', endColorstr='#2a62bc', GradientType=0 ); background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc)); background-image: -webkit-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: -moz-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: -o-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: -ms-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: linear-gradient(top, #3875d7 20%, #2a62bc 90%); color: #fff; } .chzn-container .chzn-results li em { background: #feffde; font-style: normal; } .chzn-container .chzn-results .highlighted em { background: transparent; } .chzn-container .chzn-results .no-results { background: #f4f4f4; display: list-item; } .chzn-container .chzn-results .group-result { cursor: default; color: #999; font-weight: bold; } .chzn-container .chzn-results .group-option { padding-left: 15px; } .chzn-container-multi .chzn-drop .result-selected { display: none; } .chzn-container .chzn-results-scroll { background: white; margin: 0 4px; position: absolute; text-align: center; width: 321px; /* This should by dynamic with js */ z-index: 1; } .chzn-container .chzn-results-scroll span { display: inline-block; height: 17px; text-indent: -5000px; width: 9px; } .chzn-container .chzn-results-scroll-down { bottom: 0; } .chzn-container .chzn-results-scroll-down span { background: url('chosen-sprite.png') no-repeat -4px -3px; } .chzn-container .chzn-results-scroll-up span { background: url('chosen-sprite.png') no-repeat -22px -3px; } /* @end */ /* @group Active */ .chzn-container-active .chzn-single { -webkit-box-shadow: 0 0 5px rgba(0,0,0,.3); -moz-box-shadow : 0 0 5px rgba(0,0,0,.3); -o-box-shadow : 0 0 5px rgba(0,0,0,.3); box-shadow : 0 0 5px rgba(0,0,0,.3); border: 1px solid #5897fb; } .chzn-container-active .chzn-single-with-drop { border: 1px solid #aaa; -webkit-box-shadow: 0 1px 0 #fff inset; -moz-box-shadow : 0 1px 0 #fff inset; -o-box-shadow : 0 1px 0 #fff inset; box-shadow : 0 1px 0 #fff inset; background-color: #eee; filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0 ); background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #eeeeee), color-stop(80%, #ffffff)); background-image: -webkit-linear-gradient(top, #eeeeee 20%, #ffffff 80%); background-image: -moz-linear-gradient(top, #eeeeee 20%, #ffffff 80%); background-image: -o-linear-gradient(top, #eeeeee 20%, #ffffff 80%); background-image: -ms-linear-gradient(top, #eeeeee 20%, #ffffff 80%); background-image: linear-gradient(top, #eeeeee 20%, #ffffff 80%); -webkit-border-bottom-left-radius : 0; -webkit-border-bottom-right-radius: 0; -moz-border-radius-bottomleft : 0; -moz-border-radius-bottomright: 0; border-bottom-left-radius : 0; border-bottom-right-radius: 0; } .chzn-container-active .chzn-single-with-drop div { background: transparent; border-left: none; } .chzn-container-active .chzn-single-with-drop div b { background-position: -18px 1px; } .chzn-container-active .chzn-choices { -webkit-box-shadow: 0 0 5px rgba(0,0,0,.3); -moz-box-shadow : 0 0 5px rgba(0,0,0,.3); -o-box-shadow : 0 0 5px rgba(0,0,0,.3); box-shadow : 0 0 5px rgba(0,0,0,.3); border: 1px solid #5897fb; } .chzn-container-active .chzn-choices .search-field input { color: #111 !important; } /* @end */ /* @group Disabled Support */ .chzn-disabled { cursor: default; opacity:0.5 !important; } .chzn-disabled .chzn-single { cursor: default; } .chzn-disabled .chzn-choices .search-choice .search-choice-close { cursor: default; } /* @group Right to Left */ .chzn-rtl { text-align: right; } .chzn-rtl .chzn-single { padding: 0 8px 0 0; overflow: visible; } .chzn-rtl .chzn-single span { margin-left: 26px; margin-right: 0; direction: rtl; } .chzn-rtl .chzn-single div { left: 3px; right: auto; } .chzn-rtl .chzn-single abbr { left: 26px; right: auto; } .chzn-rtl .chzn-choices .search-field input { direction: rtl; } .chzn-rtl .chzn-choices li { float: right; } .chzn-rtl .chzn-choices .search-choice { padding: 3px 5px 3px 19px; margin: 3px 5px 3px 0; } .chzn-rtl .chzn-choices .search-choice .search-choice-close { left: 4px; right: auto; background-position: right top;} .chzn-rtl.chzn-container-single .chzn-results { margin: 0 0 4px 4px; padding: 0 4px 0 0; } .chzn-rtl .chzn-results .group-option { padding-left: 0; padding-right: 15px; } .chzn-rtl.chzn-container-active .chzn-single-with-drop div { border-right: none; } .chzn-rtl .chzn-search input { background: #fff url('chosen-sprite.png') no-repeat -38px -22px; background: url('chosen-sprite.png') no-repeat -38px -22px, -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff)); background: url('chosen-sprite.png') no-repeat -38px -22px, -webkit-linear-gradient(top, #eeeeee 1%, #ffffff 15%); background: url('chosen-sprite.png') no-repeat -38px -22px, -moz-linear-gradient(top, #eeeeee 1%, #ffffff 15%); background: url('chosen-sprite.png') no-repeat -38px -22px, -o-linear-gradient(top, #eeeeee 1%, #ffffff 15%); background: url('chosen-sprite.png') no-repeat -38px -22px, -ms-linear-gradient(top, #eeeeee 1%, #ffffff 15%); background: url('chosen-sprite.png') no-repeat -38px -22px, linear-gradient(top, #eeeeee 1%, #ffffff 15%); padding: 4px 5px 4px 20px; direction: rtl; } /* @end */ /* @group Select all options */ .chzn-select-all { background: #f8f8f8; border-top: 1px solid #ededed; color: #346f9b; cursor:pointer; display: block; font-size: 12px; font-weight: bold; padding: 5px 6px; text-align: center; text-decoration: none; } /* @end */ /* overwrite the element.style only necessary for the beez standard template, you may remove it */ div.moduletable_js div.slide, div.moduletable_js div.module_content{ overflow:visible !important; } assets/css/index.html000066600000000000151373621660010637 0ustar00assets/css/vtip.css000066600000000423151373621660010347 0ustar00p#vtip { display: none; position: absolute; padding: 10px; left: 5px; font-size: 1.1em; background-color: #fefefe; border: 1px solid #a6c9e2; -moz-border-radius: 5px; -webkit-border-radius: 5px; z-index: 9999 } p#vtip #vtipArrow { position: absolute; top: -10px; left: 15px }assets/css/ui/jquery.ui.datepicker.css000066600000007735151373621660014064 0ustar00/* * jQuery UI Datepicker 1.8.14 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Datepicker#theming */ .ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } .ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } .ui-datepicker .ui-datepicker-prev { left:2px; } .ui-datepicker .ui-datepicker-next { right:2px; } .ui-datepicker .ui-datepicker-prev-hover { left:1px; } .ui-datepicker .ui-datepicker-next-hover { right:1px; } .ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } .ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } .ui-datepicker select.ui-datepicker-month-year {width: 100%;} .ui-datepicker select.ui-datepicker-month, .ui-datepicker select.ui-datepicker-year { width: 49%;} .ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } .ui-datepicker td { border: 0; padding: 1px; } .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } .ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } /* with multiple calendars */ .ui-datepicker.ui-datepicker-multi { width:auto; } .ui-datepicker-multi .ui-datepicker-group { float:left; } .ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } .ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } .ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } .ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } .ui-datepicker-row-break { clear:both; width:100%; font-size:0em; } /* RTL support */ .ui-datepicker-rtl { direction: rtl; } .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } .ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } .ui-datepicker-rtl .ui-datepicker-group { float:right; } .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ .ui-datepicker-cover { display: none; /*sorry for IE5*/ display/**/: block; /*sorry for IE5*/ position: absolute; /*must have*/ z-index: -1; /*must have*/ filter: mask(); /*must have*/ top: -4px; /*must have*/ left: -4px; /*must have*/ width: 200px; /*must have*/ height: 200px; /*must have*/ }assets/css/ui/images/ui-bg_flat_0_aaaaaa_40x100.png000066600000000264151373621660015657 0ustar00PNG  IHDR(ddrz{IDATh1 17Y$t3;_TUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTüŝc)IENDB`assets/css/ui/images/ui-icons_454545_256x240.png000066600000010421151373621660014634 0ustar00PNG  IHDRIJPLTEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEڲNtRNS2P."Tp@f` <BHJZ&0R,4j8D|($ blߝF>n~hhHIDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;PZsVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ JҸٻ9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}Q3.Nس})>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }i`;ADm8n:cfA@s7L Z/..h8or? N93B~o_'`opO- :TG L;7]`B%˛>*wTpM0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(rۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6GFZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5av]m1+3y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m=i0ci9}oI qT]W%.(؅]z\x f"]o'u䫵tk{v;AC3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L0 QiH2;yTOok;ע ٶ`RNg{zy!Kxm?A(vU~mL(`o/!nmX-{v[ dw=n「sdwzn(}Oy~ m ?XU;,V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?sIDAT81 0Cџ $CB}1@)e_ƅ`I8-%cM0 )" LIENDB`assets/css/ui/images/ui-bg_highlight-soft_75_cccccc_1x100.png000066600000000145151373621660017674 0ustar00PNG  IHDRdG,Z`,IDATcx&!DJqш/Cc ;:*COIENDB`assets/css/ui/images/ui-icons_2e83ff_256x240.png000066600000010421151373621660015057 0ustar00PNG  IHDRIJPLTE...............................................................................%̘NtRNS2P."Tp@f` <BHJZ&0R,4j8D|($ blߝF>n~hhHIDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;PZsVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ JҸٻ9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}Q3.Nس})>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }i`;ADm8n:cfA@s7L Z/..h8or? N93B~o_'`opO- :TG L;7]`B%˛>*wTpM0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(rۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6GFZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5av]m1+3y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m=i0ci9}oI qT]W%.(؅]z\x f"]o'u䫵tk{v;AC3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L0 QiH2;yTOok;ע ٶ`RNg{zy!Kxm?A(vU~mL(`o/!nmX-{v[ dw=n「sdwzn(}Oy~ m ?XU;,V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?s Order allow,deny Deny from all assets/css/ui/images/ui-bg_glass_75_e6e6e6_1x400.png000066600000000156151373621660015671 0ustar00PNG  IHDRoX 5IDAT81 yUXHa@[{UUu@7 DFIENDB`assets/css/ui/images/ui-icons_888888_256x240.png000066600000010421151373621660014661 0ustar00PNG  IHDRIJPLTE{NtRNS2P."Tp@f` <BHJZ&0R,4j8D|($ blߝF>n~hhHIDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;PZsVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ JҸٻ9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}Q3.Nس})>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }i`;ADm8n:cfA@s7L Z/..h8or? N93B~o_'`opO- :TG L;7]`B%˛>*wTpM0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(rۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6GFZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5av]m1+3y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m=i0ci9}oI qT]W%.(؅]z\x f"]o'u䫵tk{v;AC3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L0 QiH2;yTOok;ע ٶ`RNg{zy!Kxm?A(vU~mL(`o/!nmX-{v[ dw=n「sdwzn(}Oy~ m ?XU;,V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?sn~hhHIDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;PZsVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ JҸٻ9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}Q3.Nس})>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }i`;ADm8n:cfA@s7L Z/..h8or? N93B~o_'`opO- :TG L;7]`B%˛>*wTpM0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(rۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6GFZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5av]m1+3y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m=i0ci9}oI qT]W%.(؅]z\x f"]o'u䫵tk{v;AC3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L0 QiH2;yTOok;ע ٶ`RNg{zy!Kxm?A(vU~mL(`o/!nmX-{v[ dw=n「sdwzn(}Oy~ m ?XU;,V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?sn~hhHIDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;PZsVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ JҸٻ9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}Q3.Nس})>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }i`;ADm8n:cfA@s7L Z/..h8or? N93B~o_'`opO- :TG L;7]`B%˛>*wTpM0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(rۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6GFZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5av]m1+3y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m=i0ci9}oI qT]W%.(؅]z\x f"]o'u䫵tk{v;AC3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L0 QiH2;yTOok;ע ٶ`RNg{zy!Kxm?A(vU~mL(`o/!nmX-{v[ dw=n「sdwzn(}Oy~ m ?XU;,V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?s Order allow,deny Deny from all assets/css/ui/jquery.ui.all.css000066600000000443151373621660012506 0ustar00/* * jQuery UI CSS Framework 1.8.14 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Theming */ @import "jquery.ui.base.css"; @import "jquery.ui.theme.css"; assets/css/ui/jquery.ui.core.css000066600000002663151373621660012674 0ustar00/* * jQuery UI CSS Framework 1.8.14 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Theming/API */ /* Layout helpers ----------------------------------*/ .ui-helper-hidden { display: none; } .ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } .ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } .ui-helper-clearfix { display: inline-block; } /* required comment for clearfix to work in Opera \*/ * html .ui-helper-clearfix { height:1%; } .ui-helper-clearfix { display:block; } /* end clearfix */ .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } /* Interaction Cues ----------------------------------*/ .ui-state-disabled { cursor: default !important; } /* Icons ----------------------------------*/ /* states and images */ .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } /* Misc visuals ----------------------------------*/ /* Overlays */ .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } assets/css/vmsite-rtl.css000066600000000201151373621660011465 0ustar00/** * Main CSS file for the "default (right to left)" theme for VirtueMart * @copyright 2006-2008 soeren * @license GNU/GPL * */assets/css/vmpanels.css000066600000003375151373621660011223 0ustar00/** * * Implement JPane panels in the frontend * * @package VirtueMart * @subpackage Templates * @author Oscar van Eijk * @link http://www.virtuemart.net * @copyright Copyright (c) 2004 - 2010 VirtueMart Team. All rights reserved. * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php * VirtueMart is free software. This version may have been modified pursuant * to the GNU General Public License, and as distributed it includes or * is derivative of works licensed under the GNU General Public License or * other free or open source software licenses. * @version $Id$ */ /** * Sliders */ .pane-sliders .title { margin: 0; padding: 2px; color: #666; cursor: pointer; } .pane-sliders .panel { border: 1px solid #ccc; margin-bottom: 3px; } .pane-sliders .panel h3 { background: #f6f6f6; color: #666 } .pane-sliders .content { background: #f6f6f6; } .pane-sliders .adminlist { border: 0 none; } .pane-sliders .adminlist td { border: 0 none; } .jpane-toggler span { background: transparent url(images/j_arrow.png) 5px 50% no-repeat; padding-left: 20px; } .jpane-toggler-down span { background: transparent url(images/j_arrow_down.png) 5px 50% no-repeat; padding-left: 20px; } .jpane-toggler-down { border-bottom: 1px solid #ccc; } /** * Tabs */ dl.tabs { float: left; margin: 10px 0 -1px 0; z-index: 50; } dl.tabs dt { float: left; padding: 4px 10px; border-left: 1px solid #ccc; border-right: 1px solid #ccc; border-top: 1px solid #ccc; margin-left: 3px; background: #f0f0f0; color: #666; } dl.tabs dt.open { background: #F9F9F9; border-bottom: 1px solid #F9F9F9; z-index: 100; color: #000; } div.current { clear: both; border: 1px solid #ccc; padding: 10px 10px; } div.current dd { padding: 0; margin: 0; } assets/css/validationEngine.template.css000066600000002640151373621660014462 0ustar00/* body { background: #ececec; } */ form.formular { font-family: tahoma, verdana, "sans-serif"; font-size: 12px; padding: 20px; border: 1px solid #A5A8B8; width: 300px; margin: 0 auto; } .formular fieldset { margin-top: 20px; padding: 15px; border: 1px solid #B5B8C8; } .formular legend { font-size: 12px; color: #15428B; font-weight: 900; } .formular fieldset label { float: none; text-align: inherit; width: auto; } .formular label span { color: #000; } .formular input,.formular select,.formular textarea { display: block; margin-bottom: 5px; } .formular .text-input { width: 250px; color: #555; padding: 4px; border: 1px solid #B5B8C8; font-size: 14px; margin-top: 4px; background: #FFF repeat-x; } .formular textarea { width: 250px; height: 70px; color: #555; padding: 4px; border: 1px solid #B5B8C8; font-size: 14px; margin-top: 4px; background: #FFF repeat-x; } .formular .infos { background: #FFF; color: #333; font-size: 12px; padding: 10px; margin-bottom: 10px; } .formular span.checkbox,.formular .checkbox { display: inline; } .formular .submit { border: 1px solid #AAA; padding: 4px; margin-top: 20px; float: right; text-decoration: none; cursor: pointer; } .formular hr { clear: both; visibility: hidden; } .formular .fc-error { width: 350px; color: 555; padding: 4px; border: 1px solid #B5B8C8; font-size: 12px; margin-bottom: 15px; background: #FFEAEA; }assets/css/vmsite-ltr.css000066600000060150151373621660011476 0ustar00.clr{clear:both;overflow:hidden;} .general-bg,input.custom-attribute,input.quantity-input,.manufacturer-product-link a,a.ask-a-question,input.vm-default,a.product-details,a.details,div.details,button.default{background:#e8e8e8 url(../images/vmgeneral/backgrounds.png) top repeat-x;border:solid #CAC9C9 1px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;color:#777;text-decoration:none;padding:5px 5px 4px;} span.custom-variant-inputbox input.custom-attribute:hover,span.quantity-box input.quantity-input:hover,input.vm-default:hover,span.quantity-box input.quantity-input:hover,.ask-a-question-view input.counter:hover,.ask-a-question-view input#email:hover,table.user-details input:hover,a.ask-a-question:hover,a.details:hover,div.details:hover,a.product-details:hover,button.default:hover{background:#e8e8e8 url(../images/vmgeneral/backgrounds.png) repeat-x;background-position:0 -40px;color:#000;text-decoration:none;} .productdetails-view .spacer-buy-area{padding:0 0 0 12px;} .back-to-category {float:right;} .product-neighbours{color:#777;margin:0 0 15px;} .product-neighbours a.next-page{background:url(../images/vmgeneral/next_16x16.png) no-repeat right;padding-right:30px;line-height:20px;float:right;} .product-neighbours a.previous-page{background:url(../images/vmgeneral/previous_16x16.png) no-repeat left;padding-left:30px;line-height:20px;float:left;} .productdetails-view h1{font-size:22px;margin:0 0 6px;padding:0;} .productdetails-view .product-short-description{margin:0 0 15px;padding:0;} .productdetails-view .product-description,.product-fields{margin:15px 0;} span.title{font-weight:700;display:block;border-bottom:solid #CAC9C9 1px;font-size:14px;margin:0 0 6px;} .product-packaging{margin:15px 0 0;} .icons{text-align:right;float:right;margin:4px 0 10px 30px;} .additional-images img{margin-right:8px;width:50px;height:auto;} .product-price{margin:0 0 15px;} .price-crossed div.PricebasePriceWithTax .PricebasePriceWithTax{text-decoration: line-through;} .productdetails-view .addtocart-bar{margin:15px 0 0;padding:0 0 0 38px;} .availability{text-align:center;margin:15px 0 0;} .customer-reviews h4{border-bottom:solid #CAC9C9 1px;font-size:14px;margin:0 0 10px;padding:0 0 6px;} .write-reviews{text-align:center;margin:20px 0 0;} .write-reviews h4{text-align:left;} .write-reviews h4 span{font-size:12px;font-weight:400;margin-left:8px;} .write-reviews span.step{font-weight:700;display:inline-block;margin:0 0 8px;} .write-reviews ul.rating{text-align:center;margin:0 0 20px;padding:0;} .write-reviews ul.rating li{display:inline-block;list-style:none;text-align:center;padding:0 5px;} .write-reviews ul.rating li span{display:block;} .write-reviews textarea.virtuemart{margin-bottom:6px;display:inline-block;} .list-reviews .normal{border:solid #CAC9C9 1px;margin-bottom:8px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;padding:12px;} .list-reviews .normal blockquote,.list-reviews .highlight blockquote{margin-top:12px;font-size:12px;word-wrap:break-word;} .list-reviews .normal blockquote:before,.list-reviews .highlight blockquote:before{content:open-quote;font-weight:700;font-size:24px;padding-right:6px;} .list-reviews .normal blockquote:after,.list-reviews .highlight blockquote:after{content:close-quote;font-weight:700;font-size:24px;padding-left:6px;} .list-reviews .highlight{background:#f7f6f6;border:solid #CAC9C9 1px;margin-bottom:8px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;padding:12px;} .list-reviews span.date{float:right;display:block;color:#777;border-left:solid #CAC9C9 1px;border-bottom:solid #CAC9C9 1px;position:relative;top:-12px;right:-12px;font-size:10px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;padding:4px 6px 2px;} span.variant-dropdown{width:150px;float:left;display:block;margin-bottom:5px;} span.variant-dropdown select{width:150px;} span.custom-variant-inputbox{width:152px;float:left;display:block;margin-bottom:5px;} input.custom-attribute{width:140px;} span.quantity-box{float:left;width:27px;padding-top:5px;} input.quantity-input{height:19px;width:25px;text-align:center;font-weight:700;padding:2px;} span.quantity-controls{width:15px;float:left;padding-top:2px;margin:0 0 0 10px;} span.quantity-controls input.quantity-controls{height:14px;border:none;width:15px;color:transparent} span.quantity-controls input.quantity-plus{background:url(../images/vmgeneral/quantity-controls.png) repeat-x;margin-bottom:2px;} span.quantity-controls input.quantity-minus{background:url(../images/vmgeneral/quantity-controls.png) repeat-x;background-position:15px 0;} .addtocart-bar{margin:0;padding:0;} span.addtocart-button{width:152px;float:left;margin:0 0 0 10px;} span.cart-images img { float: left; margin: 0; width: 45px; } span.addtocart-button input.addtocart-button,span.addtocart-button input.notify-button{width:152px;background:#e8e8e8 url(../images/vmgeneral/backgrounds.png) top repeat-x;background-position:0 -160px;color:#fff;border:solid #00a000 1px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;font-size:14px;cursor:pointer;height:34px;text-align:center;letter-spacing:1px;padding:4px 5px;} span.addtocart-button input.addtocart-button-disabled {width:auto;background:#f2f2f2 top repeat-x;border:solid #333 1px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;font-size:14px;cursor:pointer;height:34px;text-align:center;letter-spacing:1px;padding:4px 5px;color:#333;margin:10px 0px 0px 0px;} .category-view h4{font-size:14px;margin:0;padding:0;} .category-view .row .category .spacer h2{margin:0;padding:0;} .category-view .row .category .spacer h2 a{font-size:14px;display:block;text-align:center;} .category-view .row .category .spacer h2 a img{margin-top:6px;max-width:100%;height:auto;} .featured-view h4,.latest-view h4,.topten-view h4,.recent-view h4,.related-products-view h4{font-size:14px;margin:0 0 8px;padding:0;} .browse-view h1{font-size:16px;margin:0 0 8px;padding:0;} .orderby-displaynumber{border-bottom:solid #E9E8E8 1px;border-top:solid #E9E8E8 1px;margin:10px 0;padding:10px 0;} .orderlistcontainer{font-size:12px;display:inline-block;text-decoration:none;margin:0 15px 0 0;} .orderlistcontainer div.activeOrder{background:#FFF top right no-repeat url(../images/vmgeneral/arrow_down.png);cursor:pointer;border:solid #CAC9C9 1px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;font-size:12px;padding:2px 24px 1px 12px;} .orderlistcontainer a{text-decoration:none;display:block;} .orderlistcontainer a :hover{text-decoration:none;display:block;color:#EEE;background:#777;} .orderlistcontainer div.orderlist{display:none;position:absolute;border:solid #CAC9C9 1px;background:#FFF;cursor:pointer;z-index: 1;} .orderlistcontainer div.orderlist div{padding:2px 12px 1px;} .orderlistcontainer div.orderlist div:hover{color:#EEE;background:#CAC9C9;} .ask-a-question-view .product-summary{border-bottom:solid #CAC9C9 1px;margin:25px 0 0;padding:0 0 10px;} .ask-a-question-view .product-summary h2{font-size:16px;margin:0;padding:0;} .ask-a-question-view .product-summary .short-description{margin-top:6px;} .ask-a-question-view .product-summary img.product-image{max-width:100%;max-height:100%;width:auto;height:auto;} .ask-a-question-view .form-field textarea.field{width:394px;background:#fff url(../images/vmgeneral/default_bg.jpg) bottom repeat-x;border:solid #CAC9C9 1px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;color:#777;text-align:left;padding:12px;} .ask-a-question-view .form-field textarea.field:hover{background:#fff url(../images/vmgeneral/default_hover_bg.jpg) top repeat-x;color:#000;} .ask-a-question-view .form-field .submit{width:418px;} .ask-a-question-view input.counter,.ask-a-question-view input#name,.ask-a-question-view input#email{background:#e8e8e8 url(../images/vmgeneral/backgrounds.png) top repeat-x;border:solid #ccc 1px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;color:#777;display:inline-block;margin:0 0 0 10px;padding:5px 5px 4px;} .ask-a-question-view table.askform, .ask-a-question-view table.askform tr, .ask-a-question-view table.askform td {border:0;} .ask-a-question-view table.askform td {padding: 5px 0;} .ask-a-question-view #recaptcha_area {margin-bottom: 20px;} .vmquote{font-size:smaller;} .manufacturer-details-view img{float:right;margin:0 0 10px 20px;} .manufacturer-details-view .email-weblink a{margin-right:15px;} a.ask-a-question{font-size:12px;font-weight:700;display:inline-block;text-decoration:none;margin-bottom:8px;padding:3px 12px 1px;} a.ask-a-question:hover{color:#777;text-decoration:none;} input.vm-default{margin-bottom:2px;} input.highlight-button{background:#e8e8e8 url(../images/vmgeneral/backgrounds.png) top repeat-x;background-position:0 -160px;color:#fff;border:1px solid #00a000;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;font-size:12px;cursor:pointer;text-align:center;letter-spacing:1px;display:inline-block;text-decoration:none;padding:4px 8px 2px;} input.highlight-button:visited{color:#fff;} a.product-details,a.details,div.details{background-position:0 0;display:inline-block;padding:3px 8px 1px;} a.details:hover,div.details:hover,a.product-details:hover{background-position:0 -40px;color:#777;} span.details-button{ margin:0 0 0 10px;} span.details-button input.details-button { background: url("../images/vmgeneral/backgrounds.png") repeat-x scroll center top #E8E8E8;color:#135CAE;border:1px solid #CAC9C9 ;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;cursor:pointer; text-align:center;padding:3px 8px 1px;} .coupon{color: gray; border-radius:4px; border:1px solid #CAC9C9 ; font-size: 9px;padding: 3px;} button.default{display:inline-block;cursor:pointer;padding:5px 8px 4px;} button.default:hover{color:#777;} a.highlight,a.highlight:visited{background:#e8e8e8 url(../images/vmgeneral/backgrounds.png) top repeat-x;border:solid #00a000 1px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;font-size:12px;display:inline-block;text-decoration:none;background-position:0 -160px;color:#fff;padding:3px 8px 1px;} textarea.virtuemart{background:#fff;border:solid #ccc 1px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;color:#777;text-align:left;padding:5px 5px 4px;} p.product_s_desc{margin-bottom:6px;padding:0;} span.stock-level{font-size:10px;color:#7d7b7b;} .horizontal-separator{height:1px;background:#e9e8e8;margin:10px 0;} .invalid{background-color:#ffd;color:#000;border-color:red;} .page-results{margin-top:25px;text-align:right;} .control-buttons button.default{margin-left:8px;} table.user-details .vm-chzn-select{background:#e8e8e8 url(../images/vmgeneral/backgrounds.png) top repeat-x;border:solid #ccc 1px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;color:#777;margin-bottom:2px;padding:5px 5px 4px; width:210px} table.user-details input{background:#e8e8e8 url(../images/vmgeneral/backgrounds.png) top repeat-x;border:solid #ccc 1px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;color:#777;margin-bottom:2px;padding:5px 5px 4px; width:200px} table.user-details input.invalid{background:#e8e8e8 url(../images/vmgeneral/backgrounds.png) top repeat-x;border:solid red 1px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;color:#777;margin-bottom:2px;padding:5px 5px 4px;} table.user-details{width: 450px;margin-bottom:10px;} table.user-details input[type="checkbox"] , table.user-details input[type="radio"] {width:20px} td.key{padding:0 6px; width: 150px;} .cart-view h1{font-size:20px;margin:0;padding:0 0 10px;} .cart-view h2{font-size:12px;margin:0;padding:0;} .checkout-button-top{text-align:right;border-top:solid #E9E8E8 1px;padding:10px 0 0;} .checkout-button-top input.terms-of-service{margin-right:10px;display:inline-block;} span.tos{display:inline-block;margin-right:15px;} .billto-shipto{border-top:solid #E9E8E8 1px;border-bottom:solid #E9E8E8 1px;margin:10px 0 0;padding:10px 0 25px;} .billto-shipto span,a.terms-of-service{display:inline-block;font-size:14px;} #full-tos {display: none;} .output-billto span.titles,.output-shipto span.titles{width:150px;float:left;} .output-billto span.values-first_name,.output-billto span.values-middle_name,.output-billto span.values-zip,.output-shipto span.values-first_name,.output-shipto span.values-middle_name,.output-shipto span.values-zip{float:left;margin-right:3px;} table.cart-summary tr th{background:#e8e8e8 url(../images/vmgeneral/backgrounds.png) top repeat-x;border-bottom:solid #E9E8E8 1px;padding:6px 0 3px;} .customer-comment{text-align:center;border-top:solid #E9E8E8 1px;margin:10px 0 0;padding:10px 0 0;} textarea.customer-comment{background:#fff;border:solid #ccc 1px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;color:#777;margin-bottom:2px;text-align:left;padding:5px 5px 4px;} div.terms-of-service{ margin:10px 0 0;padding:10px 0 15px; display : inline;} .terms-of-service h5{background:#7C1E21;color:rgba(255, 255, 255, 0.9);font-size:14px;text-align:center;border-radius:6px;-moz-border-radius:6px;-webkit-border-radius:6px;font-weight:400;margin:0;padding:15px;} .terms-of-service h5 a,.terms-of-service h5 a:visited{color:#fff;text-transform:uppercase;} .vm-button-correct,.vm-button-correct:hover,.vm-button-correct:visited{font-size:12px;font-weight:700;display:inline-block;text-decoration:none;color:#777;} .vm-button-correct,.vm-button-correct:link,.vm-button-correct:visited{background:#e8e8e8 url(../images/vmgeneral/backgrounds.png) top repeat-x;background-position:0 -160px;color:#fff;border:solid #00a000 1px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;font-size:12px;cursor:pointer;text-align:center;letter-spacing:1px;display:inline-block;text-decoration:none;padding:6px 12px 3px;} .vm-button-correct:hover{background-position:0 -200px;color:#f2f2f2;text-decoration:none;} .VmArrowdown{background:top right no-repeat url(../images/vmgeneral/arrow_down.png);cursor:pointer;float:right;width:16px;height:16px;padding:0 12px;} ul.VMmenu,.VMmenu ul,.VMmenu li{list-style-type:none!important;background-image:none!important;padding:2px;} #ui-tabs ul#tabs{list-style-type:none;overflow:hidden;margin:0;padding:20px 20px 0;} #ui-tabs ul#tabs li{display:inline-block;cursor:pointer;background:#f2f2f2;padding:10px 20px 7px;} #ui-tabs ul#tabs li.current{display:inline-block;background:#ccc;color:#444;} #ui-tabs .tabs{padding:20px;} #ui-tabs .dyn-tabs{overflow:auto;display:none;} .clear,br.clear{clear:both;} .floatright,span.floatright{float:right;} .floatleft,span.floatleft{float:left;} span.bold,div.bold{font-weight:700;} .width1{width:1%;}.width2{width:2%;}.width3{width:3%;}.width4{width:4%;}.width5{width:5%;}.width6{width:6%;}.width7{width:7%;}.width8{width:8%;}.width9{width:9%;}.width10{width:10%;}.width11{width:11%;}.width12{width:12%;}.width13{width:13%;}.width14{width:14%;}.width15{width:15%;}.width16{width:16%;}.width17{width:17%;}.width18{width:18%;}.width19{width:19%;}.width20{width:20%;}.width21{width:21%;}.width22{width:22%;}.width23{width:23%;}.width24{width:24%;}.width25{width:25%;}.width26{width:26%;}.width27{width:27%;}.width28{width:28%;}.width29{width:29%;}.width30{width:30%;}.width31{width:31%;}.width32{width:32%;}.width33{width:33%;}.width34{width:34%;}.width35{width:35%;}.width36{width:36%;}.width37{width:37%;}.width38{width:38%;}.width39{width:39%;}.width40{width:40%;}.width41{width:41%;}.width42{width:42%;}.width43{width:43%;}.width44{width:44%;}.width45{width:45%;}.width46{width:46%;}.width47{width:47%;}.width48{width:48%;}.width49{width:49%;}.width50{width:50%;}.width51{width:51%;}.width52{width:52%;}.width53{width:53%;}.width54{width:54%;}.width55{width:55%;}.width56{width:56%;}.width57{width:57%;}.width58{width:58%;}.width59{width:59%;}.width60{width:60%;}.width61{width:61%;}.width62{width:62%;}.width63{width:63%;}.width64{width:64%;}.width65{width:65%;}.width66{width:66%;}.width67{width:67%;}.width68{width:68%;}.width69{width:69%;}.width70{width:70%;}.width71{width:71%;}.width72{width:72%;}.width73{width:73%;}.width74{width:74%;}.width75{width:75%;}.width76{width:76%;}.width77{width:77%;}.width78{width:78%;}.width79{width:79%;}.width81{width:81%;}.width82{width:82%;}.width83{width:83%;}.width84{width:84%;}.width85{width:85%;}.width86{width:86%;}.width87{width:87%;}.width88{width:88%;}.width89{width:89%;}.width90{width:90%;}.width91{width:91%;}.width92{width:92%;}.width93{width:93%;}.width94{width:94%;}.width95{width:95%;}.width96{width:96%;}.width97{width:97%;}.width98{width:98%;}.width99{width:99%;}.width100{width:100%;} .vmicon, .vmiconFE{background:url(../images/vm2-sprite.png) no-repeat top left;} .vm2-add_quantity_cart{background-position:0 0;width:24px;height:24px;border: 0px;cursor:pointer;} .vm2-arrow_down{background-position:0 -72px;width:16px;height:16px;} .vm2-billto-icon{background-position:0 -138px;height:24px;margin-right:6px;vertical-align:middle;width:24px;border :0px;} .vm2-remove_from_cart{ background-position: 0 -212px; border: 0 none; cursor: pointer; display: inline-block; height: 24px; vertical-align: bottom; width: 24px;} .vm2-shipto-icon{background-position:0 -284px;height:24px;margin-right:6px;vertical-align:middle;width:24px;} .vm2-stars0{background-position:0 -358px;width:64px;height:13px;} .vm2-stars1{background-position:0 -421px;width:64px;height:13px;} .vm2-stars2{background-position:0 -484px;width:64px;height:13px;} .vm2-stars3{background-position:0 -547px;width:64px;height:13px;} .vm2-stars4{background-position:0 -610px;width:64px;height:13px;} .vm2-stars5{background-position:0 -673px;width:64px;height:13px;} .vm2-stars_0{background-position:0 -736px;width:64px;height:13px;} .vm2-stars_1{background-position:0 -799px;width:64px;height:13px;} .vm2-stars_2{background-position:0 -862px;width:64px;height:13px;} .vm2-stars_3{background-position:0 -925px;width:64px;height:13px;} .vm2-stars_4{background-position:0 -988px;width:64px;height:13px;} .vm2-stars_5{background-position:0 -1051px;width:64px;height:13px;} .vm2-lowstock{background-position:0 -1114px;width:62px;height:15px;display:block;} .vm2-nostock{background-position:0 -1179px;width:62px;height:15px;display:block;} .vm2-normalstock{background-position:0 -1244px;width:62px;height:15px;display:block;} .vm2-termsofservice-icon{background-position:0 -1309px;height:24px;margin-right:6px;vertical-align:middle;width:24px;display:inline-block;} .vm2-modallink{height:16px;margin-left: 3px;vertical-align:top;width:16px;display:inline-block; background: url("../images/icon_external_link.gif") no-repeat scroll left top transparent;} .vm2-warning{background-position:0 -1383px;width:50px;height:40px;} .vendor-store-desc,.category-view,.featured-view,.latest-view,.topten-view,.recent-view,.related-products-view,.browse-view,.order-view{margin-bottom:25px;} .main-image,.featured-view .product,.latest-view .product,.topten-view .product,.recent-view .product,.related-products-view .product,.center,span.center{text-align:center;} /* .main-image img {max-width:100%;height:auto}*/ .main-image img {max-width:100%;max-height:260px} .main-image img.product-image,.featured-view .spacer img,.latest-view .spacer img,.topten-view .spacer img,.recent-view .spacer img{max-width:100%;height:auto;width:auto;} .additional-images,.featured-view .product-price,.latest-view .product-price,.topten-view .product-price,.recent-view .product-price,.output-billto,.output-shipto{margin:10px 0;} .ask-a-question,.manufacturer,.manufacturer-details-view .email-weblink,.manufacturer-details-view .description{margin:10px 0 0;} .customer-reviews,.ask-a-question-view .form-field{margin:25px 0 0;} span.variant-name,span.custom-variant-name{width:100px;float:left;display:block;margin-bottom:5px;} span.addtocart-button input.addtocart-button:hover,span.addtocart-button input.notify-button:hover,input.highlight-button:hover,a.highlight:hover{background-position:0 -200px;color:#f2f2f2;} .category-view .row .category .spacer,.featured-view .spacer,.latest-view .spacer,.topten-view .spacer,.recent-view .spacer,.related-products-view .spacer,.browse-view .row .product .spacer{padding:6px;} .featured-view .spacer h3,.latest-view .spacer h3,.topten-view .spacer h3,.recent-view .spacer h3,.related-products-view .spacer h3,.browse-view .row .product .spacer h2{font-size:14px;margin:0 0 6px;padding:0;} .featured-view .spacer span,.latest-view .spacer span,.topten-view .spacer span,.recent-view .spacer span,.related-products-view .spacer span,.browse-view .row .product .spacer span{font-size:0.85em;color:#666;} .browse-view .row .product .spacer img,.related-products-view .row .product .spacer img{max-width:90%;height:auto;} .display-number,.control-buttons,.right{text-align:right !important;} .ask-a-question-view,.manufacturer-details-view .spacer{padding:20px;} .ask-a-question-view h1,.manufacturer-details-view h1{font-size:18px;margin:0;padding:0;} #userForm select,.width80{width:80%;} textarea.virtuemart:hover,textarea.customer-comment:hover{color:#000;background:#e8e8e8;} label.invalid,span.red{color:red;} .output-billto span.values,.output-shipto span.values,.floatleft,span.floatleft{float:left;} .output-billto span.values,.output-shipto span.values {padding-right:5px;} .joomlaCoreField {background-color: #FFFFDD;} .vm-pagination div{text-align:center !important;} .vm-pagination ul{text-align:center !important;} .vm-pagination ul li{display: inline;} .vm-pagination .counter{text-align: right !important;} .vm-bottom div{text-align:center !important;} .vm-bottom ul{text-align:center !important;} .vm-bottom ul li{display: inline;} .vm-bottom .counter{text-align: right !important;} td.orders-key{font-weight: bold; text-align: left; } /* Manufacturer View Default */ .manufacturer-view-default .row .manufacturer .spacer {padding: 6px;} .product-field-display a img{display: block;} .product-related-products, .product-related-categories{border-top:solid #ccc 1px;padding-bottom: 10px;} .product-fields .product-field-type-P{clear: both; border-bottom: 1px solid #EEEEEE; margin-top: 18px;} .product-field-type-P .product-fields-title{ font-size: 120%;} .product-field-type-B,.product-field-type-S,.product-field-type-I{padding-left:3%;float:left;width:30%} .product-fields-title{ font-weight: bold;} .vm-customfield-mod img,.vm-customfield-cart img{ vertical-align: middle; width: 16px;} .vm-img-desc{display:block;} a:hover .vm-img-desc{background: #095197} .vmpayment_name, .vmpayment_cost, .vmshipment_name, .vmshipment_cost{padding:0 2px;} .vmpayment_description,.vmshipment_description {color:gray;font-size:9px;padding:0 2px;} .vmpayment_cardinfo {color:gray;font-size:9px;} .virtuemart_search .inputbox{height:16px;vertical-align :middle} /* Custom Field Images */ .product-fields .product-field,.product-related-categories .product-field {width:100%;float:left;display:inline-block;} .product-fields .product-field label.other-customfield {width:25%;float:left;position:relative;top:20px;left:-18px;margin-bottom:27px;text-align:center;} /* For 4 images across use width:17% */ .product-fields .product-field input[type=radio] {position:relative;left:33px;} .product-fields .product-field .vm-img-desc {font-size:9px;} /* some more styles */ .priceColor2{color:gray;} .line-through{text-decoration:line-through} .inline{display: inline;} td.pricePad{padding-right: 10px;} td.priceCol{white-space:nowrap;} div.spaceStyle{padding: 0px; margin: 5px; spacing: 0px;} .vm-notice{color: #CC0000;} .buttonBar-right{text-align: right; width: 100%;} .userfields_info{font-weight: bold;display: block;margin: 0px 0px 8px 0px;} .ratingbox { position:relative; display:block; width:120px; height:24px; background:url("../images/color-stars.png") repeat-x scroll 0 bottom transparent; } .ratingbox span { background:url(../images/color-stars.png) repeat-x; display:block; width:1%; height:24px; position:absolute; } .vote { display: block; margin-bottom: 4px; } .category-ratingbox { position:relative; display:block; width:60px; height:12px; background:url("../images/color-stars-small.png") repeat-x scroll 0 bottom transparent; } .category-ratingbox span { background:url(../images/color-stars-small.png) repeat-x; display:block; width:1%; height:12px; position:absolute; } .stars-orange{background-position:0 0 !important;} .stars-red{background-position:0 -54px !important;} .stars-green{background-position:0 -108px !important; } .stars-blue{background-position:0 -162px !important;} .stars-purple{background-position:0 -216px !important;} assets/index.html000066600000000000151373621660010047 0ustar00assets/js/jquery.validationEngine.js000066600000141362151373621660013643 0ustar00/* * Inline Form Validation Engine 2.1, jQuery plugin * * Copyright(c) 2010, Cedric Dugas * http://www.position-absolute.com * * 2.0 Rewrite by Olivier Refalo * http://www.crionics.com * * Form validation engine allowing custom regex rules to be added. * Licensed under the MIT License */ (function($) { var methods = { /** * Kind of the constructor, called before any action * @param {Map} user options */ init: function(options) { var form = this; if (!form.data('jqv') || form.data('jqv') == null ) { methods._saveOptions(form, options); // bind all formError elements to close on click $(".formError").live("click", function() { $(this).fadeOut(150, function() { // remove prompt once invisible $(this).remove(); }); }); } }, /** * Attachs jQuery.validationEngine to form.submit and field.blur events * Takes an optional params: a list of options * ie. jQuery("#formID1").validationEngine('attach', {promptPosition : "centerRight"}); */ attach: function(userOptions) { var form = this; var options; if(userOptions) options = methods._saveOptions(form, userOptions); else options = form.data('jqv'); if (!options.binded) { if (options.bindMethod == "bind"){ // bind fields form.find("[class*=validate]:not([type=checkbox])").bind(options.validationEventTrigger, methods._onFieldEvent); form.find("[class*=validate][type=checkbox]").bind("click", methods._onFieldEvent); // bind form.submit form.bind("submit", methods._onSubmitEvent); } else if (options.bindMethod == "live") { // bind fields with LIVE (for persistant state) form.find("[class*=validate]:not([type=checkbox])").live(options.validationEventTrigger, methods._onFieldEvent); form.find("[class*=validate][type=checkbox]").live("click", methods._onFieldEvent); // bind form.submit form.live("submit", methods._onSubmitEvent); } options.binded = true; } }, /** * Unregisters any bindings that may point to jQuery.validaitonEngine */ detach: function() { var form = this; var options = form.data('jqv'); if (options.binded) { // unbind fields form.find("[class*=validate]").not("[type=checkbox]").unbind(options.validationEventTrigger, methods._onFieldEvent); form.find("[class*=validate][type=checkbox]").unbind("click", methods._onFieldEvent); // unbind form.submit form.unbind("submit", methods.onAjaxFormComplete); // unbind live fields (kill) form.find("[class*=validate]").not("[type=checkbox]").die(options.validationEventTrigger, methods._onFieldEvent); form.find("[class*=validate][type=checkbox]").die("click", methods._onFieldEvent); // unbind form.submit form.die("submit", methods.onAjaxFormComplete); form.removeData('jqv'); } }, /** * Validates the form fields, shows prompts accordingly. * Note: There is no ajax form validation with this method, only field ajax validation are evaluated * * @return true if the form validates, false if it fails */ validate: function() { return methods._validateFields(this); }, /** * Validates one field, shows prompt accordingly. * Note: There is no ajax form validation with this method, only field ajax validation are evaluated * * @return true if the form validates, false if it fails */ validateField: function(el) { var options = $(this).data('jqv'); return methods._validateField($(el), options); }, /** * Validates the form fields, shows prompts accordingly. * Note: this methods performs fields and form ajax validations(if setup) * * @return true if the form validates, false if it fails, undefined if ajax is used for form validation */ validateform: function() { return methods._onSubmitEvent.call(this); }, /** * Displays a prompt on a element. * Note that the element needs an id! * * @param {String} promptText html text to display type * @param {String} type the type of bubble: 'pass' (green), 'load' (black) anything else (red) * @param {String} possible values topLeft, topRight, bottomLeft, centerRight, bottomRight */ showPrompt: function(promptText, type, promptPosition, showArrow) { var form = this.closest('form'); var options = form.data('jqv'); // No option, take default one if(!options) options = methods._saveOptions(this, options); if(promptPosition) options.promptPosition=promptPosition; options.showArrow = showArrow==true; methods._showPrompt(this, promptText, type, false, options); }, /** * Closes all error prompts on the page */ hidePrompt: function() { var promptClass = "."+ methods._getClassName($(this).attr("id")) + "formError" $(promptClass).fadeTo("fast", 0.3, function() { $(this).remove(); }); }, /** * Closes form error prompts, CAN be invidual */ hide: function() { if($(this).is("form")){ var closingtag = "parentForm"+$(this).attr('id'); }else{ var closingtag = $(this).attr('id') +"formError" } $('.'+closingtag).fadeTo("fast", 0.3, function() { $(this).remove(); }); }, /** * Closes all error prompts on the page */ hideAll: function() { $('.formError').fadeTo("fast", 0.3, function() { $(this).remove(); }); }, /** * Typically called when user exists a field using tab or a mouse click, triggers a field * validation */ _onFieldEvent: function() { var field = $(this); var form = field.closest('form'); var options = form.data('jqv'); // validate the current field methods._validateField(field, options); }, /** * Called when the form is submited, shows prompts accordingly * * @param {jqObject} * form * @return false if form submission needs to be cancelled */ _onSubmitEvent: function() { var form = $(this); var options = form.data('jqv'); // validate each field (- skip field ajax validation, no necessary since we will perform an ajax form validation) var r=methods._validateFields(form, true); if (r && options.ajaxFormValidation) { methods._validateFormWithAjax(form, options); return false; } if(options.onValidationComplete) { options.onValidationComplete(form, r); return false; } return r; }, /** * Return true if the ajax field validations passed so far * @param {Object} options * @return true, is all ajax validation passed so far (remember ajax is async) */ _checkAjaxStatus: function(options) { var status = true; $.each(options.ajaxValidCache, function(key, value) { if (!value) { status = false; // break the each return false; } }); return status; }, /** * Validates form fields, shows prompts accordingly * * @param {jqObject} * form * @param {skipAjaxFieldValidation} * boolean - when set to true, ajax field validation is skipped, typically used when the submit button is clicked * * @return true if form is valid, false if not, undefined if ajax form validation is done */ _validateFields: function(form, skipAjaxValidation) { var options = form.data('jqv'); // this variable is set to true if an error is found var errorFound = false; // Trigger hook, start validation form.trigger("jqv.form.validating") // first, evaluate status of non ajax fields form.find('[class*=validate]').not(':hidden').each( function() { var field = $(this); errorFound |= methods._validateField(field, options, skipAjaxValidation); }); // second, check to see if all ajax calls completed ok // errorFound |= !methods._checkAjaxStatus(options); // thrird, check status and scroll the container accordingly form.trigger("jqv.form.result", [errorFound]) if (errorFound) { if (options.scroll) { // get the position of the first error, there should be at least one, no need to check this //var destination = form.find(".formError:not('.greenPopup'):first").offset().top; // look for the visually top prompt var destination = Number.MAX_VALUE; var lst = $(".formError:not('.greenPopup')"); for (var i = 0; i < lst.length; i++) { var d = $(lst[i]).offset().top; if (d < destination) destination = d; } if (!options.isOverflown) $("html:not(:animated),body:not(:animated)").animate({ scrollTop: destination }, 1100); else { var overflowDIV = $(options.overflownDIV); var scrollContainerScroll = overflowDIV.scrollTop(); var scrollContainerPos = -parseInt(overflowDIV.offset().top); destination += scrollContainerScroll + scrollContainerPos - 5; var scrollContainer = $(options.overflownDIV + ":not(:animated)"); scrollContainer.animate({ scrollTop: destination }, 1100); } } return false; } return true; }, /** * This method is called to perform an ajax form validation. * During this process all the (field, value) pairs are sent to the server which returns a list of invalid fields or true * * @param {jqObject} form * @param {Map} options */ _validateFormWithAjax: function(form, options) { var data = form.serialize(); var url = (options.ajaxFormValidationURL) ? options.ajaxFormValidationURL : form.attr("action"); $.ajax({ type: "GET", url: url, cache: false, dataType: "json", data: data, form: form, methods: methods, options: options, beforeSend: function() { return options.onBeforeAjaxFormValidation(form, options); }, error: function(data, transport) { methods._ajaxError(data, transport); }, success: function(json) { if (json !== true) { // getting to this case doesn't necessary means that the form is invalid // the server may return green or closing prompt actions // this flag helps figuring it out var errorInForm=false; for (var i = 0; i < json.length; i++) { var value = json[i]; var errorFieldId = value[0]; var errorField = $($("#" + errorFieldId)[0]); // make sure we found the element if (errorField.length == 1) { // promptText or selector var msg = value[2]; // if the field is valid if (value[1] == true) { if (msg == "" || !msg){ // if for some reason, status==true and error="", just close the prompt methods._closePrompt(errorField); } else { // the field is valid, but we are displaying a green prompt if (options.allrules[msg]) { var txt = options.allrules[msg].alertTextOk; if (txt) msg = txt; } methods._showPrompt(errorField, msg, "pass", false, options, true); } } else { // the field is invalid, show the red error prompt errorInForm|=true; if (options.allrules[msg]) { var txt = options.allrules[msg].alertText; if (txt) msg = txt; } methods._showPrompt(errorField, msg, "", false, options, true); } } } options.onAjaxFormComplete(!errorInForm, form, json, options); } else options.onAjaxFormComplete(true, form, "", options); } }); }, /** * Validates field, shows prompts accordingly * * @param {jqObject} * field * @param {Array[String]} * field's validation rules * @param {Map} * user options * @return true if field is valid */ _validateField: function(field, options, skipAjaxValidation) { if (!field.attr("id")) $.error("jQueryValidate: an ID attribute is required for this field: " + field.attr("name") + " class:" + field.attr("class")); var rulesParsing = field.attr('class'); var getRules = /validate\[(.*)\]/.exec(rulesParsing); if (!getRules) return false; var str = getRules[1]; var rules = str.split(/\[|,|\]/); // true if we ran the ajax validation, tells the logic to stop messing with prompts var isAjaxValidator = false; var fieldName = field.attr("name"); var promptText = ""; var required = false; options.isError = false; options.showArrow = true; optional = false; for (var i = 0; i < rules.length; i++) { var errorMsg = undefined; switch (rules[i]) { case "optional": optional = true; break; case "required": required = true; errorMsg = methods._required(field, rules, i, options); break; case "custom": errorMsg = methods._customRegex(field, rules, i, options); break; case "ajax": // ajax has its own prompts handling technique if(!skipAjaxValidation){ methods._ajax(field, rules, i, options); isAjaxValidator = true; } break; case "minSize": errorMsg = methods._minSize(field, rules, i, options); break; case "maxSize": errorMsg = methods._maxSize(field, rules, i, options); break; case "min": errorMsg = methods._min(field, rules, i, options); break; case "max": errorMsg = methods._max(field, rules, i, options); break; case "past": errorMsg = methods._past(field, rules, i, options); break; case "future": errorMsg = methods._future(field, rules, i, options); break; case "maxCheckbox": errorMsg = methods._maxCheckbox(field, rules, i, options); field = $($("input[name='" + fieldName + "']")); break; case "minCheckbox": errorMsg = methods._minCheckbox(field, rules, i, options); field = $($("input[name='" + fieldName + "']")); break; case "equals": errorMsg = methods._equals(field, rules, i, options); break; case "funcCall": errorMsg = methods._funcCall(field, rules, i, options); break; default: //$.error("jQueryValidator rule not found"+rules[i]); } if (errorMsg !== undefined) { promptText += errorMsg + "
"; options.isError = true; } } // If the rules required is not added, an empty field is not validated if(!required){ if(field.val() == "") options.isError = false; } // Hack for radio/checkbox group button, the validation go into the // first radio/checkbox of the group var fieldType = field.attr("type"); if ((fieldType == "radio" || fieldType == "checkbox") && $("input[name='" + fieldName + "']").size() > 1) { field = $($("input[name='" + fieldName + "'][type!=hidden]:first")); options.showArrow = false; } if (options.isError){ methods._showPrompt(field, promptText, "", false, options); }else{ if (!isAjaxValidator) methods._closePrompt(field); } field.closest('form').trigger("jqv.field.error", [field, options.isError, promptText]) return options.isError; }, /** * Required validation * * @param {jqObject} field * @param {Array[String]} rules * @param {int} i rules index * @param {Map} * user options * @return an error string if validation failed */ _required: function(field, rules, i, options) { switch (field.attr("type")) { case "text": case "password": case "textarea": case "file": default: if (!field.val()) return options.allrules[rules[i]].alertText; break; case "radio": case "checkbox": var name = field.attr("name"); if ($("input[name='" + name + "']:checked").size() == 0) { if ($("input[name='" + name + "']").size() == 1) return options.allrules[rules[i]].alertTextCheckboxe; else return options.allrules[rules[i]].alertTextCheckboxMultiple; } break; // required for ');this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput); a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}H(a.settings,e||{});b=b&&b.constructor==Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left", this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a,"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus", this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span"){b= b.children("."+this._inlineClass);b.children().removeClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5", cursor:"default"})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().addClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false;for(var b=0;b-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a); d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},_showDatepicker:function(a){a=a.target||a;if(a.nodeName.toLowerCase()!="input")a=d("input",a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);if(d.datepicker._curInst&&d.datepicker._curInst!=b){d.datepicker._datepickerShowing&&d.datepicker._triggerOnClose(d.datepicker._curInst);d.datepicker._curInst.dpDiv.stop(true,true)}var c= d.datepicker._get(b,"beforeShow");H(b.settings,c?c.apply(a,[a,b]):{});b.lastVal=null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value="";if(!d.datepicker._pos){d.datepicker._pos=d.datepicker._findPos(a);d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c= {left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos=null;b.dpDiv.empty();b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);c=d.datepicker._checkOffset(b,c,e);b.dpDiv.css({position:d.datepicker._inDialog&&d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){var i=b.dpDiv.find("iframe.ui-datepicker-cover"); if(i.length){var g=d.datepicker._getBorders(b.dpDiv);i.css({left:-g[0],top:-g[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex(d(a).zIndex()+1);d.datepicker._datepickerShowing=true;d.effects&&d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f,h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}},_updateDatepicker:function(a){this.maxRows=4;var b=d.datepicker._getBorders(a.dpDiv); J=a;a.dpDiv.empty().append(this._generateHTML(a));var c=a.dpDiv.find("iframe.ui-datepicker-cover");c.length&&c.css({left:-b[0],top:-b[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()});a.dpDiv.find("."+this._dayOverClass+" a").mouseover();b=this._getNumberOfMonths(a);c=b[1];a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");c>1&&a.dpDiv.addClass("ui-datepicker-multi-"+c).css("width",17*c+"em");a.dpDiv[(b[0]!=1||b[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi"); a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var e=a.yearshtml;setTimeout(function(){e===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml);e=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]|| c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(),j=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+ i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e-g):0);b.top-=Math.min(b.top,b.top+f>j&&j>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1||d.expr.filters.hidden(a));)a=a[b?"previousSibling":"nextSibling"];a=d(a).offset();return[a.left,a.top]},_triggerOnClose:function(a){var b=this._get(a,"onClose");if(b)b.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a])},_hideDatepicker:function(a){var b= this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b);this._curInst=null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();d.datepicker._triggerOnClose(b);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute", left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&&!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&& d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth;b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth= b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e._selectingMonthYear=false;e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_clickMonthYear:function(a){var b=this._getInst(d(a)[0]);b.input&&b._selectingMonthYear&&setTimeout(function(){b.input.focus()},0);b._selectingMonthYear= !b._selectingMonthYear},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay=d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a=d(a);this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a); a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a);else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a,"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a)); d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b=a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?b.toString():b+"";if(b=="")return null;var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;e=typeof e!="string"?e:(new Date).getFullYear()% 100+parseInt(e,10);for(var f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,g=(c?c.monthNames:null)||this._defaults.monthNames,j=c=-1,l=-1,u=-1,k=false,o=function(p){(p=B+1-1){j=1;l=u;do{e=this._getDaysInMonth(c,j-1);if(l<=e)break;j++;l-=e}while(1)}v=this._daylightSavingAdjust(new Date(c,j-1,l));if(v.getFullYear()!=c||v.getMonth()+1!=j||v.getDate()!=l)throw"Invalid date";return v},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y", TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:null)||this._defaults.monthNames;var i=function(o){(o=k+112?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay= a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear||a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(), b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),j=this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay?new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),k=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n= this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=k&&nn;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-j,1)),this._getFormatConfig(a));n=this._canAdjustMonth(a,-1,m,g)?''+n+"":f?"":''+n+"";var s=this._get(a,"nextText");s=!h?s:this.formatDate(s,this._daylightSavingAdjust(new Date(m,g+j,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?''+s+"":f?"":''+s+"";j=this._get(a,"currentText");s=this._get(a,"gotoCurrent")&&a.currentDay?u:b;j=!h?j:this.formatDate(j,s,this._getFormatConfig(a));h=!a.inline?'":"";e=e?'
'+(c?h:"")+(this._isInRange(a,s)?'":"")+(c?"":h)+"
":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;j=this._get(a,"showWeek");s=this._get(a,"dayNames");this._get(a,"dayNamesShort");var q=this._get(a,"dayNamesMin"),B= this._get(a,"monthNames"),v=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),D=this._get(a,"showOtherMonths"),K=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var E=this._getDefaultDate(a),w="",x=0;x1)switch(G){case 0:y+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right": "left");break;case i[1]-1:y+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:y+=" ui-datepicker-group-middle";t="";break}y+='">'}y+='
'+(/all|left/.test(t)&&x==0?c?f:n:"")+(/all|right/.test(t)&&x==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,k,o,x>0||G>0,B,v)+'
';var z=j?'": "";for(t=0;t<7;t++){var r=(t+h)%7;z+="=5?' class="ui-datepicker-week-end"':"")+'>'+q[r]+""}y+=z+"";z=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay,z);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;z=Math.ceil((t+z)/7);this.maxRows=z=l?this.maxRows>z?this.maxRows:z:z;r=this._daylightSavingAdjust(new Date(m,g,1-t));for(var Q=0;Q";var R=!j?"":'";for(t=0;t<7;t++){var I=p?p.apply(a.input?a.input[0]:null,[r]):[true,""],F=r.getMonth()!=g,L=F&&!K||!I[0]||k&&ro;R+='";r.setDate(r.getDate()+1);r=this._daylightSavingAdjust(r)}y+=R+""}g++;if(g>11){g=0;m++}y+="
'+this._get(a,"weekHeader")+"
'+ this._get(a,"calculateWeek")(r)+""+(F&&!D?" ":L?''+r.getDate()+"":''+ r.getDate()+"")+"
"+(l?""+(i[0]>0&&G==i[1]-1?'
':""):"");O+=y}w+=O}w+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'':"");a._keyEvent=false;return w},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"), l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='
',o="";if(h||!j)o+=''+i[b]+"";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='"}u||(k+=o+(h||!(j&&l)?" ":""));if(!a.yearshtml){a.yearshtml="";if(h||!l)k+=''+c+"";else{g=this._get(a,"yearRange").split(":");var s=(new Date).getFullYear();i=function(q){q=q.match(/c[+-].*/)?c+parseInt(q.substring(1),10):q.match(/[+-].*/)?s+parseInt(q,10):parseInt(q,10);return isNaN(q)?s:q};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b,e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()): g;for(a.yearshtml+='";k+=a.yearshtml;a.yearshtml=null}}k+=this._get(a,"yearSuffix");if(u)k+=(h||!(j&&l)?" ":"")+o;k+="
";return k},_adjustInstDate:function(a,b,c){var e=a.drawYear+(c== "Y"?b:0),f=a.drawMonth+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");b=c&&ba?a:b},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear"); if(b)b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a); c=this._daylightSavingAdjust(new Date(c,e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a, "dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker= function(a){if(!this.length)return this;if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker, [this[0]].concat(b));return this.each(function(){typeof a=="string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new M;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.14";window["DP_jQuery_"+A]=d})(jQuery); assets/js/.htaccess000066600000000177151373621660010303 0ustar00 Order allow,deny Deny from all assets/js/facebox.js000066600000024264151373621660010455 0ustar00/* * Facebox (for jQuery) * version: 1.2 (05/05/2008) * @requires jQuery v1.2 or later * * Examples at http://famspam.com/facebox/ * * Licensed under the MIT: * http://www.opensource.org/licenses/mit-license.php * * Copyright 2007, 2008 Chris Wanstrath [ chris@ozmm.org ] * * Usage: * * jQuery(document).ready(function() { * jQuery('a[rel*=facebox]').facebox() * }) * * Terms * Loads the #terms div in the box * * Terms * Loads the terms.html page in the box * * Terms * Loads the terms.png image in the box * * * You can also use it programmatically: * * jQuery.facebox('some html') * jQuery.facebox('some html', 'my-groovy-style') * * The above will open a facebox with "some html" as the content. * * jQuery.facebox(function($) { * $.get('blah.html', function(data) { $.facebox(data) }) * }) * * The above will show a loading screen before the passed function is called, * allowing for a better ajaxy experience. * * The facebox function can also display an ajax page, an image, or the contents of a div: * * jQuery.facebox({ ajax: 'remote.html' }) * jQuery.facebox({ ajax: 'remote.html' }, 'my-groovy-style') * jQuery.facebox({ image: 'stairs.jpg' }) * jQuery.facebox({ image: 'stairs.jpg' }, 'my-groovy-style') * jQuery.facebox({ div: '#box' }) * jQuery.facebox({ div: '#box' }, 'my-groovy-style') * * Want to close the facebox? Trigger the 'close.facebox' document event: * * jQuery(document).trigger('close.facebox') * * Facebox also has a bunch of other hooks: * * loading.facebox * beforeReveal.facebox * reveal.facebox (aliased as 'afterReveal.facebox') * init.facebox * afterClose.facebox * * Simply bind a function to any of these hooks: * * $(document).bind('reveal.facebox', function() { ...stuff to do after the facebox and contents are revealed... }) * */ (function($) { $.facebox = function(data, klass) { $.facebox.loading() if (data.ajax) fillFaceboxFromAjax(data.ajax, klass) else if (data.iframe) fillFaceboxFromHref(data.iframe,klass, data.rev) else if (data.image) fillFaceboxFromImage(data.image, klass) else if (data.div) fillFaceboxFromHref(data.div, klass, data.rev) else if (data.text) fillFaceboxFromText(data.text, klass) else if ($.isFunction(data)) data.call($) else $.facebox.reveal(data, klass) } /* * Public, $.facebox methods */ $.extend($.facebox, { settings: { opacity : 0.6, overlay : true, loadingImage : '/components/com_virtuemart/assets/images/facebox/loading.gif', closeImage : '/components/com_virtuemart/assets/images/facebox/closelabel.png', imageTypes : [ 'png', 'jpg', 'jpeg', 'gif' ], faceboxHtml : '\ ' }, loading: function() { init() if ($('#facebox .loading').length == 1) return true showOverlay() $('#facebox .content').empty() $('#facebox .body').children().hide().end(). append('
') // $('#facebox').css({ // top: 100 , // getPageScroll()[1] + (getPageHeight() / 10), // left: $(window).width() / 2 - 205 // }).show() $('#facebox').css({ top: getPageScroll()[1] + ($(window).height() / 10), left: ($(window).width() - $('#facebox').width()) / 2 }).show() $(document).bind('keydown.facebox', function(e) { if (e.keyCode == 27) $.facebox.close() return true }) $(document).trigger('loading.facebox') }, reveal: function(data, klass) { $(document).trigger('beforeReveal.facebox') if (klass) $('#facebox .content').addClass(klass) $('#facebox .content').append(data) $('#facebox .loading').remove() $('#facebox .body').children().fadeIn('normal') $('#facebox').css('left', $(window).width() / 2 - ($('#facebox .popup').width() / 2)) $(document).trigger('reveal.facebox').trigger('afterReveal.facebox') }, close: function() { $(document).trigger('close.facebox') return false } }) /* * Public, $.fn methods */ $.fn.facebox = function(settings) { if ($(this).length == 0) return init(settings) function clickHandler() { $.facebox.loading(true) // support for rel="facebox.inline_popup" syntax, to add a class // also supports deprecated "facebox[.inline_popup]" syntax var klass = this.rel.match(/facebox\[?\.(\w+)\]?/) if (klass) klass = klass[1] fillFaceboxFromHref(this.href, klass, this.rev) return false } return this.bind('click.facebox', clickHandler) } /* * Private methods */ // called one time to setup facebox on this page function init(settings) { if ($.facebox.settings.inited) return true else $.facebox.settings.inited = true $(document).trigger('init.facebox') makeCompatible() var imageTypes = $.facebox.settings.imageTypes.join('|') $.facebox.settings.imageTypesRegexp = new RegExp('\.(' + imageTypes + ')$', 'i') if (settings) $.extend($.facebox.settings, settings) $('body').append($.facebox.settings.faceboxHtml) var preload = [ new Image(), new Image() ] preload[0].src = $.facebox.settings.closeImage preload[1].src = $.facebox.settings.loadingImage $('#facebox').find('.b:first, .bl').each(function() { preload.push(new Image()) preload.slice(-1).src = $(this).css('background-image').replace(/url\((.+)\)/, '$1') }) $('#facebox .close').click($.facebox.close) $('#facebox .close_image').attr('src', $.facebox.settings.closeImage) } // getPageScroll() by quirksmode.com function getPageScroll() { var xScroll, yScroll; if (self.pageYOffset) { yScroll = self.pageYOffset; xScroll = self.pageXOffset; } else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict yScroll = document.documentElement.scrollTop; xScroll = document.documentElement.scrollLeft; } else if (document.body) {// all other Explorers yScroll = document.body.scrollTop; xScroll = document.body.scrollLeft; } return new Array(xScroll,yScroll) } // Adapted from getPageSize() by quirksmode.com function getPageHeight() { var windowHeight if (self.innerHeight) { // all except Explorer windowHeight = self.innerHeight; } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode windowHeight = document.documentElement.clientHeight; } else if (document.body) { // other Explorers windowHeight = document.body.clientHeight; } return windowHeight } // Backwards compatibility function makeCompatible() { var $s = $.facebox.settings $s.loadingImage = $s.loading_image || $s.loadingImage $s.closeImage = $s.close_image || $s.closeImage $s.imageTypes = $s.image_types || $s.imageTypes $s.faceboxHtml = $s.facebox_html || $s.faceboxHtml } // Figures out what you want to display and displays it // formats are: // div: #id // image: blah.extension // ajax: anything else function fillFaceboxFromHref(href, klass, rev ) { // div if (href.match(/#/)) { var url = window.location.href.split('#')[0] var target = href.replace(url,'') if (target == '#') return $.facebox.reveal($(target).html(), klass) // iframe } else if (rev.split('|')[0] == 'iframe') { fillFaceboxFromIframe(href, klass, rev.split('|')[1],rev.split('|')[2]) // image } else if (href.match($.facebox.settings.imageTypesRegexp)) { fillFaceboxFromImage(href, klass) // ajax } else { fillFaceboxFromAjax(href, klass) } } function fillFaceboxFromIframe(href, klass, height, width) { $.facebox.reveal('', klass) } function fillFaceboxFromImage(href, klass) { var image = new Image() image.onload = function() { $.facebox.reveal('
', klass) } image.src = href } function fillFaceboxFromText(text, klass) { $.facebox.reveal('
'+ text + '
', klass) } function fillFaceboxFromAjax(href, klass) { $.get(href, function(data) { $.facebox.reveal(data, klass) }) } function skipOverlay() { return $.facebox.settings.overlay == false || $.facebox.settings.opacity === null } function showOverlay() { if (skipOverlay()) return if ($('#facebox_overlay').length == 0) $("body").append('
') $('#facebox_overlay').hide().addClass("facebox_overlayBG") .css('opacity', $.facebox.settings.opacity) .click(function() { $(document).trigger('close.facebox') }) .fadeIn(200) return false } function hideOverlay() { if (skipOverlay()) return $('#facebox_overlay').fadeOut(200, function(){ $("#facebox_overlay").removeClass("facebox_overlayBG") $("#facebox_overlay").addClass("facebox_hide") $("#facebox_overlay").remove() }) return false } /* * Bindings */ $(document).bind('close.facebox', function() { $(document).unbind('keydown.facebox') $('#facebox').fadeOut(function() { $('#facebox .content').removeClass().addClass('content') $('#facebox .loading').remove() $(document).trigger('afterClose.facebox') }) hideOverlay() }) $(document).bind('afterReveal.facebox', function() { var windowHeight = $(window).height(); var faceboxHeight = $('#facebox').height(); if(faceboxHeight < windowHeight) { var scrolltop = $(window).scrollTop(); var top = Math.floor((windowHeight - faceboxHeight) / 2) + scrolltop; $('#facebox').css('top', (top)); } else { $('#facebox').css('top',$(window).scrollTop() ); } }); })(jQuery); assets/js/jquery.ui.core.min.js000066600000010356151373621660012507 0ustar00/*! * jQuery UI 1.8.14 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI */ (function(c,j){function k(a,b){var d=a.nodeName.toLowerCase();if("area"===d){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&l(a)}return(/input|select|textarea|button|object/.test(d)?!a.disabled:"a"==d?a.href||b:b)&&l(a)}function l(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.14", keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus(); b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this, "overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection", function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,m,n){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(m)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(n)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth, outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){return k(a,!isNaN(c.attr(a,"tabindex")))},tabbable:function(a){var b=c.attr(a,"tabindex"),d=isNaN(b); return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e= 0;e0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a0) { $.getJSON('index.php?option=com_virtuemart&view=state&format=json&virtuemart_country_id=' + byAjax, function(result){ // Max Bitte Testen var virtuemart_state_id = $('#'+prefix+'virtuemart_state_id'); var status = virtuemart_state_id.attr('required'); if(status == 'required') { if( result[byAjax].length > 0 ) { virtuemart_state_id.attr('required','required'); } else { virtuemart_state_id.removeAttr('required'); } } // ENDE $.each(result, function(key, value) { if (value.length >0) { opt.data( 'd'+key, value ); } else { opt.data( 'd'+key, 0 ); } }); methods.addToList(opt,optValues,dest,prefix); if ( typeof ids !== "undefined") { var states = ids.length ? ids.split(',') : [] ; $.each(states, function(k,id) { $(dest).find('[value='+id+']').attr("selected","selected"); }); } $(dest).trigger("liszt:updated"); } ); } else { methods.addToList(opt,optValues,dest,prefix) $(dest).trigger("liszt:updated"); } oldValues = optValues ; }, addToList: function(opt,values,dest,prefix) { $.each(values, function(dataKey, dataValue) { var groupExist = $("#"+prefix+"group"+dataValue+"").size(); if ( ! groupExist ) { var datas = opt.data( 'd'+dataValue ); if (datas.length >0) { var label = opt.find("option[value='"+dataValue+"']").text(); var group =''; $.each( datas , function( key, value) { if (value) group +=''; }); group += ''; $(dest).append(group); } } }); } }; $.fn.vm2front = function( method ) { if ( methods[method] ) { return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 )); } else if ( typeof method === 'object' || ! method ) { return methods.init.apply( this, arguments ); } else { $.error( 'Method ' + method + ' does not exist on Vm2 front jQuery library' ); } }; })(jQuery) assets/js/vmcreditcard.js000066600000022265151373621660011514 0ustar00/*================================================================================================*/ /* * * donwloaded from http://www.braemoor.co.uk/software/creditcard.shtml * adapted by Valerie Isaksen * */ /* This routine checks the credit card number. The following checks are made: 1. A number has been provided 2. The number is a right length for the card 3. The number has an appropriate prefix for the card 4. The number has a valid modulus 10 number check digit if required If the validation fails an error is reported. The structure of credit card formats was gleaned from a variety of sources on the web, although the best is probably on Wikepedia ("Credit card number"): http://en.wikipedia.org/wiki/Credit_card_number Parameters: cardnumber number on the card cardname name of card as defined in the card list below Author: John Gardner Date: 1st November 2003 Updated: 26th Feb. 2005 Additional cards added by request Updated: 27th Nov. 2006 Additional cards added from Wikipedia Updated: 18th Jan. 2008 Additional cards added from Wikipedia Updated: 26th Nov. 2008 Maestro cards extended Updated: 19th Jun. 2009 Laser cards extended from Wikipedia Updated: 11th Sep. 2010 Typos removed from Diners and Solo definitions (thanks to Noe Leon) Updated: 10th April 2012 New matches for Maestro, Diners Enroute and Switch Updated: 17th October 2012 Diners Club prefix 38 not encoded */ /* If a credit card number is invalid, an error reason is loaded into the global ccErrorNo variable. This can be be used to index into the global error string array to report the reason to the user if required: e.g. if (!checkCreditCard (number, name) alert (ccErrors(ccErrorNo); */ var ccErrorNo = 0; /*************************************************************************\ boolean isExpiryDate([int year, int month]) return true if the date is a valid expiry date, else return false. \*************************************************************************/ function CreditCardisExpiryDate(month, year,paymentmethod_id) { document.getElementById("cc_expiredate_errormsg_"+paymentmethod_id).style.display="none"; document.getElementById("cc_expiredate_errormsg_"+paymentmethod_id).innerHTML =''; today = new Date(); expiry = new Date(year, month); if (today.getTime() > expiry.getTime()) { var error_msg = ccErrors [5] ; document.getElementById("cc_expiredate_errormsg_"+ paymentmethod_id).style.display="block"; document.getElementById("cc_expiredate_errormsg_"+ paymentmethod_id).innerHTML =error_msg; return false; } else return true; } function CheckCreditCardNumber(cardnumber, paymentmethod_id){ for (cardType = 0; cardType < 13 ; cardType++) { if(checkCreditCard(cardnumber,cardType)){ return true; } } var error_msg = ccErrors [ccErrorNo] ; document.getElementById("cc_cardnumber_errormsg_"+ paymentmethod_id).style.display="block"; document.getElementById("cc_cardnumber_errormsg_"+ paymentmethod_id).innerHTML =error_msg; return false; } function razCCerror(paymentmethod_id){ document.getElementById("cc_cardnumber_errormsg_" + paymentmethod_id).style.display="none"; document.getElementById("cc_cardnumber_errormsg_" + paymentmethod_id).innerHTML =''; return true; } function checkCreditCard (cardnumber, cardname) { // Array to hold the permitted card characteristics var cards = new Array(); // Define the cards we support. You may add addtional card types as follows. // Name: As in the selection box of the form - must be same as user's // Length: List of possible valid lengths of the card number for the card // prefixes: List of possible prefixes for the card // checkdigit: Boolean to say whether there is a check digit cards [0] = {name: "Visa", length: "13,16", prefixes: "4", checkdigit: true}; cards [1] = {name: "MasterCard", length: "16", prefixes: "51,52,53,54,55", checkdigit: true}; cards [2] = {name: "DinersClub", length: "14,16", prefixes: "36,38,54,55", checkdigit: true}; cards [3] = {name: "CarteBlanche", length: "14", prefixes: "300,301,302,303,304,305", checkdigit: true}; cards [4] = {name: "AmEx", length: "15", prefixes: "34,37", checkdigit: true}; cards [5] = {name: "Discover", length: "16", prefixes: "6011,622,64,65", checkdigit: true}; cards [6] = {name: "JCB", length: "16", prefixes: "35", checkdigit: true}; cards [7] = {name: "enRoute", length: "15", prefixes: "2014,2149", checkdigit: true}; cards [8] = {name: "Solo", length: "16,18,19", prefixes: "6334,6767", checkdigit: true}; cards [9] = {name: "Switch", length: "16,18,19", prefixes: "4903,4905,4911,4936,564182,633110,6333,6759", checkdigit: true}; cards [10] = {name: "Maestro", length: "12,13,14,15,16,18,19", prefixes: "5018,5020,5038,6304,6759,6761,6762,6763", checkdigit: true}; cards [11] = {name: "VisaElectron", length: "16", prefixes: "4026,417500,4508,4844,4913,4917", checkdigit: true}; cards [12] = {name: "LaserCard", length: "16,17,18,19", prefixes: "6304,6706,6771,6709", checkdigit: true}; // Establish card type var cardType = -1; for (var i=0; i= 0; i--) { // Extract the next digit and multiply by 1 or 2 on alternative digits. calc = Number(cardNo.charAt(i)) * j; // If the result is in two digits add 1 to the checksum total if (calc > 9) { checksum = checksum + 1; calc = calc - 10; } // Add the units element to the checksum total checksum = checksum + calc; // Switch the value of j if (j ==1) {j = 2} else {j = 1}; } // All done - if checksum is divisible by 10, it is a valid modulus 10. // If not, report an error. if (checksum % 10 != 0) { ccErrorNo = 3; return false; } } // Check it's not a spam number if (cardNo == '5490997771092064') { ccErrorNo = 5; return false; } // The following are the card-specific checks we undertake. var LengthValid = false; var PrefixValid = false; var undefined; // We use these for holding the valid lengths and prefixes of a card type var prefix = new Array (); var lengths = new Array (); // Load an array with the valid prefixes for this card prefix = cards[cardType].prefixes.split(","); // Now see if any of them match what we have in the card number for (i=0; i=0)&&c(h,!i)}});a(function(){var h=document.body,g=h.appendChild(g=document.createElement("div"));a.extend(g.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=g.offsetHeight===100;a.support.selectstart="onselectstart"in g;h.removeChild(g).style.display="none"});a.extend(a.ui,{plugin:{add:function(h,g,i){h=a.ui[h].prototype;for(var b in i){h.plugins[b]=h.plugins[b]||[];h.plugins[b].push([g,i[b]])}},call:function(h,g,i){if((g=h.plugins[g])&&h.element[0].parentNode)for(var b= 0;b0)return true;h[g]=1;i=h[g]>0;h[g]=0;return i},isOverAxis:function(h,g,i){return h>g&&h=9)&&!c.button)return this._mouseUp(c);if(this._mouseStarted){this._mouseDrag(c);return c.preventDefault()}if(this._mouseDistanceMet(c)&&this._mouseDelayMet(c))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,c)!==false)?this._mouseDrag(c):this._mouseUp(c);return!this._mouseStarted},_mouseUp:function(c){a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted= false;c.target==this._mouseDownEvent.target&&a.data(c.target,this.widgetName+".preventClickEvent",true);this._mouseStop(c)}return false},_mouseDistanceMet:function(c){return Math.max(Math.abs(this._mouseDownEvent.pageX-c.pageX),Math.abs(this._mouseDownEvent.pageY-c.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery); (function(a){a.widget("ui.draggable",a.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper== "original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(d){var c= this.options;if(this.helper||c.disabled||a(d.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(d);if(!this.handle)return false;a(c.iframeFix===true?"iframe":c.iframeFix).each(function(){a('
').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(a(this).offset()).appendTo("body")});return true},_mouseStart:function(d){var c=this.options;this.helper= this._createHelper(d);this._cacheHelperProportions();if(a.ui.ddmanager)a.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};a.extend(this.offset,{click:{left:d.pageX-this.offset.left,top:d.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}); this.originalPosition=this.position=this._generatePosition(d);this.originalPageX=d.pageX;this.originalPageY=d.pageY;c.cursorAt&&this._adjustOffsetFromHelper(c.cursorAt);c.containment&&this._setContainment();if(this._trigger("start",d)===false){this._clear();return false}this._cacheHelperProportions();a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,d);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(d,true);a.ui.ddmanager&&a.ui.ddmanager.dragStart(this,d);return true}, _mouseDrag:function(d,c){this.position=this._generatePosition(d);this.positionAbs=this._convertPositionTo("absolute");if(!c){c=this._uiHash();if(this._trigger("drag",d,c)===false){this._mouseUp({});return false}this.position=c.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";a.ui.ddmanager&&a.ui.ddmanager.drag(this,d);return false},_mouseStop:function(d){var c= false;if(a.ui.ddmanager&&!this.options.dropBehaviour)c=a.ui.ddmanager.drop(this,d);if(this.dropped){c=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!c||this.options.revert=="valid"&&c||this.options.revert===true||a.isFunction(this.options.revert)&&this.options.revert.call(this.element,c)){var e=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration, 10),function(){e._trigger("stop",d)!==false&&e._clear()})}else this._trigger("stop",d)!==false&&this._clear();return false},_mouseUp:function(d){this.options.iframeFix===true&&a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});a.ui.ddmanager&&a.ui.ddmanager.dragStop(this,d);return a.ui.mouse.prototype._mouseUp.call(this,d)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(d){var c=!this.options.handle|| !a(this.options.handle,this.element).length?true:false;a(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==d.target)c=true});return c},_createHelper:function(d){var c=this.options;d=a.isFunction(c.helper)?a(c.helper.apply(this.element[0],[d])):c.helper=="clone"?this.element.clone().removeAttr("id"):this.element;d.parents("body").length||d.appendTo(c.appendTo=="parent"?this.element[0].parentNode:c.appendTo);d[0]!=this.element[0]&&!/(fixed|absolute)/.test(d.css("position"))&& d.css("position","absolute");return d},_adjustOffsetFromHelper:function(d){if(typeof d=="string")d=d.split(" ");if(a.isArray(d))d={left:+d[0],top:+d[1]||0};if("left"in d)this.offset.click.left=d.left+this.margins.left;if("right"in d)this.offset.click.left=this.helperProportions.width-d.right+this.margins.left;if("top"in d)this.offset.click.top=d.top+this.margins.top;if("bottom"in d)this.offset.click.top=this.helperProportions.height-d.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent= this.helper.offsetParent();var d=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){d.left+=this.scrollParent.scrollLeft();d.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)d={top:0,left:0};return{top:d.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:d.left+(parseInt(this.offsetParent.css("borderLeftWidth"), 10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var d=this.element.position();return{top:d.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:d.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"), 10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var d=this.options;if(d.containment=="parent")d.containment=this.helper[0].parentNode;if(d.containment=="document"||d.containment=="window")this.containment=[d.containment=="document"?0:a(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,d.containment=="document"?0:a(window).scrollTop()-this.offset.relative.top-this.offset.parent.top, (d.containment=="document"?0:a(window).scrollLeft())+a(d.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(d.containment=="document"?0:a(window).scrollTop())+(a(d.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(d.containment)&&d.containment.constructor!=Array){d=a(d.containment);var c=d[0];if(c){d.offset();var e=a(c).css("overflow")!= "hidden";this.containment=[(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0),(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0),(e?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"), 10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom];this.relative_container=d}}else if(d.containment.constructor==Array)this.containment=d.containment},_convertPositionTo:function(d,c){if(!c)c=this.position;d=d=="absolute"?1:-1;var e=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,h=/(html|body)/i.test(e[0].tagName);return{top:c.top+ this.offset.relative.top*d+this.offset.parent.top*d-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():h?0:e.scrollTop())*d),left:c.left+this.offset.relative.left*d+this.offset.parent.left*d-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():h?0:e.scrollLeft())*d)}},_generatePosition:function(d){var c=this.options,e=this.cssPosition=="absolute"&& !(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,h=/(html|body)/i.test(e[0].tagName),g=d.pageX,i=d.pageY;if(this.originalPosition){var b;if(this.containment){if(this.relative_container){b=this.relative_container.offset();b=[this.containment[0]+b.left,this.containment[1]+b.top,this.containment[2]+b.left,this.containment[3]+b.top]}else b=this.containment;if(d.pageX-this.offset.click.leftb[2])g=b[2]+this.offset.click.left;if(d.pageY-this.offset.click.top>b[3])i=b[3]+this.offset.click.top}if(c.grid){i=c.grid[1]?this.originalPageY+Math.round((i-this.originalPageY)/c.grid[1])*c.grid[1]:this.originalPageY;i=b?!(i-this.offset.click.topb[3])?i:!(i-this.offset.click.topb[2])?g:!(g-this.offset.click.left=0;l--){var o=e.snapElements[l].left,n=o+e.snapElements[l].width,k=e.snapElements[l].top,m=k+e.snapElements[l].height;if(o-g=l&&i<=o||b>=l&&b<=o||io)&&(h>= f&&h<=j||g>=f&&g<=j||hj);default:return false}};a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(d,c){var e=a.ui.ddmanager.droppables[d.options.scope]||[],h=c?c.type:null,g=(d.currentItem||d.element).find(":data(droppable)").andSelf(),i=0;a:for(;i').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(), top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle= this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=h.handles||(!a(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne", nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var g=this.handles.split(",");this.handles={};for(var i=0;i');/sw|se|ne|nw/.test(b)&&f.css({zIndex:++h.zIndex});"se"==b&&f.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[b]=".ui-resizable-"+b;this.element.append(f)}}this._renderAxis=function(j){j=j||this.element;for(var l in this.handles){if(this.handles[l].constructor== String)this.handles[l]=a(this.handles[l],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=a(this.handles[l],this.element),n=0;n=/sw|ne|nw|se|n|s/.test(l)?o.outerHeight():o.outerWidth();o=["padding",/ne|nw|n/.test(l)?"Top":/se|sw|s/.test(l)?"Bottom":/^e$/.test(l)?"Right":"Left"].join("");j.css(o,n);this._proportionallyResize()}a(this.handles[l])}};this._renderAxis(this.element);this._handles=a(".ui-resizable-handle",this.element).disableSelection(); this._handles.mouseover(function(){if(!e.resizing){if(this.className)var j=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);e.axis=j&&j[1]?j[1]:"se"}});if(h.autoHide){this._handles.hide();a(this.element).addClass("ui-resizable-autohide").hover(function(){if(!h.disabled){a(this).removeClass("ui-resizable-autohide");e._handles.show()}},function(){if(!h.disabled)if(!e.resizing){a(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy(); var e=function(g){a(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var h=this.element;h.after(this.originalElement.css({position:h.css("position"),width:h.outerWidth(),height:h.outerHeight(),top:h.css("top"),left:h.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(e){var h= false;for(var g in this.handles)if(a(this.handles[g])[0]==e.target)h=true;return!this.options.disabled&&h},_mouseStart:function(e){var h=this.options,g=this.element.position(),i=this.element;this.resizing=true;this.documentScroll={top:a(document).scrollTop(),left:a(document).scrollLeft()};if(i.is(".ui-draggable")||/absolute/.test(i.css("position")))i.css({position:"absolute",top:g.top,left:g.left});a.browser.opera&&/relative/.test(i.css("position"))&&i.css({position:"relative",top:"auto",left:"auto"}); this._renderProxy();g=d(this.helper.css("left"));var b=d(this.helper.css("top"));if(h.containment){g+=a(h.containment).scrollLeft()||0;b+=a(h.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:g,top:b};this.size=this._helper?{width:i.outerWidth(),height:i.outerHeight()}:{width:i.width(),height:i.height()};this.originalSize=this._helper?{width:i.outerWidth(),height:i.outerHeight()}:{width:i.width(),height:i.height()};this.originalPosition={left:g,top:b};this.sizeDiff= {width:i.outerWidth()-i.width(),height:i.outerHeight()-i.height()};this.originalMousePosition={left:e.pageX,top:e.pageY};this.aspectRatio=typeof h.aspectRatio=="number"?h.aspectRatio:this.originalSize.width/this.originalSize.height||1;h=a(".ui-resizable-"+this.axis).css("cursor");a("body").css("cursor",h=="auto"?this.axis+"-resize":h);i.addClass("ui-resizable-resizing");this._propagate("start",e);return true},_mouseDrag:function(e){var h=this.helper,g=this.originalMousePosition,i=this._change[this.axis]; if(!i)return false;g=i.apply(this,[e,e.pageX-g.left||0,e.pageY-g.top||0]);this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey)g=this._updateRatio(g,e);g=this._respectSize(g,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(g);this._trigger("resize",e,this.ui());return false}, _mouseStop:function(e){this.resizing=false;var h=this.options,g=this;if(this._helper){var i=this._proportionallyResizeElements,b=i.length&&/textarea/i.test(i[0].nodeName);i=b&&a.ui.hasScroll(i[0],"left")?0:g.sizeDiff.height;b=b?0:g.sizeDiff.width;b={width:g.helper.width()-b,height:g.helper.height()-i};i=parseInt(g.element.css("left"),10)+(g.position.left-g.originalPosition.left)||null;var f=parseInt(g.element.css("top"),10)+(g.position.top-g.originalPosition.top)||null;h.animate||this.element.css(a.extend(b, {top:f,left:i}));g.helper.height(g.size.height);g.helper.width(g.size.width);this._helper&&!h.animate&&this._proportionallyResize()}a("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",e);this._helper&&this.helper.remove();return false},_updateVirtualBoundaries:function(e){var h=this.options,g,i,b;h={minWidth:c(h.minWidth)?h.minWidth:0,maxWidth:c(h.maxWidth)?h.maxWidth:Infinity,minHeight:c(h.minHeight)?h.minHeight:0,maxHeight:c(h.maxHeight)?h.maxHeight: Infinity};if(this._aspectRatio||e){e=h.minHeight*this.aspectRatio;i=h.minWidth/this.aspectRatio;g=h.maxHeight*this.aspectRatio;b=h.maxWidth/this.aspectRatio;if(e>h.minWidth)h.minWidth=e;if(i>h.minHeight)h.minHeight=i;if(ge.width,j=c(e.height)&&h.minHeight&&h.minHeight>e.height;if(f)e.width=h.minWidth;if(j)e.height=h.minHeight;if(i)e.width=h.maxWidth;if(b)e.height=h.maxHeight;var l=this.originalPosition.left+this.originalSize.width,o=this.position.top+this.size.height,n=/sw|nw|w/.test(g);g=/nw|ne|n/.test(g);if(f&&n)e.left=l-h.minWidth;if(i&&n)e.left=l-h.maxWidth;if(j&&g)e.top=o-h.minHeight;if(b&&g)e.top=o-h.maxHeight;if((h=!e.width&&!e.height)&&!e.left&&e.top)e.top=null;else if(h&&!e.top&&e.left)e.left= null;return e},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var e=this.helper||this.element,h=0;h');var h=a.browser.msie&&a.browser.version<7,g=h?1:0;h=h?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+ h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++e.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(e,h){return{width:this.originalSize.width+h}},w:function(e,h){return{left:this.originalPosition.left+h,width:this.originalSize.width-h}},n:function(e,h,g){return{top:this.originalPosition.top+g,height:this.originalSize.height-g}},s:function(e,h,g){return{height:this.originalSize.height+ g}},se:function(e,h,g){return a.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,h,g]))},sw:function(e,h,g){return a.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,h,g]))},ne:function(e,h,g){return a.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,h,g]))},nw:function(e,h,g){return a.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,h,g]))}},_propagate:function(e,h){a.ui.plugin.call(this,e,[h,this.ui()]); e!="resize"&&this._trigger(e,h,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});a.extend(a.ui.resizable,{version:"1.8.14"});a.ui.plugin.add("resizable","alsoResize",{start:function(){var e=a(this).data("resizable").options,h=function(g){a(g).each(function(){var i=a(this);i.data("resizable-alsoresize",{width:parseInt(i.width(), 10),height:parseInt(i.height(),10),left:parseInt(i.css("left"),10),top:parseInt(i.css("top"),10),position:i.css("position")})})};if(typeof e.alsoResize=="object"&&!e.alsoResize.parentNode)if(e.alsoResize.length){e.alsoResize=e.alsoResize[0];h(e.alsoResize)}else a.each(e.alsoResize,function(g){h(g)});else h(e.alsoResize)},resize:function(e,h){var g=a(this).data("resizable");e=g.options;var i=g.originalSize,b=g.originalPosition,f={height:g.size.height-i.height||0,width:g.size.width-i.width||0,top:g.position.top- b.top||0,left:g.position.left-b.left||0},j=function(l,o){a(l).each(function(){var n=a(this),k=a(this).data("resizable-alsoresize"),m={},p=o&&o.length?o:n.parents(h.originalElement[0]).length?["width","height"]:["width","height","top","left"];a.each(p,function(q,s){if((q=(k[s]||0)+(f[s]||0))&&q>=0)m[s]=q||null});if(a.browser.opera&&/relative/.test(n.css("position"))){g._revertToRelativePosition=true;n.css({position:"absolute",top:"auto",left:"auto"})}n.css(m)})};typeof e.alsoResize=="object"&&!e.alsoResize.nodeType? a.each(e.alsoResize,function(l,o){j(l,o)}):j(e.alsoResize)},stop:function(){var e=a(this).data("resizable"),h=e.options,g=function(i){a(i).each(function(){var b=a(this);b.css({position:b.data("resizable-alsoresize").position})})};if(e._revertToRelativePosition){e._revertToRelativePosition=false;typeof h.alsoResize=="object"&&!h.alsoResize.nodeType?a.each(h.alsoResize,function(i){g(i)}):g(h.alsoResize)}a(this).removeData("resizable-alsoresize")}});a.ui.plugin.add("resizable","animate",{stop:function(e){var h= a(this).data("resizable"),g=h.options,i=h._proportionallyResizeElements,b=i.length&&/textarea/i.test(i[0].nodeName),f=b&&a.ui.hasScroll(i[0],"left")?0:h.sizeDiff.height;b={width:h.size.width-(b?0:h.sizeDiff.width),height:h.size.height-f};f=parseInt(h.element.css("left"),10)+(h.position.left-h.originalPosition.left)||null;var j=parseInt(h.element.css("top"),10)+(h.position.top-h.originalPosition.top)||null;h.element.animate(a.extend(b,j&&f?{top:j,left:f}:{}),{duration:g.animateDuration,easing:g.animateEasing, step:function(){var l={width:parseInt(h.element.css("width"),10),height:parseInt(h.element.css("height"),10),top:parseInt(h.element.css("top"),10),left:parseInt(h.element.css("left"),10)};i&&i.length&&a(i[0]).css({width:l.width,height:l.height});h._updateCache(l);h._propagate("resize",e)}})}});a.ui.plugin.add("resizable","containment",{start:function(){var e=a(this).data("resizable"),h=e.element,g=e.options.containment;if(h=g instanceof a?g.get(0):/parent/.test(g)?h.parent().get(0):g){e.containerElement= a(h);if(/document/.test(g)||g==document){e.containerOffset={left:0,top:0};e.containerPosition={left:0,top:0};e.parentData={element:a(document),left:0,top:0,width:a(document).width(),height:a(document).height()||document.body.parentNode.scrollHeight}}else{var i=a(h),b=[];a(["Top","Right","Left","Bottom"]).each(function(l,o){b[l]=d(i.css("padding"+o))});e.containerOffset=i.offset();e.containerPosition=i.position();e.containerSize={height:i.innerHeight()-b[3],width:i.innerWidth()-b[1]};g=e.containerOffset; var f=e.containerSize.height,j=e.containerSize.width;j=a.ui.hasScroll(h,"left")?h.scrollWidth:j;f=a.ui.hasScroll(h)?h.scrollHeight:f;e.parentData={element:h,left:g.left,top:g.top,width:j,height:f}}}},resize:function(e){var h=a(this).data("resizable"),g=h.options,i=h.containerOffset,b=h.position;e=h._aspectRatio||e.shiftKey;var f={top:0,left:0},j=h.containerElement;if(j[0]!=document&&/static/.test(j.css("position")))f=i;if(b.left<(h._helper?i.left:0)){h.size.width+=h._helper?h.position.left-i.left: h.position.left-f.left;if(e)h.size.height=h.size.width/g.aspectRatio;h.position.left=g.helper?i.left:0}if(b.top<(h._helper?i.top:0)){h.size.height+=h._helper?h.position.top-i.top:h.position.top;if(e)h.size.width=h.size.height*g.aspectRatio;h.position.top=h._helper?i.top:0}h.offset.left=h.parentData.left+h.position.left;h.offset.top=h.parentData.top+h.position.top;g=Math.abs((h._helper?h.offset.left-f.left:h.offset.left-f.left)+h.sizeDiff.width);i=Math.abs((h._helper?h.offset.top-f.top:h.offset.top- i.top)+h.sizeDiff.height);b=h.containerElement.get(0)==h.element.parent().get(0);f=/relative|absolute/.test(h.containerElement.css("position"));if(b&&f)g-=h.parentData.left;if(g+h.size.width>=h.parentData.width){h.size.width=h.parentData.width-g;if(e)h.size.height=h.size.width/h.aspectRatio}if(i+h.size.height>=h.parentData.height){h.size.height=h.parentData.height-i;if(e)h.size.width=h.size.height*h.aspectRatio}},stop:function(){var e=a(this).data("resizable"),h=e.options,g=e.containerOffset,i=e.containerPosition, b=e.containerElement,f=a(e.helper),j=f.offset(),l=f.outerWidth()-e.sizeDiff.width;f=f.outerHeight()-e.sizeDiff.height;e._helper&&!h.animate&&/relative/.test(b.css("position"))&&a(this).css({left:j.left-i.left-g.left,width:l,height:f});e._helper&&!h.animate&&/static/.test(b.css("position"))&&a(this).css({left:j.left-i.left-g.left,width:l,height:f})}});a.ui.plugin.add("resizable","ghost",{start:function(){var e=a(this).data("resizable"),h=e.options,g=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25, display:"block",position:"relative",height:g.height,width:g.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");e.ghost.appendTo(e.helper)},resize:function(){var e=a(this).data("resizable");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=a(this).data("resizable");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}});a.ui.plugin.add("resizable","grid",{resize:function(){var e= a(this).data("resizable"),h=e.options,g=e.size,i=e.originalSize,b=e.originalPosition,f=e.axis;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var j=Math.round((g.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1);h=Math.round((g.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(f)){e.size.width=i.width+j;e.size.height=i.height+h}else if(/^(ne)$/.test(f)){e.size.width=i.width+j;e.size.height=i.height+h;e.position.top=b.top-h}else{if(/^(sw)$/.test(f)){e.size.width=i.width+j;e.size.height= i.height+h}else{e.size.width=i.width+j;e.size.height=i.height+h;e.position.top=b.top-h}e.position.left=b.left-j}}});var d=function(e){return parseInt(e,10)||0},c=function(e){return!isNaN(parseInt(e,10))}})(jQuery); (function(a){a.widget("ui.selectable",a.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var d=this;this.element.addClass("ui-selectable");this.dragged=false;var c;this.refresh=function(){c=a(d.options.filter,d.element[0]);c.each(function(){var e=a(this),h=e.offset();a.data(this,"selectable-item",{element:this,$element:e,left:h.left,top:h.top,right:h.left+e.outerWidth(),bottom:h.top+e.outerHeight(),startselected:false,selected:e.hasClass("ui-selected"), selecting:e.hasClass("ui-selecting"),unselecting:e.hasClass("ui-unselecting")})})};this.refresh();this.selectees=c.addClass("ui-selectee");this._mouseInit();this.helper=a("
")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(d){var c=this;this.opos=[d.pageX, d.pageY];if(!this.options.disabled){var e=this.options;this.selectees=a(e.filter,this.element[0]);this._trigger("start",d);a(e.appendTo).append(this.helper);this.helper.css({left:d.clientX,top:d.clientY,width:0,height:0});e.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var h=a.data(this,"selectable-item");h.startselected=true;if(!d.metaKey){h.$element.removeClass("ui-selected");h.selected=false;h.$element.addClass("ui-unselecting");h.unselecting=true;c._trigger("unselecting", d,{unselecting:h.element})}});a(d.target).parents().andSelf().each(function(){var h=a.data(this,"selectable-item");if(h){var g=!d.metaKey||!h.$element.hasClass("ui-selected");h.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");h.unselecting=!g;h.selecting=g;(h.selected=g)?c._trigger("selecting",d,{selecting:h.element}):c._trigger("unselecting",d,{unselecting:h.element});return false}})}},_mouseDrag:function(d){var c=this;this.dragged=true;if(!this.options.disabled){var e= this.options,h=this.opos[0],g=this.opos[1],i=d.pageX,b=d.pageY;if(h>i){var f=i;i=h;h=f}if(g>b){f=b;b=g;g=f}this.helper.css({left:h,top:g,width:i-h,height:b-g});this.selectees.each(function(){var j=a.data(this,"selectable-item");if(!(!j||j.element==c.element[0])){var l=false;if(e.tolerance=="touch")l=!(j.left>i||j.rightb||j.bottomh&&j.rightg&&j.bottom *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){var d=this.options;this.containerCache={};this.element.addClass("ui-sortable"); this.refresh();this.floating=this.items.length?d.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var d=this.items.length-1;d>=0;d--)this.items[d].item.removeData("sortable-item");return this},_setOption:function(d,c){if(d=== "disabled"){this.options[d]=c;this.widget()[c?"addClass":"removeClass"]("ui-sortable-disabled")}else a.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(d,c){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(d);var e=null,h=this;a(d.target).parents().each(function(){if(a.data(this,"sortable-item")==h){e=a(this);return false}});if(a.data(d.target,"sortable-item")==h)e=a(d.target);if(!e)return false;if(this.options.handle&& !c){var g=false;a(this.options.handle,e).find("*").andSelf().each(function(){if(this==d.target)g=true});if(!g)return false}this.currentItem=e;this._removeCurrentsFromItems();return true},_mouseStart:function(d,c,e){c=this.options;var h=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(d);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top, left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");a.extend(this.offset,{click:{left:d.pageX-this.offset.left,top:d.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(d);this.originalPageX=d.pageX;this.originalPageY=d.pageY;c.cursorAt&&this._adjustOffsetFromHelper(c.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]}; this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();c.containment&&this._setContainment();if(c.cursor){if(a("body").css("cursor"))this._storedCursor=a("body").css("cursor");a("body").css("cursor",c.cursor)}if(c.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",c.opacity)}if(c.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",c.zIndex)}if(this.scrollParent[0]!= document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",d,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!e)for(e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("activate",d,h._uiHash(this));if(a.ui.ddmanager)a.ui.ddmanager.current=this;a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,d);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(d); return true},_mouseDrag:function(d){this.position=this._generatePosition(d);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var c=this.options,e=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-d.pageY=0;c--){e=this.items[c];var h=e.item[0],g=this._intersectsWithPointer(e);if(g)if(h!=this.currentItem[0]&&this.placeholder[g==1?"next":"prev"]()[0]!=h&&!a.ui.contains(this.placeholder[0],h)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0], h):true)){this.direction=g==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(e))this._rearrange(d,e);else break;this._trigger("change",d,this._uiHash());break}}this._contactContainers(d);a.ui.ddmanager&&a.ui.ddmanager.drag(this,d);this._trigger("sort",d,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(d,c){if(d){a.ui.ddmanager&&!this.options.dropBehaviour&&a.ui.ddmanager.drop(this,d);if(this.options.revert){var e=this;c=e.placeholder.offset(); e.reverting=true;a(this.helper).animate({left:c.left-this.offset.parent.left-e.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:c.top-this.offset.parent.top-e.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){e._clear(d)})}else this._clear(d,c);return false}},cancel:function(){var d=this;if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"): this.currentItem.show();for(var c=this.containers.length-1;c>=0;c--){this.containers[c]._trigger("deactivate",null,d._uiHash(this));if(this.containers[c].containerCache.over){this.containers[c]._trigger("out",null,d._uiHash(this));this.containers[c].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();a.extend(this,{helper:null, dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?a(this.domPosition.prev).after(this.currentItem):a(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(d){var c=this._getItemsAsjQuery(d&&d.connected),e=[];d=d||{};a(c).each(function(){var h=(a(d.item||this).attr(d.attribute||"id")||"").match(d.expression||/(.+)[-=_](.+)/);if(h)e.push((d.key||h[1]+"[]")+"="+(d.key&&d.expression?h[1]:h[2]))});!e.length&&d.key&&e.push(d.key+"=");return e.join("&")}, toArray:function(d){var c=this._getItemsAsjQuery(d&&d.connected),e=[];d=d||{};c.each(function(){e.push(a(d.item||this).attr(d.attribute||"id")||"")});return e},_intersectsWith:function(d){var c=this.positionAbs.left,e=c+this.helperProportions.width,h=this.positionAbs.top,g=h+this.helperProportions.height,i=d.left,b=i+d.width,f=d.top,j=f+d.height,l=this.offset.click.top,o=this.offset.click.left;l=h+l>f&&h+li&&c+od[this.floating?"width":"height"]?l:i0?"down":"up")},_getDragHorizontalDirection:function(){var d=this.positionAbs.left-this.lastPositionAbs.left;return d!=0&&(d>0?"right":"left")},refresh:function(d){this._refreshItems(d);this.refreshPositions();return this},_connectWith:function(){var d=this.options;return d.connectWith.constructor==String?[d.connectWith]:d.connectWith},_getItemsAsjQuery:function(d){var c=[],e=[],h=this._connectWith(); if(h&&d)for(d=h.length-1;d>=0;d--)for(var g=a(h[d]),i=g.length-1;i>=0;i--){var b=a.data(g[i],"sortable");if(b&&b!=this&&!b.options.disabled)e.push([a.isFunction(b.options.items)?b.options.items.call(b.element):a(b.options.items,b.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),b])}e.push([a.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):a(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]);for(d=e.length-1;d>=0;d--)e[d][0].each(function(){c.push(this)});return a(c)},_removeCurrentsFromItems:function(){for(var d=this.currentItem.find(":data(sortable-item)"),c=0;c=0;g--)for(var i=a(h[g]),b=i.length-1;b>=0;b--){var f=a.data(i[b],"sortable");if(f&&f!=this&&!f.options.disabled){e.push([a.isFunction(f.options.items)?f.options.items.call(f.element[0],d,{item:this.currentItem}):a(f.options.items,f.element),f]);this.containers.push(f)}}for(g=e.length-1;g>=0;g--){d=e[g][1];h=e[g][0];b=0;for(i=h.length;b=0;c--){var e=this.items[c];if(!(e.instance!=this.currentContainer&&this.currentContainer&&e.item[0]!=this.currentItem[0])){var h=this.options.toleranceElement?a(this.options.toleranceElement,e.item):e.item;if(!d){e.width=h.outerWidth();e.height=h.outerHeight()}h=h.offset();e.left=h.left;e.top=h.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(c= this.containers.length-1;c>=0;c--){h=this.containers[c].element.offset();this.containers[c].containerCache.left=h.left;this.containers[c].containerCache.top=h.top;this.containers[c].containerCache.width=this.containers[c].element.outerWidth();this.containers[c].containerCache.height=this.containers[c].element.outerHeight()}return this},_createPlaceholder:function(d){var c=d||this,e=c.options;if(!e.placeholder||e.placeholder.constructor==String){var h=e.placeholder;e.placeholder={element:function(){var g= a(document.createElement(c.currentItem[0].nodeName)).addClass(h||c.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!h)g.style.visibility="hidden";return g},update:function(g,i){if(!(h&&!e.forcePlaceholderSize)){i.height()||i.height(c.currentItem.innerHeight()-parseInt(c.currentItem.css("paddingTop")||0,10)-parseInt(c.currentItem.css("paddingBottom")||0,10));i.width()||i.width(c.currentItem.innerWidth()-parseInt(c.currentItem.css("paddingLeft")||0,10)-parseInt(c.currentItem.css("paddingRight")|| 0,10))}}}}c.placeholder=a(e.placeholder.element.call(c.element,c.currentItem));c.currentItem.after(c.placeholder);e.placeholder.update(c,c.placeholder)},_contactContainers:function(d){for(var c=null,e=null,h=this.containers.length-1;h>=0;h--)if(!a.ui.contains(this.currentItem[0],this.containers[h].element[0]))if(this._intersectsWith(this.containers[h].containerCache)){if(!(c&&a.ui.contains(this.containers[h].element[0],c.element[0]))){c=this.containers[h];e=h}}else if(this.containers[h].containerCache.over){this.containers[h]._trigger("out", d,this._uiHash(this));this.containers[h].containerCache.over=0}if(c)if(this.containers.length===1){this.containers[e]._trigger("over",d,this._uiHash(this));this.containers[e].containerCache.over=1}else if(this.currentContainer!=this.containers[e]){c=1E4;h=null;for(var g=this.positionAbs[this.containers[e].floating?"left":"top"],i=this.items.length-1;i>=0;i--)if(a.ui.contains(this.containers[e].element[0],this.items[i].item[0])){var b=this.items[i][this.containers[e].floating?"left":"top"];if(Math.abs(b- g)this.containment[2])g=this.containment[2]+this.offset.click.left;if(d.pageY-this.offset.click.top>this.containment[3])i=this.containment[3]+this.offset.click.top}if(c.grid){i=this.originalPageY+Math.round((i- this.originalPageY)/c.grid[1])*c.grid[1];i=this.containment?!(i-this.offset.click.topthis.containment[3])?i:!(i-this.offset.click.topthis.containment[2])?g:!(g-this.offset.click.left=0;h--)if(a.ui.contains(this.containers[h].element[0],this.currentItem[0])&&!c){e.push(function(g){return function(i){g._trigger("receive",i,this._uiHash(this))}}.call(this,this.containers[h]));e.push(function(g){return function(i){g._trigger("update",i,this._uiHash(this))}}.call(this,this.containers[h]))}}for(h=this.containers.length-1;h>=0;h--){c||e.push(function(g){return function(i){g._trigger("deactivate",i,this._uiHash(this))}}.call(this, this.containers[h]));if(this.containers[h].containerCache.over){e.push(function(g){return function(i){g._trigger("out",i,this._uiHash(this))}}.call(this,this.containers[h]));this.containers[h].containerCache.over=0}}this._storedCursor&&a("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!c){this._trigger("beforeStop", d,this._uiHash());for(h=0;h").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}); n.wrap(m);m=n.parent();if(n.css("position")=="static"){m.css({position:"relative"});n.css({position:"relative"})}else{a.extend(k,{position:n.css("position"),zIndex:n.css("z-index")});a.each(["top","left","bottom","right"],function(p,q){k[q]=n.css(q);if(isNaN(parseInt(k[q],10)))k[q]="auto"});n.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return m.css(k).show()},removeWrapper:function(n){if(n.parent().is(".ui-effects-wrapper"))return n.parent().replaceWith(n);return n},setTransition:function(n, k,m,p){p=p||{};a.each(k,function(q,s){unit=n.cssUnit(s);if(unit[0]>0)p[s]=unit[0]*m+unit[1]});return p}});a.fn.extend({effect:function(n){var k=b.apply(this,arguments),m={options:k[1],duration:k[2],callback:k[3]};k=m.options.mode;var p=a.effects[n];if(a.fx.off||!p)return k?this[k](m.duration,m.callback):this.each(function(){m.callback&&m.callback.call(this)});return p.call(this,m)},_show:a.fn.show,show:function(n){if(f(n))return this._show.apply(this,arguments);else{var k=b.apply(this,arguments); k[1].mode="show";return this.effect.apply(this,k)}},_hide:a.fn.hide,hide:function(n){if(f(n))return this._hide.apply(this,arguments);else{var k=b.apply(this,arguments);k[1].mode="hide";return this.effect.apply(this,k)}},__toggle:a.fn.toggle,toggle:function(n){if(f(n)||typeof n==="boolean"||a.isFunction(n))return this.__toggle.apply(this,arguments);else{var k=b.apply(this,arguments);k[1].mode="toggle";return this.effect.apply(this,k)}},cssUnit:function(n){var k=this.css(n),m=[];a.each(["em","px","%", "pt"],function(p,q){if(k.indexOf(q)>0)m=[parseFloat(k),q]});return m}});a.easing.jswing=a.easing.swing;a.extend(a.easing,{def:"easeOutQuad",swing:function(n,k,m,p,q){return a.easing[a.easing.def](n,k,m,p,q)},easeInQuad:function(n,k,m,p,q){return p*(k/=q)*k+m},easeOutQuad:function(n,k,m,p,q){return-p*(k/=q)*(k-2)+m},easeInOutQuad:function(n,k,m,p,q){if((k/=q/2)<1)return p/2*k*k+m;return-p/2*(--k*(k-2)-1)+m},easeInCubic:function(n,k,m,p,q){return p*(k/=q)*k*k+m},easeOutCubic:function(n,k,m,p,q){return p* ((k=k/q-1)*k*k+1)+m},easeInOutCubic:function(n,k,m,p,q){if((k/=q/2)<1)return p/2*k*k*k+m;return p/2*((k-=2)*k*k+2)+m},easeInQuart:function(n,k,m,p,q){return p*(k/=q)*k*k*k+m},easeOutQuart:function(n,k,m,p,q){return-p*((k=k/q-1)*k*k*k-1)+m},easeInOutQuart:function(n,k,m,p,q){if((k/=q/2)<1)return p/2*k*k*k*k+m;return-p/2*((k-=2)*k*k*k-2)+m},easeInQuint:function(n,k,m,p,q){return p*(k/=q)*k*k*k*k+m},easeOutQuint:function(n,k,m,p,q){return p*((k=k/q-1)*k*k*k*k+1)+m},easeInOutQuint:function(n,k,m,p,q){if((k/= q/2)<1)return p/2*k*k*k*k*k+m;return p/2*((k-=2)*k*k*k*k+2)+m},easeInSine:function(n,k,m,p,q){return-p*Math.cos(k/q*(Math.PI/2))+p+m},easeOutSine:function(n,k,m,p,q){return p*Math.sin(k/q*(Math.PI/2))+m},easeInOutSine:function(n,k,m,p,q){return-p/2*(Math.cos(Math.PI*k/q)-1)+m},easeInExpo:function(n,k,m,p,q){return k==0?m:p*Math.pow(2,10*(k/q-1))+m},easeOutExpo:function(n,k,m,p,q){return k==q?m+p:p*(-Math.pow(2,-10*k/q)+1)+m},easeInOutExpo:function(n,k,m,p,q){if(k==0)return m;if(k==q)return m+p;if((k/= q/2)<1)return p/2*Math.pow(2,10*(k-1))+m;return p/2*(-Math.pow(2,-10*--k)+2)+m},easeInCirc:function(n,k,m,p,q){return-p*(Math.sqrt(1-(k/=q)*k)-1)+m},easeOutCirc:function(n,k,m,p,q){return p*Math.sqrt(1-(k=k/q-1)*k)+m},easeInOutCirc:function(n,k,m,p,q){if((k/=q/2)<1)return-p/2*(Math.sqrt(1-k*k)-1)+m;return p/2*(Math.sqrt(1-(k-=2)*k)+1)+m},easeInElastic:function(n,k,m,p,q){n=1.70158;var s=0,r=p;if(k==0)return m;if((k/=q)==1)return m+p;s||(s=q*0.3);if(r").css({position:"absolute",visibility:"visible",left:-j*(i/e),top:-f*(b/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:i/e,height:b/c,left:g.left+j*(i/e)+(d.options.mode=="show"?(j-Math.floor(e/2))*(i/e):0),top:g.top+f*(b/c)+(d.options.mode=="show"?(f-Math.floor(c/2))*(b/c):0),opacity:d.options.mode=="show"?0:1}).animate({left:g.left+j*(i/e)+(d.options.mode=="show"?0:(j-Math.floor(e/2))*(i/e)),top:g.top+ f*(b/c)+(d.options.mode=="show"?0:(f-Math.floor(c/2))*(b/c)),opacity:d.options.mode=="show"?1:0},d.duration||500);setTimeout(function(){d.options.mode=="show"?h.css({visibility:"visible"}):h.css({visibility:"visible"}).hide();d.callback&&d.callback.apply(h[0]);h.dequeue();a("div.ui-effects-explode").remove()},d.duration||500)})}})(jQuery); (function(a){a.effects.fade=function(d){return this.queue(function(){var c=a(this),e=a.effects.setMode(c,d.options.mode||"hide");c.animate({opacity:e},{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){d.callback&&d.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery); (function(a){a.effects.fold=function(d){return this.queue(function(){var c=a(this),e=["position","top","bottom","left","right"],h=a.effects.setMode(c,d.options.mode||"hide"),g=d.options.size||15,i=!!d.options.horizFirst,b=d.duration?d.duration/2:a.fx.speeds._default/2;a.effects.save(c,e);c.show();var f=a.effects.createWrapper(c).css({overflow:"hidden"}),j=h=="show"!=i,l=j?["width","height"]:["height","width"];j=j?[f.width(),f.height()]:[f.height(),f.width()];var o=/([0-9]+)%/.exec(g);if(o)g=parseInt(o[1], 10)/100*j[h=="hide"?0:1];if(h=="show")f.css(i?{height:0,width:g}:{height:g,width:0});i={};o={};i[l[0]]=h=="show"?j[0]:g;o[l[1]]=h=="show"?j[1]:0;f.animate(i,b,d.options.easing).animate(o,b,d.options.easing,function(){h=="hide"&&c.hide();a.effects.restore(c,e);a.effects.removeWrapper(c);d.callback&&d.callback.apply(c[0],arguments);c.dequeue()})})}})(jQuery); (function(a){a.effects.highlight=function(d){return this.queue(function(){var c=a(this),e=["backgroundImage","backgroundColor","opacity"],h=a.effects.setMode(c,d.options.mode||"show"),g={backgroundColor:c.css("backgroundColor")};if(h=="hide")g.opacity=0;a.effects.save(c,e);c.show().css({backgroundImage:"none",backgroundColor:d.options.color||"#ffff99"}).animate(g,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){h=="hide"&&c.hide();a.effects.restore(c,e);h=="show"&&!a.support.opacity&& this.style.removeAttribute("filter");d.callback&&d.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery); (function(a){a.effects.pulsate=function(d){return this.queue(function(){var c=a(this),e=a.effects.setMode(c,d.options.mode||"show");times=(d.options.times||5)*2-1;duration=d.duration?d.duration/2:a.fx.speeds._default/2;isVisible=c.is(":visible");animateTo=0;if(!isVisible){c.css("opacity",0).show();animateTo=1}if(e=="hide"&&isVisible||e=="show"&&!isVisible)times--;for(e=0;e').appendTo(document.body).addClass(d.options.className).css({top:h.top,left:h.left,height:c.innerHeight(),width:c.innerWidth(),position:"absolute"}).animate(e,d.duration,d.options.easing,function(){g.remove();d.callback&&d.callback.apply(c[0],arguments); c.dequeue()})})}})(jQuery); (function(a){a.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var d=this,c=d.options;d.running=0;d.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix");d.headers= d.element.find(c.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){c.disabled||a(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){c.disabled||a(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){c.disabled||a(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){c.disabled||a(this).removeClass("ui-state-focus")});d.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom"); if(c.navigation){var e=d.element.find("a").filter(c.navigationFilter).eq(0);if(e.length){var h=e.closest(".ui-accordion-header");d.active=h.length?h:e.closest(".ui-accordion-content").prev()}}d.active=d._findActive(d.active||c.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");d.active.next().addClass("ui-accordion-content-active");d._createIcons();d.resize();d.element.attr("role","tablist");d.headers.attr("role","tab").bind("keydown.accordion", function(g){return d._keydown(g)}).next().attr("role","tabpanel");d.headers.not(d.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide();d.active.length?d.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):d.headers.eq(0).attr("tabIndex",0);a.browser.safari||d.headers.find("a").attr("tabIndex",-1);c.event&&d.headers.bind(c.event.split(" ").join(".accordion ")+".accordion",function(g){d._clickHandler.call(d,g,this);g.preventDefault()})},_createIcons:function(){var d= this.options;if(d.icons){a("").addClass("ui-icon "+d.icons.header).prependTo(this.headers);this.active.children(".ui-icon").toggleClass(d.icons.header).toggleClass(d.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var d=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex"); this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var c=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(d.autoHeight||d.fillHeight)c.css("height","");return a.Widget.prototype.destroy.call(this)},_setOption:function(d,c){a.Widget.prototype._setOption.apply(this,arguments);d=="active"&&this.activate(c);if(d=="icons"){this._destroyIcons(); c&&this._createIcons()}if(d=="disabled")this.headers.add(this.headers.next())[c?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(d){if(!(this.options.disabled||d.altKey||d.ctrlKey)){var c=a.ui.keyCode,e=this.headers.length,h=this.headers.index(d.target),g=false;switch(d.keyCode){case c.RIGHT:case c.DOWN:g=this.headers[(h+1)%e];break;case c.LEFT:case c.UP:g=this.headers[(h-1+e)%e];break;case c.SPACE:case c.ENTER:this._clickHandler({target:d.target},d.target); d.preventDefault()}if(g){a(d.target).attr("tabIndex",-1);a(g).attr("tabIndex",0);g.focus();return false}return true}},resize:function(){var d=this.options,c;if(d.fillSpace){if(a.browser.msie){var e=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}c=this.element.parent().height();a.browser.msie&&this.element.parent().css("overflow",e);this.headers.each(function(){c-=a(this).outerHeight(true)});this.headers.next().each(function(){a(this).height(Math.max(0,c-a(this).innerHeight()+ a(this).height()))}).css("overflow","auto")}else if(d.autoHeight){c=0;this.headers.next().each(function(){c=Math.max(c,a(this).height("").height())}).height(c)}return this},activate:function(d){this.options.active=d;d=this._findActive(d)[0];this._clickHandler({target:d},d);return this},_findActive:function(d){return d?typeof d==="number"?this.headers.filter(":eq("+d+")"):this.headers.not(this.headers.not(d)):d===false?a([]):this.headers.filter(":eq(0)")},_clickHandler:function(d,c){var e=this.options; if(!e.disabled)if(d.target){d=a(d.currentTarget||c);c=d[0]===this.active[0];e.active=e.collapsible&&c?false:this.headers.index(d);if(!(this.running||!e.collapsible&&c)){var h=this.active;f=d.next();i=this.active.next();b={options:e,newHeader:c&&e.collapsible?a([]):d,oldHeader:this.active,newContent:c&&e.collapsible?a([]):f,oldContent:i};var g=this.headers.index(this.active[0])>this.headers.index(d[0]);this.active=c?a([]):d;this._toggle(f,i,b,c,g);h.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(e.icons.headerSelected).addClass(e.icons.header); if(!c){d.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(e.icons.header).addClass(e.icons.headerSelected);d.next().addClass("ui-accordion-content-active")}}}else if(e.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(e.icons.headerSelected).addClass(e.icons.header);this.active.next().addClass("ui-accordion-content-active");var i=this.active.next(), b={options:e,newHeader:a([]),oldHeader:e.active,newContent:a([]),oldContent:i},f=this.active=a([]);this._toggle(f,i,b)}},_toggle:function(d,c,e,h,g){var i=this,b=i.options;i.toShow=d;i.toHide=c;i.data=e;var f=function(){if(i)return i._completed.apply(i,arguments)};i._trigger("changestart",null,i.data);i.running=c.size()===0?d.size():c.size();if(b.animated){e={};e=b.collapsible&&h?{toShow:a([]),toHide:c,complete:f,down:g,autoHeight:b.autoHeight||b.fillSpace}:{toShow:d,toHide:c,complete:f,down:g,autoHeight:b.autoHeight|| b.fillSpace};if(!b.proxied)b.proxied=b.animated;if(!b.proxiedDuration)b.proxiedDuration=b.duration;b.animated=a.isFunction(b.proxied)?b.proxied(e):b.proxied;b.duration=a.isFunction(b.proxiedDuration)?b.proxiedDuration(e):b.proxiedDuration;h=a.ui.accordion.animations;var j=b.duration,l=b.animated;if(l&&!h[l]&&!a.easing[l])l="slide";h[l]||(h[l]=function(o){this.slide(o,{easing:l,duration:j||700})});h[l](e)}else{if(b.collapsible&&h)d.toggle();else{c.hide();d.show()}f(true)}c.prev().attr({"aria-expanded":"false", "aria-selected":"false",tabIndex:-1}).blur();d.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(d){this.running=d?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");if(this.toHide.length)this.toHide.parent()[0].className=this.toHide.parent()[0].className;this._trigger("change",null,this.data)}}});a.extend(a.ui.accordion,{version:"1.8.14", animations:{slide:function(d,c){d=a.extend({easing:"swing",duration:300},d,c);if(d.toHide.size())if(d.toShow.size()){var e=d.toShow.css("overflow"),h=0,g={},i={},b;c=d.toShow;b=c[0].style.width;c.width(parseInt(c.parent().width(),10)-parseInt(c.css("paddingLeft"),10)-parseInt(c.css("paddingRight"),10)-(parseInt(c.css("borderLeftWidth"),10)||0)-(parseInt(c.css("borderRightWidth"),10)||0));a.each(["height","paddingTop","paddingBottom"],function(f,j){i[j]="hide";f=(""+a.css(d.toShow[0],j)).match(/^([\d+-.]+)(.*)$/); g[j]={value:f[1],unit:f[2]||"px"}});d.toShow.css({height:0,overflow:"hidden"}).show();d.toHide.filter(":hidden").each(d.complete).end().filter(":visible").animate(i,{step:function(f,j){if(j.prop=="height")h=j.end-j.start===0?0:(j.now-j.start)/(j.end-j.start);d.toShow[0].style[j.prop]=h*g[j.prop].value+g[j.prop].unit},duration:d.duration,easing:d.easing,complete:function(){d.autoHeight||d.toShow.css("height","");d.toShow.css({width:b,overflow:e});d.complete()}})}else d.toHide.animate({height:"hide", paddingTop:"hide",paddingBottom:"hide"},d);else d.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},d)},bounceslide:function(d){this.slide(d,{easing:d.down?"easeOutBounce":"swing",duration:d.down?1E3:200})}}})})(jQuery); (function(a){var d=0;a.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var c=this,e=this.element[0].ownerDocument,h;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(g){if(!(c.options.disabled||c.element.attr("readonly"))){h= false;var i=a.ui.keyCode;switch(g.keyCode){case i.PAGE_UP:c._move("previousPage",g);break;case i.PAGE_DOWN:c._move("nextPage",g);break;case i.UP:c._move("previous",g);g.preventDefault();break;case i.DOWN:c._move("next",g);g.preventDefault();break;case i.ENTER:case i.NUMPAD_ENTER:if(c.menu.active){h=true;g.preventDefault()}case i.TAB:if(!c.menu.active)return;c.menu.select(g);break;case i.ESCAPE:c.element.val(c.term);c.close(g);break;default:clearTimeout(c.searching);c.searching=setTimeout(function(){if(c.term!= c.element.val()){c.selectedItem=null;c.search(null,g)}},c.options.delay);break}}}).bind("keypress.autocomplete",function(g){if(h){h=false;g.preventDefault()}}).bind("focus.autocomplete",function(){if(!c.options.disabled){c.selectedItem=null;c.previous=c.element.val()}}).bind("blur.autocomplete",function(g){if(!c.options.disabled){clearTimeout(c.searching);c.closing=setTimeout(function(){c.close(g);c._change(g)},150)}});this._initSource();this.response=function(){return c._response.apply(c,arguments)}; this.menu=a("
    ").addClass("ui-autocomplete").appendTo(a(this.options.appendTo||"body",e)[0]).mousedown(function(g){var i=c.menu.element[0];a(g.target).closest(".ui-menu-item").length||setTimeout(function(){a(document).one("mousedown",function(b){b.target!==c.element[0]&&b.target!==i&&!a.ui.contains(i,b.target)&&c.close()})},1);setTimeout(function(){clearTimeout(c.closing)},13)}).menu({focus:function(g,i){i=i.item.data("item.autocomplete");false!==c._trigger("focus",g,{item:i})&&/^key/.test(g.originalEvent.type)&& c.element.val(i.value)},selected:function(g,i){var b=i.item.data("item.autocomplete"),f=c.previous;if(c.element[0]!==e.activeElement){c.element.focus();c.previous=f;setTimeout(function(){c.previous=f;c.selectedItem=b},1)}false!==c._trigger("select",g,{item:b})&&c.element.val(b.value);c.term=c.element.val();c.close(g);c.selectedItem=b},blur:function(){c.menu.element.is(":visible")&&c.element.val()!==c.term&&c.element.val(c.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu"); a.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();a.Widget.prototype.destroy.call(this)},_setOption:function(c,e){a.Widget.prototype._setOption.apply(this,arguments);c==="source"&&this._initSource();if(c==="appendTo")this.menu.element.appendTo(a(e||"body",this.element[0].ownerDocument)[0]);c==="disabled"&& e&&this.xhr&&this.xhr.abort()},_initSource:function(){var c=this,e,h;if(a.isArray(this.options.source)){e=this.options.source;this.source=function(g,i){i(a.ui.autocomplete.filter(e,g.term))}}else if(typeof this.options.source==="string"){h=this.options.source;this.source=function(g,i){c.xhr&&c.xhr.abort();c.xhr=a.ajax({url:h,data:g,dataType:"json",autocompleteRequest:++d,success:function(b){this.autocompleteRequest===d&&i(b)},error:function(){this.autocompleteRequest===d&&i([])}})}}else this.source= this.options.source},search:function(c,e){c=c!=null?c:this.element.val();this.term=this.element.val();if(c.length").data("item.autocomplete",e).append(a("").text(e.label)).appendTo(c)},_move:function(c,e){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(c)||this.menu.last()&&/^next/.test(c)){this.element.val(this.term);this.menu.deactivate()}else this.menu[c](e);else this.search(null,e)},widget:function(){return this.menu.element}});a.extend(a.ui.autocomplete,{escapeRegex:function(c){return c.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&")},filter:function(c,e){var h=new RegExp(a.ui.autocomplete.escapeRegex(e),"i");return a.grep(c,function(g){return h.test(g.label||g.value||g)})}})})(jQuery); (function(a){a.widget("ui.menu",{_create:function(){var d=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(c){if(a(c.target).closest(".ui-menu-item a").length){c.preventDefault();d.select(c)}});this.refresh()},refresh:function(){var d=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex", -1).mouseenter(function(c){d.activate(c,a(this).parent())}).mouseleave(function(){d.deactivate()})},activate:function(d,c){this.deactivate();if(this.hasScroll()){var e=c.offset().top-this.element.offset().top,h=this.element.scrollTop(),g=this.element.height();if(e<0)this.element.scrollTop(h+e);else e>=g&&this.element.scrollTop(h+e-g+c.height())}this.active=c.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",d,{item:c})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id"); this._trigger("blur");this.active=null}},next:function(d){this.move("next",".ui-menu-item:first",d)},previous:function(d){this.move("prev",".ui-menu-item:last",d)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(d,c,e){if(this.active){d=this.active[d+"All"](".ui-menu-item").eq(0);d.length?this.activate(e,d):this.activate(e,this.element.children(c))}else this.activate(e, this.element.children(c))},nextPage:function(d){if(this.hasScroll())if(!this.active||this.last())this.activate(d,this.element.children(".ui-menu-item:first"));else{var c=this.active.offset().top,e=this.element.height(),h=this.element.children(".ui-menu-item").filter(function(){var g=a(this).offset().top-c-e+a(this).height();return g<10&&g>-10});h.length||(h=this.element.children(".ui-menu-item:last"));this.activate(d,h)}else this.activate(d,this.element.children(".ui-menu-item").filter(!this.active|| this.last()?":first":":last"))},previousPage:function(d){if(this.hasScroll())if(!this.active||this.first())this.activate(d,this.element.children(".ui-menu-item:last"));else{var c=this.active.offset().top,e=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var h=a(this).offset().top-c+e-a(this).height();return h<10&&h>-10});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(d,result)}else this.activate(d,this.element.children(".ui-menu-item").filter(!this.active|| this.first()?":last":":first"))},hasScroll:function(){return this.element.height()").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),j=this.options.icons,l=j.primary&&j.secondary,o=[];if(j.primary||j.secondary){if(this.options.text)o.push("ui-button-text-icon"+(l?"s":j.primary?"-primary":"-secondary"));j.primary&&b.prepend("");j.secondary&&b.append("");if(!this.options.text){o.push(l?"ui-button-icons-only": "ui-button-icon-only");this.hasTitle||b.attr("title",f)}}else o.push("ui-button-text-only");b.addClass(o.join(" "))}}});a.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(b,f){b==="disabled"&&this.buttons.button("option",b,f);a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){var b=this.element.css("direction")=== "ltr";this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(b?"ui-corner-left":"ui-corner-right").end().filter(":last").addClass(b?"ui-corner-right":"ui-corner-left").end().end()},destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy"); a.Widget.prototype.destroy.call(this)}})})(jQuery); (function(a,d){function c(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._inDialog=this._datepickerShowing=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass= "ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su", "Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10", minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false};a.extend(this._defaults,this.regional[""]);this.dpDiv=e(a('
    '))}function e(b){return b.bind("mouseout",function(f){f= a(f.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");f.length&&f.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")}).bind("mouseover",function(f){f=a(f.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");if(!(a.datepicker._isDisabledDatepicker(i.inline?b.parent()[0]:i.input[0])||!f.length)){f.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");f.addClass("ui-state-hover"); f.hasClass("ui-datepicker-prev")&&f.addClass("ui-datepicker-prev-hover");f.hasClass("ui-datepicker-next")&&f.addClass("ui-datepicker-next-hover")}})}function h(b,f){a.extend(b,f);for(var j in f)if(f[j]==null||f[j]==d)b[j]=f[j];return b}a.extend(a.ui,{datepicker:{version:"1.8.14"}});var g=(new Date).getTime(),i;a.extend(c.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(b){h(this._defaults, b||{});return this},_attachDatepicker:function(b,f){var j=null;for(var l in this._defaults){var o=b.getAttribute("date:"+l);if(o){j=j||{};try{j[l]=eval(o)}catch(n){j[l]=o}}}l=b.nodeName.toLowerCase();o=l=="div"||l=="span";if(!b.id){this.uuid+=1;b.id="dp"+this.uuid}var k=this._newInst(a(b),o);k.settings=a.extend({},f||{},j||{});if(l=="input")this._connectDatepicker(b,k);else o&&this._inlineDatepicker(b,k)},_newInst:function(b,f){return{id:b[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1"),input:b,selectedDay:0, selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:f,dpDiv:!f?this.dpDiv:e(a('
    '))}},_connectDatepicker:function(b,f){var j=a(b);f.append=a([]);f.trigger=a([]);if(!j.hasClass(this.markerClassName)){this._attachments(j,f);j.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(l,o,n){f.settings[o]= n}).bind("getData.datepicker",function(l,o){return this._get(f,o)});this._autoSize(f);a.data(b,"datepicker",f)}},_attachments:function(b,f){var j=this._get(f,"appendText"),l=this._get(f,"isRTL");f.append&&f.append.remove();if(j){f.append=a(''+j+"");b[l?"before":"after"](f.append)}b.unbind("focus",this._showDatepicker);f.trigger&&f.trigger.remove();j=this._get(f,"showOn");if(j=="focus"||j=="both")b.focus(this._showDatepicker);if(j=="button"||j=="both"){j= this._get(f,"buttonText");var o=this._get(f,"buttonImage");f.trigger=a(this._get(f,"buttonImageOnly")?a("").addClass(this._triggerClass).attr({src:o,alt:j,title:j}):a('').addClass(this._triggerClass).html(o==""?j:a("").attr({src:o,alt:j,title:j})));b[l?"before":"after"](f.trigger);f.trigger.click(function(){a.datepicker._datepickerShowing&&a.datepicker._lastInput==b[0]?a.datepicker._hideDatepicker():a.datepicker._showDatepicker(b[0]);return false})}},_autoSize:function(b){if(this._get(b, "autoSize")&&!b.inline){var f=new Date(2009,11,20),j=this._get(b,"dateFormat");if(j.match(/[DM]/)){var l=function(o){for(var n=0,k=0,m=0;mn){n=o[m].length;k=m}return k};f.setMonth(l(this._get(b,j.match(/MM/)?"monthNames":"monthNamesShort")));f.setDate(l(this._get(b,j.match(/DD/)?"dayNames":"dayNamesShort"))+20-f.getDay())}b.input.attr("size",this._formatDate(b,f).length)}},_inlineDatepicker:function(b,f){var j=a(b);if(!j.hasClass(this.markerClassName)){j.addClass(this.markerClassName).append(f.dpDiv).bind("setData.datepicker", function(l,o,n){f.settings[o]=n}).bind("getData.datepicker",function(l,o){return this._get(f,o)});a.data(b,"datepicker",f);this._setDate(f,this._getDefaultDate(f),true);this._updateDatepicker(f);this._updateAlternate(f);f.dpDiv.show()}},_dialogDatepicker:function(b,f,j,l,o){b=this._dialogInst;if(!b){this.uuid+=1;this._dialogInput=a('');this._dialogInput.keydown(this._doKeyDown);a("body").append(this._dialogInput); b=this._dialogInst=this._newInst(this._dialogInput,false);b.settings={};a.data(this._dialogInput[0],"datepicker",b)}h(b.settings,l||{});f=f&&f.constructor==Date?this._formatDate(b,f):f;this._dialogInput.val(f);this._pos=o?o.length?o:[o.pageX,o.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left", this._pos[0]+20+"px").css("top",this._pos[1]+"px");b.settings.onSelect=j;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);a.blockUI&&a.blockUI(this.dpDiv);a.data(this._dialogInput[0],"datepicker",b);return this},_destroyDatepicker:function(b){var f=a(b),j=a.data(b,"datepicker");if(f.hasClass(this.markerClassName)){var l=b.nodeName.toLowerCase();a.removeData(b,"datepicker");if(l=="input"){j.append.remove();j.trigger.remove();f.removeClass(this.markerClassName).unbind("focus", this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(l=="div"||l=="span")f.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(b){var f=a(b),j=a.data(b,"datepicker");if(f.hasClass(this.markerClassName)){var l=b.nodeName.toLowerCase();if(l=="input"){b.disabled=false;j.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(l=="div"||l=="span"){f= f.children("."+this._inlineClass);f.children().removeClass("ui-state-disabled");f.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=a.map(this._disabledInputs,function(o){return o==b?null:o})}},_disableDatepicker:function(b){var f=a(b),j=a.data(b,"datepicker");if(f.hasClass(this.markerClassName)){var l=b.nodeName.toLowerCase();if(l=="input"){b.disabled=true;j.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5", cursor:"default"})}else if(l=="div"||l=="span"){f=f.children("."+this._inlineClass);f.children().addClass("ui-state-disabled");f.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=a.map(this._disabledInputs,function(o){return o==b?null:o});this._disabledInputs[this._disabledInputs.length]=b}},_isDisabledDatepicker:function(b){if(!b)return false;for(var f=0;f-1}},_doKeyUp:function(b){b=a.datepicker._getInst(b.target);if(b.input.val()!=b.lastVal)try{if(a.datepicker.parseDate(a.datepicker._get(b,"dateFormat"),b.input?b.input.val():null,a.datepicker._getFormatConfig(b))){a.datepicker._setDateFromField(b); a.datepicker._updateAlternate(b);a.datepicker._updateDatepicker(b)}}catch(f){a.datepicker.log(f)}return true},_showDatepicker:function(b){b=b.target||b;if(b.nodeName.toLowerCase()!="input")b=a("input",b.parentNode)[0];if(!(a.datepicker._isDisabledDatepicker(b)||a.datepicker._lastInput==b)){var f=a.datepicker._getInst(b);if(a.datepicker._curInst&&a.datepicker._curInst!=f){a.datepicker._datepickerShowing&&a.datepicker._triggerOnClose(a.datepicker._curInst);a.datepicker._curInst.dpDiv.stop(true,true)}var j= a.datepicker._get(f,"beforeShow");h(f.settings,j?j.apply(b,[b,f]):{});f.lastVal=null;a.datepicker._lastInput=b;a.datepicker._setDateFromField(f);if(a.datepicker._inDialog)b.value="";if(!a.datepicker._pos){a.datepicker._pos=a.datepicker._findPos(b);a.datepicker._pos[1]+=b.offsetHeight}var l=false;a(b).parents().each(function(){l|=a(this).css("position")=="fixed";return!l});if(l&&a.browser.opera){a.datepicker._pos[0]-=document.documentElement.scrollLeft;a.datepicker._pos[1]-=document.documentElement.scrollTop}j= {left:a.datepicker._pos[0],top:a.datepicker._pos[1]};a.datepicker._pos=null;f.dpDiv.empty();f.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});a.datepicker._updateDatepicker(f);j=a.datepicker._checkOffset(f,j,l);f.dpDiv.css({position:a.datepicker._inDialog&&a.blockUI?"static":l?"fixed":"absolute",display:"none",left:j.left+"px",top:j.top+"px"});if(!f.inline){j=a.datepicker._get(f,"showAnim");var o=a.datepicker._get(f,"duration"),n=function(){var k=f.dpDiv.find("iframe.ui-datepicker-cover"); if(k.length){var m=a.datepicker._getBorders(f.dpDiv);k.css({left:-m[0],top:-m[1],width:f.dpDiv.outerWidth(),height:f.dpDiv.outerHeight()})}};f.dpDiv.zIndex(a(b).zIndex()+1);a.datepicker._datepickerShowing=true;a.effects&&a.effects[j]?f.dpDiv.show(j,a.datepicker._get(f,"showOptions"),o,n):f.dpDiv[j||"show"](j?o:null,n);if(!j||!o)n();f.input.is(":visible")&&!f.input.is(":disabled")&&f.input.focus();a.datepicker._curInst=f}}},_updateDatepicker:function(b){this.maxRows=4;var f=a.datepicker._getBorders(b.dpDiv); i=b;b.dpDiv.empty().append(this._generateHTML(b));var j=b.dpDiv.find("iframe.ui-datepicker-cover");j.length&&j.css({left:-f[0],top:-f[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()});b.dpDiv.find("."+this._dayOverClass+" a").mouseover();f=this._getNumberOfMonths(b);j=f[1];b.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");j>1&&b.dpDiv.addClass("ui-datepicker-multi-"+j).css("width",17*j+"em");b.dpDiv[(f[0]!=1||f[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi"); b.dpDiv[(this._get(b,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");b==a.datepicker._curInst&&a.datepicker._datepickerShowing&&b.input&&b.input.is(":visible")&&!b.input.is(":disabled")&&b.input[0]!=document.activeElement&&b.input.focus();if(b.yearshtml){var l=b.yearshtml;setTimeout(function(){l===b.yearshtml&&b.yearshtml&&b.dpDiv.find("select.ui-datepicker-year:first").replaceWith(b.yearshtml);l=b.yearshtml=null},0)}},_getBorders:function(b){var f=function(j){return{thin:1,medium:2,thick:3}[j]|| j};return[parseFloat(f(b.css("border-left-width"))),parseFloat(f(b.css("border-top-width")))]},_checkOffset:function(b,f,j){var l=b.dpDiv.outerWidth(),o=b.dpDiv.outerHeight(),n=b.input?b.input.outerWidth():0,k=b.input?b.input.outerHeight():0,m=document.documentElement.clientWidth+a(document).scrollLeft(),p=document.documentElement.clientHeight+a(document).scrollTop();f.left-=this._get(b,"isRTL")?l-n:0;f.left-=j&&f.left==b.input.offset().left?a(document).scrollLeft():0;f.top-=j&&f.top==b.input.offset().top+ k?a(document).scrollTop():0;f.left-=Math.min(f.left,f.left+l>m&&m>l?Math.abs(f.left+l-m):0);f.top-=Math.min(f.top,f.top+o>p&&p>o?Math.abs(o+k):0);return f},_findPos:function(b){for(var f=this._get(this._getInst(b),"isRTL");b&&(b.type=="hidden"||b.nodeType!=1||a.expr.filters.hidden(b));)b=b[f?"previousSibling":"nextSibling"];b=a(b).offset();return[b.left,b.top]},_triggerOnClose:function(b){var f=this._get(b,"onClose");if(f)f.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b])},_hideDatepicker:function(b){var f= this._curInst;if(!(!f||b&&f!=a.data(b,"datepicker")))if(this._datepickerShowing){b=this._get(f,"showAnim");var j=this._get(f,"duration"),l=function(){a.datepicker._tidyDialog(f);this._curInst=null};a.effects&&a.effects[b]?f.dpDiv.hide(b,a.datepicker._get(f,"showOptions"),j,l):f.dpDiv[b=="slideDown"?"slideUp":b=="fadeIn"?"fadeOut":"hide"](b?j:null,l);b||l();a.datepicker._triggerOnClose(f);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute", left:"0",top:"-100px"});if(a.blockUI){a.unblockUI();a("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(b){b.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(b){if(a.datepicker._curInst){b=a(b.target);b[0].id!=a.datepicker._mainDivId&&b.parents("#"+a.datepicker._mainDivId).length==0&&!b.hasClass(a.datepicker.markerClassName)&&!b.hasClass(a.datepicker._triggerClass)&&a.datepicker._datepickerShowing&&!(a.datepicker._inDialog&& a.blockUI)&&a.datepicker._hideDatepicker()}},_adjustDate:function(b,f,j){b=a(b);var l=this._getInst(b[0]);if(!this._isDisabledDatepicker(b[0])){this._adjustInstDate(l,f+(j=="M"?this._get(l,"showCurrentAtPos"):0),j);this._updateDatepicker(l)}},_gotoToday:function(b){b=a(b);var f=this._getInst(b[0]);if(this._get(f,"gotoCurrent")&&f.currentDay){f.selectedDay=f.currentDay;f.drawMonth=f.selectedMonth=f.currentMonth;f.drawYear=f.selectedYear=f.currentYear}else{var j=new Date;f.selectedDay=j.getDate();f.drawMonth= f.selectedMonth=j.getMonth();f.drawYear=f.selectedYear=j.getFullYear()}this._notifyChange(f);this._adjustDate(b)},_selectMonthYear:function(b,f,j){b=a(b);var l=this._getInst(b[0]);l._selectingMonthYear=false;l["selected"+(j=="M"?"Month":"Year")]=l["draw"+(j=="M"?"Month":"Year")]=parseInt(f.options[f.selectedIndex].value,10);this._notifyChange(l);this._adjustDate(b)},_clickMonthYear:function(b){var f=this._getInst(a(b)[0]);f.input&&f._selectingMonthYear&&setTimeout(function(){f.input.focus()},0);f._selectingMonthYear= !f._selectingMonthYear},_selectDay:function(b,f,j,l){var o=a(b);if(!(a(l).hasClass(this._unselectableClass)||this._isDisabledDatepicker(o[0]))){o=this._getInst(o[0]);o.selectedDay=o.currentDay=a("a",l).html();o.selectedMonth=o.currentMonth=f;o.selectedYear=o.currentYear=j;this._selectDate(b,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear))}},_clearDate:function(b){b=a(b);this._getInst(b[0]);this._selectDate(b,"")},_selectDate:function(b,f){b=this._getInst(a(b)[0]);f=f!=null?f:this._formatDate(b); b.input&&b.input.val(f);this._updateAlternate(b);var j=this._get(b,"onSelect");if(j)j.apply(b.input?b.input[0]:null,[f,b]);else b.input&&b.input.trigger("change");if(b.inline)this._updateDatepicker(b);else{this._hideDatepicker();this._lastInput=b.input[0];typeof b.input[0]!="object"&&b.input.focus();this._lastInput=null}},_updateAlternate:function(b){var f=this._get(b,"altField");if(f){var j=this._get(b,"altFormat")||this._get(b,"dateFormat"),l=this._getDate(b),o=this.formatDate(j,l,this._getFormatConfig(b)); a(f).each(function(){a(this).val(o)})}},noWeekends:function(b){b=b.getDay();return[b>0&&b<6,""]},iso8601Week:function(b){b=new Date(b.getTime());b.setDate(b.getDate()+4-(b.getDay()||7));var f=b.getTime();b.setMonth(0);b.setDate(1);return Math.floor(Math.round((f-b)/864E5)/7)+1},parseDate:function(b,f,j){if(b==null||f==null)throw"Invalid arguments";f=typeof f=="object"?f.toString():f+"";if(f=="")return null;var l=(j?j.shortYearCutoff:null)||this._defaults.shortYearCutoff;l=typeof l!="string"?l:(new Date).getFullYear()% 100+parseInt(l,10);for(var o=(j?j.dayNamesShort:null)||this._defaults.dayNamesShort,n=(j?j.dayNames:null)||this._defaults.dayNames,k=(j?j.monthNamesShort:null)||this._defaults.monthNamesShort,m=(j?j.monthNames:null)||this._defaults.monthNames,p=j=-1,q=-1,s=-1,r=false,u=function(z){(z=H+1-1){p=1;q=s;do{l=this._getDaysInMonth(j,p-1);if(q<=l)break;p++;q-=l}while(1)}C=this._daylightSavingAdjust(new Date(j,p-1,q));if(C.getFullYear()!=j||C.getMonth()+1!=p||C.getDate()!=q)throw"Invalid date";return C},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y", TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(b,f,j){if(!f)return"";var l=(j?j.dayNamesShort:null)||this._defaults.dayNamesShort,o=(j?j.dayNames:null)||this._defaults.dayNames,n=(j?j.monthNamesShort:null)||this._defaults.monthNamesShort;j=(j?j.monthNames:null)||this._defaults.monthNames;var k=function(u){(u=r+112?b.getHours()+2:0);return b},_setDate:function(b,f,j){var l=!f,o=b.selectedMonth,n=b.selectedYear;f=this._restrictMinMax(b,this._determineDate(b,f,new Date));b.selectedDay= b.currentDay=f.getDate();b.drawMonth=b.selectedMonth=b.currentMonth=f.getMonth();b.drawYear=b.selectedYear=b.currentYear=f.getFullYear();if((o!=b.selectedMonth||n!=b.selectedYear)&&!j)this._notifyChange(b);this._adjustInstDate(b);if(b.input)b.input.val(l?"":this._formatDate(b))},_getDate:function(b){return!b.currentYear||b.input&&b.input.val()==""?null:this._daylightSavingAdjust(new Date(b.currentYear,b.currentMonth,b.currentDay))},_generateHTML:function(b){var f=new Date;f=this._daylightSavingAdjust(new Date(f.getFullYear(), f.getMonth(),f.getDate()));var j=this._get(b,"isRTL"),l=this._get(b,"showButtonPanel"),o=this._get(b,"hideIfNoPrevNext"),n=this._get(b,"navigationAsDateFormat"),k=this._getNumberOfMonths(b),m=this._get(b,"showCurrentAtPos"),p=this._get(b,"stepMonths"),q=k[0]!=1||k[1]!=1,s=this._daylightSavingAdjust(!b.currentDay?new Date(9999,9,9):new Date(b.currentYear,b.currentMonth,b.currentDay)),r=this._getMinMaxDate(b,"min"),u=this._getMinMaxDate(b,"max");m=b.drawMonth-m;var v=b.drawYear;if(m<0){m+=12;v--}if(u){var w= this._daylightSavingAdjust(new Date(u.getFullYear(),u.getMonth()-k[0]*k[1]+1,u.getDate()));for(w=r&&ww;){m--;if(m<0){m=11;v--}}}b.drawMonth=m;b.drawYear=v;w=this._get(b,"prevText");w=!n?w:this.formatDate(w,this._daylightSavingAdjust(new Date(v,m-p,1)),this._getFormatConfig(b));w=this._canAdjustMonth(b,-1,v,m)?''+w+"":o?"":''+w+"";var x=this._get(b,"nextText");x=!n?x:this.formatDate(x,this._daylightSavingAdjust(new Date(v,m+p,1)),this._getFormatConfig(b));o=this._canAdjustMonth(b,+1,v,m)?''+x+"":o?"":''+x+"";p=this._get(b,"currentText");x=this._get(b,"gotoCurrent")&&b.currentDay?s:f;p=!n?p:this.formatDate(p,x,this._getFormatConfig(b));n=!b.inline?'":"";l=l?'
    '+(j?n:"")+(this._isInRange(b,x)?'":"")+(j?"":n)+"
    ":"";n=parseInt(this._get(b,"firstDay"),10);n=isNaN(n)?0:n;p=this._get(b,"showWeek");x=this._get(b,"dayNames");this._get(b,"dayNamesShort");var y=this._get(b,"dayNamesMin"),H= this._get(b,"monthNames"),C=this._get(b,"monthNamesShort"),z=this._get(b,"beforeShowDay"),I=this._get(b,"showOtherMonths"),N=this._get(b,"selectOtherMonths");this._get(b,"calculateWeek");for(var J=this._getDefaultDate(b),D="",E=0;E1)switch(L){case 0:F+=" ui-datepicker-group-first";B=" ui-corner-"+(j?"right": "left");break;case k[1]-1:F+=" ui-datepicker-group-last";B=" ui-corner-"+(j?"left":"right");break;default:F+=" ui-datepicker-group-middle";B="";break}F+='">'}F+='
    '+(/all|left/.test(B)&&E==0?j?o:w:"")+(/all|right/.test(B)&&E==0?j?w:o:"")+this._generateMonthYearHeader(b,m,v,r,u,E>0||L>0,H,C)+'
    ';var G=p?'": "";for(B=0;B<7;B++){var A=(B+n)%7;G+="=5?' class="ui-datepicker-week-end"':"")+'>'+y[A]+""}F+=G+"";G=this._getDaysInMonth(v,m);if(v==b.selectedYear&&m==b.selectedMonth)b.selectedDay=Math.min(b.selectedDay,G);B=(this._getFirstDayOfMonth(v,m)-n+7)%7;G=Math.ceil((B+G)/7);this.maxRows=G=q?this.maxRows>G?this.maxRows:G:G;A=this._daylightSavingAdjust(new Date(v,m,1-B));for(var R=0;R";var S=!p?"":'";for(B=0;B<7;B++){var M=z?z.apply(b.input?b.input[0]:null,[A]):[true,""],K=A.getMonth()!=m,O=K&&!N||!M[0]||r&&Au;S+='";A.setDate(A.getDate()+1);A=this._daylightSavingAdjust(A)}F+=S+""}m++;if(m>11){m=0;v++}F+="
    '+this._get(b,"weekHeader")+"
    '+ this._get(b,"calculateWeek")(A)+""+(K&&!I?" ":O?''+A.getDate()+"":''+ A.getDate()+"")+"
    "+(q?""+(k[0]>0&&L==k[1]-1?'
    ':""):"");P+=F}D+=P}D+=l+(a.browser.msie&&parseInt(a.browser.version,10)<7&&!b.inline?'':"");b._keyEvent=false;return D},_generateMonthYearHeader:function(b,f,j,l,o,n,k,m){var p=this._get(b,"changeMonth"), q=this._get(b,"changeYear"),s=this._get(b,"showMonthAfterYear"),r='
    ',u="";if(n||!p)u+=''+k[f]+"";else{k=l&&l.getFullYear()==j;var v=o&&o.getFullYear()==j;u+='"}s||(r+=u+(n||!(p&&q)?" ":""));if(!b.yearshtml){b.yearshtml="";if(n||!q)r+=''+j+"";else{m=this._get(b,"yearRange").split(":");var x=(new Date).getFullYear();k=function(y){y=y.match(/c[+-].*/)?j+parseInt(y.substring(1),10):y.match(/[+-].*/)?x+parseInt(y,10):parseInt(y,10);return isNaN(y)?x:y};f=k(m[0]);m=Math.max(f,k(m[1]||""));f=l?Math.max(f,l.getFullYear()):f;m=o?Math.min(m,o.getFullYear()): m;for(b.yearshtml+='";r+=b.yearshtml;b.yearshtml=null}}r+=this._get(b,"yearSuffix");if(s)r+=(n||!(p&&q)?" ":"")+u;r+="
    ";return r},_adjustInstDate:function(b,f,j){var l=b.drawYear+(j== "Y"?f:0),o=b.drawMonth+(j=="M"?f:0);f=Math.min(b.selectedDay,this._getDaysInMonth(l,o))+(j=="D"?f:0);l=this._restrictMinMax(b,this._daylightSavingAdjust(new Date(l,o,f)));b.selectedDay=l.getDate();b.drawMonth=b.selectedMonth=l.getMonth();b.drawYear=b.selectedYear=l.getFullYear();if(j=="M"||j=="Y")this._notifyChange(b)},_restrictMinMax:function(b,f){var j=this._getMinMaxDate(b,"min");b=this._getMinMaxDate(b,"max");f=j&&fb?b:f},_notifyChange:function(b){var f=this._get(b,"onChangeMonthYear"); if(f)f.apply(b.input?b.input[0]:null,[b.selectedYear,b.selectedMonth+1,b])},_getNumberOfMonths:function(b){b=this._get(b,"numberOfMonths");return b==null?[1,1]:typeof b=="number"?[1,b]:b},_getMinMaxDate:function(b,f){return this._determineDate(b,this._get(b,f+"Date"),null)},_getDaysInMonth:function(b,f){return 32-this._daylightSavingAdjust(new Date(b,f,32)).getDate()},_getFirstDayOfMonth:function(b,f){return(new Date(b,f,1)).getDay()},_canAdjustMonth:function(b,f,j,l){var o=this._getNumberOfMonths(b); j=this._daylightSavingAdjust(new Date(j,l+(f<0?f:o[0]*o[1]),1));f<0&&j.setDate(this._getDaysInMonth(j.getFullYear(),j.getMonth()));return this._isInRange(b,j)},_isInRange:function(b,f){var j=this._getMinMaxDate(b,"min");b=this._getMinMaxDate(b,"max");return(!j||f.getTime()>=j.getTime())&&(!b||f.getTime()<=b.getTime())},_getFormatConfig:function(b){var f=this._get(b,"shortYearCutoff");f=typeof f!="string"?f:(new Date).getFullYear()%100+parseInt(f,10);return{shortYearCutoff:f,dayNamesShort:this._get(b, "dayNamesShort"),dayNames:this._get(b,"dayNames"),monthNamesShort:this._get(b,"monthNamesShort"),monthNames:this._get(b,"monthNames")}},_formatDate:function(b,f,j,l){if(!f){b.currentDay=b.selectedDay;b.currentMonth=b.selectedMonth;b.currentYear=b.selectedYear}f=f?typeof f=="object"?f:this._daylightSavingAdjust(new Date(l,j,f)):this._daylightSavingAdjust(new Date(b.currentYear,b.currentMonth,b.currentDay));return this.formatDate(this._get(b,"dateFormat"),f,this._getFormatConfig(b))}});a.fn.datepicker= function(b){if(!this.length)return this;if(!a.datepicker.initialized){a(document).mousedown(a.datepicker._checkExternalClick).find("body").append(a.datepicker.dpDiv);a.datepicker.initialized=true}var f=Array.prototype.slice.call(arguments,1);if(typeof b=="string"&&(b=="isDisabled"||b=="getDate"||b=="widget"))return a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this[0]].concat(f));if(b=="option"&&arguments.length==2&&typeof arguments[1]=="string")return a.datepicker["_"+b+"Datepicker"].apply(a.datepicker, [this[0]].concat(f));return this.each(function(){typeof b=="string"?a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this].concat(f)):a.datepicker._attachDatepicker(this,b)})};a.datepicker=new c;a.datepicker.initialized=false;a.datepicker.uuid=(new Date).getTime();a.datepicker.version="1.8.14";window["DP_jQuery_"+g]=a})(jQuery); (function(a,d){var c={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},e={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true},h=a.attrFn||{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true,click:true};a.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false, position:{my:"center",at:"center",collision:"fit",using:function(g){var i=a(this).css(g).offset().top;i<0&&a(this).css("top",g.top-i)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var g=this,i=g.options,b=i.title||" ",f=a.ui.dialog.getTitleId(g.element),j=(g.uiDialog=a("
    ")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+ i.dialogClass).css({zIndex:i.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(n){if(i.closeOnEscape&&n.keyCode&&n.keyCode===a.ui.keyCode.ESCAPE){g.close(n);n.preventDefault()}}).attr({role:"dialog","aria-labelledby":f}).mousedown(function(n){g.moveToTop(false,n)});g.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(j);var l=(g.uiDialogTitlebar=a("
    ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(j), o=a('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){o.addClass("ui-state-hover")},function(){o.removeClass("ui-state-hover")}).focus(function(){o.addClass("ui-state-focus")}).blur(function(){o.removeClass("ui-state-focus")}).click(function(n){g.close(n);return false}).appendTo(l);(g.uiDialogTitlebarCloseText=a("")).addClass("ui-icon ui-icon-closethick").text(i.closeText).appendTo(o);a("").addClass("ui-dialog-title").attr("id", f).html(b).prependTo(l);if(a.isFunction(i.beforeclose)&&!a.isFunction(i.beforeClose))i.beforeClose=i.beforeclose;l.find("*").add(l).disableSelection();i.draggable&&a.fn.draggable&&g._makeDraggable();i.resizable&&a.fn.resizable&&g._makeResizable();g._createButtons(i.buttons);g._isOpen=false;a.fn.bgiframe&&j.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var g=this;g.overlay&&g.overlay.destroy();g.uiDialog.hide();g.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"); g.uiDialog.remove();g.originalTitle&&g.element.attr("title",g.originalTitle);return g},widget:function(){return this.uiDialog},close:function(g){var i=this,b,f;if(false!==i._trigger("beforeClose",g)){i.overlay&&i.overlay.destroy();i.uiDialog.unbind("keypress.ui-dialog");i._isOpen=false;if(i.options.hide)i.uiDialog.hide(i.options.hide,function(){i._trigger("close",g)});else{i.uiDialog.hide();i._trigger("close",g)}a.ui.dialog.overlay.resize();if(i.options.modal){b=0;a(".ui-dialog").each(function(){if(this!== i.uiDialog[0]){f=a(this).css("z-index");isNaN(f)||(b=Math.max(b,f))}});a.ui.dialog.maxZ=b}return i}},isOpen:function(){return this._isOpen},moveToTop:function(g,i){var b=this,f=b.options;if(f.modal&&!g||!f.stack&&!f.modal)return b._trigger("focus",i);if(f.zIndex>a.ui.dialog.maxZ)a.ui.dialog.maxZ=f.zIndex;if(b.overlay){a.ui.dialog.maxZ+=1;b.overlay.$el.css("z-index",a.ui.dialog.overlay.maxZ=a.ui.dialog.maxZ)}g={scrollTop:b.element.attr("scrollTop"),scrollLeft:b.element.attr("scrollLeft")};a.ui.dialog.maxZ+= 1;b.uiDialog.css("z-index",a.ui.dialog.maxZ);b.element.attr(g);b._trigger("focus",i);return b},open:function(){if(!this._isOpen){var g=this,i=g.options,b=g.uiDialog;g.overlay=i.modal?new a.ui.dialog.overlay(g):null;g._size();g._position(i.position);b.show(i.show);g.moveToTop(true);i.modal&&b.bind("keypress.ui-dialog",function(f){if(f.keyCode===a.ui.keyCode.TAB){var j=a(":tabbable",this),l=j.filter(":first");j=j.filter(":last");if(f.target===j[0]&&!f.shiftKey){l.focus(1);return false}else if(f.target=== l[0]&&f.shiftKey){j.focus(1);return false}}});a(g.element.find(":tabbable").get().concat(b.find(".ui-dialog-buttonpane :tabbable").get().concat(b.get()))).eq(0).focus();g._isOpen=true;g._trigger("open");return g}},_createButtons:function(g){var i=this,b=false,f=a("
    ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),j=a("
    ").addClass("ui-dialog-buttonset").appendTo(f);i.uiDialog.find(".ui-dialog-buttonpane").remove();typeof g==="object"&&g!==null&&a.each(g, function(){return!(b=true)});if(b){a.each(g,function(l,o){o=a.isFunction(o)?{click:o,text:l}:o;var n=a('').click(function(){o.click.apply(i.element[0],arguments)}).appendTo(j);a.each(o,function(k,m){if(k!=="click")k in h?n[k](m):n.attr(k,m)});a.fn.button&&n.button()});f.appendTo(i.uiDialog)}},_makeDraggable:function(){function g(l){return{position:l.position,offset:l.offset}}var i=this,b=i.options,f=a(document),j;i.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close", handle:".ui-dialog-titlebar",containment:"document",start:function(l,o){j=b.height==="auto"?"auto":a(this).height();a(this).height(a(this).height()).addClass("ui-dialog-dragging");i._trigger("dragStart",l,g(o))},drag:function(l,o){i._trigger("drag",l,g(o))},stop:function(l,o){b.position=[o.position.left-f.scrollLeft(),o.position.top-f.scrollTop()];a(this).removeClass("ui-dialog-dragging").height(j);i._trigger("dragStop",l,g(o));a.ui.dialog.overlay.resize()}})},_makeResizable:function(g){function i(l){return{originalPosition:l.originalPosition, originalSize:l.originalSize,position:l.position,size:l.size}}g=g===d?this.options.resizable:g;var b=this,f=b.options,j=b.uiDialog.css("position");g=typeof g==="string"?g:"n,e,s,w,se,sw,ne,nw";b.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:b.element,maxWidth:f.maxWidth,maxHeight:f.maxHeight,minWidth:f.minWidth,minHeight:b._minHeight(),handles:g,start:function(l,o){a(this).addClass("ui-dialog-resizing");b._trigger("resizeStart",l,i(o))},resize:function(l,o){b._trigger("resize", l,i(o))},stop:function(l,o){a(this).removeClass("ui-dialog-resizing");f.height=a(this).height();f.width=a(this).width();b._trigger("resizeStop",l,i(o));a.ui.dialog.overlay.resize()}}).css("position",j).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var g=this.options;return g.height==="auto"?g.minHeight:Math.min(g.minHeight,g.height)},_position:function(g){var i=[],b=[0,0],f;if(g){if(typeof g==="string"||typeof g==="object"&&"0"in g){i=g.split?g.split(" "): [g[0],g[1]];if(i.length===1)i[1]=i[0];a.each(["left","top"],function(j,l){if(+i[j]===i[j]){b[j]=i[j];i[j]=l}});g={my:i.join(" "),at:i.join(" "),offset:b.join(" ")}}g=a.extend({},a.ui.dialog.prototype.options.position,g)}else g=a.ui.dialog.prototype.options.position;(f=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(a.extend({of:window},g));f||this.uiDialog.hide()},_setOptions:function(g){var i=this,b={},f=false;a.each(g,function(j,l){i._setOption(j,l); if(j in c)f=true;if(j in e)b[j]=l});f&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",b)},_setOption:function(g,i){var b=this,f=b.uiDialog;switch(g){case "beforeclose":g="beforeClose";break;case "buttons":b._createButtons(i);break;case "closeText":b.uiDialogTitlebarCloseText.text(""+i);break;case "dialogClass":f.removeClass(b.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+i);break;case "disabled":i?f.addClass("ui-dialog-disabled"): f.removeClass("ui-dialog-disabled");break;case "draggable":var j=f.is(":data(draggable)");j&&!i&&f.draggable("destroy");!j&&i&&b._makeDraggable();break;case "position":b._position(i);break;case "resizable":(j=f.is(":data(resizable)"))&&!i&&f.resizable("destroy");j&&typeof i==="string"&&f.resizable("option","handles",i);!j&&i!==false&&b._makeResizable(i);break;case "title":a(".ui-dialog-title",b.uiDialogTitlebar).html(""+(i||" "));break}a.Widget.prototype._setOption.apply(b,arguments)},_size:function(){var g= this.options,i,b,f=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});if(g.minWidth>g.width)g.width=g.minWidth;i=this.uiDialog.css({height:"auto",width:g.width}).height();b=Math.max(0,g.minHeight-i);if(g.height==="auto")if(a.support.minHeight)this.element.css({minHeight:b,height:"auto"});else{this.uiDialog.show();g=this.element.css("height","auto").height();f||this.uiDialog.hide();this.element.height(Math.max(g,b))}else this.element.height(Math.max(g.height- i,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});a.extend(a.ui.dialog,{version:"1.8.14",uuid:0,maxZ:0,getTitleId:function(g){g=g.attr("id");if(!g){this.uuid+=1;g=this.uuid}return"ui-dialog-title-"+g},overlay:function(g){this.$el=a.ui.dialog.overlay.create(g)}});a.extend(a.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:a.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(g){return g+".dialog-overlay"}).join(" "), create:function(g){if(this.instances.length===0){setTimeout(function(){a.ui.dialog.overlay.instances.length&&a(document).bind(a.ui.dialog.overlay.events,function(b){if(a(b.target).zIndex()").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(), height:this.height()});a.fn.bgiframe&&i.bgiframe();this.instances.push(i);return i},destroy:function(g){var i=a.inArray(g,this.instances);i!=-1&&this.oldInstances.push(this.instances.splice(i,1)[0]);this.instances.length===0&&a([document,window]).unbind(".dialog-overlay");g.remove();var b=0;a.each(this.instances,function(){b=Math.max(b,this.css("z-index"))});this.maxZ=b},height:function(){var g,i;if(a.browser.msie&&a.browser.version<7){g=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight); i=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return g0?g.left-b:Math.max(g.left-i.collisionPosition.left,g.left)},top:function(g,i){var b=a(window);b=i.collisionPosition.top+i.collisionHeight-b.height()-b.scrollTop();g.top=b>0?g.top-b:Math.max(g.top-i.collisionPosition.top,g.top)}},flip:{left:function(g,i){if(i.at[0]!=="center"){var b=a(window);b=i.collisionPosition.left+i.collisionWidth-b.width()-b.scrollLeft();var f=i.my[0]==="left"?-i.elemWidth:i.my[0]==="right"?i.elemWidth:0,j=i.at[0]==="left"?i.targetWidth:-i.targetWidth,l=-2*i.offset[0];g.left+= i.collisionPosition.left<0?f+j+l:b>0?f+j+l:0}},top:function(g,i){if(i.at[1]!=="center"){var b=a(window);b=i.collisionPosition.top+i.collisionHeight-b.height()-b.scrollTop();var f=i.my[1]==="top"?-i.elemHeight:i.my[1]==="bottom"?i.elemHeight:0,j=i.at[1]==="top"?i.targetHeight:-i.targetHeight,l=-2*i.offset[1];g.top+=i.collisionPosition.top<0?f+j+l:b>0?f+j+l:0}}}};if(!a.offset.setOffset){a.offset.setOffset=function(g,i){if(/static/.test(a.curCSS(g,"position")))g.style.position="relative";var b=a(g), f=b.offset(),j=parseInt(a.curCSS(g,"top",true),10)||0,l=parseInt(a.curCSS(g,"left",true),10)||0;f={top:i.top-f.top+j,left:i.left-f.left+l};"using"in i?i.using.call(g,f):b.css(f)};a.fn.offset=function(g){var i=this[0];if(!i||!i.ownerDocument)return null;if(g)return this.each(function(){a.offset.setOffset(this,g)});return h.call(this)}}})(jQuery); (function(a,d){a.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=a("
    ").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"); this.valueDiv.remove();a.Widget.prototype.destroy.apply(this,arguments)},value:function(c){if(c===d)return this._value();this._setOption("value",c);return this},_setOption:function(c,e){if(c==="value"){this.options.value=e;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}a.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var c=this.options.value;if(typeof c!=="number")c=0;return Math.min(this.options.max,Math.max(this.min,c))},_percentage:function(){return 100* this._value()/this.options.max},_refreshValue:function(){var c=this.value(),e=this._percentage();if(this.oldValue!==c){this.oldValue=c;this._trigger("change")}this.valueDiv.toggle(c>this.min).toggleClass("ui-corner-right",c===this.options.max).width(e.toFixed(0)+"%");this.element.attr("aria-valuenow",c)}});a.extend(a.ui.progressbar,{version:"1.8.14"})})(jQuery); (function(a){a.widget("ui.slider",a.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var d=this,c=this.options,e=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),h=c.values&&c.values.length||1,g=[];this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+ this.orientation+" ui-widget ui-widget-content ui-corner-all"+(c.disabled?" ui-slider-disabled ui-disabled":""));this.range=a([]);if(c.range){if(c.range===true){if(!c.values)c.values=[this._valueMin(),this._valueMin()];if(c.values.length&&c.values.length!==2)c.values=[c.values[0],c.values[0]]}this.range=a("
    ").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(c.range==="min"||c.range==="max"?" ui-slider-range-"+c.range:""))}for(var i=e.length;i"); this.handles=e.add(a(g.join("")).appendTo(d.element));this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(b){b.preventDefault()}).hover(function(){c.disabled||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}).focus(function(){if(c.disabled)a(this).blur();else{a(".ui-slider .ui-state-focus").removeClass("ui-state-focus");a(this).addClass("ui-state-focus")}}).blur(function(){a(this).removeClass("ui-state-focus")});this.handles.each(function(b){a(this).data("index.ui-slider-handle", b)});this.handles.keydown(function(b){var f=true,j=a(this).data("index.ui-slider-handle"),l,o,n;if(!d.options.disabled){switch(b.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.PAGE_UP:case a.ui.keyCode.PAGE_DOWN:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:f=false;if(!d._keySliding){d._keySliding=true;a(this).addClass("ui-state-active");l=d._start(b,j);if(l===false)return}break}n=d.options.step;l=d.options.values&&d.options.values.length? (o=d.values(j)):(o=d.value());switch(b.keyCode){case a.ui.keyCode.HOME:o=d._valueMin();break;case a.ui.keyCode.END:o=d._valueMax();break;case a.ui.keyCode.PAGE_UP:o=d._trimAlignValue(l+(d._valueMax()-d._valueMin())/5);break;case a.ui.keyCode.PAGE_DOWN:o=d._trimAlignValue(l-(d._valueMax()-d._valueMin())/5);break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(l===d._valueMax())return;o=d._trimAlignValue(l+n);break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(l===d._valueMin())return;o=d._trimAlignValue(l- n);break}d._slide(b,j,o);return f}}).keyup(function(b){var f=a(this).data("index.ui-slider-handle");if(d._keySliding){d._keySliding=false;d._stop(b,f);d._change(b,f);a(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy(); return this},_mouseCapture:function(d){var c=this.options,e,h,g,i,b;if(c.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();e=this._normValueFromMouse({x:d.pageX,y:d.pageY});h=this._valueMax()-this._valueMin()+1;i=this;this.handles.each(function(f){var j=Math.abs(e-i.values(f));if(h>j){h=j;g=a(this);b=f}});if(c.range===true&&this.values(1)===c.min){b+=1;g=a(this.handles[b])}if(this._start(d,b)===false)return false; this._mouseSliding=true;i._handleIndex=b;g.addClass("ui-state-active").focus();c=g.offset();this._clickOffset=!a(d.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:d.pageX-c.left-g.width()/2,top:d.pageY-c.top-g.height()/2-(parseInt(g.css("borderTopWidth"),10)||0)-(parseInt(g.css("borderBottomWidth"),10)||0)+(parseInt(g.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(d,b,e);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(d){var c= this._normValueFromMouse({x:d.pageX,y:d.pageY});this._slide(d,this._handleIndex,c);return false},_mouseStop:function(d){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(d,this._handleIndex);this._change(d,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(d){var c;if(this.orientation==="horizontal"){c= this.elementSize.width;d=d.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{c=this.elementSize.height;d=d.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}c=d/c;if(c>1)c=1;if(c<0)c=0;if(this.orientation==="vertical")c=1-c;d=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+c*d)},_start:function(d,c){var e={handle:this.handles[c],value:this.value()};if(this.options.values&&this.options.values.length){e.value=this.values(c); e.values=this.values()}return this._trigger("start",d,e)},_slide:function(d,c,e){var h;if(this.options.values&&this.options.values.length){h=this.values(c?0:1);if(this.options.values.length===2&&this.options.range===true&&(c===0&&e>h||c===1&&e1){this.options.values[d]=this._trimAlignValue(c);this._refreshValue();this._change(null,d)}else if(arguments.length)if(a.isArray(arguments[0])){e=this.options.values;h=arguments[0];for(g=0;g=this._valueMax())return this._valueMax();var c=this.options.step>0?this.options.step:1,e=(d-this._valueMin())%c;alignValue=d-e;if(Math.abs(e)*2>=c)alignValue+=e>0?c:-c;return parseFloat(alignValue.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max}, _refreshValue:function(){var d=this.options.range,c=this.options,e=this,h=!this._animateOff?c.animate:false,g,i={},b,f,j,l;if(this.options.values&&this.options.values.length)this.handles.each(function(o){g=(e.values(o)-e._valueMin())/(e._valueMax()-e._valueMin())*100;i[e.orientation==="horizontal"?"left":"bottom"]=g+"%";a(this).stop(1,1)[h?"animate":"css"](i,c.animate);if(e.options.range===true)if(e.orientation==="horizontal"){if(o===0)e.range.stop(1,1)[h?"animate":"css"]({left:g+"%"},c.animate); if(o===1)e.range[h?"animate":"css"]({width:g-b+"%"},{queue:false,duration:c.animate})}else{if(o===0)e.range.stop(1,1)[h?"animate":"css"]({bottom:g+"%"},c.animate);if(o===1)e.range[h?"animate":"css"]({height:g-b+"%"},{queue:false,duration:c.animate})}b=g});else{f=this.value();j=this._valueMin();l=this._valueMax();g=l!==j?(f-j)/(l-j)*100:0;i[e.orientation==="horizontal"?"left":"bottom"]=g+"%";this.handle.stop(1,1)[h?"animate":"css"](i,c.animate);if(d==="min"&&this.orientation==="horizontal")this.range.stop(1, 1)[h?"animate":"css"]({width:g+"%"},c.animate);if(d==="max"&&this.orientation==="horizontal")this.range[h?"animate":"css"]({width:100-g+"%"},{queue:false,duration:c.animate});if(d==="min"&&this.orientation==="vertical")this.range.stop(1,1)[h?"animate":"css"]({height:g+"%"},c.animate);if(d==="max"&&this.orientation==="vertical")this.range[h?"animate":"css"]({height:100-g+"%"},{queue:false,duration:c.animate})}}});a.extend(a.ui.slider,{version:"1.8.14"})})(jQuery); (function(a,d){function c(){return++h}function e(){return++g}var h=0,g=0;a.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"
    ",remove:null,select:null,show:null,spinner:"Loading…",tabTemplate:"
  • #{label}
  • "},_create:function(){this._tabify(true)},_setOption:function(i,b){if(i=="selected")this.options.collapsible&& b==this.options.selected||this.select(b);else{this.options[i]=b;this._tabify()}},_tabId:function(i){return i.title&&i.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+c()},_sanitizeSelector:function(i){return i.replace(/:/g,"\\:")},_cookie:function(){var i=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+e());return a.cookie.apply(null,[i].concat(a.makeArray(arguments)))},_ui:function(i,b){return{tab:i,panel:b,index:this.anchors.index(i)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var i= a(this);i.html(i.data("label.tabs")).removeData("label.tabs")})},_tabify:function(i){function b(r,u){r.css("display","");!a.support.opacity&&u.opacity&&r[0].style.removeAttribute("filter")}var f=this,j=this.options,l=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=a(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return a("a",this)[0]});this.panels=a([]);this.anchors.each(function(r,u){var v=a(u).attr("href"),w=v.split("#")[0],x;if(w&&(w===location.toString().split("#")[0]|| (x=a("base")[0])&&w===x.href)){v=u.hash;u.href=v}if(l.test(v))f.panels=f.panels.add(f.element.find(f._sanitizeSelector(v)));else if(v&&v!=="#"){a.data(u,"href.tabs",v);a.data(u,"load.tabs",v.replace(/#.*$/,""));v=f._tabId(u);u.href="#"+v;u=f.element.find("#"+v);if(!u.length){u=a(j.panelTemplate).attr("id",v).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(f.panels[r-1]||f.list);u.data("destroy.tabs",true)}f.panels=f.panels.add(u)}else j.disabled.push(r)});if(i){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all"); this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(j.selected===d){location.hash&&this.anchors.each(function(r,u){if(u.hash==location.hash){j.selected=r;return false}});if(typeof j.selected!=="number"&&j.cookie)j.selected=parseInt(f._cookie(),10);if(typeof j.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)j.selected= this.lis.index(this.lis.filter(".ui-tabs-selected"));j.selected=j.selected||(this.lis.length?0:-1)}else if(j.selected===null)j.selected=-1;j.selected=j.selected>=0&&this.anchors[j.selected]||j.selected<0?j.selected:0;j.disabled=a.unique(j.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(r){return f.lis.index(r)}))).sort();a.inArray(j.selected,j.disabled)!=-1&&j.disabled.splice(a.inArray(j.selected,j.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active"); if(j.selected>=0&&this.anchors.length){f.element.find(f._sanitizeSelector(f.anchors[j.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(j.selected).addClass("ui-tabs-selected ui-state-active");f.element.queue("tabs",function(){f._trigger("show",null,f._ui(f.anchors[j.selected],f.element.find(f._sanitizeSelector(f.anchors[j.selected].hash))[0]))});this.load(j.selected)}a(window).bind("unload",function(){f.lis.add(f.anchors).unbind(".tabs");f.lis=f.anchors=f.panels=null})}else j.selected=this.lis.index(this.lis.filter(".ui-tabs-selected")); this.element[j.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");j.cookie&&this._cookie(j.selected,j.cookie);i=0;for(var o;o=this.lis[i];i++)a(o)[a.inArray(i,j.disabled)!=-1&&!a(o).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");j.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(j.event!=="mouseover"){var n=function(r,u){u.is(":not(.ui-state-disabled)")&&u.addClass("ui-state-"+r)},k=function(r,u){u.removeClass("ui-state-"+ r)};this.lis.bind("mouseover.tabs",function(){n("hover",a(this))});this.lis.bind("mouseout.tabs",function(){k("hover",a(this))});this.anchors.bind("focus.tabs",function(){n("focus",a(this).closest("li"))});this.anchors.bind("blur.tabs",function(){k("focus",a(this).closest("li"))})}var m,p;if(j.fx)if(a.isArray(j.fx)){m=j.fx[0];p=j.fx[1]}else m=p=j.fx;var q=p?function(r,u){a(r).closest("li").addClass("ui-tabs-selected ui-state-active");u.hide().removeClass("ui-tabs-hide").animate(p,p.duration||"normal", function(){b(u,p);f._trigger("show",null,f._ui(r,u[0]))})}:function(r,u){a(r).closest("li").addClass("ui-tabs-selected ui-state-active");u.removeClass("ui-tabs-hide");f._trigger("show",null,f._ui(r,u[0]))},s=m?function(r,u){u.animate(m,m.duration||"normal",function(){f.lis.removeClass("ui-tabs-selected ui-state-active");u.addClass("ui-tabs-hide");b(u,m);f.element.dequeue("tabs")})}:function(r,u){f.lis.removeClass("ui-tabs-selected ui-state-active");u.addClass("ui-tabs-hide");f.element.dequeue("tabs")}; this.anchors.bind(j.event+".tabs",function(){var r=this,u=a(r).closest("li"),v=f.panels.filter(":not(.ui-tabs-hide)"),w=f.element.find(f._sanitizeSelector(r.hash));if(u.hasClass("ui-tabs-selected")&&!j.collapsible||u.hasClass("ui-state-disabled")||u.hasClass("ui-state-processing")||f.panels.filter(":animated").length||f._trigger("select",null,f._ui(this,w[0]))===false){this.blur();return false}j.selected=f.anchors.index(this);f.abort();if(j.collapsible)if(u.hasClass("ui-tabs-selected")){j.selected= -1;j.cookie&&f._cookie(j.selected,j.cookie);f.element.queue("tabs",function(){s(r,v)}).dequeue("tabs");this.blur();return false}else if(!v.length){j.cookie&&f._cookie(j.selected,j.cookie);f.element.queue("tabs",function(){q(r,w)});f.load(f.anchors.index(this));this.blur();return false}j.cookie&&f._cookie(j.selected,j.cookie);if(w.length){v.length&&f.element.queue("tabs",function(){s(r,v)});f.element.queue("tabs",function(){q(r,w)});f.load(f.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier."; a.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(i){if(typeof i=="string")i=this.anchors.index(this.anchors.filter("[href$="+i+"]"));return i},destroy:function(){var i=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var b= a.data(this,"href.tabs");if(b)this.href=b;var f=a(this).unbind(".tabs");a.each(["href","load","cache"],function(j,l){f.removeData(l+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){a.data(this,"destroy.tabs")?a(this).remove():a(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});i.cookie&&this._cookie(null,i.cookie);return this},add:function(i, b,f){if(f===d)f=this.anchors.length;var j=this,l=this.options;b=a(l.tabTemplate.replace(/#\{href\}/g,i).replace(/#\{label\}/g,b));i=!i.indexOf("#")?i.replace("#",""):this._tabId(a("a",b)[0]);b.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var o=j.element.find("#"+i);o.length||(o=a(l.panelTemplate).attr("id",i).data("destroy.tabs",true));o.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(f>=this.lis.length){b.appendTo(this.list);o.appendTo(this.list[0].parentNode)}else{b.insertBefore(this.lis[f]); o.insertBefore(this.panels[f])}l.disabled=a.map(l.disabled,function(n){return n>=f?++n:n});this._tabify();if(this.anchors.length==1){l.selected=0;b.addClass("ui-tabs-selected ui-state-active");o.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){j._trigger("show",null,j._ui(j.anchors[0],j.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[f],this.panels[f]));return this},remove:function(i){i=this._getIndex(i);var b=this.options,f=this.lis.eq(i).remove(),j=this.panels.eq(i).remove(); if(f.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(i+(i+1=i?--l:l});this._tabify();this._trigger("remove",null,this._ui(f.find("a")[0],j[0]));return this},enable:function(i){i=this._getIndex(i);var b=this.options;if(a.inArray(i,b.disabled)!=-1){this.lis.eq(i).removeClass("ui-state-disabled");b.disabled=a.grep(b.disabled,function(f){return f!=i});this._trigger("enable",null, this._ui(this.anchors[i],this.panels[i]));return this}},disable:function(i){i=this._getIndex(i);var b=this.options;if(i!=b.selected){this.lis.eq(i).addClass("ui-state-disabled");b.disabled.push(i);b.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[i],this.panels[i]))}return this},select:function(i){i=this._getIndex(i);if(i==-1)if(this.options.collapsible&&this.options.selected!=-1)i=this.options.selected;else return this;this.anchors.eq(i).trigger(this.options.event+".tabs");return this}, load:function(i){i=this._getIndex(i);var b=this,f=this.options,j=this.anchors.eq(i)[0],l=a.data(j,"load.tabs");this.abort();if(!l||this.element.queue("tabs").length!==0&&a.data(j,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(i).addClass("ui-state-processing");if(f.spinner){var o=a("span",j);o.data("label.tabs",o.html()).html(f.spinner)}this.xhr=a.ajax(a.extend({},f.ajaxOptions,{url:l,success:function(n,k){b.element.find(b._sanitizeSelector(j.hash)).html(n);b._cleanup();f.cache&&a.data(j, "cache.tabs",true);b._trigger("load",null,b._ui(b.anchors[i],b.panels[i]));try{f.ajaxOptions.success(n,k)}catch(m){}},error:function(n,k){b._cleanup();b._trigger("load",null,b._ui(b.anchors[i],b.panels[i]));try{f.ajaxOptions.error(n,k,i,j)}catch(m){}}}));b.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this}, url:function(i,b){this.anchors.eq(i).removeData("cache.tabs").data("load.tabs",b);return this},length:function(){return this.anchors.length}});a.extend(a.ui.tabs,{version:"1.8.14"});a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(i,b){var f=this,j=this.options,l=f._rotate||(f._rotate=function(o){clearTimeout(f.rotation);f.rotation=setTimeout(function(){var n=j.selected;f.select(++n */ jQuery(function($){ $.datepicker.regional['fr'] = { closeText: 'Fermer', prevText: 'Précédent', nextText: 'Suivant', currentText: 'Aujourd\'hui', monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin', 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'], monthNamesShort: ['Janv.','Févr.','Mars','Avril','Mai','Juin', 'Juil.','Août','Sept.','Oct.','Nov.','Déc.'], dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'], dayNamesShort: ['Dim.','Lun.','Mar.','Mer.','Jeu.','Ven.','Sam.'], dayNamesMin: ['D','L','M','M','J','V','S'], weekHeader: 'Sem.', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['fr']); }); /* Galician localization for 'UI date picker' jQuery extension. */ /* Translated by Jorge Barreiro . */ jQuery(function($){ $.datepicker.regional['gl'] = { closeText: 'Pechar', prevText: '<Ant', nextText: 'Seg>', currentText: 'Hoxe', monthNames: ['Xaneiro','Febreiro','Marzo','Abril','Maio','Xuño', 'Xullo','Agosto','Setembro','Outubro','Novembro','Decembro'], monthNamesShort: ['Xan','Feb','Mar','Abr','Mai','Xuñ', 'Xul','Ago','Set','Out','Nov','Dec'], dayNames: ['Domingo','Luns','Martes','Mércores','Xoves','Venres','Sábado'], dayNamesShort: ['Dom','Lun','Mar','Mér','Xov','Ven','Sáb'], dayNamesMin: ['Do','Lu','Ma','Mé','Xo','Ve','Sá'], weekHeader: 'Sm', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['gl']); });/* Hebrew initialisation for the UI Datepicker extension. */ /* Written by Amir Hardon (ahardon at gmail dot com). */ jQuery(function($){ $.datepicker.regional['he'] = { closeText: 'סגור', prevText: '<הקודם', nextText: 'הבא>', currentText: 'היום', monthNames: ['ינואר','פברואר','מרץ','אפריל','מאי','יוני', 'יולי','אוגוסט','ספטמבר','אוקטובר','נובמבר','דצמבר'], monthNamesShort: ['1','2','3','4','5','6', '7','8','9','10','11','12'], dayNames: ['ראשון','שני','שלישי','רביעי','חמישי','שישי','שבת'], dayNamesShort: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'], dayNamesMin: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'], weekHeader: 'Wk', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: true, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['he']); }); /* Croatian i18n for the jQuery UI date picker plugin. */ /* Written by Vjekoslav Nesek. */ jQuery(function($){ $.datepicker.regional['hr'] = { closeText: 'Zatvori', prevText: '<', nextText: '>', currentText: 'Danas', monthNames: ['Siječanj','Veljača','Ožujak','Travanj','Svibanj','Lipanj', 'Srpanj','Kolovoz','Rujan','Listopad','Studeni','Prosinac'], monthNamesShort: ['Sij','Velj','Ožu','Tra','Svi','Lip', 'Srp','Kol','Ruj','Lis','Stu','Pro'], dayNames: ['Nedjelja','Ponedjeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'], dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'], dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], weekHeader: 'Tje', dateFormat: 'dd.mm.yy.', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['hr']); });/* Hungarian initialisation for the jQuery UI date picker plugin. */ /* Written by Istvan Karaszi (jquery@spam.raszi.hu). */ jQuery(function($){ $.datepicker.regional['hu'] = { closeText: 'bezárás', prevText: '« vissza', nextText: 'előre »', currentText: 'ma', monthNames: ['Január', 'Február', 'Március', 'Április', 'Május', 'Június', 'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'], monthNamesShort: ['Jan', 'Feb', 'Már', 'Ápr', 'Máj', 'Jún', 'Júl', 'Aug', 'Szep', 'Okt', 'Nov', 'Dec'], dayNames: ['Vasárnap', 'Hétfö', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'], dayNamesShort: ['Vas', 'Hét', 'Ked', 'Sze', 'Csü', 'Pén', 'Szo'], dayNamesMin: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'], weekHeader: 'Hé', dateFormat: 'yy-mm-dd', firstDay: 1, isRTL: false, showMonthAfterYear: true, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['hu']); }); /* Armenian(UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Levon Zakaryan (levon.zakaryan@gmail.com)*/ jQuery(function($){ $.datepicker.regional['hy'] = { closeText: 'Փակել', prevText: '<Նախ.', nextText: 'Հաջ.>', currentText: 'Այսօր', monthNames: ['Հունվար','Փետրվար','Մարտ','Ապրիլ','Մայիս','Հունիս', 'Հուլիս','Օգոստոս','Սեպտեմբեր','Հոկտեմբեր','Նոյեմբեր','Դեկտեմբեր'], monthNamesShort: ['Հունվ','Փետր','Մարտ','Ապր','Մայիս','Հունիս', 'Հուլ','Օգս','Սեպ','Հոկ','Նոյ','Դեկ'], dayNames: ['կիրակի','եկուշաբթի','երեքշաբթի','չորեքշաբթի','հինգշաբթի','ուրբաթ','շաբաթ'], dayNamesShort: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'], dayNamesMin: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'], weekHeader: 'ՇԲՏ', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['hy']); });/* Indonesian initialisation for the jQuery UI date picker plugin. */ /* Written by Deden Fathurahman (dedenf@gmail.com). */ jQuery(function($){ $.datepicker.regional['id'] = { closeText: 'Tutup', prevText: '<mundur', nextText: 'maju>', currentText: 'hari ini', monthNames: ['Januari','Februari','Maret','April','Mei','Juni', 'Juli','Agustus','September','Oktober','Nopember','Desember'], monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun', 'Jul','Agus','Sep','Okt','Nop','Des'], dayNames: ['Minggu','Senin','Selasa','Rabu','Kamis','Jumat','Sabtu'], dayNamesShort: ['Min','Sen','Sel','Rab','kam','Jum','Sab'], dayNamesMin: ['Mg','Sn','Sl','Rb','Km','jm','Sb'], weekHeader: 'Mg', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['id']); });/* Icelandic initialisation for the jQuery UI date picker plugin. */ /* Written by Haukur H. Thorsson (haukur@eskill.is). */ jQuery(function($){ $.datepicker.regional['is'] = { closeText: 'Loka', prevText: '< Fyrri', nextText: 'Næsti >', currentText: 'Í dag', monthNames: ['Janúar','Febrúar','Mars','Apríl','Maí','Júní', 'Júlí','Ágúst','September','Október','Nóvember','Desember'], monthNamesShort: ['Jan','Feb','Mar','Apr','Maí','Jún', 'Júl','Ágú','Sep','Okt','Nóv','Des'], dayNames: ['Sunnudagur','Mánudagur','Þriðjudagur','Miðvikudagur','Fimmtudagur','Föstudagur','Laugardagur'], dayNamesShort: ['Sun','Mán','Þri','Mið','Fim','Fös','Lau'], dayNamesMin: ['Su','Má','Þr','Mi','Fi','Fö','La'], weekHeader: 'Vika', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['is']); });/* Italian initialisation for the jQuery UI date picker plugin. */ /* Written by Antonello Pasella (antonello.pasella@gmail.com). */ jQuery(function($){ $.datepicker.regional['it'] = { closeText: 'Chiudi', prevText: '<Prec', nextText: 'Succ>', currentText: 'Oggi', monthNames: ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno', 'Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'], monthNamesShort: ['Gen','Feb','Mar','Apr','Mag','Giu', 'Lug','Ago','Set','Ott','Nov','Dic'], dayNames: ['Domenica','Lunedì','Martedì','Mercoledì','Giovedì','Venerdì','Sabato'], dayNamesShort: ['Dom','Lun','Mar','Mer','Gio','Ven','Sab'], dayNamesMin: ['Do','Lu','Ma','Me','Gi','Ve','Sa'], weekHeader: 'Sm', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['it']); }); /* Japanese initialisation for the jQuery UI date picker plugin. */ /* Written by Kentaro SATO (kentaro@ranvis.com). */ jQuery(function($){ $.datepicker.regional['ja'] = { closeText: '閉じる', prevText: '<前', nextText: '次>', currentText: '今日', monthNames: ['1月','2月','3月','4月','5月','6月', '7月','8月','9月','10月','11月','12月'], monthNamesShort: ['1月','2月','3月','4月','5月','6月', '7月','8月','9月','10月','11月','12月'], dayNames: ['日曜日','月曜日','火曜日','水曜日','木曜日','金曜日','土曜日'], dayNamesShort: ['日','月','火','水','木','金','土'], dayNamesMin: ['日','月','火','水','木','金','土'], weekHeader: '週', dateFormat: 'yy/mm/dd', firstDay: 0, isRTL: false, showMonthAfterYear: true, yearSuffix: '年'}; $.datepicker.setDefaults($.datepicker.regional['ja']); });/* Korean initialisation for the jQuery calendar extension. */ /* Written by DaeKwon Kang (ncrash.dk@gmail.com). */ jQuery(function($){ $.datepicker.regional['ko'] = { closeText: '닫기', prevText: '이전달', nextText: '다음달', currentText: '오늘', monthNames: ['1월(JAN)','2월(FEB)','3월(MAR)','4월(APR)','5월(MAY)','6월(JUN)', '7월(JUL)','8월(AUG)','9월(SEP)','10월(OCT)','11월(NOV)','12월(DEC)'], monthNamesShort: ['1월(JAN)','2월(FEB)','3월(MAR)','4월(APR)','5월(MAY)','6월(JUN)', '7월(JUL)','8월(AUG)','9월(SEP)','10월(OCT)','11월(NOV)','12월(DEC)'], dayNames: ['일','월','화','수','목','금','토'], dayNamesShort: ['일','월','화','수','목','금','토'], dayNamesMin: ['일','월','화','수','목','금','토'], weekHeader: 'Wk', dateFormat: 'yy-mm-dd', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: '년'}; $.datepicker.setDefaults($.datepicker.regional['ko']); });/* Kazakh (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Dmitriy Karasyov (dmitriy.karasyov@gmail.com). */ jQuery(function($){ $.datepicker.regional['kz'] = { closeText: 'Жабу', prevText: '<Алдыңғы', nextText: 'Келесі>', currentText: 'Бүгін', monthNames: ['Қаңтар','Ақпан','Наурыз','Сәуір','Мамыр','Маусым', 'Шілде','Тамыз','Қыркүйек','Қазан','Қараша','Желтоқсан'], monthNamesShort: ['Қаң','Ақп','Нау','Сәу','Мам','Мау', 'Шіл','Там','Қыр','Қаз','Қар','Жел'], dayNames: ['Жексенбі','Дүйсенбі','Сейсенбі','Сәрсенбі','Бейсенбі','Жұма','Сенбі'], dayNamesShort: ['жкс','дсн','ссн','срс','бсн','жма','снб'], dayNamesMin: ['Жк','Дс','Сс','Ср','Бс','Жм','Сн'], weekHeader: 'Не', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['kz']); }); /* Lithuanian (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* @author Arturas Paleicikas */ jQuery(function($){ $.datepicker.regional['lt'] = { closeText: 'Uždaryti', prevText: '<Atgal', nextText: 'Pirmyn>', currentText: 'Šiandien', monthNames: ['Sausis','Vasaris','Kovas','Balandis','Gegužė','Birželis', 'Liepa','Rugpjūtis','Rugsėjis','Spalis','Lapkritis','Gruodis'], monthNamesShort: ['Sau','Vas','Kov','Bal','Geg','Bir', 'Lie','Rugp','Rugs','Spa','Lap','Gru'], dayNames: ['sekmadienis','pirmadienis','antradienis','trečiadienis','ketvirtadienis','penktadienis','šeštadienis'], dayNamesShort: ['sek','pir','ant','tre','ket','pen','šeš'], dayNamesMin: ['Se','Pr','An','Tr','Ke','Pe','Še'], weekHeader: 'Wk', dateFormat: 'yy-mm-dd', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['lt']); });/* Latvian (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* @author Arturas Paleicikas */ jQuery(function($){ $.datepicker.regional['lv'] = { closeText: 'Aizvērt', prevText: 'Iepr', nextText: 'Nāka', currentText: 'Šodien', monthNames: ['Janvāris','Februāris','Marts','Aprīlis','Maijs','Jūnijs', 'Jūlijs','Augusts','Septembris','Oktobris','Novembris','Decembris'], monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','Jūn', 'Jūl','Aug','Sep','Okt','Nov','Dec'], dayNames: ['svētdiena','pirmdiena','otrdiena','trešdiena','ceturtdiena','piektdiena','sestdiena'], dayNamesShort: ['svt','prm','otr','tre','ctr','pkt','sst'], dayNamesMin: ['Sv','Pr','Ot','Tr','Ct','Pk','Ss'], weekHeader: 'Nav', dateFormat: 'dd-mm-yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['lv']); });/* Malayalam (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Saji Nediyanchath (saji89@gmail.com). */ jQuery(function($){ $.datepicker.regional['ml'] = { closeText: 'ശരി', prevText: 'മുന്നത്തെ', nextText: 'അടുത്തത് ', currentText: 'ഇന്ന്', monthNames: ['ജനുവരി','ഫെബ്രുവരി','മാര്‍ച്ച്','ഏപ്രില്‍','മേയ്','ജൂണ്‍', 'ജൂലൈ','ആഗസ്റ്റ്','സെപ്റ്റംബര്‍','ഒക്ടോബര്‍','നവംബര്‍','ഡിസംബര്‍'], monthNamesShort: ['ജനു', 'ഫെബ്', 'മാര്‍', 'ഏപ്രി', 'മേയ്', 'ജൂണ്‍', 'ജൂലാ', 'ആഗ', 'സെപ്', 'ഒക്ടോ', 'നവം', 'ഡിസ'], dayNames: ['ഞായര്‍', 'തിങ്കള്‍', 'ചൊവ്വ', 'ബുധന്‍', 'വ്യാഴം', 'വെള്ളി', 'ശനി'], dayNamesShort: ['ഞായ', 'തിങ്ക', 'ചൊവ്വ', 'ബുധ', 'വ്യാഴം', 'വെള്ളി', 'ശനി'], dayNamesMin: ['ഞാ','തി','ചൊ','ബു','വ്യാ','വെ','ശ'], weekHeader: 'ആ', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['ml']); }); /* Malaysian initialisation for the jQuery UI date picker plugin. */ /* Written by Mohd Nawawi Mohamad Jamili (nawawi@ronggeng.net). */ jQuery(function($){ $.datepicker.regional['ms'] = { closeText: 'Tutup', prevText: '<Sebelum', nextText: 'Selepas>', currentText: 'hari ini', monthNames: ['Januari','Februari','Mac','April','Mei','Jun', 'Julai','Ogos','September','Oktober','November','Disember'], monthNamesShort: ['Jan','Feb','Mac','Apr','Mei','Jun', 'Jul','Ogo','Sep','Okt','Nov','Dis'], dayNames: ['Ahad','Isnin','Selasa','Rabu','Khamis','Jumaat','Sabtu'], dayNamesShort: ['Aha','Isn','Sel','Rab','kha','Jum','Sab'], dayNamesMin: ['Ah','Is','Se','Ra','Kh','Ju','Sa'], weekHeader: 'Mg', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['ms']); });/* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Mathias Bynens */ jQuery(function($){ $.datepicker.regional.nl = { closeText: 'Sluiten', prevText: '←', nextText: '→', currentText: 'Vandaag', monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december'], monthNamesShort: ['jan', 'feb', 'maa', 'apr', 'mei', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'], dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'], dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'], dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'], weekHeader: 'Wk', dateFormat: 'dd-mm-yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional.nl); });/* Norwegian initialisation for the jQuery UI date picker plugin. */ /* Written by Naimdjon Takhirov (naimdjon@gmail.com). */ jQuery(function($){ $.datepicker.regional['no'] = { closeText: 'Lukk', prevText: '«Forrige', nextText: 'Neste»', currentText: 'I dag', monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'], monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'], dayNamesShort: ['søn','man','tir','ons','tor','fre','lør'], dayNames: ['søndag','mandag','tirsdag','onsdag','torsdag','fredag','lørdag'], dayNamesMin: ['sø','ma','ti','on','to','fr','lø'], weekHeader: 'Uke', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: '' }; $.datepicker.setDefaults($.datepicker.regional['no']); }); /* Polish initialisation for the jQuery UI date picker plugin. */ /* Written by Jacek Wysocki (jacek.wysocki@gmail.com). */ jQuery(function($){ $.datepicker.regional['pl'] = { closeText: 'Zamknij', prevText: '<Poprzedni', nextText: 'Następny>', currentText: 'Dziś', monthNames: ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec', 'Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'], monthNamesShort: ['Sty','Lu','Mar','Kw','Maj','Cze', 'Lip','Sie','Wrz','Pa','Lis','Gru'], dayNames: ['Niedziela','Poniedziałek','Wtorek','Środa','Czwartek','Piątek','Sobota'], dayNamesShort: ['Nie','Pn','Wt','Śr','Czw','Pt','So'], dayNamesMin: ['N','Pn','Wt','Śr','Cz','Pt','So'], weekHeader: 'Tydz', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['pl']); }); /* Brazilian initialisation for the jQuery UI date picker plugin. */ /* Written by Leonildo Costa Silva (leocsilva@gmail.com). */ jQuery(function($){ $.datepicker.regional['pt-BR'] = { closeText: 'Fechar', prevText: '<Anterior', nextText: 'Próximo>', currentText: 'Hoje', monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho', 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'], monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun', 'Jul','Ago','Set','Out','Nov','Dez'], dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'], dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], weekHeader: 'Sm', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['pt-BR']); });/* Portuguese initialisation for the jQuery UI date picker plugin. */ jQuery(function($){ $.datepicker.regional['pt'] = { closeText: 'Fechar', prevText: '<Anterior', nextText: 'Seguinte', currentText: 'Hoje', monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho', 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'], monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun', 'Jul','Ago','Set','Out','Nov','Dez'], dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'], dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], weekHeader: 'Sem', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['pt']); });/* Romansh initialisation for the jQuery UI date picker plugin. */ /* Written by Yvonne Gienal (yvonne.gienal@educa.ch). */ jQuery(function($){ $.datepicker.regional['rm'] = { closeText: 'Serrar', prevText: '<Suandant', nextText: 'Precedent>', currentText: 'Actual', monthNames: ['Schaner','Favrer','Mars','Avrigl','Matg','Zercladur', 'Fanadur','Avust','Settember','October','November','December'], monthNamesShort: ['Scha','Fev','Mar','Avr','Matg','Zer', 'Fan','Avu','Sett','Oct','Nov','Dec'], dayNames: ['Dumengia','Glindesdi','Mardi','Mesemna','Gievgia','Venderdi','Sonda'], dayNamesShort: ['Dum','Gli','Mar','Mes','Gie','Ven','Som'], dayNamesMin: ['Du','Gl','Ma','Me','Gi','Ve','So'], weekHeader: 'emna', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['rm']); }); /* Romanian initialisation for the jQuery UI date picker plugin. * * Written by Edmond L. (ll_edmond@walla.com) * and Ionut G. Stan (ionut.g.stan@gmail.com) */ jQuery(function($){ $.datepicker.regional['ro'] = { closeText: 'Închide', prevText: '« Luna precedentă', nextText: 'Luna următoare »', currentText: 'Azi', monthNames: ['Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie', 'Iulie','August','Septembrie','Octombrie','Noiembrie','Decembrie'], monthNamesShort: ['Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun', 'Iul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], dayNames: ['Duminică', 'Luni', 'Marţi', 'Miercuri', 'Joi', 'Vineri', 'Sâmbătă'], dayNamesShort: ['Dum', 'Lun', 'Mar', 'Mie', 'Joi', 'Vin', 'Sâm'], dayNamesMin: ['Du','Lu','Ma','Mi','Jo','Vi','Sâ'], weekHeader: 'Săpt', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['ro']); }); /* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Andrew Stromnov (stromnov@gmail.com). */ jQuery(function($){ $.datepicker.regional['ru'] = { closeText: 'Закрыть', prevText: '<Пред', nextText: 'След>', currentText: 'Сегодня', monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь', 'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'], monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн', 'Июл','Авг','Сен','Окт','Ноя','Дек'], dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'], dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'], dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'], weekHeader: 'Нед', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['ru']); });/* Slovak initialisation for the jQuery UI date picker plugin. */ /* Written by Vojtech Rinik (vojto@hmm.sk). */ jQuery(function($){ $.datepicker.regional['sk'] = { closeText: 'Zavrieť', prevText: '<Predchádzajúci', nextText: 'Nasledujúci>', currentText: 'Dnes', monthNames: ['Január','Február','Marec','Apríl','Máj','Jún', 'Júl','August','September','Október','November','December'], monthNamesShort: ['Jan','Feb','Mar','Apr','Máj','Jún', 'Júl','Aug','Sep','Okt','Nov','Dec'], dayNames: ['Nedeľa','Pondelok','Utorok','Streda','Štvrtok','Piatok','Sobota'], dayNamesShort: ['Ned','Pon','Uto','Str','Štv','Pia','Sob'], dayNamesMin: ['Ne','Po','Ut','St','Št','Pia','So'], weekHeader: 'Ty', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['sk']); }); /* Slovenian initialisation for the jQuery UI date picker plugin. */ /* Written by Jaka Jancar (jaka@kubje.org). */ /* c = č, s = š z = ž C = Č S = Š Z = Ž */ jQuery(function($){ $.datepicker.regional['sl'] = { closeText: 'Zapri', prevText: '<Prejšnji', nextText: 'Naslednji>', currentText: 'Trenutni', monthNames: ['Januar','Februar','Marec','April','Maj','Junij', 'Julij','Avgust','September','Oktober','November','December'], monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', 'Jul','Avg','Sep','Okt','Nov','Dec'], dayNames: ['Nedelja','Ponedeljek','Torek','Sreda','Četrtek','Petek','Sobota'], dayNamesShort: ['Ned','Pon','Tor','Sre','Čet','Pet','Sob'], dayNamesMin: ['Ne','Po','To','Sr','Če','Pe','So'], weekHeader: 'Teden', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['sl']); }); /* Albanian initialisation for the jQuery UI date picker plugin. */ /* Written by Flakron Bytyqi (flakron@gmail.com). */ jQuery(function($){ $.datepicker.regional['sq'] = { closeText: 'mbylle', prevText: '<mbrapa', nextText: 'Përpara>', currentText: 'sot', monthNames: ['Janar','Shkurt','Mars','Prill','Maj','Qershor', 'Korrik','Gusht','Shtator','Tetor','Nëntor','Dhjetor'], monthNamesShort: ['Jan','Shk','Mar','Pri','Maj','Qer', 'Kor','Gus','Sht','Tet','Nën','Dhj'], dayNames: ['E Diel','E Hënë','E Martë','E Mërkurë','E Enjte','E Premte','E Shtune'], dayNamesShort: ['Di','Hë','Ma','Më','En','Pr','Sh'], dayNamesMin: ['Di','Hë','Ma','Më','En','Pr','Sh'], weekHeader: 'Ja', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['sq']); }); /* Serbian i18n for the jQuery UI date picker plugin. */ /* Written by Dejan Dimić. */ jQuery(function($){ $.datepicker.regional['sr-SR'] = { closeText: 'Zatvori', prevText: '<', nextText: '>', currentText: 'Danas', monthNames: ['Januar','Februar','Mart','April','Maj','Jun', 'Jul','Avgust','Septembar','Oktobar','Novembar','Decembar'], monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', 'Jul','Avg','Sep','Okt','Nov','Dec'], dayNames: ['Nedelja','Ponedeljak','Utorak','Sreda','Četvrtak','Petak','Subota'], dayNamesShort: ['Ned','Pon','Uto','Sre','Čet','Pet','Sub'], dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], weekHeader: 'Sed', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['sr-SR']); }); /* Serbian i18n for the jQuery UI date picker plugin. */ /* Written by Dejan Dimić. */ jQuery(function($){ $.datepicker.regional['sr'] = { closeText: 'Затвори', prevText: '<', nextText: '>', currentText: 'Данас', monthNames: ['Јануар','Фебруар','Март','Април','Мај','Јун', 'Јул','Август','Септембар','Октобар','Новембар','Децембар'], monthNamesShort: ['Јан','Феб','Мар','Апр','Мај','Јун', 'Јул','Авг','Сеп','Окт','Нов','Дец'], dayNames: ['Недеља','Понедељак','Уторак','Среда','Четвртак','Петак','Субота'], dayNamesShort: ['Нед','Пон','Уто','Сре','Чет','Пет','Суб'], dayNamesMin: ['Не','По','Ут','Ср','Че','Пе','Су'], weekHeader: 'Сед', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['sr']); }); /* Swedish initialisation for the jQuery UI date picker plugin. */ /* Written by Anders Ekdahl ( anders@nomadiz.se). */ jQuery(function($){ $.datepicker.regional['sv'] = { closeText: 'Stäng', prevText: '«Förra', nextText: 'Nästa»', currentText: 'Idag', monthNames: ['Januari','Februari','Mars','April','Maj','Juni', 'Juli','Augusti','September','Oktober','November','December'], monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', 'Jul','Aug','Sep','Okt','Nov','Dec'], dayNamesShort: ['Sön','Mån','Tis','Ons','Tor','Fre','Lör'], dayNames: ['Söndag','Måndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'], dayNamesMin: ['Sö','Må','Ti','On','To','Fr','Lö'], weekHeader: 'Ve', dateFormat: 'yy-mm-dd', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['sv']); }); /* Tamil (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by S A Sureshkumar (saskumar@live.com). */ jQuery(function($){ $.datepicker.regional['ta'] = { closeText: 'மூடு', prevText: 'முன்னையது', nextText: 'அடுத்தது', currentText: 'இன்று', monthNames: ['தை','மாசி','பங்குனி','சித்திரை','வைகாசி','ஆனி', 'ஆடி','ஆவணி','புரட்டாசி','ஐப்பசி','கார்த்திகை','மார்கழி'], monthNamesShort: ['தை','மாசி','பங்','சித்','வைகா','ஆனி', 'ஆடி','ஆவ','புர','ஐப்','கார்','மார்'], dayNames: ['ஞாயிற்றுக்கிழமை','திங்கட்கிழமை','செவ்வாய்க்கிழமை','புதன்கிழமை','வியாழக்கிழமை','வெள்ளிக்கிழமை','சனிக்கிழமை'], dayNamesShort: ['ஞாயிறு','திங்கள்','செவ்வாய்','புதன்','வியாழன்','வெள்ளி','சனி'], dayNamesMin: ['ஞா','தி','செ','பு','வி','வெ','ச'], weekHeader: 'Не', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['ta']); }); /* Thai initialisation for the jQuery UI date picker plugin. */ /* Written by pipo (pipo@sixhead.com). */ jQuery(function($){ $.datepicker.regional['th'] = { closeText: 'ปิด', prevText: '« ย้อน', nextText: 'ถัดไป »', currentText: 'วันนี้', monthNames: ['มกราคม','กุมภาพันธ์','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน', 'กรกฎาคม','สิงหาคม','กันยายน','ตุลาคม','พฤศจิกายน','ธันวาคม'], monthNamesShort: ['ม.ค.','ก.พ.','มี.ค.','เม.ย.','พ.ค.','มิ.ย.', 'ก.ค.','ส.ค.','ก.ย.','ต.ค.','พ.ย.','ธ.ค.'], dayNames: ['อาทิตย์','จันทร์','อังคาร','พุธ','พฤหัสบดี','ศุกร์','เสาร์'], dayNamesShort: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'], dayNamesMin: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'], weekHeader: 'Wk', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['th']); });/* Tajiki (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Abdurahmon Saidov (saidovab@gmail.com). */ jQuery(function($){ $.datepicker.regional['tj'] = { closeText: 'Идома', prevText: '<Қафо', nextText: 'Пеш>', currentText: 'Имрӯз', monthNames: ['Январ','Феврал','Март','Апрел','Май','Июн', 'Июл','Август','Сентябр','Октябр','Ноябр','Декабр'], monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн', 'Июл','Авг','Сен','Окт','Ноя','Дек'], dayNames: ['якшанбе','душанбе','сешанбе','чоршанбе','панҷшанбе','ҷумъа','шанбе'], dayNamesShort: ['якш','душ','сеш','чор','пан','ҷум','шан'], dayNamesMin: ['Як','Дш','Сш','Чш','Пш','Ҷм','Шн'], weekHeader: 'Хф', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['tj']); });/* Turkish initialisation for the jQuery UI date picker plugin. */ /* Written by Izzet Emre Erkan (kara@karalamalar.net). */ jQuery(function($){ $.datepicker.regional['tr'] = { closeText: 'kapat', prevText: '<geri', nextText: 'ileri>', currentText: 'bugün', monthNames: ['Ocak','Şubat','Mart','Nisan','Mayıs','Haziran', 'Temmuz','Ağustos','Eylül','Ekim','Kasım','Aralık'], monthNamesShort: ['Oca','Şub','Mar','Nis','May','Haz', 'Tem','Ağu','Eyl','Eki','Kas','Ara'], dayNames: ['Pazar','Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi'], dayNamesShort: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'], dayNamesMin: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'], weekHeader: 'Hf', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['tr']); });/* Ukrainian (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Maxim Drogobitskiy (maxdao@gmail.com). */ jQuery(function($){ $.datepicker.regional['uk'] = { closeText: 'Закрити', prevText: '<', nextText: '>', currentText: 'Сьогодні', monthNames: ['Січень','Лютий','Березень','Квітень','Травень','Червень', 'Липень','Серпень','Вересень','Жовтень','Листопад','Грудень'], monthNamesShort: ['Січ','Лют','Бер','Кві','Тра','Чер', 'Лип','Сер','Вер','Жов','Лис','Гру'], dayNames: ['неділя','понеділок','вівторок','середа','четвер','п’ятниця','субота'], dayNamesShort: ['нед','пнд','вів','срд','чтв','птн','сбт'], dayNamesMin: ['Нд','Пн','Вт','Ср','Чт','Пт','Сб'], weekHeader: 'Не', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['uk']); });/* Vietnamese initialisation for the jQuery UI date picker plugin. */ /* Translated by Le Thanh Huy (lthanhhuy@cit.ctu.edu.vn). */ jQuery(function($){ $.datepicker.regional['vi'] = { closeText: 'Đóng', prevText: '<Trước', nextText: 'Tiếp>', currentText: 'Hôm nay', monthNames: ['Tháng Một', 'Tháng Hai', 'Tháng Ba', 'Tháng Tư', 'Tháng Năm', 'Tháng Sáu', 'Tháng Bảy', 'Tháng Tám', 'Tháng Chín', 'Tháng Mười', 'Tháng Mười Một', 'Tháng Mười Hai'], monthNamesShort: ['Tháng 1', 'Tháng 2', 'Tháng 3', 'Tháng 4', 'Tháng 5', 'Tháng 6', 'Tháng 7', 'Tháng 8', 'Tháng 9', 'Tháng 10', 'Tháng 11', 'Tháng 12'], dayNames: ['Chủ Nhật', 'Thứ Hai', 'Thứ Ba', 'Thứ Tư', 'Thứ Năm', 'Thứ Sáu', 'Thứ Bảy'], dayNamesShort: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'], dayNamesMin: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'], weekHeader: 'Tu', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['vi']); }); /* Chinese initialisation for the jQuery UI date picker plugin. */ /* Written by Cloudream (cloudream@gmail.com). */ jQuery(function($){ $.datepicker.regional['zh-CN'] = { closeText: '关闭', prevText: '<上月', nextText: '下月>', currentText: '今天', monthNames: ['一月','二月','三月','四月','五月','六月', '七月','八月','九月','十月','十一月','十二月'], monthNamesShort: ['一','二','三','四','五','六', '七','八','九','十','十一','十二'], dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], dayNamesMin: ['日','一','二','三','四','五','六'], weekHeader: '周', dateFormat: 'yy-mm-dd', firstDay: 1, isRTL: false, showMonthAfterYear: true, yearSuffix: '年'}; $.datepicker.setDefaults($.datepicker.regional['zh-CN']); }); /* Chinese initialisation for the jQuery UI date picker plugin. */ /* Written by SCCY (samuelcychan@gmail.com). */ jQuery(function($){ $.datepicker.regional['zh-HK'] = { closeText: '關閉', prevText: '<上月', nextText: '下月>', currentText: '今天', monthNames: ['一月','二月','三月','四月','五月','六月', '七月','八月','九月','十月','十一月','十二月'], monthNamesShort: ['一','二','三','四','五','六', '七','八','九','十','十一','十二'], dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], dayNamesMin: ['日','一','二','三','四','五','六'], weekHeader: '周', dateFormat: 'dd-mm-yy', firstDay: 0, isRTL: false, showMonthAfterYear: true, yearSuffix: '年'}; $.datepicker.setDefaults($.datepicker.regional['zh-HK']); }); /* Chinese initialisation for the jQuery UI date picker plugin. */ /* Written by Ressol (ressol@gmail.com). */ jQuery(function($){ $.datepicker.regional['zh-TW'] = { closeText: '關閉', prevText: '<上月', nextText: '下月>', currentText: '今天', monthNames: ['一月','二月','三月','四月','五月','六月', '七月','八月','九月','十月','十一月','十二月'], monthNamesShort: ['一','二','三','四','五','六', '七','八','九','十','十一','十二'], dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], dayNamesMin: ['日','一','二','三','四','五','六'], weekHeader: '周', dateFormat: 'yy/mm/dd', firstDay: 1, isRTL: false, showMonthAfterYear: true, yearSuffix: '年'}; $.datepicker.setDefaults($.datepicker.regional['zh-TW']); }); assets/js/i18n/jquery.ui.datepicker-en-NZ.js000066600000001603151373621660014607 0ustar00/* English/New Zealand initialisation for the jQuery UI date picker plugin. */ /* Based on the en-GB initialisation. */ jQuery(function($){ $.datepicker.regional['en-NZ'] = { closeText: 'Done', prevText: 'Prev', nextText: 'Next', currentText: 'Today', monthNames: ['January','February','March','April','May','June', 'July','August','September','October','November','December'], monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], weekHeader: 'Wk', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['en-NZ']); }); assets/js/i18n/jquery.ui.datepicker-da.js000066600000001644151373621660014251 0ustar00/* Danish initialisation for the jQuery UI date picker plugin. */ /* Written by Jan Christensen ( deletestuff@gmail.com). */ jQuery(function($){ $.datepicker.regional['da'] = { closeText: 'Luk', prevText: '<Forrige', nextText: 'Næste>', currentText: 'Idag', monthNames: ['Januar','Februar','Marts','April','Maj','Juni', 'Juli','August','September','Oktober','November','December'], monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', 'Jul','Aug','Sep','Okt','Nov','Dec'], dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'], dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'], dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'], weekHeader: 'Uge', dateFormat: 'dd-mm-yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['da']); }); assets/js/i18n/jquery.ui.datepicker-ca.js000066600000001557151373621660014253 0ustar00/* Inicialització en català per a l'extenció 'calendar' per jQuery. */ /* Writers: (joan.leon@gmail.com). */ jQuery(function($){ $.datepicker.regional['ca'] = { closeText: 'Tancar', prevText: '<Ant', nextText: 'Seg>', currentText: 'Avui', monthNames: ['Gener','Febrer','Març','Abril','Maig','Juny', 'Juliol','Agost','Setembre','Octubre','Novembre','Desembre'], monthNamesShort: ['Gen','Feb','Mar','Abr','Mai','Jun', 'Jul','Ago','Set','Oct','Nov','Des'], dayNames: ['Diumenge','Dilluns','Dimarts','Dimecres','Dijous','Divendres','Dissabte'], dayNamesShort: ['Dug','Dln','Dmt','Dmc','Djs','Dvn','Dsb'], dayNamesMin: ['Dg','Dl','Dt','Dc','Dj','Dv','Ds'], weekHeader: 'Sm', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['ca']); });assets/js/i18n/jquery.ui.datepicker-ja.js000066600000001605151373621660014254 0ustar00/* Japanese initialisation for the jQuery UI date picker plugin. */ /* Written by Kentaro SATO (kentaro@ranvis.com). */ jQuery(function($){ $.datepicker.regional['ja'] = { closeText: '閉じる', prevText: '<前', nextText: '次>', currentText: '今日', monthNames: ['1月','2月','3月','4月','5月','6月', '7月','8月','9月','10月','11月','12月'], monthNamesShort: ['1月','2月','3月','4月','5月','6月', '7月','8月','9月','10月','11月','12月'], dayNames: ['日曜日','月曜日','火曜日','水曜日','木曜日','金曜日','土曜日'], dayNamesShort: ['日','月','火','水','木','金','土'], dayNamesMin: ['日','月','火','水','木','金','土'], weekHeader: '週', dateFormat: 'yy/mm/dd', firstDay: 0, isRTL: false, showMonthAfterYear: true, yearSuffix: '年'}; $.datepicker.setDefaults($.datepicker.regional['ja']); });assets/js/i18n/jquery.ui.datepicker-ar-DZ.js000066600000002267151373621660014604 0ustar00/* Algerian Arabic Translation for jQuery UI date picker plugin. (can be used for Tunisia)*/ /* Mohamed Cherif BOUCHELAGHEM -- cherifbouchelaghem@yahoo.fr */ jQuery(function($){ $.datepicker.regional['ar-DZ'] = { closeText: 'إغلاق', prevText: '<السابق', nextText: 'التالي>', currentText: 'اليوم', monthNames: ['جانفي', 'فيفري', 'مارس', 'أفريل', 'ماي', 'جوان', 'جويلية', 'أوت', 'سبتمبر','أكتوبر', 'نوفمبر', 'ديسمبر'], monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'], dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], dayNamesMin: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], weekHeader: 'أسبوع', dateFormat: 'dd/mm/yy', firstDay: 6, isRTL: true, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['ar-DZ']); }); assets/js/i18n/jquery.ui.datepicker-az.js000066600000001630151373621660014272 0ustar00/* Azerbaijani (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Jamil Najafov (necefov33@gmail.com). */ jQuery(function($) { $.datepicker.regional['az'] = { closeText: 'Bağla', prevText: '<Geri', nextText: 'İrəli>', currentText: 'Bugün', monthNames: ['Yanvar','Fevral','Mart','Aprel','May','İyun', 'İyul','Avqust','Sentyabr','Oktyabr','Noyabr','Dekabr'], monthNamesShort: ['Yan','Fev','Mar','Apr','May','İyun', 'İyul','Avq','Sen','Okt','Noy','Dek'], dayNames: ['Bazar','Bazar ertəsi','Çərşənbə axşamı','Çərşənbə','Cümə axşamı','Cümə','Şənbə'], dayNamesShort: ['B','Be','Ça','Ç','Ca','C','Ş'], dayNamesMin: ['B','B','Ç','С','Ç','C','Ş'], weekHeader: 'Hf', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['az']); });assets/js/i18n/jquery.ui.datepicker-pt-BR.js000066600000001724151373621660014610 0ustar00/* Brazilian initialisation for the jQuery UI date picker plugin. */ /* Written by Leonildo Costa Silva (leocsilva@gmail.com). */ jQuery(function($){ $.datepicker.regional['pt-BR'] = { closeText: 'Fechar', prevText: '<Anterior', nextText: 'Próximo>', currentText: 'Hoje', monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho', 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'], monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun', 'Jul','Ago','Set','Out','Nov','Dez'], dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'], dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], weekHeader: 'Sm', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['pt-BR']); });assets/js/i18n/jquery.ui.datepicker-uk.js000066600000002142151373621660014276 0ustar00/* Ukrainian (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Maxim Drogobitskiy (maxdao@gmail.com). */ jQuery(function($){ $.datepicker.regional['uk'] = { closeText: 'Закрити', prevText: '<', nextText: '>', currentText: 'Сьогодні', monthNames: ['Січень','Лютий','Березень','Квітень','Травень','Червень', 'Липень','Серпень','Вересень','Жовтень','Листопад','Грудень'], monthNamesShort: ['Січ','Лют','Бер','Кві','Тра','Чер', 'Лип','Сер','Вер','Жов','Лис','Гру'], dayNames: ['неділя','понеділок','вівторок','середа','четвер','п’ятниця','субота'], dayNamesShort: ['нед','пнд','вів','срд','чтв','птн','сбт'], dayNamesMin: ['Нд','Пн','Вт','Ср','Чт','Пт','Сб'], weekHeader: 'Не', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['uk']); });assets/js/i18n/jquery.ui.datepicker-es.js000066600000001635151373621660014274 0ustar00/* Inicialización en español para la extensión 'UI date picker' para jQuery. */ /* Traducido por Vester (xvester@gmail.com). */ jQuery(function($){ $.datepicker.regional['es'] = { closeText: 'Cerrar', prevText: '<Ant', nextText: 'Sig>', currentText: 'Hoy', monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio', 'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'], monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun', 'Jul','Ago','Sep','Oct','Nov','Dic'], dayNames: ['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'], dayNamesShort: ['Dom','Lun','Mar','Mié','Juv','Vie','Sáb'], dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','Sá'], weekHeader: 'Sm', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['es']); });assets/js/i18n/jquery.ui.datepicker-sl.js000066600000001735151373621660014304 0ustar00/* Slovenian initialisation for the jQuery UI date picker plugin. */ /* Written by Jaka Jancar (jaka@kubje.org). */ /* c = č, s = š z = ž C = Č S = Š Z = Ž */ jQuery(function($){ $.datepicker.regional['sl'] = { closeText: 'Zapri', prevText: '<Prejšnji', nextText: 'Naslednji>', currentText: 'Trenutni', monthNames: ['Januar','Februar','Marec','April','Maj','Junij', 'Julij','Avgust','September','Oktober','November','December'], monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', 'Jul','Avg','Sep','Okt','Nov','Dec'], dayNames: ['Nedelja','Ponedeljek','Torek','Sreda','Četrtek','Petek','Sobota'], dayNamesShort: ['Ned','Pon','Tor','Sre','Čet','Pet','Sob'], dayNamesMin: ['Ne','Po','To','Sr','Če','Pe','So'], weekHeader: 'Teden', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['sl']); }); assets/js/i18n/.htaccess000066600000000177151373621660011062 0ustar00 Order allow,deny Deny from all assets/js/i18n/jquery.ui.datepicker-bs.js000066600000001517151373621660014270 0ustar00/* Bosnian i18n for the jQuery UI date picker plugin. */ /* Written by Kenan Konjo. */ jQuery(function($){ $.datepicker.regional['bs'] = { closeText: 'Zatvori', prevText: '<', nextText: '>', currentText: 'Danas', monthNames: ['Januar','Februar','Mart','April','Maj','Juni', 'Juli','August','Septembar','Oktobar','Novembar','Decembar'], monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', 'Jul','Aug','Sep','Okt','Nov','Dec'], dayNames: ['Nedelja','Ponedeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'], dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'], dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], weekHeader: 'Wk', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['bs']); });assets/js/i18n/jquery.ui.datepicker-fi.js000066600000001766151373621660014270 0ustar00/* Finnish initialisation for the jQuery UI date picker plugin. */ /* Written by Harri Kilpi� (harrikilpio@gmail.com). */ jQuery(function($){ $.datepicker.regional['fi'] = { closeText: 'Sulje', prevText: '«Edellinen', nextText: 'Seuraava»', currentText: 'Tänään', monthNames: ['Tammikuu','Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kesäkuu', 'Heinäkuu','Elokuu','Syyskuu','Lokakuu','Marraskuu','Joulukuu'], monthNamesShort: ['Tammi','Helmi','Maalis','Huhti','Touko','Kesä', 'Heinä','Elo','Syys','Loka','Marras','Joulu'], dayNamesShort: ['Su','Ma','Ti','Ke','To','Pe','Su'], dayNames: ['Sunnuntai','Maanantai','Tiistai','Keskiviikko','Torstai','Perjantai','Lauantai'], dayNamesMin: ['Su','Ma','Ti','Ke','To','Pe','La'], weekHeader: 'Vk', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['fi']); }); assets/js/i18n/jquery.ui.datepicker-ro.js000066600000001737151373621660014310 0ustar00/* Romanian initialisation for the jQuery UI date picker plugin. * * Written by Edmond L. (ll_edmond@walla.com) * and Ionut G. Stan (ionut.g.stan@gmail.com) */ jQuery(function($){ $.datepicker.regional['ro'] = { closeText: 'Închide', prevText: '« Luna precedentă', nextText: 'Luna următoare »', currentText: 'Azi', monthNames: ['Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie', 'Iulie','August','Septembrie','Octombrie','Noiembrie','Decembrie'], monthNamesShort: ['Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun', 'Iul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], dayNames: ['Duminică', 'Luni', 'Marţi', 'Miercuri', 'Joi', 'Vineri', 'Sâmbătă'], dayNamesShort: ['Dum', 'Lun', 'Mar', 'Mie', 'Joi', 'Vin', 'Sâm'], dayNamesMin: ['Du','Lu','Ma','Mi','Jo','Vi','Sâ'], weekHeader: 'Săpt', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['ro']); }); assets/js/i18n/jquery.ui.datepicker-th.js000066600000002373151373621660014300 0ustar00/* Thai initialisation for the jQuery UI date picker plugin. */ /* Written by pipo (pipo@sixhead.com). */ jQuery(function($){ $.datepicker.regional['th'] = { closeText: 'ปิด', prevText: '« ย้อน', nextText: 'ถัดไป »', currentText: 'วันนี้', monthNames: ['มกราคม','กุมภาพันธ์','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน', 'กรกฎาคม','สิงหาคม','กันยายน','ตุลาคม','พฤศจิกายน','ธันวาคม'], monthNamesShort: ['ม.ค.','ก.พ.','มี.ค.','เม.ย.','พ.ค.','มิ.ย.', 'ก.ค.','ส.ค.','ก.ย.','ต.ค.','พ.ย.','ธ.ค.'], dayNames: ['อาทิตย์','จันทร์','อังคาร','พุธ','พฤหัสบดี','ศุกร์','เสาร์'], dayNamesShort: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'], dayNamesMin: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'], weekHeader: 'Wk', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['th']); });assets/js/i18n/jquery.ui.datepicker-zh-HK.js000066600000001661151373621660014605 0ustar00/* Chinese initialisation for the jQuery UI date picker plugin. */ /* Written by SCCY (samuelcychan@gmail.com). */ jQuery(function($){ $.datepicker.regional['zh-HK'] = { closeText: '關閉', prevText: '<上月', nextText: '下月>', currentText: '今天', monthNames: ['一月','二月','三月','四月','五月','六月', '七月','八月','九月','十月','十一月','十二月'], monthNamesShort: ['一','二','三','四','五','六', '七','八','九','十','十一','十二'], dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], dayNamesMin: ['日','一','二','三','四','五','六'], weekHeader: '周', dateFormat: 'dd-mm-yy', firstDay: 0, isRTL: false, showMonthAfterYear: true, yearSuffix: '年'}; $.datepicker.setDefaults($.datepicker.regional['zh-HK']); }); assets/js/i18n/jquery.ui.datepicker-lv.js000066600000001653151373621660014306 0ustar00/* Latvian (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* @author Arturas Paleicikas */ jQuery(function($){ $.datepicker.regional['lv'] = { closeText: 'Aizvērt', prevText: 'Iepr', nextText: 'Nāka', currentText: 'Šodien', monthNames: ['Janvāris','Februāris','Marts','Aprīlis','Maijs','Jūnijs', 'Jūlijs','Augusts','Septembris','Oktobris','Novembris','Decembris'], monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','Jūn', 'Jūl','Aug','Sep','Okt','Nov','Dec'], dayNames: ['svētdiena','pirmdiena','otrdiena','trešdiena','ceturtdiena','piektdiena','sestdiena'], dayNamesShort: ['svt','prm','otr','tre','ctr','pkt','sst'], dayNamesMin: ['Sv','Pr','Ot','Tr','Ct','Pk','Ss'], weekHeader: 'Nav', dateFormat: 'dd-mm-yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['lv']); });assets/js/i18n/jquery.ui.datepicker-no.js000066600000001633151373621660014277 0ustar00/* Norwegian initialisation for the jQuery UI date picker plugin. */ /* Written by Naimdjon Takhirov (naimdjon@gmail.com). */ jQuery(function($){ $.datepicker.regional['no'] = { closeText: 'Lukk', prevText: '«Forrige', nextText: 'Neste»', currentText: 'I dag', monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'], monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'], dayNamesShort: ['søn','man','tir','ons','tor','fre','lør'], dayNames: ['søndag','mandag','tirsdag','onsdag','torsdag','fredag','lørdag'], dayNamesMin: ['sø','ma','ti','on','to','fr','lø'], weekHeader: 'Uke', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: '' }; $.datepicker.setDefaults($.datepicker.regional['no']); }); assets/js/i18n/jquery.ui.datepicker-cs.js000066600000001641151373621660014267 0ustar00/* Czech initialisation for the jQuery UI date picker plugin. */ /* Written by Tomas Muller (tomas@tomas-muller.net). */ jQuery(function($){ $.datepicker.regional['cs'] = { closeText: 'Zavřít', prevText: '<Dříve', nextText: 'Později>', currentText: 'Nyní', monthNames: ['leden','únor','březen','duben','květen','červen', 'červenec','srpen','září','říjen','listopad','prosinec'], monthNamesShort: ['led','úno','bře','dub','kvě','čer', 'čvc','srp','zář','říj','lis','pro'], dayNames: ['neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota'], dayNamesShort: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'], dayNamesMin: ['ne','po','út','st','čt','pá','so'], weekHeader: 'Týd', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['cs']); }); assets/js/i18n/jquery.ui.datepicker-lt.js000066600000001700151373621660014275 0ustar00/* Lithuanian (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* @author Arturas Paleicikas */ jQuery(function($){ $.datepicker.regional['lt'] = { closeText: 'Uždaryti', prevText: '<Atgal', nextText: 'Pirmyn>', currentText: 'Šiandien', monthNames: ['Sausis','Vasaris','Kovas','Balandis','Gegužė','Birželis', 'Liepa','Rugpjūtis','Rugsėjis','Spalis','Lapkritis','Gruodis'], monthNamesShort: ['Sau','Vas','Kov','Bal','Geg','Bir', 'Lie','Rugp','Rugs','Spa','Lap','Gru'], dayNames: ['sekmadienis','pirmadienis','antradienis','trečiadienis','ketvirtadienis','penktadienis','šeštadienis'], dayNamesShort: ['sek','pir','ant','tre','ket','pen','šeš'], dayNamesMin: ['Se','Pr','An','Tr','Ke','Pe','Še'], weekHeader: 'Wk', dateFormat: 'yy-mm-dd', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['lt']); });assets/js/i18n/jquery.ui.datepicker-de.js000066600000001561151373621660014253 0ustar00/* German initialisation for the jQuery UI date picker plugin. */ /* Written by Milian Wolff (mail@milianw.de). */ jQuery(function($){ $.datepicker.regional['de'] = { closeText: 'schließen', prevText: '<zurück', nextText: 'Vor>', currentText: 'heute', monthNames: ['Januar','Februar','März','April','Mai','Juni', 'Juli','August','September','Oktober','November','Dezember'], monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun', 'Jul','Aug','Sep','Okt','Nov','Dez'], dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'], dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'], dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'], weekHeader: 'Wo', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['de']); }); assets/js/i18n/jquery.ui.datepicker-et.js000066600000001665151373621660014300 0ustar00/* Estonian initialisation for the jQuery UI date picker plugin. */ /* Written by Mart Sõmermaa (mrts.pydev at gmail com). */ jQuery(function($){ $.datepicker.regional['et'] = { closeText: 'Sulge', prevText: 'Eelnev', nextText: 'Järgnev', currentText: 'Täna', monthNames: ['Jaanuar','Veebruar','Märts','Aprill','Mai','Juuni', 'Juuli','August','September','Oktoober','November','Detsember'], monthNamesShort: ['Jaan', 'Veebr', 'Märts', 'Apr', 'Mai', 'Juuni', 'Juuli', 'Aug', 'Sept', 'Okt', 'Nov', 'Dets'], dayNames: ['Pühapäev', 'Esmaspäev', 'Teisipäev', 'Kolmapäev', 'Neljapäev', 'Reede', 'Laupäev'], dayNamesShort: ['Pühap', 'Esmasp', 'Teisip', 'Kolmap', 'Neljap', 'Reede', 'Laup'], dayNamesMin: ['P','E','T','K','N','R','L'], weekHeader: 'Sm', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['et']); }); assets/js/i18n/jquery.ui.datepicker-sk.js000066600000001611151373621660014274 0ustar00/* Slovak initialisation for the jQuery UI date picker plugin. */ /* Written by Vojtech Rinik (vojto@hmm.sk). */ jQuery(function($){ $.datepicker.regional['sk'] = { closeText: 'Zavrieť', prevText: '<Predchádzajúci', nextText: 'Nasledujúci>', currentText: 'Dnes', monthNames: ['Január','Február','Marec','Apríl','Máj','Jún', 'Júl','August','September','Október','November','December'], monthNamesShort: ['Jan','Feb','Mar','Apr','Máj','Jún', 'Júl','Aug','Sep','Okt','Nov','Dec'], dayNames: ['Nedeľa','Pondelok','Utorok','Streda','Štvrtok','Piatok','Sobota'], dayNamesShort: ['Ned','Pon','Uto','Str','Štv','Pia','Sob'], dayNamesMin: ['Ne','Po','Ut','St','Št','Pia','So'], weekHeader: 'Ty', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['sk']); }); assets/js/i18n/jquery.ui.datepicker-ms.js000066600000001572151373621660014304 0ustar00/* Malaysian initialisation for the jQuery UI date picker plugin. */ /* Written by Mohd Nawawi Mohamad Jamili (nawawi@ronggeng.net). */ jQuery(function($){ $.datepicker.regional['ms'] = { closeText: 'Tutup', prevText: '<Sebelum', nextText: 'Selepas>', currentText: 'hari ini', monthNames: ['Januari','Februari','Mac','April','Mei','Jun', 'Julai','Ogos','September','Oktober','November','Disember'], monthNamesShort: ['Jan','Feb','Mac','Apr','Mei','Jun', 'Jul','Ogo','Sep','Okt','Nov','Dis'], dayNames: ['Ahad','Isnin','Selasa','Rabu','Khamis','Jumaat','Sabtu'], dayNamesShort: ['Aha','Isn','Sel','Rab','kha','Jum','Sab'], dayNamesMin: ['Ah','Is','Se','Ra','Kh','Ju','Sa'], weekHeader: 'Mg', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['ms']); });assets/js/i18n/jquery.ui.datepicker-gl.js000066600000001635151373621660014267 0ustar00/* Galician localization for 'UI date picker' jQuery extension. */ /* Translated by Jorge Barreiro . */ jQuery(function($){ $.datepicker.regional['gl'] = { closeText: 'Pechar', prevText: '<Ant', nextText: 'Seg>', currentText: 'Hoxe', monthNames: ['Xaneiro','Febreiro','Marzo','Abril','Maio','Xuño', 'Xullo','Agosto','Setembro','Outubro','Novembro','Decembro'], monthNamesShort: ['Xan','Feb','Mar','Abr','Mai','Xuñ', 'Xul','Ago','Set','Out','Nov','Dec'], dayNames: ['Domingo','Luns','Martes','Mércores','Xoves','Venres','Sábado'], dayNamesShort: ['Dom','Lun','Mar','Mér','Xov','Ven','Sáb'], dayNamesMin: ['Do','Lu','Ma','Mé','Xo','Ve','Sá'], weekHeader: 'Sm', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['gl']); });assets/js/i18n/jquery.ui.datepicker-eu.js000066600000001602151373621660014270 0ustar00/* Euskarako oinarria 'UI date picker' jquery-ko extentsioarentzat */ /* Karrikas-ek itzulia (karrikas@karrikas.com) */ jQuery(function($){ $.datepicker.regional['eu'] = { closeText: 'Egina', prevText: '<Aur', nextText: 'Hur>', currentText: 'Gaur', monthNames: ['Urtarrila','Otsaila','Martxoa','Apirila','Maiatza','Ekaina', 'Uztaila','Abuztua','Iraila','Urria','Azaroa','Abendua'], monthNamesShort: ['Urt','Ots','Mar','Api','Mai','Eka', 'Uzt','Abu','Ira','Urr','Aza','Abe'], dayNames: ['Igandea','Astelehena','Asteartea','Asteazkena','Osteguna','Ostirala','Larunbata'], dayNamesShort: ['Iga','Ast','Ast','Ast','Ost','Ost','Lar'], dayNamesMin: ['Ig','As','As','As','Os','Os','La'], weekHeader: 'Wk', dateFormat: 'yy/mm/dd', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['eu']); });assets/js/i18n/jquery.ui.datepicker-tj.js000066600000002061151373621660014274 0ustar00/* Tajiki (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Abdurahmon Saidov (saidovab@gmail.com). */ jQuery(function($){ $.datepicker.regional['tj'] = { closeText: 'Идома', prevText: '<Қафо', nextText: 'Пеш>', currentText: 'Имрӯз', monthNames: ['Январ','Феврал','Март','Апрел','Май','Июн', 'Июл','Август','Сентябр','Октябр','Ноябр','Декабр'], monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн', 'Июл','Авг','Сен','Окт','Ноя','Дек'], dayNames: ['якшанбе','душанбе','сешанбе','чоршанбе','панҷшанбе','ҷумъа','шанбе'], dayNamesShort: ['якш','душ','сеш','чор','пан','ҷум','шан'], dayNamesMin: ['Як','Дш','Сш','Чш','Пш','Ҷм','Шн'], weekHeader: 'Хф', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['tj']); });assets/js/i18n/jquery.ui.datepicker-nl.js000066600000001631151373621660014272 0ustar00/* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Mathias Bynens */ jQuery(function($){ $.datepicker.regional.nl = { closeText: 'Sluiten', prevText: '←', nextText: '→', currentText: 'Vandaag', monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december'], monthNamesShort: ['jan', 'feb', 'maa', 'apr', 'mei', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'], dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'], dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'], dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'], weekHeader: 'Wk', dateFormat: 'dd-mm-yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional.nl); });assets/js/i18n/jquery.ui.datepicker-pt.js000066600000001607151373621660014307 0ustar00/* Portuguese initialisation for the jQuery UI date picker plugin. */ jQuery(function($){ $.datepicker.regional['pt'] = { closeText: 'Fechar', prevText: '<Anterior', nextText: 'Seguinte', currentText: 'Hoje', monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho', 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'], monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun', 'Jul','Ago','Set','Out','Nov','Dez'], dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'], dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], weekHeader: 'Sem', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['pt']); });assets/js/i18n/jquery.ui.datepicker-rm.js000066600000001611151373621660014275 0ustar00/* Romansh initialisation for the jQuery UI date picker plugin. */ /* Written by Yvonne Gienal (yvonne.gienal@educa.ch). */ jQuery(function($){ $.datepicker.regional['rm'] = { closeText: 'Serrar', prevText: '<Suandant', nextText: 'Precedent>', currentText: 'Actual', monthNames: ['Schaner','Favrer','Mars','Avrigl','Matg','Zercladur', 'Fanadur','Avust','Settember','October','November','December'], monthNamesShort: ['Scha','Fev','Mar','Avr','Matg','Zer', 'Fan','Avu','Sett','Oct','Nov','Dec'], dayNames: ['Dumengia','Glindesdi','Mardi','Mesemna','Gievgia','Venderdi','Sonda'], dayNamesShort: ['Dum','Gli','Mar','Mes','Gie','Ven','Som'], dayNamesMin: ['Du','Gl','Ma','Me','Gi','Ve','So'], weekHeader: 'emna', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['rm']); }); assets/js/i18n/jquery.ui.datepicker-is.js000066600000002135151373621660014274 0ustar00/* Icelandic initialisation for the jQuery UI date picker plugin. */ /* Written by Haukur H. Thorsson (haukur@eskill.is). */ jQuery(function($){ $.datepicker.regional['is'] = { closeText: 'Loka', prevText: '< Fyrri', nextText: 'Næsti >', currentText: 'Í dag', monthNames: ['Janúar','Febrúar','Mars','Apríl','Maí','Júní', 'Júlí','Ágúst','September','Október','Nóvember','Desember'], monthNamesShort: ['Jan','Feb','Mar','Apr','Maí','Jún', 'Júl','Ágú','Sep','Okt','Nóv','Des'], dayNames: ['Sunnudagur','Mánudagur','Þriðjudagur','Miðvikudagur','Fimmtudagur','Föstudagur','Laugardagur'], dayNamesShort: ['Sun','Mán','Þri','Mið','Fim','Fös','Lau'], dayNamesMin: ['Su','Má','Þr','Mi','Fi','Fö','La'], weekHeader: 'Vika', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['is']); });assets/js/i18n/jquery.ui.datepicker-zh-CN.js000066600000001663151373621660014605 0ustar00/* Chinese initialisation for the jQuery UI date picker plugin. */ /* Written by Cloudream (cloudream@gmail.com). */ jQuery(function($){ $.datepicker.regional['zh-CN'] = { closeText: '关闭', prevText: '<上月', nextText: '下月>', currentText: '今天', monthNames: ['一月','二月','三月','四月','五月','六月', '七月','八月','九月','十月','十一月','十二月'], monthNamesShort: ['一','二','三','四','五','六', '七','八','九','十','十一','十二'], dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], dayNamesMin: ['日','一','二','三','四','五','六'], weekHeader: '周', dateFormat: 'yy-mm-dd', firstDay: 1, isRTL: false, showMonthAfterYear: true, yearSuffix: '年'}; $.datepicker.setDefaults($.datepicker.regional['zh-CN']); }); assets/js/i18n/jquery.ui.datepicker-id.js000066600000001561151373621660014257 0ustar00/* Indonesian initialisation for the jQuery UI date picker plugin. */ /* Written by Deden Fathurahman (dedenf@gmail.com). */ jQuery(function($){ $.datepicker.regional['id'] = { closeText: 'Tutup', prevText: '<mundur', nextText: 'maju>', currentText: 'hari ini', monthNames: ['Januari','Februari','Maret','April','Mei','Juni', 'Juli','Agustus','September','Oktober','Nopember','Desember'], monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun', 'Jul','Agus','Sep','Okt','Nop','Des'], dayNames: ['Minggu','Senin','Selasa','Rabu','Kamis','Jumat','Sabtu'], dayNamesShort: ['Min','Sen','Sel','Rab','kam','Jum','Sab'], dayNamesMin: ['Mg','Sn','Sl','Rb','Km','jm','Sb'], weekHeader: 'Mg', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['id']); });assets/js/i18n/jquery.ui.datepicker-zh-TW.js000066600000001655151373621660014640 0ustar00/* Chinese initialisation for the jQuery UI date picker plugin. */ /* Written by Ressol (ressol@gmail.com). */ jQuery(function($){ $.datepicker.regional['zh-TW'] = { closeText: '關閉', prevText: '<上月', nextText: '下月>', currentText: '今天', monthNames: ['一月','二月','三月','四月','五月','六月', '七月','八月','九月','十月','十一月','十二月'], monthNamesShort: ['一','二','三','四','五','六', '七','八','九','十','十一','十二'], dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], dayNamesMin: ['日','一','二','三','四','五','六'], weekHeader: '周', dateFormat: 'yy/mm/dd', firstDay: 1, isRTL: false, showMonthAfterYear: true, yearSuffix: '年'}; $.datepicker.setDefaults($.datepicker.regional['zh-TW']); }); assets/js/i18n/jquery.ui.datepicker-ml.js000066600000002636151373621660014277 0ustar00/* Malayalam (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Saji Nediyanchath (saji89@gmail.com). */ jQuery(function($){ $.datepicker.regional['ml'] = { closeText: 'ശരി', prevText: 'മുന്നത്തെ', nextText: 'അടുത്തത് ', currentText: 'ഇന്ന്', monthNames: ['ജനുവരി','ഫെബ്രുവരി','മാര്‍ച്ച്','ഏപ്രില്‍','മേയ്','ജൂണ്‍', 'ജൂലൈ','ആഗസ്റ്റ്','സെപ്റ്റംബര്‍','ഒക്ടോബര്‍','നവംബര്‍','ഡിസംബര്‍'], monthNamesShort: ['ജനു', 'ഫെബ്', 'മാര്‍', 'ഏപ്രി', 'മേയ്', 'ജൂണ്‍', 'ജൂലാ', 'ആഗ', 'സെപ്', 'ഒക്ടോ', 'നവം', 'ഡിസ'], dayNames: ['ഞായര്‍', 'തിങ്കള്‍', 'ചൊവ്വ', 'ബുധന്‍', 'വ്യാഴം', 'വെള്ളി', 'ശനി'], dayNamesShort: ['ഞായ', 'തിങ്ക', 'ചൊവ്വ', 'ബുധ', 'വ്യാഴം', 'വെള്ളി', 'ശനി'], dayNamesMin: ['ഞാ','തി','ചൊ','ബു','വ്യാ','വെ','ശ'], weekHeader: 'ആ', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['ml']); }); assets/js/i18n/jquery.ui.datepicker-hu.js000066600000001717151373621660014302 0ustar00/* Hungarian initialisation for the jQuery UI date picker plugin. */ /* Written by Istvan Karaszi (jquery@spam.raszi.hu). */ jQuery(function($){ $.datepicker.regional['hu'] = { closeText: 'bezárás', prevText: '« vissza', nextText: 'előre »', currentText: 'ma', monthNames: ['Január', 'Február', 'Március', 'Április', 'Május', 'Június', 'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'], monthNamesShort: ['Jan', 'Feb', 'Már', 'Ápr', 'Máj', 'Jún', 'Júl', 'Aug', 'Szep', 'Okt', 'Nov', 'Dec'], dayNames: ['Vasárnap', 'Hétfö', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'], dayNamesShort: ['Vas', 'Hét', 'Ked', 'Sze', 'Csü', 'Pén', 'Szo'], dayNamesMin: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'], weekHeader: 'Hé', dateFormat: 'yy-mm-dd', firstDay: 1, isRTL: false, showMonthAfterYear: true, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['hu']); }); assets/js/i18n/jquery.ui.datepicker-sv.js000066600000001646151373621660014317 0ustar00/* Swedish initialisation for the jQuery UI date picker plugin. */ /* Written by Anders Ekdahl ( anders@nomadiz.se). */ jQuery(function($){ $.datepicker.regional['sv'] = { closeText: 'Stäng', prevText: '«Förra', nextText: 'Nästa»', currentText: 'Idag', monthNames: ['Januari','Februari','Mars','April','Maj','Juni', 'Juli','Augusti','September','Oktober','November','December'], monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', 'Jul','Aug','Sep','Okt','Nov','Dec'], dayNamesShort: ['Sön','Mån','Tis','Ons','Tor','Fre','Lör'], dayNames: ['Söndag','Måndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'], dayNamesMin: ['Sö','Må','Ti','On','To','Fr','Lö'], weekHeader: 'Ve', dateFormat: 'yy-mm-dd', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['sv']); }); assets/js/i18n/jquery.ui.datepicker-fa.js000066600000002000151373621660014236 0ustar00/* Persian (Farsi) Translation for the jQuery UI date picker plugin. */ /* Javad Mowlanezhad -- jmowla@gmail.com */ /* Jalali calendar should supported soon! (Its implemented but I have to test it) */ jQuery(function($) { $.datepicker.regional['fa'] = { closeText: 'بستن', prevText: '<قبلي', nextText: 'بعدي>', currentText: 'امروز', monthNames: ['فروردين','ارديبهشت','خرداد','تير','مرداد','شهريور', 'مهر','آبان','آذر','دي','بهمن','اسفند'], monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'], dayNames: ['يکشنبه','دوشنبه','سه‌شنبه','چهارشنبه','پنجشنبه','جمعه','شنبه'], dayNamesShort: ['ي','د','س','چ','پ','ج', 'ش'], dayNamesMin: ['ي','د','س','چ','پ','ج', 'ش'], weekHeader: 'هف', dateFormat: 'yy/mm/dd', firstDay: 6, isRTL: true, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['fa']); });assets/js/i18n/jquery.ui.datepicker-en-GB.js000066600000001552151373621660014553 0ustar00/* English/UK initialisation for the jQuery UI date picker plugin. */ /* Written by Stuart. */ jQuery(function($){ $.datepicker.regional['en-GB'] = { closeText: 'Done', prevText: 'Prev', nextText: 'Next', currentText: 'Today', monthNames: ['January','February','March','April','May','June', 'July','August','September','October','November','December'], monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], weekHeader: 'Wk', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['en-GB']); }); assets/js/i18n/jquery.ui.datepicker-ta.js000066600000002730151373621660014266 0ustar00/* Tamil (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by S A Sureshkumar (saskumar@live.com). */ jQuery(function($){ $.datepicker.regional['ta'] = { closeText: 'மூடு', prevText: 'முன்னையது', nextText: 'அடுத்தது', currentText: 'இன்று', monthNames: ['தை','மாசி','பங்குனி','சித்திரை','வைகாசி','ஆனி', 'ஆடி','ஆவணி','புரட்டாசி','ஐப்பசி','கார்த்திகை','மார்கழி'], monthNamesShort: ['தை','மாசி','பங்','சித்','வைகா','ஆனி', 'ஆடி','ஆவ','புர','ஐப்','கார்','மார்'], dayNames: ['ஞாயிற்றுக்கிழமை','திங்கட்கிழமை','செவ்வாய்க்கிழமை','புதன்கிழமை','வியாழக்கிழமை','வெள்ளிக்கிழமை','சனிக்கிழமை'], dayNamesShort: ['ஞாயிறு','திங்கள்','செவ்வாய்','புதன்','வியாழன்','வெள்ளி','சனி'], dayNamesMin: ['ஞா','தி','செ','பு','வி','வெ','ச'], weekHeader: 'Не', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['ta']); }); assets/js/i18n/jquery.ui.datepicker-fr.js000066600000002002151373621660014261 0ustar00/* French initialisation for the jQuery UI date picker plugin. */ /* Written by Keith Wood (kbwood{at}iinet.com.au), Stéphane Nahmani (sholby@sholby.net), Stéphane Raimbault */ jQuery(function($){ $.datepicker.regional['fr'] = { closeText: 'Fermer', prevText: 'Précédent', nextText: 'Suivant', currentText: 'Aujourd\'hui', monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin', 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'], monthNamesShort: ['Janv.','Févr.','Mars','Avril','Mai','Juin', 'Juil.','Août','Sept.','Oct.','Nov.','Déc.'], dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'], dayNamesShort: ['Dim.','Lun.','Mar.','Mer.','Jeu.','Ven.','Sam.'], dayNamesMin: ['D','L','M','M','J','V','S'], weekHeader: 'Sem.', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['fr']); }); assets/js/i18n/jquery.ui.datepicker-kz.js000066600000002135151373621660014305 0ustar00/* Kazakh (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Dmitriy Karasyov (dmitriy.karasyov@gmail.com). */ jQuery(function($){ $.datepicker.regional['kz'] = { closeText: 'Жабу', prevText: '<Алдыңғы', nextText: 'Келесі>', currentText: 'Бүгін', monthNames: ['Қаңтар','Ақпан','Наурыз','Сәуір','Мамыр','Маусым', 'Шілде','Тамыз','Қыркүйек','Қазан','Қараша','Желтоқсан'], monthNamesShort: ['Қаң','Ақп','Нау','Сәу','Мам','Мау', 'Шіл','Там','Қыр','Қаз','Қар','Жел'], dayNames: ['Жексенбі','Дүйсенбі','Сейсенбі','Сәрсенбі','Бейсенбі','Жұма','Сенбі'], dayNamesShort: ['жкс','дсн','ссн','срс','бсн','жма','снб'], dayNamesMin: ['Жк','Дс','Сс','Ср','Бс','Жм','Сн'], weekHeader: 'Не', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['kz']); }); assets/js/i18n/jquery.ui.datepicker-ar.js000066600000002534151373621660014266 0ustar00/* Arabic Translation for jQuery UI date picker plugin. */ /* Khaled Alhourani -- me@khaledalhourani.com */ /* NOTE: monthNames are the original months names and they are the Arabic names, not the new months name فبراير - يناير and there isn't any Arabic roots for these months */ jQuery(function($){ $.datepicker.regional['ar'] = { closeText: 'إغلاق', prevText: '<السابق', nextText: 'التالي>', currentText: 'اليوم', monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'مايو', 'حزيران', 'تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'], monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'], dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], dayNamesMin: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], weekHeader: 'أسبوع', dateFormat: 'dd/mm/yy', firstDay: 6, isRTL: true, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['ar']); });assets/js/i18n/jquery.ui.datepicker-el.js000066600000002256151373621660014265 0ustar00/* Greek (el) initialisation for the jQuery UI date picker plugin. */ /* Written by Alex Cicovic (http://www.alexcicovic.com) */ jQuery(function($){ $.datepicker.regional['el'] = { closeText: 'Κλείσιμο', prevText: 'Προηγούμενος', nextText: 'Επόμενος', currentText: 'Τρέχων Μήνας', monthNames: ['Ιανουάριος','Φεβρουάριος','Μάρτιος','Απρίλιος','Μάιος','Ιούνιος', 'Ιούλιος','Αύγουστος','Σεπτέμβριος','Οκτώβριος','Νοέμβριος','Δεκέμβριος'], monthNamesShort: ['Ιαν','Φεβ','Μαρ','Απρ','Μαι','Ιουν', 'Ιουλ','Αυγ','Σεπ','Οκτ','Νοε','Δεκ'], dayNames: ['Κυριακή','Δευτέρα','Τρίτη','Τετάρτη','Πέμπτη','Παρασκευή','Σάββατο'], dayNamesShort: ['Κυρ','Δευ','Τρι','Τετ','Πεμ','Παρ','Σαβ'], dayNamesMin: ['Κυ','Δε','Τρ','Τε','Πε','Πα','Σα'], weekHeader: 'Εβδ', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['el']); });assets/js/i18n/jquery.ui.datepicker-hr.js000066600000001544151373621660014275 0ustar00/* Croatian i18n for the jQuery UI date picker plugin. */ /* Written by Vjekoslav Nesek. */ jQuery(function($){ $.datepicker.regional['hr'] = { closeText: 'Zatvori', prevText: '<', nextText: '>', currentText: 'Danas', monthNames: ['Siječanj','Veljača','Ožujak','Travanj','Svibanj','Lipanj', 'Srpanj','Kolovoz','Rujan','Listopad','Studeni','Prosinac'], monthNamesShort: ['Sij','Velj','Ožu','Tra','Svi','Lip', 'Srp','Kol','Ruj','Lis','Stu','Pro'], dayNames: ['Nedjelja','Ponedjeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'], dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'], dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], weekHeader: 'Tje', dateFormat: 'dd.mm.yy.', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['hr']); });assets/js/i18n/jquery.ui.datepicker-he.js000066600000001673151373621660014263 0ustar00/* Hebrew initialisation for the UI Datepicker extension. */ /* Written by Amir Hardon (ahardon at gmail dot com). */ jQuery(function($){ $.datepicker.regional['he'] = { closeText: 'סגור', prevText: '<הקודם', nextText: 'הבא>', currentText: 'היום', monthNames: ['ינואר','פברואר','מרץ','אפריל','מאי','יוני', 'יולי','אוגוסט','ספטמבר','אוקטובר','נובמבר','דצמבר'], monthNamesShort: ['1','2','3','4','5','6', '7','8','9','10','11','12'], dayNames: ['ראשון','שני','שלישי','רביעי','חמישי','שישי','שבת'], dayNamesShort: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'], dayNamesMin: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'], weekHeader: 'Wk', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: true, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['he']); }); assets/js/i18n/jquery.ui.datepicker-sr.js000066600000002015151373621660014302 0ustar00/* Serbian i18n for the jQuery UI date picker plugin. */ /* Written by Dejan Dimić. */ jQuery(function($){ $.datepicker.regional['sr'] = { closeText: 'Затвори', prevText: '<', nextText: '>', currentText: 'Данас', monthNames: ['Јануар','Фебруар','Март','Април','Мај','Јун', 'Јул','Август','Септембар','Октобар','Новембар','Децембар'], monthNamesShort: ['Јан','Феб','Мар','Апр','Мај','Јун', 'Јул','Авг','Сеп','Окт','Нов','Дец'], dayNames: ['Недеља','Понедељак','Уторак','Среда','Четвртак','Петак','Субота'], dayNamesShort: ['Нед','Пон','Уто','Сре','Чет','Пет','Суб'], dayNamesMin: ['Не','По','Ут','Ср','Че','Пе','Су'], weekHeader: 'Сед', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['sr']); }); assets/js/i18n/jquery.ui.datepicker-tr.js000066600000001562151373621660014311 0ustar00/* Turkish initialisation for the jQuery UI date picker plugin. */ /* Written by Izzet Emre Erkan (kara@karalamalar.net). */ jQuery(function($){ $.datepicker.regional['tr'] = { closeText: 'kapat', prevText: '<geri', nextText: 'ileri>', currentText: 'bugün', monthNames: ['Ocak','Şubat','Mart','Nisan','Mayıs','Haziran', 'Temmuz','Ağustos','Eylül','Ekim','Kasım','Aralık'], monthNamesShort: ['Oca','Şub','Mar','Nis','May','Haz', 'Tem','Ağu','Eyl','Eki','Kas','Ara'], dayNames: ['Pazar','Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi'], dayNamesShort: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'], dayNamesMin: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'], weekHeader: 'Hf', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['tr']); });assets/js/i18n/jquery.ui.datepicker-pl.js000066600000001625151373621660014277 0ustar00/* Polish initialisation for the jQuery UI date picker plugin. */ /* Written by Jacek Wysocki (jacek.wysocki@gmail.com). */ jQuery(function($){ $.datepicker.regional['pl'] = { closeText: 'Zamknij', prevText: '<Poprzedni', nextText: 'Następny>', currentText: 'Dziś', monthNames: ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec', 'Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'], monthNamesShort: ['Sty','Lu','Mar','Kw','Maj','Cze', 'Lip','Sie','Wrz','Pa','Lis','Gru'], dayNames: ['Niedziela','Poniedziałek','Wtorek','Środa','Czwartek','Piątek','Sobota'], dayNamesShort: ['Nie','Pn','Wt','Śr','Czw','Pt','So'], dayNamesMin: ['N','Pn','Wt','Śr','Cz','Pt','So'], weekHeader: 'Tydz', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['pl']); }); assets/js/i18n/jquery.ui.datepicker-it.js000066600000001637151373621660014303 0ustar00/* Italian initialisation for the jQuery UI date picker plugin. */ /* Written by Antonello Pasella (antonello.pasella@gmail.com). */ jQuery(function($){ $.datepicker.regional['it'] = { closeText: 'Chiudi', prevText: '<Prec', nextText: 'Succ>', currentText: 'Oggi', monthNames: ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno', 'Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'], monthNamesShort: ['Gen','Feb','Mar','Apr','Mag','Giu', 'Lug','Ago','Set','Ott','Nov','Dic'], dayNames: ['Domenica','Lunedì','Martedì','Mercoledì','Giovedì','Venerdì','Sabato'], dayNamesShort: ['Dom','Lun','Mar','Mer','Gio','Ven','Sab'], dayNamesMin: ['Do','Lu','Ma','Me','Gi','Ve','Sa'], weekHeader: 'Sm', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['it']); }); assets/js/i18n/jquery.ui.datepicker-ru.js000066600000002134151373621660014306 0ustar00/* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */ /* Written by Andrew Stromnov (stromnov@gmail.com). */ jQuery(function($){ $.datepicker.regional['ru'] = { closeText: 'Закрыть', prevText: '<Пред', nextText: 'След>', currentText: 'Сегодня', monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь', 'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'], monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн', 'Июл','Авг','Сен','Окт','Ноя','Дек'], dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'], dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'], dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'], weekHeader: 'Нед', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['ru']); });assets/js/i18n/jquery.ui.datepicker-ko.js000066600000001714151373621660014274 0ustar00/* Korean initialisation for the jQuery calendar extension. */ /* Written by DaeKwon Kang (ncrash.dk@gmail.com). */ jQuery(function($){ $.datepicker.regional['ko'] = { closeText: '닫기', prevText: '이전달', nextText: '다음달', currentText: '오늘', monthNames: ['1월(JAN)','2월(FEB)','3월(MAR)','4월(APR)','5월(MAY)','6월(JUN)', '7월(JUL)','8월(AUG)','9월(SEP)','10월(OCT)','11월(NOV)','12월(DEC)'], monthNamesShort: ['1월(JAN)','2월(FEB)','3월(MAR)','4월(APR)','5월(MAY)','6월(JUN)', '7월(JUL)','8월(AUG)','9월(SEP)','10월(OCT)','11월(NOV)','12월(DEC)'], dayNames: ['일','월','화','수','목','금','토'], dayNamesShort: ['일','월','화','수','목','금','토'], dayNamesMin: ['일','월','화','수','목','금','토'], weekHeader: 'Wk', dateFormat: 'yy-mm-dd', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: '년'}; $.datepicker.setDefaults($.datepicker.regional['ko']); });assets/js/i18n/jquery.ui.datepicker-fr-CH.js000066600000001604151373621660014560 0ustar00/* Swiss-French initialisation for the jQuery UI date picker plugin. */ /* Written Martin Voelkle (martin.voelkle@e-tc.ch). */ jQuery(function($){ $.datepicker.regional['fr-CH'] = { closeText: 'Fermer', prevText: '<Préc', nextText: 'Suiv>', currentText: 'Courant', monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin', 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'], monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun', 'Jul','Aoû','Sep','Oct','Nov','Déc'], dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'], dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'], dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'], weekHeader: 'Sm', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['fr-CH']); });assets/js/i18n/jquery.ui.datepicker-vi.js000066600000002106151373621660014275 0ustar00/* Vietnamese initialisation for the jQuery UI date picker plugin. */ /* Translated by Le Thanh Huy (lthanhhuy@cit.ctu.edu.vn). */ jQuery(function($){ $.datepicker.regional['vi'] = { closeText: 'Đóng', prevText: '<Trước', nextText: 'Tiếp>', currentText: 'Hôm nay', monthNames: ['Tháng Một', 'Tháng Hai', 'Tháng Ba', 'Tháng Tư', 'Tháng Năm', 'Tháng Sáu', 'Tháng Bảy', 'Tháng Tám', 'Tháng Chín', 'Tháng Mười', 'Tháng Mười Một', 'Tháng Mười Hai'], monthNamesShort: ['Tháng 1', 'Tháng 2', 'Tháng 3', 'Tháng 4', 'Tháng 5', 'Tháng 6', 'Tháng 7', 'Tháng 8', 'Tháng 9', 'Tháng 10', 'Tháng 11', 'Tháng 12'], dayNames: ['Chủ Nhật', 'Thứ Hai', 'Thứ Ba', 'Thứ Tư', 'Thứ Năm', 'Thứ Sáu', 'Thứ Bảy'], dayNamesShort: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'], dayNamesMin: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'], weekHeader: 'Tu', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['vi']); }); assets/js/i18n/jquery.ui.datepicker-sr-SR.js000066600000001520151373621660014624 0ustar00/* Serbian i18n for the jQuery UI date picker plugin. */ /* Written by Dejan Dimić. */ jQuery(function($){ $.datepicker.regional['sr-SR'] = { closeText: 'Zatvori', prevText: '<', nextText: '>', currentText: 'Danas', monthNames: ['Januar','Februar','Mart','April','Maj','Jun', 'Jul','Avgust','Septembar','Oktobar','Novembar','Decembar'], monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', 'Jul','Avg','Sep','Okt','Nov','Dec'], dayNames: ['Nedelja','Ponedeljak','Utorak','Sreda','Četvrtak','Petak','Subota'], dayNamesShort: ['Ned','Pon','Uto','Sre','Čet','Pet','Sub'], dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], weekHeader: 'Sed', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['sr-SR']); }); assets/js/i18n/index.html000066600000000000151373621660011242 0ustar00assets/js/i18n/jquery.ui.datepicker-eo.js000066600000001571151373621660014267 0ustar00/* Esperanto initialisation for the jQuery UI date picker plugin. */ /* Written by Olivier M. (olivierweb@ifrance.com). */ jQuery(function($){ $.datepicker.regional['eo'] = { closeText: 'Fermi', prevText: '<Anta', nextText: 'Sekv>', currentText: 'Nuna', monthNames: ['Januaro','Februaro','Marto','Aprilo','Majo','Junio', 'Julio','Aŭgusto','Septembro','Oktobro','Novembro','Decembro'], monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', 'Jul','Aŭg','Sep','Okt','Nov','Dec'], dayNames: ['Dimanĉo','Lundo','Mardo','Merkredo','Ĵaŭdo','Vendredo','Sabato'], dayNamesShort: ['Dim','Lun','Mar','Mer','Ĵaŭ','Ven','Sab'], dayNamesMin: ['Di','Lu','Ma','Me','Ĵa','Ve','Sa'], weekHeader: 'Sb', dateFormat: 'dd/mm/yy', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['eo']); }); assets/js/i18n/jquery.ui.datepicker-sq.js000066600000001567151373621660014314 0ustar00/* Albanian initialisation for the jQuery UI date picker plugin. */ /* Written by Flakron Bytyqi (flakron@gmail.com). */ jQuery(function($){ $.datepicker.regional['sq'] = { closeText: 'mbylle', prevText: '<mbrapa', nextText: 'Përpara>', currentText: 'sot', monthNames: ['Janar','Shkurt','Mars','Prill','Maj','Qershor', 'Korrik','Gusht','Shtator','Tetor','Nëntor','Dhjetor'], monthNamesShort: ['Jan','Shk','Mar','Pri','Maj','Qer', 'Kor','Gus','Sht','Tet','Nën','Dhj'], dayNames: ['E Diel','E Hënë','E Martë','E Mërkurë','E Enjte','E Premte','E Shtune'], dayNamesShort: ['Di','Hë','Ma','Më','En','Pr','Sh'], dayNamesMin: ['Di','Hë','Ma','Më','En','Pr','Sh'], weekHeader: 'Ja', dateFormat: 'dd.mm.yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['sq']); }); assets/js/i18n/jquery.ui.datepicker-af.js000066600000001600151373621660014243 0ustar00/* Afrikaans initialisation for the jQuery UI date picker plugin. */ /* Written by Renier Pretorius. */ jQuery(function($){ $.datepicker.regional['af'] = { closeText: 'Selekteer', prevText: 'Vorige', nextText: 'Volgende', currentText: 'Vandag', monthNames: ['Januarie','Februarie','Maart','April','Mei','Junie', 'Julie','Augustus','September','Oktober','November','Desember'], monthNamesShort: ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'], dayNames: ['Sondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrydag', 'Saterdag'], dayNamesShort: ['Son', 'Maa', 'Din', 'Woe', 'Don', 'Vry', 'Sat'], dayNamesMin: ['So','Ma','Di','Wo','Do','Vr','Sa'], weekHeader: 'Wk', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['af']); }); assets/js/i18n/jquery.ui.datepicker-en-AU.js000066600000001601151373621660014563 0ustar00/* English/Australia initialisation for the jQuery UI date picker plugin. */ /* Based on the en-GB initialisation. */ jQuery(function($){ $.datepicker.regional['en-AU'] = { closeText: 'Done', prevText: 'Prev', nextText: 'Next', currentText: 'Today', monthNames: ['January','February','March','April','May','June', 'July','August','September','October','November','December'], monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], weekHeader: 'Wk', dateFormat: 'dd/mm/yy', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: ''}; $.datepicker.setDefaults($.datepicker.regional['en-AU']); }); assets/js/jquery.noconflict.js000066600000000024151373621660012506 0ustar00jQuery.noConflict();assets/js/vmtabs.js000066600000001335151373621660010334 0ustar00function vm2tabs(pages) { pages.addClass("dyn-tabs"); pages.first().show(); var tabNavigation = jQuery('
      ').insertBefore(pages.first()); pages.each(function() { var listElement = jQuery("
    • "); var label = jQuery(this).attr("title") ? jQuery(this).attr("title") : "Kein Label"; listElement.text(label); tabNavigation.append(listElement); }); var items = tabNavigation.find("li"); items.first().addClass("current"); items.click(function() { items.removeClass("current"); jQuery(this).addClass("current"); pages.hide(); pages.eq(jQuery(this).index()).fadeIn(200); }); } jQuery(document).ready(function() { vm2tabs(jQuery("#ui-tabs .tabs")); });assets/js/index.html000066600000000000151373621660010463 0ustar00assets/js/chosen.jquery.min.js000066600000055074151373621660012430 0ustar00(function(){var a;a=(function(){function b(){this.options_index=0;this.parsed=[]}b.prototype.add_node=function(c){if(c.nodeName==="OPTGROUP"){return this.add_group(c)}else{return this.add_option(c)}};b.prototype.add_group=function(i){var h,e,g,d,f,c;h=this.parsed.length;this.parsed.push({array_index:h,group:true,label:i.label,children:0,disabled:i.disabled});f=i.childNodes;c=[];for(g=0,d=f.length;g"+f.html+"
    • "}else{return""}};c.prototype.results_update_field=function(){this.result_clear_highlight();this.result_single_selected=null;return this.results_build()};c.prototype.results_toggle=function(){if(this.results_showing){return this.results_hide()}else{return this.results_show()}};c.prototype.results_search=function(d){if(this.results_showing){return this.winnow_results()}else{return this.results_show()}};c.prototype.keyup_checker=function(d){var f,e;f=(e=d.which)!=null?e:d.keyCode;this.search_field_scale();switch(f){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices>0){this.keydown_backstroke()}else{if(!this.pending_backstroke){this.result_clear_highlight();this.results_search()}}break;case 13:d.preventDefault();if(this.results_showing){this.result_select(d)}break;case 27:if(this.results_showing){this.results_hide()}return true;case 9:case 38:case 40:case 16:case 91:case 17:break;default:this.results_search()}if(this.enable_select_all){return this.select_all_toggle()}};c.prototype.generate_field_id=function(){var d;d=this.generate_random_id();this.form_field.id=d;return d};c.prototype.generate_random_char=function(){var f,e,d;f="0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZ";d=Math.floor(Math.random()*f.length);return e=f.substring(d,d+1)};return c})();a.AbstractChosen=b}).call(this);(function(){var e,f,d,a,b=Object.prototype.hasOwnProperty,c=function(j,h){for(var g in h){if(b.call(h,g)){j[g]=h[g]}}function i(){this.constructor=j}i.prototype=h.prototype;j.prototype=new i;j.__super__=h.prototype;return j};a=this;e=jQuery;e.fn.extend({chosen:function(g){if(e.browser.msie&&(e.browser.version==="6.0"||e.browser.version==="7.0")){return this}return e(this).each(function(h){if(!(e(this)).hasClass("chzn-done")){return new f(this,g)}})}});f=(function(g){c(h,g);function h(){h.__super__.constructor.apply(this,arguments)}h.prototype.setup=function(){this.form_field_jq=e(this.form_field);return this.is_rtl=this.form_field_jq.hasClass("chzn-rtl")};h.prototype.finish_setup=function(){return this.form_field_jq.addClass("chzn-done")};h.prototype.set_up_html=function(){var l,k,j,i;this.container_id=this.form_field.id.length?this.form_field.id.replace(/(:|\.)/g,"_"):this.generate_field_id();this.container_id+="_chzn";this.f_width=this.form_field_jq.outerWidth();this.default_text=this.form_field_jq.data("placeholder")?this.form_field_jq.data("placeholder"):this.default_text_default;l=e("
      ",{id:this.container_id,"class":"chzn-container"+(this.is_rtl?" chzn-rtl":""),style:"width: "+this.f_width+"px;"});if(this.is_multiple){l.html('
        ')}else{l.html(''+this.default_text+'
          ')}this.form_field_jq.hide().after(l);this.container=e("#"+this.container_id);this.container.addClass("chzn-container-"+(this.is_multiple?"multi":"single"));this.dropdown=this.container.find("div.chzn-drop").first();if(this.enable_select_all){this.select_all_setup()}k=this.container.height();j=this.f_width-d(this.dropdown);this.dropdown.css({width:j+"px",top:k+"px"});this.search_field=this.container.find("input").first();this.search_results=this.container.find("ul.chzn-results").first();this.search_field_scale();this.search_no_results=this.container.find("li.no-results").first();if(this.is_multiple){this.search_choices=this.container.find("ul.chzn-choices").first();this.search_container=this.container.find("li.search-field").first()}else{this.search_container=this.container.find("div.chzn-search").first();this.selected_item=this.container.find(".chzn-single").first();i=j-d(this.search_container)-d(this.search_field);this.search_field.css({width:i+"px"})}this.results_build();this.set_tab_index();return this.form_field_jq.trigger("liszt:ready",{chosen:this})};h.prototype.register_observers=function(){var i=this;this.container.mousedown(function(j){return i.container_mousedown(j)});this.container.mouseup(function(j){return i.container_mouseup(j)});this.container.mouseenter(function(j){return i.mouse_enter(j)});this.container.mouseleave(function(j){return i.mouse_leave(j)});this.search_results.mouseup(function(j){return i.search_results_mouseup(j)});this.search_results.mouseover(function(j){return i.search_results_mouseover(j)});this.search_results.mouseout(function(j){return i.search_results_mouseout(j)});this.form_field_jq.bind("liszt:updated",function(j){return i.results_update_field(j)});this.search_field.blur(function(j){return i.input_blur(j)});this.search_field.keyup(function(j){return i.keyup_checker(j)});this.search_field.keydown(function(j){return i.keydown_checker(j)});if(this.is_multiple){this.search_choices.click(function(j){return i.choices_click(j)});return this.search_field.focus(function(j){return i.input_focus(j)})}else{return this.container.click(function(j){return j.preventDefault()})}};h.prototype.search_field_disabled=function(){this.is_disabled=this.form_field_jq[0].disabled;if(this.is_disabled){this.container.addClass("chzn-disabled");this.search_field[0].disabled=true;if(!this.is_multiple){this.selected_item.unbind("focus",this.activate_action)}return this.close_field()}else{this.container.removeClass("chzn-disabled");this.search_field[0].disabled=false;if(!this.is_multiple){return this.selected_item.bind("focus",this.activate_action)}}};h.prototype.container_mousedown=function(i){var j;if(!this.is_disabled){j=i!=null?(e(i.target)).hasClass("search-choice-close"):false;if(i&&i.type==="mousedown"){i.stopPropagation()}if(!this.pending_destroy_click&&!j){if(!this.active_field){if(this.is_multiple){this.search_field.val("")}e(document).click(this.click_test_action);this.results_show()}else{if(!this.is_multiple&&i&&((e(i.target)[0]===this.selected_item[0])||e(i.target).parents("a.chzn-single").length)){i.preventDefault();this.results_toggle()}}return this.activate_field()}else{return this.pending_destroy_click=false}}};h.prototype.container_mouseup=function(i){if(i.target.nodeName==="ABBR"){return this.results_reset(i)}};h.prototype.blur_test=function(i){if(!this.active_field&&this.container.hasClass("chzn-container-active")){return this.close_field()}};h.prototype.close_field=function(){e(document).unbind("click",this.click_test_action);if(!this.is_multiple){this.selected_item.attr("tabindex",this.search_field.attr("tabindex"));this.search_field.attr("tabindex",-1)}this.active_field=false;this.results_hide();this.container.removeClass("chzn-container-active");this.winnow_results_clear();this.clear_backstroke();this.show_search_field_default();return this.search_field_scale()};h.prototype.activate_field=function(){if(!this.is_multiple&&!this.active_field){this.search_field.attr("tabindex",this.selected_item.attr("tabindex"));this.selected_item.attr("tabindex",-1)}this.container.addClass("chzn-container-active");this.active_field=true;this.search_field.val(this.search_field.val());return this.search_field.focus()};h.prototype.test_active_click=function(i){if(e(i.target).parents("#"+this.container_id).length){return this.active_field=true}else{return this.close_field()}};h.prototype.results_build=function(){var j,m,l,i,k;this.parsing=true;this.results_data=a.SelectParser.select_to_array(this.form_field);if(this.is_multiple&&this.choices>0){this.search_choices.find("li.search-choice").remove();this.choices=0}else{if(!this.is_multiple){this.selected_item.find("span").text(this.default_text);if(this.form_field.options.length<=this.disable_search_threshold){this.container.addClass("chzn-container-single-nosearch")}else{this.container.removeClass("chzn-container-single-nosearch")}}}j="";k=this.results_data;for(l=0,i=k.length;l'+e("
          ").text(i.label).html()+""}else{return""}};h.prototype.result_do_highlight=function(j){var n,m,k,l,i;if(j.length){this.result_clear_highlight();this.result_highlight=j;this.result_highlight.addClass("highlighted");k=parseInt(this.search_results.css("maxHeight"),10);i=this.search_results.scrollTop();l=k+i;m=this.result_highlight.position().top+this.search_results.scrollTop();n=m+this.result_highlight.outerHeight();if(n>=l){return this.search_results.scrollTop((n-k)>0?n-k:0)}else{if(m",{"class":"chzn-select-all"}).html(this.Select_all_text_default);this.dropdown.append(i);this.select_all_link=this.dropdown.find(".chzn-select-all").first();return this.select_all_link.click(function(k){return j.select_all_options(k)})};h.prototype.select_all_options=function(j){var l,k,m,i;j.preventDefault();k=this.form_field_jq.find("option");for(m=0,i=k.length;m'+k.html+'');j=e("#"+i).find("a").first();return j.click(function(m){return l.choice_destroy_link_click(m)})};h.prototype.choice_destroy_link_click=function(i){i.preventDefault();if(!this.is_disabled){this.pending_destroy_click=true;return this.choice_destroy(e(i.target))}else{return i.stopPropagation}};h.prototype.choice_destroy=function(i){this.choices-=1;this.show_search_field_default();if(this.is_multiple&&this.choices>0&&this.search_field.val().length<1){this.results_hide()}this.result_deselect(i.attr("rel"));return i.parents("li").first().remove()};h.prototype.results_reset=function(i){this.form_field.options[0].selected=true;this.selected_item.find("span").text(this.default_text);this.show_search_field_default();e(i.target).remove();this.form_field_jq.trigger("change");if(this.active_field){return this.results_hide()}};h.prototype.result_select=function(j){var m,l,k,i;if(this.result_highlight){m=this.result_highlight;l=m.attr("id");this.result_clear_highlight();if(this.is_multiple){this.result_deactivate(m)}else{this.search_results.find(".result-selected").removeClass("result-selected");this.result_single_selected=m}m.addClass("result-selected");i=l.substr(l.lastIndexOf("_")+1);k=this.results_data[i];k.selected=true;this.form_field.options[k.options_index].selected=true;if(this.is_multiple){this.choice_build(k)}else{this.selected_item.find("span").first().text(k.text);if(this.allow_single_deselect){this.single_deselect_control_build()}}if(!(j.metaKey&&this.is_multiple)){this.results_hide()}this.search_field.val("");this.form_field_jq.trigger("change");return this.search_field_scale()}};h.prototype.result_activate=function(i){return i.addClass("active-result")};h.prototype.result_deactivate=function(i){return i.removeClass("active-result")};h.prototype.result_deselect=function(k){var i,j;j=this.results_data[k];j.selected=false;this.form_field.options[j.options_index].selected=false;i=e("#"+this.container_id+"_o_"+k);i.removeClass("result-selected").addClass("active-result").show();this.result_clear_highlight();this.winnow_results();this.form_field_jq.trigger("change");return this.search_field_scale()};h.prototype.single_deselect_control_build=function(){if(this.allow_single_deselect&&this.selected_item.find("abbr").length<1){return this.selected_item.find("span").first().after('')}};h.prototype.winnow_results=function(){var x,q,k,n,u,y,s,p,w,r,v,j,m,l,t,i,o;this.no_results_clear();p=0;w=this.search_field.val()===this.default_text?"":e("
          ").text(e.trim(this.search_field.val())).html();u=new RegExp("^"+w.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i");j=new RegExp(w.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i");o=this.results_data;for(m=0,t=o.length;m=0||q.html.indexOf("[")===0){n=q.html.replace(/\[|\]/g,"").split(" ");if(n.length){for(l=0,i=n.length;l"+q.html.substr(r+w.length);v=v.substr(0,r)+""+v.substr(r)}else{v=q.html}y.html(v);this.result_activate(y);if(q.group_array_index!=null){e("#"+this.results_data[q.group_array_index].dom_id).css("display","list-item")}}else{if(this.result_highlight&&s===this.result_highlight.attr("id")){this.result_clear_highlight()}this.result_deactivate(y)}}}}}if(p<1&&w.length){return this.no_results(w)}else{return this.winnow_results_set_highlight()}};h.prototype.winnow_results_clear=function(){var i,l,m,k,j;this.search_field.val("");l=this.search_results.find("li");j=[];for(m=0,k=l.length;m'+this.results_none_found+' ""');j.find("span").first().html(i);return this.search_results.append(j)};h.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove()};h.prototype.keydown_arrow=function(){var j,i;if(!this.result_highlight){j=this.search_results.find("li.active-result").first();if(j){this.result_do_highlight(e(j))}}else{if(this.results_showing){i=this.result_highlight.nextAll("li.active-result").first();if(i){this.result_do_highlight(i)}}}if(!this.results_showing){return this.results_show()}};h.prototype.keyup_arrow=function(){var i;if(!this.results_showing&&!this.is_multiple){return this.results_show()}else{if(this.result_highlight){i=this.result_highlight.prevAll("li.active-result");if(i.length){return this.result_do_highlight(i.first())}else{if(this.choices>0){this.results_hide()}return this.result_clear_highlight()}}}};h.prototype.keydown_backstroke=function(){if(this.pending_backstroke){this.choice_destroy(this.pending_backstroke.find("a").first());return this.clear_backstroke()}else{this.pending_backstroke=this.search_container.siblings("li.search-choice").last();return this.pending_backstroke.addClass("search-choice-focus")}};h.prototype.clear_backstroke=function(){if(this.pending_backstroke){this.pending_backstroke.removeClass("search-choice-focus")}return this.pending_backstroke=null};h.prototype.keydown_checker=function(i){var k,j;k=(j=i.which)!=null?j:i.keyCode;this.search_field_scale();if(k!==8&&this.pending_backstroke){this.clear_backstroke()}switch(k){case 8:this.backstroke_length=this.search_field.val().length;break;case 9:if(this.results_showing&&!this.is_multiple){this.result_select(i)}this.mouse_on_container=false;break;case 13:i.preventDefault();break;case 38:i.preventDefault();this.keyup_arrow();break;case 40:this.keydown_arrow();break}};h.prototype.search_field_scale=function(){var q,i,l,j,o,p,n,k,m;if(this.is_multiple){l=0;n=0;o="position:absolute; left: -1000px; top: -1000px; display:none;";p=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"];for(k=0,m=p.length;k",{style:o});i.text(this.search_field.val());e("body").append(i);n=i.width()+25;i.remove();if(n>this.f_width-10){n=this.f_width-10}this.search_field.css({width:n+"px"});q=this.container.height();return this.dropdown.css({top:q+"px"})}};h.prototype.generate_random_id=function(){var i;i="sel"+this.generate_random_char()+this.generate_random_char()+this.generate_random_char();while(e("#"+i).length>0){i+=this.generate_random_char()}return i};return h})(AbstractChosen);d=function(g){var h;return h=g.outerWidth()-g.width()};a.get_side_border_padding=d}).call(this);assets/js/vmprices.js000066600000013472151373621660010675 0ustar00if(typeof Virtuemart === "undefined") { var Virtuemart = { setproducttype : function (form, id) { form.view = null; var $ = jQuery, datas = form.serialize(); var prices = form.parent(".productdetails").find(".product-price"); if (0 == prices.length) { prices = $("#productPrice" + id); } datas = datas.replace("&view=cart", ""); prices.fadeTo("fast", 0.75); $.getJSON(window.vmSiteurl + 'index.php?option=com_virtuemart&nosef=1&view=productdetails&task=recalculate&virtuemart_product_id='+id+'&format=json' + window.vmLang, encodeURIComponent(datas), function (datas, textStatus) { prices.fadeTo("fast", 1); // refresh price for (var key in datas) { var value = datas[key]; if (value!=0) prices.find("span.Price"+key).show().html(value); else prices.find(".Price"+key).html(0).hide(); } }); return false; // prevent reload }, productUpdate : function(mod) { var $ = jQuery ; $.ajaxSetup({ cache: false }) $.getJSON(window.vmSiteurl+"index.php?option=com_virtuemart&nosef=1&view=cart&task=viewJS&format=json"+window.vmLang, function(datas, textStatus) { if (datas.totalProduct >0) { mod.find(".vm_cart_products").html(""); $.each(datas.products, function(key, val) { $("#hiddencontainer .container").clone().appendTo(".vmCartModule .vm_cart_products"); $.each(val, function(key, val) { if ($("#hiddencontainer .container ."+key)) mod.find(".vm_cart_products ."+key+":last").html(val) ; }); }); mod.find(".total").html(datas.billTotal); mod.find(".show_cart").html(datas.cart_show); } mod.find(".total_products").html(datas.totalProductTxt); } ); }, sendtocart : function (form){ if (Virtuemart.addtocart_popup ==1) { Virtuemart.cartEffect(form) ; } else { form.append(''); form.submit(); } }, cartEffect : function(form) { var $ = jQuery ; $.ajaxSetup({ cache: false }); var datas = form.serialize(); if(usefancy){ $.fancybox.showActivity(); } $.getJSON(vmSiteurl+'index.php?option=com_virtuemart&nosef=1&view=cart&task=addJS&format=json'+vmLang,datas, function(datas, textStatus) { if(datas.stat ==1){ var txt = datas.msg; } else if(datas.stat ==2){ var txt = datas.msg +"

          "+form.find(".pname").val()+"

          "; } else { var txt = "

          "+vmCartError+"

          "+datas.msg; } if(usefancy){ $.fancybox({ "titlePosition" : "inside", "transitionIn" : "fade", "transitionOut" : "fade", "changeFade" : "fast", "type" : "html", "autoCenter" : true, "closeBtn" : false, "closeClick" : false, "content" : txt } ); } else { $.facebox.settings.closeImage = closeImage; $.facebox.settings.loadingImage = loadingImage; //$.facebox.settings.faceboxHtml = faceboxHtml; $.facebox({ text: txt }, 'my-groovy-style'); } if ($(".vmCartModule")[0]) { Virtuemart.productUpdate($(".vmCartModule")); } }); $.ajaxSetup({ cache: true }); }, product : function(carts) { carts.each(function(){ var cart = jQuery(this), step=cart.find('input[name="quantity"]'), addtocart = cart.find('input.addtocart-button'), plus = cart.find('.quantity-plus'), minus = cart.find('.quantity-minus'), select = cart.find('select:not(.no-vm-bind)'), radio = cart.find('input:radio:not(.no-vm-bind)'), virtuemart_product_id = cart.find('input[name="virtuemart_product_id[]"]').val(), quantity = cart.find('.quantity-input'); var Ste = parseInt(step.val()); //Fallback for layouts lower than 2.0.18b if(isNaN(Ste)){ Ste = 1; } addtocart.click(function(e) { Virtuemart.sendtocart(cart); return false; }); plus.click(function() { var Qtt = parseInt(quantity.val()); if (!isNaN(Qtt)) { quantity.val(Qtt + Ste); Virtuemart.setproducttype(cart,virtuemart_product_id); } }); minus.click(function() { var Qtt = parseInt(quantity.val()); if (!isNaN(Qtt) && Qtt>Ste) { quantity.val(Qtt - Ste); } else quantity.val(Ste); Virtuemart.setproducttype(cart,virtuemart_product_id); }); select.change(function() { Virtuemart.setproducttype(cart,virtuemart_product_id); }); radio.change(function() { Virtuemart.setproducttype(cart,virtuemart_product_id); }); quantity.keyup(function() { Virtuemart.setproducttype(cart,virtuemart_product_id); }); }); } }; jQuery.noConflict(); jQuery(document).ready(function($) { Virtuemart.product($("form.product")); $("form.js-recalculate").each(function(){ if ($(this).find(".product-fields").length && !$(this).find(".no-vm-bind").length) { var id= $(this).find('input[name="virtuemart_product_id[]"]').val(); Virtuemart.setproducttype($(this),id); } }); }); } assets/js/jquery.min.js000066600000262316151373621660011151 0ustar00/*! * jQuery JavaScript Library v1.6.1 * http://jquery.com/ * * Copyright 2011, John Resig * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * Includes Sizzle.js * http://sizzlejs.com/ * Copyright 2011, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * * Date: Thu May 12 15:04:36 2011 -0400 */ (function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!cj[a]){var b=f("<"+a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),c.body.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write("");b=cl.createElement(a),cl.body.appendChild(b),d=f.css(b,"display"),c.body.removeChild(ck)}cj[a]=d}return cj[a]}function cu(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function ct(){cq=b}function cs(){setTimeout(ct,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g=0===c})}function W(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function O(a,b){return(a&&a!=="*"?a+".":"")+b.replace(A,"`").replace(B,"&")}function N(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;ic)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function L(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function F(){return!0}function E(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function H(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(H,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=d.userAgent,x,y,z,A=Object.prototype.toString,B=Object.prototype.hasOwnProperty,C=Array.prototype.push,D=Array.prototype.slice,E=String.prototype.trim,F=Array.prototype.indexOf,G={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.1",length:0,size:function(){return this.length},toArray:function(){return D.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?C.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),y.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(D.apply(this,arguments),"slice",D.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:C,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;y.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!y){y=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",z,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",z),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&H()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):G[A.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!B.call(a,"constructor")&&!B.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||B.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c
          a",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};f=c.createElement("select"),g=f.appendChild(c.createElement("option")),h=a.getElementsByTagName("input")[0],j={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},h.checked=!0,j.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,j.optDisabled=!g.disabled;try{delete a.test}catch(s){j.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function b(){j.noCloneEvent=!1,a.detachEvent("onclick",b)}),a.cloneNode(!0).fireEvent("onclick")),h=c.createElement("input"),h.value="t",h.setAttribute("type","radio"),j.radioValue=h.value==="t",h.setAttribute("checked","checked"),a.appendChild(h),k=c.createDocumentFragment(),k.appendChild(a.firstChild),j.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",l=c.createElement("body"),m={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"};for(q in m)l.style[q]=m[q];l.appendChild(a),b.insertBefore(l,b.firstChild),j.appendChecked=h.checked,j.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,j.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
          ",j.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
          t
          ",n=a.getElementsByTagName("td"),r=n[0].offsetHeight===0,n[0].style.display="",n[1].style.display="none",j.reliableHiddenOffsets=r&&n[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(i=c.createElement("div"),i.style.width="0",i.style.marginRight="0",a.appendChild(i),j.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(i,null)||{marginRight:0}).marginRight,10)||0)===0),l.innerHTML="",b.removeChild(l);if(a.attachEvent)for(q in{submit:1,change:1,focusin:1})p="on"+q,r=p in a,r||(a.setAttribute(p,"return;"),r=typeof a[p]=="function"),j[q+"Bubbles"]=r;return j}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;return(e.value||"").replace(p,"")}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);c=j&&f.attrFix[c]||c,i=f.attrHooks[c],i||(!t.test(c)||typeof d!="boolean"&&d!==b&&d.toLowerCase()!==c.toLowerCase()?v&&(f.nodeName(a,"form")||u.test(c))&&(i=v):i=w);if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j)return i.get(a,c);h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);c=i&&f.propFix[c]||c,h=f.propHooks[c];return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return a[f.propFix[c]||c]?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=b),a.setAttribute(c,c.toLowerCase()));return c}},f.attrHooks.value={get:function(a,b){if(v&&f.nodeName(a,"button"))return v.get(a,b);return a.value},set:function(a,b,c){if(v&&f.nodeName(a,"button"))return v.set(a,b,c);a.value=b}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var x=Object.prototype.hasOwnProperty,y=/\.(.*)$/,z=/^(?:textarea|input|select)$/i,A=/\./g,B=/ /g,C=/[^\w\s.|`]/g,D=function(a){return a.replace(C,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=E;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=E);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),D).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem )});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},K=function(c){var d=c.target,e,g;if(!!z.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=J(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:K,beforedeactivate:K,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&K.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&K.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",J(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in I)f.event.add(this,c+".specialChange",I[c]);return z.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return z.test(this.nodeName)}},I=f.event.special.change.filters,I.focus=I.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

          ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
          ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(h=g;h0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=U.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(W(c[0])||W(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=T.call(arguments);P.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!V[a]?f.unique(e):e,(this.length>1||R.test(d))&&Q.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var Y=/ jQuery\d+="(?:\d+|null)"/g,Z=/^\s+/,$=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,_=/<([\w:]+)/,ba=/",""],legend:[1,"
          ","
          "],thead:[1,"","
          "],tr:[2,"","
          "],td:[3,"","
          "],col:[2,"","
          "],area:[1,"",""],_default:[0,"",""]};bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
          ","
          "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Y,""):null;if(typeof a=="string"&&!bc.test(a)&&(f.support.leadingWhitespace||!Z.test(a))&&!bg[(_.exec(a)||["",""])[1].toLowerCase()]){a=a.replace($,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bj(a,d),e=bk(a),g=bk(d);for(h=0;e[h];++h)bj(e[h],g[h])}if(b){bi(a,d);if(c){e=bk(a),g=bk(d);for(h=0;e[h];++h)bi(e[h],g[h])}}return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument|| b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!bb.test(k))k=b.createTextNode(k);else{k=k.replace($,"<$1>");var l=(_.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=ba.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&Z.test(k)&&o.insertBefore(b.createTextNode(Z.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bp.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bo.test(g)?g.replace(bo,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,c){var d,e,g;c=c.replace(br,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bs.test(d)&&bt.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bE=/%20/g,bF=/\[\]$/,bG=/\r?\n/g,bH=/#.*$/,bI=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bJ=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bK=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bL=/^(?:GET|HEAD)$/,bM=/^\/\//,bN=/\?/,bO=/)<[^<]*)*<\/script>/gi,bP=/^(?:select|textarea)/i,bQ=/\s+/,bR=/([?&])_=[^&]*/,bS=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bT=f.fn.load,bU={},bV={},bW,bX;try{bW=e.href}catch(bY){bW=c.createElement("a"),bW.href="",bW=bW.href}bX=bS.exec(bW.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bT)return bT.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
          ").append(c.replace(bO,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bP.test(this.nodeName)||bJ.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bG,"\r\n")}}):{name:b.name,value:c.replace(bG,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bW,isLocal:bK.test(bX[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bZ(bU),ajaxTransport:bZ(bV),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?ca(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=cb(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bI.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bH,"").replace(bM,bX[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bQ),d.crossDomain==null&&(r=bS.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bX[1]&&r[2]==bX[2]&&(r[3]||(r[1]==="http:"?80:443))==(bX[3]||(bX[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bU,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bL.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bN.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bR,"$1_="+x);d.url=y+(y===d.url?(bN.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bV,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join("&").replace(bE,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,co,cp=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cq,cr=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b
          ";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){return this[0]?parseFloat(f.css(this[0],d,"padding")):null},f.fn["outer"+c]=function(a){return this[0]?parseFloat(f.css(this[0],d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);assets/js/fancybox/jquery.fancybox-1.3.4.js000066600000071326151373621660014450 0ustar00/* * FancyBox - jQuery Plugin * Simple and fancy lightbox alternative * * Examples and documentation at: http://fancybox.net * * Copyright (c) 2008 - 2010 Janis Skarnelis * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated. * * Version: 1.3.4 (11/11/2010) * Requires: jQuery v1.3+ * * Dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html */ ;(function($) { var tmp, loading, overlay, wrap, outer, content, close, title, nav_left, nav_right, selectedIndex = 0, selectedOpts = {}, selectedArray = [], currentIndex = 0, currentOpts = {}, currentArray = [], ajaxLoader = null, imgPreloader = new Image(), imgRegExp = /\.(jpg|gif|png|bmp|jpeg)(.*)?$/i, swfRegExp = /[^\.]\.(swf)\s*$/i, loadingTimer, loadingFrame = 1, titleHeight = 0, titleStr = '', start_pos, final_pos, busy = false, fx = $.extend($('
          ')[0], { prop: 0 }), isIE6 = $.browser.msie && $.browser.version < 7 && !window.XMLHttpRequest, /* * Private methods */ _abort = function() { loading.hide(); imgPreloader.onerror = imgPreloader.onload = null; if (ajaxLoader) { ajaxLoader.abort(); } tmp.empty(); }, _error = function() { if (false === selectedOpts.onError(selectedArray, selectedIndex, selectedOpts)) { loading.hide(); busy = false; return; } selectedOpts.titleShow = false; selectedOpts.width = 'auto'; selectedOpts.height = 'auto'; tmp.html( '

          The requested content cannot be loaded.
          Please try again later.

          ' ); _process_inline(); }, _start = function() { var obj = selectedArray[ selectedIndex ], href, type, title, str, emb, ret; _abort(); selectedOpts = $.extend({}, $.fn.fancybox.defaults, (typeof $(obj).data('fancybox') == 'undefined' ? selectedOpts : $(obj).data('fancybox'))); ret = selectedOpts.onStart(selectedArray, selectedIndex, selectedOpts); if (ret === false) { busy = false; return; } else if (typeof ret == 'object') { selectedOpts = $.extend(selectedOpts, ret); } title = selectedOpts.title || (obj.nodeName ? $(obj).attr('title') : obj.title) || ''; if (obj.nodeName && !selectedOpts.orig) { selectedOpts.orig = $(obj).children("img:first").length ? $(obj).children("img:first") : $(obj); } if (title === '' && selectedOpts.orig && selectedOpts.titleFromAlt) { title = selectedOpts.orig.attr('alt'); } href = selectedOpts.href || (obj.nodeName ? $(obj).attr('href') : obj.href) || null; if ((/^(?:javascript)/i).test(href) || href == '#') { href = null; } if (selectedOpts.type) { type = selectedOpts.type; if (!href) { href = selectedOpts.content; } } else if (selectedOpts.content) { type = 'html'; } else if (href) { if (href.match(imgRegExp)) { type = 'image'; } else if (href.match(swfRegExp)) { type = 'swf'; } else if ($(obj).hasClass("iframe")) { type = 'iframe'; } else if (href.indexOf("#") === 0) { type = 'inline'; } else { type = 'ajax'; } } if (!type) { _error(); return; } if (type == 'inline') { obj = href.substr(href.indexOf("#")); type = $(obj).length > 0 ? 'inline' : 'ajax'; } selectedOpts.type = type; selectedOpts.href = href; selectedOpts.title = title; if (selectedOpts.autoDimensions) { if (selectedOpts.type == 'html' || selectedOpts.type == 'inline' || selectedOpts.type == 'ajax') { selectedOpts.width = 'auto'; selectedOpts.height = 'auto'; } else { selectedOpts.autoDimensions = false; } } if (selectedOpts.modal) { selectedOpts.overlayShow = true; selectedOpts.hideOnOverlayClick = false; selectedOpts.hideOnContentClick = false; selectedOpts.enableEscapeButton = false; selectedOpts.showCloseButton = false; } selectedOpts.padding = parseInt(selectedOpts.padding, 10); selectedOpts.margin = parseInt(selectedOpts.margin, 10); tmp.css('padding', (selectedOpts.padding + selectedOpts.margin)); $('.fancybox-inline-tmp').unbind('fancybox-cancel').bind('fancybox-change', function() { $(this).replaceWith(content.children()); }); switch (type) { case 'html' : tmp.html( selectedOpts.content ); _process_inline(); break; case 'inline' : if ( $(obj).parent().is('#fancybox-content') === true) { busy = false; return; } $('
          ') .hide() .insertBefore( $(obj) ) .bind('fancybox-cleanup', function() { $(this).replaceWith(content.children()); }).bind('fancybox-cancel', function() { $(this).replaceWith(tmp.children()); }); $(obj).appendTo(tmp); _process_inline(); break; case 'image': busy = false; $.fancybox.showActivity(); imgPreloader = new Image(); imgPreloader.onerror = function() { _error(); }; imgPreloader.onload = function() { busy = true; imgPreloader.onerror = imgPreloader.onload = null; _process_image(); }; imgPreloader.src = href; break; case 'swf': selectedOpts.scrolling = 'no'; str = ''; emb = ''; $.each(selectedOpts.swf, function(name, val) { str += ''; emb += ' ' + name + '="' + val + '"'; }); str += ''; tmp.html(str); _process_inline(); break; case 'ajax': busy = false; $.fancybox.showActivity(); selectedOpts.ajax.win = selectedOpts.ajax.success; ajaxLoader = $.ajax($.extend({}, selectedOpts.ajax, { url : href, data : selectedOpts.ajax.data || {}, error : function(XMLHttpRequest, textStatus, errorThrown) { if ( XMLHttpRequest.status > 0 ) { _error(); } }, success : function(data, textStatus, XMLHttpRequest) { var o = typeof XMLHttpRequest == 'object' ? XMLHttpRequest : ajaxLoader; if (o.status == 200) { if ( typeof selectedOpts.ajax.win == 'function' ) { ret = selectedOpts.ajax.win(href, data, textStatus, XMLHttpRequest); if (ret === false) { loading.hide(); return; } else if (typeof ret == 'string' || typeof ret == 'object') { data = ret; } } tmp.html( data ); _process_inline(); } } })); break; case 'iframe': _show(); break; } }, _process_inline = function() { var w = selectedOpts.width, h = selectedOpts.height; if (w.toString().indexOf('%') > -1) { w = parseInt( ($(window).width() - (selectedOpts.margin * 2)) * parseFloat(w) / 100, 10) + 'px'; } else { w = w == 'auto' ? 'auto' : w + 'px'; } if (h.toString().indexOf('%') > -1) { h = parseInt( ($(window).height() - (selectedOpts.margin * 2)) * parseFloat(h) / 100, 10) + 'px'; } else { h = h == 'auto' ? 'auto' : h + 'px'; } tmp.wrapInner('
          '); selectedOpts.width = tmp.width(); selectedOpts.height = tmp.height(); _show(); }, _process_image = function() { selectedOpts.width = imgPreloader.width; selectedOpts.height = imgPreloader.height; $("").attr({ 'id' : 'fancybox-img', 'src' : imgPreloader.src, 'alt' : selectedOpts.title }).appendTo( tmp ); _show(); }, _show = function() { var pos, equal; loading.hide(); if (wrap.is(":visible") && false === currentOpts.onCleanup(currentArray, currentIndex, currentOpts)) { $.event.trigger('fancybox-cancel'); busy = false; return; } busy = true; $(content.add( overlay )).unbind(); $(window).unbind("resize.fb scroll.fb"); $(document).unbind('keydown.fb'); if (wrap.is(":visible") && currentOpts.titlePosition !== 'outside') { wrap.css('height', wrap.height()); } currentArray = selectedArray; currentIndex = selectedIndex; currentOpts = selectedOpts; if (currentOpts.overlayShow) { overlay.css({ 'background-color' : currentOpts.overlayColor, 'opacity' : currentOpts.overlayOpacity, 'cursor' : currentOpts.hideOnOverlayClick ? 'pointer' : 'auto', 'height' : $(document).height() }); if (!overlay.is(':visible')) { if (isIE6) { $('select:not(#fancybox-tmp select)').filter(function() { return this.style.visibility !== 'hidden'; }).css({'visibility' : 'hidden'}).one('fancybox-cleanup', function() { this.style.visibility = 'inherit'; }); } overlay.show(); } } else { overlay.hide(); } final_pos = _get_zoom_to(); _process_title(); if (wrap.is(":visible")) { $( close.add( nav_left ).add( nav_right ) ).hide(); pos = wrap.position(), start_pos = { top : pos.top, left : pos.left, width : wrap.width(), height : wrap.height() }; equal = (start_pos.width == final_pos.width && start_pos.height == final_pos.height); content.fadeTo(currentOpts.changeFade, 0.3, function() { var finish_resizing = function() { content.html( tmp.contents() ).fadeTo(currentOpts.changeFade, 1, _finish); }; $.event.trigger('fancybox-change'); content .empty() .removeAttr('filter') .css({ 'border-width' : currentOpts.padding, 'width' : final_pos.width - currentOpts.padding * 2, 'height' : selectedOpts.autoDimensions ? 'auto' : final_pos.height - titleHeight - currentOpts.padding * 2 }); if (equal) { finish_resizing(); } else { fx.prop = 0; $(fx).animate({prop: 1}, { duration : currentOpts.changeSpeed, easing : currentOpts.easingChange, step : _draw, complete : finish_resizing }); } }); return; } wrap.removeAttr("style"); content.css('border-width', currentOpts.padding); if (currentOpts.transitionIn == 'elastic') { start_pos = _get_zoom_from(); content.html( tmp.contents() ); wrap.show(); if (currentOpts.opacity) { final_pos.opacity = 0; } fx.prop = 0; $(fx).animate({prop: 1}, { duration : currentOpts.speedIn, easing : currentOpts.easingIn, step : _draw, complete : _finish }); return; } if (currentOpts.titlePosition == 'inside' && titleHeight > 0) { title.show(); } content .css({ 'width' : final_pos.width - currentOpts.padding * 2, 'height' : selectedOpts.autoDimensions ? 'auto' : final_pos.height - titleHeight - currentOpts.padding * 2 }) .html( tmp.contents() ); wrap .css(final_pos) .fadeIn( currentOpts.transitionIn == 'none' ? 0 : currentOpts.speedIn, _finish ); }, _format_title = function(title) { if (title && title.length) { if (currentOpts.titlePosition == 'float') { return '
          ' + title + '
          '; } return '
          ' + title + '
          '; } return false; }, _process_title = function() { titleStr = currentOpts.title || ''; titleHeight = 0; title .empty() .removeAttr('style') .removeClass(); if (currentOpts.titleShow === false) { title.hide(); return; } titleStr = $.isFunction(currentOpts.titleFormat) ? currentOpts.titleFormat(titleStr, currentArray, currentIndex, currentOpts) : _format_title(titleStr); if (!titleStr || titleStr === '') { title.hide(); return; } title .addClass('fancybox-title-' + currentOpts.titlePosition) .html( titleStr ) .appendTo( 'body' ) .show(); switch (currentOpts.titlePosition) { case 'inside': title .css({ 'width' : final_pos.width - (currentOpts.padding * 2), 'marginLeft' : currentOpts.padding, 'marginRight' : currentOpts.padding }); titleHeight = title.outerHeight(true); title.appendTo( outer ); final_pos.height += titleHeight; break; case 'over': title .css({ 'marginLeft' : currentOpts.padding, 'width' : final_pos.width - (currentOpts.padding * 2), 'bottom' : currentOpts.padding }) .appendTo( outer ); break; case 'float': title .css('left', parseInt((title.width() - final_pos.width - 40)/ 2, 10) * -1) .appendTo( wrap ); break; default: title .css({ 'width' : final_pos.width - (currentOpts.padding * 2), 'paddingLeft' : currentOpts.padding, 'paddingRight' : currentOpts.padding }) .appendTo( wrap ); break; } title.hide(); }, _set_navigation = function() { if (currentOpts.enableEscapeButton || currentOpts.enableKeyboardNav) { $(document).bind('keydown.fb', function(e) { if (e.keyCode == 27 && currentOpts.enableEscapeButton) { e.preventDefault(); $.fancybox.close(); } else if ((e.keyCode == 37 || e.keyCode == 39) && currentOpts.enableKeyboardNav && e.target.tagName !== 'INPUT' && e.target.tagName !== 'TEXTAREA' && e.target.tagName !== 'SELECT') { e.preventDefault(); $.fancybox[ e.keyCode == 37 ? 'prev' : 'next'](); } }); } if (!currentOpts.showNavArrows) { nav_left.hide(); nav_right.hide(); return; } if ((currentOpts.cyclic && currentArray.length > 1) || currentIndex !== 0) { nav_left.show(); } if ((currentOpts.cyclic && currentArray.length > 1) || currentIndex != (currentArray.length -1)) { nav_right.show(); } }, _finish = function () { if (!$.support.opacity) { content.get(0).style.removeAttribute('filter'); wrap.get(0).style.removeAttribute('filter'); } if (selectedOpts.autoDimensions) { content.css('height', 'auto'); } wrap.css('height', 'auto'); if (titleStr && titleStr.length) { title.show(); } if (currentOpts.showCloseButton) { close.show(); } _set_navigation(); if (currentOpts.hideOnContentClick) { content.bind('click', $.fancybox.close); } if (currentOpts.hideOnOverlayClick) { overlay.bind('click', $.fancybox.close); } $(window).bind("resize.fb", $.fancybox.resize); if (currentOpts.centerOnScroll) { $(window).bind("scroll.fb", $.fancybox.center); } if (currentOpts.type == 'iframe') { $('').appendTo(content); } wrap.show(); busy = false; $.fancybox.center(); currentOpts.onComplete(currentArray, currentIndex, currentOpts); _preload_images(); }, _preload_images = function() { var href, objNext; if ((currentArray.length -1) > currentIndex) { href = currentArray[ currentIndex + 1 ].href; if (typeof href !== 'undefined' && href.match(imgRegExp)) { objNext = new Image(); objNext.src = href; } } if (currentIndex > 0) { href = currentArray[ currentIndex - 1 ].href; if (typeof href !== 'undefined' && href.match(imgRegExp)) { objNext = new Image(); objNext.src = href; } } }, _draw = function(pos) { var dim = { width : parseInt(start_pos.width + (final_pos.width - start_pos.width) * pos, 10), height : parseInt(start_pos.height + (final_pos.height - start_pos.height) * pos, 10), top : parseInt(start_pos.top + (final_pos.top - start_pos.top) * pos, 10), left : parseInt(start_pos.left + (final_pos.left - start_pos.left) * pos, 10) }; if (typeof final_pos.opacity !== 'undefined') { dim.opacity = pos < 0.5 ? 0.5 : pos; } wrap.css(dim); content.css({ 'width' : dim.width - currentOpts.padding * 2, 'height' : dim.height - (titleHeight * pos) - currentOpts.padding * 2 }); }, _get_viewport = function() { return [ $(window).width() - (currentOpts.margin * 2), $(window).height() - (currentOpts.margin * 2), $(document).scrollLeft() + currentOpts.margin, $(document).scrollTop() + currentOpts.margin ]; }, _get_zoom_to = function () { var view = _get_viewport(), to = {}, resize = currentOpts.autoScale, double_padding = currentOpts.padding * 2, ratio; if (currentOpts.width.toString().indexOf('%') > -1) { to.width = parseInt((view[0] * parseFloat(currentOpts.width)) / 100, 10); } else { to.width = currentOpts.width + double_padding; } if (currentOpts.height.toString().indexOf('%') > -1) { to.height = parseInt((view[1] * parseFloat(currentOpts.height)) / 100, 10); } else { to.height = currentOpts.height + double_padding; } if (resize && (to.width > view[0] || to.height > view[1])) { if (selectedOpts.type == 'image' || selectedOpts.type == 'swf') { ratio = (currentOpts.width ) / (currentOpts.height ); if ((to.width ) > view[0]) { to.width = view[0]; to.height = parseInt(((to.width - double_padding) / ratio) + double_padding, 10); } if ((to.height) > view[1]) { to.height = view[1]; to.width = parseInt(((to.height - double_padding) * ratio) + double_padding, 10); } } else { to.width = Math.min(to.width, view[0]); to.height = Math.min(to.height, view[1]); } } to.top = parseInt(Math.max(view[3] - 20, view[3] + ((view[1] - to.height - 40) * 0.5)), 10); to.left = parseInt(Math.max(view[2] - 20, view[2] + ((view[0] - to.width - 40) * 0.5)), 10); return to; }, _get_obj_pos = function(obj) { var pos = obj.offset(); pos.top += parseInt( obj.css('paddingTop'), 10 ) || 0; pos.left += parseInt( obj.css('paddingLeft'), 10 ) || 0; pos.top += parseInt( obj.css('border-top-width'), 10 ) || 0; pos.left += parseInt( obj.css('border-left-width'), 10 ) || 0; pos.width = obj.width(); pos.height = obj.height(); return pos; }, _get_zoom_from = function() { var orig = selectedOpts.orig ? $(selectedOpts.orig) : false, from = {}, pos, view; if (orig && orig.length) { pos = _get_obj_pos(orig); from = { width : pos.width + (currentOpts.padding * 2), height : pos.height + (currentOpts.padding * 2), top : pos.top - currentOpts.padding - 20, left : pos.left - currentOpts.padding - 20 }; } else { view = _get_viewport(); from = { width : currentOpts.padding * 2, height : currentOpts.padding * 2, top : parseInt(view[3] + view[1] * 0.5, 10), left : parseInt(view[2] + view[0] * 0.5, 10) }; } return from; }, _animate_loading = function() { if (!loading.is(':visible')){ clearInterval(loadingTimer); return; } $('div', loading).css('top', (loadingFrame * -40) + 'px'); loadingFrame = (loadingFrame + 1) % 12; }; /* * Public methods */ $.fn.fancybox = function(options) { if (!$(this).length) { return this; } $(this) .data('fancybox', $.extend({}, options, ($.metadata ? $(this).metadata() : {}))) .unbind('click.fb') .bind('click.fb', function(e) { e.preventDefault(); if (busy) { return; } busy = true; $(this).blur(); selectedArray = []; selectedIndex = 0; var rel = $(this).attr('rel') || ''; if (!rel || rel == '' || rel === 'nofollow') { selectedArray.push(this); } else { selectedArray = $("a[rel=" + rel + "], area[rel=" + rel + "]"); selectedIndex = selectedArray.index( this ); } _start(); return; }); return this; }; $.fancybox = function(obj) { var opts; if (busy) { return; } busy = true; opts = typeof arguments[1] !== 'undefined' ? arguments[1] : {}; selectedArray = []; selectedIndex = parseInt(opts.index, 10) || 0; if ($.isArray(obj)) { for (var i = 0, j = obj.length; i < j; i++) { if (typeof obj[i] == 'object') { $(obj[i]).data('fancybox', $.extend({}, opts, obj[i])); } else { obj[i] = $({}).data('fancybox', $.extend({content : obj[i]}, opts)); } } selectedArray = jQuery.merge(selectedArray, obj); } else { if (typeof obj == 'object') { $(obj).data('fancybox', $.extend({}, opts, obj)); } else { obj = $({}).data('fancybox', $.extend({content : obj}, opts)); } selectedArray.push(obj); } if (selectedIndex > selectedArray.length || selectedIndex < 0) { selectedIndex = 0; } _start(); }; $.fancybox.showActivity = function() { clearInterval(loadingTimer); loading.show(); loadingTimer = setInterval(_animate_loading, 66); }; $.fancybox.hideActivity = function() { loading.hide(); }; $.fancybox.next = function() { return $.fancybox.pos( currentIndex + 1); }; $.fancybox.prev = function() { return $.fancybox.pos( currentIndex - 1); }; $.fancybox.pos = function(pos) { if (busy) { return; } pos = parseInt(pos); selectedArray = currentArray; if (pos > -1 && pos < currentArray.length) { selectedIndex = pos; _start(); } else if (currentOpts.cyclic && currentArray.length > 1) { selectedIndex = pos >= currentArray.length ? 0 : currentArray.length - 1; _start(); } return; }; $.fancybox.cancel = function() { if (busy) { return; } busy = true; $.event.trigger('fancybox-cancel'); _abort(); selectedOpts.onCancel(selectedArray, selectedIndex, selectedOpts); busy = false; }; // Note: within an iframe use - parent.$.fancybox.close(); $.fancybox.close = function() { if (busy || wrap.is(':hidden')) { return; } busy = true; if (currentOpts && false === currentOpts.onCleanup(currentArray, currentIndex, currentOpts)) { busy = false; return; } _abort(); $(close.add( nav_left ).add( nav_right )).hide(); $(content.add( overlay )).unbind(); $(window).unbind("resize.fb scroll.fb"); $(document).unbind('keydown.fb'); content.find('iframe').attr('src', isIE6 && /^https/i.test(window.location.href || '') ? 'javascript:void(false)' : 'about:blank'); if (currentOpts.titlePosition !== 'inside') { title.empty(); } wrap.stop(); function _cleanup() { overlay.fadeOut('fast'); title.empty().hide(); wrap.hide(); $.event.trigger('fancybox-cleanup'); content.empty(); currentOpts.onClosed(currentArray, currentIndex, currentOpts); currentArray = selectedOpts = []; currentIndex = selectedIndex = 0; currentOpts = selectedOpts = {}; busy = false; } if (currentOpts.transitionOut == 'elastic') { start_pos = _get_zoom_from(); var pos = wrap.position(); final_pos = { top : pos.top , left : pos.left, width : wrap.width(), height : wrap.height() }; if (currentOpts.opacity) { final_pos.opacity = 1; } title.empty().hide(); fx.prop = 1; $(fx).animate({ prop: 0 }, { duration : currentOpts.speedOut, easing : currentOpts.easingOut, step : _draw, complete : _cleanup }); } else { wrap.fadeOut( currentOpts.transitionOut == 'none' ? 0 : currentOpts.speedOut, _cleanup); } }; $.fancybox.resize = function() { if (overlay.is(':visible')) { overlay.css('height', $(document).height()); } $.fancybox.center(true); }; $.fancybox.center = function() { var view, align; if (busy) { return; } align = arguments[0] === true ? 1 : 0; view = _get_viewport(); if (!align && (wrap.width() > view[0] || wrap.height() > view[1])) { return; } wrap .stop() .animate({ 'top' : parseInt(Math.max(view[3] - 20, view[3] + ((view[1] - content.height() - 40) * 0.5) - currentOpts.padding)), 'left' : parseInt(Math.max(view[2] - 20, view[2] + ((view[0] - content.width() - 40) * 0.5) - currentOpts.padding)) }, typeof arguments[0] == 'number' ? arguments[0] : 200); }; $.fancybox.init = function() { if ($("#fancybox-wrap").length) { return; } $('body').append( tmp = $('
          '), loading = $('
          '), overlay = $('
          '), wrap = $('
          ') ); outer = $('
          ') .append('
          ') .appendTo( wrap ); outer.append( content = $('
          '), close = $(''), title = $('
          '), nav_left = $(''), nav_right = $('') ); close.click($.fancybox.close); loading.click($.fancybox.cancel); nav_left.click(function(e) { e.preventDefault(); $.fancybox.prev(); }); nav_right.click(function(e) { e.preventDefault(); $.fancybox.next(); }); if ($.fn.mousewheel) { wrap.bind('mousewheel.fb', function(e, delta) { if (busy) { e.preventDefault(); } else if ($(e.target).get(0).clientHeight == 0 || $(e.target).get(0).scrollHeight === $(e.target).get(0).clientHeight) { e.preventDefault(); $.fancybox[ delta > 0 ? 'prev' : 'next'](); } }); } if (!$.support.opacity) { wrap.addClass('fancybox-ie'); } if (isIE6) { loading.addClass('fancybox-ie6'); wrap.addClass('fancybox-ie6'); $('').prependTo(outer); } }; $.fn.fancybox.defaults = { padding : 10, margin : 40, opacity : false, modal : false, cyclic : false, scrolling : 'auto', // 'auto', 'yes' or 'no' width : 560, height : 340, autoScale : true, autoDimensions : true, centerOnScroll : false, ajax : {}, swf : { wmode: 'transparent' }, hideOnOverlayClick : true, hideOnContentClick : false, overlayShow : true, overlayOpacity : 0.7, overlayColor : '#777', titleShow : true, titlePosition : 'float', // 'float', 'outside', 'inside' or 'over' titleFormat : null, titleFromAlt : false, transitionIn : 'fade', // 'elastic', 'fade' or 'none' transitionOut : 'fade', // 'elastic', 'fade' or 'none' speedIn : 300, speedOut : 300, changeSpeed : 300, changeFade : 'fast', easingIn : 'swing', easingOut : 'swing', showCloseButton : true, showNavArrows : true, enableEscapeButton : true, enableKeyboardNav : true, onStart : function(){}, onCancel : function(){}, onComplete : function(){}, onCleanup : function(){}, onClosed : function(){}, onError : function(){} }; $(document).ready(function() { $.fancybox.init(); }); })(jQuery);assets/js/fancybox/.htaccess000066600000000177151373621660012114 0ustar00 Order allow,deny Deny from all assets/js/fancybox/jquery.mousewheel-3.0.4.pack.js000066600000002377151373621660015730 0ustar00/*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net) * Licensed under the MIT License (LICENSE.txt). * * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers. * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix. * Thanks to: Seamus Leahy for adding deltaX and deltaY * * Version: 3.0.4 * * Requires: 1.2.2+ */ (function(d){function g(a){var b=a||window.event,i=[].slice.call(arguments,1),c=0,h=0,e=0;a=d.event.fix(b);a.type="mousewheel";if(a.wheelDelta)c=a.wheelDelta/120;if(a.detail)c=-a.detail/3;e=c;if(b.axis!==undefined&&b.axis===b.HORIZONTAL_AXIS){e=0;h=-1*c}if(b.wheelDeltaY!==undefined)e=b.wheelDeltaY/120;if(b.wheelDeltaX!==undefined)h=-1*b.wheelDeltaX/120;i.unshift(a,c,h,e);return d.event.handle.apply(this,i)}var f=["DOMMouseScroll","mousewheel"];d.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a= f.length;a;)this.addEventListener(f[--a],g,false);else this.onmousewheel=g},teardown:function(){if(this.removeEventListener)for(var a=f.length;a;)this.removeEventListener(f[--a],g,false);else this.onmousewheel=null}};d.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})})(jQuery);assets/js/fancybox/jquery.easing-1.3.pack.js000066600000015075151373621660014657 0ustar00/* * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ * * Uses the built in easing capabilities added In jQuery 1.1 * to offer multiple easing options * * TERMS OF USE - jQuery Easing * * Open source under the BSD License. * * Copyright © 2008 George McGinley Smith * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list * of conditions and the following disclaimer in the documentation and/or other materials * provided with the distribution. * * Neither the name of the author nor the names of contributors may be used to endorse * or promote products derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * */ // t: current time, b: begInnIng value, c: change In value, d: duration eval(function(p,a,c,k,e,r){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('h.i[\'1a\']=h.i[\'z\'];h.O(h.i,{y:\'D\',z:9(x,t,b,c,d){6 h.i[h.i.y](x,t,b,c,d)},17:9(x,t,b,c,d){6 c*(t/=d)*t+b},D:9(x,t,b,c,d){6-c*(t/=d)*(t-2)+b},13:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t+b;6-c/2*((--t)*(t-2)-1)+b},X:9(x,t,b,c,d){6 c*(t/=d)*t*t+b},U:9(x,t,b,c,d){6 c*((t=t/d-1)*t*t+1)+b},R:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t+b;6 c/2*((t-=2)*t*t+2)+b},N:9(x,t,b,c,d){6 c*(t/=d)*t*t*t+b},M:9(x,t,b,c,d){6-c*((t=t/d-1)*t*t*t-1)+b},L:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t*t+b;6-c/2*((t-=2)*t*t*t-2)+b},K:9(x,t,b,c,d){6 c*(t/=d)*t*t*t*t+b},J:9(x,t,b,c,d){6 c*((t=t/d-1)*t*t*t*t+1)+b},I:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t*t*t+b;6 c/2*((t-=2)*t*t*t*t+2)+b},G:9(x,t,b,c,d){6-c*8.C(t/d*(8.g/2))+c+b},15:9(x,t,b,c,d){6 c*8.n(t/d*(8.g/2))+b},12:9(x,t,b,c,d){6-c/2*(8.C(8.g*t/d)-1)+b},Z:9(x,t,b,c,d){6(t==0)?b:c*8.j(2,10*(t/d-1))+b},Y:9(x,t,b,c,d){6(t==d)?b+c:c*(-8.j(2,-10*t/d)+1)+b},W:9(x,t,b,c,d){e(t==0)6 b;e(t==d)6 b+c;e((t/=d/2)<1)6 c/2*8.j(2,10*(t-1))+b;6 c/2*(-8.j(2,-10*--t)+2)+b},V:9(x,t,b,c,d){6-c*(8.o(1-(t/=d)*t)-1)+b},S:9(x,t,b,c,d){6 c*8.o(1-(t=t/d-1)*t)+b},Q:9(x,t,b,c,d){e((t/=d/2)<1)6-c/2*(8.o(1-t*t)-1)+b;6 c/2*(8.o(1-(t-=2)*t)+1)+b},P:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d)==1)6 b+c;e(!p)p=d*.3;e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);6-(a*8.j(2,10*(t-=1))*8.n((t*d-s)*(2*8.g)/p))+b},H:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d)==1)6 b+c;e(!p)p=d*.3;e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);6 a*8.j(2,-10*t)*8.n((t*d-s)*(2*8.g)/p)+c+b},T:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d/2)==2)6 b+c;e(!p)p=d*(.3*1.5);e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);e(t<1)6-.5*(a*8.j(2,10*(t-=1))*8.n((t*d-s)*(2*8.g)/p))+b;6 a*8.j(2,-10*(t-=1))*8.n((t*d-s)*(2*8.g)/p)*.5+c+b},F:9(x,t,b,c,d,s){e(s==u)s=1.l;6 c*(t/=d)*t*((s+1)*t-s)+b},E:9(x,t,b,c,d,s){e(s==u)s=1.l;6 c*((t=t/d-1)*t*((s+1)*t+s)+1)+b},16:9(x,t,b,c,d,s){e(s==u)s=1.l;e((t/=d/2)<1)6 c/2*(t*t*(((s*=(1.B))+1)*t-s))+b;6 c/2*((t-=2)*t*(((s*=(1.B))+1)*t+s)+2)+b},A:9(x,t,b,c,d){6 c-h.i.v(x,d-t,0,c,d)+b},v:9(x,t,b,c,d){e((t/=d)<(1/2.k)){6 c*(7.q*t*t)+b}m e(t<(2/2.k)){6 c*(7.q*(t-=(1.5/2.k))*t+.k)+b}m e(t<(2.5/2.k)){6 c*(7.q*(t-=(2.14/2.k))*t+.11)+b}m{6 c*(7.q*(t-=(2.18/2.k))*t+.19)+b}},1b:9(x,t,b,c,d){e(t")[0],{prop:0}),M=b.browser.msie&&b.browser.version<7&&!window.XMLHttpRequest,N=function(){t.hide();v.onerror=v.onload=null;G&&G.abort();m.empty()},O=function(){if(false===e.onError(o,q,e)){t.hide();h=false}else{e.titleShow=false;e.width="auto";e.height="auto";m.html('

          The requested content cannot be loaded.
          Please try again later.

          '); F()}},I=function(){var a=o[q],c,g,k,C,P,w;N();e=b.extend({},b.fn.fancybox.defaults,typeof b(a).data("fancybox")=="undefined"?e:b(a).data("fancybox"));w=e.onStart(o,q,e);if(w===false)h=false;else{if(typeof w=="object")e=b.extend(e,w);k=e.title||(a.nodeName?b(a).attr("title"):a.title)||"";if(a.nodeName&&!e.orig)e.orig=b(a).children("img:first").length?b(a).children("img:first"):b(a);if(k===""&&e.orig&&e.titleFromAlt)k=e.orig.attr("alt");c=e.href||(a.nodeName?b(a).attr("href"):a.href)||null;if(/^(?:javascript)/i.test(c)|| c=="#")c=null;if(e.type){g=e.type;if(!c)c=e.content}else if(e.content)g="html";else if(c)g=c.match(J)?"image":c.match(W)?"swf":b(a).hasClass("iframe")?"iframe":c.indexOf("#")===0?"inline":"ajax";if(g){if(g=="inline"){a=c.substr(c.indexOf("#"));g=b(a).length>0?"inline":"ajax"}e.type=g;e.href=c;e.title=k;if(e.autoDimensions)if(e.type=="html"||e.type=="inline"||e.type=="ajax"){e.width="auto";e.height="auto"}else e.autoDimensions=false;if(e.modal){e.overlayShow=true;e.hideOnOverlayClick=false;e.hideOnContentClick= false;e.enableEscapeButton=false;e.showCloseButton=false}e.padding=parseInt(e.padding,10);e.margin=parseInt(e.margin,10);m.css("padding",e.padding+e.margin);b(".fancybox-inline-tmp").unbind("fancybox-cancel").bind("fancybox-change",function(){b(this).replaceWith(j.children())});switch(g){case "html":m.html(e.content);F();break;case "inline":if(b(a).parent().is("#fancybox-content")===true){h=false;break}b('
          ').hide().insertBefore(b(a)).bind("fancybox-cleanup",function(){b(this).replaceWith(j.children())}).bind("fancybox-cancel", function(){b(this).replaceWith(m.children())});b(a).appendTo(m);F();break;case "image":h=false;b.fancybox.showActivity();v=new Image;v.onerror=function(){O()};v.onload=function(){h=true;v.onerror=v.onload=null;e.width=v.width;e.height=v.height;b("").attr({id:"fancybox-img",src:v.src,alt:e.title}).appendTo(m);Q()};v.src=c;break;case "swf":e.scrolling="no";C='';P="";b.each(e.swf,function(x,H){C+='';P+=" "+x+'="'+H+'"'});C+='";m.html(C);F();break;case "ajax":h=false;b.fancybox.showActivity();e.ajax.win=e.ajax.success;G=b.ajax(b.extend({},e.ajax,{url:c,data:e.ajax.data||{},error:function(x){x.status>0&&O()},success:function(x,H,R){if((typeof R=="object"?R:G).status==200){if(typeof e.ajax.win== "function"){w=e.ajax.win(c,x,H,R);if(w===false){t.hide();return}else if(typeof w=="string"||typeof w=="object")x=w}m.html(x);F()}}}));break;case "iframe":Q()}}else O()}},F=function(){var a=e.width,c=e.height;a=a.toString().indexOf("%")>-1?parseInt((b(window).width()-e.margin*2)*parseFloat(a)/100,10)+"px":a=="auto"?"auto":a+"px";c=c.toString().indexOf("%")>-1?parseInt((b(window).height()-e.margin*2)*parseFloat(c)/100,10)+"px":c=="auto"?"auto":c+"px";m.wrapInner('
          ');e.width=m.width();e.height=m.height();Q()},Q=function(){var a,c;t.hide();if(f.is(":visible")&&false===d.onCleanup(l,p,d)){b.event.trigger("fancybox-cancel");h=false}else{h=true;b(j.add(u)).unbind();b(window).unbind("resize.fb scroll.fb");b(document).unbind("keydown.fb");f.is(":visible")&&d.titlePosition!=="outside"&&f.css("height",f.height());l=o;p=q;d=e;if(d.overlayShow){u.css({"background-color":d.overlayColor, opacity:d.overlayOpacity,cursor:d.hideOnOverlayClick?"pointer":"auto",height:b(document).height()});if(!u.is(":visible")){M&&b("select:not(#fancybox-tmp select)").filter(function(){return this.style.visibility!=="hidden"}).css({visibility:"hidden"}).one("fancybox-cleanup",function(){this.style.visibility="inherit"});u.show()}}else u.hide();i=X();s=d.title||"";y=0;n.empty().removeAttr("style").removeClass();if(d.titleShow!==false){if(b.isFunction(d.titleFormat))a=d.titleFormat(s,l,p,d);else a=s&&s.length? d.titlePosition=="float"?'
          '+s+'
          ':'
          '+s+"
          ":false;s=a;if(!(!s||s==="")){n.addClass("fancybox-title-"+d.titlePosition).html(s).appendTo("body").show();switch(d.titlePosition){case "inside":n.css({width:i.width-d.padding*2,marginLeft:d.padding,marginRight:d.padding}); y=n.outerHeight(true);n.appendTo(D);i.height+=y;break;case "over":n.css({marginLeft:d.padding,width:i.width-d.padding*2,bottom:d.padding}).appendTo(D);break;case "float":n.css("left",parseInt((n.width()-i.width-40)/2,10)*-1).appendTo(f);break;default:n.css({width:i.width-d.padding*2,paddingLeft:d.padding,paddingRight:d.padding}).appendTo(f)}}}n.hide();if(f.is(":visible")){b(E.add(z).add(A)).hide();a=f.position();r={top:a.top,left:a.left,width:f.width(),height:f.height()};c=r.width==i.width&&r.height== i.height;j.fadeTo(d.changeFade,0.3,function(){var g=function(){j.html(m.contents()).fadeTo(d.changeFade,1,S)};b.event.trigger("fancybox-change");j.empty().removeAttr("filter").css({"border-width":d.padding,width:i.width-d.padding*2,height:e.autoDimensions?"auto":i.height-y-d.padding*2});if(c)g();else{B.prop=0;b(B).animate({prop:1},{duration:d.changeSpeed,easing:d.easingChange,step:T,complete:g})}})}else{f.removeAttr("style");j.css("border-width",d.padding);if(d.transitionIn=="elastic"){r=V();j.html(m.contents()); f.show();if(d.opacity)i.opacity=0;B.prop=0;b(B).animate({prop:1},{duration:d.speedIn,easing:d.easingIn,step:T,complete:S})}else{d.titlePosition=="inside"&&y>0&&n.show();j.css({width:i.width-d.padding*2,height:e.autoDimensions?"auto":i.height-y-d.padding*2}).html(m.contents());f.css(i).fadeIn(d.transitionIn=="none"?0:d.speedIn,S)}}}},Y=function(){if(d.enableEscapeButton||d.enableKeyboardNav)b(document).bind("keydown.fb",function(a){if(a.keyCode==27&&d.enableEscapeButton){a.preventDefault();b.fancybox.close()}else if((a.keyCode== 37||a.keyCode==39)&&d.enableKeyboardNav&&a.target.tagName!=="INPUT"&&a.target.tagName!=="TEXTAREA"&&a.target.tagName!=="SELECT"){a.preventDefault();b.fancybox[a.keyCode==37?"prev":"next"]()}});if(d.showNavArrows){if(d.cyclic&&l.length>1||p!==0)z.show();if(d.cyclic&&l.length>1||p!=l.length-1)A.show()}else{z.hide();A.hide()}},S=function(){if(!b.support.opacity){j.get(0).style.removeAttribute("filter");f.get(0).style.removeAttribute("filter")}e.autoDimensions&&j.css("height","auto");f.css("height","auto"); s&&s.length&&n.show();d.showCloseButton&&E.show();Y();d.hideOnContentClick&&j.bind("click",b.fancybox.close);d.hideOnOverlayClick&&u.bind("click",b.fancybox.close);b(window).bind("resize.fb",b.fancybox.resize);d.centerOnScroll&&b(window).bind("scroll.fb",b.fancybox.center);if(d.type=="iframe")b('').appendTo(j); f.show();h=false;b.fancybox.center();d.onComplete(l,p,d);var a,c;if(l.length-1>p){a=l[p+1].href;if(typeof a!=="undefined"&&a.match(J)){c=new Image;c.src=a}}if(p>0){a=l[p-1].href;if(typeof a!=="undefined"&&a.match(J)){c=new Image;c.src=a}}},T=function(a){var c={width:parseInt(r.width+(i.width-r.width)*a,10),height:parseInt(r.height+(i.height-r.height)*a,10),top:parseInt(r.top+(i.top-r.top)*a,10),left:parseInt(r.left+(i.left-r.left)*a,10)};if(typeof i.opacity!=="undefined")c.opacity=a<0.5?0.5:a;f.css(c); j.css({width:c.width-d.padding*2,height:c.height-y*a-d.padding*2})},U=function(){return[b(window).width()-d.margin*2,b(window).height()-d.margin*2,b(document).scrollLeft()+d.margin,b(document).scrollTop()+d.margin]},X=function(){var a=U(),c={},g=d.autoScale,k=d.padding*2;c.width=d.width.toString().indexOf("%")>-1?parseInt(a[0]*parseFloat(d.width)/100,10):d.width+k;c.height=d.height.toString().indexOf("%")>-1?parseInt(a[1]*parseFloat(d.height)/100,10):d.height+k;if(g&&(c.width>a[0]||c.height>a[1]))if(e.type== "image"||e.type=="swf"){g=d.width/d.height;if(c.width>a[0]){c.width=a[0];c.height=parseInt((c.width-k)/g+k,10)}if(c.height>a[1]){c.height=a[1];c.width=parseInt((c.height-k)*g+k,10)}}else{c.width=Math.min(c.width,a[0]);c.height=Math.min(c.height,a[1])}c.top=parseInt(Math.max(a[3]-20,a[3]+(a[1]-c.height-40)*0.5),10);c.left=parseInt(Math.max(a[2]-20,a[2]+(a[0]-c.width-40)*0.5),10);return c},V=function(){var a=e.orig?b(e.orig):false,c={};if(a&&a.length){c=a.offset();c.top+=parseInt(a.css("paddingTop"), 10)||0;c.left+=parseInt(a.css("paddingLeft"),10)||0;c.top+=parseInt(a.css("border-top-width"),10)||0;c.left+=parseInt(a.css("border-left-width"),10)||0;c.width=a.width();c.height=a.height();c={width:c.width+d.padding*2,height:c.height+d.padding*2,top:c.top-d.padding-20,left:c.left-d.padding-20}}else{a=U();c={width:d.padding*2,height:d.padding*2,top:parseInt(a[3]+a[1]*0.5,10),left:parseInt(a[2]+a[0]*0.5,10)}}return c},Z=function(){if(t.is(":visible")){b("div",t).css("top",L*-40+"px");L=(L+1)%12}else clearInterval(K)}; b.fn.fancybox=function(a){if(!b(this).length)return this;b(this).data("fancybox",b.extend({},a,b.metadata?b(this).metadata():{})).unbind("click.fb").bind("click.fb",function(c){c.preventDefault();if(!h){h=true;b(this).blur();o=[];q=0;c=b(this).attr("rel")||"";if(!c||c==""||c==="nofollow")o.push(this);else{o=b("a[rel="+c+"], area[rel="+c+"]");q=o.index(this)}I()}});return this};b.fancybox=function(a,c){var g;if(!h){h=true;g=typeof c!=="undefined"?c:{};o=[];q=parseInt(g.index,10)||0;if(b.isArray(a)){for(var k= 0,C=a.length;ko.length||q<0)q=0;I()}};b.fancybox.showActivity=function(){clearInterval(K);t.show();K=setInterval(Z,66)};b.fancybox.hideActivity=function(){t.hide()};b.fancybox.next=function(){return b.fancybox.pos(p+ 1)};b.fancybox.prev=function(){return b.fancybox.pos(p-1)};b.fancybox.pos=function(a){if(!h){a=parseInt(a);o=l;if(a>-1&&a1){q=a>=l.length?0:l.length-1;I()}}};b.fancybox.cancel=function(){if(!h){h=true;b.event.trigger("fancybox-cancel");N();e.onCancel(o,q,e);h=false}};b.fancybox.close=function(){function a(){u.fadeOut("fast");n.empty().hide();f.hide();b.event.trigger("fancybox-cleanup");j.empty();d.onClosed(l,p,d);l=e=[];p=q=0;d=e={};h=false}if(!(h||f.is(":hidden"))){h= true;if(d&&false===d.onCleanup(l,p,d))h=false;else{N();b(E.add(z).add(A)).hide();b(j.add(u)).unbind();b(window).unbind("resize.fb scroll.fb");b(document).unbind("keydown.fb");j.find("iframe").attr("src",M&&/^https/i.test(window.location.href||"")?"javascript:void(false)":"about:blank");d.titlePosition!=="inside"&&n.empty();f.stop();if(d.transitionOut=="elastic"){r=V();var c=f.position();i={top:c.top,left:c.left,width:f.width(),height:f.height()};if(d.opacity)i.opacity=1;n.empty().hide();B.prop=1; b(B).animate({prop:0},{duration:d.speedOut,easing:d.easingOut,step:T,complete:a})}else f.fadeOut(d.transitionOut=="none"?0:d.speedOut,a)}}};b.fancybox.resize=function(){u.is(":visible")&&u.css("height",b(document).height());b.fancybox.center(true)};b.fancybox.center=function(a){var c,g;if(!h){g=a===true?1:0;c=U();!g&&(f.width()>c[0]||f.height()>c[1])||f.stop().animate({top:parseInt(Math.max(c[3]-20,c[3]+(c[1]-j.height()-40)*0.5-d.padding)),left:parseInt(Math.max(c[2]-20,c[2]+(c[0]-j.width()-40)*0.5- d.padding))},typeof a=="number"?a:200)}};b.fancybox.init=function(){if(!b("#fancybox-wrap").length){b("body").append(m=b('
          '),t=b('
          '),u=b('
          '),f=b('
          '));D=b('
          ').append('
          ').appendTo(f); D.append(j=b('
          '),E=b(''),n=b('
          '),z=b(''),A=b(''));E.click(b.fancybox.close);t.click(b.fancybox.cancel);z.click(function(a){a.preventDefault();b.fancybox.prev()});A.click(function(a){a.preventDefault();b.fancybox.next()}); b.fn.mousewheel&&f.bind("mousewheel.fb",function(a,c){if(h)a.preventDefault();else if(b(a.target).get(0).clientHeight==0||b(a.target).get(0).scrollHeight===b(a.target).get(0).clientHeight){a.preventDefault();b.fancybox[c>0?"prev":"next"]()}});b.support.opacity||f.addClass("fancybox-ie");if(M){t.addClass("fancybox-ie6");f.addClass("fancybox-ie6");b('').prependTo(D)}}}; b.fn.fancybox.defaults={padding:10,margin:40,opacity:false,modal:false,cyclic:false,scrolling:"auto",width:560,height:340,autoScale:true,autoDimensions:true,centerOnScroll:false,ajax:{},swf:{wmode:"transparent"},hideOnOverlayClick:true,hideOnContentClick:false,overlayShow:true,overlayOpacity:0.7,overlayColor:"#777",titleShow:true,titlePosition:"float",titleFormat:null,titleFromAlt:false,transitionIn:"fade",transitionOut:"fade",speedIn:300,speedOut:300,changeSpeed:300,changeFade:"fast",easingIn:"swing", easingOut:"swing",showCloseButton:true,showNavArrows:true,enableEscapeButton:true,enableKeyboardNav:true,onStart:function(){},onCancel:function(){},onComplete:function(){},onCleanup:function(){},onClosed:function(){},onError:function(){}};b(document).ready(function(){b.fancybox.init()})})(jQuery);assets/js/languages/jquery.validationEngine-de.js000066600000016777151373621660016212 0ustar00 (function($){ $.fn.validationEngineLanguage = function(){ }; $.validationEngineLanguage = { newLang: function(){ $.validationEngineLanguage.allRules = { "required": { // Add your regex rules here, you can take telephone as an example "regex": "none", "alertText": "* Dieses Feld ist ein Pflichtfeld", "alertTextCheckboxMultiple": "* Bitte wählen Sie eine Option", "alertTextCheckboxe": "* Dieses Feld ist ein Pflichtfeld" }, "minSize": { "regex": "none", "alertText": "* Mindestens ", "alertText2": " Zeichen benötigt" }, "maxSize": { "regex": "none", "alertText": "* Maximal ", "alertText2": " Zeichen erlaubt" }, "min": { "regex": "none", "alertText": "* Mindeswert ist " }, "max": { "regex": "none", "alertText": "* Maximalwert ist " }, "past": { "regex": "none", "alertText": "* Datum vor " }, "future": { "regex": "none", "alertText": "* Datum nach " }, "maxCheckbox": { "regex": "none", "alertText": "* Maximale Anzahl Markierungen überschritten" }, "minCheckbox": { "regex": "none", "alertText": "* Bitte wählen Sie ", "alertText2": " Optionen" }, "equals": { "regex": "none", "alertText": "* Felder stimmen nicht überein" }, "phone": { // credit: jquery.h5validate.js / orefalo "regex": /^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/, "alertText": "* Ungültige Telefonnummer" }, "email": { // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "alertText": "* Ungültige E-Mail Adresse" }, "integer": { "regex": /^[\-\+]?\d+$/, "alertText": "* Keine gültige Ganzzahl" }, "number": { // Number, including positive, negative, and floating decimal. credit: orefalo "regex": /^[\-\+]?(([0-9]+)([\.,]([0-9]+))?|([\.,]([0-9]+))?)$/, "alertText": "* Keine gültige Fließkommazahl" }, "date": { // Date in ISO format. Credit: bassistance "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, "alertText": "* Ungültiges Datumsformat, erwartet wird das Format JJJJ-MM-TT" }, "ipv4": { "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, "alertText": "* Ungültige IP Adresse" }, "url": { "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/, "alertText": "* Ungültige URL" }, "onlyNumberSp": { "regex": /^[0-9\ ]+$/, "alertText": "* Nur Zahlen erlaubt" }, "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Nur Buchstaben erlaubt" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, "alertText": "* Keine Sonderzeichen erlaubt" }, // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings "ajaxUserCall": { "url": "ajaxValidateFieldUser", // you may want to pass extra data on the ajax call "extraData": "name=eric", "alertText": "* Dieser Benutzer ist bereits vergeben", "alertTextLoad": "* Überprüfe Angaben, bitte warten" }, "ajaxNameCall": { // remote json service location "url": "ajaxValidateFieldName", // error "alertText": "* Dieser Name ist bereits vergeben", // if you provide an "alertTextOk", it will show as a green prompt when the field validates "alertTextOk": "* Dieser Name ist verfügbar", // speaks by itself "alertTextLoad": "* Überprüfe Angaben, bitte warten" }, "validate2fields": { "alertText": "* Bitte HELLO eingeben" } }; } }; $.validationEngineLanguage.newLang(); })(jQuery); assets/js/languages/jquery.validationEngine-nl.js000066600000015621151373621660016216 0ustar00(function($){ $.fn.validationEngineLanguage = function(){ }; $.validationEngineLanguage = { newLang: function(){ $.validationEngineLanguage.allRules = { "required": { // Add your regex rules here, you can take telephone as an example "regex": "geen", "alertText": "* Dit veld is verplicht", "alertTextCheckboxMultiple": "* Selecteer a.u.b. een optie", "alertTextCheckboxe": "* Dit selectievakje is verplicht" }, "minSize": { "regex": "none", "alertText": "* Minimaal ", "alertText2": " karakters toegestaan" }, "maxSize": { "regex": "none", "alertText": "* Maximaal ", "alertText2": " karakters toegestaan" }, "min": { "regex": "none", "alertText": "* Minimale waarde is " }, "max": { "regex": "none", "alertText": "* Maximale waarde is " }, "past": { "regex": "none", "alertText": "* Datum voorafgaand aan " }, "future": { "regex": "none", "alertText": "* Datum na " }, "maxCheckbox": { "regex": "none", "alertText": "* Toegestane aantal vinkjes overschreden" }, "minCheckbox": { "regex": "none", "alertText": "* Selecteer a.u.b. ", "alertText2": " opties" }, "equals": { "regex": "none", "alertText": "* Velden komen niet overeen" }, "phone": { // credit: jquery.h5validate.js / orefalo "regex": /^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/, "alertText": "* Ongeldig telefoonnummer" }, "email": { // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "alertText": "* Ongeldig e-mailadres" }, "integer": { "regex": /^[\-\+]?\d+$/, "alertText": "* Ongeldig geheel getal" }, "number": { // Number, including positive, negative, and floating decimal. credit: orefalo "regex": /^[\-\+]?(([0-9]+)([\.,]([0-9]+))?|([\.,]([0-9]+))?)$/, "alertText": "* Ongeldig drijvende comma getal" }, "date": { "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, "alertText": "* Ongeldige datum, formaat moet JJJJ-MM-DD zijn" }, "ipv4": { "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, "alertText": "* Ongeldig IP-adres" }, "url": { "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/, "alertText": "* Ongeldige URL" }, "onlyNumberSp": { "regex": /^[0-9\ ]+$/, "alertText": "* Alleen cijfers" }, "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Alleen leestekens" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, "alertText": "* Geen vreemde tekens toegestaan" }, // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings "ajaxUserCall": { "url": "ajaxValidateFieldUser", // you may want to pass extra data on the ajax call "extraData": "name=eric", "alertText": "* Deze gebruiker bestaat al", "alertTextLoad": "* Bezig met valideren, even geduld aub" }, "ajaxNameCall": { // remote json service location "url": "ajaxValidateFieldName", // error "alertText": "* Deze naam bestaat al", // if you provide an "alertTextOk", it will show as a green prompt when the field validates "alertTextOk": "* Deze naam is beschikbaar", // speaks by itself "alertTextLoad": "* Bezig met valideren, even geduld aub" }, "validate2fields": { "alertText": "* Voer aub HELLO in" } }; } }; $.validationEngineLanguage.newLang(); })(jQuery); assets/js/languages/jquery.validationEngine-pt.js000066600000016234151373621660016231 0ustar00(function($){ $.fn.validationEngineLanguage = function(){ }; $.validationEngineLanguage = { newLang: function(){ $.validationEngineLanguage.allRules = { "required": { // Add your regex rules here, you can take telephone as an example "regex": "none", "alertText": "* Campo obrigatório", "alertTextCheckboxMultiple": "* Selecione uma opção", "alertTextCheckboxe": "* Campo obrigatório" }, "minSize": { "regex": "none", "alertText": "* Mínimo ", "alertText2": " carateres permitidos" }, "maxSize": { "regex": "none", "alertText": "* Máximo ", "alertText2": " carateres permitidos" }, "min": { "regex": "none", "alertText": "* O valor mínimo é " }, "max": { "regex": "none", "alertText": "* O valor máximo é " }, "past": { "regex": "none", "alertText": "* Data anterior a " }, "future": { "regex": "none", "alertText": "* Data posterior a " }, "maxCheckbox": { "regex": "none", "alertText": "* Foi ultrapassado o número máximo de escolhas" }, "minCheckbox": { "regex": "none", "alertText": "* Selecione ", "alertText2": " opções" }, "equals": { "regex": "none", "alertText": "* Os campos não correspondem" }, "phone": { // credit: jquery.h5validate.js / orefalo "regex": /^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/, "alertText": "* Número de telefone inválido" }, "email": { // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "alertText": "* Endereço de email inválido" }, "integer": { "regex": /^[\-\+]?\d+$/, "alertText": "* Não é um número inteiro" }, "number": { // Number, including positive, negative, and floating decimal. credit: orefalo "regex": /^[\-\+]?(([0-9]+)([\.,]([0-9]+))?|([\.,]([0-9]+))?)$/, "alertText": "* Não é um número decimal" }, "date": { "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, "alertText": "* Data inválida, o formato deve de ser AAAA-MM-DD" }, "ipv4": { "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, "alertText": "* Número IP inválido" }, "url": { "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/, "alertText": "* URL inválido" }, "onlyNumberSp": { "regex": /^[0-9\ ]+$/, "alertText": "* Só é permitido números" }, "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Só é permitido letras" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, "alertText": "* Só é permitido letras e números" }, // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings "ajaxUserCall": { "url": "ajaxValidateFieldUser", // you may want to pass extra data on the ajax call "extraData": "name=eric", "alertText": "* Nome de utilizador não disponível", "alertTextLoad": "* A validar, por favor aguarde" }, "ajaxNameCall": { // remote json service location "url": "ajaxValidateFieldName", // error "alertText": "* Nome não disponível", // if you provide an "alertTextOk", it will show as a green prompt when the field validates "alertTextOk": "* Nome disponível", // speaks by itself "alertTextLoad": "* A validar, por favor aguarde" }, "validate2fields": { "alertText": "* Escreva HELLO" } }; } }; $.validationEngineLanguage.newLang(); })(jQuery);assets/js/languages/jquery.validationEngine-ro.js000066600000016406151373621660016227 0ustar00(function($){ $.fn.validationEngineLanguage = function(){ }; $.validationEngineLanguage = { newLang: function(){ $.validationEngineLanguage.allRules = { "required": { // Add your regex rules here, you can take telephone as an example "regex": "none", "alertText": "* Acest camp este obligatoriu", "alertTextCheckboxMultiple": "* Selectati o optiune", "alertTextCheckboxe": "* Aceasta optiune este obligatorie" }, "minSize": { "regex": "none", "alertText": "* Minim ", "alertText2": " caractere permise" }, "maxSize": { "regex": "none", "alertText": "* Maxim ", "alertText2": " caractere permise" }, "min": { "regex": "none", "alertText": "* Valoarea minima este " }, "max": { "regex": "none", "alertText": "* Valoarea maxima este " }, "past": { "regex": "none", "alertText": "* Data inainte de " }, "future": { "regex": "none", "alertText": "* Data dupa " }, "maxCheckbox": { "regex": "none", "alertText": "* Limita maxima de optiuni a fost depasita" }, "minCheckbox": { "regex": "none", "alertText": "* Selectati cel putin ", "alertText2": " optiuni" }, "equals": { "regex": "none", "alertText": "* Campurile nu coincid" }, "phone": { // credit: jquery.h5validate.js / orefalo "regex": /^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/, "alertText": "* Numar de telefon eronat" }, "email": { // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "alertText": "* Adresa de email eronata" }, "integer": { "regex": /^[\-\+]?\d+$/, "alertText": "* Numar intreg eronat" }, "number": { // Number, including positive, negative, and floating decimal. credit: orefalo "regex": /^[\-\+]?(([0-9]+)([\.,]([0-9]+))?|([\.,]([0-9]+))?)$/, "alertText": "* Numar zecimal eronat" }, "date": { "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, "alertText": "* Data eronata, formatul de introducere este: YYYY-MM-DD" }, "ipv4": { "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, "alertText": "* Adresa IP eronata" }, "url": { "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/, "alertText": "* URL eronat" }, "onlyNumberSp": { "regex": /^[0-9\ ]+$/, "alertText": "* Doar numere" }, "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Doar litere" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, "alertText": "* Caracterele speciale (',', '.', '-', etc) nu sunt permise" }, // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings "ajaxUserCall": { "url": "ajaxValidateFieldUser", // you may want to pass extra data on the ajax call "extraData": "name=eric", "alertText": "* Acest nume de utilizator este deja folosit", "alertTextLoad": "* Se valideaza, va rugam asteptati" }, "ajaxNameCall": { // remote json service location "url": "ajaxValidateFieldName", // error "alertText": "* Acest nume este deja folosit", // if you provide an "alertTextOk", it will show as a green prompt when the field validates "alertTextOk": "* Acest nume este disponibil", // speaks by itself "alertTextLoad": "* Se valideaza, va rugam asteptati" }, "validate2fields": { "alertText": "* Introduceti: HELLO" } }; } }; $.validationEngineLanguage.newLang(); })(jQuery);assets/js/languages/index.html000066600000000000151373621660012431 0ustar00assets/js/languages/.htaccess000066600000000177151373621660012251 0ustar00 Order allow,deny Deny from all assets/js/languages/jquery.validationEngine-es.js000066600000016343151373621660016216 0ustar00 (function($){ $.fn.validationEngineLanguage = function(){ }; $.validationEngineLanguage = { newLang: function(){ $.validationEngineLanguage.allRules = { "required": { // Add your regex rules here, you can take telephone as an example "regex": "none", "alertText": "* Este campo es requerido", "alertTextCheckboxMultiple": "* Por favor selecciona una opción", "alertTextCheckboxe": "* Este checkbox está requerido" }, "minSize": { "regex": "none", "alertText": "* Mínimo de ", "alertText2": " caracteres autorizados" }, "maxSize": { "regex": "none", "alertText": "* Máximo de ", "alertText2": " caracteres autorizados" }, "min": { "regex": "none", "alertText": "* Valor mínimo es " }, "max": { "regex": "none", "alertText": "* Valor máximo es " }, "past": { "regex": "none", "alertText": "* Fecha anterior a " }, "future": { "regex": "none", "alertText": "* Fecha posterior a " }, "maxCheckbox": { "regex": "none", "alertText": "* Se ha excedido el número de opciones permitidas" }, "minCheckbox": { "regex": "none", "alertText": "* Por favor seleccione ", "alertText2": " opciones" }, "equals": { "regex": "none", "alertText": "* Los campos no coinciden" }, "phone": { // credit: jquery.h5validate.js / orefalo "regex": /^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/, "alertText": "* Número de teléfono inválido" }, "email": { // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "alertText": "* Correo inválido" }, "integer": { "regex": /^[\-\+]?\d+$/, "alertText": "* No es un valor entero válido" }, "number": { // Number, including positive, negative, and floating decimal. credit: orefalo "regex": /^[\-\+]?(([0-9]+)([\.,]([0-9]+))?|([\.,]([0-9]+))?)$/, "alertText": "* No es un valor decimal válido" }, "date": { "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, "alertText": "* Fecha inválida, por favor utilize el formato AAAA-MM-DD" }, "ipv4": { "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, "alertText": "* Direccion IP inválida" }, "url": { "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/, "alertText": "* URL Inválida" }, "onlyNumberSp": { "regex": /^[0-9\ ]+$/, "alertText": "* Sólo números" }, "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Sólo letras" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, "alertText": "* No se permiten caracteres especiales" }, // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings "ajaxUserCall": { "url": "ajaxValidateFieldUser", // you may want to pass extra data on the ajax call "extraData": "name=eric", "alertTextLoad": "* Cargando, espere por favor", "alertText": "* Este nombre de usuario ya se encuentra usado" }, "ajaxNameCall": { // remote json service location "url": "ajaxValidateFieldName", // error "alertText": "* Este nombre ya se encuentra usado", // if you provide an "alertTextOk", it will show as a green prompt when the field validates "alertTextOk": "* Este nombre está disponible", // speaks by itself "alertTextLoad": "* Cargando, espere por favor" }, "validate2fields": { "alertText": "* Por favor entrar HELLO" } }; } }; $.validationEngineLanguage.newLang(); })(jQuery); assets/js/languages/jquery.validationEngine-ja.js000066600000020076151373621660016177 0ustar00;/***************************************************************** * Japanese language file for jquery.validationEngine.js (ver2.0) * * Transrator: tomotomo ( Tomoyuki SUGITA ) * http://tomotomoSnippet.blogspot.com/ * Licenced under the MIT Licence *******************************************************************/ (function($){ $.fn.validationEngineLanguage = function(){ }; $.validationEngineLanguage = { newLang: function(){ $.validationEngineLanguage.allRules = { "required": { // Add your regex rules here, you can take telephone as an example "regex": "none", "alertText": "* 必須項目です", "alertTextCheckboxMultiple": "* 選択してください", "alertTextCheckboxe": "* チェックボックスをチェックしてください" }, "minSize": { "regex": "none", "alertText": "* ", "alertText2": "文字以上にしてください" }, "maxSize": { "regex": "none", "alertText": "* ", "alertText2": "文字以下にしてください" }, "min": { "regex": "none", "alertText": "* ", "alertText2": " 以上の数値にしてください" }, "max": { "regex": "none", "alertText": "* ", "alertText2": " 以下の数値にしてください" }, "past": { "regex": "none", "alertText": "* ", "alertText2": " より過去の日付にしてください" }, "future": { "regex": "none", "alertText": "* ", "alertText2": " より最近の日付にしてください" }, "maxCheckbox": { "regex": "none", "alertText": "* チェックしすぎです" }, "minCheckbox": { "regex": "none", "alertText": "* ", "alertText2": "つ以上チェックしてください" }, "equals": { "regex": "none", "alertText": "* 入力された値が一致しません" }, "phone": { // credit: jquery.h5validate.js / orefalo "regex": /^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/, "alertText": "* 電話番号が正しくありません" }, "email": { // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "alertText": "* メールアドレスが正しくありません" }, "integer": { "regex": /^[\-\+]?\d+$/, "alertText": "* 整数を半角で入力してください" }, "number": { // Number, including positive, negative, and floating decimal. credit: orefalo "regex": /^[\-\+]?(([0-9]+)([\.,]([0-9]+))?|([\.,]([0-9]+))?)$/, "alertText": "* 数値を半角で入力してください" }, "date": { "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, "alertText": "* 日付は半角で YYYY-MM-DD の形式で入力してください" }, "ipv4": { "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, "alertText": "* IPアドレスが正しくありません" }, "url": { "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/, "alertText": "* URLが正しくありません" }, "onlyNumberSp": { "regex": /^[0-9\ ]+$/, "alertText": "* 半角数字で入力してください" }, "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* 半角アルファベットで入力してください" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, "alertText": "* 半角英数で入力してください" }, // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings "ajaxUserCall": { "url": "ajaxValidateFieldUser", // you may want to pass extra data on the ajax call "extraData": "name=eric", "alertText": "* This user is already taken", "alertTextLoad": "* Validating, please wait" }, "ajaxNameCall": { // remote json service location "url": "ajaxValidateFieldName", // error "alertText": "* This name is already taken", // if you provide an "alertTextOk", it will show as a green prompt when the field validates "alertTextOk": "* This name is available", // speaks by itself "alertTextLoad": "* Validating, please wait" }, "validate2fields": { "alertText": "* 『HELLO』と入力してください" } }; } }; $.validationEngineLanguage.newLang(); })(jQuery); assets/js/languages/jquery.validationEngine-da.js000066600000016522151373621660016172 0ustar00(function($){ $.fn.validationEngineLanguage = function(){ }; $.validationEngineLanguage = { newLang: function(){ $.validationEngineLanguage.allRules = { "required": { // Add your regex rules here, you can take telephone as an example "regex": "none", "alertText": "* Dette felt kræves udfyldt", "alertTextCheckboxMultiple": "* Vælg venligst en af mulighederne", "alertTextCheckboxe": "* Dette felt er krævet" }, "minSize": { "regex": "none", "alertText": "* Minimum ", "alertText2": " tegn tilladt" }, "maxSize": { "regex": "none", "alertText": "* Maksimum ", "alertText2": " tegn tilladt" }, "min": { "regex": "none", "alertText": "* Den mindste værdi er " }, "max": { "regex": "none", "alertText": "* Den maksimale værdi er " }, "past": { "regex": "none", "alertText": "* Datoen skal være før " }, "future": { "regex": "none", "alertText": "* Datoen skal være efter " }, "maxCheckbox": { "regex": "none", "alertText": "* Antallet af valg overskredet" }, "minCheckbox": { "regex": "none", "alertText": "* Vælg venligst ", "alertText2": " muligheder" }, "equals": { "regex": "none", "alertText": "* Felterne er ikke ens" }, "phone": { // credit: jquery.h5validate.js / orefalo "regex": /^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/, "alertText": "* Ikke gyldig telefonnummer" }, "email": { // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "alertText": "* Ikke gyldig e-mail" }, "integer": { "regex": /^[\-\+]?\d+$/, "alertText": "* Ikke et korrekt tal" }, "number": { // Number, including positive, negative, and floating decimal. credit: orefalo "regex": /^[\-\+]?(([0-9]+)([\.,]([0-9]+))?|([\.,]([0-9]+))?)$/, "alertText": "* Ugyldig decimaltal" }, "date": { "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, "alertText": "* Ugyldig dato, skal være i formatet ÅÅÅÅ-MM-DD" }, "ipv4": { "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, "alertText": "* Ugyldig IP adresse" }, "url": { "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/, "alertText": "* Ugyldig URL" }, "onlyNumberSp": { "regex": /^[0-9\ ]+$/, "alertText": "* Kun tal" }, "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Kun bogstaver" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, "alertText": "* Ingen specialtegn tilladt" }, // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings "ajaxUserCall": { "url": "ajaxValidateFieldUser", // you may want to pass extra data on the ajax call "extraData": "name=eric", "alertText": "* Denne bruger er allerede taget", "alertTextLoad": "* Kontrollere, vent venligst" }, "ajaxNameCall": { // remote json service location "url": "ajaxValidateFieldName", // error "alertText": "* Dette navn er allerede taget", // if you provide an "alertTextOk", it will show as a green prompt when the field validates "alertTextOk": "* Dette navn er ledig", // speaks by itself "alertTextLoad": "* Kontrollere, vent venligst" }, "validate2fields": { "alertText": "* Indsæt venligst HELLO" } }; } }; $.validationEngineLanguage.newLang(); })(jQuery);assets/js/languages/jquery.validationEngine-en.js000066600000020346151373621660016207 0ustar00(function($){ $.fn.validationEngineLanguage = function(){ }; $.validationEngineLanguage = { newLang: function(){ $.validationEngineLanguage.allRules = { "required": { // Add your regex rules here, you can take telephone as an example "regex": "none", "alertText": "* This field is required", "alertTextCheckboxMultiple": "* Please select an option", "alertTextCheckboxe": "* This checkbox is required" }, "minSize": { "regex": "none", "alertText": "* Minimum ", "alertText2": " characters allowed" }, "maxSize": { "regex": "none", "alertText": "* Maximum ", "alertText2": " characters allowed" }, "min": { "regex": "none", "alertText": "* Minimum value is " }, "max": { "regex": "none", "alertText": "* Maximum value is " }, "past": { "regex": "none", "alertText": "* Date prior to " }, "future": { "regex": "none", "alertText": "* Date past " }, "maxCheckbox": { "regex": "none", "alertText": "* Maximum ", "alertText2": " options allowed" }, "minCheckbox": { "regex": "none", "alertText": "* Please select ", "alertText2": " options" }, "equals": { "regex": "none", "alertText": "* Fields do not match" }, "phone": { // credit: jquery.h5validate.js / orefalo "regex": /^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/, "alertText": "* Invalid phone number" }, "email": { // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "alertText": "* Invalid email address" }, "integer": { "regex": /^[\-\+]?\d+$/, "alertText": "* Not a valid integer" }, "number": { // Number, including positive, negative, and floating decimal. credit: orefalo "regex": /^[\-\+]?(([0-9]+)([\.,]([0-9]+))?|([\.,]([0-9]+))?)$/, "alertText": "* Invalid floating decimal number" }, "date": { "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, "alertText": "* Invalid date, must be in YYYY-MM-DD format" }, "ipv4": { "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, "alertText": "* Invalid IP address" }, "url": { "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/, "alertText": "* Invalid URL" }, "onlyNumberSp": { "regex": /^[0-9\ ]+$/, "alertText": "* Numbers only" }, "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Letters only" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, "alertText": "* No special characters allowed" }, // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings "ajaxUserCall": { "url": "ajaxValidateFieldUser", // you may want to pass extra data on the ajax call "extraData": "name=eric", "alertText": "* This user is already taken", "alertTextLoad": "* Validating, please wait" }, "ajaxUserCallPhp": { "url": "phpajax/ajaxValidateFieldUser.php", // you may want to pass extra data on the ajax call "extraData": "name=eric", // if you provide an "alertTextOk", it will show as a green prompt when the field validates "alertTextOk": "* This username is available", "alertText": "* This user is already taken", "alertTextLoad": "* Validating, please wait" }, "ajaxNameCall": { // remote json service location "url": "ajaxValidateFieldName", // error "alertText": "* This name is already taken", // if you provide an "alertTextOk", it will show as a green prompt when the field validates "alertTextOk": "* This name is available", // speaks by itself "alertTextLoad": "* Validating, please wait" }, "ajaxNameCallPhp": { // remote json service location "url": "phpajax/ajaxValidateFieldName.php", // error "alertText": "* This name is already taken", // speaks by itself "alertTextLoad": "* Validating, please wait" }, "validate2fields": { "alertText": "* Please input HELLO" } }; } }; $.validationEngineLanguage.newLang(); })(jQuery);assets/js/languages/jquery.validationEngine-fr.js000066600000016574151373621660016224 0ustar00(function($){ $.fn.validationEngineLanguage = function(){ }; $.validationEngineLanguage = { newLang: function(){ $.validationEngineLanguage.allRules = { "required": { "regex": "none", "alertText": "* Ce champs est requis", "alertTextCheckboxMultiple": "* Choisir une option", "alertTextCheckboxe": "* Cette option est requise" }, "minSize": { "regex": "none", "alertText": "* Minimum ", "alertText2": " caracteres requis" }, "maxSize": { "regex": "none", "alertText": "* Maximum ", "alertText2": " caracteres requis" }, "min": { "regex": "none", "alertText": "* Valeur minimum requise " }, "max": { "regex": "none", "alertText": "* Valeur maximum requise " }, "past": { "regex": "none", "alertText": "* Date antérieure au " }, "future": { "regex": "none", "alertText": "* Date postérieure au " }, "maxCheckbox": { "regex": "none", "alertText": "* Nombre max de choix excédé" }, "minCheckbox": { "regex": "none", "alertText": "* Veuillez choisir ", "alertText2": " options" }, "equals": { "regex": "none", "alertText": "* Votre champs n'est pas identique" }, "phone": { // credit: jquery.h5validate.js / orefalo "regex": /^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/, "alertText": "* Numéro de téléphone invalide" }, "email": { // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "alertText": "* Adresse email invalide" }, "integer": { "regex": /^[\-\+]?\d+$/, "alertText": "* Nombre entier invalide" }, "number": { // Number, including positive, negative, and floating decimal. credit: orefalo "regex": /^[\-\+]?(([0-9]+)([\.,]([0-9]+))?|([\.,]([0-9]+))?)$/, "alertText": "* Nombre flottant invalide" }, "date": { "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, "alertText": "* Date invalide, format YYYY-MM-DD requis" }, "ipv4": { "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, "alertText": "* Adresse IP invalide" }, "url": { "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/, "alertText": "* URL invalide" }, "onlyNumberSp": { "regex": /^[0-9\ ]+$/, "alertText": "* Seules les chiffres sont acceptées" }, "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Seules les lettres sont acceptées" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, "alertText": "* Aucun caractère spécial n'est accepté" }, // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings "ajaxUserCall": { "url": "ajaxValidateFieldUser", "extraData": "name=eric", "alertTextLoad": "* Chargement, veuillez attendre", "alertText": "* Ce nom est déjà pris" }, "ajaxNameCall": { "url": "ajaxValidateFieldName", "alertText": "* Ce nom est déjà pris", "alertTextOk": "*Ce nom est disponible", "alertTextLoad": "* Chargement, veuillez attendre" }, "validate2fields": { "alertText": "Veuillez taper le mot HELLO" }, "time": { "regex": /^([1-9]|1[0-2]):[0-5]\d$/, "alertText": "* Veuillez saisir une heurre sous la forme HH-MM" }, "shortText": { "regex": /^[0-9a-zA-Z]+$/, "alertText": "* Maximum de 255 caractère ", "alertText2": "* sans Balise HTML " } }; } }; $.validationEngineLanguage.newLang(); })(jQuery); assets/js/languages/jquery.validationEngine-pl.js000066600000017314151373621660016221 0ustar00(function($){ $.fn.validationEngineLanguage = function(){ }; $.validationEngineLanguage = { newLang: function(){ $.validationEngineLanguage.allRules = { "required": { // Add your regex rules here, you can take telephone as an example "regex": "none", "alertText": "* Pole wymagane", "alertTextCheckboxMultiple": "* Proszę wybrać opcję", "alertTextCheckboxe": "* Pole wymagane" }, "minSize": { "regex": "none", "alertText": "* Minimalna liczba znaków to ", "alertText2": "" }, "maxSize": { "regex": "none", "alertText": "* Maksymalna liczba znaków to ", "alertText2": "" }, "min": { "regex": "none", "alertText": "* Najmniejsza wartość to " }, "max": { "regex": "none", "alertText": "* Największa wartość to " }, "past": { "regex": "none", "alertText": "* Data musi być wcześniejsza niż " }, "future": { "regex": "none", "alertText": "* Data musi być późniejsza niż " }, "maxCheckbox": { "regex": "none", "alertText": "* Przekroczona maksymalna liczba opcji" }, "minCheckbox": { "regex": "none", "alertText": "* Minimalna liczba opcji to ", "alertText2": "" }, "equals": { "regex": "none", "alertText": "* Pola nie są jednakowe" }, "phone": { // credit: jquery.h5validate.js / orefalo "regex": /^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/, "alertText": "* Nieprawidłowy numer telefonu" }, "email": { // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "alertText": "* Nieprawidłowy adres e-mail" }, "integer": { "regex": /^[\-\+]?\d+$/, "alertText": "* Nieprawidłowa liczba całkowita" }, "number": { // Number, including positive, negative, and floating decimal. credit: orefalo "regex": /^[\-\+]?(([0-9]+)([\.,]([0-9]+))?|([\.,]([0-9]+))?)$/, "alertText": "* Nieprawidłowa liczba dziesiętna" }, "CZdate": { // Date in Polish format, regex taken from Czech translation "regex": /^(0[1-9]|[12][0-9]|3[01])[. /.](0[1-9]|1[012])[. /.](19|20)\d{2}$/, "alertText": "* Data musi być w postaci DD.MM.RRRR" }, "date": { "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, "alertText": "* Data musi być w postaci RRRR-MM-DD" }, "ipv4": { "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, "alertText": "* Nieprawidłowy adres IP" }, "url": { "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/, "alertText": "* Nieprawidłowy adres internetowy" }, "onlyNumberSp": { "regex": /^[0-9\ ]+$/, "alertText": "* Tylko liczby" }, "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Tylko litery" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, "alertText": "* Tylko litery i liczby" }, // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings "ajaxUserCall": { "url": "ajaxValidateFieldUser", // you may want to pass extra data on the ajax call "extraData": "name=eric", "alertText": "* Nazwa użytkownika jest już zajęta", "alertTextLoad": "* Walidacja, proszę czekać" }, "ajaxNameCall": { // remote json service location "url": "ajaxValidateFieldName", // error "alertText": "* Nazwa jest już zajęta", // if you provide an "alertTextOk", it will show as a green prompt when the field validates "alertTextOk": "* Nazwa jest dostępna", // speaks by itself "alertTextLoad": "* Walidacja, proszę czekać" }, "validate2fields": { "alertText": "* Proszę wpisać HELLO" } }; } }; $.validationEngineLanguage.newLang(); })(jQuery); assets/js/languages/jquery.validationEngine-it.js000066600000014564151373621660016226 0ustar00(function($){ $.fn.validationEngineLanguage = function(){}; $.validationEngineLanguage = { newLang: function(){ $.validationEngineLanguage.allRules = { "required": { // Add your regex rules here, you can take telephone as an example "regex": "none", "alertText": "* Campo richiesto", "alertTextCheckboxMultiple": "* Per favore selezionare un'opzione", "alertTextCheckboxe": "* E' richiesta la selezione della casella" }, "length": { "regex": "none", "alertText": "* Fra ", "alertText2": " e ", "alertText3": " caratteri permessi" }, "maxCheckbox": { "regex": "none", "alertText": "* Numero di caselle da selezionare in eccesso" }, "minCheckbox": { "regex": "none", "alertText": "* Per favore selezionare ", "alertText2": " opzioni" }, "equals": { "regex": "none", "alertText": "* I campi non corrispondono" }, "phone": { // credit: jquery.h5validate.js / orefalo "regex": /^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/, "alertText": "* Numero di telefono non corretto" }, "email": { // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "alertText": "* Indirizzo non corretto" }, "integer": { "regex": /^[\-\+]?\d+$/, "alertText": "* Numero intero non corretto" }, "number": { // Number, including positive, negative, and floating decimal. Credit: bassistance "regex": /^[\-\+]?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)$/, "alertText": "* Numero decimale non corretto" }, "date": { "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, "alertText": "* Data non corretta, re-inserire secondo formato AAAA-MM-GG" }, "ipv4": { "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, "alertText": "* IP non corretto" }, "url": { "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/, "alertText": "* URL non corretta" }, "onlyNumber": { "regex": /^[0-9\ ]+$/, "alertText": "* Solo numeri" }, "onlyLetter": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Solo lettere" }, "validate2fields": { "nname": "validate2fields", "alertText": "* Occorre inserire nome e cognome" }, "noSpecialCharacters": { "regex": /^[0-9a-zA-Z]+$/, "alertText": "* Caratteri speciali non permessi" }, "ajaxUserCall": { "file": "ajaxValidateFieldName", "extraData": "name=eric", "alertTextLoad": "* Caricamento, attendere per favore", "alertText": "* Questo user � gi� stato utilizzato" }, "ajaxNameCall": { "file": "ajaxValidateFieldName", "alertText": "* Questo nome � gi� stato utilizzato", "alertTextOk": "* Questo nome � disponibile", "alertTextLoad": "* Caricamento, attendere per favore" } }; } }; $.validationEngineLanguage.newLang(); })(jQuery);assets/js/languages/jquery.validationEngine-ru.js000066600000017335151373621660016237 0ustar00(function($){ $.fn.validationEngineLanguage = function(){ }; $.validationEngineLanguage = { newLang: function(){ $.validationEngineLanguage.allRules = { "required": { // Add your regex rules here, you can take telephone as an example "regex": "none", "alertText": "* Необходимо заполнить", "alertTextCheckboxMultiple": "* Вы должны выбрать вариант", "alertTextCheckboxe": "* Необходимо отметить" }, "minSize": { "regex": "none", "alertText": "* Минимум ", "alertText2": " символа(ов)" }, "maxSize": { "regex": "none", "alertText": "* Максимум ", "alertText2": " символа(ов)" }, "min": { "regex": "none", "alertText": "* Минимальное значение " }, "max": { "regex": "none", "alertText": "* Максимальное значение " }, "past": { "regex": "none", "alertText": "* Дата до " }, "future": { "regex": "none", "alertText": "* Дата от " }, "maxCheckbox": { "regex": "none", "alertText": "* Нельзя выбрать столько вариантов" }, "minCheckbox": { "regex": "none", "alertText": "* Пожалуйста, выберите ", "alertText2": " опцию(ии)" }, "equals": { "regex": "none", "alertText": "* Поля не совпадают" }, "phone": { // credit: jquery.h5validate.js / orefalo "regex": /^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/, "alertText": "* Неправильный формат телефона" }, "email": { // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "alertText": "* Неверный формат email" }, "integer": { "regex": /^[\-\+]?\d+$/, "alertText": "* Не целое число" }, "number": { // Number, including positive, negative, and floating decimal. credit: orefalo "regex": /^[\-\+]?(([0-9]+)([\.,]([0-9]+))?|([\.,]([0-9]+))?)$/, "alertText": "* Неправильное число с плавающей точкой" }, "date": { "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, "alertText": "* Неправильная дата (должно быть в ДД.MM.ГГГГ формате)" }, "ipv4": { "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, "alertText": "* Неправильный IP-адрес" }, "url": { "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/, "alertText": "* Неправильный URL" }, "onlyNumberSp": { "regex": /^[0-9\ ]+$/, "alertText": "* Только числа" }, "onlyLetterSp": { "regex": /^[a-zA-Z\u0400-\u04FF\ \']+$/, "alertText": "* Только буквы" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z\u0400-\u04FF]+$/, "alertText": "* Запрещены специальные символы" }, // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings "ajaxUserCall": { "url": "ajaxValidateFieldUser", // you may want to pass extra data on the ajax call "extraData": "name=eric", "alertText": "* Этот пользователь уже занят", "alertTextLoad": "* Проверка, подождите..." }, "ajaxNameCall": { // remote json service location "url": "ajaxValidateFieldName", // error "alertText": "* Это имя уже занято", // if you provide an "alertTextOk", it will show as a green prompt when the field validates "alertTextOk": "* Это имя доступно", // speaks by itself "alertTextLoad": "* Проверка, подождите..." }, "validate2fields": { "alertText": "* Пожалуйста, введите HELLO" } }; } }; $.validationEngineLanguage.newLang(); })(jQuery); assets/js/languages/jquery.validationEngine-tr.js000066600000020740151373621660016230 0ustar00(function($){ $.fn.validationEngineLanguage = function(){ }; $.validationEngineLanguage = { newLang: function(){ $.validationEngineLanguage.allRules = { "required": { // Add your regex rules here, you can take telephone as an example "regex": "none", "alertText": "* Bu alan zorunludur", "alertTextCheckboxMultiple": "* Lütfen bir seçeneği işaretleyiniz", "alertTextCheckboxe": "* Bu onay kutusu zorunludur" }, "minSize": { "regex": "none", "alertText": "* Bu alana en az ", "alertText2": " karakter girmelisiniz " }, "maxSize": { "regex": "none", "alertText": "* Bu alana en fazla ", "alertText2": " karakter girebilirsiniz" }, "min": { "regex": "none", "alertText": "* Geçerli en küçük değer: " }, "max": { "regex": "none", "alertText": "* Geçerli en yüksek değer: " }, "past": { "regex": "none", "alertText": "* Lütfen ", "alertText2": " tarihinden daha ileri bir tarih giriniz " }, "future": { "regex": "none", "alertText": "* Lütfen ", "alertText2": " tarihinden daha geri bir tarih giriniz " }, "maxCheckbox": { "regex": "none", "alertText": "* En fazla ", "alertText2": " onay kutusu işaretleyebilirsiniz" }, "minCheckbox": { "regex": "none", "alertText": "* Lütfen en az ", "alertText2": " onay kutusunu işaretleyiniz" }, "equals": { "regex": "none", "alertText": "* Değerler aynı olmalı" }, "phone": { // credit: jquery.h5validate.js / orefalo "regex": /^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/, "alertText": "* Geçersiz telefon numarası" }, "email": { // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "alertText": "* Geçersiz eposta adresi" }, "integer": { "regex": /^[\-\+]?\d+$/, "alertText": "* Geçerli bir tam sayı değil" }, "number": { // Number, including positive, negative, and floating decimal. credit: orefalo "regex": /^[\-\+]?(([0-9]+)([\.,]([0-9]+))?|([\.,]([0-9]+))?)$/, "alertText": "* Geçerli bir noktalı sayı değil" }, "date": { "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, "alertText": "* Geçersiz tarih. Tarih YYYY-MM-DD formatında olmalı" }, "ipv4": { "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, "alertText": "* Geçersiz IP adresi" }, "url": { "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/, "alertText": "* Geçersiz URL" }, "onlyNumberSp": { "regex": /^[0-9\ ]+$/, "alertText": "* Bu alanda sadece rakam olmalı" }, "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Bu alanda sadece harf olmalı" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, "alertText": "* Bu alanda özel karakterler olamaz" }, // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings "ajaxUserCall": { "url": "ajaxValidateFieldUser", // you may want to pass extra data on the ajax call "extraData": "name=eric", "alertText": "* Bu kullanıcı adı kullanımda", "alertTextLoad": "* Doğrulanıyor, lütfen bekleyiniz" }, "ajaxUserCallPhp": { "url": "phpajax/ajaxValidateFieldUser.php", // you may want to pass extra data on the ajax call "extraData": "name=eric", // if you provide an "alertTextOk", it will show as a green prompt when the field validates "alertTextOk": "* Bu kullanıcı adını kullanabilirsiniz", "alertText": "* Bu kullanıcı adı kullanımda", "alertTextLoad": "* Doğrulanıyor, lütfen bekleyiniz" }, "ajaxNameCall": { // remote json service location "url": "ajaxValidateFieldName", // error "alertText": "* Bu isim kullanımda", // if you provide an "alertTextOk", it will show as a green prompt when the field validates "alertTextOk": "* Bu isim kullanılabilir", // speaks by itself "alertTextLoad": "* Doğrulanıyor, lütfen bekleyiniz" }, "ajaxNameCallPhp": { // remote json service location "url": "phpajax/ajaxValidateFieldName.php", // error "alertText": "* Bu isim kullanımda", // speaks by itself "alertTextLoad": "* Doğrulanıyor, lütfen bekleyiniz" }, "validate2fields": { "alertText": "* Lütfen 'HELLO' yazın" } }; } }; $.validationEngineLanguage.newLang(); })(jQuery);assets/js/languages/jquery.validationEngine-cz.js000066600000020677151373621660016230 0ustar00(function($){ $.fn.validationEngineLanguage = function(){ }; $.validationEngineLanguage = { newLang: function(){ $.validationEngineLanguage.allRules = { "required": { // Add your regex rules here, you can take telephone as an example "regex": "none", "alertText": "* Tato položka je povinná", "alertTextCheckboxMultiple": "* Prosím vyberte jednu možnost", "alertTextCheckboxe": "* Tato položka je povinná" }, "minSize": { "regex": "none", "alertText": "* Minimálně ", "alertText2": " znaky" }, "maxSize": { "regex": "none", "alertText": "* Maximálně ", "alertText2": " znaky" }, "min": { "regex": "none", "alertText": "* Minimální hodnota je " }, "max": { "regex": "none", "alertText": "* Maximální hodnota je " }, "past": { "regex": "none", "alertText": "* Date prior to " }, "future": { "regex": "none", "alertText": "* Date past " }, "maxCheckbox": { "regex": "none", "alertText": "* Počet vybraných položek přesáhl limit" }, "minCheckbox": { "regex": "none", "alertText": "* Prosím vyberte ", "alertText2": " volbu" }, "equals": { "regex": "none", "alertText": "* Pole se neshodují" }, "CZphone": { // telefoní číslo "regex": /^([\+][0-9]{1,3}[ \.\-])([0-9]{3}[\-][0-9]{3}[\-][0-9]{3})$/, "alertText": "* Neplatné telefoní číslo, zadejte ve formátu +420 598-598-895" }, "phone": { // credit: jquery.h5validate.js / orefalo "regex": /^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/, "alertText": "* Invalid phone number" }, "email": { // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "alertText": "* Neplatná emailová adresa" }, "integer": { "regex": /^[\-\+]?\d+$/, "alertText": "* Zadejte pouze čísla" }, "number": { // Number, including positive, negative, and floating decimal. credit: orefalo "regex": /^[\-\+]?(([0-9]+)([\.,]([0-9]+))?|([\.,]([0-9]+))?)$/, "alertText": "* Neplatné číslo" }, "CZdate": { // datum ve formátu jak se používá v čr "regex": /^(0[1-9]|[12][0-9]|3[01])[. /.](0[1-9]|1[012])[. /.](19|20)\d{2}$/, "alertText": "* Neplatné datum, datum musí být ve formátu den.měsíc.rok (dd.mm.rrrr)" }, "date": { // Date in ISO format. Credit: bassistance "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, "alertText": "* Neplatné datum, datum musí být ve formátu YYYY-MM-DD" }, "ipv4": { "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, "alertText": "* Neplatná IP adresa" }, //česká syntaxe pro rodné číslo "rc": { "regex": /^\d{2}((0[1-9]|1[012])|(5[1-9]|6[012]))(0[1-9]|[12][0-9]|3[01])\/([0-9]{2,4})$/, "alertText": "* Neplatné rodné číslo, tvar musí být 895431/4567" }, //poštovní směrovací číslo "psc": { "regex": /^\d{3}[ \.\-]\d{2}$/, "alertText": "* Neplatné poštovní směrovací číslo, tvar musí být 456 45" }, "url": { "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/, "alertText": "* Neplatný odkaz" }, "onlyNumberSp": { "regex": /^[0-9\ ]+$/, "alertText": "* Pouze čísla" }, "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Pouze písmena" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, "alertText": "* Pouze písmena a číslice" }, // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings "ajaxUserCall": { "url": "ajaxValidateFieldUser", // you may want to pass extra data on the ajax call "extraData": "name=eric", "alertText": "* Uživatelské jméno je již použito", "alertTextLoad": "* Ověřování, prosím čekejte" }, "ajaxNameCall": { // remote json service location "url": "ajaxValidateFieldName", // error "alertText": "* Uživatelské jméno je již použito", // if you provide an "alertTextOk", it will show as a green prompt when the field validates "alertTextOk": "* Toto jméno je k dispozici", // speaks by itself "alertTextLoad": "* Ověřování, prosím čekejte" }, "validate2fields": { "alertText": "* Prosím napište HELLO" } }; } }; $.validationEngineLanguage.newLang(); })(jQuery); assets/js/jquery.validation.js000066600000012632151373621660012512 0ustar00/* $(function(){ // jQuery DOM ready function. var myForm = $("#my_form"); myForm.validation(); // We can check if the form is valid on // demand, using our validate function. $("#test").click(function() { if(!myForm.validate()) { alert("oh noes.. error!"); } }); }); */ // exemple to add new rules // $.Validation.addRule("test",{ // check: function(value) { // if(value != "test") { // return false; // } // return true; // }, // msg : "Must equal to the word test." // }); (function($) { /* Validation Singleton */ var Validation = function() { var rules = { email : { check: function(value) { if(value) return testPattern(value,"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])"); return true; }, msg : "Enter a valid e-mail address." }, url : { check : function(value) { if(value) return testPattern(value,"^https?://(.+\.)+.{2,4}(/.*)?$"); return true; }, msg : "Enter a valid URL." }, required : { check: function(value) { if(value) return true; else return false; }, msg : "This field is required." } } var testPattern = function(value, pattern) { var regExp = new RegExp(pattern,""); return regExp.test(value); } return { addRule : function(name, rule) { rules[name] = rule; }, getRule : function(name) { return rules[name]; } } } /* Form factory */ var Form = function(form) { var fields = []; form.find("[validation]").each(function() { var field = $(this); if(field.attr('validation') !== undefined) { fields.push(new Field(field)); } }); this.fields = fields; } Form.prototype = { validate : function() { for(field in this.fields) { this.fields[field].validate(); } }, isValid : function() { for(field in this.fields) { if(!this.fields[field].valid) { this.fields[field].field.focus(); return false; } } return true; } } /* Field factory */ var Field = function(field) { this.field = field; this.valid = false; this.attach("change"); } Field.prototype = { attach : function(event) { var obj = this; if(event == "change") { obj.field.bind("change",function() { return obj.validate(); }); } if(event == "keyup") { obj.field.bind("keyup",function(e) { return obj.validate(); }); } }, validate : function() { var obj = this, field = obj.field, errorClass = "errorlist", errorlist = $(document.createElement("ul")).addClass(errorClass), types = field.attr("validation").split(" "), container = field.parent(), errors = []; field.next(".errorlist").remove(); for (var type in types) { var rule = $.Validation.getRule(types[type]); if(!rule.check(field.val())) { container.addClass("error"); errors.push(rule.msg); } } if(errors.length) { obj.field.unbind("keyup") obj.attach("keyup"); field.after(errorlist.empty()); for(error in errors) { errorlist.append("
        • "+ errors[error] +"
        • "); } obj.valid = false; } else { errorlist.remove(); container.removeClass("error"); obj.valid = true; } } } /* Validation extends jQuery prototype */ $.extend($.fn, { validation : function() { var validator = new Form($(this)); $.data($(this)[0], 'validator', validator); $(this).bind("submit", function(e) { validator.validate(); if(!validator.isValid()) { e.preventDefault(); } }); }, validate : function() { var validator = $.data($(this)[0], 'validator'); validator.validate(); return validator.isValid(); } }); $.Validation = new Validation(); })(jQuery);views/manufacturer/metadata.xml000066600000000317151373621660012716 0ustar00 views/manufacturer/view.html.php000066600000005712151373621660013046 0ustar00getPathway(); if (!class_exists('VmImage')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'image.php'); $virtuemart_manufacturer_id = JRequest::getInt('virtuemart_manufacturer_id', 0); $mf_category_id = JRequest::getInt('mf_category_id', 0); // get necessary models $model = VmModel::getModel('manufacturer'); if ($virtuemart_manufacturer_id !=0 ) { $manufacturer = $model->getManufacturer(); $model->addImages($manufacturer,1); $manufacturerImage = $manufacturer->images[0]->displayMediaThumb('class="manufacturer-image"',false); if (VmConfig::get('enable_content_plugin', 0)) { if(!class_exists('shopFunctionsF'))require(JPATH_VM_SITE.DS.'helpers'.DS.'shopfunctionsf.php'); shopFunctionsF::triggerContentPlugin($manufacturer, 'manufacturer','mf_desc'); } $document->setTitle(JText::_('COM_VIRTUEMART_MANUFACTURER_DETAILS').' '.strip_tags($manufacturer->mf_name)); //added so that the canonical points to page with visible products thx to P2Peter $document->addHeadLink( JRoute::_('index.php?option=com_virtuemart&view=category&virtuemart_manufacturer_id='.$virtuemart_manufacturer_id, FALSE) , 'canonical', 'rel', '' ); $this->assignRef('manufacturerImage', $manufacturerImage); // $this->assignRef('manufacturerProductsURL', $manufacturerProductsURL); $this->assignRef('manufacturer', $manufacturer); $pathway->addItem(strip_tags($manufacturer->mf_name)); $this->setLayout('details'); // vmdebug('$manufacturer',$manufacturer); } else { $document->setTitle(JText::_('COM_VIRTUEMART_MANUFACTURER_PAGE')) ; $manufacturers = $model->getManufacturers(true, true, true); $model->addImages($manufacturers,1); $this->assignRef('manufacturers', $manufacturers); $this->setLayout('default'); } parent::display($tpl); } } // pure php no closing tag views/manufacturer/.htaccess000066600000000177151373621660012216 0ustar00 Order allow,deny Deny from all views/manufacturer/tmpl/index.html000066600000000001151373621660013353 0ustar00 views/manufacturer/tmpl/default.php000066600000005760151373621660013534 0ustar00
          '; // Lets output the categories, if there are some if (!empty($this->manufacturers)) { ?>
          manufacturers as $manufacturer ) { // Show the horizontal seperator if ($iColumn == 1 && $iManufacturer > $manufacturerPerRow) { echo $horizontalSeparator; } // this is an indicator wether a row needs to be opened or not if ($iColumn == 1) { ?>
          virtuemart_manufacturer_id, FALSE); $manufacturerIncludedProductsURL = JRoute::_('index.php?option=com_virtuemart&view=category&virtuemart_manufacturer_id=' . $manufacturer->virtuemart_manufacturer_id, FALSE); $manufacturerImage = $manufacturer->images[0]->displayMediaThumb("",false); // Show Category ?>
          '; $iColumn = 1; } else { $iColumn ++; } } // Do we need a final closing row tag? if ($iColumn != 1) { ?>
          views/manufacturer/tmpl/default.xml000066600000000640151373621660013535 0ustar00 COM_VIRTUEMART_MANUFACTURER_VIEW_DEFAULT_TITLE views/manufacturer/tmpl/.htaccess000066600000000177151373621660013172 0ustar00 Order allow,deny Deny from all views/manufacturer/tmpl/details.php000066600000004430151373621660013526 0ustar00

          manufacturer->mf_name; ?>

          manufacturerImage)) { ?>
          manufacturerImage; ?>
          manufacturer->mf_email)) { ?>
          manufacturer->mf_email,true,JText::_('COM_VIRTUEMART_EMAIL'),false) ?>
          manufacturer->mf_url)) { ?>
          manufacturer->mf_desc)) { ?>
          manufacturer->mf_desc ?>
          manufacturer->virtuemart_manufacturer_id, FALSE); if(!empty($this->manufacturer->virtuemart_manufacturer_id)) { ?>
          views/manufacturer/tmpl/details.xml000066600000002201151373621660013531 0ustar00 COM_VIRTUEMART_MANUFACTURER_VIEW_DETAILS_TITLE
          views/manufacturer/index.html000066600000000000151373621660012376 0ustar00views/invoice/tmpl/invoice.php000066600000007305151373621660012501 0ustar00_layout == "invoice") { $document = JFactory::getDocument(); $document->setTitle(JText::_('COM_VIRTUEMART_ORDER_PRINT_PO_NUMBER') . ' ' . $this->orderDetails['details']['BT']->order_number . ' ' . $this->vendor->vendor_store_name); //$document->setName( JText::_('COM_VIRTUEMART_ACC_ORDER_INFO').' '.$this->orderDetails['details']['BT']->order_number); //$document->setDescription( JText::_('COM_VIRTUEMART_ORDER_PRINT_PO_NUMBER').' '.$this->orderDetails['details']['BT']->order_number); } if ($this->headFooter) { ?>
          format=="html")?$this->replaceVendorFields($this->vendor->vendor_letter_header_html, $this->vendor):$this->vendor->vendor_letter_header_html; ?>
          vendor->vendor_store_desc.'
          '; /* foreach($this->vendorAddress as $userfields){ foreach($userfields['fields'] as $item){ if(!empty($item['value'])){ if($item['name']==='agreed'){ $item['value'] = ($item['value']===0) ? JText::_('COM_VIRTUEMART_USER_FORM_BILLTO_TOS_NO'):JText::_('COM_VIRTUEMART_USER_FORM_BILLTO_TOS_YES'); } ?> escape($item['value']) ?>
          print) { ?>
          loadTemplate('order'); ?>
          print) { echo $this->loadTemplate('items'); } else { // NOT in print mode, full HTML view for a browser: $tabarray = array('items'=>'COM_VIRTUEMART_ORDER_ITEM', 'history'=>'COM_VIRTUEMART_ORDER_HISTORY'); shopFunctionsF::buildTabs( $this, $tabarray); } ?>


          headFooter) { echo ($this->format=="html")?$this->replaceVendorFields($this->vendor->vendor_letter_footer_html, $this->vendor):$this->vendor->vendor_letter_footer_html; } if ($this->vendor->vendor_letter_add_tos) {?>
          vendor->vendor_letter_add_tos_newpage) { ?> style="page-break-before: always"> vendor->vendor_terms_of_service; ?>
          print) { ?> views/invoice/tmpl/invoice_items.php000066600000024205151373621660013700 0ustar00doctype != 'invoice') { $colspan -= 4; } elseif ( ! VmConfig::get('show_tax')) { $colspan -= 1; } ?> doctype == 'invoice') { ?> doctype == 'invoice') { ?> orderDetails['details']['BT']->order_language); foreach($this->orderDetails['items'] as $item) { $qtt = $item->product_quantity ; $product_link = JURI::root().'index.php?option=com_virtuemart&view=productdetails&virtuemart_category_id=' . $item->virtuemart_category_id . '&virtuemart_product_id=' . $item->virtuemart_product_id . '&Itemid=' . $menuItemID; ?> doctype == 'invoice') { ?> doctype == 'invoice') { ?> doctype == 'invoice') { ?> orderDetails['details']['BT']->coupon_discount <> 0.00) { $coupon_code=$this->orderDetails['details']['BT']->coupon_code?' ('.$this->orderDetails['details']['BT']->coupon_code.')':''; ?> orderDetails['calc_rules'] as $rule){ if ($rule->calc_kind== 'DBTaxRulesBill') { ?> calc_kind == 'taxRulesBill') { ?> calc_kind == 'DATaxRulesBill') { ?> views/invoice/tmpl/mail_raw_shopper.php000066600000006074151373621660014402 0ustar00BTaddress, take a look for an exampel at shopperadresses.php * * With $this->cartData->paymentName or shipmentName, you get the name of the used paymentmethod/shippmentmethod * * In the array order you have details and items ($this->orderDetails['details']), the items gather the products, but that is done directly from the cart data * * $this->orderDetails['details'] contains the raw address data (use the formatted ones, like BTaddress). Interesting informatin here is, * order_number ($this->orderDetails['details']['BT']->order_number), order_pass, coupon_code, order_status, order_status_name, * user_currency_rate, created_on, customer_note, ip_address * * @package VirtueMart * @subpackage Cart * @author Max Milbers, Valerie Isaksen * * @link http://www.virtuemart.net * @copyright Copyright (c) 2004 - 2010 VirtueMart Team. All rights reserved. * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php * VirtueMart is free software. This version may have been modified pursuant * to the GNU General Public License, and as distributed it includes or * is derivative of works licensed under the GNU General Public License or * other free or open source software licenses. * */ // Check to ensure this file is included in Joomla! defined('_JEXEC') or die('Restricted access'); echo strip_tags(JText::_('COM_VIRTUEMART_MAIL_SHOPPER_YOUR_ORDER')) . "\n" . "\n"; echo strip_tags(JText::sprintf('COM_VIRTUEMART_MAIL_SHOPPER_SUMMARY', $this->vendor->vendor_store_name)) . "\n" . "\n"; echo JText::sprintf('COM_VIRTUEMART_MAIL_SHOPPER_CONTENT', $this->shopperName, $this->vendor->vendor_store_name, $this->orderDetails['details']['BT']->order_total, $this->orderDetails['details']['BT']->order_number, $this->orderDetails['details']['BT']->order_pass, $this->orderDetails['details']['BT']->created_on) . "\n" . "\n"; echo "\n" . strip_tags(JText::sprintf('COM_VIRTUEMART_MAIL_ORDER_STATUS', $this->orderDetails['details']['BT']->order_status_name)); echo "\n\n"; $nb = count($this->orderDetails['history']); if ($this->orderDetails['history'][$nb - 1]->customer_notified && !(empty($this->orderDetails['history'][$nb - 1]->comments))) { echo $this->orderDetails['history'][$nb - 1]->comments; } echo "\n\n"; echo "\n\n"; echo JText::_('COM_VIRTUEMART_MAIL_SHOPPER_YOUR_ORDER_LINK') . ' : ' . JURI::root() . 'index.php?option=com_virtuemart&view=orders&layout=details&order_number=' . $this->orderDetails['details']['BT']->order_number . '&order_pass=' . $this->orderDetails['details']['BT']->order_pass . "\n"; if (!empty($this->orderDetails['details']['BT']->customer_note)) { echo "\n" . strip_tags(JText::sprintf('COM_VIRTUEMART_MAIL_SHOPPER_QUESTION', $this->orderDetails['details']['BT']->customer_note)); } echo "\n\n"; //TODO if silent registration logindata //TODO if Paymentmethod needs Bank account data of vendor //We may wish to integrate later a kind of signature views/invoice/tmpl/mail_raw_shopperaddresses.php000066600000002544151373621660016276 0ustar00userfields['fields'] as $field) { if(!empty($field['value'])){ echo $field['title'].': '.$this->escape($field['value'])."\n"; } } echo "\n"; echo JText::_('COM_VIRTUEMART_USER_FORM_SHIPTO_LBL'). "\n"; echo sprintf("%'-64.64s",''); echo "\n"; foreach ($this->shipmentfields['fields'] as $field) { if(!empty($field['value'])){ echo $field['title'].': '.$this->escape($field['value'])."\n"; } } echo "\n";views/invoice/tmpl/mail_html_header.php000066600000004055151373621660014322 0ustar00 vendor->vendor_letter_header>0) { ?> vendor->vendor_letter_header_image>0) { ?> vendor->vendor_letter_header_line == 1) { ?> views/invoice/tmpl/mail_raw_footer.php000066600000003026151373621660014212 0ustar00vendor)) { $vendorModel = VmModel::getModel('vendor'); $this->vendor = $vendorModel->getVendor(); } $link = JURI::root(). 'index.php?option=com_virtuemart' ; echo "\n\n"; $link= JHTML::_('link', $link, $this->vendor->vendor_name) ; // echo JText::_('COM_VIRTUEMART_MAIL_VENDOR_TITLE').$this->vendor->vendor_name.'
          '; /* GENERAL FOOTER FOR ALL MAILS */ echo JText::_('COM_VIRTUEMART_MAIL_FOOTER' ) . $link; echo "\n"; echo $this->vendor->vendor_name ."\n".$this->vendor->vendor_phone .' '.$this->vendor->vendor_store_name ."\n".strip_tags($this->vendor->vendor_store_desc)."\n".strip_tags(str_replace('
          ',"\n",$this->replaceVendorFields($this->vendor->vendor_letter_footer_html, $this->vendor))); views/invoice/tmpl/mail_raw_pricelist.php000066600000012760151373621660014717 0ustar00setEscape('htmlspecialchars'); // TODO Temp fix !!!!! *********************************>>> //$skuPrint = echo sprintf( "%64.64s",strtoupper (JText::_('COM_VIRTUEMART_SKU') ) ) ; // Head of table echo strip_tags(JText::sprintf('COM_VIRTUEMART_ORDER_PRINT_TOTAL', $this->currency->priceDisplay($this->orderDetails['details']['BT']->order_total,$this->currency))) . "\n"; echo sprintf("%'-64.64s", '') . "\n"; echo JText::_('COM_VIRTUEMART_ORDER_ITEM') . "\n"; foreach ($this->orderDetails['items'] as $item) { echo "\n"; echo $item->product_quantity . ' X ' . $item->order_item_name . ' (' . strtoupper(JText::_('COM_VIRTUEMART_SKU')) . $item->order_item_sku . ')' . "\n"; if (!empty($item->product_attribute)) { if (!class_exists('VirtueMartModelCustomfields')) require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'customfields.php'); $product_attribute = VirtueMartModelCustomfields::CustomsFieldOrderDisplay($item, 'FE'); echo "\n" . $product_attribute . "\n"; } if (!empty($item->product_basePriceWithTax) && $item->product_basePriceWithTax != $item->product_final_price) { echo $item->product_basePriceWithTax . "\n"; } echo JText::_('COM_VIRTUEMART_ORDER_PRINT_TOTAL') . $item->product_final_price; if (VmConfig::get('show_tax')) { echo ' (' . JText::_('COM_VIRTUEMART_ORDER_PRINT_PRODUCT_TAX') . ':' . $this->currency->priceDisplay($item->product_tax,$this->currency) . ')' . "\n"; } echo "\n"; } echo sprintf("%'-64.64s", ''); echo "\n"; // Coupon if (!empty($this->orderDetails['details']['BT']->coupon_code)) { echo JText::_('COM_VIRTUEMART_COUPON_DISCOUNT') . ':' . $this->orderDetails['details']['BT']->coupon_code . ' ' . JText::_('COM_VIRTUEMART_PRICE') . ':' . $this->currency->priceDisplay($this->orderDetails['details']['BT']->coupon_discount,$this->currency); echo "\n"; } foreach ($this->orderDetails['calc_rules'] as $rule) { if ($rule->calc_kind == 'DBTaxRulesBill') { echo $rule->calc_rule_name . $this->currency->priceDisplay($rule->calc_amount, $this->currency) . "\n"; } elseif ($rule->calc_kind == 'taxRulesBill') { echo $rule->calc_rule_name . ' ' . $this->currency->priceDisplay($rule->calc_amount,$this->currency) . "\n"; } elseif ($rule->calc_kind == 'DATaxRulesBill') { echo $rule->calc_rule_name . ' ' . $this->currency->priceDisplay($rule->calc_amount,$this->currency) . "\n"; } } echo strtoupper(JText::_('COM_VIRTUEMART_ORDER_PRINT_SHIPPING')) . ' (' . strip_tags(str_replace("
          ", "\n", $this->orderDetails['shipmentName'])) . ' ) ' . "\n"; echo JText::_('COM_VIRTUEMART_ORDER_PRINT_TOTAL') . ' : ' . $this->currency->priceDisplay($this->orderDetails['details']['BT']->order_shipment,$this->currency); if (VmConfig::get('show_tax')) { echo ' (' . JText::_('COM_VIRTUEMART_ORDER_PRINT_TAX') . ' : ' . $this->currency->priceDisplay($this->orderDetails['details']['BT']->order_shipment_tax,$this->currency) . ')'; } echo "\n"; echo strtoupper(JText::_('COM_VIRTUEMART_ORDER_PRINT_PAYMENT')) . ' (' . strip_tags(str_replace("
          ", "\n", $this->orderDetails['paymentName'])) . ' ) ' . "\n"; echo JText::_('COM_VIRTUEMART_ORDER_PRINT_TOTAL') . ':' . $this->currency->priceDisplay($this->orderDetails['details']['BT']->order_payment,$this->currency); if (VmConfig::get('show_tax')) { echo ' (' . JText::_('COM_VIRTUEMART_ORDER_PRINT_TAX') . ' : ' . $this->currency->priceDisplay($this->orderDetails['details']['BT']->order_payment_tax,$this->currency) . ')'; } echo "\n"; echo sprintf("%'-64.64s", '') . "\n"; // total order echo JText::_('COM_VIRTUEMART_MAIL_SUBTOTAL_DISCOUNT_AMOUNT') . ' : ' . $this->currency->priceDisplay($this->orderDetails['details']['BT']->order_billDiscountAmount,$this->currency) . "\n"; echo strtoupper(JText::_('COM_VIRTUEMART_ORDER_PRINT_TOTAL')) . ' : ' . $this->currency->priceDisplay($this->orderDetails['details']['BT']->order_total,$this->currency) . "\n"; if (VmConfig::get('show_tax')) { echo ' (' . JText::_('COM_VIRTUEMART_ORDER_PRINT_TAX') . ' : ' . $this->currency->priceDisplay($this->orderDetails['details']['BT']->order_billTaxAmount,$this->currency) . ')' . "\n"; } echo "\n"; views/invoice/tmpl/mail_raw_vendor.php000066600000002006151373621660014206 0ustar00productName,$this->url); if(!empty($this->orderDetails['details']['BT']->customer_note)) { echo "\n" . JText::sprintf('COM_VIRTUEMART_CART_MAIL_VENDOR_SHOPPER_QUESTION', $this->orderDetails['details']['BT']->customer_note); } echo "\n"; views/invoice/tmpl/mail_html_pricelist.php000066600000001524151373621660015066 0ustar00getLayout(); $this->setLayout('invoice'); echo $this->loadTemplate('items'); $this->setLayout($oldlayout); views/invoice/tmpl/mail_html_vendor_more.php000066600000001245151373621660015407 0ustar00 views/invoice/tmpl/index.html000066600000000000151373621660012312 0ustar00views/invoice/tmpl/mail_html_vendor.php000066600000002624151373621660014367 0ustar00 views/invoice/tmpl/invoice_history.php000066600000003063151373621660014257 0ustar00 orderDetails['history'] as $_hist) { if (!$_hist->customer_notified) { continue; } ?>
          created_on, 'LC4', true); ?> orderstatuses[$_hist->order_status_code]; ?> comments; ?>
          views/invoice/tmpl/mail_raw.php000066600000003603151373621660012635 0ustar00BTaddress, take a look for an exampel at shopper_adresses.php * * With $this->cartData->paymentName or shipmentName, you get the name of the used paymentmethod/shippmentmethod * * In the array order you have details and items ($this->orderDetails['details']), the items gather the products, but that is done directly from the cart data * * $this->orderDetails['details'] contains the raw address data (use the formatted ones, like BTaddress). Interesting informatin here is, * order_number ($this->orderDetails['details']['BT']->order_number), order_pass, coupon_code, order_status, order_status_name, * user_currency_rate, created_on, customer_note, ip_address * * @package VirtueMart * @subpackage Cart * @author Max Milbers, Valerie Isaksen * * @link http://www.virtuemart.net * @copyright Copyright (c) 2004 - 2010 VirtueMart Team. All rights reserved. * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php * VirtueMart is free software. This version may have been modified pursuant * to the GNU General Public License, and as distributed it includes or * is derivative of works licensed under the GNU General Public License or * other free or open source software licenses. * */ // Check to ensure this file is included in Joomla! defined('_JEXEC') or die('Restricted access'); ?> loadTemplate('header'); // Message for shopper or vendor echo $this->loadTemplate('shopper'); // render shipto billto adresses echo $this->loadTemplate('shopperaddresses'); // render price list echo $this->loadTemplate('pricelist'); //dump($salesPriceShipment , 'rawmail'); // more infos //echo $this->loadTemplate($this->recipient.'_more'); // end of mail echo $this->loadTemplate('footer'); ?> views/invoice/tmpl/mail_html_shopper_more.php000066600000001310151373621660015563 0ustar00 views/invoice/tmpl/mail_html_footer.php000066600000003707151373621660014373 0ustar00vendor)) { $vendorModel = VmModel::getModel('vendor'); $this->vendor = $vendorModel->getVendor(); } //$link = shopFunctionsF::getRootRoutedUrl('index.php?option=com_virtuemart'); $link = JURI::root().'index.php?option=com_virtuemart'; echo '

          '; //$link=''.JHTML::_('link', JURI::root().$link, $this->vendor->vendor_name).' '; // echo JText::_('COM_VIRTUEMART_MAIL_VENDOR_TITLE').$this->vendor->vendor_name.'
          '; /* GENERAL FOOTER FOR ALL MAILS */ echo JText::_('COM_VIRTUEMART_MAIL_FOOTER' ) . ''.$this->vendor->vendor_name.''; echo '
          '; echo $this->vendor->vendor_name .'
          '.$this->vendor->vendor_phone .' '.$this->vendor->vendor_store_name .'
          '.$this->vendor->vendor_store_desc.'
          '; ?> vendor->vendor_letter_footer == 1) { ?> vendor->vendor_letter_footer_line == 1) { ?>
          views/invoice/tmpl/.htaccess000066600000000177151373621660012132 0ustar00 Order allow,deny Deny from all views/invoice/tmpl/mail_html_shopperaddresses.php000066600000004334151373621660016450 0ustar00 views/invoice/tmpl/invoice_order.php000066600000010160151373621660013665 0ustar00 doctype == 'invoice') { if ($this->invoiceNumber) { ?>

          invoiceNumber; ?>

          doctype == 'deliverynote') { ?>

          doctype == 'confirmation') { ?>

          invoiceNumber) { ?> orderDetails['details']['BT']->delivery_date)) { ?> orderDetails['details']['BT']->customer_note) { ?> doctype == 'invoice') { ?>
          invoiceDate, 'LC4', true); ?>
          orderDetails['details']['BT']->delivery_date ?>
          orderDetails['details']['BT']->order_number; ?>
          orderDetails['details']['BT']->created_on, 'LC4', true); ?>
          orderstatuses[$this->orderDetails['details']['BT']->order_status]; ?>
          orderDetails['shipmentName']; ?>
          orderDetails['paymentName']; ?>
          orderDetails['details']['BT']->customer_note; ?>
          currency->priceDisplay($this->orderDetails['details']['BT']->order_total,$this->currency); ?>

          userfields['fields'] as $field) { if (!empty($field['value'])) { echo '' . ''; } } ?>
          ' . $field['title'] . '' . $field['value'] . '

          shipmentfields['fields'] as $field) { if (!empty($field['value'])) { echo '' . ''; } } ?>
          ' . $field['title'] . '' . $field['value'] . '
          views/invoice/tmpl/mail_html.php000066600000010005151373621660013002 0ustar00BTaddress, take a look for an exampel at shopper_adresses.php * * With $this->orderDetails['shipmentName'] or paymentName, you get the name of the used paymentmethod/shippmentmethod * * In the array order you have details and items ($this->orderDetails['details']), the items gather the products, but that is done directly from the cart data * * $this->orderDetails['details'] contains the raw address data (use the formatted ones, like BTaddress). Interesting informatin here is, * order_number ($this->orderDetails['details']['BT']->order_number), order_pass, coupon_code, order_status, order_status_name, * user_currency_rate, created_on, customer_note, ip_address * * @package VirtueMart * @subpackage Cart * @author Max Milbers, Valerie Isaksen * * @link http://www.virtuemart.net * @copyright Copyright (c) 2004 - 2010 VirtueMart Team. All rights reserved. * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php * VirtueMart is free software. This version may have been modified pursuant * to the GNU General Public License, and as distributed it includes or * is derivative of works licensed under the GNU General Public License or * other free or open source software licenses. * */ // Check to ensure this file is included in Joomla! defined('_JEXEC') or die('Restricted access'); ?>
          recipient == 'shopper') { echo $this->loadTemplate('header'); } // Message for shopper or vendor echo $this->loadTemplate($this->recipient); // render shipto billto adresses echo $this->loadTemplate('shopperaddresses'); // render price list echo $this->loadTemplate('pricelist'); // more infos echo $this->loadTemplate($this->recipient . '_more'); // end of mail echo $this->loadTemplate('footer'); ?>
          views/invoice/tmpl/mail_html_shopper.php000066600000006514151373621660014554 0ustar00BTaddress['fields'], take a look for an exampel at shopper_adresses.php * * With $this->cartData->paymentName or shipmentName, you get the name of the used paymentmethod/shippmentmethod * * In the array order you have details and items ($this->orderDetails['details']), the items gather the products, but that is done directly from the cart data * * $this->orderDetails['details'] contains the raw address data (use the formatted ones, like BTaddress['fields']). Interesting informatin here is, * order_number ($this->orderDetails['details']['BT']->order_number), order_pass, coupon_code, order_status, order_status_name, * user_currency_rate, created_on, customer_note, ip_address * * @package VirtueMart * @subpackage Cart * @author Max Milbers, Valerie Isaksen * * @link http://www.virtuemart.net * @copyright Copyright (c) 2004 - 2010 VirtueMart Team. All rights reserved. * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php * VirtueMart is free software. This version may have been modified pursuant * to the GNU General Public License, and as distributed it includes or * is derivative of works licensed under the GNU General Public License or * other free or open source software licenses. * */ // Check to ensure this file is included in Joomla! defined('_JEXEC') or die('Restricted access'); ?> orderDetails['history']); if($this->orderDetails['history'][$nb-1]->customer_notified && !(empty($this->orderDetails['history'][$nb-1]->comments))) { ?> orderDetails['details']['BT']->customer_note)){ ?> views/invoice/index.html000066600000000000151373621660011336 0ustar00views/invoice/view.html.php000066600000031301151373621660011777 0ustar00setMetaData('robots','NOINDEX, NOFOLLOW, NOARCHIVE, NOSNIPPET'); if(empty($this->uselayout)){ $layout = JRequest::getWord('layout','mail'); } else { $layout = $this->uselayout; } switch ($layout) { case 'invoice': $this->doctype = $layout; $title = JText::_('COM_VIRTUEMART_INVOICE'); break; case 'deliverynote': $this->doctype = $layout; $layout = 'invoice'; $title = JText::_('COM_VIRTUEMART_DELIVERYNOTE'); break; case 'confirmation': $this->doctype = $layout; $layout = 'confirmation'; $title = JText::_('COM_VIRTUEMART_CONFIRMATION'); break; case 'mail': if (VmConfig::get('order_mail_html')) { $layout = 'mail_html'; } else { $layout = 'mail_raw'; } } $this->setLayout($layout); $tmpl = JRequest::getWord('tmpl'); $print = false; if($tmpl){ $print = true; } $this->assignRef('print', $print); $this->format = JRequest::getWord('format','html'); if($layout == 'invoice'){ $document->setTitle( JText::_('COM_VIRTUEMART_INVOICE') ); } $order_print=false; if ($print and $this->format=='html') { $order_print=true; } $orderModel = VmModel::getModel('orders'); $orderDetails = $this->orderDetails; if($orderDetails==0){ $orderDetails = $orderModel ->getMyOrderDetails(); if(!$orderDetails or empty($orderDetails['details'])){ echo JText::_('COM_VIRTUEMART_CART_ORDER_NOTFOUND'); return; } } if(empty($orderDetails['details'])){ echo JText::_('COM_VIRTUEMART_ORDER_NOTFOUND'); return 0; } if(!empty($orderDetails['details']['BT']->order_language)) { VmConfig::loadJLang('com_virtuemart',true, $orderDetails['details']['BT']->order_language); VmConfig::loadJLang('com_virtuemart_shoppers',true, $orderDetails['details']['BT']->order_language); VmConfig::loadJLang('com_virtuemart_orders',true, $orderDetails['details']['BT']->order_language); } $this->assignRef('orderDetails', $orderDetails); // if it is order print, invoice number should not be created, either it is there, either it has not been created if(empty($this->invoiceNumber) and !$order_print){ $invoiceNumberDate=array(); if ( $orderModel->createInvoiceNumber($orderDetails['details']['BT'], $invoiceNumberDate)) { if (ShopFunctions::InvoiceNumberReserved( $invoiceNumberDate[0])) { if ($this->uselayout!='mail') { $document->setTitle( JText::_('COM_VIRTUEMART_PAYMENT_INVOICE') ); return ; } } $this->invoiceNumber = $invoiceNumberDate[0]; $this->invoiceDate = $invoiceNumberDate[1]; if(!$this->invoiceNumber or empty($this->invoiceNumber)){ vmError('Cant create pdf, createInvoiceNumber failed'); if ($this->uselayout!='mail') { return ; } } } else { // Could OR should not create Invoice Number, createInvoiceNumber failed if ($this->uselayout!='mail') { return ; } } } //Todo multix $vendorId=1; $emailCurrencyId = $orderDetails['details']['BT']->user_currency_id; $exchangeRate=FALSE; if(!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS.DS.'vmpsplugin.php'); JPluginHelper::importPlugin('vmpayment'); $dispatcher = JDispatcher::getInstance(); $dispatcher->trigger('plgVmgetEmailCurrency',array( $orderDetails['details']['BT']->virtuemart_paymentmethod_id, $orderDetails['details']['BT']->virtuemart_order_id, &$emailCurrencyId)); if(!class_exists('CurrencyDisplay')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'currencydisplay.php'); $currency = CurrencyDisplay::getInstance($emailCurrencyId,$vendorId); if ($emailCurrencyId) { $currency->exchangeRateShopper=$orderDetails['details']['BT']->user_currency_rate; } $this->assignRef('currency', $currency); //Create BT address fields $userFieldsModel = VmModel::getModel('userfields'); $_userFields = $userFieldsModel->getUserFields( 'account' , array('captcha' => true, 'delimiters' => true) // Ignore these types , array('delimiter_userinfo','user_is_vendor' ,'username','password', 'password2', 'agreed', 'address_type') // Skips ); $userfields = $userFieldsModel->getUserFieldsFilled( $_userFields ,$orderDetails['details']['BT']); $this->assignRef('userfields', $userfields); //Create ST address fields $orderst = (array_key_exists('ST', $orderDetails['details'])) ? $orderDetails['details']['ST'] : $orderDetails['details']['BT']; $shipmentFieldset = $userFieldsModel->getUserFields( 'shipment' , array() // Default switches , array('delimiter_userinfo', 'username', 'email', 'password', 'password2', 'agreed', 'address_type') // Skips ); $shipmentfields = $userFieldsModel->getUserFieldsFilled( $shipmentFieldset ,$orderst ); $this->assignRef('shipmentfields', $shipmentfields); $civility=""; foreach ($userfields['fields'] as $field) { if ($field['name']=="title") { $civility=$field['value']; break; } } $company= empty($orderDetails['details']['BT']->company) ?"":$orderDetails['details']['BT']->company.", "; $shopperName = $company. $civility.' '.$orderDetails['details']['BT']->first_name.' '.$orderDetails['details']['BT']->last_name; $this->assignRef('shopperName', $shopperName); $this->assignRef('civility', $civility); // Create an array to allow orderlinestatuses to be translated // We'll probably want to put this somewhere in ShopFunctions.. $orderStatusModel = VmModel::getModel('orderstatus'); $_orderstatuses = $orderStatusModel->getOrderStatusList(); $orderstatuses = array(); foreach ($_orderstatuses as $_ordstat) { $orderstatuses[$_ordstat->order_status_code] = JText::_($_ordstat->order_status_name); } $this->assignRef('orderstatuslist', $orderstatuses); $this->assignRef('orderstatuses', $orderstatuses); $_itemStatusUpdateFields = array(); $_itemAttributesUpdateFields = array(); foreach($orderDetails['items'] as $_item) { // $_itemStatusUpdateFields[$_item->virtuemart_order_item_id] = JHTML::_('select.genericlist', $orderstatuses, "item_id[".$_item->virtuemart_order_item_id."][order_status]", 'class="selectItemStatusCode"', 'order_status_code', 'order_status_name', $_item->order_status, 'order_item_status'.$_item->virtuemart_order_item_id,true); $_itemStatusUpdateFields[$_item->virtuemart_order_item_id] = $_item->order_status; } if (empty($orderDetails['shipmentName']) ) { if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); JPluginHelper::importPlugin('vmshipment'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmOnShowOrderFEShipment',array( $orderDetails['details']['BT']->virtuemart_order_id, $orderDetails['details']['BT']->virtuemart_shipmentmethod_id, &$orderDetails['shipmentName'])); } if (empty($orderDetails['paymentName']) ) { if(!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS.DS.'vmpsplugin.php'); JPluginHelper::importPlugin('vmpayment'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmOnShowOrderFEPayment',array( $orderDetails['details']['BT']->virtuemart_order_id, $orderDetails['details']['BT']->virtuemart_paymentmethod_id, &$orderDetails['paymentName'])); } $virtuemart_vendor_id=1; $vendorModel = VmModel::getModel('vendor'); $vendor = $vendorModel->getVendor($virtuemart_vendor_id); $vendorModel->addImages($vendor); $vendor->vendorFields = $vendorModel->getVendorAddressFields(); if (VmConfig::get ('enable_content_plugin', 0)) { if(!class_exists('shopFunctionsF'))require(JPATH_VM_SITE.DS.'helpers'.DS.'shopfunctionsf.php'); shopFunctionsF::triggerContentPlugin($vendor, 'vendor','vendor_store_desc'); shopFunctionsF::triggerContentPlugin($vendor, 'vendor','vendor_terms_of_service'); shopFunctionsF::triggerContentPlugin($vendor, 'vendor','vendor_legal_info'); } $this->assignRef('vendor', $vendor); // vmdebug('vendor', $vendor); if (strpos($layout,'mail') !== false) { $lineSeparator="
          "; } else { $lineSeparator="\n"; } $this->assignRef('headFooter', $this->showHeaderFooter); //Attention, this function will be removed, it wont be deleted, but it is obsoloete in any view.html.php if(!class_exists('ShopFunctions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'shopfunctions.php'); $vendorAddress= shopFunctions::renderVendorAddress($virtuemart_vendor_id, $lineSeparator); $this->assignRef('vendorAddress', $vendorAddress); $vendorEmail = $vendorModel->getVendorEmail($virtuemart_vendor_id); $vars['vendorEmail'] = $vendorEmail; // this is no setting in BE to change the layout ! //shopFunctionsF::setVmTemplate($this,0,0,$layoutName); //vmdebug('renderMailLayout invoice '.date('H:i:s'),$this->order); if (strpos($layout,'mail') !== false) { if ($this->doVendor) { //Old text key COM_VIRTUEMART_MAIL_SUBJ_VENDOR_C $this->subject = JText::sprintf('COM_VIRTUEMART_MAIL_SUBJ_VENDOR_'.$orderDetails['details']['BT']->order_status, $this->shopperName, strip_tags($currency->priceDisplay($orderDetails['details']['BT']->order_total, $currency)), $orderDetails['details']['BT']->order_number); $recipient = 'vendor'; } else { $this->subject = JText::sprintf('COM_VIRTUEMART_MAIL_SUBJ_SHOPPER_'.$orderDetails['details']['BT']->order_status, $vendor->vendor_store_name, strip_tags($currency->priceDisplay($orderDetails['details']['BT']->order_total, $currency)), $orderDetails['details']['BT']->order_number ); $recipient = 'shopper'; } $this->assignRef('recipient', $recipient); } $tpl = null; // vmdebug('my view data',$this->getLayout(),$layout); // ob_start(); // echo '
          ';
          // 		echo debug_print_backtrace();
          // 		echo '
          '; // $dumptrace = ob_get_contents(); // ob_end_clean(); // return false; parent::display($tpl); } // FE public function renderMailLayout($doVendor=false) function renderMailLayout ($doVendor, $recipient) { $this->doVendor=$doVendor; $this->frompdf=false; $this->uselayout = 'mail'; $this->display(); } static function replaceVendorFields ($txt, $vendor) { // TODO: Implement more Placeholders (ordernr, invoicenr, etc.); // REMEMBER TO CHANGE VmVendorPDF::replace_variables IN vmpdf.php, TOO!!! // Page nrs. for mails is always "1" $txt = str_replace('{vm:pagenum}', "1", $txt); $txt = str_replace('{vm:pagecount}', "1", $txt); $txt = str_replace('{vm:vendorname}', $vendor->vendor_store_name, $txt); $imgrepl=''; if (!empty($vendor->images)) { $img = $vendor->images[0]; $imgrepl = "
          ".$img->displayIt($img->file_url,'','',false, '', false, false)."
          "; } $txt = str_replace('{vm:vendorimage}', $imgrepl, $txt); $vendorAddress = shopFunctions::renderVendorAddress($vendor->virtuemart_vendor_id, "
          "); // Trim the final
          from the address, which is inserted by renderVendorAddress automatically! if (substr($vendorAddress, -5, 5) == '
          ') { $vendorAddress = substr($vendorAddress, 0, -5); } $txt = str_replace('{vm:vendoraddress}', $vendorAddress, $txt); $txt = str_replace('{vm:vendorlegalinfo}', $vendor->vendor_legal_info, $txt); $txt = str_replace('{vm:vendordescription}', $vendor->vendor_store_desc, $txt); $txt = str_replace('{vm:tos}', $vendor->vendor_terms_of_service, $txt); return "$txt"; } } views/invoice/.htaccess000066600000000177151373621660011156 0ustar00 Order allow,deny Deny from all views/recommend/view.html.php000066600000016211151373621660012317 0ustar00redirect(JRoute::_('index.php?option=com_virtuemart')); } $this->login = ''; if(!VmConfig::get('recommend_unauth',false)){ $user = JFactory::getUser(); if($user->guest){ $this->login = shopFunctionsF::getLoginForm(false); //$app->redirect(JRoute::_('index.php?option=com_virtuemart','JGLOBAL_YOU_MUST_LOGIN_FIRST')); } } // Load the product $productModel = VmModel::getModel('product'); $virtuemart_product_id = vRequest::getInt('virtuemart_product_id',0); $this->product = $productModel->getProduct ($virtuemart_product_id); $layout = $this->getLayout(); if($layout != 'form' and $layout != 'mail_confirmed'){ return $this->renderMailLayout('',''); } $show_prices = VmConfig::get('show_prices',1); if($show_prices == '1'){ if(!class_exists('calculationHelper')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'calculationh.php'); } $this->assignRef('show_prices', $show_prices); $document = JFactory::getDocument(); $document->setMetaData('robots','NOINDEX, NOFOLLOW, NOARCHIVE, NOSNIPPET'); /* add javascript for price and cart */ //vmJsApi::jPrice(); $mainframe = JFactory::getApplication(); $pathway = $mainframe->getPathway(); $task = JRequest::getCmd('task'); if (!class_exists('VmImage')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'image.php'); if(empty($virtuemart_product_id)){ self::showLastCategory($tpl); return; } //$product = $productModel->getProduct($virtuemart_product_id); /* Set Canonic link */ $format = JRequest::getWord('format', 'html'); if ($format == 'html') { $document->addHeadLink( $this->product->link , 'canonical', 'rel', '' ); } /* Set the titles */ $document->setTitle(JText::sprintf('COM_VIRTUEMART_PRODUCT_DETAILS_TITLE',$this->product->product_name.' - '.JText::_('COM_VIRTUEMART_PRODUCT_RECOMMEND'))); if(empty($this->product)){ self::showLastCategory($tpl); return; } $productModel->addImages($this->product,1); /* Load the category */ $category_model = VmModel::getModel('category'); /* Get the category ID */ $virtuemart_category_id = JRequest::getInt('virtuemart_category_id'); if ($virtuemart_category_id == 0 && !empty($this->product)) { if (array_key_exists('0', $this->product->categories)) $virtuemart_category_id = $this->product->categories[0]; } if(!class_exists('shopFunctionsF'))require(JPATH_VM_SITE.DS.'helpers'.DS.'shopfunctionsf.php'); shopFunctionsF::setLastVisitedCategoryId($virtuemart_category_id); if($category_model){ $category = $category_model->getCategory($virtuemart_category_id); $this->assignRef('category', $category); $pathway->addItem($category->category_name,JRoute::_('index.php?option=com_virtuemart&view=category&virtuemart_category_id='.$virtuemart_category_id, FALSE)); } //$pathway->addItem(JText::_('COM_VIRTUEMART_PRODUCT_DETAILS'), $uri->toString(array('path', 'query', 'fragment'))); $pathway->addItem($this->product->product_name,JRoute::_('index.php?option=com_virtuemart&view=productdetails&virtuemart_category_id='.$virtuemart_category_id.'&virtuemart_product_id='.$this->product->virtuemart_product_id, FALSE)); // for askquestion $pathway->addItem( JText::_('COM_VIRTUEMART_PRODUCT_ASK_QUESTION')); /* Check for editing access */ /** @todo build edit page */ /* Load the user details */ $this->assignRef('user', JFactory::getUser()); if ($this->product->metadesc) { $document->setDescription( $this->product->metadesc ); } if ($this->product->metakey) { $document->setMetaData('keywords', $this->product->metakey); } if ($mainframe->getCfg('MetaTitle') == '1') { $document->setMetaData('title', $this->product->product_s_desc); //Maybe better product_name } if ($mainframe->getCfg('MetaAuthor') == '1') { $document->setMetaData('author', $this->product->metaauthor); } parent::display($tpl); } function renderMailLayout($doVendor, $recipient) { $this->comment = nl2br(JRequest::getString('comment')); $this->name = vRequest::getString('name'); if (VmConfig::get ('order_mail_html')) { $tpl = 'mail_html'; } else { $tpl = 'mail_raw'; } $this->setLayout ($tpl); // Load the product $productModel = VmModel::getModel('product'); $virtuemart_product_id = vRequest::getInt('virtuemart_product_id',0); $this->product = $productModel->getProduct ($virtuemart_product_id); $productModel->addImages($this->product); $layout = $this->getLayout(); //if($layout != 'form' and $layout != 'mail_confirmed'){ $user = JFactory::getUser (); $vars['user'] = array('name' => $user->name, 'email' => $user->email); $vars['vendorEmail'] = $user->email; $vendorModel = VmModel::getModel ('vendor'); $this->vendor = $vendorModel->getVendor ($this->product->virtuemart_vendor_id); $vendorModel->addImages ($this->vendor); $this->vendor->vendorFields = $vendorModel->getVendorAddressFields(); $vars['vendorAddress']= shopFunctions::renderVendorAddress($this->product->virtuemart_vendor_id, ' - '); $this->vendor->vendor_name =$user->name; foreach( $vars as $key => $val ) { $this->$key = $val; } $this->subject = JText::sprintf('COM_VIRTUEMART_RECOMMEND_PRODUCT',$this->name, $this->product->product_name); parent::display(); } private function showLastCategory($tpl) { $virtuemart_category_id = shopFunctionsF::getLastVisitedCategoryId(); $categoryLink=''; if($virtuemart_category_id){ $categoryLink='&virtuemart_category_id='.$virtuemart_category_id; } $continue_link = JRoute::_('index.php?option=com_virtuemart&view=category'.$categoryLink, FALSE); $continue_link_html = ''.JText::_('COM_VIRTUEMART_CONTINUE_SHOPPING').''; $this->assignRef('continue_link_html', $continue_link_html); // Display it all parent::display($tpl); } } // pure php no closing tagviews/recommend/metadata.xml000066600000000316151373621660012172 0ustar00 views/recommend/index.html000066600000000000151373621660011653 0ustar00views/recommend/tmpl/.htaccess000066600000000177151373621660012447 0ustar00 Order allow,deny Deny from all views/recommend/tmpl/index.html000066600000000000151373621660012627 0ustar00views/recommend/tmpl/form.php000066600000013033151373621660012320 0ustar00addScriptDeclaration(' jQuery(function($){ $("#askform").validationEngine("attach"); var counterResult = $("#comment").val().length; $("#counter").val( counterResult ); $("#comment").keyup( function () { var result = $(this).val(); $("#counter").val( result.length ); }); }); '); $vendorModel = VmModel::getModel ('vendor'); $this->vendor = $vendorModel->getVendor ($this->product->virtuemart_vendor_id); /* Let's see if we found the product */ if (empty ( $this->product )) { echo JText::_ ( 'COM_VIRTUEMART_PRODUCT_NOT_FOUND' ); echo '

          ' . $this->continue_link_html; } else { $session = JFactory::getSession(); $mailRecommendData = $session->get('mailrecommend', 0, 'vm'); if(!empty($this->login)){ echo $this->login; } if(empty($this->login) or VmConfig::get('recommend_unauth',false)){ ?>

          product->product_name ?>

          product->product_s_desc)) { ?>
          product->product_s_desc ?>
          product->images[0]->displayMediaThumb('class="modal product-image"',false); ?>
          trigger('onInit','dynamic_recaptcha_1'); ?>
          views/recommend/tmpl/form.xml000066600000000312151373621660012325 0ustar00 views/recommend/tmpl/mail_confirmed.php000066600000002164151373621660014330 0ustar00
          views/recommend/tmpl/mail_html.php000066600000006467151373621660013340 0ustar00
          vendorAddress; ?>
          views/recommend/tmpl/mail_raw.php000066600000003451151373621660013153 0ustar00vendorAddress; echo "\n"; echo "\n"; echo JText::sprintf ('COM_VIRTUEMART_MAIL_SHOPPER_NAME', $this->user->name); echo "\n"; echo "\n"; echo JText::sprintf('COM_VIRTUEMART_RECOMMEND_MAIL_MSG', $this->product->product_name, $this->comment); echo "\n"; $link = JURI::root().'index.php?option=com_virtuemart'; echo "\n\n"; $link= JHTML::_('link', $link, $this->vendor->vendor_name) ; /* GENERAL FOOTER FOR ALL MAILS */ echo JText::_('COM_VIRTUEMART_MAIL_FOOTER' ) . $link; echo "\n"; echo $this->vendor->vendor_name ."\n".$this->vendor->vendor_phone .' '.$this->vendor->vendor_store_name ."\n".strip_tags($this->vendor->vendor_store_desc)."\n".str_replace('
          ',"\n",$this->vendor->vendor_legal_info); echo JText::sprintf('COM_VIRTUEMART_RECOMMEND_MAIL_MSG', $this->product->product_name, $this->comment); $link = JURI::root().'index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id='.$this->product->virtuemart_product_id ; echo '
          '.JHTML::_('link',$link, $this->product->product_name).''; include(JPATH_VM_SITE.DS.'views'.DS.'cart'.DS.'tmpl'.DS.'mail_html_footer.php'); views/recommend/.htaccess000066600000000177151373621660011473 0ustar00 Order allow,deny Deny from all views/productdetails/view.html.php000066600000030600151373621660013372 0ustar00assignRef('show_prices', $show_prices); $document = JFactory::getDocument(); // add javascript for price and cart, need even for quantity buttons, so we need it almost anywhere vmJsApi::jPrice(); $mainframe = JFactory::getApplication(); $pathway = $mainframe->getPathway(); $task = JRequest::getCmd('task'); if (!class_exists('VmImage')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'image.php'); // Load the product //$product = $this->get('product'); //Why it is sensefull to use this construction? Imho it makes it just harder $product_model = VmModel::getModel('product'); $this->assignRef('product_model', $product_model); $virtuemart_product_idArray = JRequest::getVar('virtuemart_product_id', 0); if (is_array($virtuemart_product_idArray) and count($virtuemart_product_idArray) > 0) { $virtuemart_product_id = (int)$virtuemart_product_idArray[0]; } else { $virtuemart_product_id = (int)$virtuemart_product_idArray; } $quantityArray = JRequest::getVar ('quantity', array()); //is sanitized then JArrayHelper::toInteger ($quantityArray); $quantity = 1; if (!empty($quantityArray[0])) { $quantity = $quantityArray[0]; } $product = $product_model->getProduct($virtuemart_product_id,TRUE,TRUE,TRUE,$quantity); if(!class_exists('shopFunctionsF'))require(JPATH_VM_SITE.DS.'helpers'.DS.'shopfunctionsf.php'); $last_category_id = shopFunctionsF::getLastVisitedCategoryId(); if (empty($product->slug)) { //Todo this should be redesigned to fit better for SEO $mainframe->enqueueMessage(JText::_('COM_VIRTUEMART_PRODUCT_NOT_FOUND')); $categoryLink = ''; if (!$last_category_id) { $last_category_id = JRequest::getInt('virtuemart_category_id', false); } if ($last_category_id) { $categoryLink = '&virtuemart_category_id=' . $last_category_id; } if (VmConfig::get('handle_404',1)) { $mainframe->redirect(JRoute::_('index.php?option=com_virtuemart&view=category' . $categoryLink . '&error=404', FALSE)); } else { JError::raise(E_ERROR,'404','Not found'); } return; } if (!empty($product->customfields)) { foreach ($product->customfields as $k => $custom) { if (!empty($custom->layout_pos)) { $product->customfieldsSorted[$custom->layout_pos][] = $custom; unset($product->customfields[$k]); } } $product->customfieldsSorted['normal'] = $product->customfields; unset($product->customfields); } $product->event = new stdClass(); $product->event->afterDisplayTitle = ''; $product->event->beforeDisplayContent = ''; $product->event->afterDisplayContent = ''; if (VmConfig::get('enable_content_plugin', 0)) { shopFunctionsF::triggerContentPlugin($product, 'productdetails','product_desc'); } $product_model->addImages($product); $this->assignRef('product', $product); if (isset($product->min_order_level) && (int) $product->min_order_level > 0) { $min_order_level = $product->min_order_level; } else { $min_order_level = 1; } $this->assignRef('min_order_level', $min_order_level); if (isset($product->step_order_level) && (int) $product->step_order_level > 0) { $step_order_level = $product->step_order_level; } else { $step_order_level = 1; } $this->assignRef('step_order_level', $step_order_level); // Load the neighbours if (VmConfig::get('product_navigation', 1)) { $product->neighbours = $product_model->getNeighborProducts($product); } // Load the category $category_model = VmModel::getModel('category'); shopFunctionsF::setLastVisitedCategoryId($product->virtuemart_category_id); if ($category_model) { $category = $category_model->getCategory($product->virtuemart_category_id); $category_model->addImages($category, 1); $this->assignRef('category', $category); //Seems we dont need this anylonger, destroyed the breadcrumb if ($category->parents) { foreach ($category->parents as $c) { if(is_object($c) and isset($c->category_name)){ $pathway->addItem(strip_tags($c->category_name), JRoute::_('index.php?option=com_virtuemart&view=category&virtuemart_category_id=' . $c->virtuemart_category_id, FALSE)); } else { vmdebug('Error, parent category has no name, breadcrumb maybe broken, category',$c); } } } $category->children = $category_model->getChildCategoryList($product->virtuemart_vendor_id, $product->virtuemart_category_id); $category_model->addImages($category->children, 1); } if (!empty($tpl)) { $format = $tpl; } else { $format = JRequest::getWord('format', 'html'); } if ($format == 'html') { // Set Canonic link $document->addHeadLink($product->canonical, 'canonical', 'rel', ''); } $pathway->addItem(strip_tags($product->product_name)); // Set the titles // $document->setTitle should be after the additem pathway if ($product->customtitle) { $document->setTitle(strip_tags($product->customtitle)); } else { $document->setTitle(strip_tags(($category->category_name ? ($category->category_name . ' : ') : '') . $product->product_name)); } $ratingModel = VmModel::getModel('ratings'); $allowReview = $ratingModel->allowReview($product->virtuemart_product_id); $this->assignRef('allowReview', $allowReview); $showReview = $ratingModel->showReview($product->virtuemart_product_id); $this->assignRef('showReview', $showReview); if ($showReview) { $review = $ratingModel->getReviewByProduct($product->virtuemart_product_id); $this->assignRef('review', $review); $rating_reviews = $ratingModel->getReviews($product->virtuemart_product_id); $this->assignRef('rating_reviews', $rating_reviews); } $showRating = $ratingModel->showRating($product->virtuemart_product_id); $this->assignRef('showRating', $showRating); if ($showRating) { $vote = $ratingModel->getVoteByProduct($product->virtuemart_product_id); $this->assignRef('vote', $vote); $rating = $ratingModel->getRatingByProduct($product->virtuemart_product_id); $this->assignRef('rating', $rating); } $allowRating = $ratingModel->allowRating($product->virtuemart_product_id); $this->assignRef('allowRating', $allowRating); // Check for editing access // @todo build edit page if (!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); //if (Permissions::getInstance()->check("admin,storeadmin")) { $perm = Permissions::getInstance(); $admin = $perm->check("admin"); if(!$admin) vmdebug('No admin'); $storeadmin = $perm->check("admin,storeadmin"); if(!$storeadmin) vmdebug('No $storeadmin'); $superVendor = $perm->isSuperVendor(); if(!$superVendor) vmdebug('No $superVendor'); if($admin or ($perm->isSuperVendor()==$product->virtuemart_vendor_id and $storeadmin)){ $edit_link = JURI::root() . 'index.php?option=com_virtuemart&tmpl=component&view=product&task=edit&virtuemart_product_id=' . $product->virtuemart_product_id; $edit_link = $this->linkIcon($edit_link, 'COM_VIRTUEMART_PRODUCT_FORM_EDIT_PRODUCT', 'edit', false, false); } else { $edit_link = ""; } $this->assignRef('edit_link', $edit_link); // todo: atm same form for "call for price" and "ask a question". Title of the form should be different $askquestion_url = JRoute::_('index.php?option=com_virtuemart&view=productdetails&task=askquestion&virtuemart_product_id=' . $product->virtuemart_product_id . '&virtuemart_category_id=' . $product->virtuemart_category_id . '&tmpl=component', FALSE); $this->assignRef('askquestion_url', $askquestion_url); // Load the user details $user = JFactory::getUser(); $this->assignRef('user',$user); // More reviews link $uri = JURI::getInstance(); $uri->setVar('showall', 1); $uristring = vmURI::getCleanUrl(); $this->assignRef('more_reviews', $uristring); if ($product->metadesc) { $document->setDescription($product->metadesc); } if ($product->metakey) { $document->setMetaData('keywords', $product->metakey); } if ($product->metarobot) { $document->setMetaData('robots', $product->metarobot); } if ($mainframe->getCfg('MetaTitle') == '1') { $document->setMetaData('title', $product->product_name); //Maybe better product_name } if ($mainframe->getCfg('MetaAuthor') == '1') { $document->setMetaData('author', $product->metaauthor); } $showBasePrice = Permissions::getInstance()->check('admin'); //todo add config settings $this->assignRef('showBasePrice', $showBasePrice); $productDisplayShipments = array(); $productDisplayPayments = array(); if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); JPluginHelper::importPlugin('vmshipment'); JPluginHelper::importPlugin('vmpayment'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmOnProductDisplayShipment', array($product, &$productDisplayShipments)); $returnValues = $dispatcher->trigger('plgVmOnProductDisplayPayment', array($product, &$productDisplayPayments)); $this->assignRef('productDisplayPayments', $productDisplayPayments); $this->assignRef('productDisplayShipments', $productDisplayShipments); if (empty($category->category_template)) { $category->category_template = VmConfig::get('categorytemplate'); } shopFunctionsF::setVmTemplate($this, $category->category_template, $product->product_template, $category->category_product_layout, $product->layout); shopFunctionsF::addProductToRecent($virtuemart_product_id); $currency = CurrencyDisplay::getInstance(); $this->assignRef('currency', $currency); if(JRequest::getCmd( 'layout', 'default' )=='notify') $this->setLayout('notify'); //Added by Seyi Awofadeju to catch notify layout parent::display($tpl); } function renderMailLayout ($doVendor, $recipient) { $tpl = VmConfig::get('order_mail_html') ? 'mail_html_notify' : 'mail_raw_notify'; $this->doVendor=$doVendor; $this->fromPdf=false; $this->uselayout = $tpl; $this->subject = !empty($this->subject) ? $this->subject : JText::_('COM_VIRTUEMART_CART_NOTIFY_MAIL_SUBJECT'); $this->layoutName = $tpl; $this->setLayout($tpl); parent::display(); } private function showLastCategory($tpl) { $virtuemart_category_id = shopFunctionsF::getLastVisitedCategoryId(); $categoryLink = ''; if ($virtuemart_category_id) { $categoryLink = '&virtuemart_category_id=' . $virtuemart_category_id; } $continue_link = JRoute::_('index.php?option=com_virtuemart&view=category' . $categoryLink, FALSE); $continue_link_html = '' . JText::_('COM_VIRTUEMART_CONTINUE_SHOPPING') . ''; $this->assignRef('continue_link_html', $continue_link_html); // Display it all parent::display($tpl); } } // pure php no closing tagviews/productdetails/tmpl/default_relatedcategories.php000066600000002301151373621660017620 0ustar00 views/productdetails/tmpl/default_reviews.php000066600000017560151373621660015633 0ustar00allowRating || $this->showReview) { $maxrating = VmConfig::get ('vm_maximum_rating_scale', 5); $ratingsShow = VmConfig::get ('vm_num_ratings_show', 3); // TODO add vm_num_ratings_show in vmConfig $stars = array(); $showall = JRequest::getBool ('showall', FALSE); $ratingWidth = $maxrating * 24; for ($num = 0; $num <= $maxrating; $num++) { $stars[] = ' '; } ?>
          showReview) { ?>

          rating_reviews) { foreach ($this->rating_reviews as $review) { if ($i % 2 == 0) { $color = 'normal'; } else { $color = 'highlight'; } /* Check if user already commented */ // if ($review->virtuemart_userid == $this->user->id ) { if ($review->created_by == $this->user->id && !$review->review_editable) { $review_editable = FALSE; } ?> rating_reviews) && $review->published) { $reviews_published++; ?>
          created_on, JText::_ ('DATE_FORMAT_LC')); ?> review_rating] ?>
          comment; ?>
          customer ?>
          = $ratingsShow) { $attribute = array('class'=> 'details', 'title'=> JText::_ ('COM_VIRTUEMART_MORE_REVIEWS')); echo JHTML::link ($this->more_reviews, JText::_ ('COM_VIRTUEMART_MORE_REVIEWS'), $attribute); } break; } } } else { // "There are no reviews for this product" ?>
          allowReview) { ?>
          " . VmConfig::get ('reviews_maximum_comment_length', 2000) . ") { alert('" . addslashes (JText::sprintf ('COM_VIRTUEMART_REVIEW_ERR_COMMENT2_JS', VmConfig::get ('reviews_maximum_comment_length', 2000))) . "'); return false; } else { return true; } } function refresh_counter() { var form = document.getElementById('reviewform'); form.counter.value= form.comment.value.length; } jQuery(function($) { var steps = " . $maxrating . "; var parentPos= $('.write-reviews .ratingbox').position(); var boxWidth = $('.write-reviews .ratingbox').width();// nbr of total pixels var starSize = (boxWidth/steps); var ratingboxPos= $('.write-reviews .ratingbox').offset(); $('.write-reviews .ratingbox').mousemove( function(e){ var span = $(this).children(); var dif = e.pageX-ratingboxPos.left; // nbr of pixels difRatio = Math.floor(dif/boxWidth* steps )+1; //step span.width(difRatio*starSize); $('#vote').val(difRatio); //console.log('note = ', difRatio); }); }); //]]> "; $document = JFactory::getDocument (); $document->addScriptDeclaration ($reviewJavascript); if ($this->showRating) { if ($this->allowRating && $review_editable) { ?>





          ' . JText::_ ('COM_VIRTUEMART_DEAR') . $this->user->name . ',
          '; echo JText::_ ('COM_VIRTUEMART_REVIEW_ALREADYDONE'); } ?>
          allowRating || $this->showReview) { ?>
          views/productdetails/tmpl/default_relatedproducts.php000066600000002347151373621660017350 0ustar00 views/productdetails/tmpl/default_showcategory.php000066600000005613151373621660016661 0ustar00category->haschildren) { $iCol = 1; $iCategory = 1; $categories_per_row = VmConfig::get('categories_per_row', 3); $category_cellwidth = ' width' . floor(100 / $categories_per_row); $verticalseparator = " vertical-separator"; ?>
          category->children)) { foreach ($this->category->children as $category) { // Show the horizontal seperator if ($iCol == 1 && $iCategory > $categories_per_row) { ?>
          product->prices['salesPrice'])) { echo "" . JText::_ ('COM_VIRTUEMART_CART_PRICE') . ""; } //vmdebug('view productdetails layout default show prices, prices',$this->product); if ($this->product->prices['salesPrice']<=0 and VmConfig::get ('askprice', 1) and isset($this->product->images[0]) and !$this->product->images[0]->file_is_downloadable) { ?> showBasePrice) { echo $this->currency->createPriceDiv ('basePrice', 'COM_VIRTUEMART_PRODUCT_BASEPRICE', $this->product->prices); if (round($this->product->prices['basePrice'],$this->currency->_priceConfig['basePriceVariant'][1]) != $this->product->prices['basePriceVariant']) { echo $this->currency->createPriceDiv ('basePriceVariant', 'COM_VIRTUEMART_PRODUCT_BASEPRICE_VARIANT', $this->product->prices); } } echo $this->currency->createPriceDiv ('variantModification', 'COM_VIRTUEMART_PRODUCT_VARIANT_MOD', $this->product->prices); if (round($this->product->prices['basePriceWithTax'],$this->currency->_priceConfig['salesPrice'][1]) != $this->product->prices['salesPrice']) { echo '' . $this->currency->createPriceDiv ('basePriceWithTax', 'COM_VIRTUEMART_PRODUCT_BASEPRICE_WITHTAX', $this->product->prices) . ""; } if (round($this->product->prices['salesPriceWithDiscount'],$this->currency->_priceConfig['salesPrice'][1]) != $this->product->prices['salesPrice']) { echo $this->currency->createPriceDiv ('salesPriceWithDiscount', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITH_DISCOUNT', $this->product->prices); } echo $this->currency->createPriceDiv ('salesPrice', 'COM_VIRTUEMART_PRODUCT_SALESPRICE', $this->product->prices); if ($this->product->prices['discountedPriceWithoutTax'] != $this->product->prices['priceWithoutTax']) { echo $this->currency->createPriceDiv ('discountedPriceWithoutTax', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITHOUT_TAX', $this->product->prices); } else { echo $this->currency->createPriceDiv ('priceWithoutTax', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITHOUT_TAX', $this->product->prices); } echo $this->currency->createPriceDiv ('discountAmount', 'COM_VIRTUEMART_PRODUCT_DISCOUNT_AMOUNT', $this->product->prices); echo $this->currency->createPriceDiv ('taxAmount', 'COM_VIRTUEMART_PRODUCT_TAX_AMOUNT', $this->product->prices); $unitPriceDescription = JText::sprintf ('COM_VIRTUEMART_PRODUCT_UNITPRICE', JText::_('COM_VIRTUEMART_UNIT_SYMBOL_'.$this->product->product_unit)); echo $this->currency->createPriceDiv ('unitPrice', $unitPriceDescription, $this->product->prices); } ?>
          views/productdetails/tmpl/default_customfields.php000066600000003416151373621660016643 0ustar00
          product->customfieldsSorted[$this->position] as $field) { if ( $field->is_hidden ) //OSP http://forum.virtuemart.net/index.php?topic=99320.0 continue; if ($field->display) { ?>
          custom_title != $custom_title && $field->show_title) { ?> custom_title); ?> custom_tip) echo JHTML::tooltip($field->custom_tip, JText::_($field->custom_title), 'tooltip.png'); } ?> display ?> custom_field_desc) ?>
          custom_title; } } ?>
          views/productdetails/tmpl/default_images.php000066600000006402151373621660015405 0ustar00addScriptDeclaration ($imageJS); if (!empty($this->product->images)) { $image = $this->product->images[0]; ?>
          displayMediaFull("",true,"rel='vm-additional-images'"); ?>
          product->images); if ($count_images > 1) { ?>
          product->images[$i]; ?>
          displayMediaThumb('class="product-image" style="cursor: pointer"',false,""); echo ''; } else { echo $image->displayMediaThumb("",true,"rel='vm-additional-images'"); } ?>
          views/productdetails/tmpl/mail_raw_notify.php000066600000003242151373621660015616 0ustar00vendorAddress; echo "\n"; echo "\n"; echo JText::sprintf ('COM_VIRTUEMART_MAIL_SHOPPER_NAME', $this->user->name); echo "\n"; echo "\n"; if(!empty($this->mailbody)) { echo $this->mailbody; } else { echo str_replace( "
          ", "\n", JText::sprintf('COM_VIRTUEMART_CART_NOTIFY_MAIL_RAW', $this->productName,$this->link) ); } echo "\n"; $link = JURI::root().'index.php?option=com_virtuemart'; echo "\n\n"; $link= JHTML::_('link', $link, $this->vendor->vendor_name) ; // echo JText::_('COM_VIRTUEMART_MAIL_VENDOR_TITLE').$this->vendor->vendor_name.'
          '; /* GENERAL FOOTER FOR ALL MAILS */ echo JText::_('COM_VIRTUEMART_MAIL_FOOTER' ) . $link; echo "\n"; echo $this->vendor->vendor_name ."\n".$this->vendor->vendor_phone .' '.$this->vendor->vendor_store_name ."\n".strip_tags($this->vendor->vendor_store_desc)."\n".str_replace('
          ',"\n",$this->vendor->vendor_legal_info); views/productdetails/tmpl/notify.php000066600000004245151373621660013747 0ustar00

          product->product_name); ?>




          views/productdetails/tmpl/pdf.xml000066600000000346151373621660013217 0ustar00 views/productdetails/tmpl/default_addtocart.php000066600000013210151373621660016100 0ustar00product->step_order_level)) $step=$this->product->step_order_level; else $step=1; if($step==0) $step=1; $alert=JText::sprintf ('COM_VIRTUEMART_WRONG_AMOUNT_ADDED', $step); ?>
          product->customfieldsCart)) { ?>
          product->customfieldsCart as $field) { ?>
          show_title) { ?> custom_title) ?> custom_tip) { echo JHTML::tooltip (vmText::_($field->custom_tip), vmText::_ ($field->custom_title), 'tooltip.png'); } ?> display ?> custom_field_desc) ?>

          virtuemart_product_id as link to child product_id * custom_value is relation value to child */ if (!empty($this->product->customsChilds)) { ?>
          product->customsChilds as $field) { ?>
          field->custom_title) ?> field->custom_value) ?> display ?>

          product->product_in_stock - $this->product->product_ordered) < 1) { ?> product->prices['costPrice']; if (!( VmConfig::get('askprice', 0) and empty($tmpPrice) ) ) { ?> product->orderable); // Display the add to cart button END ?>
          views/productdetails/tmpl/pdf.php000066600000030422151373621660013204 0ustar00product )) { echo JText::_ ( 'COM_VIRTUEMART_PRODUCT_NOT_FOUND' ); echo '

          ' . $this->continue_link_html; return; } ?>

          product->product_name ?>

          product->images) && count($this->product->images)>0) { echo $this->product->images[0]->displayMediaFull('class="product-image"',false); ?>
          product->images as $image) { echo $image->displayMediaThumb('class="product-image"'); //'class="modal"' } ?>
          product->product_s_desc)) { ?>
          product->product_s_desc; ?>
          product->virtuemart_vendor_id); $text = JText::_('COM_VIRTUEMART_VENDOR_FORM_INFO_LBL'); echo ''. JText::_('COM_VIRTUEMART_PRODUCT_DETAILS_VENDOR_LBL'). ''; ?>
          */ ?> rating)? JText::_('COM_VIRTUEMART_UNRATED'):$this->rating->rating; echo JText::_('COM_VIRTUEMART_RATING') . $rating; // Product Price if ($this->show_prices) { ?>
          product->product_unit && VmConfig::get ( 'price_show_packaging_pricelabel' )) { echo "" . JText::_ ( 'COM_VIRTUEMART_CART_PRICE_PER_UNIT' ) . ' (' . $this->product->product_unit . "):"; } else { echo "" . JText::_ ( 'COM_VIRTUEMART_CART_PRICE' ) . ""; } if ($this->showBasePrice) { echo $this->currency->createPriceDiv ( 'basePrice', 'COM_VIRTUEMART_PRODUCT_BASEPRICE', $this->product->prices ); echo $this->currency->createPriceDiv ( 'basePriceVariant', 'COM_VIRTUEMART_PRODUCT_BASEPRICE_VARIANT', $this->product->prices ); } echo $this->currency->createPriceDiv ( 'variantModification', 'COM_VIRTUEMART_PRODUCT_VARIANT_MOD', $this->product->prices ); echo $this->currency->createPriceDiv ( 'basePriceWithTax', 'COM_VIRTUEMART_PRODUCT_BASEPRICE_WITHTAX', $this->product->prices ); echo $this->currency->createPriceDiv ( 'discountedPriceWithoutTax', 'COM_VIRTUEMART_PRODUCT_DISCOUNTED_PRICE', $this->product->prices ); echo $this->currency->createPriceDiv ( 'salesPriceWithDiscount', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITH_DISCOUNT', $this->product->prices ); echo $this->currency->createPriceDiv ( 'salesPrice', 'COM_VIRTUEMART_PRODUCT_SALESPRICE', $this->product->prices ); echo $this->currency->createPriceDiv ( 'priceWithoutTax', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITHOUT_TAX', $this->product->prices ); echo $this->currency->createPriceDiv ( 'discountAmount', 'COM_VIRTUEMART_PRODUCT_DISCOUNT_AMOUNT', $this->product->prices ); echo $this->currency->createPriceDiv ( 'taxAmount', 'COM_VIRTUEMART_PRODUCT_TAX_AMOUNT', $this->product->prices ); ?>
          product->customfieldsCart)) { ?>
          product->customfieldsCart as $field) { ?>
          custom_title ?> custom_tip, $field->custom_title, 'tooltip.png'); ?> display ?> custom_field_desc ?>

          virtuemart_product_id as link to child product_id * custom_value is relation value to child */ if (!empty($this->product->customsChilds)) { ?>
          product->customsChilds as $field) { ?>
          field->custom_title ?> field->custom_value ?> display ?>

          product->product_availability)) { ?>
          product->product_availability, $this->product->product_availability, array('class' => 'availability')); ?>
          product->virtuemart_product_id.'&virtuemart_category_id='.$this->product->virtuemart_category_id.'&tmpl=component'); ?>
          product->virtuemart_manufacturer_id)) { ?>
          product->virtuemart_manufacturer_id.'&tmpl=component'); $text = $this->product->mf_name; /* Avoid JavaScript on PDF Output */ if (strtolower(JRequest::getWord('output')) == "pdf"){ echo JHTML::_('link', $link, $text); } else { ?>
          product->product_desc)) { ?>
          product->product_desc; ?>
          product->customfields)) { ?>
          product->customfields as $field){ ?>
          custom_title != $custom_title) { ?> custom_title); ?> custom_tip, $field->custom_title, 'tooltip.png'); } ?> display ?> custom_field_desc) ?>
          custom_title; } ?>
          product->packaging || $this->product->box) { ?>

          product->packaging) { $product_packaging .= JText::_('COM_VIRTUEMART_PRODUCT_PACKAGING1').$this->product->packaging; if ($this->product->box) $product_packaging .= '
          '; } if ($this->product->box) $product_packaging .= JText::_('COM_VIRTUEMART_PRODUCT_PACKAGING2').$this->product->box; echo str_replace("{unit}",$this->product->product_unit ? $this->product->product_unit : JText::_('COM_VIRTUEMART_PRODUCT_FORM_UNIT_DEFAULT'), $product_packaging); ?>
          showReview ) { $maxrating = VmConfig::get('vm_maximum_rating_scale',5); $ratingsShow = VmConfig::get('vm_num_ratings_show',3); // TODO add vm_num_ratings_show in vmConfig $starsPath = JURI::root().VmConfig::get('assets_general_path').'images/stars/'; $stars = array(); $showall = JRequest::getBool('showall', false); for ($num=0 ; $num <= $maxrating; $num++ ) { $title = (JText::_("VM_RATING_TITLE").' : '. $num . '/' . $maxrating) ; $stars[] = JHTML::image($starsPath.$num.'.gif', JText::_($num.'_STARS'), array("title" => $title) ); } ?>
          showReview) { $alreadycommented = false; ?>

          rating_reviews as $review ) { if ($i % 2 == 0) { $color = 'normal'; } else { $color = 'highlight'; } // Loop through all reviews if (!empty($this->rating_reviews)) { ?>
          created_on, JText::_('DATE_FORMAT_LC')); ?> review_rating ] //Attention the review rating is the rating of the review itself, rating for the product is the vote !?>
          comment; ?>
          customer ?>
          rating_reviews) < 1) { // "There are no reviews for this product" ?> rating_reviews) >= $ratingsShow ) { $attribute = array('class'=>'details', 'title'=>JText::_('COM_VIRTUEMART_MORE_REVIEWS')); echo JHTML::link($this->more_reviews, JText::_('COM_VIRTUEMART_MORE_REVIEWS'),$attribute); } } ?>
          '.JText::_('COM_VIRTUEMART_DEAR').$this->user->name.',
          ' ; // echo JText::_('COM_VIRTUEMART_REVIEW_ALREADYDONE'); // } if( $this->showReview ) { ?>
          views/productdetails/tmpl/default_manufacturer.php000066600000002660151373621660016636 0ustar00
          product->virtuemart_manufacturer_id . '&tmpl=component', FALSE); $text = $this->product->mf_name; /* Avoid JavaScript on PDF Output */ if (strtolower(JRequest::getWord('output')) == "pdf") { echo JHTML::_('link', $link, $text); } else { ?>
          views/productdetails/tmpl/.htaccess000066600000000177151373621660013524 0ustar00 Order allow,deny Deny from all views/productdetails/tmpl/default.php000066600000034722151373621660014066 0ustar00product)) { echo JText::_('COM_VIRTUEMART_PRODUCT_NOT_FOUND'); echo '

          ' . $this->continue_link_html; return; } if(JRequest::getInt('print',false)){ ?> product->virtuemart_product_id . '&virtuemart_category_id=' . $this->product->virtuemart_category_id . '&tmpl=component'; $boxFuncReco = ''; $boxFuncAsk = ''; if(VmConfig::get('usefancy',1)){ vmJsApi::js( 'fancybox/jquery.fancybox-1.3.4.pack'); vmJsApi::css('jquery.fancybox-1.3.4'); if(VmConfig::get('show_emailfriend',0)){ $boxReco = "jQuery.fancybox({ href: '" . $MailLink . "', type: 'iframe', height: '550' });"; } if(VmConfig::get('ask_question', 0)){ $boxAsk = "jQuery.fancybox({ href: '" . $this->askquestion_url . "', type: 'iframe', height: '550' });"; } } else { vmJsApi::js( 'facebox' ); vmJsApi::css( 'facebox' ); if(VmConfig::get('show_emailfriend',0)){ $boxReco = "jQuery.facebox({ iframe: '" . $MailLink . "', rev: 'iframe|550|550' });"; } if(VmConfig::get('ask_question', 0)){ $boxAsk = "jQuery.facebox({ iframe: '" . $this->askquestion_url . "', rev: 'iframe|550|550' });"; } } if(VmConfig::get('show_emailfriend',0) ){ $boxFuncReco = "jQuery('a.recommened-to-friend').click( function(){ ".$boxReco." return false ; });"; } if(VmConfig::get('ask_question', 0)){ $boxFuncAsk = "jQuery('a.ask-a-question').click( function(){ ".$boxAsk." return false ; });"; } if(!empty($boxFuncAsk) or !empty($boxFuncReco)){ $document = JFactory::getDocument(); $document->addScriptDeclaration(" // "); } ?>
          product->neighbours ['previous'][0])) { $prev_link = JRoute::_('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $this->product->neighbours ['previous'][0] ['virtuemart_product_id'] . '&virtuemart_category_id=' . $this->product->virtuemart_category_id, FALSE); echo JHTML::_('link', $prev_link, $this->product->neighbours ['previous'][0] ['product_name'], array('rel'=>'prev', 'class' => 'previous-page')); } if (!empty($this->product->neighbours ['next'][0])) { $next_link = JRoute::_('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $this->product->neighbours ['next'][0] ['virtuemart_product_id'] . '&virtuemart_category_id=' . $this->product->virtuemart_category_id, FALSE); echo JHTML::_('link', $next_link, $this->product->neighbours ['next'][0] ['product_name'], array('rel'=>'next','class' => 'next-page')); } ?>
          product->virtuemart_category_id) { $catURL = JRoute::_('index.php?option=com_virtuemart&view=category&virtuemart_category_id='.$this->product->virtuemart_category_id, FALSE); $categoryName = $this->product->category_name ; } else { $catURL = JRoute::_('index.php?option=com_virtuemart'); $categoryName = jText::_('COM_VIRTUEMART_SHOP_HOME') ; } ?>

          product->product_name ?>

          product->event->afterDisplayTitle ?> edit_link; // Product Edit Link END ?>
          product->virtuemart_product_id; echo $this->linkIcon($link . '&format=pdf', 'COM_VIRTUEMART_PDF', 'pdf_button', 'pdf_icon', false); echo $this->linkIcon($link . '&print=1', 'COM_VIRTUEMART_PRINT', 'printButton', 'show_printicon'); echo $this->linkIcon($MailLink, 'COM_VIRTUEMART_EMAIL', 'emailButton', 'show_emailfriend', false,true,false,'class="recommened-to-friend"'); ?>
          product->product_s_desc)) { ?>
          product->product_s_desc); ?>
          product->customfieldsSorted['ontop'])) { $this->position = 'ontop'; echo $this->loadTemplate('customfields'); } // Product Custom ontop end ?>
          loadTemplate('images'); ?>
          product->virtuemart_vendor_id); $text = JText::_('COM_VIRTUEMART_VENDOR_FORM_INFO_LBL'); echo ''. JText::_('COM_VIRTUEMART_PRODUCT_DETAILS_VENDOR_LBL'). ''; ?>
          */ ?> showRating) { $maxrating = VmConfig::get('vm_maximum_rating_scale', 5); if (empty($this->rating)) { ?> rating->rating * 24; //I don't use round as percetntage with works perfect, as for me ?> rating->rating) . '/' . $maxrating; ?>
          rating->rating) . '/' . $maxrating) ?>" class="ratingbox" style="display:inline-block;">
          productDisplayShipments)) { foreach ($this->productDisplayShipments as $productDisplayShipment) { echo $productDisplayShipment . '
          '; } } if (is_array($this->productDisplayPayments)) { foreach ($this->productDisplayPayments as $productDisplayPayment) { echo $productDisplayPayment . '
          '; } } // Product Price // the test is done in show_prices //if ($this->show_prices and (empty($this->product->images[0]) or $this->product->images[0]->file_is_downloadable == 0)) { echo $this->loadTemplate('showprices'); //} ?> product->prices) and !empty($this->product->images[0]) and $this->product->images[0]->file_is_downloadable==0 ) { // if (!VmConfig::get('use_as_catalog', 0) and !empty($this->product->prices['salesPrice'])) { echo $this->loadTemplate('addtocart'); // } // Add To Cart Button END ?> product->product_available_date,0,10); $current_date = date("Y-m-d"); if (($this->product->product_in_stock - $this->product->product_ordered) < 1) { if ($product_available_date != '0000-00-00' and $current_date < $product_available_date) { ?>
          product->product_available_date, JText::_('DATE_FORMAT_LC4')); ?>
          product->product_availability)) { ?>
          'availability')) : JText::_(VmConfig::get('rised_availability')); ?>
          product->product_availability)) { ?>
          product->product_availability)) ? JHTML::image(JURI::root() . VmConfig::get('assets_general_path') . 'images/availability/' . $this->product->product_availability, $this->product->product_availability, array('class' => 'availability')) : JText::_($this->product->product_availability); ?>
          product->product_available_date, JText::_('DATE_FORMAT_LC4')); ?>
          product->virtuemart_manufacturer_id)) { echo $this->loadTemplate('manufacturer'); } ?>
          product->event->beforeDisplayContent; ?> product->product_desc)) { ?>
          product->product_desc; ?>
          product->customfieldsSorted['normal'])) { $this->position = 'normal'; echo $this->loadTemplate('customfields'); } // Product custom_fields END // Product Packaging $product_packaging = ''; if ($this->product->product_box) { ?>
          product->product_box; ?>
          product->images as $fkey => $file) { // Todo add downloadable files again // if( $file->filesize > 0.5) $filesize_display = ' ('. number_format($file->filesize, 2,',','.')." MB)"; // else $filesize_display = ' ('. number_format($file->filesize*1024, 2,',','.')." KB)"; /* Show pdf in a new Window, other file types will be offered as download */ // $target = stristr($file->file_mimetype, "pdf") ? "_blank" : "_self"; // $link = JRoute::_('index.php?view=productdetails&task=getfile&virtuemart_media_id='.$file->virtuemart_media_id.'&virtuemart_product_id='.$this->product->virtuemart_product_id); // echo JHTMl::_('link', $link, $file->file_title.$filesize_display, array('target' => $target)); // } if (!empty($this->product->customfieldsRelatedProducts)) { echo $this->loadTemplate('relatedproducts'); } // Product customfieldsRelatedProducts END if (!empty($this->product->customfieldsRelatedCategories)) { echo $this->loadTemplate('relatedcategories'); } // Product customfieldsRelatedCategories END // Show child categories if (VmConfig::get('showCategory', 1)) { echo $this->loadTemplate('showcategory'); } if (!empty($this->product->customfieldsSorted['onbot'])) { $this->position='onbot'; echo $this->loadTemplate('customfields'); } // Product Custom ontop end ?> product->event->afterDisplayContent; ?> loadTemplate('reviews'); ?>
          views/productdetails/tmpl/default.xml000066600000002163151373621660014071 0ustar00 COM_VIRTUEMART_PRODUCTDETAILS_VIEW_DEFAULT_TITLE
          views/productdetails/tmpl/default_pdf.php000066600000032173151373621660014715 0ustar00type)) { $document = JFactory::getDocument(); $document->setTitle($this->product->product_name); $document->setName($this->product->product_name); $document->setDescription( $this->product->product_s_desc); } /* Let's see if we found the product */ if (empty ( $this->product )) { echo JText::_ ( 'COM_VIRTUEMART_PRODUCT_NOT_FOUND' ); echo '

          ' . $this->continue_link_html; return; } ?>

          product->product_name ?>

          product->images) && count($this->product->images)>0) { echo $this->product->images[0]->displayMediaFull('class="product-image"',false); ?>
          product->images as $image) { echo $image->displayMediaThumb('class="product-image"'); //'class="modal"' } ?>
          product->product_s_desc)) { ?>
          product->product_s_desc; ?>
          product->virtuemart_vendor_id); $text = JText::_('COM_VIRTUEMART_VENDOR_FORM_INFO_LBL'); echo ''. JText::_('COM_VIRTUEMART_PRODUCT_DETAILS_VENDOR_LBL'). ''; ?>
          */ ?> rating)? JText::_('COM_VIRTUEMART_UNRATED'):$this->rating->rating; echo JText::_('COM_VIRTUEMART_RATING') . $rating; // Product Price if ($this->show_prices) { ?>
          product->product_unit && VmConfig::get ( 'price_show_packaging_pricelabel' )) { echo "" . JText::_ ( 'COM_VIRTUEMART_CART_PRICE_PER_UNIT' ) . ' (' . $this->product->product_unit . "):"; } else { echo "" . JText::_ ( 'COM_VIRTUEMART_CART_PRICE' ) . ""; } echo $this->currency->createPriceDiv ( 'variantModification', 'COM_VIRTUEMART_PRODUCT_VARIANT_MOD', $this->product->prices ); echo $this->currency->createPriceDiv ( 'basePriceWithTax', 'COM_VIRTUEMART_PRODUCT_BASEPRICE_WITHTAX', $this->product->prices ); echo $this->currency->createPriceDiv ( 'discountedPriceWithoutTax', 'COM_VIRTUEMART_PRODUCT_DISCOUNTED_PRICE', $this->product->prices ); echo $this->currency->createPriceDiv ( 'salesPriceWithDiscount', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITH_DISCOUNT', $this->product->prices ); echo $this->currency->createPriceDiv ( 'salesPrice', 'COM_VIRTUEMART_PRODUCT_SALESPRICE', $this->product->prices ); echo $this->currency->createPriceDiv ( 'priceWithoutTax', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITHOUT_TAX', $this->product->prices ); echo $this->currency->createPriceDiv ( 'discountAmount', 'COM_VIRTUEMART_PRODUCT_DISCOUNT_AMOUNT', $this->product->prices ); echo $this->currency->createPriceDiv ( 'taxAmount', 'COM_VIRTUEMART_PRODUCT_TAX_AMOUNT', $this->product->prices ); ?>
          product->product_availability)) { ?>
          product->product_availability, $this->product->product_availability, array('class' => 'availability')); ?>
          product->virtuemart_product_id.'&virtuemart_category_id='.$this->product->virtuemart_category_id.'&tmpl=component'); ?>
          product->virtuemart_manufacturer_id)) { ?>
          product->virtuemart_manufacturer_id.'&tmpl=component'); $text = $this->product->mf_name; /* Avoid JavaScript on PDF Output */ if (strtolower(JRequest::getWord('output')) == "pdf"){ echo JHTML::_('link', $link, $text); } else { ?>
          product->product_desc)) { ?>
          product->product_desc; ?>
          product->customfields)) { ?>
          product->customfields as $field){ ?>
          custom_title != $custom_title) { ?> custom_title); ?> custom_tip, $field->custom_title, 'tooltip.png'); } ?> display ?> custom_field_desc) ?>
          custom_title; } ?>
          product->product_box) { ?>
          product->product_box; ?>
          product->images as $fkey => $file) { // Todo add downloadable files again // if( $file->filesize > 0.5) $filesize_display = ' ('. number_format($file->filesize, 2,',','.')." MB)"; // else $filesize_display = ' ('. number_format($file->filesize*1024, 2,',','.')." KB)"; /* Show pdf in a new Window, other file types will be offered as download */ // $target = stristr($file->file_mimetype, "pdf") ? "_blank" : "_self"; // $link = JRoute::_('index.php?view=productdetails&task=getfile&virtuemart_media_id='.$file->virtuemart_media_id.'&virtuemart_product_id='.$this->product->virtuemart_product_id); // echo JHTMl::_('link', $link, $file->file_title.$filesize_display, array('target' => $target)); // } ?> product->related && !empty($this->product->related)) { $iRelatedCol = 1; $iRelatedProduct = 1; $RelatedProducts_per_row = 4 ; $Relatedcellwidth = ' width'.floor ( 100 / $RelatedProducts_per_row ); $verticalseparator = " vertical-separator"; ?>
          allowRating || $this->showReview) { $maxrating = VmConfig::get('vm_maximum_rating_scale',5); $ratingsShow = VmConfig::get('vm_num_ratings_show',3); // TODO add vm_num_ratings_show in vmConfig $starsPath = JURI::root().VmConfig::get('assets_general_path').'images/stars/'; $stars = array(); $showall = JRequest::getBool('showall', false); for ($num=0 ; $num <= $maxrating; $num++ ) { $title = (JText::_("VM_RATING_TITLE").' : '. $num . '/' . $maxrating) ; $stars[] = JHTML::image($starsPath.$num.'.gif', JText::_($num.'_STARS'), array("title" => $title) ); } ?>
          showReview) { $alreadycommented = false; ?>

          rating_reviews as $review ) { if ($i % 2 == 0) { $color = 'normal'; } else { $color = 'highlight'; } ?> rating_reviews)) { ?>
          created_on, JText::_('DATE_FORMAT_LC')); ?> review_rating ] //Attention the review rating is the rating of the review itself, rating for the product is the vote !?>
          comment; ?>
          customer ?>
          rating_reviews) < 1) { // "There are no reviews for this product" ?> rating_reviews) >= $ratingsShow ) { $attribute = array('class'=>'details', 'title'=>JText::_('COM_VIRTUEMART_MORE_REVIEWS')); echo JHTML::link($this->more_reviews, JText::_('COM_VIRTUEMART_MORE_REVIEWS'),$attribute); } } ?>
          allowRating || $this->showReview) { ?>
          views/productdetails/tmpl/mail_html_notify.php000066600000006576151373621660016006 0ustar00

          '; /* GENERAL FOOTER FOR ALL MAILS */ $link = JURI::root().'index.php?option=com_virtuemart'; echo JText::_('COM_VIRTUEMART_MAIL_FOOTER' ) . ''.$this->vendor->vendor_name.''; echo '
          '; echo $this->vendor->vendor_name .'
          '.$this->vendor->vendor_phone .' '.$this->vendor->vendor_store_name .'
          '.$this->vendor->vendor_store_desc.'
          '.$this->vendor->vendor_legal_info; ?>
          views/productdetails/.htaccess000066600000000177151373621660012550 0ustar00 Order allow,deny Deny from all views/productdetails/index.html000066600000000054151373621660012741 0ustar00views/pluginresponse/metadata.xml000066600000000331151373621660013273 0ustar00 views/pluginresponse/.htaccess000066600000000177151373621660012577 0ustar00 Order allow,deny Deny from all views/pluginresponse/view.html.php000066600000003046151373621660013425 0ustar00getPathway(); $document = JFactory::getDocument(); // $paymentResponse = JRequest::getVar('paymentResponse', ''); //Why do you we allow raw here? // $paymentResponseHtml = JRequest::getVar('paymentResponseHtml','','default','STRING',JREQUEST_ALLOWRAW); $layoutName = $this->getLayout(); $document->setMetaData('robots','NOINDEX, NOFOLLOW, NOARCHIVE, NOSNIPPET'); parent::display($tpl); } } //no closing tagviews/pluginresponse/index.html000066600000000000151373621660012757 0ustar00views/pluginresponse/tmpl/default.php000066600000001722151373621660014107 0ustar00" . $this->paymentResponse . ""; if ($this->paymentResponseHtml) { echo "
          "; echo $this->paymentResponseHtml; echo "
          "; } // add something??? views/pluginresponse/tmpl/index.html000066600000000000151373621660013733 0ustar00views/pluginresponse/tmpl/.htaccess000066600000000177151373621660013553 0ustar00 Order allow,deny Deny from all views/virtuemart/view.html.php000066600000014757151373621660012565 0ustar00setId(1); $vendor = $vendorModel->getVendor(); if(!class_exists('shopFunctionsF'))require(JPATH_VM_SITE.DS.'helpers'.DS.'shopfunctionsf.php'); if (VmConfig::get ('enable_content_plugin', 0)) { shopFunctionsF::triggerContentPlugin($vendor, 'vendor','vendor_store_desc'); shopFunctionsF::triggerContentPlugin($vendor, 'vendor','vendor_terms_of_service'); } $this->assignRef('vendor',$vendor); $document = JFactory::getDocument(); if(!VmConfig::get('shop_is_offline',0)){ $categoryModel = VmModel::getModel('category'); $productModel = VmModel::getModel('product'); $ratingModel = VmModel::getModel('ratings'); $productModel->withRating = $ratingModel->showRating(); $products = array(); $categoryId = JRequest::getInt('catid', 0); $categoryChildren = $categoryModel->getChildCategoryList($vendorId, $categoryId); $categoryModel->addImages($categoryChildren,1); $this->assignRef('categories', $categoryChildren); if(!class_exists('CurrencyDisplay'))require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'currencydisplay.php'); $currency = CurrencyDisplay::getInstance( ); $this->assignRef('currency', $currency); $products_per_row = VmConfig::get('homepage_products_per_row',3); $featured_products_rows = VmConfig::get('featured_products_rows',1); $featured_products_count = $products_per_row * $featured_products_rows; if (!empty($featured_products_count) and VmConfig::get('show_featured', 1)) { $products['featured'] = $productModel->getProductListing('featured', $featured_products_count); $productModel->addImages($products['featured'],1); } $latest_products_rows = VmConfig::get('latest_products_rows'); $latest_products_count = $products_per_row * $latest_products_rows; if (!empty($latest_products_count) and VmConfig::get('show_latest', 1)) { $products['latest']= $productModel->getProductListing('latest', $latest_products_count); $productModel->addImages($products['latest'],1); } $topTen_products_rows = VmConfig::get('topTen_products_rows'); $topTen_products_count = $products_per_row * $topTen_products_rows; if (!empty($topTen_products_count) and VmConfig::get('show_topTen', 1)) { $products['topten']= $productModel->getProductListing('topten', $topTen_products_count); $productModel->addImages($products['topten'],1); } $recent_products_rows = VmConfig::get('recent_products_rows'); $recent_products_count = $products_per_row * $recent_products_rows; $recent_products = $productModel->getProductListing('recent'); if (!empty($recent_products_count) and VmConfig::get('show_recent', 1) and !empty($recent_products)) { $products['recent']= $productModel->getProductListing('recent', $recent_products_count); $productModel->addImages($products['recent'],1); } $this->assignRef('products', $products); if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); $showBasePrice = Permissions::getInstance()->check('admin'); //todo add config settings $this->assignRef('showBasePrice', $showBasePrice); // $layoutName = VmConfig::get('vmlayout','default'); $layout = VmConfig::get('vmlayout','default'); $this->setLayout($layout); // Add feed links if ($products && (VmConfig::get('feed_featured_published', 0)==1 or VmConfig::get('feed_topten_published', 0)==1 or VmConfig::get('feed_latest_published', 0)==1)) { $link = '&format=feed&limitstart='; $attribs = array('type' => 'application/rss+xml', 'title' => 'RSS 2.0'); $document->addHeadLink(JRoute::_($link . '&type=rss', FALSE), 'alternate', 'rel', $attribs); $attribs = array('type' => 'application/atom+xml', 'title' => 'Atom 1.0'); $document->addHeadLink(JRoute::_($link . '&type=atom', FALSE), 'alternate', 'rel', $attribs); } } else { $this->setLayout('off_line'); } $error = JRequest::getInt('error',0); //Todo this may not work everytime as expected, because the error must be set in the redirect links. if(!empty($error)){ $document->setTitle(JText::_('COM_VIRTUEMART_PRODUCT_NOT_FOUND').JText::sprintf('COM_VIRTUEMART_HOME',$vendor->vendor_store_name)); } else { if(empty($vendor->customtitle)){ $app = JFactory::getApplication(); $menus = $app->getMenu(); $menu = $menus->getActive(); if ($menu){ $menuTitle = $menu->params->get('page_title'); if(empty($menuTitle)) { $menuTitle = JText::sprintf('COM_VIRTUEMART_HOME',$vendor->vendor_store_name); } $document->setTitle($menuTitle); } else { $title = JText::sprintf('COM_VIRTUEMART_HOME',$vendor->vendor_store_name); $document->setTitle($title); } } else { $document->setTitle($vendor->customtitle); } if(!empty($vendor->metadesc)) $document->setMetaData('description',$vendor->metadesc); if(!empty($vendor->metakey)) $document->setMetaData('keywords',$vendor->metakey); if(!empty($vendor->metarobot)) $document->setMetaData('robots',$vendor->metarobot); if(!empty($vendor->metaauthor)) $document->setMetaData('author',$vendor->metaauthor); } $template = VmConfig::get('vmtemplate',0); shopFunctionsF::setTemplate($template); parent::display($tpl); } } # pure php no closing tagviews/virtuemart/view.feed.php000066600000012643151373621660012514 0ustar00getProductListing ('featured', $featured_nb); } if (VmConfig::get ('feed_latest_published', 1)) { $latest_nb = VmConfig::get('feed_latest_nb'); $latest = $productModel->getProductListing ('latest', $latest_nb); } if ( VmConfig::get ('feed_topten_published', 1)) { $topTen_nb = VmConfig::get('feed_topten_nb'); $topten = $productModel->getProductListing ('topten',$topTen_nb); } $products = array_merge ($products, $featured, $latest, $topten); if ($feed_show_images == 1) { $productModel->addImages ($products, 1); } if ($products && $feed_show_prices == 1) { $currency = CurrencyDisplay::getInstance (); } foreach ($products as $product) { $title = $this->escape ($product->product_name); $title = html_entity_decode ($title, ENT_COMPAT, 'UTF-8'); $description = ""; if ($feed_show_images == 1) { $effect = " "; $return = true; $withDescr = false; $absUrl = true; $description = $product->images[0]->displayMediaThumb ('style="margin-right: 10px; margin-bottom: 10px; float: left;"', false, $effect, $return, $withDescr, $absUrl); } if ($feed_show_description == 1) { if ($feed_description_type == 'product_s_desc') { $description .= $product->product_s_desc; } else { if ($feed_max_text_length > 0) { $description .= shopFunctionsF::limitStringByWord ($product->product_desc, $feed_max_text_length); } else { $description .= $product->product_desc; } } } if ($feed_show_prices == 1 and $show_prices == 1) { $description .= $currency->createPriceDiv ('variantModification', 'COM_VIRTUEMART_PRODUCT_VARIANT_MOD', $product->prices); if (round ($product->prices['basePriceWithTax'], $currency->_priceConfig['salesPrice'][1]) != $product->prices['salesPrice']) { $description .= '' . $currency->createPriceDiv ('basePriceWithTax', 'COM_VIRTUEMART_PRODUCT_BASEPRICE_WITHTAX', $product->prices) . ""; } if (round ($product->prices['salesPriceWithDiscount'], $currency->_priceConfig['salesPrice'][1]) != $product->prices['salesPrice']) { $description .= $currency->createPriceDiv ('salesPriceWithDiscount', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITH_DISCOUNT', $product->prices); } $description .= $currency->createPriceDiv ('salesPrice', 'COM_VIRTUEMART_PRODUCT_SALESPRICE', $product->prices); $description .= $currency->createPriceDiv ('priceWithoutTax', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITHOUT_TAX', $product->prices); $description .= $currency->createPriceDiv ('discountAmount', 'COM_VIRTUEMART_PRODUCT_DISCOUNT_AMOUNT', $product->prices); $description .= $currency->createPriceDiv ('taxAmount', 'COM_VIRTUEMART_PRODUCT_TAX_AMOUNT', $product->prices); $unitPriceDescription = JText::sprintf ('COM_VIRTUEMART_PRODUCT_UNITPRICE', $product->product_unit); $description .= $currency->createPriceDiv ('unitPrice', $unitPriceDescription, $product->prices); } if ($feed_description_type == 'product_s_desc' OR $feed_max_text_length > 0) { $description .= '

          link) . '">' . JText::_ ('COM_VIRTUEMART_FEED_READMORE') . '

          '; } $item = new JFeedItem(); $item->title = $title; $item->link = $product->link; $item->date = $product->created_on; $item->description = '
          ' . $description . '
          '; $item->category = $product->virtuemart_catgory_id; $doc->addItem ($item); } } }views/virtuemart/tmpl/default_products.php000066600000011543151373621660015161 0ustar00products as $type => $productList ) { // Calculating Products Per Row $products_per_row = VmConfig::get ( 'homepage_products_per_row', 3 ) ; $cellwidth = ' width'.floor ( 100 / $products_per_row ); // Category and Columns Counter $col = 1; $nb = 1; $productTitle = JText::_('COM_VIRTUEMART_'.$type.'_PRODUCT'); ?>

          $products_per_row) { ?>

          virtuemart_product_id . '&virtuemart_category_id=' . $product->virtuemart_category_id, FALSE ), $product->product_name, array ('title' => $product->product_name ) ); ?>

          images) { //echo JHTML::_ ( 'link', JRoute::_ ( 'index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $product->virtuemart_product_id . '&virtuemart_category_id=' . $product->virtuemart_category_id, FALSE ), $product->images[0]->displayMediaThumb( 'class="featuredProductImage"',true,'class="modal"' ) ); echo $product->images[0]->displayMediaThumb( 'class="featuredProductImage"',true,'class="modal"' ) ; } ?>
          product_unit && VmConfig::get('vm_price_show_packaging_pricelabel')) { // echo "". JText::_('COM_VIRTUEMART_CART_PRICE_PER_UNIT').' ('.$featProduct->product_unit."):"; // } else echo "". JText::_('COM_VIRTUEMART_CART_PRICE'). ": "; if ($this->showBasePrice) { echo $this->currency->createPriceDiv( 'basePrice', 'COM_VIRTUEMART_PRODUCT_BASEPRICE', $product->prices ); echo $this->currency->createPriceDiv( 'basePriceVariant', 'COM_VIRTUEMART_PRODUCT_BASEPRICE_VARIANT', $product->prices ); } echo $this->currency->createPriceDiv( 'variantModification', 'COM_VIRTUEMART_PRODUCT_VARIANT_MOD', $product->prices ); if (round($product->prices['basePriceWithTax'],$this->currency->_priceConfig['salesPrice'][1]) != $product->prices['salesPrice']) { echo '
          ' . $this->currency->createPriceDiv( 'basePriceWithTax', 'COM_VIRTUEMART_PRODUCT_BASEPRICE_WITHTAX', $product->prices ) . "
          "; } if (round($product->prices['salesPriceWithDiscount'],$this->currency->_priceConfig['salesPrice'][1]) != $product->prices['salesPrice']) { echo $this->currency->createPriceDiv( 'salesPriceWithDiscount', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITH_DISCOUNT', $product->prices ); } echo $this->currency->createPriceDiv( 'salesPrice', 'COM_VIRTUEMART_PRODUCT_SALESPRICE', $product->prices ); if ($product->prices['discountedPriceWithoutTax'] != $product->prices['priceWithoutTax']) { echo $this->currency->createPriceDiv( 'discountedPriceWithoutTax', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITHOUT_TAX', $product->prices ); } else { echo $this->currency->createPriceDiv( 'priceWithoutTax', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITHOUT_TAX', $product->prices ); } echo $this->currency->createPriceDiv( 'discountAmount', 'COM_VIRTUEMART_PRODUCT_DISCOUNT_AMOUNT', $product->prices ); echo $this->currency->createPriceDiv( 'taxAmount', 'COM_VIRTUEMART_PRODUCT_TAX_AMOUNT', $product->prices ); } ?>
          virtuemart_product_id . '&virtuemart_category_id=' . $product->virtuemart_category_id , FALSE), JText::_ ( 'COM_VIRTUEMART_PRODUCT_DETAILS' ), array ('title' => $product->product_name, 'class' => 'product-details' ) ); ?>
          vendor->vendor_store_desc) and VmConfig::get('show_store_desc', 1)) { ?>
          vendor->vendor_store_desc; ?>
          categories and VmConfig::get('show_categories', 1)) echo $this->loadTemplate('categories'); # Show template for : topten,Featured, Latest Products if selected in config BE if (!empty($this->products) ) { ?> loadTemplate('products'); } ?>views/virtuemart/tmpl/default.xml000066600000000606151373621660013245 0ustar00 COM_VIRTUEMART_VIRTUEMART_VIEW_DEFAULT_TITLE views/virtuemart/tmpl/default_categories.php000066600000003772151373621660015450 0ustar00

          categories as $category) { // Show the horizontal seperator if ($iCol == 1 && $iCategory > $categories_per_row) { ?>
          views/virtuemart/tmpl/index.html000066600000000054151373621660013071 0ustar00views/virtuemart/tmpl/.htaccess000066600000000177151373621660012700 0ustar00 Order allow,deny Deny from all views/virtuemart/tmpl/off_line.php000066600000001364151373621660013373 0ustar00views/virtuemart/.htaccess000066600000000177151373621660011724 0ustar00 Order allow,deny Deny from all views/cart/view.html.php000066600000036431151373621660011305 0ustar00getPathway(); $document = JFactory::getDocument(); $document->setMetaData('robots','NOINDEX, NOFOLLOW, NOARCHIVE, NOSNIPPET'); // add javascript for price and cart, need even for quantity buttons, so we need it almost anywhere //vmJsApi::jPrice(); $layoutName = $this->getLayout(); if (!$layoutName) $layoutName = JRequest::getWord('layout', 'default'); $this->assignRef('layoutName', $layoutName); $format = JRequest::getWord('format'); if (!class_exists('VirtueMartCart')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'cart.php'); $cart = VirtueMartCart::getCart(); //$cart->getCartPrices(); $this->assignRef('cart', $cart); //Why is this here, when we have view.raw.php if ($format == 'raw') { $cart->prepareCartViewData(); JRequest::setVar('layout', 'mini_cart'); $this->setLayout('mini_cart'); $this->prepareContinueLink(); } /* if($layoutName=='edit_coupon'){ $cart->prepareCartViewData(); $this->lSelectCoupon(); $pathway->addItem(JText::_('COM_VIRTUEMART_CART_OVERVIEW'),JRoute::_('index.php?option=com_virtuemart&view=cart')); $pathway->addItem(JText::_('COM_VIRTUEMART_CART_SELECTCOUPON')); $document->setTitle(JText::_('COM_VIRTUEMART_CART_SELECTCOUPON')); } else */ if ($layoutName == 'select_shipment') { $cart->prepareCartViewData(); if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); JPluginHelper::importPlugin('vmshipment'); $this->lSelectShipment(); $pathway->addItem(JText::_('COM_VIRTUEMART_CART_OVERVIEW'), JRoute::_('index.php?option=com_virtuemart&view=cart', FALSE)); $pathway->addItem(JText::_('COM_VIRTUEMART_CART_SELECTSHIPMENT')); $document->setTitle(JText::_('COM_VIRTUEMART_CART_SELECTSHIPMENT')); } else if ($layoutName == 'select_payment') { /* Load the cart helper */ // $cartModel = VmModel::getModel('cart'); $cart->prepareCartViewData(); $this->lSelectPayment(); $pathway->addItem(JText::_('COM_VIRTUEMART_CART_OVERVIEW'), JRoute::_('index.php?option=com_virtuemart&view=cart', FALSE)); $pathway->addItem(JText::_('COM_VIRTUEMART_CART_SELECTPAYMENT')); $document->setTitle(JText::_('COM_VIRTUEMART_CART_SELECTPAYMENT')); } else if ($layoutName == 'order_done') { VmConfig::loadJLang('com_virtuemart_shoppers', TRUE); $this->lOrderDone(); $pathway->addItem(JText::_('COM_VIRTUEMART_CART_THANKYOU')); $document->setTitle(JText::_('COM_VIRTUEMART_CART_THANKYOU')); } else if ($layoutName == 'default') { VmConfig::loadJLang('com_virtuemart_shoppers', TRUE); $cart->prepareCartViewData(); if (VmConfig::get('enable_content_plugin', 0)) { shopFunctionsF::triggerContentPlugin($cart->vendor, 'vendor','vendor_terms_of_service'); } $cart->prepareAddressRadioSelection(); $this->prepareContinueLink(); $this->lSelectCoupon(); if (!class_exists ('CurrencyDisplay')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php'); } $currencyDisplay = CurrencyDisplay::getInstance($this->cart->pricesCurrency); $this->assignRef('currencyDisplay',$currencyDisplay); $totalInPaymentCurrency = $this->getTotalInPaymentCurrency(); $checkoutAdvertise =$this->getCheckoutAdvertise(); if (!$cart->_inCheckOut and !VmConfig::get('use_as_catalog', 0)) { $cart->checkout(false); } if ($cart->getDataValidated()) { $pathway->addItem(JText::_('COM_VIRTUEMART_ORDER_CONFIRM_MNU')); $document->setTitle(JText::_('COM_VIRTUEMART_ORDER_CONFIRM_MNU')); $text = JText::_('COM_VIRTUEMART_ORDER_CONFIRM_MNU'); $checkout_task = 'confirm'; } else { $pathway->addItem(JText::_('COM_VIRTUEMART_CART_OVERVIEW')); $document->setTitle(JText::_('COM_VIRTUEMART_CART_OVERVIEW')); $text = JText::_('COM_VIRTUEMART_CHECKOUT_TITLE'); $checkout_task = 'checkout'; } $this->assignRef('checkout_task', $checkout_task); if (VmConfig::get('oncheckout_opc', 1)) { if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); JPluginHelper::importPlugin('vmshipment'); JPluginHelper::importPlugin('vmpayment'); $this->lSelectShipment(); $this->lSelectPayment(); } else { $this->checkPaymentMethodsConfigured(); $this->checkShipmentMethodsConfigured(); } if ($cart->virtuemart_shipmentmethod_id) { $shippingText = JText::_('COM_VIRTUEMART_CART_CHANGE_SHIPPING'); } else { $shippingText = JText::_('COM_VIRTUEMART_CART_EDIT_SHIPPING'); } $this->assignRef('select_shipment_text', $shippingText); if ($cart->virtuemart_paymentmethod_id) { $paymentText = JText::_('COM_VIRTUEMART_CART_CHANGE_PAYMENT'); } else { $paymentText = JText::_('COM_VIRTUEMART_CART_EDIT_PAYMENT'); } $this->assignRef('select_payment_text', $paymentText); if (!VmConfig::get('use_as_catalog')) { //$checkout_link_html = '' . $text . ''; $checkout_link_html = ''; } else { $checkout_link_html = ''; } $this->assignRef('checkout_link_html', $checkout_link_html); //set order language $lang = JFactory::getLanguage(); $order_language = $lang->getTag(); $this->assignRef('order_language',$order_language); } //dump ($cart,'cart'); $useSSL = VmConfig::get('useSSL', 0); $useXHTML = false; $this->assignRef('useSSL', $useSSL); $this->assignRef('useXHTML', $useXHTML); $this->assignRef('totalInPaymentCurrency', $totalInPaymentCurrency); $this->assignRef('checkoutAdvertise', $checkoutAdvertise); // @max: quicknirty $cart->setCartIntoSession(); shopFunctionsF::setVmTemplate($this, 0, 0, $layoutName); //We never want that the cart is indexed $document->setMetaData('robots','NOINDEX, NOFOLLOW, NOARCHIVE, NOSNIPPET'); // vmdebug('my cart ',$cart); parent::display($tpl); } private function prepareContinueLink() { // Get a continue link */ $virtuemart_category_id = shopFunctionsF::getLastVisitedCategoryId(); $categoryLink = ''; if ($virtuemart_category_id) { $categoryLink = '&virtuemart_category_id=' . $virtuemart_category_id; } $continue_link = JRoute::_('index.php?option=com_virtuemart&view=category' . $categoryLink, FALSE); $continue_link_html = '' . JText::_('COM_VIRTUEMART_CONTINUE_SHOPPING') . ''; $this->assignRef('continue_link_html', $continue_link_html); $this->assignRef('continue_link', $continue_link); } private function lSelectCoupon() { $this->couponCode = (isset($this->cart->couponCode) ? $this->cart->couponCode : ''); $coupon_text = $this->cart->couponCode ? JText::_('COM_VIRTUEMART_COUPON_CODE_CHANGE') : JText::_('COM_VIRTUEMART_COUPON_CODE_ENTER'); $this->assignRef('coupon_text', $coupon_text); } /* * lSelectShipment * find al shipment rates available for this cart * * @author Valerie Isaksen */ private function lSelectShipment() { $found_shipment_method=false; $shipment_not_found_text = JText::_('COM_VIRTUEMART_CART_NO_SHIPPING_METHOD_PUBLIC'); $this->assignRef('shipment_not_found_text', $shipment_not_found_text); $this->assignRef('found_shipment_method', $found_shipment_method); $shipments_shipment_rates=array(); if (!$this->checkShipmentMethodsConfigured()) { $this->assignRef('shipments_shipment_rates',$shipments_shipment_rates); return; } $selectedShipment = (empty($this->cart->virtuemart_shipmentmethod_id) ? 0 : $this->cart->virtuemart_shipmentmethod_id); $shipments_shipment_rates = array(); if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); JPluginHelper::importPlugin('vmshipment'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmDisplayListFEShipment', array( $this->cart, $selectedShipment, &$shipments_shipment_rates)); // if no shipment rate defined $found_shipment_method =count($shipments_shipment_rates); if ($found_shipment_method== 0 AND empty($this->cart->BT)) { $redirectMsg = JText::_('COM_VIRTUEMART_CART_ENTER_ADDRESS_FIRST'); $this->cart->setShipment(0); if (VmConfig::get('oncheckout_opc', 1)) { vmInfo($redirectMsg); } else { $mainframe = JFactory::getApplication(); $mainframe->redirect(JRoute::_('index.php?option=com_virtuemart&view=user&task=editaddresscheckout&addrtype=BT'), $redirectMsg); } } else { } $shipment_not_found_text = JText::_('COM_VIRTUEMART_CART_NO_SHIPPING_METHOD_PUBLIC'); $this->assignRef('shipment_not_found_text', $shipment_not_found_text); $this->assignRef('shipments_shipment_rates', $shipments_shipment_rates); $this->assignRef('found_shipment_method', $found_shipment_method); return; } /* * lSelectPayment * find al payment available for this cart * * @author Valerie Isaksen */ private function lSelectPayment() { $payment_not_found_text=''; $this->assignRef('payment_not_found_text', $payment_not_found_text); $paymentplugins_payments = array(); $this->assignRef('paymentplugins_payments', $paymentplugins_payments); if (!$found_payment_method = $this->checkPaymentMethodsConfigured()) { //return false; } else { $selectedPayment = empty($this->cart->virtuemart_paymentmethod_id) ? 0 : $this->cart->virtuemart_paymentmethod_id; if(!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS.DS.'vmpsplugin.php'); JPluginHelper::importPlugin('vmpayment'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmDisplayListFEPayment', array($this->cart, $selectedPayment, &$paymentplugins_payments)); // if no payment defined $found_payment_method =count($paymentplugins_payments); } $this->assignRef('found_payment_method', $found_payment_method); if (!$found_payment_method) { $link=''; // todo $payment_not_found_text = JText::sprintf('COM_VIRTUEMART_CART_NO_PAYMENT_METHOD_PUBLIC', ''.$link.''); $this->assignRef('payment_not_found_text', $payment_not_found_text); $this->cart->setPaymentMethod(0); } else if ($found_payment_method== 0 AND empty($this->cart->BT)) { $redirectMsg = JText::_('COM_VIRTUEMART_CART_ENTER_ADDRESS_FIRST'); if (VmConfig::get('oncheckout_opc', 1)) { vmInfo($redirectMsg); } else { $mainframe = JFactory::getApplication(); $mainframe->redirect(JRoute::_('index.php?option=com_virtuemart&view=user&task=editaddresscheckout&addrtype=BT'), $redirectMsg); } } else { } } private function getTotalInPaymentCurrency() { if (empty($this->cart->virtuemart_paymentmethod_id)) { return null; } if (!$this->cart->paymentCurrency or ($this->cart->paymentCurrency==$this->cart->pricesCurrency)) { return null; } $paymentCurrency = CurrencyDisplay::getInstance($this->cart->paymentCurrency); $totalInPaymentCurrency = $paymentCurrency->priceDisplay( $this->cart->pricesUnformatted['billTotal'],$this->cart->paymentCurrency) ; $currencyDisplay = CurrencyDisplay::getInstance($this->cart->pricesCurrency); // $this->assignRef('currencyDisplay',$currencyDisplay); return $totalInPaymentCurrency; } /* * Trigger to place Coupon, payment, shipment advertisement on the cart */ private function getCheckoutAdvertise() { $checkoutAdvertise=array(); JPluginHelper::importPlugin('vmcoupon'); JPluginHelper::importPlugin('vmpayment'); JPluginHelper::importPlugin('vmshipment'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmOnCheckoutAdvertise', array( $this->cart, &$checkoutAdvertise)); return $checkoutAdvertise; } private function lOrderDone() { $display_title = vRequest::getBool('display_title',true); $this->assignRef('display_title', $display_title); $this->html = vRequest::get('html', JText::_('COM_VIRTUEMART_ORDER_PROCESSED') ); //Show Thank you page or error due payment plugins like paypal express } private function checkPaymentMethodsConfigured() { //For the selection of the payment method we need the total amount to pay. $paymentModel = VmModel::getModel('Paymentmethod'); $this->payments = $paymentModel->getPayments(true, false); //vmdebug('checkPaymentMethodsConfigured',$this->payments); if (empty($this->payments)) { $text = ''; if (!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); if (Permissions::getInstance()->check("admin,storeadmin")) { $uri = JFactory::getURI(); $link = $uri->root() . 'administrator/index.php?option=com_virtuemart&view=paymentmethod'; $text = JText::sprintf('COM_VIRTUEMART_NO_PAYMENT_METHODS_CONFIGURED_LINK', '' . $link . ''); } vmInfo('COM_VIRTUEMART_NO_PAYMENT_METHODS_CONFIGURED', $text); $tmp = 0; $this->assignRef('found_payment_method', $tmp); $this->cart->virtuemart_paymentmethod_id = 0; return false; } return true; } private function checkShipmentMethodsConfigured() { //For the selection of the shipment method we need the total amount to pay. $shipmentModel = VmModel::getModel('Shipmentmethod'); $shipments = $shipmentModel->getShipments(); //vmdebug('checkShipmentMethodsConfigured',$shipments); if (empty($shipments)) { $text = ''; if (!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); if (Permissions::getInstance()->check("admin,storeadmin")) { $uri = JFactory::getURI(); $link = $uri->root() . 'administrator/index.php?option=com_virtuemart&view=shipmentmethod'; $text = JText::sprintf('COM_VIRTUEMART_NO_SHIPPING_METHODS_CONFIGURED_LINK', '' . $link . ''); } vmInfo('COM_VIRTUEMART_NO_SHIPPING_METHODS_CONFIGURED', $text); $tmp = 0; $this->assignRef('found_shipment_method', $tmp); $this->cart->virtuemart_shipmentmethod_id = 0; return false; } return true; } function getUserList() { $db = JFactory::getDbo(); $q = 'SELECT * FROM #__users ORDER BY name'; $db->setQuery($q); $result = $db->loadObjectList(); foreach($result as $user) { $user->displayedName = $user->name .'  ( '. $user->username .' )'; } return $result; } } //no closing tag views/cart/index.html000066600000000054151373621660010644 0ustar00views/cart/view.json.php000066600000004653151373621660011313 0ustar00getLayout(); if (!$layoutName) $layoutName = JRequest::getWord('layout', 'default'); $this->assignRef('layoutName', $layoutName); $format = JRequest::getWord('format'); if (!class_exists('VirtueMartCart')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'cart.php'); $cart = VirtueMartCart::getCart(); $this->assignRef('cart', $cart); $this->prepareContinueLink(); shopFunctionsF::setVmTemplate($this, 0, 0, $layoutName); parent::display($tpl); } private function prepareContinueLink() { // Get a continue link $menuid = JRequest::getInt('Itemid',''); if(!empty($menuid)){ $menuid = '&Itemid='.$menuid; } else $menuid = ''; $virtuemart_category_id = shopFunctionsF::getLastVisitedCategoryId(); $categoryLink = ''; if ($virtuemart_category_id) { $categoryLink = '&virtuemart_category_id=' . $virtuemart_category_id; } $continue_link = JRoute::_('index.php?option=com_virtuemart&view=category' . $categoryLink.$menuid, FALSE); $continue_link_html = '' . JText::_('COM_VIRTUEMART_CONTINUE_SHOPPING') . ''; $this->assignRef('continue_link_html', $continue_link_html); $this->assignRef('continue_link', $continue_link); $cart_link = JRoute::_('index.php?option=com_virtuemart&view=cart'.$menuid, FALSE); $this->assignRef('cart_link', $cart_link); } } //no closing tag views/cart/tmpl/select_payment.php000066600000005111151373621660013347 0ustar00' . JText::_('COM_VIRTUEMART_USER_FORM_CART_STEP3') . ''; } if ($this->layoutName!='default') { $headerLevel = 1; if($this->cart->getInCheckOut()){ $buttonclass = 'button vm-button-correct'; } else { $buttonclass = 'default'; } ?>
          ".JText::_('COM_VIRTUEMART_CART_SELECT_PAYMENT').""; ?>
            layoutName!='default') { ?>
          found_payment_method) { echo "
          "; foreach ($this->paymentplugins_payments as $paymentplugin_payments) { if (is_array($paymentplugin_payments)) { foreach ($paymentplugin_payments as $paymentplugin_payment) { echo $paymentplugin_payment.'
          '; } } } echo "
          "; } else { echo "

          ".$this->payment_not_found_text."

          "; } if ($this->layoutName!='default') { ?>
          views/cart/tmpl/perror.php000066600000001275151373621660011653 0ustar00' . $this->cart->getError() . '

          '; echo '' . JText::_('COM_VIRTUEMART_CONTINUE_SHOPPING') . ''; echo '
          '.$this->errorMsg.'
          '; ?>
          views/cart/tmpl/select_shipment.php000066600000005227151373621660013531 0ustar00' . JText::_('COM_VIRTUEMART_USER_FORM_CART_STEP2') . ''; } if ($this->layoutName!='default') { $headerLevel = 1; if($this->cart->getInCheckOut()){ $buttonclass = 'button vm-button-correct'; } else { $buttonclass = 'default'; } ?>
          ".JText::_('COM_VIRTUEMART_CART_SELECT_SHIPMENT').""; ?>
            layoutName!='default') { ?>
          found_shipment_method ) { echo "
          \n"; // if only one Shipment , should be checked by default foreach ($this->shipments_shipment_rates as $shipment_shipment_rates) { if (is_array($shipment_shipment_rates)) { foreach ($shipment_shipment_rates as $shipment_shipment_rate) { echo $shipment_shipment_rate."
          \n"; } } } echo "
          \n"; } else { echo "".$this->shipment_not_found_text.""; } if ($this->layoutName!='default') { ?>
          views/cart/tmpl/.htaccess000066600000000177151373621660011427 0ustar00 Order allow,deny Deny from all views/cart/tmpl/default_pricelist.php000066600000044473151373621660014053 0ustar00
          cart->BTaddress['fields'] as $item) { if (!empty($item['value'])) { if ($item['name'] === 'agreed') { $item['value'] = ($item['value'] === 0) ? JText::_ ('COM_VIRTUEMART_USER_FORM_BILLTO_TOS_NO') : JText::_ ('COM_VIRTUEMART_USER_FORM_BILLTO_TOS_YES'); } ?> escape ($item['value']) ?>
          cart->STaddress['fields'])) { echo JText::sprintf ('COM_VIRTUEMART_USER_FORM_EDIT_BILLTO_EXPLAIN', JText::_ ('COM_VIRTUEMART_USER_FORM_ADD_SHIPTO_LBL')); } else { if (!class_exists ('VmHtml')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'html.php'); } echo JText::_ ('COM_VIRTUEMART_USER_FORM_ST_SAME_AS_BT'); echo VmHtml::checkbox ('STsameAsBTjs', $this->cart->STsameAsBT) . '
          '; ?>
          cart->STaddress['fields'] as $item) { if (!empty($item['value'])) { ?> escape ($item['value']) ?> escape ($item['value']) ?>
          cart->lists['current_id'])) { $this->cart->lists['current_id'] = 0; } ?>
          cart->products',$this->cart->products); foreach ($this->cart->products as $pkey => $prow) { ?> cart->cartData['DBTaxRulesBill'] as $rule) { ?> cart->cartData['taxRulesBill'] as $rule) { ?> cart->cartData['DATaxRulesBill'] as $rule) { ?> cart->automaticSelectedShipment) { ?> */ ?> cart->pricesUnformatted['salesPrice']>0.0 ) { ?> cart->automaticSelectedPayment) { ?> totalInPaymentCurrency) { ?>
          / " . JText::_ ('COM_VIRTUEMART_CART_SUBTOTAL_TAX_AMOUNT') . '' ?> " . JText::_ ('COM_VIRTUEMART_CART_SUBTOTAL_DISCOUNT_AMOUNT') . '' ?>
          virtuemart_media_id) { ?> image)) { echo $prow->image->displayMediaThumb ('', FALSE); } ?> url, $prow->product_name) . $prow->customfields; ?> product_sku ?> cart->pricesUnformatted[$pkey]['discountedPriceWithoutTax'] != $this->cart->pricesUnformatted[$pkey]['priceWithoutTax']) { echo '' . $this->currencyDisplay->createPriceDiv ('basePriceVariant', '', $this->cart->pricesUnformatted[$pkey], TRUE, FALSE) . '
          '; } if ($this->cart->pricesUnformatted[$pkey]['discountedPriceWithoutTax']) { echo $this->currencyDisplay->createPriceDiv ('discountedPriceWithoutTax', '', $this->cart->pricesUnformatted[$pkey], FALSE, FALSE); } else { echo $this->currencyDisplay->createPriceDiv ('basePriceVariant', '', $this->cart->pricesUnformatted[$pkey], FALSE, FALSE); } // echo $prow->salesPrice ; ?>
          min_order_level; if ($prow->step_order_level) $step=$prow->step_order_level; else $step=1; if($step==0) $step=1; $alert=JText::sprintf ('COM_VIRTUEMART_WRONG_AMOUNT_ADDED', $step); ?> " . $this->currencyDisplay->createPriceDiv ('taxAmount', '', $this->cart->pricesUnformatted[$pkey], FALSE, FALSE, $prow->quantity) . "" ?> " . $this->currencyDisplay->createPriceDiv ('discountAmount', '', $this->cart->pricesUnformatted[$pkey], FALSE, FALSE, $prow->quantity) . "" ?> cart->pricesUnformatted[$pkey]['basePriceWithTax']) && $this->cart->pricesUnformatted[$pkey]['basePriceWithTax'] != $this->cart->pricesUnformatted[$pkey]['salesPrice']) { echo '' . $this->currencyDisplay->createPriceDiv ('basePriceWithTax', '', $this->cart->pricesUnformatted[$pkey], TRUE, FALSE, $prow->quantity) . '
          '; } elseif (VmConfig::get ('checkout_show_origprice', 1) && empty($this->cart->pricesUnformatted[$pkey]['basePriceWithTax']) && $this->cart->pricesUnformatted[$pkey]['basePriceVariant'] != $this->cart->pricesUnformatted[$pkey]['salesPrice']) { echo '' . $this->currencyDisplay->createPriceDiv ('basePriceVariant', '', $this->cart->pricesUnformatted[$pkey], TRUE, FALSE, $prow->quantity) . '
          '; } echo $this->currencyDisplay->createPriceDiv ('salesPrice', '', $this->cart->pricesUnformatted[$pkey], FALSE, FALSE, $prow->quantity) ?>
           
          " . $this->currencyDisplay->createPriceDiv ('taxAmount', '', $this->cart->pricesUnformatted, FALSE) . "" ?> " . $this->currencyDisplay->createPriceDiv ('discountAmount', '', $this->cart->pricesUnformatted, FALSE) . "" ?> currencyDisplay->createPriceDiv ('salesPrice', '', $this->cart->pricesUnformatted, FALSE) ?>
          layoutName) && $this->layoutName == 'default') { // echo JHTML::_('link', JRoute::_('index.php?view=cart&task=edit_coupon',$this->useXHTML,$this->useSSL), JText::_('COM_VIRTUEMART_CART_EDIT_COUPON')); echo $this->loadTemplate ('coupon'); } ?> cart->cartData['couponCode'])) { ?> cart->cartData['couponCode']; echo $this->cart->cartData['couponDescr'] ? (' (' . $this->cart->cartData['couponDescr'] . ')') : ''; ?> currencyDisplay->createPriceDiv ('couponTax', '', $this->cart->pricesUnformatted['couponTax'], FALSE); ?> currencyDisplay->createPriceDiv ('salesPriceCoupon', '', $this->cart->pricesUnformatted['salesPriceCoupon'], FALSE); ?>  
          currencyDisplay->createPriceDiv ($rule['virtuemart_calc_id'] . 'Diff', '', $this->cart->pricesUnformatted[$rule['virtuemart_calc_id'] . 'Diff'], FALSE); ?> currencyDisplay->createPriceDiv ($rule['virtuemart_calc_id'] . 'Diff', '', $this->cart->pricesUnformatted[$rule['virtuemart_calc_id'] . 'Diff'], FALSE); ?>
          currencyDisplay->createPriceDiv ($rule['virtuemart_calc_id'] . 'Diff', '', $this->cart->pricesUnformatted[$rule['virtuemart_calc_id'] . 'Diff'], FALSE); ?> currencyDisplay->createPriceDiv ($rule['virtuemart_calc_id'] . 'Diff', '', $this->cart->pricesUnformatted[$rule['virtuemart_calc_id'] . 'Diff'], FALSE); ?>
          currencyDisplay->createPriceDiv ($rule['virtuemart_calc_id'] . 'Diff', '', $this->cart->pricesUnformatted[$rule['virtuemart_calc_id'] . 'Diff'], FALSE); ?> currencyDisplay->createPriceDiv ($rule['virtuemart_calc_id'] . 'Diff', '', $this->cart->pricesUnformatted[$rule['virtuemart_calc_id'] . 'Diff'], FALSE); ?>
          cart->cartData['shipmentName']; ?>
          layoutName) && $this->layoutName == 'default' && !$this->cart->automaticSelectedShipment) { if (VmConfig::get('oncheckout_opc', 1)) { $previouslayout = $this->setLayout('select'); echo $this->loadTemplate('shipment'); $this->setLayout($previouslayout); } else { echo JHTML::_('link', JRoute::_('index.php?view=cart&task=edit_shipment', $this->useXHTML, $this->useSSL), $this->select_shipment_text, 'class=""'); } } else { echo JText::_ ('COM_VIRTUEMART_CART_SHIPPING'); }?>
          cart->cartData['shipmentName']; ?> " . $this->currencyDisplay->createPriceDiv ('shipmentTax', '', $this->cart->pricesUnformatted['shipmentTax'], FALSE) . ""; ?> cart->pricesUnformatted['salesPriceShipment'] < 0) echo $this->currencyDisplay->createPriceDiv ('salesPriceShipment', '', $this->cart->pricesUnformatted['salesPriceShipment'], FALSE); ?> currencyDisplay->createPriceDiv ('salesPriceShipment', '', $this->cart->pricesUnformatted['salesPriceShipment'], FALSE); ?>
          cart->cartData['paymentName']; ?>
          layoutName) && $this->layoutName == 'default') { if (VmConfig::get('oncheckout_opc', 1)) { $previouslayout = $this->setLayout('select'); echo $this->loadTemplate('payment'); $this->setLayout($previouslayout); } else { echo JHTML::_('link', JRoute::_('index.php?view=cart&task=editpayment', $this->useXHTML, $this->useSSL), $this->select_payment_text, 'class=""'); } } else { echo JText::_ ('COM_VIRTUEMART_CART_PAYMENT'); } ?>
          cart->cartData['paymentName']; ?> " . $this->currencyDisplay->createPriceDiv ('paymentTax', '', $this->cart->pricesUnformatted['paymentTax'], FALSE) . ""; ?> cart->pricesUnformatted['salesPricePayment'] < 0) echo $this->currencyDisplay->createPriceDiv ('salesPricePayment', '', $this->cart->pricesUnformatted['salesPricePayment'], FALSE); ?> currencyDisplay->createPriceDiv ('salesPricePayment', '', $this->cart->pricesUnformatted['salesPricePayment'], FALSE); ?>
           
          : " . $this->currencyDisplay->createPriceDiv ('billTaxAmount', '', $this->cart->pricesUnformatted['billTaxAmount'], FALSE) . "" ?> " . $this->currencyDisplay->createPriceDiv ('billDiscountAmount', '', $this->cart->pricesUnformatted['billDiscountAmount'], FALSE) . "" ?>
          currencyDisplay->createPriceDiv ('billTotal', '', $this->cart->pricesUnformatted['billTotal'], FALSE); ?>
          : totalInPaymentCurrency; ?>
          views/cart/tmpl/order_done.php000066600000001356151373621660012462 0ustar00display_title) { echo "

          ".JText::_('COM_VIRTUEMART_CART_ORDERDONE_THANK_YOU')."

          "; } echo $this->html; views/cart/tmpl/index.html000066600000000054151373621660011620 0ustar00views/cart/tmpl/default_coupon.php000066600000003355151373621660013352 0ustar00layoutName!='default') { ?>
          layoutName!='default') { ?>
          views/cart/tmpl/mini_cart.php000066600000002026151373621660012302 0ustar00
          views/cart/tmpl/padded.php000066600000003466151373621660011567 0ustar00continue_link . '" >' . JText::_('COM_VIRTUEMART_CONTINUE_SHOPPING') . ''; echo '' . JText::_('COM_VIRTUEMART_CART_SHOW') . ''; if($this->products){ foreach($this->products as $product){ echo '

          '.JText::sprintf('COM_VIRTUEMART_CART_PRODUCT_ADDED',$product->product_name,$product->quantity).'

          '; } } if ($this->errorMsg) echo '
          '.$this->errorMsg.'
          '; if(VmConfig::get('popup_rel',1)){ if($this->products and !empty($this->products[0]->customfieldsRelatedProducts)){ ?>
          views/cart/tmpl/shopper_adresses.php000066600000003303151373621660013705 0ustar00
          BTaddress['fields'] as $item){ if(!empty($item['value'])){ echo $item['title'].': '.$this->escape($item['value']).'
          '; } } ?>
          STaddress['fields'])){ foreach($this->STaddress['fields'] as $item){ if(!empty($item['value'])){ echo $item['title'].': '.$this->escape($item['value']).'
          '; } } } else { foreach($this->BTaddress['fields'] as $item){ if(!empty($item['value'])){ echo $item['title'].': '.$this->escape($item['value']).'
          '; } } } ?>
          views/cart/tmpl/default.php000066600000015100151373621660011756 0ustar00 "; } else { vmJsApi::js ('facebox'); vmJsApi::css ('facebox'); $box = " // "; } JHtml::_ ('behavior.formvalidation'); $document = JFactory::getDocument (); $document->addScriptDeclaration ($box); $document->addScriptDeclaration (" // "); $document->addScriptDeclaration (" // "); $document->addStyleDeclaration ('#facebox .content {display: block !important; height: 480px !important; overflow: auto; width: 560px !important; }'); ?>

          checkout_task === 'confirm') { vmdebug ('checkout_task', $this->checkout_task); echo '
          ' . JText::_ ('COM_VIRTUEMART_USER_FORM_CART_STEP4') . '
          '; } ?>
          continue_link_html)) { echo $this->continue_link_html; } ?>
          cart, FALSE); // This displays the form to change the current shopper $adminID = JFactory::getSession()->get('vmAdminID'); if ((JFactory::getUser()->authorise('core.admin', 'com_virtuemart') || JFactory::getUser($adminID)->authorise('core.admin', 'com_virtuemart')) && (VmConfig::get ('oncheckout_change_shopper', 0))) { echo $this->loadTemplate ('shopperform'); } if ($this->checkout_task) { $taskRoute = '&task=' . $this->checkout_task; } else { $taskRoute = ''; } ?>
          loadTemplate ('pricelist'); // added in 2.0.8 ?>
          checkoutAdvertise)) { foreach ($this->checkoutAdvertise as $checkoutAdvertise) { ?>

          getIfRequired ('agreed')) { if (!class_exists ('VmHtml')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'html.php'); } echo VmHtml::checkbox ('tosAccepted', $this->cart->tosAccepted, 1, 0, 'class="terms-of-service"'); if (VmConfig::get ('oncheckout_show_legal_info', 1)) { ?>

          cart->vendor->vendor_terms_of_service; ?>
          checkout_link_html; ?>
          views/cart/tmpl/default_shopperform.php000066600000004335151373621660014412 0ustar00

          getUserList(); $currentUser = $this->cart->user->_data->virtuemart_user_id; echo JHTML::_('Select.genericlist', $userList, 'userID', 'class="vm-chzn-select" style="width: 200px"', 'id', 'displayedName', $currentUser); $adminID = JFactory::getSession()->get('vmAdminID'); $instance = JFactory::getUser(); ?> id != $adminID) { ?> name; ?>

          views/cart/tmpl/default.xml000066600000000553151373621660011775 0ustar00 COM_VIRTUEMART_CART_VIEW_DEFAULT_TITLE views/cart/.htaccess000066600000000177151373621660010453 0ustar00 Order allow,deny Deny from all views/orders/.htaccess000066600000000177151373621660011020 0ustar00 Order allow,deny Deny from all views/orders/view.html.php000066600000022207151373621660011646 0ustar00getPathway(); $task = JRequest::getWord('task', 'list'); $layoutName = JRequest::getWord('layout', 'list'); $this->setLayout($layoutName); $_currentUser = JFactory::getUser(); $document = JFactory::getDocument(); if(!empty($tpl)){ $format = $tpl; } else { $format = JRequest::getWord('format', 'html'); } $this->assignRef('format', $format); if($format=='pdf'){ $document->setTitle( JText::_('COM_VIRTUEMART_INVOICE') ); //PDF needs more RAM than usual VmConfig::ensureMemoryLimit(96); } else { if ($layoutName == 'details') { $document->setTitle( JText::_('COM_VIRTUEMART_ACC_ORDER_INFO') ); $pathway->additem(JText::_('COM_VIRTUEMART_ACC_ORDER_INFO')); } else { $document->setTitle( JText::_('COM_VIRTUEMART_ORDERS_VIEW_DEFAULT_TITLE') ); $pathway->additem(JText::_('COM_VIRTUEMART_ORDERS_VIEW_DEFAULT_TITLE')); } } $orderModel = VmModel::getModel('orders'); if ($layoutName == 'details') { $order_list_link = FALSE; $order_list_link = JRoute::_('index.php?option=com_virtuemart&view=orders&layout=list', FALSE); $this->assignRef('order_list_link', $order_list_link); $orderDetails = $orderModel ->getMyOrderDetails(); if(!$orderDetails or empty($orderDetails['details'])){ echo JText::_('COM_VIRTUEMART_ORDER_NOTFOUND'); return; } $userFieldsModel = VmModel::getModel('userfields'); $_userFields = $userFieldsModel->getUserFields( 'account' , array('captcha' => true, 'delimiters' => true) // Ignore these types , array('delimiter_userinfo','user_is_vendor' ,'username','password', 'password2', 'agreed', 'address_type') // Skips ); $orderbt = $orderDetails['details']['BT']; $orderst = (array_key_exists('ST', $orderDetails['details'])) ? $orderDetails['details']['ST'] : $orderbt; $userfields = $userFieldsModel->getUserFieldsFilled( $_userFields ,$orderbt ); $_userFields = $userFieldsModel->getUserFields( 'shipment' , array() // Default switches , array('delimiter_userinfo', 'username', 'email', 'password', 'password2', 'agreed', 'address_type') // Skips ); $shipmentfields = $userFieldsModel->getUserFieldsFilled( $_userFields ,$orderst ); $shipment_name=''; if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); JPluginHelper::importPlugin('vmshipment'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmOnShowOrderFEShipment',array( $orderDetails['details']['BT']->virtuemart_order_id, $orderDetails['details']['BT']->virtuemart_shipmentmethod_id, &$shipment_name)); $payment_name=''; if(!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS.DS.'vmpsplugin.php'); JPluginHelper::importPlugin('vmpayment'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmOnShowOrderFEPayment',array( $orderDetails['details']['BT']->virtuemart_order_id, $orderDetails['details']['BT']->virtuemart_paymentmethod_id, &$payment_name)); if($format=='pdf'){ $invoiceNumberDate = array(); $return = $orderModel->createInvoiceNumber($orderDetails['details']['BT'], $invoiceNumberDate ); if(empty($invoiceNumberDate)){ $invoiceNumberDate[0] = 'no invoice number accessible'; $invoiceNumberDate[1] = 'no invoice date accessible'; } $this->assignRef('invoiceNumber', $invoiceNumberDate[0]); $this->assignRef('invoiceDate', $invoiceNumberDate[1]); } $this->assignRef('userfields', $userfields); $this->assignRef('shipmentfields', $shipmentfields); $this->assignRef('shipment_name', $shipment_name); $this->assignRef('payment_name', $payment_name); $this->assignRef('orderdetails', $orderDetails); if($_currentUser->guest){ $details_url = juri::root().'index.php?option=com_virtuemart&view=orders&layout=details&tmpl=component&order_pass=' . JRequest::getString('order_pass',false) .'&order_number='.JRequest::getString('order_number',false); } else { $details_url = juri::root().'index.php?option=com_virtuemart&view=orders&layout=details&tmpl=component&virtuemart_order_id=' . $this->orderdetails['details']['BT']->virtuemart_order_id; } $this->assignRef('details_url', $details_url); $tmpl = JRequest::getWord('tmpl'); $print = false; if($tmpl){ $print = true; } $this->prepareVendor(); $this->assignRef('print', $print); $vendorId = 1; $emailCurrencyId = $orderDetails['details']['BT']->user_currency_id; $exchangeRate = FALSE; if (!class_exists ('vmPSPlugin')) { require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); } JPluginHelper::importPlugin ('vmpayment'); $dispatcher = JDispatcher::getInstance (); $dispatcher->trigger ('plgVmgetEmailCurrency', array($orderDetails['details']['BT']->virtuemart_paymentmethod_id, $orderDetails['details']['BT']->virtuemart_order_id, &$emailCurrencyId)); if (!class_exists ('CurrencyDisplay')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php'); } $currency = CurrencyDisplay::getInstance ($emailCurrencyId, $vendorId); if ($emailCurrencyId) { vmdebug ('exchangerate', $orderDetails['details']['BT']->user_currency_rate); $currency->exchangeRateShopper = $orderDetails['details']['BT']->user_currency_rate; } $this->assignRef ('currency', $currency); // Implement the Joomla panels. If we need a ShipTo tab, make it the active one. // In tmpl/edit.php, this is the 4th tab (0-based, so set to 3 above) // jimport('joomla.html.pane'); // $pane = JPane::getInstance((__VM_ORDER_USE_SLIDERS?'Sliders':'Tabs')); // $this->assignRef('pane', $pane); } else { // 'list' -. default $useSSL = VmConfig::get('useSSL',0); $useXHTML = true; $this->assignRef('useSSL', $useSSL); $this->assignRef('useXHTML', $useXHTML); if ($_currentUser->get('id') == 0) { // getOrdersList() returns all orders when no userID is set (admin function), // so explicetly define an empty array when not logged in. $orderList = array(); } else { $orderList = $orderModel->getOrdersList($_currentUser->get('id'), TRUE); foreach ($orderList as $order) { $vendorId = 1; $emailCurrencyId = $order->user_currency_id; $exchangeRate = FALSE; if (!class_exists ('vmPSPlugin')) { require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); } JPluginHelper::importPlugin ('vmpayment'); $dispatcher = JDispatcher::getInstance (); $dispatcher->trigger ('plgVmgetEmailCurrency', array($order->virtuemart_paymentmethod_id, $order->virtuemart_order_id, &$emailCurrencyId)); if (!class_exists ('CurrencyDisplay')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php'); } $currency = CurrencyDisplay::getInstance ($emailCurrencyId, $vendorId); $this->assignRef ('currency', $currency); if ($emailCurrencyId) { vmdebug ('exchangerate', $order->user_currency_rate); $currency->exchangeRateShopper = $order->user_currency_rate; } $order->currency = $currency; } } $this->assignRef('orderlist', $orderList); } /* if (!class_exists('CurrencyDisplay')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'currencydisplay.php'); $currency = CurrencyDisplay::getInstance(); $this->assignRef('currency', $currency); */ $orderStatusModel = VmModel::getModel('orderstatus'); $_orderstatuses = $orderStatusModel->getOrderStatusList(); $orderstatuses = array(); foreach ($_orderstatuses as $_ordstat) { $orderstatuses[$_ordstat->order_status_code] = JText::_($_ordstat->order_status_name); } $this->assignRef('orderstatuses', $orderstatuses); if(!class_exists('ShopFunctions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'shopfunctions.php'); $document = JFactory::getDocument(); $document->setMetaData('robots','NOINDEX, NOFOLLOW, NOARCHIVE, NOSNIPPET'); // this is no setting in BE to change the layout ! //shopFunctionsF::setVmTemplate($this,0,0,$layoutName); parent::display($tpl); } // add vendor for cart function prepareVendor(){ $vendorModel = VmModel::getModel('vendor'); $vendor = & $vendorModel->getVendor(); $this->assignRef('vendor', $vendor); $vendorModel->addImages($this->vendor,1); } } views/orders/index.html000066600000000000151373621660011200 0ustar00views/orders/tmpl/details_items.php000066600000023320151373621660013530 0ustar00format == 'pdf'){ $widthTable = '100'; $widthTitle = '27'; } else { $widthTable = '100'; $widthTitle = '49'; } ?> orderdetails['items'] as $item) { $qtt = $item->product_quantity ; $_link = JRoute::_('index.php?option=com_virtuemart&view=productdetails&virtuemart_category_id=' . $item->virtuemart_category_id . '&virtuemart_product_id=' . $item->virtuemart_product_id, FALSE); ?> orderdetails['details']['BT']->coupon_discount <> 0.00) { $coupon_code=$this->orderdetails['details']['BT']->coupon_code?' ('.$this->orderdetails['details']['BT']->coupon_code.')':''; ?> orderdetails['calc_rules'] as $rule){ if ($rule->calc_kind== 'DBTaxRulesBill') { ?> calc_kind == 'taxRulesBill') { ?> calc_kind == 'DATaxRulesBill') { ?>
          order_item_sku; ?> product_attribute)) { if(!class_exists('VirtueMartModelCustomfields'))require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'customfields.php'); $product_attribute = VirtueMartModelCustomfields::CustomsFieldOrderDisplay($item,'FE'); echo $product_attribute; } ?> orderstatuses[$item->order_status]; ?> product_discountedPriceWithoutTax = (float) $item->product_discountedPriceWithoutTax; if (!empty($item->product_priceWithoutTax) && $item->product_discountedPriceWithoutTax != $item->product_priceWithoutTax) { echo ''.$this->currency->priceDisplay($item->product_item_price, $this->currency) .'
          '; echo ''.$this->currency->priceDisplay($item->product_discountedPriceWithoutTax, $this->currency) .'
          '; } else { echo ''.$this->currency->priceDisplay($item->product_item_price, $this->currency) .'
          '; } ?>
          ".$this->currency->priceDisplay($item->product_tax ,$this->currency, $qtt)."" ?> currency->priceDisplay( $item->product_subtotal_discount ,$this->currency); //No quantity is already stored with it ?> product_basePriceWithTax = (float) $item->product_basePriceWithTax; $class = ''; if(!empty($item->product_basePriceWithTax) && $item->product_basePriceWithTax != $item->product_final_price ) { echo ''.$this->currency->priceDisplay($item->product_basePriceWithTax,$this->currency,$qtt) .'
          ' ; } elseif (empty($item->product_basePriceWithTax) && $item->product_item_price != $item->product_final_price) { echo '' . $this->currency->priceDisplay($item->product_item_price,$this->currency,$qtt) . '
          '; } echo $this->currency->priceDisplay( $item->product_subtotal_with_tax ,$this->currency); //No quantity or you must use product_final_price ?>
          ".$this->currency->priceDisplay($this->orderdetails['details']['BT']->order_tax,$this->currency)."" ?> ".$this->currency->priceDisplay($this->orderdetails['details']['BT']->order_discountAmount,$this->currency)."" ?> currency->priceDisplay($this->orderdetails['details']['BT']->order_salesPrice,$this->currency) ?>
              currency->priceDisplay($this->orderdetails['details']['BT']->coupon_discount,$this->currency); ?>
          calc_rule_name ?> currency->priceDisplay($rule->calc_amount,$this->currency); ?> currency->priceDisplay($rule->calc_amount,$this->currency); ?>
          calc_rule_name ?> currency->priceDisplay($rule->calc_amount,$this->currency); ?> currency->priceDisplay($rule->calc_amount,$this->currency); ?>
          calc_rule_name ?> currency->priceDisplay($rule->calc_amount,$this->currency); ?> currency->priceDisplay($rule->calc_amount,$this->currency); ?>
          ".$this->currency->priceDisplay($this->orderdetails['details']['BT']->order_shipment_tax, $this->currency)."" ?>   currency->priceDisplay($this->orderdetails['details']['BT']->order_shipment+ $this->orderdetails['details']['BT']->order_shipment_tax, $this->currency); ?>
          ".$this->currency->priceDisplay($this->orderdetails['details']['BT']->order_payment_tax, $this->currency)."" ?>   currency->priceDisplay($this->orderdetails['details']['BT']->order_payment+ $this->orderdetails['details']['BT']->order_payment_tax, $this->currency); ?>
          currency->priceDisplay($this->orderdetails['details']['BT']->order_billTaxAmount, $this->currency); ?> currency->priceDisplay($this->orderdetails['details']['BT']->order_billDiscountAmount, $this->currency); ?> currency->priceDisplay($this->orderdetails['details']['BT']->order_total, $this->currency); ?>
          views/orders/tmpl/details_pdf.php000066600000001324151373621660013160 0ustar00 Order allow,deny Deny from all views/orders/tmpl/details_history.php000066600000002750151373621660014114 0ustar00 orderdetails['history'] as $_hist) { if (!$_hist->customer_notified) { continue; } ?>
          created_on,'LC2',true); ?> orderstatuses[$_hist->order_status_code]; ?> comments; ?>
          views/orders/tmpl/details_order.php000066600000006403151373621660013525 0ustar00
          orderdetails['details']['BT']->order_number; ?>
          orderdetails['details']['BT']->created_on, 'LC4', true); ?>
          orderstatuses[$this->orderdetails['details']['BT']->order_status]; ?>
          orderdetails['details']['BT']->modified_on, 'LC4', true); ?>
          shipment_name; ?>
          payment_name; ?>
          orderdetails['details']['BT']->customer_note; ?>
          currency->priceDisplay($this->orderdetails['details']['BT']->order_total, $this->currency); ?>
           

          userfields['fields'] as $field) { if (!empty($field['value'])) { echo '' . ''; } } ?>
          ' . $field['title'] . '' . $field['value'] . '

          shipmentfields['fields'] as $field) { if (!empty($field['value'])) { echo '' . ''; } } ?>
          ' . $field['title'] . '' . $field['value'] . '
          views/orders/tmpl/details.xml000066600000000253151373621660012340 0ustar00 views/orders/tmpl/index.html000066600000000000151373621660012154 0ustar00views/orders/tmpl/details.php000066600000005313151373621660012331 0ustar00print){ ?>

          vendor->vendor_store_name; ?>

          vendor->vendor_name .' - '.$this->vendor->vendor_phone ?>

          loadTemplate('order'); ?>
          loadTemplate('items'); ?>
          vendor->vendor_letter_footer_html; ?>

          details_url', 'win2', 'status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,width=640,height=480,directories=no,location=no');\" >"; //$details_link .= ' '; $button = (JVM_VERSION==1) ? '/images/M_images/printButton.png' : 'system/printButton.png'; $details_link .= JHtml::_('image',$button, JText::_('COM_VIRTUEMART_PRINT'), NULL, true); $details_link .= ''; echo $details_link; ?>

          order_list_link){ ?>
          loadTemplate('order'); ?>


          views/orders/tmpl/list.php000066600000004563151373621660011665 0ustar00

          orderlist) == 0) { //echo JText::_('COM_VIRTUEMART_ACC_NO_ORDER'); echo shopFunctionsF::getLoginForm(false,true); } else { ?>
          orderlist as $row) { $editlink = JRoute::_('index.php?option=com_virtuemart&view=orders&layout=details&order_number=' . $row->order_number, FALSE); ?> ">
          order_number; ?> created_on,'LC4',true); ?> order_status); ?> currency->priceDisplay($row->order_total, $row->currency); ?>
          views/orders/tmpl/list.xml000066600000000607151373621660011671 0ustar00 COM_VIRTUEMART_ORDERS_VIEW_DEFAULT_TITLE views/askquestion/tmpl/mail_raw_question.php000066600000000757151373621660015505 0ustar00vendor->vendor_store_name) . "\n" . "\n"; echo JText::_('COM_VIRTUEMART_QUESTION_ABOUT') . ' '. $this->product->product_name; if ($this->product->product_sku) echo ' ('.JText::_('COM_VIRTUEMART_PRODUCT_SKU').' '.$this->product->product_sku .')' ; echo "\n" . "\n"; echo JText::sprintf('COM_VIRTUEMART_QUESTION_MAIL_FROM', $this->user->name, $this->user->email) . "\n"; echo $this->comment. "\n"; views/askquestion/tmpl/.htaccess000066600000000177151373621660013044 0ustar00 Order allow,deny Deny from all views/askquestion/tmpl/form.php000066600000012430151373621660012715 0ustar00addScriptDeclaration(' jQuery(function($){ $("#askform").validationEngine("attach"); $("#comment").keyup( function () { var result = $(this).val(); $("#counter").val( result.length ); }); }); '); /* Let's see if we found the product */ if (empty ( $this->product )) { echo JText::_ ( 'COM_VIRTUEMART_PRODUCT_NOT_FOUND' ); echo '

          ' . $this->continue_link_html; } else { $session = JFactory::getSession(); $askQuestionData = $session->get('askquestion', 0, 'vm'); if(!empty($this->login)){ echo $this->login; } if(empty($this->login) or VmConfig::get('recommend_unauth',false)){ ?>

          product->product_name ?>

          product->product_s_desc)) { ?>
          product->product_s_desc ?>
          product->images[0]->displayMediaThumb('class="product-image"',false); ?>
          trigger('onInit','dynamic_recaptcha_1'); ?>
          views/askquestion/tmpl/index.html000066600000000000151373621660013224 0ustar00views/askquestion/tmpl/mail_html_question.php000066600000006607151373621660015660 0ustar00
          views/askquestion/tmpl/mail_confirmed.php000066600000002117151373621660014723 0ustar00
          views/askquestion/.htaccess000066600000000177151373621660012070 0ustar00 Order allow,deny Deny from all views/askquestion/metadata.xml000066600000000322151373621660012564 0ustar00 views/askquestion/view.html.php000066600000016610151373621660012717 0ustar00redirect(JRoute::_('index.php?option=com_virtuemart','Disabled function')); } $this->login = ''; if(!VmConfig::get('recommend_unauth',false)){ $user = JFactory::getUser(); if($user->guest){ $this->login = shopFunctionsF::getLoginForm(false); //$app->redirect(JRoute::_('index.php?option=com_virtuemart','JGLOBAL_YOU_MUST_LOGIN_FIRST')); } } $show_prices = VmConfig::get ('show_prices', 1); if ($show_prices == '1') { if (!class_exists ('calculationHelper')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'calculationh.php'); } } $this->assignRef ('show_prices', $show_prices); $document = JFactory::getDocument (); $mainframe = JFactory::getApplication (); $pathway = $mainframe->getPathway (); $task = JRequest::getCmd ('task'); if (!class_exists('VmImage')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'image.php'); // Load the product $product_model = VmModel::getModel ('product'); $category_model = VmModel::getModel ('Category'); $virtuemart_product_idArray = JRequest::getInt ('virtuemart_product_id', 0); if (is_array ($virtuemart_product_idArray)) { $virtuemart_product_id = $virtuemart_product_idArray[0]; } else { $virtuemart_product_id = $virtuemart_product_idArray; } if (empty($virtuemart_product_id)) { self::showLastCategory ($tpl); return; } if (!class_exists ('VirtueMartModelVendor')) { require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'vendor.php'); } $product = $product_model->getProduct ($virtuemart_product_id); // Set Canonic link $format = JRequest::getWord('format', 'html'); if ($format == 'html') { $document->addHeadLink ($product->canonical, 'canonical', 'rel', ''); } // Set the titles $document->setTitle (JText::sprintf ('COM_VIRTUEMART_PRODUCT_DETAILS_TITLE', $product->product_name . ' - ' . JText::_ ('COM_VIRTUEMART_PRODUCT_ASK_QUESTION'))); $this->assignRef ('product', $product); if (empty($product)) { self::showLastCategory ($tpl); return; } $product_model->addImages ($product, 1); /* Get the category ID */ $virtuemart_category_id = JRequest::getInt ('virtuemart_category_id'); if ($virtuemart_category_id == 0 && !empty($product)) { if (array_key_exists ('0', $product->categories)) { $virtuemart_category_id = $product->categories[0]; } } shopFunctionsF::setLastVisitedCategoryId ($virtuemart_category_id); if ($category_model) { $category = $category_model->getCategory ($virtuemart_category_id); $this->assignRef ('category', $category); $pathway->addItem ($category->category_name, JRoute::_ ('index.php?option=com_virtuemart&view=category&virtuemart_category_id=' . $virtuemart_category_id, FALSE)); } //$pathway->addItem(JText::_('COM_VIRTUEMART_PRODUCT_DETAILS'), $uri->toString(array('path', 'query', 'fragment'))); $pathway->addItem ($product->product_name, JRoute::_ ('index.php?option=com_virtuemart&view=productdetails&virtuemart_category_id=' . $virtuemart_category_id . '&virtuemart_product_id=' . $product->virtuemart_product_id, FALSE)); // for askquestion $pathway->addItem (JText::_ ('COM_VIRTUEMART_PRODUCT_ASK_QUESTION')); $this->assignRef ('user', JFactory::getUser ()); if ($product->metadesc) { $document->setDescription ($product->metadesc); } if ($product->metakey) { $document->setMetaData ('keywords', $product->metakey); } //We never want that ask a question is indexed $document->setMetaData('robots','NOINDEX, NOFOLLOW, NOARCHIVE, NOSNIPPET'); if ($mainframe->getCfg ('MetaTitle') == '1') { $document->setMetaData ('title', $product->product_s_desc); //Maybe better product_name } if ($mainframe->getCfg ('MetaAuthor') == '1') { $document->setMetaData ('author', $product->metaauthor); } parent::display ($tpl); } function renderMailLayout () { $this->setLayout ('mail_html_question'); $this->comment = JRequest::getString ('comment'); $user = JFactory::getUser (); if (empty($user->id)) { $fromMail = JRequest::getVar ('email'); //is sanitized then $fromName = JRequest::getVar ('name', ''); //is sanitized then $fromMail = str_replace (array('\'', '"', ',', '%', '*', '/', '\\', '?', '^', '`', '{', '}', '|', '~'), array(''), $fromMail); $fromName = str_replace (array('\'', '"', ',', '%', '*', '/', '\\', '?', '^', '`', '{', '}', '|', '~'), array(''), $fromName); } else { $fromMail = $user->email; $fromName = $user->name; } $vars['user'] = array('name' => $fromName, 'email' => $fromMail); $vendorModel = VmModel::getModel ('vendor'); if(empty($this->vendor)){ $this->vendor = $vendorModel->getVendor (); $this->vendor->vendor_store_name = $fromName; } $vendorModel->addImages ($this->vendor); $virtuemart_product_id = vRequest::getInt ('virtuemart_product_id', 0); $productModel = VmModel::getModel ('product'); if(empty($this->product)){ $this->product = $productModel->getProduct ($virtuemart_product_id); } $productModel->addImages($this->product); $this->subject = Jtext::_ ('COM_VIRTUEMART_QUESTION_ABOUT') . $this->product->product_name; $this->vendorEmail = $this->user['email']; // in this particular case, overwrite the value for fix the recipient name $this->vendor->vendor_name = $this->user['name']; if (VmConfig::get ('order_mail_html')) { $tpl = 'mail_html_question'; } else { $tpl = 'mail_raw_question'; } $this->setLayout ($tpl); parent::display (); } private function showLastCategory ($tpl) { $virtuemart_category_id = shopFunctionsF::getLastVisitedCategoryId (); $categoryLink = ''; if ($virtuemart_category_id) { $categoryLink = '&virtuemart_category_id=' . $virtuemart_category_id; } $continue_link = JRoute::_ ('index.php?option=com_virtuemart&view=category' . $categoryLink, FALSE); $continue_link_html = '' . JText::_ ('COM_VIRTUEMART_CONTINUE_SHOPPING') . ''; $this->assignRef ('continue_link_html', $continue_link_html); // Display it all parent::display ($tpl); } } // pure php no closing tagviews/askquestion/index.html000066600000000000151373621660012250 0ustar00views/.htaccess000066600000000177151373621660007522 0ustar00 Order allow,deny Deny from all views/pdf/view.pdf.php000066600000002544151373621660010730 0ustar00display($tpl); } } } views/pdf/index.html000066600000000001151373621660010454 0ustar00 views/pdf/.htaccess000066600000000177151373621660010273 0ustar00 Order allow,deny Deny from all views/pdf/view.raw.php000066600000002111151373621660010736 0ustar00assignRef('type', $type); $viewName = jRequest::getWord('view','productdetails'); $class= 'VirtueMartView'.ucfirst($viewName); if(!class_exists($class)) require(JPATH_VM_SITE.DS.'views'.DS.$viewName.DS.'view.html.php'); $view = new $class ; $view->display($tpl); } } views/categories/view.html.php000066600000015030151373621660012471 0ustar00getPathway(); //Load helpers if (!class_exists('VmImage')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'image.php'); $vendorId = JRequest::getInt('vendorid', 1); $vendorModel = VmModel::getModel('vendor'); $vendorModel->setId(1); $vendor = $vendorModel->getVendor(); //$this->assignRef('vendor',$vendor); $categoryModel = VmModel::getModel('category'); $categoryId = JRequest::getInt('virtuemart_category_id', 0); $this->assignRef('categoryModel', $categoryModel); // $categoryId = 0; //The idea is that you can choose a parent catgory, this value should come from the joomla view parameter stuff $category = $categoryModel->getCategory($categoryId); if(!empty($category->virtuemart_category_id) and empty($category->published)){ vmInfo('COM_VIRTUEMART_CAT_NOT_PUBL',$category->category_name,$categoryId); return false; } //if($category->children) $categoryModel->addImages($category->children); $cache = JFactory::getCache('com_virtuemart','callback'); $category->children = $cache->call( array( 'VirtueMartModelCategory', 'getChildCategoryList' ),$vendorId, $categoryId ); //$category->children = $categoryModel->getChildCategoryList($vendorId, $categoryId); $categoryModel->addImages($category->children,1); if (VmConfig::get('enable_content_plugin', 0)) { // add content plugin // $dispatcher = JDispatcher::getInstance(); JPluginHelper::importPlugin('content'); $category->text = $category->category_description; if(!class_exists('JParameter')) require(JPATH_LIBRARIES.DS.'joomla'.DS.'html'.DS.'parameter.php'); $params = new JParameter(''); if(JVM_VERSION === 2 ) { $results = $dispatcher->trigger('onContentPrepare', array('com_virtuemart.category', &$category, &$params, 0)); // More events for 3rd party content plugins // This do not disturb actual plugins, because we don't modify $product->text $res = $dispatcher->trigger('onContentAfterTitle', array('com_virtuemart.category', &$category, &$params, 0)); $category->event->afterDisplayTitle = trim(implode("\n", $res)); $res = $dispatcher->trigger('onContentBeforeDisplay', array('com_virtuemart.category', &$category, &$params, 0)); $category->event->beforeDisplayContent = trim(implode("\n", $res)); $res = $dispatcher->trigger('onContentAfterDisplay', array('com_virtuemart.category', &$category, &$params, 0)); $category->event->afterDisplayContent = trim(implode("\n", $res)); } else { $results = $dispatcher->trigger('onPrepareContent', array(& $category, & $params, 0)); } $category->category_description = $category->text; } //Add the category name to the pathway // $pathway->addItem(strip_tags($category->category_name)); //Todo what should be shown up? // Add the category name to the pathway if ($category->parents) { foreach ($category->parents as $c){ $pathway->addItem(strip_tags($c->category_name),JRoute::_('index.php?option=com_virtuemart&view=categories&virtuemart_category_id='.$c->virtuemart_category_id, FALSE)); } } else { if(!empty($category->category_name)){ $pathway->addItem(strip_tags($category->category_name,JRoute::_('index.php?option=com_virtuemart&view=categories&virtuemart_category_id='.$category->virtuemart_category_id, FALSE))); } else { $pathway->addItem(strip_tags(JText::_('COM_VIRTUEMART_CATEGORY_TOP_LEVEL'),JRoute::_('index.php?option=com_virtuemart&view=categories&virtuemart_category_id='.$category->virtuemart_category_id, FALSE))); } } $this->assignRef('category', $category); /* Set the titles */ if ($category->category_name) $document->setTitle($category->category_name); //Todo same here, what should be shown up? else { $menus = JFactory::getApplication()->getMenu(); $menu = $menus->getActive(); if(!empty($menu)){ if (!class_exists('JParameter')) require(JPATH_VM_LIBRARIES . DS . 'joomla' . DS . 'html' . DS . 'parameter.php' ); $menu_params = new JParameter( $menu->params ); } if (empty($menu) || !$menu_params->get( 'page_title')) { $document->setTitle($vendor->vendor_store_name); $category->category_name = $vendor->vendor_store_name ; } else $category->category_name = $menu_params->get( 'page_title'); } //Todo think about which metatags should be shown in the categories view if ($category->metadesc) { $document->setDescription( $category->metadesc ); } else $document->setDescription( $category->category_description ); if ($category->metakey) { $document->setMetaData('keywords', $category->metakey); } if ($category->metarobot) { $document->setMetaData('robots', $category->metarobot); } //if ($mainframe->getCfg('MetaTitle') == '1') { $document->setMetaData('title', strip_tags($category->category_name)); //Maybe better category_name //} if ($mainframe->getCfg('MetaAuthor') == '1') { $document->setMetaData('author', $category->metaauthor); } if ($category->customtitle) { $title = strip_tags($category->customtitle); } else { $title = strip_tags($category->category_name); } if(empty($category->category_template)){ $category->category_template = VmConfig::get('categorytemplate'); } shopFunctionsF::setVmTemplate($this,$category->category_template,0,$category->category_layout); parent::display($tpl); } } //no closing tagviews/categories/.htaccess000066600000000177151373621660011647 0ustar00 Order allow,deny Deny from all views/categories/tmpl/index.html000066600000000054151373621660013014 0ustar00views/categories/tmpl/.htaccess000066600000000177151373621660012623 0ustar00 Order allow,deny Deny from all views/categories/tmpl/default.xml000066600000002143151373621660013166 0ustar00 COM_VIRTUEMART_CATEGORIES_VIEW_DEFAULT_TITLE
          views/categories/tmpl/default.php000066600000005517151373621660013165 0ustar00category->haschildren) { // Category and Columns Counter $iCol = 1; $iCategory = 1; // Calculating Categories Per Row $categories_per_row = VmConfig::get ( 'categories_per_row', 3 ); $category_cellwidth = ' width'.floor ( 100 / $categories_per_row ); // Separator $verticalseparator = " vertical-separator"; ?>
          category->children ) { foreach ( $this->category->children as $category ) { // Show the horizontal seperator if ($iCol == 1 && $iCategory > $categories_per_row) { ?>
          views/categories/index.html000066600000000054151373621660012040 0ustar00views/user/view.html.php000066600000036532151373621660011334 0ustar00assignRef('useSSL', $useSSL); $this->assignRef('useXHTML', $useXHTML); VmConfig::loadJLang('com_virtuemart_shoppers',TRUE); $mainframe = JFactory::getApplication(); $pathway = $mainframe->getPathway(); $layoutName = $this->getLayout(); // vmdebug('layout by view '.$layoutName); if (empty($layoutName) or $layoutName == 'default') { $layoutName = JRequest::getWord('layout', 'edit'); if ($layoutName == 'default'){ $layoutName = 'edit'; } $this->setLayout($layoutName); } if (empty($this->fTask)) { $ftask = 'saveUser'; $this->assignRef('fTask', $ftask); } if (!class_exists('ShopFunctions')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'shopfunctions.php'); // vmdebug('my layoutname',$layoutName); if ($layoutName == 'login') { parent::display($tpl); return; } if (!class_exists('VirtuemartModelUser')) require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'user.php'); $this->_model = new VirtuemartModelUser(); // $this->_model->setCurrent(); //without this, the administrator can edit users in the FE, permission is handled in the usermodel, but maybe unsecure? $editor = JFactory::getEditor(); //the cuid is the id of the current user $this->_currentUser = JFactory::getUser(); $this->_cuid = $this->_lists['current_id'] = $this->_currentUser->get('id'); $this->assignRef('userId', $this->_cuid); $this->_userDetails = $this->_model->getUser(); $this->assignRef('userDetails', $this->_userDetails); $address_type = JRequest::getWord('addrtype', 'BT'); $this->assignRef('address_type', $address_type); $new = false; if (JRequest::getInt('new', '0') == 1) { $new = true; } if ($new) { $virtuemart_userinfo_id = 0; } else { $virtuemart_userinfo_id = JRequest::getString('virtuemart_userinfo_id', '0', ''); } $this->assignRef('virtuemart_userinfo_id', $virtuemart_userinfo_id); $userFields = null; if ((strpos($this->fTask, 'cart') || strpos($this->fTask, 'checkout')) && empty($virtuemart_userinfo_id)) { //New Address is filled here with the data of the cart (we are in the cart) if (!class_exists('VirtueMartCart')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'cart.php'); $cart = VirtueMartCart::getCart(); $fieldtype = $address_type . 'address'; $cart->prepareAddressDataInCart($address_type, $new, $this->_cuid); $userFields = $cart->$fieldtype; $task = JRequest::getWord('task', ''); } else { $userFields = $this->_model->getUserInfoInUserFields($layoutName, $address_type, $virtuemart_userinfo_id); if (!$new && empty($userFields[$virtuemart_userinfo_id])) { $virtuemart_userinfo_id = $this->_model->getBTuserinfo_id(); // vmdebug('Try to get $virtuemart_userinfo_id by type BT', $virtuemart_userinfo_id); } $userFields = $userFields[$virtuemart_userinfo_id]; $task = 'editaddressST'; } $this->assignRef('userFields', $userFields); if ($layoutName == 'edit') { if ($this->_model->getId() == 0 && $this->_cuid == 0) { $button_lbl = JText::_('COM_VIRTUEMART_REGISTER'); } else { $button_lbl = JText::_('COM_VIRTUEMART_SAVE'); } $this->assignRef('button_lbl', $button_lbl); $this->lUser(); $this->shopper($userFields); $this->payment(); $this->lOrderlist(); $this->lVendor(); } $this->_lists['shipTo'] = ShopFunctions::generateStAddressList($this,$this->_model, $task); if ($this->_openTab < 0) { $_paneOffset = array(); } else { if (__VM_USER_USE_SLIDERS) { $_paneOffset = array('startOffset' => $this->_openTab, 'startTransition' => 1, 'allowAllClose' => true); } else { $_paneOffset = array('startOffset' => $this->_openTab); } } $this->assignRef('lists', $this->_lists); $this->assignRef('editor', $editor); $this->assignRef('pane', $pane); if ($layoutName == 'mailregisteruser') { $vendorModel = VmModel::getModel('vendor'); // $vendorModel->setId($this->_userDetails->virtuemart_vendor_id); $vendor = $vendorModel->getVendor(); $this->assignRef('vendor', $vendor); } if ($layoutName == 'editaddress') { $layoutName = 'edit_address'; $this->setLayout($layoutName); } if (!$this->userDetails->JUser->get('id')) { $corefield_title = JText::_('COM_VIRTUEMART_USER_CART_INFO_CREATE_ACCOUNT'); } else { $corefield_title = JText::_('COM_VIRTUEMART_YOUR_ACCOUNT_DETAILS'); } if ((strpos($this->fTask, 'cart') || strpos($this->fTask, 'checkout'))) { $pathway->addItem(JText::_('COM_VIRTUEMART_CART_OVERVIEW'), JRoute::_('index.php?option=com_virtuemart&view=cart', FALSE)); } else { //$pathway->addItem(JText::_('COM_VIRTUEMART_YOUR_ACCOUNT_DETAILS'), JRoute::_('index.php?option=com_virtuemart&view=user&&layout=edit')); } $pathway_text = JText::_('COM_VIRTUEMART_YOUR_ACCOUNT_DETAILS'); if (!$this->userDetails->JUser->get('id')) { if ((strpos($this->fTask, 'cart') || strpos($this->fTask, 'checkout'))) { if ($address_type == 'BT') { $vmfield_title = JText::_('COM_VIRTUEMART_USER_FORM_EDIT_BILLTO_LBL'); } else { $vmfield_title = JText::_('COM_VIRTUEMART_USER_FORM_ADD_SHIPTO_LBL'); } } else { if ($address_type == 'BT') { $vmfield_title = JText::_('COM_VIRTUEMART_USER_FORM_EDIT_BILLTO_LBL'); $title = JText::_('COM_VIRTUEMART_REGISTER'); } else { $vmfield_title = JText::_('COM_VIRTUEMART_USER_FORM_ADD_SHIPTO_LBL'); } } } else { if ($address_type == 'BT') { $vmfield_title = JText::_('COM_VIRTUEMART_USER_FORM_BILLTO_LBL'); } else { $vmfield_title = JText::_('COM_VIRTUEMART_USER_FORM_ADD_SHIPTO_LBL'); } } $add_product_link=""; if(!class_exists('Permissions')) require(JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart' . DS . 'helpers' . DS . 'permissions.php'); if(!Permissions::getInstance()->isSuperVendor() or Vmconfig::get('multix','none')!=='none' ){ $add_product_link = JRoute::_( 'index.php?option=com_virtuemart&tmpl=component&view=product&view=product&task=edit&virtuemart_product_id=0' ); $add_product_link = $this->linkIcon($add_product_link, 'COM_VIRTUEMART_PRODUCT_ADD_PRODUCT', 'new', false, false, true, true); } $this->assignRef('add_product_link', $add_product_link); $document = JFactory::getDocument(); $document->setTitle($pathway_text); $pathway->additem($pathway_text); $document->setMetaData('robots','NOINDEX, NOFOLLOW, NOARCHIVE, NOSNIPPET'); $this->assignRef('page_title', $pathway_text); $this->assignRef('corefield_title', $corefield_title); $this->assignRef('vmfield_title', $vmfield_title); shopFunctionsF::setVmTemplate($this, 0, 0, $layoutName); parent::display($tpl); } function payment() { } function lOrderlist() { // Check for existing orders for this user $orders = VmModel::getModel('orders'); if ($this->_model->getId() == 0) { // getOrdersList() returns all orders when no userID is set (admin function), // so explicetly define an empty array when not logged in. $this->_orderList = array(); } else { $this->_orderList = $orders->getOrdersList($this->_model->getId(), true); if (empty($this->currency)) { if (!class_exists('CurrencyDisplay')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php'); $currency = CurrencyDisplay::getInstance(); $this->assignRef('currency', $currency); } } if($this->_orderList){ VmConfig::loadJLang('com_virtuemart_orders',TRUE); } $this->assignRef('orderlist', $this->_orderList); } function shopper($userFields) { // Shopper info if (!class_exists('VirtueMartModelShopperGroup')) require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'shoppergroup.php'); $_shoppergroup = VirtueMartModelShopperGroup::getShoppergroupById($this->_model->getId()); if (!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); if (Permissions::getInstance()->check('admin,storeadmin')) { $shoppergrps = array(); foreach($_shoppergroup as $group){ $shoppergrps[] = $group['virtuemart_shoppergroup_id']; } $this->_lists['shoppergroups'] = ShopFunctions::renderShopperGroupList($shoppergrps); $this->_lists['vendors'] = ShopFunctions::renderVendorList($this->_userDetails->virtuemart_vendor_id); } else { $this->_lists['shoppergroups'] = ''; foreach($_shoppergroup as $group){ $this->_lists['shoppergroups'] .= $group['shopper_group_name'].', '; } $this->_lists['shoppergroups'] = substr($this->_lists['shoppergroups'],0,-2); if (!empty($this->_userDetails->virtuemart_vendor_id)) { $this->_lists['vendors'] = $this->_userDetails->virtuemart_vendor_id; } if (empty($this->_lists['vendors'])) { $this->_lists['vendors'] = JText::_('COM_VIRTUEMART_USER_NOT_A_VENDOR'); // . $_setVendor; } } // Load the required scripts if (count($userFields['scripts']) > 0) { foreach ($userFields['scripts'] as $_script => $_path) { JHTML::script($_script, $_path); } } // Load the required styresheets if (count($userFields['links']) > 0) { foreach ($userFields['links'] as $_link => $_path) { JHTML::stylesheet($_link, $_path); } } } function lUser() { $_groupList = $this->_model->getGroupList(); if (!is_array($_groupList)) { $this->_lists['gid'] = '' . JText::_($_groupList) . ''; } else { $this->_lists['gid'] = JHTML::_('select.genericlist', $_groupList, 'gid', 'size="10"', 'value', 'text', $this->_userDetails->JUser->get('gid')); } if (!class_exists('shopFunctionsF')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'shopfunctionsf.php'); $comUserOption = shopFunctionsF::getComUserOption(); $this->_lists['canBlock'] = ($this->_currentUser->authorize($comUserOption, 'block user') && ($this->_model->getId() != $this->_cuid)); // Can't block myself TODO I broke that, please retest if it is working again $this->_lists['canSetMailopt'] = $this->_currentUser->authorize('workflow', 'email_events'); $this->_lists['block'] = JHTML::_('select.booleanlist', 'block', 'class="inputbox"', $this->_userDetails->JUser->get('block'), 'COM_VIRTUEMART_YES', 'COM_VIRTUEMART_NO'); $this->_lists['sendEmail'] = JHTML::_('select.booleanlist', 'sendEmail', 'class="inputbox"', $this->_userDetails->JUser->get('sendEmail'), 'COM_VIRTUEMART_YES', 'COM_VIRTUEMART_NO'); $this->_lists['params'] = $this->_userDetails->JUser->getParameters(true); $this->_lists['custnumber'] = $this->_model->getCustomerNumberById(); //TODO I do not understand for what we have that by Max. if ($this->_model->getId() < 1) { $this->_lists['register_new'] = 1; } else { $this->_lists['register_new'] = 0; } } function lVendor() { // If the current user is a vendor, load the store data if ($this->_userDetails->user_is_vendor) { $front = JURI::root(true).'/components/com_virtuemart/assets/'; $admin = JURI::root(true).'/administrator/components/com_virtuemart/assets/'; $document = JFactory::getDocument(); $document->addScript($front.'js/fancybox/jquery.mousewheel-3.0.4.pack.js'); $document->addScript($front.'js/fancybox/jquery.easing-1.3.pack.js'); $document->addScript($front.'js/fancybox/jquery.fancybox-1.3.4.pack.js'); vmJsApi::js ('jquery-ui', FALSE, '', TRUE); vmJsApi::js ('jquery.ui.autocomplete.html'); vmJsApi::js( 'jquery.noConflict'); $document->addScript($admin.'js/vm2admin.js'); $currencymodel = VmModel::getModel('currency', 'VirtuemartModel'); $currencies = $currencymodel->getCurrencies(); $this->assignRef('currencies', $currencies); if (!$this->_orderList) { $this->lOrderlist(); } $vendorModel = VmModel::getModel('vendor'); if (Vmconfig::get('multix', 'none') === 'none') { $vendorModel->setId(1); } else { $vendorModel->setId($this->_userDetails->virtuemart_vendor_id); } $vendor = $vendorModel->getVendor(); $vendorModel->addImages($vendor); $this->assignRef('vendor', $vendor); } } /* * renderMailLayout * * @author Max Milbers * @author Valerie Isaksen */ public function renderMailLayout($doVendor, $recipient) { $useSSL = VmConfig::get('useSSL', 0); $useXHTML = true; $this->assignRef('useSSL', $useSSL); $this->assignRef('useXHTML', $useXHTML); $userFieldsModel = VmModel::getModel('UserFields'); $userFields = $userFieldsModel->getUserFields(); $this->userFields = $userFieldsModel->getUserFieldsFilled($userFields, $this->user); if (VmConfig::get('order_mail_html')) { $mailFormat = 'html'; $lineSeparator="
          "; } else { $mailFormat = 'raw'; $lineSeparator="\n"; } $virtuemart_vendor_id=1; $vendorModel = VmModel::getModel('vendor'); $vendor = $vendorModel->getVendor($virtuemart_vendor_id); $vendorModel->addImages($vendor); $vendor->vendorFields = $vendorModel->getVendorAddressFields(); $this->assignRef('vendor', $vendor); if (!$doVendor) { $this->subject = JText::sprintf('COM_VIRTUEMART_NEW_SHOPPER_SUBJECT', $this->user->username, $this->vendor->vendor_store_name); $tpl = 'mail_' . $mailFormat . '_reguser'; } else { $this->subject = JText::sprintf('COM_VIRTUEMART_VENDOR_NEW_SHOPPER_SUBJECT', $this->user->username, $this->vendor->vendor_store_name); $tpl = 'mail_' . $mailFormat . '_regvendor'; } $this->assignRef('recipient', $recipient); $this->vendorEmail = $vendorModel->getVendorEmail($this->vendor->virtuemart_vendor_id); $this->layoutName = $tpl; $this->setLayout($tpl); parent::display(); } } //No Closing Tag views/user/.htaccess000066600000000177151373621660010500 0ustar00 Order allow,deny Deny from all views/user/tmpl/edit_vendor.php000066600000010762151373621660012672 0ustar00 langList; ?>
          :
          :
          :
          :
          : currencies, 'vendor_currency', '', 'virtuemart_currency_id', 'currency_name', $this->vendor->vendor_currency); ?>
          : currencies, 'vendor_accepted_currencies[]', 'size=10 multiple="multiple"', 'virtuemart_currency_id', 'currency_name', $this->vendor->vendor_accepted_currencies); ?>
          vendor->images[0]->displayFilesHandler($this->vendor->virtuemart_media_id,'vendor'); ?>
          editor->display('vendor_store_desc', $this->vendor->vendor_store_desc, '100%', 450, 70, 15)?>
          editor->display('vendor_terms_of_service', $this->vendor->vendor_terms_of_service, '100%', 450, 70, 15)?>
          editor->display('vendor_legal_info', $this->vendor->vendor_legal_info, '100%', 400, 70, 15)?>
          views/user/tmpl/edit_address.php000066600000016052151373621660013020 0ustar00userFields['fields']); // Implement Joomla's form validation JHTML::_ ('behavior.formvalidation'); JHTML::stylesheet ('vmpanels.css', JURI::root () . 'components/com_virtuemart/assets/css/'); if ($this->fTask === 'savecartuser') { $rtask = 'registercartuser'; $url = 0; } else { $rtask = 'registercheckoutuser'; $url = JRoute::_('index.php?option=com_virtuemart&view=cart&task=checkout', 0, $this->useSSL); } ?>

          page_title ?>

          address_type == 'BT') { echo JText::_ ('COM_VIRTUEMART_USER_FORM_EDIT_BILLTO_LBL'); } else { echo JText::_ ('COM_VIRTUEMART_USER_FORM_ADD_SHIPTO_LBL'); } ?>

          fTask, 'cart') || strpos ($this->fTask, 'checkout')) { $rview = 'cart'; } else { $rview = 'user'; } // echo 'rview = '.$rview; if (strpos ($this->fTask, 'checkout') || $this->address_type == 'ST') { $buttonclass = 'default'; } else { $buttonclass = 'button vm-button-correct'; } if (VmConfig::get ('oncheckout_show_register', 1) && $this->userId == 0 && !VmConfig::get ('oncheckout_only_registered', 0) && $this->address_type == 'BT' and $rview == 'cart') { echo JText::sprintf ('COM_VIRTUEMART_ONCHECKOUT_DEFAULT_TEXT_REGISTER', JText::_ ('COM_VIRTUEMART_REGISTER_AND_CHECKOUT'), JText::_ ('COM_VIRTUEMART_CHECKOUT_AS_GUEST')); } else { //echo JText::_('COM_VIRTUEMART_REGISTER_ACCOUNT'); } if (VmConfig::get ('oncheckout_show_register', 1) && $this->userId == 0 && $this->address_type == 'BT' and $rview == 'cart') { ?>
          trigger('onInit','dynamic_recaptcha_1'); $hide_captcha = (VmConfig::get ('oncheckout_only_registered') or $captcha_visible) ? '' : 'style="display: none;"'; ?>
          >
          userFields['functions']) > 0) { echo '' . "\n"; } echo $this->loadTemplate ('userfields'); ?>
          userDetails->JUser->get ('id')) { echo $this->loadTemplate ('addshipto'); } ?> virtuemart_userinfo_id)) { echo ''; } echo JHTML::_ ('form.token'); ?> views/user/tmpl/mail_raw_reguser.php000066600000003560151373621660013715 0ustar00user->name) . $li . $li; if (!empty($this->activationLink)) { $activationLink = '   userDetails->virtuemart_user_id!=0) { echo $this->loadTemplate('vmshopper'); } ?> loadTemplate('address_userfields'); ?> userDetails->JUser->get('id') ) { echo $this->loadTemplate('address_addshipto'); } ?> virtuemart_userinfo_id)){ echo ''; } ?> views/user/tmpl/login.php000066600000021215151373621660011473 0ustar00show )) $this->show = TRUE; if (!isset( $this->from_cart )) $this->from_cart = FALSE; if (!isset( $this->order )) $this->order = FALSE ; if(!class_exists('shopFunctionsF')) require(JPATH_VM_SITE.DS.'helpers'.DS.'shopfunctionsf.php'); $comUserOption=shopFunctionsF::getComUserOption(); if (empty($this->url)){ $url = vmURI::getCleanUrl(); } else{ $url = $this->url; } $user = JFactory::getUser(); if ($this->show and $user->id == 0 ) { JHtml::_('behavior.formvalidation'); JHTML::_ ( 'behavior.modal' ); //Extra login stuff, systems like openId and plugins HERE if (JPluginHelper::isEnabled('authentication', 'openid')) { $lang = JFactory::getLanguage(); $lang->load('plg_authentication_openid', JPATH_ADMINISTRATOR); $langScript = ' // '; $document = JFactory::getDocument(); $document->addScriptDeclaration($langScript); JHTML::_('script', 'openid.js'); } $html = ''; JPluginHelper::importPlugin('vmpayment'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmDisplayLogin', array($this, &$html, $this->from_cart)); if (is_array($html)) { foreach ($html as $login) { echo $login.'
          '; } } else { echo $html; } //end plugins section //anonymous order section if ($this->order ) { ?>



          from_cart ) { ?>

          get('allowUserRegistration')) { ?>
          id ) { ?>
          name ); ?>
          views/user/tmpl/mail_html_regvendor.php000066600000006144151373621660014410 0ustar00'; ?>
          views/user/tmpl/edit.xml000066600000000541151373621660011320 0ustar00 COM_VIRTUEMART_USER_VIEW_DEFAULT_TITLE views/user/tmpl/edit.php000066600000011713151373621660011312 0ustar00

          page_title ?>

          userDetails->virtuemart_user_id==0) { echo JText::_('COM_VIRTUEMART_YOUR_ACCOUNT_REG'); }?>

          userDetails->user_is_vendor){ ?>
           
          userDetails->virtuemart_user_id!=0) { $tabarray = array(); if($this->userDetails->user_is_vendor){ if(!empty($this->add_product_link)) { echo $this->add_product_link; } $tabarray['vendor'] = 'COM_VIRTUEMART_VENDOR'; } $tabarray['shopper'] = 'COM_VIRTUEMART_SHOPPER_FORM_LBL'; //$tabarray['user'] = 'COM_VIRTUEMART_USER_FORM_TAB_GENERALINFO'; if (!empty($this->shipto)) { $tabarray['shipto'] = 'COM_VIRTUEMART_USER_FORM_ADD_SHIPTO_LBL'; } if (($_ordcnt = count($this->orderlist)) > 0) { $tabarray['orderlist'] = 'COM_VIRTUEMART_YOUR_ORDERS'; } shopFunctionsF::buildTabs ( $this, $tabarray); } else { echo $this->loadTemplate ( 'shopper' ); } /* * TODO this Stuff should be converted in a payment module. But the idea to show already saved payment information to the user is a good one * So maybe we should place here a method (joomla plugin hook) which loads all published plugins, which already used by the user and display * them. */ // echo $this->pane->startPanel( JText::_('COM_VIRTUEMART_SHOPPER_PAYMENT_FORM_LBL'), 'edit_payment' ); // echo $this->loadTemplate('payment'); // echo $this->pane->endPanel(); // echo $this->pane->startPanel( JText::_('COM_VIRTUEMART_SHOPPER_SHIPMENT_FORM_LBL'), 'edit_shipto' ); // echo $this->loadTemplate('shipto'); // echo $this->pane->endPanel(); // if ($this->shipto !== 0) { // // Note: // // Of the order of the tabs change here, change the startOffset value for // // JPane::getInstance() as well in view.html.php! // echo $this->pane->startPanel( JText::_('COM_VIRTUEMART_USER_FORM_ADD_SHIPTO_LBL'), 'edit_shipto' ); // echo $this->loadTemplate('shipto'); // echo $this->pane->endPanel(); // } // if (($_ordcnt = count($this->orderlist)) > 0) { // echo $this->pane->startPanel( JText::_('COM_VIRTUEMART_ORDER_LIST_LBL') . ' (' . $_ordcnt . ')', 'edit_orderlist' ); // echo $this->loadTemplate('orderlist'); // echo $this->pane->endPanel(); // } // if (!empty($this->userDetails->user_is_vendor)) { // echo $this->pane->startPanel( JText::_('COM_VIRTUEMART_VENDOR_MOD'), 'edit_vendor' ); // echo $this->loadTemplate('vendor'); // echo $this->pane->endPanel(); // } // echo $this->pane->endPane(); // captcha addition if(VmConfig::get ('reg_captcha')){ JHTML::_('behavior.framework'); JPluginHelper::importPlugin('captcha'); $dispatcher = JDispatcher::getInstance(); $dispatcher->trigger('onInit','dynamic_recaptcha_1'); ?>
          views/user/tmpl/mail_raw_regvendor.php000066600000003363151373621660014235 0ustar00 vendor->vendor_store_name) . $li. $li ?> user->username . $li; ?> user->name . $li. $li; ?> userFields['fields'] as $userField) { if (!empty($userField['value']) && $userField['type'] != 'delimiter' && $userField['type'] != 'BT') { echo $userField['title'] . ' ' . $userField['value'] . $li; } } echo $li; echo JURI::root() . 'index.php?option=com_virtuemart&view=user' . $li; echo $li; //echo JURI::root() . 'index.php?option=com_virtuemart&view=user&virtuemart_user_id=' . $this->_models['user']->_id . ' ' . $li; //echo JURI::root() . 'index.php?option=com_virtuemart&view=vendor&virtuemart_vendor_id=' . $this->vendor->virtuemart_vendor_id . ' ' . $li; ?> views/user/tmpl/index.html000066600000000000151373621660011634 0ustar00views/user/tmpl/.htaccess000066600000000177151373621660011454 0ustar00 Order allow,deny Deny from all views/user/tmpl/editaddress.xml000066600000000621151373621660012665 0ustar00 COM_VIRTUEMART_USER_EDITADDRESS_VIEW_DEFAULT_TITLE views/user/tmpl/mail_html_reguser.php000066600000006737151373621660014101 0ustar00'; ?>
          views/user/tmpl/edit_orderlist.php000066600000003712151373621660013401 0ustar00
          orderlist as $i => $row) { $editlink = JRoute::_('index.php?option=com_virtuemart&view=orders&layout=details&order_number=' . $row->order_number); ?> ">
          order_number; ?> created_on); ?> modified_on); ?> order_status); ?> currency->priceDisplay($row->order_total); ?>
          views/user/tmpl/edit_address_addshipto.php000066600000001744151373621660015061 0ustar00
          ' .JText::_('COM_VIRTUEMART_USER_FORM_SHIPTO_LBL').''; ?> lists['shipTo']; ?>
          views/user/tmpl/edit_address_userfields.php000066600000004211151373621660015237 0ustar00userFields['fields'] as $field) { if($field['type'] == 'delimiter') { // For Every New Delimiter // We need to close the previous // table and delimiter if($closeDelimiter) { ?>
          views/user/tmpl/edit_vmshopper.php000066600000003675151373621660013425 0ustar00
          lists['shoppergroups']) { ?>
          lists['vendors']; ?>
          check('admin')) { ?> lists['custnumber']; } ?>
          lists['shoppergroups']; ?>
          views/user/index.html000066600000000000151373621660010660 0ustar00views/vendor/.htaccess000066600000000177151373621660011017 0ustar00 Order allow,deny Deny from all views/vendor/view.html.php000066600000012454151373621660011650 0ustar00getPathway(); $layoutName = $this->getLayout(); $model = VmModel::getModel(); $virtuemart_vendor_id = JRequest::getInt('virtuemart_vendor_id'); // if ($layoutName=='default') { if (empty($virtuemart_vendor_id)) { $document->setTitle( JText::_('COM_VIRTUEMART_VENDOR_LIST') ); $pathway->addItem(JText::_('COM_VIRTUEMART_VENDOR_LIST')); $vendors = $model->getVendors(); $model->addImages($vendors); $this->assignRef('vendors', $vendors); } else { $vendor = $model->getVendor($virtuemart_vendor_id); $model->addImages($vendor); if (VmConfig::get ('enable_content_plugin', 0)) { if(!class_exists('shopFunctionsF'))require(JPATH_VM_SITE.DS.'helpers'.DS.'shopfunctionsf.php'); shopFunctionsF::triggerContentPlugin($vendor, 'vendor','vendor_store_desc'); shopFunctionsF::triggerContentPlugin($vendor, 'vendor','vendor_terms_of_service'); } $this->assignRef('vendor', $vendor); if(!class_exists('VirtueMartModelVendor')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'vendor.php'); $userId = VirtueMartModelVendor::getUserIdByVendorId($virtuemart_vendor_id); //$usermodel = VmModel::getModel('user'); //$virtuemart_userinfo_id = $usermodel->getBTuserinfo_id($userId); //$usermodel->getVendor($virtuemart_vendor_id); //$userFields = $usermodel->getUserInfoInUserFields($layoutName, 'BT', $virtuemart_userinfo_id,true,true); //$this->assignRef('userFields', $userFields); if ($layoutName=='tos') { $document->setTitle( JText::_('COM_VIRTUEMART_VENDOR_TOS') ); $pathway->addItem(JText::_('COM_VIRTUEMART_VENDOR_TOS')); } elseif ($layoutName=='contact') { $user = JFactory::getUser(); $document->setTitle( JText::_('COM_VIRTUEMART_VENDOR_CONTACT') ); $pathway->addItem(JText::_('COM_VIRTUEMART_VENDOR_CONTACT')); $this->assignRef('user', $user); } else { $document->setTitle( JText::_('COM_VIRTUEMART_VENDOR_DETAILS') ); $pathway->addItem(JText::_('COM_VIRTUEMART_VENDOR_DETAILS')); $this->setLayout('details'); } $linkdetails = ''.JText::_('COM_VIRTUEMART_VENDOR_DETAILS').''; $linkcontact = ''.JText::_('COM_VIRTUEMART_VENDOR_CONTACT').''; $linktos = ''.JText::_('COM_VIRTUEMART_VENDOR_TOS').''; //$this->assignRef('lineSeparator', $lineSeparator); $this->assignRef('linkdetails', $linkdetails); $this->assignRef('linkcontact', $linkcontact); $this->assignRef('linktos', $linktos); } parent::display($tpl); } function renderMailLayout($doVendor, $recipient) { $this->setLayout('mail_html_question'); $this->comment = JRequest::getString('comment'); $virtuemart_vendor_id = JRequest::getInt('virtuemart_vendor_id'); $this->doVendor=$doVendor; //$this->doVendor=TRUE; $vendorModel = VmModel::getModel('vendor'); $this->vendor = $vendorModel->getVendor($virtuemart_vendor_id); // in this particular case, overwrite the value for fix the recipient name $this->vendor->vendor_name= $this->user['name']; $this->subject = JText::_('COM_VIRTUEMART_VENDOR_CONTACT') .' '.$this->user['name']; $this->vendorEmail= $this->user['email']; //$this->vendorName= $this->user['email']; if (VmConfig::get('order_mail_html')) { $tpl = 'mail_html_question'; } else { $tpl = 'mail_raw_question'; } $this->setLayout($tpl); parent::display( ); } } //No Closing Tag views/vendor/metadata.xml000066600000000303151373621660011512 0ustar00 views/vendor/index.html000066600000000000151373621660011177 0ustar00views/vendor/tmpl/tos.php000066600000002570151373621660011512 0ustar00

          vendor->vendor_store_name; if (!empty($this->vendor->images[0])) { ?>
          vendor->images[0]->displayMediaThumb('',false); ?>

          vendor->vendor_terms_of_service )) { ?>
          vendor->vendor_terms_of_service ?>

          linkdetails ?>
          linkcontact ?>
          views/vendor/tmpl/tos.xml000066600000002050151373621660011514 0ustar00 COM_VIRTUEMART_VENDOR_VIEW_TOS_TITLE
          views/vendor/tmpl/.htaccess000066600000000177151373621660011773 0ustar00 Order allow,deny Deny from all views/vendor/tmpl/mail_html_question.php000066600000004144151373621660014601 0ustar00
          views/vendor/tmpl/mail_confirmed.php000066600000002125151373621660013651 0ustar00

          views/vendor/tmpl/details.xml000066600000002074151373621660012342 0ustar00 COM_VIRTUEMART_VENDOR_VIEW_DETAILS_TITLE
          views/vendor/tmpl/details.php000066600000002662151373621660012334 0ustar00

          vendor->vendor_store_name; if (!empty($this->vendor->images[0])) { ?>
          vendor->images[0]->displayMediaThumb('',false); ?>

          vendor->vendor_store_desc.'
          '; if(!class_exists('ShopFunctions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'shopfunctions.php'); echo shopFunctions::renderVendorAddress($this->vendor->virtuemart_vendor_id); ?>
          vendor->vendor_legal_info; ?>
          linktos ?>
          linkcontact ?>
          views/vendor/tmpl/index.html000066600000000000151373621660012153 0ustar00views/vendor/tmpl/mail_raw_question.php000066600000000572151373621660014427 0ustar00vendor->vendor_store_name) . "\n" . "\n"; echo JText::_('COM_VIRTUEMART_QUESTION_ABOUT') . ' '. $this->product->product_name."\n" . "\n"; echo JText::sprintf('COM_VIRTUEMART_QUESTION_MAIL_FROM', $this->user->name, $this->user->email) . "\n"; echo $this->comment. "\n"; views/vendor/tmpl/default.xml000066600000000610151373621660012333 0ustar00 COM_VIRTUEMART_VENDOR_VIEW_DEFAULT_TITLE views/vendor/tmpl/contact.xml000066600000002074151373621660012350 0ustar00 COM_VIRTUEMART_VENDOR_VIEW_CONTACT_TITLE
          views/vendor/tmpl/contact.php000066600000010474151373621660012342 0ustar00

          vendor->vendor_store_name; if (!empty($this->vendor->images[0])) { ?>
          vendor->images[0]->displayMediaThumb('',false); ?>

          vendor->virtuemart_vendor_id); /* foreach($this->userFields as $userfields){ foreach($userfields['fields'] as $item){ if(!empty($item['value'])){ if($item['name']==='agreed'){ $item['value'] = ($item['value']===0) ? JText::_('COM_VIRTUEMART_USER_FORM_BILLTO_TOS_NO'):JText::_('COM_VIRTUEMART_USER_FORM_BILLTO_TOS_YES'); } ?> escape($item['value']) ?>
          addScriptDeclaration(' jQuery(function($){ $("#askform").validationEngine("attach"); $("#comment").keyup( function () { var result = $(this).val(); $("#counter").val( result.length ); }); }); '); ?>




          linkdetails ?>
          linktos ?>
          views/vendor/tmpl/default.php000066600000005650151373621660012333 0ustar00'; // Lets output the categories, if there are some if (!empty($this->vendors)) { ?>
          vendors as $vendor ) { // Show the horizontal seperator if ($iColumn == 1 && $ivendor > $vendorPerRow) { echo $horizontalSeparator; } // this is an indicator wether a row needs to be opened or not if ($iColumn == 1) { ?>
          virtuemart_vendor_id, FALSE); $vendorIncludedProductsURL = JRoute::_('index.php?option=com_virtuemart&view=category&virtuemart_vendor_id=' . $vendor->virtuemart_vendor_id, FALSE); //$vendorImage = $vendor->images[0]->displayMediaThumb("",false); // Show Category ?>
          vendor_name; ?>
          '; $iColumn = 1; } else { $iColumn ++; } } // Do we need a final closing row tag? if ($iColumn != 1) { ?>
          views/category/view.html.php000066600000031445151373621660012171 0ustar00assignRef('show_prices', $show_prices); if(!class_exists('shopFunctionsF'))require(JPATH_VM_SITE.DS.'helpers'.DS.'shopfunctionsf.php'); // add javascript for price and cart, need even for quantity buttons, so we need it almost anywhere vmJsApi::jPrice(); $document = JFactory::getDocument(); $app = JFactory::getApplication(); $pathway = $app->getPathway(); if (!class_exists('VmImage')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'image.php'); $categoryModel = VmModel::getModel('category'); $productModel = VmModel::getModel('product'); // set search and keyword if ($keyword = vRequest::uword('keyword', false, ' ,-,+,.,_')) { $pathway->addItem($keyword); //$title .=' ('.$keyword.')'; } //$search = vRequest::uword('keyword', null); $this->searchcustom = ''; $this->searchcustomvalues = ''; if (!empty($keyword)) { $this->searchcustom = $this->getSearchCustom(); $search = $keyword; } else { $keyword =''; $search = NULL; } $this->assignRef('search', $search); $this->assignRef('keyword', $keyword); $categoryId = JRequest::getInt('virtuemart_category_id', -1); $virtuemart_manufacturer_id = JRequest::getInt('virtuemart_manufacturer_id', -1 ); if ($categoryId === -1 and $virtuemart_manufacturer_id === -1){ $categoryId = ShopFunctionsF::getLastVisitedCategoryId(); } $this->setCanonicalLink($tpl,$document,$categoryId,$virtuemart_manufacturer_id); if ($categoryId === -1 and $virtuemart_manufacturer_id){ $categoryId = 0; $catType = 'manufacturer'; $this->setCanonicalLink($tpl,$document,$virtuemart_manufacturer_id,$catType); } if($categoryId!==-1){ $vendorId = 1; $category = $categoryModel->getCategory($categoryId); } if(!empty($category)){ if(empty($category->category_layout) or $category->category_layout != 'categories') { // Load the products in the given category $ids = $productModel->sortSearchListQuery (TRUE, $categoryId); $perRow = empty($category->products_per_row)? VmConfig::get('products_per_row',3):$category->products_per_row; $this->assignRef('perRow', $perRow); $pagination = $productModel->getPagination($perRow); $this->assignRef('vmPagination', $pagination); $ratingModel = VmModel::getModel('ratings'); $showRating = $ratingModel->showRating(); $productModel->withRating = $showRating; $this->assignRef('showRating', $showRating); $products = $productModel->getProducts ($ids); //$products = $productModel->getProductsInCategory($categoryId); $productModel->addImages($products,1); $this->assignRef('products', $products); if ($products) { $currency = CurrencyDisplay::getInstance( ); $this->assignRef('currency', $currency); foreach($products as $product){ $product->stock = $productModel->getStockIndicator($product); } } $orderByList = $productModel->getOrderByList($categoryId); $this->assignRef('orderByList', $orderByList); // Add feed links if ($products && VmConfig::get('feed_cat_published', 0)==1) { $link = '&format=feed&limitstart='; $attribs = array('type' => 'application/rss+xml', 'title' => 'RSS 2.0'); $document->addHeadLink(JRoute::_($link . '&type=rss', FALSE), 'alternate', 'rel', $attribs); $attribs = array('type' => 'application/atom+xml', 'title' => 'Atom 1.0'); $document->addHeadLink(JRoute::_($link . '&type=atom', FALSE), 'alternate', 'rel', $attribs); } if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); $showBasePrice = Permissions::getInstance()->check('admin'); //todo add config settings $this->assignRef('showBasePrice', $showBasePrice); } //No redirect here, for category id = 0 means show ALL categories! note by Max Milbers if ((!empty($categoryId) and $categoryId!==-1 ) and (empty($category->slug) or !$category->published)) { if(empty($category->slug)){ vmInfo(JText::_('COM_VIRTUEMART_CAT_NOT_FOUND')); } else { if($category->virtuemart_id!==0 and !$category->published){ vmInfo('COM_VIRTUEMART_CAT_NOT_PUBL',$category->category_name,$categoryId); } } //Fallback $categoryLink = ''; if ($category->category_parent_id) { $categoryLink = '&view=category&virtuemart_category_id=' .$category->category_parent_id; } else { $last_category_id = shopFunctionsF::getLastVisitedCategoryId(); if (!$last_category_id or $categoryId == $last_category_id) { $last_category_id = JRequest::getInt('virtuemart_category_id', false); } if ($last_category_id and $categoryId != $last_category_id) { $categoryLink = '&view=category&virtuemart_category_id=' . $last_category_id; } } if (VmConfig::get('handle_404',1)) { $app->redirect(JRoute::_('index.php?option=com_virtuemart' . $categoryLink . '&error=404', FALSE)); } else { JError::raise(E_ERROR,'404','Not found'); } return; } shopFunctionsF::setLastVisitedCategoryId($categoryId); shopFunctionsF::setLastVisitedManuId($virtuemart_manufacturer_id); // Add the category name to the pathway if ($category->parents) { foreach ($category->parents as $c){ $pathway->addItem(strip_tags($c->category_name),JRoute::_('index.php?option=com_virtuemart&view=category&virtuemart_category_id='.$c->virtuemart_category_id, FALSE)); } } $categoryModel->addImages($category,1); if($category->category_layout == 'categories' or ($categoryId >0 and $virtuemart_manufacturer_id <1)){ $category->children = $categoryModel->getChildCategoryList( $vendorId, $categoryId, $categoryModel->getDefaultOrdering(), $categoryModel->_selectedOrderingDir ); $categoryModel->addImages($category->children,1); } else { $category->children = false; } if (VmConfig::get('enable_content_plugin', 0)) { shopFunctionsF::triggerContentPlugin($category, 'category','category_description'); } if ($category->metadesc) { $document->setDescription( $category->metadesc ); } if ($category->metakey) { $document->setMetaData('keywords', $category->metakey); } if ($category->metarobot) { $document->setMetaData('robots', $category->metarobot); } if ($app->getCfg('MetaAuthor') == '1') { $document->setMetaData('author', $category->metaauthor); } if(empty($category->category_template)){ $category->category_template = VmConfig::get('categorytemplate'); } $menus = $app->getMenu(); $menu = $menus->getActive(); if(!empty($menu->query['categorylayout']) and $menu->query['virtuemart_category_id']==$categoryId){ $category->category_layout = $menu->query['categorylayout']; } shopFunctionsF::setVmTemplate($this,$category->category_template,0,$category->category_layout); } else { //Backward compatibility if(!isset($category)) { $category = new stdClass(); $category->category_name = ''; $category->category_description= ''; $category->haschildren= false; } } $this->assignRef('category', $category); // Set the titles if (!empty($category->customtitle)) { $title = strip_tags($category->customtitle); } elseif (!empty($category->category_name)) { $title = strip_tags($category->category_name); } else { $title = $this->setTitleByJMenu($app); } if(JRequest::getInt('error')){ $title .=' '.JText::_('COM_VIRTUEMART_PRODUCT_NOT_FOUND'); } if(!empty($keyword)){ $title .=' ('.$keyword.')'; } if ($virtuemart_manufacturer_id>0 and !empty($products[0])) $title .=' '.$products[0]->mf_name ; $document->setTitle( $title ); // Override Category name when viewing manufacturers products !IMPORTANT AFTER page title. if ($virtuemart_manufacturer_id>0 and !empty($products[0]) and isset($category->category_name)) $category->category_name =$products[0]->mf_name ; if ($app->getCfg('MetaTitle') == '1') { $document->setMetaData('title', $title); } parent::display($tpl); } public function setTitleByJMenu($app){ $menus = $app->getMenu(); $menu = $menus->getActive(); $title = 'VirtueMart Category View'; if ($menu) $title = $menu->title; // $title = $this->params->get('page_title', ''); // Check for empty title and add site name if param is set if (empty($title)) { $title = $app->getCfg('sitename'); } elseif ($app->getCfg('sitename_pagetitles', 0) == 1) { $title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), $title); } elseif ($app->getCfg('sitename_pagetitles', 0) == 2) { $title = JText::sprintf('JPAGETITLE', $title, $app->getCfg('sitename')); } return $title; } public function setCanonicalLink($tpl,$document,$categoryId,$manId){ // Set Canonic link if (!empty($tpl)) { $format = $tpl; } else { $format = JRequest::getWord('format', 'html'); } if ($format == 'html') { $link = 'index.php?option=com_virtuemart&view=category'; if($categoryId!==-1){ $link .= '&virtuemart_category_id='.$categoryId; } if($manId!==-1){ $link .= '&virtuemart_manufacturer_id='.$manId; } $document->addHeadLink( JRoute::_($link, FALSE) , 'canonical', 'rel', '' ); } } /* * generate custom fields list to display as search in FE */ public function getSearchCustom() { $emptyOption = array('virtuemart_custom_id' =>0, 'custom_title' => JText::_('COM_VIRTUEMART_LIST_EMPTY_OPTION')); $this->_db =JFactory::getDBO(); $this->_db->setQuery('SELECT `virtuemart_custom_id`, `custom_title` FROM `#__virtuemart_customs` WHERE `field_type` ="P"'); $this->options = $this->_db->loadAssocList(); if ($this->custom_parent_id = JRequest::getInt('custom_parent_id', 0)) { $this->_db->setQuery('SELECT `virtuemart_custom_id`, `custom_title` FROM `#__virtuemart_customs` WHERE custom_parent_id='.$this->custom_parent_id); $this->selected = $this->_db->loadObjectList(); $this->searchCustomValues =''; foreach ($this->selected as $selected) { $this->_db->setQuery('SELECT `custom_value` as virtuemart_custom_id,`custom_value` as custom_title FROM `#__virtuemart_product_customfields` WHERE virtuemart_custom_id='.$selected->virtuemart_custom_id); $valueOptions= $this->_db->loadAssocList(); $valueOptions = array_merge(array($emptyOption), $valueOptions); $this->searchCustomValues .= JText::_($selected->custom_title).' '.JHTML::_('select.genericlist', $valueOptions, 'customfields['.$selected->virtuemart_custom_id.']', 'class="inputbox"', 'virtuemart_custom_id', 'custom_title', 0); } } // add search for declared plugins JPluginHelper::importPlugin('vmcustom'); $dispatcher = JDispatcher::getInstance(); $plgDisplay = $dispatcher->trigger('plgVmSelectSearchableCustom',array( &$this->options,&$this->searchCustomValues,$this->custom_parent_id ) ); if(!empty($this->options)){ $this->options = array_merge(array($emptyOption), $this->options); // render List of available groups vmJsApi::chosenDropDowns(); $this->searchCustomList = JText::_('COM_VIRTUEMART_SET_PRODUCT_TYPE').' '.JHTML::_('select.genericlist',$this->options, 'custom_parent_id', 'class="inputbox vm-chzn-select"', 'virtuemart_custom_id', 'custom_title', $this->custom_parent_id); } else { $this->searchCustomList = ''; } //$this->assignRef('searchcustom', $this->searchCustomList); //$this->assignRef('searchcustomvalues', $this->searchCustomValues); } } //no closing tagviews/category/view.feed.php000066600000011606151373621660012125 0ustar00getProductsInCategory ($categoryId); if ($feed_show_images == 1) { $productModel->addImages ($products, 1); } if ($products && $feed_show_prices == 1) { $currency = CurrencyDisplay::getInstance (); } foreach ($products as $product) { $title = $this->escape ($product->product_name); $title = html_entity_decode ($title, ENT_COMPAT, 'UTF-8'); $description = ""; if ($feed_show_images == 1) { $effect = " "; $return = true; $withDescr = false; $absUrl = true; $description = $product->images[0]->displayMediaThumb ('style="margin-right: 10px; margin-bottom: 10px; float: left;"', false, $effect, $return, $withDescr, $absUrl); } if ($feed_show_description == 1) { if ($feed_description_type == 'product_s_desc') { $description .= $product->product_s_desc; } else { if ( $feed_max_text_length > 0) { $description .= shopFunctionsF::limitStringByWord ($product->product_desc, $feed_max_text_length); } else { $description .= $product->product_desc; } } } if ($feed_show_prices == 1 and $show_prices == 1) { $description .= $currency->createPriceDiv ('variantModification', 'COM_VIRTUEMART_PRODUCT_VARIANT_MOD', $product->prices); if (round ($product->prices['basePriceWithTax'], $currency->_priceConfig['salesPrice'][1]) != $product->prices['salesPrice']) { $description .= '' . $currency->createPriceDiv ('basePriceWithTax', 'COM_VIRTUEMART_PRODUCT_BASEPRICE_WITHTAX', $product->prices) . ""; } if (round ($product->prices['salesPriceWithDiscount'], $currency->_priceConfig['salesPrice'][1]) != $product->prices['salesPrice']) { $description .= $currency->createPriceDiv ('salesPriceWithDiscount', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITH_DISCOUNT', $product->prices); } $description .= $currency->createPriceDiv ('salesPrice', 'COM_VIRTUEMART_PRODUCT_SALESPRICE', $product->prices); $description .= $currency->createPriceDiv ('priceWithoutTax', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITHOUT_TAX', $product->prices); $description .= $currency->createPriceDiv ('discountAmount', 'COM_VIRTUEMART_PRODUCT_DISCOUNT_AMOUNT', $product->prices); $description .= $currency->createPriceDiv ('taxAmount', 'COM_VIRTUEMART_PRODUCT_TAX_AMOUNT', $product->prices); $unitPriceDescription = JText::sprintf ('COM_VIRTUEMART_PRODUCT_UNITPRICE', $product->product_unit); $description .= $currency->createPriceDiv ('unitPrice', $unitPriceDescription, $product->prices); } if ($feed_description_type == 'product_s_desc' OR $feed_max_text_length > 0) { $description .= '

          link) . '">' . JText::_ ('COM_VIRTUEMART_FEED_READMORE') . '

          '; } $item = new JFeedItem(); $item->title = $title; $item->link = $product->link; $item->date = $product->created_on; $item->description = '
          ' . $description . '
          '; $item->category = $categoryId; $doc->addItem ($item); } } }views/category/index.html000066600000000054151373621660011530 0ustar00views/category/.htaccess000066600000000177151373621660011337 0ustar00 Order allow,deny Deny from all views/category/tmpl/index.html000066600000000054151373621660012504 0ustar00views/category/tmpl/categories.php000066600000005517151373621660013356 0ustar00category->haschildren) { // Category and Columns Counter $iCol = 1; $iCategory = 1; // Calculating Categories Per Row $categories_per_row = VmConfig::get ( 'categories_per_row', 3 ); $category_cellwidth = ' width'.floor ( 100 / $categories_per_row ); // Separator $verticalseparator = " vertical-separator"; ?>
          category->children ) { foreach ( $this->category->children as $category ) { // Show the horizontal seperator if ($iCol == 1 && $iCategory > $categories_per_row) { ?>
          views/category/tmpl/default.xml000066600000002311151373621660012653 0ustar00 COM_VIRTUEMART_CATEGORY_VIEW_DEFAULT_TITLE
          views/category/tmpl/default.php000066600000030601151373621660012645 0ustar00category',$this->category); //vmdebug ('$this->category ' . $this->category->category_name); // Check to ensure this file is included in Joomla! defined ('_JEXEC') or die('Restricted access'); JHTML::_ ('behavior.modal'); /* javascript for list Slide Only here for the order list can be changed by the template maker */ $js = " jQuery(document).ready(function () { jQuery('.orderlistcontainer').hover( function() { jQuery(this).find('.orderlist').stop().show()}, function() { jQuery(this).find('.orderlist').stop().hide()} ) }); "; $document = JFactory::getDocument (); $document->addScriptDeclaration ($js); if (empty($this->keyword) and !empty($this->category)) { ?>
          category->category_description; ?>
          keyword)) { if (!empty($this->category->haschildren)) { // Category and Columns Counter $iCol = 1; $iCategory = 1; // Calculating Categories Per Row $categories_per_row = VmConfig::get ('categories_per_row', 3); $category_cellwidth = ' width' . floor (100 / $categories_per_row); // Separator $verticalseparator = " vertical-separator"; ?>
          category->children)) { foreach ($this->category->children as $category) { // Show the horizontal seperator if ($iCol == 1 && $iCategory > $categories_per_row) { ?>
          keyword)) { ?>

          keyword; ?>

          keyword)) { $category_id = JRequest::getInt ('virtuemart_category_id', 0); ?>
          products)) { ?>
          orderByList['orderby']; ?> orderByList['manufacturer']; ?>
          vmPagination->getResultsCounter ();?>
          vmPagination->getLimitBox ($this->category->limit_list_step); ?>
          vmPagination->getPagesLinks (); ?> vmPagination->getPagesCounter (); ?>

          category->category_name; ?>

          perRow; $Browsecellwidth = ' width' . floor (100 / $BrowseProducts_per_row); // Separator $verticalseparator = " vertical-separator"; $BrowseTotalProducts = count($this->products); // Start the Output foreach ($this->products as $product) { // Show the horizontal seperator if ($iBrowseCol == 1 && $iBrowseProduct > $BrowseProducts_per_row) { ?>
          images[0]->displayMediaThumb('class="browseProductImage"', false); ?> showRating) { $maxrating = VmConfig::get('vm_maximum_rating_scale', 5); if (empty($product->rating)) { ?> rating * 12; //I don't use round as percetntage with works perfect, as for me ?> rating) . '/' . $maxrating; ?>
          rating) . '/' . $maxrating) ?>" class="category-ratingbox" style="display:inline-block;">

          link, $product->product_name); ?>

          product_s_desc)) { ?>

          product_s_desc, 40, '...') ?>

          show_prices == '1') { if ($product->prices['salesPrice']<=0 and VmConfig::get ('askprice', 1) and !$product->images[0]->file_is_downloadable) { echo JText::_ ('COM_VIRTUEMART_PRODUCT_ASKPRICE'); } //todo add config settings if ($this->showBasePrice) { echo $this->currency->createPriceDiv ('basePrice', 'COM_VIRTUEMART_PRODUCT_BASEPRICE', $product->prices); echo $this->currency->createPriceDiv ('basePriceVariant', 'COM_VIRTUEMART_PRODUCT_BASEPRICE_VARIANT', $product->prices); } echo $this->currency->createPriceDiv ('variantModification', 'COM_VIRTUEMART_PRODUCT_VARIANT_MOD', $product->prices); if (round($product->prices['basePriceWithTax'],$this->currency->_priceConfig['salesPrice'][1]) != $product->prices['salesPrice']) { echo '
          ' . $this->currency->createPriceDiv ('basePriceWithTax', 'COM_VIRTUEMART_PRODUCT_BASEPRICE_WITHTAX', $product->prices) . "
          "; } if (round($product->prices['salesPriceWithDiscount'],$this->currency->_priceConfig['salesPrice'][1]) != $product->prices['salesPrice']) { echo $this->currency->createPriceDiv ('salesPriceWithDiscount', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITH_DISCOUNT', $product->prices); } echo $this->currency->createPriceDiv ('salesPrice', 'COM_VIRTUEMART_PRODUCT_SALESPRICE', $product->prices); if ($product->prices['discountedPriceWithoutTax'] != $product->prices['priceWithoutTax']) { echo $this->currency->createPriceDiv ('discountedPriceWithoutTax', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITHOUT_TAX', $product->prices); } else { echo $this->currency->createPriceDiv ('priceWithoutTax', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITHOUT_TAX', $product->prices); } echo $this->currency->createPriceDiv ('discountAmount', 'COM_VIRTUEMART_PRODUCT_DISCOUNT_AMOUNT', $product->prices); echo $this->currency->createPriceDiv ('taxAmount', 'COM_VIRTUEMART_PRODUCT_TAX_AMOUNT', $product->prices); $unitPriceDescription = JText::sprintf ('COM_VIRTUEMART_PRODUCT_UNITPRICE', $product->product_unit); echo $this->currency->createPriceDiv ('unitPrice', $unitPriceDescription, $product->prices); } ?>

          link, JText::_ ('COM_VIRTUEMART_PRODUCT_DETAILS'), array('title' => $product->product_name, 'class' => 'product-details')); ?>

          products as $product ) // Do we need a final closing row tag? if ($iBrowseCol != 1) { ?>
          vmPagination->getPagesLinks (); ?>vmPagination->getPagesCounter (); ?>
          keyword)) { echo JText::_ ('COM_VIRTUEMART_NO_RESULT') . ($this->keyword ? ' : (' . $this->keyword . ')' : ''); } ?>
          views/category/tmpl/.htaccess000066600000000177151373621660012313 0ustar00 Order allow,deny Deny from all views/index.html000066600000000054151373621660007713 0ustar00helpers/.htaccess000066600000000177151373621660010027 0ustar00 Order allow,deny Deny from all helpers/index.html000066600000000001151373621660010210 0ustar00 helpers/coupon.php000066600000013425151373621660010245 0ustar00trigger('plgVmValidateCouponCode', array($_code, $_billTotal)); if(!empty($returnValues)){ foreach ($returnValues as $returnValue) { if ($returnValue !== null ) { //Take a look on this seyi, I am not sure about that, but it should work at least simular note by Max return $returnValue; } } } if(empty($couponData)){ $_db = JFactory::getDBO(); $_q = 'SELECT IF( NOW() >= `coupon_start_date` , 1, 0 ) AS started ' . ', `coupon_start_date` ' . ', IFNULL(0, IF( NOW() > `coupon_expiry_date`, 1, 0 ) ) AS ended' . ', `coupon_value_valid` ' . ', `coupon_used` ' . 'FROM `#__virtuemart_coupons` ' . 'WHERE `coupon_code` = "' . $_db->getEscaped($_code) . '"'; $_db->setQuery($_q); $couponData = $_db->loadObject(); } if (!$couponData) { return JText::_('COM_VIRTUEMART_COUPON_CODE_INVALID'); } if ($couponData->coupon_used) { $session = JFactory::getSession(); $session_id = $session->getId(); if ($couponData->coupon_used != $session_id) { return JText::_('COM_VIRTUEMART_COUPON_CODE_INVALID'); } } if (!$couponData->started) { return JText::_('COM_VIRTUEMART_COUPON_CODE_NOTYET') . $couponData->coupon_start_date; } if ($couponData->ended) { self::RemoveCoupon($_code, true); return JText::_('COM_VIRTUEMART_COUPON_CODE_EXPIRED'); } if ($_billTotal < $couponData->coupon_value_valid) { if (!class_exists('CurrencyDisplay')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php'); $currency = CurrencyDisplay::getInstance(); $coupon_value_valid = $currency->priceDisplay($couponData->coupon_value_valid); return JText::_('COM_VIRTUEMART_COUPON_CODE_TOOLOW') . " ".$coupon_value_valid; } return ''; } /** * Get the details for a given coupon * @param string $_code Coupon code * @author Oscar van Eijk * @return object Coupon details */ static public function getCouponDetails($_code) { $_db = JFactory::getDBO(); $_q = 'SELECT `percent_or_total` ' . ', `coupon_type` ' . ', `coupon_value` ' . 'FROM `#__virtuemart_coupons` ' . 'WHERE `coupon_code` = "' . $_db->getEscaped($_code) . '"'; $_db->setQuery($_q); return $_db->loadObject(); } /** * Remove a coupon from the database * @param $_code Coupon code * @param $_force True if the remove is forced. By default, only gift coupons are removed * @author Oscar van Eijk * @return boolean True on success */ static public function RemoveCoupon($_code, $_force = false) { JPluginHelper::importPlugin('vmcoupon'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmRemoveCoupon', array($_code, $_force)); if(!empty($returnValues)){ foreach ($returnValues as $returnValue) { if ($returnValue !== null ) { //Take a look on this seyi, I am not sure about that, but it should work at least simular note by Max //$couponData = $returnValue; return $returnValue; } } } if ($_force !== true) { $_data = self::getCouponDetails($_code); if ($_data->coupon_type != 'gift') { return true; } } $_db = JFactory::getDBO(); $_q = 'DELETE FROM `#__virtuemart_coupons` ' . 'WHERE `coupon_code` = "' . $_db->getEscaped($_code) . '"'; $_db->setQuery($_q); return ($_db->query() !== false); } /** * Remove a coupon from the database * @param $_code Coupon code * @param $_force True if the remove is forced. By default, only gift coupons are removed * @author Valérie Isaksen * @return boolean True on success */ static public function setInUseCoupon($code, $in_use=true){ JPluginHelper::importPlugin('vmcoupon'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmCouponInUse', array($code)); if(!empty($returnValues)){ foreach ($returnValues as $returnValue) { if ($returnValue !== null ) { return $returnValue; } } } $session = JFactory::getSession(); $coupon_used = $session->getId(); $db = JFactory::getDBO(); if (!$in_use) { $db = JFactory::getDBO(); $q = 'SELECT `coupon_used` ' . 'FROM `#__virtuemart_coupons` ' . 'WHERE `coupon_code` = "' . $db->getEscaped($code) . '"'; $db->setQuery($q); $coupon_session_id=$db->loadResult(); if ($coupon_used !=$coupon_session_id) { return; } $coupon_used=0; } $q = 'UPDATE `#__virtuemart_coupons` SET `coupon_used` = "' . $coupon_used . '" WHERE `coupon_type`= \'gift\' AND `coupon_code` = "' . $db->getEscaped($code) . '"'; $db->setQuery($q); return ($db->query() !== false); } } helpers/vmpdf.php000066600000033732151373621660010061 0ustar00SetTitle($meta['title']); if (isset($meta['subject'])) $pdf->SetSubject($meta['subject']); if (isset($meta['keywords'])) $pdf->SetKeywords($meta['keywords']); // Make the formatter available, just in case some specialized view wants/needs it $view->pdf_formatter = $pdf; ob_start(); $view->display(); $html = ob_get_contents(); ob_end_clean(); $pdf->AddPage(); $pdf->PrintContents($html); // Close and output PDF document // This method has several options, check the source code documentation for more information. $pdf->Output($path, $dest); return $path; } } if(!file_exists(JPATH_VM_LIBRARIES.DS.'tcpdf'.DS.'tcpdf.php')){ vmError('VmPDF helper: For the PDF invoice and other PDF business letters, you must install the tcpdf library at '.JPATH_VM_LIBRARIES.DS.'tcpdf'); } else { if(!class_exists('TCPDF'))require(JPATH_VM_LIBRARIES.DS.'tcpdf'.DS.'tcpdf.php'); // Extend the TCPDF class to create custom Header and Footer as configured in the Backend class VmVendorPDF extends TCPDF { var $vendor = 0; var $vendorImage = ''; var $vendorAddress = ''; var $css = ''; var $virtuemart_vendor_id = 1; public function __construct() { // Load the vendor, so we have the data for the header/footer... // The images are NOT loaded by default, so do it manually, just in case $vendorModel = VmModel::getModel('vendor'); $this->vendor = $vendorModel->getVendor($this->virtuemart_vendor_id); $vendorModel->addImages($this->vendor,1); $this->vendor->vendorFields = $vendorModel->getVendorAddressFields(); parent::__construct($this->vendor->vendor_letter_orientation, 'mm', $this->vendor->vendor_letter_format); $this->css = $this->vendor->vendor_letter_css; // set document information $this->SetCreator(JText::_('COM_VIRTUEMART_PDF_CREATOR')); if(empty($this->vendor->images[0])){ vmError('Vendor image given path empty '); } else if(empty($this->vendor->images[0]->file_url_folder) or empty($this->vendor->images[0]->file_name) or empty($this->vendor->images[0]->file_extension) ){ vmError('Vendor image given image is not complete '.$this->vendor->images[0]->file_url_folder.$this->vendor->images[0]->file_name.'.'.$this->vendor->images[0]->file_extension); vmdebug('Vendor image given image is not complete, the given media',$this->vendor->images[0]); } else if(!empty($this->vendor->images[0]->file_extension) and strtolower($this->vendor->images[0]->file_extension)=='png'){ vmError('Warning extension of the image is a png, tpcdf has problems with that in the header, choose a jpg or gif'); } else { $imagePath = str_replace('/',DS, $this->vendor->images[0]->file_url_folder.$this->vendor->images[0]->file_name.'.'.$this->vendor->images[0]->file_extension); if(!file_exists(JPATH_ROOT . DS . $imagePath)){ vmError('Vendor image missing '.$imagePath); } else { $this->vendorImage=$imagePath; } } if (!class_exists ('JFile')) { require(JPATH_VM_LIBRARIES . DS . 'joomla' . DS . 'filesystem' . DS . 'file.php'); } $tcpdf6 = JFile::exists(JPATH_VM_LIBRARIES.DS.'tcpdf'.DS.'include'.DS.'tcpdf_color.php'); if($tcpdf6){ $getAllSpotColors = TCPDF::getAllSpotColors(); $vlfooterlcolor = TCPDF_COLORS::convertHTMLColorToDec($this->vendor->vendor_letter_footer_line_color,$getAllSpotColors); } else { $vlfooterlcolor = $this->convertHTMLColorToDec($this->vendor->vendor_letter_footer_line_color); } $this->setHeaderData(($this->vendor->vendor_letter_header_image?$this->vendorImage:''), ($this->vendor->vendor_letter_header_image?$this->vendor->vendor_letter_header_imagesize:0), '', $this->vendor->vendor_letter_header_html, array(0,0,0),$vlfooterlcolor ); $this->vendorAddress = shopFunctions::renderVendorAddress($this->vendor->virtuemart_vendor_id, "
          "); // Trim the final
          from the address, which is inserted by renderVendorAddress automatically! if (substr($this->vendorAddress, -5, 5) == '
          ') { $this->vendorAddress = substr($this->vendorAddress, 0, -5); } $vmFont=$this->vendor->vendor_letter_font; $this->SetFont($vmFont, '', $this->vendor->vendor_letter_font_size, '', 'false'); $this->setHeaderFont(Array($vmFont, '', $this->vendor->vendor_letter_header_font_size )); $this->setFooterFont(Array($vmFont, '', $this->vendor->vendor_letter_footer_font_size )); // Remove all vertical margins and padding from the HTML cells (default is excessive padding): $this->SetCellPadding(0); $tagvs = array('p' => array(0 => array('h' => 0, 'n' => 0), 1 => array('h' => 0, 'n' => 0)), 'div' => array(0 => array('h' => 0, 'n' => 0), 1 => array('h' => 0, 'n' => 0)), 'h1' => array(0 => array('h' => 0, 'n' => 0), 1 => array('h' => 0, 'n' => 0)), 'h2' => array(0 => array('h' => 0, 'n' => 0), 1 => array('h' => 0, 'n' => 0)), 'h3' => array(0 => array('h' => 0, 'n' => 0), 1 => array('h' => 0, 'n' => 0)), 'table' => array(0 => array('h' => 0, 'n' => 0), 1 => array('h' => 0, 'n' => 0)), ); $this->setHtmlVSpace($tagvs); // set default font subsetting mode $this->setFontSubsetting(true); // set default monospaced font // $this->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); //set margins $this->SetMargins($this->vendor->vendor_letter_margin_left, $this->vendor->vendor_letter_margin_top, $this->vendor->vendor_letter_margin_right); $this->SetHeaderMargin($this->vendor->vendor_letter_margin_header); $this->SetFooterMargin($this->vendor->vendor_letter_margin_footer); $this->SetAutoPageBreak(TRUE, $this->vendor->vendor_letter_margin_bottom); //set image scale factor $this->setImageScale(PDF_IMAGE_SCALE_RATIO); //TODO include the right file (in libraries/tcpdf/config/lang set some language-dependent strings $l=''; $this->setLanguageArray($l); } /** Replace variables like {vm:page}, {vm:pagecount} etc. in the given string */ function replace_variables($txt) { // TODO: Implement more Placeholders (ordernr, invoicenr, etc.) // Use PageNo rather than getAliasNumPage, since the alias will be misaligned (spaced like the {:npn:} text rather than the final number) $txt = str_replace('{vm:pagenum}', $this->/*getAliasNumPage*/PageNo(), $txt); // Can't use getNumPages, because when this is evaluated, we don't know the final number of pages (getNumPages is always equal to the current page numbe) $txt = str_replace('{vm:pagecount}', $this->getAliasNbPages/*getNumPages*/(), $txt); $txt = str_replace('{vm:vendorname}', $this->vendor->vendor_store_name, $txt); $imgrepl=''; if (!empty($this->vendor->images)) { $img = $this->vendor->images[0]; $imgrepl = "
          ".$img->displayIt($img->file_url,'','',false, '', false, false)."
          "; } $txt = str_replace('{vm:vendorimage}', $imgrepl, $txt); $txt = str_replace('{vm:vendoraddress}', $this->vendorAddress, $txt); $txt = str_replace('{vm:vendorlegalinfo}', $this->vendor->vendor_legal_info, $txt); $txt = str_replace('{vm:vendordescription}', $this->vendor->vendor_store_desc, $txt); $txt = str_replace('{vm:tos}', $this->vendor->vendor_terms_of_service, $txt); return "$txt"; } public function PrintContents($html) { $contents = $this->replace_variables ($html); $this->writeHTMLCell($w=0, $h=0, $x='', $y='', $contents, $border=0, $ln=1, $fill=0, $reseth=true, $align='', $autopadding=true); } public function Footer() { if ($this->vendor->vendor_letter_footer == 1) { $footertxt = ''; $footertxt .= ''; $currentCHRF = $this->getCellHeightRatio(); $this->setCellHeightRatio($this->vendor->vendor_letter_footer_cell_height_ratio); if (!class_exists ('JFile')) { require(JPATH_VM_LIBRARIES . DS . 'joomla' . DS . 'filesystem' . DS . 'file.php'); } $tcpdf6 = JFile::exists(JPATH_VM_LIBRARIES.DS.'tcpdf'.DS.'include'.DS.'tcpdf_color.php'); if($tcpdf6){ $getAllSpotColors = TCPDF::getAllSpotColors(); $vlfooterlcolor = TCPDF_COLORS::convertHTMLColorToDec($this->vendor->vendor_letter_footer_line_color,$getAllSpotColors); } else { $vlfooterlcolor = $this->convertHTMLColorToDec($this->vendor->vendor_letter_footer_line_color); } //set style for cell border $border = 0; if ($this->vendor->vendor_letter_footer_line == 1) { $line_width = 0.85 / $this->getScaleFactor(); $this->SetLineStyle(array('width' => $line_width, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => $vlfooterlcolor)); $border = 'T'; } // TODO: Implement cell_height // $cell_height = round(($this->getCellHeightRatio() * $footerfont[2]) / $this->getScaleFactor(), 2); $cell_height=1; $this->writeHTMLCell(0, $cell_height, '', '', $footertxt, $border, 1, 0, true, '', true); // Set it back $this->setCellHeightRatio($currentCHRF); } } public function Header() { if ($this->vendor->vendor_letter_header != 1) return; if ($this->header_xobjid < 0) { // start a new XObject Template $this->header_xobjid = $this->startTemplate($this->w, $this->tMargin); $headerfont = $this->getHeaderFont(); $headerdata = $this->getHeaderData(); $this->y = $this->header_margin; $headertxt = ''; $headertxt .= '
          ' . $this->replace_variables($headerdata['string']) . '
          '; $currentCHRF = $this->getCellHeightRatio(); $this->setCellHeightRatio($this->vendor->vendor_letter_header_cell_height_ratio); if ($this->rtl) { $this->x = $this->w - $this->original_rMargin; } else { $this->x = $this->original_lMargin; } $header_x = (($this->getRTL())?($this->original_rMargin):($this->original_lMargin)); $cw = $this->w - $this->original_lMargin - $this->original_rMargin; if (($headerdata['logo']) AND ($headerdata['logo'] != K_BLANK_IMAGE)) { $imgtype = $this->getImageFileType(K_PATH_IMAGES.DS.$headerdata['logo']); if (($imgtype == 'eps') OR ($imgtype == 'ai')) { $this->ImageEps(K_PATH_IMAGES.DS.$headerdata['logo'], '', '', $headerdata['logo_width']); } elseif ($imgtype == 'svg') { $this->ImageSVG(K_PATH_IMAGES.DS.$headerdata['logo'], '', '', $headerdata['logo_width']); } else { $this->Image(K_PATH_IMAGES.DS.$headerdata['logo'], '', '', $headerdata['logo_width']); } $imgy = $this->getImageRBY(); $header_x += ($headerdata['logo_width'] * 1.1); $cw -= ($headerdata['logo_width'] * 1.1); } else { $imgy = $this->y; } // $cell_height = round(($this->cell_height_ratio * $headerfont[2]) / $this->k, 2); // set starting margin for text data cell $this->SetTextColorArray($this->header_text_color); // header string $this->SetFont($headerfont[0], $headerfont[1], $headerfont[2]); $this->SetX($header_x); $this->writeHTMLCell($cw, /*$cell_height*/0, $this->x, $this->header_margin, $headertxt, '', /*$ln=*/2, false, /*$reseth*/true, '', /*$autopadding=*/true); // print an ending header line if ($this->vendor->vendor_letter_header_line == 1) { $this->SetLineStyle(array('width' => 0.85 / $this->k, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => $headerdata['line_color'])); $this->SetY(max($imgy,$this->y)); if ($this->rtl) { $this->SetX($this->original_rMargin); } else { $this->SetX($this->original_lMargin); } $this->Cell(($this->w - $this->original_lMargin - $this->original_rMargin), 0, '', 'T', 0, 'C'); } $this->setCellHeightRatio($currentCHRF); $this->endTemplate(); } // print header template $x = 0; $dx = 0; if (!$this->header_xobj_autoreset AND $this->booklet AND (($this->page % 2) == 0)) { // adjust margins for booklet mode $dx = ($this->original_lMargin - $this->original_rMargin); } if ($this->rtl) { $x = $this->w + $dx; } else { $x = 0 + $dx; } $this->printTemplate($this->header_xobjid, $x, 0, 0, 0, '', '', false); if ($this->header_xobj_autoreset) { // reset header xobject template at each page $this->header_xobjid = -1; } } } } helpers/shopfunctionsf.php000066600000060570151373621660012015 0ustar00setLayout( 'login' ); $body = ''; $show = TRUE; if($cart) { $show = VmConfig::get( 'oncheckout_show_register', 1 ); } if($show == 1) { $view->assignRef( 'show', $show ); $view->assignRef( 'order', $order ); $view->assignRef( 'from_cart', $cart ); $view->assignRef( 'url', $url ); ob_start(); $view->display(); $body = ob_get_contents(); ob_end_clean(); } return $body; } /** * @author Max Milbers */ static public function getLastVisitedCategoryId ($default = 0) { $session = JFactory::getSession(); return $session->get( 'vmlastvisitedcategoryid', $default, 'vm' ); } /** * @author Max Milbers */ static public function setLastVisitedCategoryId ($categoryId) { $session = JFactory::getSession(); return $session->set( 'vmlastvisitedcategoryid', (int)$categoryId, 'vm' ); } /** * @author Max Milbers */ static public function getLastVisitedManuId () { $session = JFactory::getSession(); return $session->get( 'vmlastvisitedmanuid', 0, 'vm' ); } /** * @author Max Milbers */ static public function setLastVisitedManuId ($manuId) { $session = JFactory::getSession(); return $session->set( 'vmlastvisitedmanuid', (int)$manuId, 'vm' ); } static public function getAddToCartButton ($orderable) { if($orderable) { $html = ''; } else { $html = ''; } return $html; } /** * * @author Max Milbers */ static public function addProductToRecent ($productId) { $session = JFactory::getSession(); $products_ids = $session->get( 'vmlastvisitedproductids', array(), 'vm' ); $key = array_search( $productId, $products_ids ); if($key !== FALSE) { unset($products_ids[$key]); } array_unshift( $products_ids, $productId ); $products_ids = array_unique( $products_ids ); $recent_products_rows = VmConfig::get('recent_products_rows', 1); $products_per_row = VmConfig::get('homepage_products_per_row',3); $maxSize = $products_per_row * $recent_products_rows; if(count( $products_ids )>$maxSize) { array_splice( $products_ids, $maxSize ); } return $session->set( 'vmlastvisitedproductids', $products_ids, 'vm' ); } /** * Gives ids the recently by the shopper visited products * * @author Max Milbers */ public function getRecentProductIds () { $session = JFactory::getSession(); return $session->get( 'vmlastvisitedproductids', array(), 'vm' ); } /** * function to create a hyperlink * * @author RolandD * @param string $link * @param string $text * @param string $target * @param string $title * @param array $attributes * @return string */ public function hyperLink ($link, $text, $target = '', $title = '', $attributes = '') { $options = array(); if($target) { $options['target'] = $target; } if($title) { $options['title'] = $title; } if($attributes) { $options = array_merge( $options, $attributes ); } return JHTML::_( 'link', $link, $text, $options ); } /** * A function to create a XHTML compliant and JS-disabled-safe pop-up link * * @author RolandD * @param string $link The HREF attribute * @param string $text The link text * @param int $popupWidth * @param int $popupHeight * @param string $target The value of the target attribute * @param string $title * @param string $windowAttributes * @return string */ public function vmPopupLink ($link, $text, $popupWidth = 640, $popupHeight = 480, $target = '_blank', $title = '', $windowAttributes = '') { if($windowAttributes) { $windowAttributes = ','.$windowAttributes; } return self::hyperLink( $link, $text, '', $title, array("onclick" => "void window.open('$link', '$target', 'status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,width=$popupWidth,height=$popupHeight,directories=no,location=no".$windowAttributes."');return false;") ); } /** * Prepares a view for rendering email, then renders and sends * * @param object $controller * @param string $viewName View which will render the email * @param string $recipient shopper@whatever.com * @param array $vars variables to assign to the view */ //TODO this is quirk, why it is using here $noVendorMail, but everywhere else it is using $doVendor => this make logic trouble static public function renderMail ($viewName, $recipient, $vars = array(), $controllerName = NULL, $noVendorMail = FALSE,$useDefault=true) { if(!class_exists( 'VirtueMartControllerVirtuemart' )) require(JPATH_VM_SITE.DS.'controllers'.DS.'virtuemart.php'); // $format = (VmConfig::get('order_html_email',1)) ? 'html' : 'raw'; $controller = new VirtueMartControllerVirtuemart(); //Todo, do we need that? refering to http://forum.virtuemart.net/index.php?topic=96318.msg317277#msg317277 $controller->addViewPath( JPATH_VM_SITE.DS.'views' ); $view = $controller->getView( $viewName, 'html' ); if(!$controllerName) $controllerName = $viewName; $controllerClassName = 'VirtueMartController'.ucfirst( $controllerName ); if(!class_exists( $controllerClassName )) require(JPATH_VM_SITE.DS.'controllers'.DS.$controllerName.'.php'); //Todo, do we need that? refering to http://forum.virtuemart.net/index.php?topic=96318.msg317277#msg317277 $view->addTemplatePath( JPATH_VM_SITE.'/views/'.$viewName.'/tmpl' ); $template = self::loadVmTemplateStyle(); if($template) { $view->addTemplatePath( JPATH_ROOT.DS.'templates'.DS.$template.DS.'html'.DS.'com_virtuemart'.DS.$viewName ); } foreach( $vars as $key => $val ) { $view->$key = $val; } $user = FALSE; if(isset($vars['orderDetails'])){ //If the JRequest is there, the update is done by the order list view BE and so the checkbox does override the defaults. //$name = 'orders['.$order['details']['BT']->virtuemart_order_id.'][customer_notified]'; //$customer_notified = JRequest::getVar($name,-1); if(!$useDefault and isset($vars['newOrderData']['customer_notified']) and $vars['newOrderData']['customer_notified']==1 ){ $user = self::sendVmMail( $view, $recipient, $noVendorMail ); vmdebug('renderMail by overwrite'); } else { $orderstatusForShopperEmail = VmConfig::get('email_os_s',array('U','C','S','R','X')); if(!is_array($orderstatusForShopperEmail)) $orderstatusForShopperEmail = array($orderstatusForShopperEmail); if ( in_array((string) $vars['orderDetails']['details']['BT']->order_status,$orderstatusForShopperEmail) ){ $user = self::sendVmMail( $view, $recipient, $noVendorMail ); vmdebug('renderMail by default'); } else{ $user = -1; } } } else { $user = self::sendVmMail( $view, $recipient, $noVendorMail ); } if(isset($view->doVendor) && !$noVendorMail) { if(isset($vars['orderDetails'])){ $order = $vars['orderDetails']; $orderstatusForVendorEmail = VmConfig::get('email_os_v',array('U','C','R','X')); if(!is_array($orderstatusForVendorEmail)) $orderstatusForVendorEmail = array($orderstatusForVendorEmail); if ( in_array((string)$order['details']['BT']->order_status,$orderstatusForVendorEmail)){ self::sendVmMail( $view, $view->vendorEmail, TRUE ); }else{ $user = -1; } } else { self::sendVmMail( $view, $view->vendorEmail, TRUE ); } } return $user; } public static function loadVmTemplateStyle(){ $vmtemplate = VmConfig::get( 'vmtemplate', 0 ); if(!empty($vmtemplate) and is_numeric($vmtemplate)) { $db = JFactory::getDbo(); $query = 'SELECT `template`,`params` FROM `#__template_styles` WHERE `id`="'.$vmtemplate.'" '; $db->setQuery($query); $res = $db->loadAssoc(); if($res){ $registry = new JRegistry; $registry->loadString($res['params']); $template = $res['template']; } else { $err = 'The selected vmtemplate is not existing'; vmError( 'renderMail get Template failed: '.$err ); } } else { if(JVM_VERSION == 2) { $q = 'SELECT `template` FROM `#__template_styles` WHERE `client_id`="0" AND `home`="1"'; } else { $q = 'SELECT `template` FROM `#__templates_menu` WHERE `client_id`="0" AND `menuid`="0"'; } $db = JFactory::getDbo(); $db->setQuery( $q ); $template = $db->loadResult(); if(!$template){ $err = 'Could not load default template style'; vmError( 'renderMail get Template failed: '.$err ); } } return $template; } /** * With this function you can use a view to sent it by email. * Just use a task in a controller * * @param string $view for example user, cart * @param string $recipient shopper@whatever.com * @param bool $vendor true for notifying vendor of user action (e.g. registration) */ private static function sendVmMail (&$view, $recipient, $noVendorMail = FALSE) { VmConfig::ensureMemoryLimit(96); VmConfig::loadJLang('com_virtuemart',true); if(!empty($view->orderDetails['details']['BT']->order_language)) { //$jlang->load( 'com_virtuemart', JPATH_SITE, $view->orderDetails['details']['BT']->order_language, true ); //$jlang->load( 'com_virtuemart_shoppers', JPATH_SITE, $view->orderDetails['details']['BT']->order_language, true ); //$jlang->load( 'com_virtuemart_orders', JPATH_SITE, $view->orderDetails['details']['BT']->order_language, true ); VmConfig::loadJLang('com_virtuemart',true,$view->orderDetails['details']['BT']->order_language); VmConfig::loadJLang('com_virtuemart_shoppers',TRUE,$view->orderDetails['details']['BT']->order_language); VmConfig::loadJLang('com_virtuemart_orders',TRUE,$view->orderDetails['details']['BT']->order_language); } else { VmConfig::loadJLang('com_virtuemart_shoppers',TRUE); VmConfig::loadJLang('com_virtuemart_orders',TRUE); } ob_start(); $view->renderMailLayout( $noVendorMail, $recipient ); $body = ob_get_contents(); ob_end_clean(); $subject = (isset($view->subject)) ? $view->subject : JText::_( 'COM_VIRTUEMART_DEFAULT_MESSAGE_SUBJECT' ); $mailer = JFactory::getMailer(); $mailer->addRecipient( $recipient ); $mailer->setSubject( html_entity_decode( $subject) ); $mailer->isHTML( VmConfig::get( 'order_mail_html', TRUE ) ); $mailer->setBody( $body ); if(!$noVendorMail) { $replyTo[0] = $view->vendorEmail; $replyTo[1] = $view->vendor->vendor_name; $mailer->addReplyTo( $replyTo ); } else { $replyTo[0] = $view->orderDetails['details']['BT']->email; $replyTo[1] = $view->orderDetails['details']['BT']->first_name.' '.$view->orderDetails['details']['BT']->last_name; $mailer->addReplyTo( $replyTo ); } /* if (isset($view->replyTo)) { $mailer->addReplyTo($view->replyTo); }*/ if(isset($view->mediaToSend)) { foreach( (array)$view->mediaToSend as $media ) { $mailer->addAttachment( $media ); } } // set proper sender $sender = array(); if(!empty($view->vendorEmail) and VmConfig::get( 'useVendorEmail', 0 )) { $sender[0] = $view->vendorEmail; $sender[1] = $view->vendor->vendor_name; } else { // use default joomla's mail sender $app = JFactory::getApplication(); $sender[0] = $app->getCfg( 'mailfrom' ); $sender[1] = $app->getCfg( 'fromname' ); if(empty($sender[0])){ $config = JFactory::getConfig(); $sender = array( $config->getValue( 'config.mailfrom' ), $config->getValue( 'config.fromname' ) ); } } $mailer->setSender( $sender ); return $mailer->Send(); } /** * This function sets the right template on the view * @author Max Milbers */ static function setVmTemplate ($view, $catTpl = 0, $prodTpl = 0, $catLayout = 0, $prodLayout = 0) { //Lets get here the template set in the shopconfig, if there is nothing set, get the joomla standard $template = VmConfig::get( 'vmtemplate', 0 ); $db = JFactory::getDBO(); //Set specific category template if(!empty($catTpl) && empty($prodTpl)) { if(is_Int( $catTpl )) { $q = 'SELECT `category_template` FROM `#__virtuemart_categories` WHERE `virtuemart_category_id` = "'.(int)$catTpl.'" '; $db->setQuery( $q ); $temp = $db->loadResult(); if(!empty($temp)) $template = $temp; } else { $template = $catTpl; } } //Set specific product template if(!empty($prodTpl)) { if(is_Int( $prodTpl )) { $q = 'SELECT `product_template` FROM `#__virtuemart_products` WHERE `virtuemart_product_id` = "'.(int)$prodTpl.'" '; $db->setQuery( $q ); $temp = $db->loadResult(); if(!empty($temp)) $template = $temp; } else { $template = $prodTpl; } } shopFunctionsF::setTemplate( $template ); //Lets get here the layout set in the shopconfig, if there is nothing set, get the joomla standard if(JRequest::getWord( 'view' ) == 'virtuemart') { $layout = VmConfig::get( 'vmlayout', 'default' ); $view->setLayout( strtolower( $layout ) ); } else { if(empty($catLayout) and empty($prodLayout)) { $catLayout = VmConfig::get( 'productlayout', 'default' ); } //Set specific category layout if(!empty($catLayout) && empty($prodLayout)) { if(is_Int( $catLayout )) { $q = 'SELECT `layout` FROM `#__virtuemart_categories` WHERE `virtuemart_category_id` = "'.(int)$catLayout.'" '; $db->setQuery( $q ); $temp = $db->loadResult(); if(!empty($temp)) $layout = $temp; } else { $layout = $catLayout; } } //Set specific product layout if(!empty($prodLayout)) { if(is_Int( $prodLayout )) { $q = 'SELECT `layout` FROM `#__virtuemart_products` WHERE `virtuemart_product_id` = "'.(int)$prodLayout.'" '; $db->setQuery( $q ); $temp = $db->loadResult(); if(!empty($temp)) $layout = $temp; } else { $layout = $prodLayout; } } } if(!empty($layout)) { $view->setLayout( strtolower( $layout ) ); } } function sendRatingEmailToVendor ($data) { if(!class_exists('ShopFunctions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'shopfunctions.php'); $vars = array(); $productModel = VmModel::getModel ('product'); $product = $productModel->getProduct ($data['virtuemart_product_id']); $vars['subject'] = JText::sprintf('COM_VIRTUEMART_RATING_EMAIL_SUBJECT', $product->product_name); $vars['mailbody'] = JText::sprintf('COM_VIRTUEMART_RATING_EMAIL_BODY', $product->product_name); $vendorModel = VmModel::getModel ('vendor'); $vendor = $vendorModel->getVendor ($product->virtuemart_vendor_id); $vendorModel->addImages ($vendor); $vars['vendor'] = $vendor; $vars['vendorEmail'] = $vendorModel->getVendorEmail ($product->virtuemart_vendor_id); if (!class_exists ('shopFunctions')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'shopfunctions.php'); $vars['vendorAddress'] = shopFunctions::renderVendorAddress ($product->virtuemart_vendor_id); //$orderModel = VmModel::getModel ('orders'); shopFunctionsF::renderMail ('productdetails', $vars['vendorEmail'], $vars, 'productdetails', TRUE); } /** * Final setting of template * * @author Max Milbers */ static function setTemplate ($template) { if(!empty($template) && $template != 'default') { $app = JFactory::getApplication( 'site' ); if(JVM_VERSION === 1){ if(is_dir( JPATH_THEMES.DS.$template )) { $app->set( 'setTemplate', $template ); } else { JError::raiseWarning( 412, 'The chosen template couldnt find on the filesystem: '.$template ); } } else { $registry = null; if(is_numeric($template)){ $db = JFactory::getDbo(); $query = 'SELECT `template`,`params` FROM `#__template_styles` WHERE `id`="'.$template.'" '; $db->setQuery($query); $res = $db->loadAssoc(); if($res){ $registry = new JRegistry; $registry->loadString($res['params']); $template = $res['template']; } } else { vmAdminInfo('Your template settings are old, please check your template settings in the vm config and in your categories'); vmdebug('Your template settings are old, please check your template settings in the vm config and in your categories'); } if(is_dir( JPATH_THEMES.DS.$template )) { $app->setTemplate($template,$registry); } else { JError::raiseWarning( 412, 'The chosen template couldnt find on the filesystem: '.$template ); } } } return $template; } /** * * Enter description here ... * @author Max Milbers * @author Iysov * @param string $string * @param int $maxlength * @param string $suffix */ static public function limitStringByWord ($string, $maxlength, $suffix = '') { if(function_exists( 'mb_strlen' )) { // use multibyte functions by Iysov if(mb_strlen( $string )<=$maxlength) return $string; $string = mb_substr( $string, 0, $maxlength ); $index = mb_strrpos( $string, ' ' ); if($index === FALSE) { return $string; } else { return mb_substr( $string, 0, $index ).$suffix; } } else { // original code here if(strlen( $string )<=$maxlength) return $string; $string = substr( $string, 0, $maxlength ); $index = strrpos( $string, ' ' ); if($index === FALSE) { return $string; } else { return substr( $string, 0, $index ).$suffix; } } } /** * Admin UI Tabs * Gives A Tab Based Navigation Back And Loads The Templates With A Nice Design * @param $load_template = a key => value array. key = template name, value = Language File contraction * @example 'shop' => 'COM_VIRTUEMART_ADMIN_CFG_SHOPTAB' */ static function buildTabs ($view, $load_template = array()) { vmJsApi::js( 'vmtabs' ); $html = '
          '; $i = 1; foreach( $load_template as $tab_content => $tab_title ) { $html .= '
          '; $html .= $view->loadTemplate( $tab_content ); $html .= '
          '; $i++; } $html .= '
          '; echo $html; } static function getComUserOption () { if(JVM_VERSION === 1) { return 'com_user'; } else { return 'com_users'; } } /** * Checks if Joomla language keys exist and combines it according to existing keys. * @string $pkey : primary string to search for Language key (must have %s in the string to work) * @string $skey : secondary string to search for Language key * @return string * @author Max Milbers * @author Patrick Kohl */ static function translateTwoLangKeys ($pkey, $skey) { $upper = strtoupper( $pkey ).'_2STRINGS'; if(JText::_( $upper ) !== $upper) { return JText::sprintf( $upper, JText::_( $skey ) ); } else { return JText::_( $pkey ).' '.JText::_( $skey ); } } /** * Writes a PDF icon * @author Patrick Kohl * @param string $link * @param boolean $use_icon * @deprecated */ function PdfIcon ($link, $use_icon = TRUE, $modal = TRUE) { return VmView::linkIcon( $link, 'COM_VIRTUEMART_PDF', 'pdf_button', 'pdf_button_enable', $modal, $use_icon ); } /** * Writes an Email icon * @author Patrick Kohl * @param string $link * @param boolean $use_icon * @deprecated */ function EmailIcon ($virtuemart_product_id, $use_icon, $modal) { if($virtuemart_product_id>0) { $link = 'index.php?option=com_virtuemart&view=productdetails&task=recommend&virtuemart_product_id='.$virtuemart_product_id.'&tmpl=component'; return VmView::linkIcon( $link, 'COM_VIRTUEMART_EMAIL', 'emailButton', 'show_emailfriend', $modal, $use_icon ); } } /** * @author RolandD, Christopher Roussel * * @deprecated */ function PrintIcon ($link = '', $use_icon = TRUE, $add_text = '') { if(VmConfig::get( 'show_printicon', 1 ) == '1') { $folder = (JVM_VERSION === 1) ? '/images/M_images/' : '/media/system/images/'; // checks template image directory for image, if non found default are loaded if($use_icon) { $filter = JFilterInput::getInstance(); $text = JHtml::_( 'image.site', 'printButton.png', $folder, NULL, NULL, JText::_( 'COM_VIRTUEMART_PRINT' ) ); $text .= $filter->clean( $add_text ); } else { $text = '| '.JText::_( 'COM_VIRTUEMART_PRINT' ).' |'; } $isPopup = JRequest::getVar( 'pop' ); if($isPopup) { // Print Preview button - used when viewing page $html = ' '.$text.' '; return $html; } else { // Print Button - used in pop-up window return self::vmPopupLink( $link, $text, 640, 480, '_blank', JText::_( 'COM_VIRTUEMART_PRINT' ) ); } } } /** * Get Virtuemart itemID from joomla menu * @author Maik K�nnemann */ static function getMenuItemId( $lang = '*' ) { $itemID = ''; if(empty($lang)) $lang = '*'; $component = JComponentHelper::getComponent('com_virtuemart'); $db = JFactory::getDbo(); $q = 'SELECT * FROM `#__menu` WHERE `component_id` = "'. $component->id .'" and `language` = "'. $lang .'"'; $db->setQuery( $q ); $items = $db->loadObjectList(); if(empty($items)) { $q = 'SELECT * FROM `#__menu` WHERE `component_id` = "'. $component->id .'" and `language` = "*"'; $db->setQuery( $q ); $items = $db->loadObjectList(); } foreach ($items as $item) { if(strstr($item->link, 'view=virtuemart')) { $itemID = $item->id; break; } } if(empty($itemID) && !empty($items[0]->id)) { $itemID = $items[0]->id; } return $itemID; } static function triggerContentPlugin( &$article, $context, $field) { // add content plugin // $dispatcher = JDispatcher::getInstance (); JPluginHelper::importPlugin ('content'); $article->text = $article->$field; jimport ('joomla.html.parameter'); $params = new JParameter(''); if (JVM_VERSION === 2) { if (!isset($article->event)) { $article->event = new stdClass(); } $results = $dispatcher->trigger ('onContentPrepare', array('com_virtuemart.'.$context, &$article, &$params, 0)); // More events for 3rd party content plugins // This do not disturb actual plugins, because we don't modify $vendor->text $res = $dispatcher->trigger ('onContentAfterTitle', array('com_virtuemart.'.$context, &$article, &$params, 0)); $article->event->afterDisplayTitle = trim (implode ("\n", $res)); $res = $dispatcher->trigger ('onContentBeforeDisplay', array('com_virtuemart.'.$context, &$article, &$params, 0)); $article->event->beforeDisplayContent = trim (implode ("\n", $res)); $res = $dispatcher->trigger ('onContentAfterDisplay', array('com_virtuemart.'.$context, &$article, &$params, 0)); $article->event->afterDisplayContent = trim (implode ("\n", $res)); } else { $results = $dispatcher->trigger ('onPrepareContent', array(& $article, & $params, 0)); } $article->$field = $article->text; } static public function mask_string($cc, $mask_char='X') { return str_pad(substr($cc, -4), strlen($cc), $mask_char, STR_PAD_LEFT); } }helpers/cart.php000066600000163371151373621660007701 0ustar00useSSL = VmConfig::get('useSSL',0); $this->useXHTML = false; } /** * * @author Max Milbers * @param bool $setCart: set the Cart into Session * @param array $options : options for getSession * @param null $cartData: if not empty, do no get the cart data from session * @return null|VirtueMartCart */ public static function getCart($setCart=true, $options = array(), $cartData=NULL) { //What does this here? for json stuff? if (!class_exists('JTable') )require(JPATH_VM_LIBRARIES . DS . 'joomla' . DS . 'database' . DS . 'table.php'); // JTable::addIncludePath(JPATH_VM_ADMINISTRATOR . DS . 'tables'); if(empty(self::$_cart)){ if (empty($cartData)) { $session = JFactory::getSession($options); $cartSession = $session->get('vmcart', 0, 'vm'); } else { $cartSession=$cartData; } if (!empty($cartSession)) { $sessionCart = unserialize( $cartSession ); self::$_cart = new VirtueMartCart; self::$_cart->products = $sessionCart->products; self::$_cart->vendorId = $sessionCart->vendorId; self::$_cart->lastVisitedCategoryId = $sessionCart->lastVisitedCategoryId; self::$_cart->virtuemart_shipmentmethod_id = $sessionCart->virtuemart_shipmentmethod_id; self::$_cart->virtuemart_paymentmethod_id = $sessionCart->virtuemart_paymentmethod_id; self::$_cart->automaticSelectedShipment = $sessionCart->automaticSelectedShipment; self::$_cart->automaticSelectedPayment = $sessionCart->automaticSelectedPayment; self::$_cart->BT = $sessionCart->BT; self::$_cart->ST = $sessionCart->ST; self::$_cart->tosAccepted = $sessionCart->tosAccepted; self::$_cart->customer_comment = base64_decode($sessionCart->customer_comment); self::$_cart->couponCode = $sessionCart->couponCode; self::$_cart->_triesValidateCoupon = $sessionCart->_triesValidateCoupon; self::$_cart->order_language = $sessionCart->order_language; self::$_cart->cartData = $sessionCart->cartData; self::$_cart->order_number = $sessionCart->order_number; self::$_cart->lists = $sessionCart->lists; //self::$_cart->pricesUnformatted = $sessionCart->pricesUnformatted; self::$_cart->pricesCurrency = $sessionCart->pricesCurrency; self::$_cart->paymentCurrency = $sessionCart->paymentCurrency; self::$_cart->_inCheckOut = $sessionCart->_inCheckOut; self::$_cart->_dataValidated = $sessionCart->_dataValidated; self::$_cart->_confirmDone = $sessionCart->_confirmDone; self::$_cart->STsameAsBT = $sessionCart->STsameAsBT; self::$_cart->customer_number = $sessionCart->customer_number; } } if(empty(self::$_cart)){ self::$_cart = new VirtueMartCart; } if ( $setCart == true ) { self::$_cart->setPreferred(); self::$_cart->setCartIntoSession(); } return self::$_cart; } /* * Set non product info in object */ public function setPreferred() { $userModel = VmModel::getModel('user'); $user = $userModel->getCurrentUser(); if (empty($this->BT) || (!empty($this->BT) && count($this->BT) <=1) ) { foreach ($user->userInfo as $address) { if ($address->address_type == 'BT') { $this->saveAddressInCart((array) $address, $address->address_type,false); } } } if (empty($this->virtuemart_shipmentmethod_id) && !empty($user->virtuemart_shipmentmethod_id)) { $this->virtuemart_shipmentmethod_id = $user->virtuemart_shipmentmethod_id; } if (empty($this->virtuemart_paymentmethod_id) && !empty($user->virtuemart_paymentmethod_id)) { $this->virtuemart_paymentmethod_id = $user->virtuemart_paymentmethod_id; } //$this->tosAccepted is due session stuff always set to 0, so testing for null does not work if((!empty($user->agreed) || !empty($this->BT['agreed'])) && !VmConfig::get('agree_to_tos_onorder',0) ){ $this->tosAccepted = 1; } //if(empty($this->customer_number) or ($user->virtuemart_user_id!=0 and strpos($this->customer_number,'nonreg_')!==FALSE ) ){ if($user->virtuemart_user_id!=0 and empty($this->customer_number) or strpos($this->customer_number,'nonreg_')!==FALSE){ $this->customer_number = $userModel ->getCustomerNumberById(); } if(empty($this->customer_number) or strpos($this->customer_number,'nonreg_')!==FALSE){ $firstName = empty($this->BT['first_name'])? '':$this->BT['first_name']; $lastName = empty($this->BT['last_name'])? '':$this->BT['last_name']; $email = empty($this->BT['email'])? '':$this->BT['email']; $this->customer_number = 'nonreg_'.$firstName.$lastName.$email; } } /** * Set the cart in the session * * @author RolandD * * @access public */ public function setCartIntoSession() { $session = JFactory::getSession(); $sessionCart = new stdClass(); $products = array(); if ($this->products) { foreach($this->products as $key =>$product){ //Important DO NOT UNSET product_price //unset($product->product_price); //unset($product->prices); unset($product->pricesUnformatted); unset($product->mf_name); unset($product->mf_desc); unset($product->mf_url); unset($product->salesPrice); unset($product->basePriceWithTax); unset($product->subtotal); unset($product->subtotal_with_tax); unset($product->subtotal_tax_amount); unset($product->subtotal_discount); unset($product->product_price_vdate); unset($product->product_price_edate); } } // $sessionCart->products = $products; $sessionCart->products = $this->products; // echo '
          '.print_r($products,1).'
          ';die; $sessionCart->vendorId = $this->vendorId; $sessionCart->lastVisitedCategoryId = $this->lastVisitedCategoryId; $sessionCart->virtuemart_shipmentmethod_id = $this->virtuemart_shipmentmethod_id; $sessionCart->virtuemart_paymentmethod_id = $this->virtuemart_paymentmethod_id; $sessionCart->automaticSelectedShipment = $this->automaticSelectedShipment; $sessionCart->automaticSelectedPayment = $this->automaticSelectedPayment; $sessionCart->order_number = $this->order_number; $sessionCart->BT = $this->BT; $sessionCart->ST = $this->ST; $sessionCart->tosAccepted = $this->tosAccepted; $sessionCart->customer_comment = base64_encode($this->customer_comment); $sessionCart->couponCode = $this->couponCode; $sessionCart->_triesValidateCoupon = $this->_triesValidateCoupon; $sessionCart->order_language = $this->order_language; $sessionCart->cartData = $this->cartData; $sessionCart->lists = $this->lists; // $sessionCart->user = $this->user; // $sessionCart->prices = $this->prices; //$sessionCart->pricesUnformatted = $this->pricesUnformatted; $sessionCart->pricesCurrency = $this->pricesCurrency; $sessionCart->paymentCurrency = $this->paymentCurrency; //private variables $sessionCart->_inCheckOut = $this->_inCheckOut; $sessionCart->_dataValidated = $this->_dataValidated; $sessionCart->_confirmDone = $this->_confirmDone; $sessionCart->STsameAsBT = $this->STsameAsBT; $sessionCart->customer_number = $this->customer_number; if(!empty($sessionCart->pricesUnformatted)){ foreach($sessionCart->pricesUnformatted as &$prices){ if(is_array($prices)){ foreach($prices as &$price){ if(!is_array($price)){ $price = (string)$price; } } } else { $prices = (string)$prices; } } } // $pr = serialize($sessionCart->pricesUnformatted); // vmdebug('$sessionCart',$sessionCart); $session->set('vmcart', serialize($sessionCart),'vm'); } /** * Remove the cart from the session * * @author Max Milbers * @access public */ public function removeCartFromSession() { $session = JFactory::getSession(); $session->set('vmcart', 0, 'vm'); } public function setDataValidation($valid=false) { $this->_dataValidated = $valid; // $this->setCartIntoSession(); } public function getDataValidated() { return $this->_dataValidated; } public function getInCheckOut() { return $this->_inCheckOut; } public function setOutOfCheckout(){ $this->_inCheckOut = false; $this->_dataValidated = false; $this->setCartIntoSession(); } public function blockConfirm(){ $this->_blockConfirm = true; } /** * Set the last error that occured. * This is used on error to pass back to the cart when addJS() is invoked. * @param string $txt Error message * @author Oscar van Eijk */ private function setError($txt) { $this->_lastError = $txt; } /** * Retrieve the last error message * @return string The last error message that occured * @author Oscar van Eijk */ public function getError() { return ($this->_lastError); } /** * For one page checkouts, disable with this the redirects * @param bool $bool */ public function setRedirectDisabled($bool = TRUE){ $this->_redirect_disabled = $bool; } /** * Add a product to the cart * * @author RolandD * @author Max Milbers * @access public */ public function add($virtuemart_product_ids=null,&$errorMsg='') { $mainframe = JFactory::getApplication(); $success = false; $post = JRequest::get('default'); if(empty($virtuemart_product_ids)){ $virtuemart_product_ids = JRequest::getVar('virtuemart_product_id', array(), 'default', 'array'); //is sanitized then } if (empty($virtuemart_product_ids)) { $mainframe->enqueueMessage(JText::_('COM_VIRTUEMART_CART_ERROR_NO_PRODUCT_IDS', false)); return false; } $pModel = VmModel::getModel('product'); $products = array(); //Iterate through the prod_id's and perform an add to cart for each one foreach ($virtuemart_product_ids as $p_key => $virtuemart_product_id) { $quantityPost = (int) $post['quantity'][$p_key]; if($quantityPost === 0) continue; $tmpProduct = $pModel->getProduct($virtuemart_product_id, true, false,true,$quantityPost); $products[] = $tmpProduct; if ( VmConfig::get('oncheckout_show_images')){ $pModel->addImages($tmpProduct,1); } // trying to save some space in the session table $product = new stdClass(); $product -> virtuemart_manufacturer_id = $tmpProduct -> virtuemart_manufacturer_id; // $product -> mf_name = $tmpProduct -> mf_name; $product -> slug = $tmpProduct -> slug; // $product -> mf_desc = $tmpProduct -> mf_desc; // $product -> mf_url = $tmpProduct -> mf_url; $product -> published = $tmpProduct -> published; $product -> virtuemart_product_price_id = $tmpProduct -> virtuemart_product_price_id; $product -> virtuemart_product_id = $tmpProduct -> virtuemart_product_id; $product -> virtuemart_shoppergroup_id = $tmpProduct -> virtuemart_shoppergroup_id; $product -> product_price = $tmpProduct -> product_price; $product -> override = $tmpProduct -> override; $product -> product_override_price = $tmpProduct -> product_override_price; $product -> product_tax_id = $tmpProduct -> product_tax_id; $product -> product_discount_id = $tmpProduct -> product_discount_id; $product -> product_currency = $tmpProduct -> product_currency; // $product -> product_price_vdate = $tmpProduct -> product_price_vdate; // $product -> product_price_edate = $tmpProduct -> product_price_edate; $product -> virtuemart_vendor_id = $tmpProduct -> virtuemart_vendor_id; $product -> product_parent_id = $tmpProduct -> product_parent_id; $product -> product_sku = $tmpProduct -> product_sku; $product -> product_name = $tmpProduct -> product_name; $product -> product_s_desc = $tmpProduct -> product_s_desc; $product -> product_weight = $tmpProduct -> product_weight; $product -> product_weight_uom = $tmpProduct -> product_weight_uom; $product -> product_length = $tmpProduct -> product_length; $product -> product_width = $tmpProduct -> product_width; $product -> product_height = $tmpProduct -> product_height; $product -> product_lwh_uom = $tmpProduct -> product_lwh_uom; $product -> product_in_stock = $tmpProduct -> product_in_stock; $product -> product_ordered = $tmpProduct -> product_ordered; $product -> product_available_date = $tmpProduct -> product_available_date; $product -> product_availability = $tmpProduct -> product_availability; $product -> product_sales = $tmpProduct -> product_sales; $product -> product_unit = $tmpProduct -> product_unit; $product -> product_packaging = $tmpProduct -> product_packaging; $product -> min_order_level = $tmpProduct -> min_order_level; $product -> max_order_level = $tmpProduct -> max_order_level; $product -> virtuemart_media_id = $tmpProduct -> virtuemart_media_id; $product -> step_order_level= $tmpProduct ->step_order_level; if(!empty($tmpProduct ->images)) $product->image = $tmpProduct -> images[0]; $product -> categories = $tmpProduct -> categories; $product -> virtuemart_category_id = $tmpProduct -> virtuemart_category_id; $product -> category_name = $tmpProduct -> category_name; $product -> link = $tmpProduct -> link; $product -> packaging = $tmpProduct -> packaging; if (!empty($tmpProduct -> customfieldsCart) ) $product -> customfieldsCart = true; //why do we have this here? //Why reloading the product wiht same name $product ? // passed all from $tmpProduct and relaoding it second time ???? // $tmpProduct = $this->getProduct((int) $virtuemart_product_id); seee before !!! // $product = $this->getProduct((int) $virtuemart_product_id); // Who ever noted that, yes that is exactly right that way, before we have a full object, with all functions // of all its parents, we only need the data of the product, so we create a dummy class which contains only the data // This is extremly important for performance reasons, else the sessions becomes too big. // Check if we have a product if ($product) { if(!empty( $post['virtuemart_category_id'][$p_key])){ $virtuemart_category_idPost = (int) $post['virtuemart_category_id'][$p_key]; $product->virtuemart_category_id = $virtuemart_category_idPost; } $productKey = $product->virtuemart_product_id; //VmConfig::$echoDebug = true; //vmdebug('$post["customPrice"] ',$post['customPrice']); // INDEX NOT FOUND IN JSON HERE // changed name field you know exactly was this is if (isset($post['customPrice'])) { $product->customPrices = $post['customPrice']; if (isset($post['customPlugin'])){ //if(!class_exists('vmFilter'))require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'vmfilter.php'); if(!is_array($post['customPlugin'])){ $customPlugins = (array) $post['customPlugin']; } else { $customPlugins = $post['customPlugin']; } foreach($customPlugins as &$customPlugin){ if(is_array($customPlugin)){ foreach($customPlugin as &$customParams){ if(is_array($customParams)){ foreach($customParams as &$customParam){ /* the plugin returned an array of values */ if(is_array($customParam)){ foreach ($customParam as &$customParamItem) { $value = JComponentHelper::filterText($customParamItem); $value = (string)preg_replace('#on[a-z](.+?)\)#si','',$value);//replace start of script onclick() onload()... $value = trim(str_replace('"', ' ', $value),"'") ; $customParamItem = (string)preg_replace('#^\'#si','',$value); } } else { $value = JComponentHelper::filterText($customParam); $value = (string)preg_replace('#on[a-z](.+?)\)#si','',$value);//replace start of script onclick() onload()... $value = trim(str_replace('"', ' ', $value),"'") ; $customParam = (string)preg_replace('#^\'#si','',$value); } //$value = vmFilter::hl( $customPl,array('deny_attribute'=>'*')); //to strong /* $value = preg_replace('@<[\/\!]*?[^<>]*?>@si','',$value);//remove all html tags */ //lets use instead } } } } } $product->customPlugin = json_encode($customPlugins); } $productKey .= '::'; foreach ($product->customPrices as $customPrice) { $found = false; foreach ($customPrice as $customId => $custom_fieldId) { vmdebug('The $customId => $custom_fieldId '.$productKey,$customId,$custom_fieldId); //MarkerVarMods if ( is_array($custom_fieldId) ) { foreach ($custom_fieldId as $userfieldId => $userfield) { //$productKey .= (int)$customId . ':' . (int)$userfieldId . ';'; //$productKey .= (int)$custom_fieldId . ':' .(int)$customId . ';'; foreach($tmpProduct -> customfieldsCart as $k => $customfieldsCart){ if(isset($customfieldsCart->options) and is_array($customfieldsCart->options)){ $keys= array_keys($customfieldsCart->options); foreach( $keys as $virtuemart_customfield_id){ if($virtuemart_customfield_id==$custom_fieldId){ $productKey .= (int)$custom_fieldId . ':' .(int)$customId . ';'; unset($tmpProduct -> customfieldsCart[$k]); $found = true; } } } else { if($customfieldsCart->virtuemart_customfield_id==$custom_fieldId){ $productKey .= (int)$custom_fieldId . ':' .(int)$customId . ';'; unset($tmpProduct -> customfieldsCart[$k]); $found = true; } } } } } else { //TODO productCartId foreach($tmpProduct -> customfieldsCart as $k => $customfieldsCart){ if(isset($customfieldsCart->options) and is_array($customfieldsCart->options)){ $keys= array_keys($customfieldsCart->options); foreach( $keys as $virtuemart_customfield_id){ if($virtuemart_customfield_id==$custom_fieldId){ $productKey .= (int)$custom_fieldId . ':' .(int)$customId . ';'; unset($tmpProduct -> customfieldsCart[$k]); $found = true; } } } else { if($customfieldsCart->virtuemart_customfield_id==$custom_fieldId){ $productKey .= (int)$custom_fieldId . ':' .(int)$customId . ';'; unset($tmpProduct -> customfieldsCart[$k]); $found = true; } } } } if(!$found){ foreach($tmpProduct -> customfieldsCart as $k => $cfCart){ if($cfCart->field_type=='E'){ $productKey .= (int)$cfCart->virtuemart_customfield_id . ':' . (int) $cfCart->virtuemart_custom_id . ';'; vmdebug('The $product->customPrice as $customId => $custom_fieldId '.$productKey,$cfCart); $found = true; } } if(!$found){ vmdebug('Cart variant was not found and no fallback found',$tmpProduct -> customfieldsCart,$customfieldsCart); vmError('Cart variant was not found and no fallback found'); } } } } } // Add in the quantity in case the customfield plugins need it $product->quantity = (int)$quantityPost; if(!class_exists('vmCustomPlugin')) require(JPATH_VM_PLUGINS.DS.'vmcustomplugin.php'); JPluginHelper::importPlugin('vmcustom'); $dispatcher = JDispatcher::getInstance(); // on returning false the product have not to be added to cart $addToCartReturnValues = $dispatcher->trigger('plgVmOnAddToCart',array(&$product)); foreach ($addToCartReturnValues as $returnValue) { if ( $returnValue === false ) continue 2; } if (array_key_exists($productKey, $this->products) && (empty($product->customPlugin)) ) { $errorMsg = JText::_('COM_VIRTUEMART_CART_PRODUCT_UPDATED'); $totalQuantity = $this->products[$productKey]->quantity+ $quantityPost; if ($this->checkForQuantities($product,$totalQuantity ,$errorMsg)) { $this->products[$productKey]->quantity = $totalQuantity; } else { continue; } } else { if ( !empty($product->customPlugin)) { $productKey .= count($this->products); } if ($this->checkForQuantities($product, $quantityPost,$errorMsg)) { $this->products[$productKey] = $product; $product->quantity = $quantityPost; //$mainframe->enqueueMessage(JText::_('COM_VIRTUEMART_CART_PRODUCT_ADDED')); } else { // $errorMsg = JText::_('COM_VIRTUEMART_CART_PRODUCT_OUT_OF_STOCK'); continue; } } $success = true; } else { $mainframe->enqueueMessage(JText::_('COM_VIRTUEMART_PRODUCT_NOT_FOUND', false)); return false; } } if ($success== false) return false ; // End Iteration through Prod id's $this->setCartIntoSession(); return $products; } /** * Remove a product from the cart * * @author RolandD * @param array $cart_id the cart IDs to remove from the cart * @access public */ public function removeProductCart($prod_id=0) { // Check for cart IDs if (empty($prod_id)) $prod_id = JRequest::getVar('cart_virtuemart_product_id'); unset($this->products[$prod_id]); if(isset($this->cartProductsData[$prod_id])){ // hook for plugin action "remove from cart" if(!class_exists('vmCustomPlugin')) require(JPATH_VM_PLUGINS.DS.'vmcustomplugin.php'); JPluginHelper::importPlugin('vmcustom'); $dispatcher = JDispatcher::getInstance(); $addToCartReturnValues = $dispatcher->trigger('plgVmOnRemoveFromCart',array($this,$prod_id)); unset($this->cartProductsData[$prod_id]); } $this->setCartIntoSession(); return true; } /** * Update a product in the cart * * @author Max Milbers * @param array $cart_id the cart IDs to remove from the cart * @access public */ public function updateProductCart($cart_virtuemart_product_id=0,$quantity = null) { if (empty($cart_virtuemart_product_id)) $cart_virtuemart_product_id = vRequest::getString('cart_virtuemart_product_id'); if ($quantity === null) $quantity = vRequest::getInt('quantity'); $updated = false; if (array_key_exists($cart_virtuemart_product_id, $this->products)) { if (!empty($quantity)) { if ($this->checkForQuantities($this->products[$cart_virtuemart_product_id], $quantity)) { $this->products[$cart_virtuemart_product_id]->quantity = $quantity; $updated = true; } } else { //Todo when quantity is 0, the product should be removed, maybe necessary to gather in array and execute delete func unset($this->products[$cart_virtuemart_product_id]); $updated = true; } // Save the cart $this->setCartIntoSession(); } if ($updated) return true; else return false; } /** * Get the category ID from a product ID * * @author RolandD, Patrick Kohl * @access public * @return mixed if found the category ID else null */ public function getCardCategoryId($virtuemart_product_id) { $db = JFactory::getDBO(); $q = 'SELECT `virtuemart_category_id` FROM `#__virtuemart_product_categories` WHERE `virtuemart_product_id` = ' . (int) $virtuemart_product_id . ' LIMIT 1'; $db->setQuery($q); return $db->loadResult(); } /** Checks if the quantity is correct * * @author Max Milbers */ private function checkForQuantities($product, &$quantity=0,&$errorMsg ='') { $stockhandle = VmConfig::get('stockhandle','none'); // Check for a valid quantity if (!is_numeric( $quantity)) { $errorMsg = JText::_('COM_VIRTUEMART_CART_ERROR_NO_VALID_QUANTITY', false); // $this->_error[] = 'Quantity was not a number'; $this->setError($errorMsg); vmInfo($errorMsg,$product->product_name); return false; } // Check for negative quantity if ($quantity < 1) { // $this->_error[] = 'Quantity under zero'; $errorMsg = JText::_('COM_VIRTUEMART_CART_ERROR_NO_VALID_QUANTITY', false); $this->setError($errorMsg); vmInfo($errorMsg,$product->product_name); return false; } // update the stock info from the database $product_model = VmModel::getModel('product'); $product = $product_model->getProduct($product->virtuemart_product_id); // Check to see if checking stock quantity if ($stockhandle!='none' && $stockhandle!='risetime') { $productsleft = $product->product_in_stock - $product->product_ordered; // TODO $productsleft = $product->product_in_stock - $product->product_ordered - $quantityincart ; if ($quantity > $productsleft ){ if($productsleft>0 and $stockhandle=='disableadd'){ $quantity = $productsleft; $errorMsg = JText::sprintf('COM_VIRTUEMART_CART_PRODUCT_OUT_OF_QUANTITY',$quantity); $this->setError($errorMsg); vmInfo($errorMsg.' '.$product->product_name); // $mainframe->enqueueMessage($errorMsg); } else { $errorMsg = JText::_('COM_VIRTUEMART_CART_PRODUCT_OUT_OF_STOCK'); $this->setError($errorMsg); // Private error retrieved with getError is used only by addJS, so only the latest is fine // todo better key string vmInfo($errorMsg. ' '.$product->product_name); // $mainframe->enqueueMessage($errorMsg); return false; } } } // Check for the minimum and maximum quantities $min = $product->min_order_level; if ($min != 0 && $quantity < $min) { $errorMsg = JText::sprintf('COM_VIRTUEMART_CART_MIN_ORDER', $min); $this->setError($errorMsg); vmInfo($errorMsg,$product->product_name); return false; } $max = $product->max_order_level; if ($max != 0 && $quantity > $max) { $errorMsg = JText::sprintf('COM_VIRTUEMART_CART_MAX_ORDER', $max); $this->setError($errorMsg); vmInfo($errorMsg,$product->product_name); return false; } $step = $product->step_order_level; if ($step != 0 && ($quantity%$step)!= 0) { $errorMsg = JText::sprintf('COM_VIRTUEMART_CART_STEP_ORDER', $step); $this->setError($errorMsg); vmInfo($errorMsg,$product->product_name); return false; } return true; } /** * Validate the coupon code. If ok,. set it in the cart * @param string $coupon_code Coupon code as entered by the user * @author Oscar van Eijk * TODO Change the coupon total/used in DB ? * @access public * @return string On error the message text, otherwise an empty string */ public function setCouponCode($coupon_code) { if(empty($coupon_code)) return false; if (!class_exists('CouponHelper')) { require(JPATH_VM_SITE . DS . 'helpers' . DS . 'coupon.php'); } if(!isset($this->pricesUnformatted['salesPrice'])){ $this->getCartPrices(); } if(!in_array($coupon_code,$this->_triesValidateCoupon)){ $this->_triesValidateCoupon[] = $coupon_code; } if(count($this->_triesValidateCoupon)<8){ $msg = CouponHelper::ValidateCouponCode($coupon_code, $this->pricesUnformatted['salesPrice']);; } else{ $msg = JText::_('COM_VIRTUEMART_CART_COUPON_TOO_MANY_TRIES'); } if (!empty($msg)) { $this->couponCode = ''; $this->_dataValidated = false; $this->_blockConfirm = true; $this->getCartPrices(); $this->setCartIntoSession(); return $msg; } $this->couponCode = $coupon_code; $this->setCartIntoSession(); return JText::_('COM_VIRTUEMART_CART_COUPON_VALID'); } /** * Check the selected shipment data and store the info in the cart * @param integer $shipment_id Shipment ID taken from the form data * @author Oscar van Eijk */ public function setShipment($shipment_id) { $this->virtuemart_shipmentmethod_id = $shipment_id; $this->setCartIntoSession(); } public function setPaymentMethod($virtuemart_paymentmethod_id) { $this->virtuemart_paymentmethod_id = $virtuemart_paymentmethod_id; $this->setCartIntoSession(); } function confirmDone() { $this->checkoutData(); if ($this->_dataValidated) { $this->_confirmDone = true; $this->confirmedOrder(); } else { $mainframe = JFactory::getApplication(); $mainframe->redirect(JRoute::_('index.php?option=com_virtuemart&view=cart', FALSE), JText::_('COM_VIRTUEMART_CART_CHECKOUT_DATA_NOT_VALID')); } } function checkout($redirect=true) { $this->checkoutData($redirect); if ($this->_dataValidated && $redirect) { $mainframe = JFactory::getApplication(); $mainframe->redirect(JRoute::_('index.php?option=com_virtuemart&view=cart', FALSE), JText::_('COM_VIRTUEMART_CART_CHECKOUT_DONE_CONFIRM_ORDER')); } } private function redirecter($relUrl,$redirectMsg){ $this->_dataValidated = false; $app = JFactory::getApplication(); if($this->_redirect and !$this->_redirect_disabled){ $this->setCartIntoSession(); //This is an internal redirect, therefore $this->useXHTML is always false $app->redirect(JRoute::_($relUrl,false,$this->useSSL), $redirectMsg); return false; } else { $this->_inCheckOut = false; $this->setCartIntoSession(); return false; } } public function getFilterCustomerComment(){ $this->customer_comment = JRequest::getVar('customer_comment', $this->customer_comment); // no HTML TAGS but permit all alphabet $value = preg_replace('@<[\/\!]*?[^<>]*?>@si','',$this->customer_comment);//remove all html tags $value = (string)preg_replace('#on[a-z](.+?)\)#si','',$value);//replace start of script onclick() onload()... $value = trim(str_replace('"', ' ', $value),"'") ; $this->customer_comment = (string)preg_replace('#^\'#si','',$value);//replace ' at start } private function checkoutData($redirect = true) { $this->_redirect = $redirect; $this->_inCheckOut = true; $this->setCartIntoSession(); $this->tosAccepted = JRequest::getInt('tosAccepted', $this->tosAccepted); $this->STsameAsBT = JRequest::getInt('STsameAsBT', $this->STsameAsBT); $this->order_language = JRequest::getVar('order_language', $this->order_language); $this->getFilterCustomerComment(); $this->cartData = $this->prepareCartData(); $this->prepareCartPrice(); if (count($this->products) == 0) { return $this->redirecter('index.php?option=com_virtuemart', JText::_('COM_VIRTUEMART_CART_NO_PRODUCT')); } else { foreach ($this->products as $product) { $redirectMsg = $this->checkForQuantities($product, $product->quantity); if (!$redirectMsg) { return $this->redirecter('index.php?option=com_virtuemart&view=cart', $redirectMsg); } } } // Check if a minimun purchase value is set if (($redirectMsg = $this->checkPurchaseValue()) != null) { return $this->redirecter('index.php?option=com_virtuemart&view=cart' , $redirectMsg); } $validUserDataBT = self::validateUserData(); if(!isset($this->tosAccepted)){ $userFieldsModel = VmModel::getModel('Userfields'); $agreed = $userFieldsModel->getUserfield('agreed','name'); $this->tosAccepted = $agreed->default; } if (empty($this->tosAccepted)) { $userFieldsModel = VmModel::getModel('Userfields'); $agreed = $userFieldsModel->getUserfield('agreed','name'); if(empty($this->tosAccepted) and !empty($agreed->required) and $validUserDataBT!==-1){ $redirectMsg = null;// JText::_('COM_VIRTUEMART_CART_PLEASE_ACCEPT_TOS'); $this->tosAccepted = false; vmInfo('COM_VIRTUEMART_CART_PLEASE_ACCEPT_TOS','COM_VIRTUEMART_CART_PLEASE_ACCEPT_TOS'); return $this->redirecter('index.php?option=com_virtuemart&view=cart' , $redirectMsg); } } if ($validUserDataBT!==true) { //Important, we can have as result -1,false and true. return $this->redirecter('index.php?option=com_virtuemart&view=user&task=editaddresscheckout&addrtype=BT' , ''); } if($this->STsameAsBT!==0){ if($this->_confirmDone){ $this->ST = $this->BT; } else { $this->ST = 0; } } else { if (($this->selected_shipto = JRequest::getVar('shipto', null)) !== null) { JModel::addIncludePath(JPATH_VM_ADMINISTRATOR . DS . 'models'); $userModel = JModel::getInstance('user', 'VirtueMartModel'); $stData = $userModel->getUserAddressList(0, 'ST', $this->selected_shipto); $stData = get_object_vars($stData[0]); if($this->validateUserData('ST', $stData)!=-1 and $this->validateUserData('ST', $stData)>0){ $this->ST = $stData; } } //Only when there is an ST data, test if all necessary fields are filled $validUserDataST = self::validateUserData('ST'); if ($validUserDataST!==true) { return $this->redirecter('index.php?option=com_virtuemart&view=user&task=editaddresscheckout&addrtype=ST' , ''); } } if(VmConfig::get('oncheckout_only_registered',0)) { $currentUser = JFactory::getUser(); if(empty($currentUser->id)){ $redirectMsg = JText::_('COM_VIRTUEMART_CART_ONLY_REGISTERED'); return $this->redirecter('index.php?option=com_virtuemart&view=user&task=editaddresscheckout&addrtype=BT' , $redirectMsg); } } //vmdebug('ValidateCouponCode ValidateCouponCode ValidateCouponCode',$this->couponCode); // Test Coupon if (!empty($this->couponCode)) { //$prices = $this->getCartPrices(); if (!class_exists('CouponHelper')) { require(JPATH_VM_SITE . DS . 'helpers' . DS . 'coupon.php'); } if(!in_array($this->couponCode,$this->_triesValidateCoupon)){ $this->_triesValidateCoupon[] = $this->couponCode; } if(count($this->_triesValidateCoupon)<8){ $redirectMsg = CouponHelper::ValidateCouponCode($this->couponCode, $this->pricesUnformatted['salesPrice']); } else{ $redirectMsg = JText::_('COM_VIRTUEMART_CART_COUPON_TOO_MANY_TRIES'); } if (!empty($redirectMsg)) { $this->couponCode = ''; $this->getCartPrices(); $this->setCartIntoSession(); return $this->redirecter('index.php?option=com_virtuemart&view=cart' , $redirectMsg); } } $redirectMsg = ''; //Test Shipment and show shipment plugin if (empty($this->virtuemart_shipmentmethod_id)) { return $this->redirecter('index.php?option=com_virtuemart&view=cart&task=edit_shipment' , $redirectMsg); } else if ($this->virtuemart_shipmentmethod_id != JRequest::getInt('virtuemart_shipmentmethod_id', $this->virtuemart_shipmentmethod_id)) { $obj = new VirtueMartControllerCart(); $obj->setshipment(); return $this->redirecter('index.php?option=com_virtuemart&view=cart' , $redirectMsg); } else { if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); JPluginHelper::importPlugin('vmshipment'); //Add a hook here for other shipment methods, checking the data of the choosed plugin $dispatcher = JDispatcher::getInstance(); $retValues = $dispatcher->trigger('plgVmOnCheckoutCheckDataShipment', array( $this)); //vmdebug('plgVmOnCheckoutCheckDataShipment CART', $retValues); foreach ($retValues as $retVal) { if ($retVal === true) { break; // Plugin completed succesfull; nothing else to do } elseif ($retVal === false) { // Missing data, ask for it (again) return $this->redirecter('index.php?option=com_virtuemart&view=cart&task=edit_shipment' , $redirectMsg); // NOTE: inactive plugins will always return null, so that value cannot be used for anything else! } } } //Test Payment and show payment plugin if($this->pricesUnformatted['salesPrice']>0.0){ if (empty($this->virtuemart_paymentmethod_id)) { return $this->redirecter('index.php?option=com_virtuemart&view=cart&task=editpayment' , $redirectMsg); } else if ($this->virtuemart_paymentmethod_id != JRequest::getInt('virtuemart_paymentmethod_id', $this->virtuemart_paymentmethod_id)) { $obj = new VirtueMartControllerCart(); $obj->setpayment(); return $this->redirecter('index.php?option=com_virtuemart&view=cart' , $redirectMsg); } else { if(!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS.DS.'vmpsplugin.php'); JPluginHelper::importPlugin('vmpayment'); //Add a hook here for other payment methods, checking the data of the choosed plugin $dispatcher = JDispatcher::getInstance(); $retValues = $dispatcher->trigger('plgVmOnCheckoutCheckDataPayment', array( $this)); foreach ($retValues as $retVal) { if ($retVal === true) { break; // Plugin completed succesful; nothing else to do } elseif ($retVal === false) { // Missing data, ask for it (again) return $this->redirecter('index.php?option=com_virtuemart&view=cart&task=editpayment' , $redirectMsg); // NOTE: inactive plugins will always return null, so that value cannot be used for anything else! } } } } //Show cart and checkout data overview $this->_inCheckOut = false; if($this->_blockConfirm){ $this->_dataValidated = false; return $this->redirecter('index.php?option=com_virtuemart&view=cart',''); } else { $this->_dataValidated = true; $this->setCartIntoSession(); return true; } } /** * Check if a minimum purchase value for this order has been set, and if so, if the current * value is equal or hight than that value. * @author Oscar van Eijk * @return An error message when a minimum value was set that was not eached, null otherwise */ private function checkPurchaseValue() { $vendor = VmModel::getModel('vendor'); $vendor->setId($this->vendorId); $store = $vendor->getVendor(); if ($store->vendor_min_pov > 0) { $prices = $this->getCartPrices(); if ($prices['salesPrice'] < $store->vendor_min_pov) { if (!class_exists('CurrencyDisplay')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php'); $currency = CurrencyDisplay::getInstance(); return JText::sprintf('COM_VIRTUEMART_CART_MIN_PURCHASE', $currency->priceDisplay($store->vendor_min_pov)); } } return null; } /** * Test userdata if valid * * @author Max Milbers * @param String if BT or ST * @param Object If given, an object with data address data that must be formatted to an array * @return redirectMsg, if there is a redirectMsg, the redirect should be executed after */ private function validateUserData($type='BT', $obj = null) { if(empty($obj)){ $obj = $this->{$type}; } $usersModel = VmModel::getModel('user'); return $usersModel->validateUserData($obj,$type); } /** * This function is called, when the order is confirmed by the shopper. * * Here are the last checks done by payment plugins. * The mails are created and send to vendor and shopper * will show the orderdone page (thank you page) * */ function confirmedOrder() { //Just to prevent direct call if ($this->_dataValidated && $this->_confirmDone) { $orderModel = VmModel::getModel('orders'); if (($orderID = $orderModel->createOrderFromCart($this)) === false) { $mainframe = JFactory::getApplication(); JError::raiseWarning(500, 'No order created '.$orderModel->getError()); $mainframe->redirect(JRoute::_('index.php?option=com_virtuemart&view=cart', FALSE) ); } $this->virtuemart_order_id = $orderID; //$order= $orderModel->getOrder($orderID); $orderDetails = $orderModel ->getMyOrderDetails($orderID); if(!$orderDetails or empty($orderDetails['details'])){ echo JText::_('COM_VIRTUEMART_CART_ORDER_NOTFOUND'); return; } $dispatcher = JDispatcher::getInstance(); JPluginHelper::importPlugin('vmcalculation'); JPluginHelper::importPlugin('vmcustom'); JPluginHelper::importPlugin('vmshipment'); JPluginHelper::importPlugin('vmpayment'); $returnValues = $dispatcher->trigger('plgVmConfirmedOrder', array($this, $orderDetails)); // may be redirect is done by the payment plugin (eg: paypal) // if payment plugin echos a form, false = nothing happen, true= echo form , // 1 = cart should be emptied, 0 cart should not be emptied return $orderID; } return NULL; } /** * emptyCart: Used for payment handling. * * @author Valerie Cartan Isaksen * */ public function emptyCart(){ self::emptyCartValues($this); $this->setCartIntoSession(); } /** * emptyCart: Used for payment handling. * * @author Valerie Cartan Isaksen * */ static public function emptyCartValues($cart){ //We delete the old stuff $cart->products = array(); $cart->_inCheckOut = false; $cart->_dataValidated = false; $cart->_confirmDone = false; $cart->customer_comment = ''; $cart->couponCode = ''; $cart->order_language = ''; $cart->tosAccepted = null; $cart->virtuemart_shipmentmethod_id = 0; //OSP 2012-03-14 $cart->virtuemart_paymentmethod_id = 0; $cart->order_number=null; $cart->pricesUnformatted = null; $cart->cartData = null; } function saveAddressInCart($data, $type, $putIntoSession = true) { //vmdebug('email $data',$data['email']); // VirtueMartModelUserfields::getUserFields() won't work if(!class_exists('VirtueMartModelUserfields')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'userfields.php' ); $userFieldsModel = VmModel::getModel('userfields'); $prefix = ''; $prepareUserFields = $userFieldsModel->getUserFieldsFor('cart',$type); if(!is_array($data)){ $data = get_object_vars($data); } //STaddress may be obsolete if ($type == 'STaddress' || $type =='ST') { $prefix = 'shipto_'; $this->STsameAsBT = 0; } else { // BT if(!empty($data['agreed'])){ $this->tosAccepted = $data['agreed']; } if(empty($data['email'])){ $jUser = JFactory::getUser(); $address['email'] = $jUser->email; //vmdebug('email was empty',$address['email']); } } $address = array(); foreach ($prepareUserFields as $fld) { if(!empty($fld->name)){ $name = $fld->name; /*if($fld->readonly){ vmdebug(' saveAddressInCart ',$data[$prefix.$name]); }*/ if(!empty($data[$prefix.$name])){ $address[$name] = $data[$prefix.$name]; } else { if($fld->required and isset($this->{$type}[$name])){ //Why we have this fallback to the already stored value? $address[$name] = $this->{$type}[$name]; } else { vmdebug('saveAddressInCart empty value for $name='.$name); $address[$name] = ''; } } } } //dont store passwords in the session unset($address['password']); unset($address['password2']); $this->{$type} = $address; if($putIntoSession){ $this->setCartIntoSession(); } } /* * CheckAutomaticSelectedShipment * If only one shipment is available for this amount, then automatically select it * * @author Valérie Isaksen */ function CheckAutomaticSelectedShipment($cart_prices, $checkAutomaticSelected ) { if (!$checkAutomaticSelected or count($this->products) == 0 or VmConfig::get('automatic_shipment','1')!='1') { return false; } $nbShipment = 0; $virtuemart_shipmentmethod_id = 0; if (!class_exists('vmPSPlugin')) { require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); } JPluginHelper::importPlugin('vmshipment'); $shipCounter=0; $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmOnCheckAutomaticSelectedShipment', array( $this,$cart_prices, &$shipCounter)); foreach ($returnValues as $returnValue) { if ( isset($returnValue )) { $nbShipment ++; if ($returnValue) $virtuemart_shipmentmethod_id = $returnValue; } } if ($nbShipment==1 && $virtuemart_shipmentmethod_id) { $this->virtuemart_shipmentmethod_id = $virtuemart_shipmentmethod_id; $this->automaticSelectedShipment=true; $this->setCartIntoSession(); return true; } else { if($this->automaticSelectedShipment){ $this->virtuemart_shipmentmethod_id = 0; $this->automaticSelectedShipment=false; $this->setCartIntoSession(); } return false; } } /* * CheckAutomaticSelectedPayment * If only one payment is available for this amount, then automatically select it * * @author Valérie Isaksen */ function CheckAutomaticSelectedPayment($cart_prices, $checkAutomaticSelected=true) { $nbPayment = 0; $virtuemart_paymentmethod_id=0; if ($checkAutomaticSelected and VmConfig::get('automatic_payment','1')=='1' ) { if(!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS.DS.'vmpsplugin.php'); JPluginHelper::importPlugin('vmpayment'); $dispatcher = JDispatcher::getInstance(); $paymentCounter=0; $returnValues = $dispatcher->trigger('plgVmOnCheckAutomaticSelectedPayment', array( $this, $cart_prices, &$paymentCounter)); foreach ($returnValues as $returnValue) { if ( isset($returnValue )) { $nbPayment++; if($returnValue) $virtuemart_paymentmethod_id = $returnValue; } } if ($nbPayment==1 && $virtuemart_paymentmethod_id) { $this->virtuemart_paymentmethod_id = $virtuemart_paymentmethod_id; $this->automaticSelectedPayment=true; $this->setCartIntoSession(); return true; } else { if($this->automaticSelectedPayment){ $this->virtuemart_paymentmethod_id = 0; $this->automaticSelectedPayment=false; $this->setCartIntoSession(); } return false; } } else { return false; } } /* * CheckShipmentIsValid: * check if the selected shipment is still valid for this new cart * * @author Valerie Isaksen */ function CheckShipmentIsValid() { if ($this->virtuemart_shipmentmethod_id===0) return; $shipmentValid = false; if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); JPluginHelper::importPlugin('vmshipment'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmOnCheckShipmentIsValid', array( $this)); foreach ($returnValues as $returnValue) { $shipmentValid += $returnValue; } if (!$shipmentValid) { $this->virtuemart_shipmentmethod_id = 0; $this->setCartIntoSession(); } } /* * Prepare the datas for cart/mail views * set product, price, user, adress and vendor as Object * @author Patrick Kohl * @author Valerie Isaksen */ function prepareCartViewData(){ // Get the products for the cart $this->prepareAddressDataInCart(); $this->prepareCartPrice( ) ; $this->cartData = $this->prepareCartData(); $this->prepareVendor(); } /** * prepare display of cart * * @author RolandD * @author Max Milbers * @access public */ public function prepareCartData($checkAutomaticSelected=true){ vmSetStartTime('prepareCartData'); // Get the products for the cart if(!empty($this->couponCode)){ $this->setCouponCode($this->couponCode); vmdebug('ValidateCouponCode',$this->couponCode); } else{ // Get the products for the cart, the setCouponCode does it for us $this->getCartPrices($checkAutomaticSelected); } if (empty($this->pricesUnformatted)) return null; if(!class_exists('CurrencyDisplay')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'currencydisplay.php'); $currency = CurrencyDisplay::getInstance(); $calculator = calculationHelper::getInstance(); $this->pricesCurrency = $currency->getCurrencyForDisplay(); if(!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS.DS.'vmpsplugin.php'); JPluginHelper::importPlugin('vmpayment'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmgetPaymentCurrency', array( $this->virtuemart_paymentmethod_id, &$this->paymentCurrency)); $cartData = $calculator->getCartData(); return $cartData ; } private function prepareCartPrice( ){ $productM = VmModel::getModel('product'); $usermodel = VmModel::getModel ('user'); $currentVMuser = $usermodel->getCurrentUser (); if(!is_array($currentVMuser->shopper_groups)){ $virtuemart_shoppergroup_ids = (array)$currentVMuser->shopper_groups; } else { $virtuemart_shoppergroup_ids = $currentVMuser->shopper_groups; } foreach ($this->products as $cart_item_id=>&$product){ $product->virtuemart_category_id = $this->getCardCategoryId($product->virtuemart_product_id); //$product = $productM->getProduct($product->virtuemart_product_id,true, true, true, $product->quantity); $productM->getProductPrices($product,$product->quantity,$virtuemart_shoppergroup_ids,true,true); // No full link because Mail want absolute path and in shop is better relative path $product->url = JRoute::_('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id='.$product->virtuemart_product_id.'&virtuemart_category_id='.$product->virtuemart_category_id, FALSE);//JHTML::link($url, $product->product_name); if(!empty($product->customfieldsCart)){ if(!class_exists('VirtueMartModelCustomfields'))require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'customfields.php'); $product->customfields = VirtueMartModelCustomfields::CustomsFieldCartDisplay($cart_item_id,$product); } else { $product->customfields =''; } $product->cart_item_id = $cart_item_id ; } } /** * Function Description * * @author Max Milbers * @access public * @param array $cart the cart to get the products for * @return array of product objects */ // $this->pricesUnformatted = $product_prices; public function getCartPrices($checkAutomaticSelected=true ) { if(!class_exists('calculationHelper')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'calculationh.php'); $calculator = calculationHelper::getInstance(); $this->pricesUnformatted = $calculator->getCheckoutPrices($this, $checkAutomaticSelected); return $this->pricesUnformatted; } function prepareAddressDataInCart($type='BT',$new = false, $virtuemart_user_id=null){ $userFieldsModel =VmModel::getModel('Userfields'); if($new){ $data = null; } else { $data = (object)$this->$type; } if($virtuemart_user_id!==null){ $data->virtuemart_user_id=$virtuemart_user_id; } if($type=='ST'){ $preFix = 'shipto_'; } else { $preFix = ''; } $addresstype = $type.'address'; //for example BTaddress $userFieldsBT = $userFieldsModel->getUserFieldsFor('cart',$type); $address = $this->$addresstype = $userFieldsModel->getUserFieldsFilled( $userFieldsBT ,$data ,$preFix ); //vmdebug('prepareAddressDataInCart',$this->$addresstype); if(empty($this->$type) and $type=='BT'){ $tmp =&$this->$type ; $tmp = array(); foreach($address['fields'] as $k =>$field){ //vmdebug('prepareAddressDataInCart',$k,$field); if($k=='virtuemart_country_id'){ if(isset($address['fields'][$k]['virtuemart_country_id']) and !isset($tmp['virtuemart_country_id'])){ $tmp['virtuemart_country_id'] = $address['fields'][$k]['virtuemart_country_id']; } } else if($k=='virtuemart_state_id') { if(isset($address['fields'][$k]['virtuemart_state_id']) and !isset($tmp['virtuemart_state_id'])){ $tmp['virtuemart_state_id'] = $address['fields'][$k]['virtuemart_state_id']; } } else if (!empty($address['fields'][$k]['value'])){ if(!isset($tmp[$k])){ $tmp[$k] = $address['fields'][$k]['value']; //vmdebug('Values was empty for key '.$k.', set value to default'.$address['fields'][$k]['value']); } } } //$this->$type = $tmp; } if(!empty($this->ST) && $type!=='ST'){ $data = (object)$this->ST; if($new){ $data = null; } $userFieldsST = $userFieldsModel->getUserFieldsFor('cart','ST'); $this->STaddress = $userFieldsModel->getUserFieldsFilled( $userFieldsST ,$data ,$preFix ); } } function prepareAddressRadioSelection(){ //Just in case $this->user = VmModel::getModel('user'); $this->userDetails = $this->user->getUser(); $_addressBT = array(); // Shipment address(es) if($this->user){ $_addressBT = $this->user->getUserAddressList($this->userDetails->JUser->get('id') , 'BT'); // Overwrite the address name for display purposes if(empty($_addressBT[0])) $_addressBT[0] = new stdClass(); $_addressBT[0]->address_type_name = JText::_('COM_VIRTUEMART_ACC_BILL_DEF'); $_addressST = $this->user->getUserAddressList($this->userDetails->JUser->get('id') , 'ST'); } else { $_addressBT[0]->address_type_name = ''.JText::_('COM_VIRTUEMART_ACC_BILL_DEF').''.'
          '; $_addressST = array(); } $addressList = array_merge( array($_addressBT[0])// More BT addresses can exist for shopowners :-( , $_addressST ); if($this->user){ for ($_i = 0; $_i < count($addressList); $_i++) { $addressList[$_i]->address_type_name = ''.$addressList[$_i]->address_type_name.''.'
          '; } if(!empty($addressList[0]->virtuemart_userinfo_id)){ $_selectedAddress = ( empty($this->_cart->selected_shipto) ? $addressList[0]->virtuemart_userinfo_id // Defaults to 1st BillTo : $this->_cart->selected_shipto ); $this->lists['shipTo'] = JHTML::_('select.radiolist', $addressList, 'shipto', null, 'virtuemart_userinfo_id', 'address_type_name', $_selectedAddress); }else{ $_selectedAddress = 0; $this->lists['shipTo'] = ''; } } else { $_selectedAddress = 0; $this->lists['shipTo'] = ''; } $this->lists['billTo'] = empty($addressList[0]->virtuemart_userinfo_id)? 0 : $addressList[0]->virtuemart_userinfo_id; } /** * moved to shopfunctionf * @deprecated */ function prepareMailData(){ if(empty($this->vendor)) $this->prepareVendor(); //TODO add orders, for the orderId //TODO add registering userdata // In general we need for every mail the shopperdata (with group), the vendor data, shopperemail, shopperusername, and so on } /** * moved to shopfunctionf * @deprecated */ // add vendor for cart function prepareVendor(){ $vendorModel = VmModel::getModel('vendor'); $this->vendor = $vendorModel->getVendor(1); $vendorModel->addImages($this->vendor,1); return $this->vendor; } // Render the code for Ajax Cart function prepareAjaxData($checkAutomaticSelected=false){ // Added for the zone shipment module //$vars["zone_qty"] = 0; $this->prepareCartData($checkAutomaticSelected); $weight_total = 0; $weight_subtotal = 0; //of course, some may argue that the $this->data->products should be generated in the view.html.php, but // if(empty($this->data)){ $this->data = new stdClass(); } $this->data->products = array(); $this->data->totalProduct = 0; $i=0; //OSP when prices removed needed to format billTotal for AJAX if (!class_exists('CurrencyDisplay')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php'); $currency = CurrencyDisplay::getInstance(); foreach ($this->products as $priceKey=>$product){ //$vars["zone_qty"] += $product["quantity"]; $category_id = $this->getCardCategoryId($product->virtuemart_product_id); //Create product URL $url = JRoute::_('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id='.$product->virtuemart_product_id.'&virtuemart_category_id='.$category_id, FALSE); // @todo Add variants $this->data->products[$i]['product_name'] = JHTML::link($url, $product->product_name); // Add the variants if (!is_numeric($priceKey)) { if(!class_exists('VirtueMartModelCustomfields'))require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'customfields.php'); // custom product fields display for cart $this->data->products[$i]['product_attributes'] = VirtueMartModelCustomfields::CustomsFieldCartModDisplay($priceKey,$product); } $this->data->products[$i]['product_sku'] = $product->product_sku; //** @todo WEIGHT CALCULATION //$weight_subtotal = vmShipmentMethod::get_weight($product["virtuemart_product_id"]) * $product->quantity']; //$weight_total += $weight_subtotal; // product Price total for ajax cart // $this->data->products[$i]['prices'] = $this->prices[$priceKey]['subtotal_with_tax']; $this->data->products[$i]['pricesUnformatted'] = $this->pricesUnformatted[$priceKey]['subtotal_with_tax']; $this->data->products[$i]['prices'] = $currency->priceDisplay( $this->pricesUnformatted[$priceKey]['subtotal_with_tax'] ); // other possible option to use for display $this->data->products[$i]['subtotal'] = $this->pricesUnformatted[$priceKey]['subtotal']; $this->data->products[$i]['subtotal_tax_amount'] = $this->pricesUnformatted[$priceKey]['subtotal_tax_amount']; $this->data->products[$i]['subtotal_discount'] = $this->pricesUnformatted[$priceKey]['subtotal_discount']; $this->data->products[$i]['subtotal_with_tax'] = $this->pricesUnformatted[$priceKey]['subtotal_with_tax']; // UPDATE CART / DELETE FROM CART $this->data->products[$i]['quantity'] = $product->quantity; $this->data->totalProduct += $product->quantity ; $i++; } $this->data->billTotal = $currency->priceDisplay( $this->pricesUnformatted['billTotal'] ); $this->data->dataValidated = $this->_dataValidated ; return $this->data ; } } helpers/vmview.php000066600000004017151373621660010254 0ustar00'.$text.''; else return ''.$text.''; } public function escape($var) { if (in_array($this->_escape, array('htmlspecialchars', 'htmlentities'))) { $result = call_user_func($this->_escape, $var, ENT_COMPAT, $this->_charset); } else { $result = call_user_func($this->_escape, $var); } return $result; } }virtuemart_parser.php000066600000000462151373621660011053 0ustar00 Order allow,deny Deny from all vmfiles/.htaccess000066600000000177151374526160010032 0ustar00 Order allow,deny Deny from all language/en-GB/en-GB.com_virtuemart_log.ini000066600000000552151374526160014530 0ustar00; Virtuemart! Project ; Copyright (C) 2011 Virtuemart Team. All rights reserved. ; License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 - No BOM COM_VIRTUEMART_LOG_FILENAME="File Name" COM_VIRTUEMART_LOG_FILESIZE="File Size" COM_VIRTUEMART_LOG_KB="Kb" COM_VIRTUEMART_LOG_FILEINFO="File Info"language/en-GB/en-GB.com_virtuemart_countries.ini000066600000024542151374526160015767 0ustar00; Virtuemart! Project ; Copyright (C) 2011 Virtuemart Team. All rights reserved. ; License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 - No BOM ; COM_VIRTUEMART_VIRTUEMART_COUNTRY_ID="Id" COM_VIRTUEMART_COUNTRY_ALA="Åland Islands" COM_VIRTUEMART_COUNTRY_AFG="Afghanistan" COM_VIRTUEMART_COUNTRY_ALB="Albania" COM_VIRTUEMART_COUNTRY_DZA="Algeria" COM_VIRTUEMART_COUNTRY_ASM="American Samoa" COM_VIRTUEMART_COUNTRY_AND="Andorra" COM_VIRTUEMART_COUNTRY_AGO="Angola" COM_VIRTUEMART_COUNTRY_AIA="Anguilla" COM_VIRTUEMART_COUNTRY_ATA="Antarctica" COM_VIRTUEMART_COUNTRY_ATG="Antigua and Barbuda" COM_VIRTUEMART_COUNTRY_ARG="Argentina" COM_VIRTUEMART_COUNTRY_ARM="Armenia" COM_VIRTUEMART_COUNTRY_ABW="Aruba" COM_VIRTUEMART_COUNTRY_ASC="Ascension" COM_VIRTUEMART_COUNTRY_AUS="Australia" COM_VIRTUEMART_COUNTRY_AUT="Austria" COM_VIRTUEMART_COUNTRY_AZE="Azerbaijan" COM_VIRTUEMART_COUNTRY_BHS="Bahamas" COM_VIRTUEMART_COUNTRY_BHR="Bahrain" COM_VIRTUEMART_COUNTRY_BGD="Bangladesh" COM_VIRTUEMART_COUNTRY_BRB="Barbados" COM_VIRTUEMART_COUNTRY_BLR="Belarus" COM_VIRTUEMART_COUNTRY_BEL="Belgium" COM_VIRTUEMART_COUNTRY_BLZ="Belize" COM_VIRTUEMART_COUNTRY_BEN="Benin" COM_VIRTUEMART_COUNTRY_BMU="Bermuda" COM_VIRTUEMART_COUNTRY_BTN="Bhutan" COM_VIRTUEMART_COUNTRY_BOL="Bolivia" COM_VIRTUEMART_COUNTRY_BES="Bonaire, Sint Eustatius and Saba" COM_VIRTUEMART_COUNTRY_BIH="Bosnia and Herzegovina" COM_VIRTUEMART_COUNTRY_BWA="Botswana" COM_VIRTUEMART_COUNTRY_BVT="Bouvet Island" COM_VIRTUEMART_COUNTRY_BRA="Brazil" COM_VIRTUEMART_COUNTRY_IOT="British Indian Ocean Territory" COM_VIRTUEMART_COUNTRY_BRN="Brunei Darussalam" COM_VIRTUEMART_COUNTRY_BGR="Bulgaria" COM_VIRTUEMART_COUNTRY_BFA="Burkina Faso" COM_VIRTUEMART_COUNTRY_BDI="Burundi" COM_VIRTUEMART_COUNTRY_KHM="Cambodia" COM_VIRTUEMART_COUNTRY_CMR="Cameroon" COM_VIRTUEMART_COUNTRY_CAN="Canada" COM_VIRTUEMART_COUNTRY_CPV="Cape Verde" COM_VIRTUEMART_COUNTRY_CYM="Cayman Islands" COM_VIRTUEMART_COUNTRY_CAF="Central African Republic" COM_VIRTUEMART_COUNTRY_TCD="Chad" COM_VIRTUEMART_COUNTRY_CHL="Chile" COM_VIRTUEMART_COUNTRY_CHN="China" COM_VIRTUEMART_COUNTRY_CXR="Christmas Island" COM_VIRTUEMART_COUNTRY_CCK="Cocos (Keeling) Islands" COM_VIRTUEMART_COUNTRY_COL="Colombia" COM_VIRTUEMART_COUNTRY_COM="Comoros" COM_VIRTUEMART_COUNTRY_COG="Congo" COM_VIRTUEMART_COUNTRY_COD="Congo, The Democratic Republic of the" COM_VIRTUEMART_COUNTRY_COK="Cook Islands" COM_VIRTUEMART_COUNTRY_CRI="Costa Rica" COM_VIRTUEMART_COUNTRY_CIV="Côte d'Ivoire" COM_VIRTUEMART_COUNTRY_HRV="Croatia" COM_VIRTUEMART_COUNTRY_CUB="Cuba" COM_VIRTUEMART_COUNTRY_CUW="Curaçao" COM_VIRTUEMART_COUNTRY_CYP="Cyprus" COM_VIRTUEMART_COUNTRY_CZE="Czech Republic" COM_VIRTUEMART_COUNTRY_DNK="Denmark" COM_VIRTUEMART_COUNTRY_DGA="Diego Garcia" COM_VIRTUEMART_COUNTRY_DJI="Djibouti" COM_VIRTUEMART_COUNTRY_DMA="Dominica" COM_VIRTUEMART_COUNTRY_DOM="Dominican Republic" COM_VIRTUEMART_COUNTRY_ECU="Ecuador" COM_VIRTUEMART_COUNTRY_EGY="Egypt" COM_VIRTUEMART_COUNTRY_SLV="El Salvador" COM_VIRTUEMART_COUNTRY_GNQ="Equatorial Guinea" COM_VIRTUEMART_COUNTRY_ERI="Eritrea" COM_VIRTUEMART_COUNTRY_EST="Estonia" COM_VIRTUEMART_COUNTRY_ETH="Ethiopia" COM_VIRTUEMART_COUNTRY_FLK="Falkland Islands (Malvinas)" COM_VIRTUEMART_COUNTRY_FRO="Faroe Islands" COM_VIRTUEMART_COUNTRY_FJI="Fiji" COM_VIRTUEMART_COUNTRY_FIN="Finland" COM_VIRTUEMART_COUNTRY_FRA="France" COM_VIRTUEMART_COUNTRY_GUF="French Guiana" COM_VIRTUEMART_COUNTRY_PYF="French Polynesia" COM_VIRTUEMART_COUNTRY_ATF="French Southern Territories" COM_VIRTUEMART_COUNTRY_GAB="Gabon" COM_VIRTUEMART_COUNTRY_GMB="Gambia" COM_VIRTUEMART_COUNTRY_GEO="Georgia" COM_VIRTUEMART_COUNTRY_DEU="Germany" COM_VIRTUEMART_COUNTRY_GHA="Ghana" COM_VIRTUEMART_COUNTRY_GIB="Gibraltar" COM_VIRTUEMART_COUNTRY_GRC="Greece" COM_VIRTUEMART_COUNTRY_GRL="Greenland" COM_VIRTUEMART_COUNTRY_GRD="Grenada" COM_VIRTUEMART_COUNTRY_GLP="Guadeloupe" COM_VIRTUEMART_COUNTRY_GUM="Guam" COM_VIRTUEMART_COUNTRY_GTM="Guatemala" COM_VIRTUEMART_COUNTRY_GGY="Guernsey" COM_VIRTUEMART_COUNTRY_GIN="Guinea" COM_VIRTUEMART_COUNTRY_GNB="Guinea-Bissau" COM_VIRTUEMART_COUNTRY_GUY="Guyana" COM_VIRTUEMART_COUNTRY_HTI="Haiti" COM_VIRTUEMART_COUNTRY_HMD="Heard and McDonald Islands" COM_VIRTUEMART_COUNTRY_HND="Honduras" COM_VIRTUEMART_COUNTRY_HKG="Hong Kong" COM_VIRTUEMART_COUNTRY_HUN="Hungary" COM_VIRTUEMART_COUNTRY_ISL="Iceland" COM_VIRTUEMART_COUNTRY_IND="India" COM_VIRTUEMART_COUNTRY_IDN="Indonesia" COM_VIRTUEMART_COUNTRY_IRN="Iran, Islamic Republic of" COM_VIRTUEMART_COUNTRY_IRQ="Iraq" COM_VIRTUEMART_COUNTRY_IRL="Ireland" COM_VIRTUEMART_COUNTRY_IMN="Isle Of Man" COM_VIRTUEMART_COUNTRY_ISR="Israel" COM_VIRTUEMART_COUNTRY_ITA="Italy" COM_VIRTUEMART_COUNTRY_JAM="Jamaica" COM_VIRTUEMART_COUNTRY_JPN="Japan" COM_VIRTUEMART_COUNTRY_JEY="Jersey" COM_VIRTUEMART_COUNTRY_JOR="Jordan" COM_VIRTUEMART_COUNTRY_KAZ="Kazakhstan" COM_VIRTUEMART_COUNTRY_KEN="Kenya" COM_VIRTUEMART_COUNTRY_KIR="Kiribati" COM_VIRTUEMART_COUNTRY_PRK="Korea, Democratic People's Republic of" COM_VIRTUEMART_COUNTRY_KOR="Korea, Republic of" COM_VIRTUEMART_COUNTRY_KWT="Kuwait" COM_VIRTUEMART_COUNTRY_KGZ="Kyrgyzstan" COM_VIRTUEMART_COUNTRY_LAO="Lao People's Democratic Republic" COM_VIRTUEMART_COUNTRY_LVA="Latvia" COM_VIRTUEMART_COUNTRY_LBN="Lebanon" COM_VIRTUEMART_COUNTRY_LSO="Lesotho" COM_VIRTUEMART_COUNTRY_LBR="Liberia" COM_VIRTUEMART_COUNTRY_LBY="Libya" COM_VIRTUEMART_COUNTRY_LIE="Liechtenstein" COM_VIRTUEMART_COUNTRY_LTU="Lithuania" COM_VIRTUEMART_COUNTRY_LUX="Luxembourg" COM_VIRTUEMART_COUNTRY_MAC="Macau" COM_VIRTUEMART_COUNTRY_MKD="Macedonia, the former Yugoslav Republic of" COM_VIRTUEMART_COUNTRY_MDG="Madagascar" COM_VIRTUEMART_COUNTRY_MWI="Malawi" COM_VIRTUEMART_COUNTRY_MYS="Malaysia" COM_VIRTUEMART_COUNTRY_MDV="Maldives" COM_VIRTUEMART_COUNTRY_MLI="Mali" COM_VIRTUEMART_COUNTRY_MLT="Malta" COM_VIRTUEMART_COUNTRY_MHL="Marshall Islands" COM_VIRTUEMART_COUNTRY_MTQ="Martinique" COM_VIRTUEMART_COUNTRY_MRT="Mauritania" COM_VIRTUEMART_COUNTRY_MUS="Mauritius" COM_VIRTUEMART_COUNTRY_MYT="Mayotte" COM_VIRTUEMART_COUNTRY_MEX="Mexico" COM_VIRTUEMART_COUNTRY_FSM="Micronesia, Federated States of" COM_VIRTUEMART_COUNTRY_MDA="Moldova, Republic of" COM_VIRTUEMART_COUNTRY_MCO="Monaco" COM_VIRTUEMART_COUNTRY_MNG="Mongolia" COM_VIRTUEMART_COUNTRY_MNE="Montenegro" COM_VIRTUEMART_COUNTRY_MSR="Montserrat" COM_VIRTUEMART_COUNTRY_MAR="Morocco" COM_VIRTUEMART_COUNTRY_MOZ="Mozambique" COM_VIRTUEMART_COUNTRY_MMR="Myanmar" COM_VIRTUEMART_COUNTRY_NAM="Namibia" COM_VIRTUEMART_COUNTRY_NRU="Nauru" COM_VIRTUEMART_COUNTRY_NPL="Nepal" COM_VIRTUEMART_COUNTRY_NLD="Netherlands" COM_VIRTUEMART_COUNTRY_NCL="New Caledonia" COM_VIRTUEMART_COUNTRY_NZL="New Zealand" COM_VIRTUEMART_COUNTRY_NIC="Nicaragua" COM_VIRTUEMART_COUNTRY_NER="Niger" COM_VIRTUEMART_COUNTRY_NGA="Nigeria" COM_VIRTUEMART_COUNTRY_NIU="Niue" COM_VIRTUEMART_COUNTRY_NFK="Norfolk Island" COM_VIRTUEMART_COUNTRY_MNP="Northern Mariana Islands" COM_VIRTUEMART_COUNTRY_NOR="Norway" COM_VIRTUEMART_COUNTRY_OMN="Oman" COM_VIRTUEMART_COUNTRY_PAK="Pakistan" COM_VIRTUEMART_COUNTRY_PLW="Palau" COM_VIRTUEMART_COUNTRY_PSE="Palestinian Territory, Occupied" COM_VIRTUEMART_COUNTRY_PAN="Panama" COM_VIRTUEMART_COUNTRY_PNG="Papua New Guinea" COM_VIRTUEMART_COUNTRY_PRY="Paraguay" COM_VIRTUEMART_COUNTRY_PER="Peru" COM_VIRTUEMART_COUNTRY_PHL="Philippines" COM_VIRTUEMART_COUNTRY_PCN="Pitcairn" COM_VIRTUEMART_COUNTRY_POL="Poland" COM_VIRTUEMART_COUNTRY_PRT="Portugal" COM_VIRTUEMART_COUNTRY_PRI="Puerto Rico" COM_VIRTUEMART_COUNTRY_QAT="Qatar" COM_VIRTUEMART_COUNTRY_REU="Réunion" COM_VIRTUEMART_COUNTRY_ROU="Romania" COM_VIRTUEMART_COUNTRY_RUS="Russian Federation" COM_VIRTUEMART_COUNTRY_RWA="Rwanda" COM_VIRTUEMART_COUNTRY_BLM="Saint Barthélemy" COM_VIRTUEMART_COUNTRY_SHN="Saint Helena" COM_VIRTUEMART_COUNTRY_KNA="Saint Kitts and Nevis" COM_VIRTUEMART_COUNTRY_LCA="Saint Lucia" COM_VIRTUEMART_COUNTRY_MAF="Saint Martin (French part)" COM_VIRTUEMART_COUNTRY_SPM="Saint Pierre and Miquelon" COM_VIRTUEMART_COUNTRY_VCT="Saint Vincent and the Grenadines" COM_VIRTUEMART_COUNTRY_WSM="Samoa" COM_VIRTUEMART_COUNTRY_SMR="San Marino" COM_VIRTUEMART_COUNTRY_STP="Sao Tome And Principe" COM_VIRTUEMART_COUNTRY_SAU="Saudi Arabia" COM_VIRTUEMART_COUNTRY_SEN="Senegal" COM_VIRTUEMART_COUNTRY_SRB="Serbia" COM_VIRTUEMART_COUNTRY_SYC="Seychelles" COM_VIRTUEMART_COUNTRY_SLE="Sierra Leone" COM_VIRTUEMART_COUNTRY_SGP="Singapore" COM_VIRTUEMART_COUNTRY_SXM="Sint Maarten (Dutch part)" COM_VIRTUEMART_COUNTRY_SVK="Slovakia" COM_VIRTUEMART_COUNTRY_SVN="Slovenia" COM_VIRTUEMART_COUNTRY_SLB="Solomon Islands" COM_VIRTUEMART_COUNTRY_SOM="Somalia" COM_VIRTUEMART_COUNTRY_ZAF="South Africa" COM_VIRTUEMART_COUNTRY_SGS="South Georgia and the South Sandwich Islands" COM_VIRTUEMART_COUNTRY_SSD="South Sudan" COM_VIRTUEMART_COUNTRY_ESP="Spain" COM_VIRTUEMART_COUNTRY_LKA="Sri Lanka" COM_VIRTUEMART_COUNTRY_SDN="Sudan" COM_VIRTUEMART_COUNTRY_SUR="Suriname" COM_VIRTUEMART_COUNTRY_SJM="Svalbard and Jan Mayen" COM_VIRTUEMART_COUNTRY_SWZ="Swaziland" COM_VIRTUEMART_COUNTRY_SWE="Sweden" COM_VIRTUEMART_COUNTRY_CHE="Switzerland" COM_VIRTUEMART_COUNTRY_SYR="Syrian Arab Republic" COM_VIRTUEMART_COUNTRY_TWN="Taiwan" COM_VIRTUEMART_COUNTRY_TJK="Tajikistan" COM_VIRTUEMART_COUNTRY_TZA="Tanzania, United Republic of" COM_VIRTUEMART_COUNTRY_THA="Thailand" COM_VIRTUEMART_COUNTRY_TLS="Timor-Leste" COM_VIRTUEMART_COUNTRY_TGO="Togo" COM_VIRTUEMART_COUNTRY_TKL="Tokelau" COM_VIRTUEMART_COUNTRY_TON="Tonga" COM_VIRTUEMART_COUNTRY_TTO="Trinidad and Tobago" COM_VIRTUEMART_COUNTRY_TAA="Tristan da Cunha" COM_VIRTUEMART_COUNTRY_TUN="Tunisia" COM_VIRTUEMART_COUNTRY_TUR="Turkey" COM_VIRTUEMART_COUNTRY_TKM="Turkmenistan" COM_VIRTUEMART_COUNTRY_TCA="Turks and Caicos Islands" COM_VIRTUEMART_COUNTRY_TUV="Tuvalu" COM_VIRTUEMART_COUNTRY_UGA="Uganda" COM_VIRTUEMART_COUNTRY_UKR="Ukraine" COM_VIRTUEMART_COUNTRY_ARE="United Arab Emirates" COM_VIRTUEMART_COUNTRY_GBR="United Kingdom" COM_VIRTUEMART_COUNTRY_USA="United States" COM_VIRTUEMART_COUNTRY_UMI="United States Minor Outlying Islands" COM_VIRTUEMART_COUNTRY_URY="Uruguay" COM_VIRTUEMART_COUNTRY_UZB="Uzbekistan" COM_VIRTUEMART_COUNTRY_VUT="Vanuatu" COM_VIRTUEMART_COUNTRY_VAT="Vatican City State (Holy See)" COM_VIRTUEMART_COUNTRY_VEN="Venezuela" COM_VIRTUEMART_COUNTRY_VNM="Viet Nam" COM_VIRTUEMART_COUNTRY_VGB="Virgin Islands, British" COM_VIRTUEMART_COUNTRY_VIR="Virgin Islands, U.S." COM_VIRTUEMART_COUNTRY_WLF="Wallis and Futuna" COM_VIRTUEMART_COUNTRY_ESH="Western Sahara" COM_VIRTUEMART_COUNTRY_YEM="Yemen" COM_VIRTUEMART_COUNTRY_ZMB="Zambia" COM_VIRTUEMART_COUNTRY_ZWE="Zimbabwe"language/en-GB/en-GB.com_virtuemart_help.ini000066600000011227151374526160014700 0ustar00; Virtuemart! Project ; Copyright (C) 2011 Virtuemart Team. All rights reserved. ; License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 - No BOM COM_VIRTUEMART_HELP_CATEGORY="http://docs.virtuemart.net/home/17-products-menu/39-product-categories" COM_VIRTUEMART_HELP_CATEGORY_EDIT="http://docs.virtuemart.net/home/17-products-menu/27-category-edit" COM_VIRTUEMART_HELP_PRODUCT="http://docs.virtuemart.net/home/17-products-menu/33-product" COM_VIRTUEMART_HELP_PRODUCT_EDIT="http://docs.virtuemart.net/home/17-products-menu/28-product-edit" COM_VIRTUEMART_HELP_CUSTOM="http://docs.virtuemart.net/home/17-products-menu/38-custom-edit" COM_VIRTUEMART_HELP_CUSTOM_EDIT="http://docs.virtuemart.net/home/17-products-menu/38-custom-edit" COM_VIRTUEMART_HELP_INVENTORY="http://docs.virtuemart.net/home/17-products-menu/29-inventory" COM_VIRTUEMART_HELP_CALC="http://docs.virtuemart.net/home/17-products-menu/30-taxes-and-calculation-rules" COM_VIRTUEMART_HELP_CALC_EDIT="http://docs.virtuemart.net/home/17-products-menu/36-calc-edit" COM_VIRTUEMART_HELP_RATINGS="http://docs.virtuemart.net/home/17-products-menu/31-reviews-and-ratings" COM_VIRTUEMART_HELP_RATINGS_LISTREVIEWS="http://docs.virtuemart.net/home/17-products-menu/40-list-reviews-and-ratings" COM_VIRTUEMART_HELP_RATINGS_EDIT_REVIEW="http://docs.virtuemart.net/home/17-products-menu/41-edit-review-and-rating" COM_VIRTUEMART_HELP_ORDERS="http://docs.virtuemart.net/home/18-order-shoppers-menu/42-orders" COM_VIRTUEMART_HELP_ORDERS_EDIT="http://docs.virtuemart.net/home/18-order-shoppers-menu/43-edit-order" COM_VIRTUEMART_HELP_REPORT="http://docs.virtuemart.net/home/18-order-shoppers-menu/44-revenue-report" COM_VIRTUEMART_HELP_USER="http://docs.virtuemart.net/home/18-order-shoppers-menu/45-shoppers" COM_VIRTUEMART_HELP_USER_EDIT="http://docs.virtuemart.net/home/18-order-shoppers-menu/46-edit-shopper" COM_VIRTUEMART_HELP_SHOPPERGROUP="http://docs.virtuemart.net/home/18-order-shoppers-menu/47-shopper-groups" COM_VIRTUEMART_HELP_SHOPPERGROUP_EDIT="http://docs.virtuemart.net/home/18-order-shoppers-menu/48-edit-shopper-group" COM_VIRTUEMART_HELP_COUPON="http://docs.virtuemart.net/home/18-order-shoppers-menu/49-coupons" COM_VIRTUEMART_HELP_COUPON_EDIT="http://docs.virtuemart.net/home/18-order-shoppers-menu/50-edit-coupon" COM_VIRTUEMART_HELP_MANUFACTURER="http://docs.virtuemart.net/home/19-manufacturers-menu/51-manufacturers" COM_VIRTUEMART_HELP_MANUFACTURER_EDIT="http://docs.virtuemart.net/home/19-manufacturers-menu/52-edit-manufacturer" COM_VIRTUEMART_HELP_MANUFACTURERCATEGORIES="http://docs.virtuemart.net/home/19-manufacturers-menu/53-manufacturer-categories" COM_VIRTUEMART_HELP_MANUFACTURERCATEGORIES_EDIT="http://docs.virtuemart.net/home/19-manufacturers-menu/72-edit-manufacturer" COM_VIRTUEMART_HELP_USER_EDITSHOP="http://docs.virtuemart.net/home/20-shop-menu/55-shop" COM_VIRTUEMART_HELP_MEDIA="http://docs.virtuemart.net/home/20-shop-menu/56-media-files" COM_VIRTUEMART_HELP_MEDIA_EDIT="http://docs.virtuemart.net/home/20-shop-menu/57-edit-media-file" COM_VIRTUEMART_HELP_SHIPMENTMETHOD="http://docs.virtuemart.net/home/20-shop-menu/58-shipment-methods" COM_VIRTUEMART_HELP_SHIPMENTMETHOD_EDIT="http://docs.virtuemart.net/home/20-shop-menu/59-edit-shipment-method" COM_VIRTUEMART_HELP_PAYMENTMETHOD="http://docs.virtuemart.net/home/20-shop-menu/60-payment-methods" COM_VIRTUEMART_HELP_PAYMENTMETHOD_EDIT="http://docs.virtuemart.net/home/20-shop-menu/61-edit-payment-method" COM_VIRTUEMART_HELP_CONFIG="http://docs.virtuemart.net/home/21-configuration-menu/62-configuration" COM_VIRTUEMART_HELP_USERFIELDS="http://docs.virtuemart.net/home/21-configuration-menu/63-shopper-fields" COM_VIRTUEMART_HELP_USERFIELDS_EDIT="http://docs.virtuemart.net/home/21-configuration-menu/64-edit-shopper-field" COM_VIRTUEMART_HELP_ORDERSTATUS="http://docs.virtuemart.net/home/21-configuration-menu/65-order-statuses" COM_VIRTUEMART_HELP_ORDERSTATUS_EDIT="http://docs.virtuemart.net/home/21-configuration-menu/66-edit-order-status" COM_VIRTUEMART_HELP_CURRENCY="http://docs.virtuemart.net/home/21-configuration-menu/67-currencies" COM_VIRTUEMART_HELP_CURRENCY_EDIT="http://docs.virtuemart.net/home/21-configuration-menu/68-edit-currency" COM_VIRTUEMART_HELP_COUNTRY="http://docs.virtuemart.net/home/21-configuration-menu/69-countries" COM_VIRTUEMART_HELP_COUNTRY_EDIT="http://docs.virtuemart.net/home/21-configuration-menu/71-edit-country" COM_VIRTUEMART_HELP_STATE="http://docs.virtuemart.net/home/21-configuration-menu/state" COM_VIRTUEMART_HELP_STATE_EDIT="http://docs.virtuemart.net/home/21-configuration-menu/state-edit" COM_VIRTUEMART_HELP_UPDATESMIGRATION="http://docs.virtuemart.net/home/22-tools-menu/70-tools-migration" language/en-GB/en-GB.com_virtuemart_config.ini000066600000123123151374526160015214 0ustar00; VirtueMart Project ; Copyright (C) 2008 VirtueMart, 2009 VirtueMart Team. All rights reserved. ; License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 - No BOM ; Config COM_VIRTUEMART_ADMIN_CFG_ACCOUNT_ACTIVATION="New account activation necessary?" COM_VIRTUEMART_ADMIN_CFG_ADDTOCART_POPUP="Display modal popup upon 'Add to cart'" COM_VIRTUEMART_ADMIN_CFG_ADDTOCART_POPUP_EXPLAIN="If checked, you see the modal 'facebox' on adding a product to cart else you are redirect to the cart" COM_VIRTUEMART_ADMIN_CFG_AGREE_TERMS_ONORDER="Must agree to Terms of Service on EVERY ORDER?" COM_VIRTUEMART_ADMIN_CFG_AGREE_TERMS_ONORDER_EXPLAIN="Check if you want a shopper to agree to your terms of service on EVERY ORDER (before placing the order)." COM_VIRTUEMART_ADMIN_CFG_ALLOW_REGISTRATION="User registration allowed?" COM_VIRTUEMART_ADMIN_CFG_ASSETS_GENERAL_PATH="General Assets URL" COM_VIRTUEMART_ADMIN_CFG_ASSETS_GENERAL_PATH_EXPLAIN="This is usually the URL to the asset folder in com_virtuemart (relative to joomla root, do not add http or domain)" COM_VIRTUEMART_ADMIN_CFG_AUTOMATIC_PAYMENT="Enable Automatic Selected Payment?" COM_VIRTUEMART_ADMIN_CFG_AUTOMATIC_PAYMENT_EXPLAIN="When Automatic Selected Payment is enabled, if only one payment method is available, then it is preselected.
          If Automatic Selected Payment is NOT selected, even when there is only one payment method is available, a new page is loaded. It is usefull if the payment method must validate payment data entered by the user." COM_VIRTUEMART_ADMIN_CFG_AUTOMATIC_SHIPMENT="Enable Automatic Selected Shipment?" COM_VIRTUEMART_ADMIN_CFG_AUTOMATIC_SHIPMENT_EXPLAIN="When Automatic Selected Shipment is enabled, if only one shipment method is available, then it is preselected.
          If Automatic Selected Shipment is NOT selected, even when there is only one shipment method is available, a new page is loaded. It is usefull if the shipment method must validate shipment data entered by the user." COM_VIRTUEMART_ADMIN_CFG_CATEGORIES_PER_ROW="Default number of categories in a row" COM_VIRTUEMART_ADMIN_CFG_CATEGORIES_PER_ROW_EXPLAIN="This defines the number of categories in a row.
          " COM_VIRTUEMART_ADMIN_CFG_CATEGORY_LAYOUT="Category Layout" COM_VIRTUEMART_ADMIN_CFG_CATEGORY_LAYOUT_EXPLAIN="This is the default layout for browsing categories." COM_VIRTUEMART_ADMIN_CFG_CATEGORY_TEMPLATE="Category Template" COM_VIRTUEMART_ADMIN_CFG_CATEGORY_TEMPLATE_EXPLAIN="This defines the default category template for displaying products in a category.
          " COM_VIRTUEMART_ADMIN_CFG_CAT_FEED_SETTINGS="Category Feed Settings" COM_VIRTUEMART_ADMIN_CFG_CHECKOUTTAB="Checkout" COM_VIRTUEMART_ADMIN_CFG_CHECKOUT_SETTINGS="Checkout Settings" COM_VIRTUEMART_ADMIN_CFG_DATEFORMAT="Shop date format" COM_VIRTUEMART_ADMIN_CFG_DATEFORMAT_EXPLAIN="The default date format used by the shop. Ex: %m/%d/%y." COM_VIRTUEMART_ADMIN_CFG_DEBUG="DEBUG?" COM_VIRTUEMART_ADMIN_CFG_DEBUG_EXPLAIN="Turns on the debug output. This causes the DEBUGPAGE to be displayed at the bottom of each page. Very helpful during shop development since it shows the carts contents, form field values, etc." COM_VIRTUEMART_ADMIN_CFG_DEBUG_IP_ADDRESS="Client IP address" COM_VIRTUEMART_ADMIN_CFG_DEBUG_IP_ADDRESS_EXPLAIN="If you enable this option and enter an IP address here, then debug output will be enabled ONLY for this client IP address. Other clients will not see the debugging output." COM_VIRTUEMART_ADMIN_CFG_DOWNLOADABLETAB="Downloads" COM_VIRTUEMART_ADMIN_CFG_DOWNLOADROOT="Download Path" COM_VIRTUEMART_ADMIN_CFG_DOWNLOADROOT_EXPLAIN="The physical path to the files for the shopper download. (trailing slash at the end!)
          " COM_VIRTUEMART_ADMIN_CFG_DOWNLOAD_EXPIRE="Download Expire" COM_VIRTUEMART_ADMIN_CFG_DOWNLOAD_EXPIRE_EXPLAIN="Sets the time range in seconds in which the download is enabled for the shopper." COM_VIRTUEMART_ADMIN_CFG_DOWNLOAD_KEEP_STOCKLEVEL="Keep Product Stock Level on Purchase?" COM_VIRTUEMART_ADMIN_CFG_DOWNLOAD_KEEP_STOCKLEVEL_TIP="When enabled, the stock level for a downloadable product is not lowered although it was purchased by shoppers." COM_VIRTUEMART_ADMIN_CFG_DOWNLOAD_MAX="Download Maximum" COM_VIRTUEMART_ADMIN_CFG_DOWNLOAD_MAX_EXPLAIN="Sets the number of downloads which can be made with one Download-ID, (for one order)" COM_VIRTUEMART_ADMIN_CFG_DOWNLOAD_SETTINGS="Download Settings" COM_VIRTUEMART_ADMIN_CFG_DYNAMIC_THUMBNAIL_RESIZING="Enable Dynamic Thumbnail Resizing?" COM_VIRTUEMART_ADMIN_CFG_DYNAMIC_THUMBNAIL_RESIZING_TIP="If checked, you enable dynamic Image Resizing. This means that all Thumbnail Images are resized to fit the Sizes you provide below" COM_VIRTUEMART_ADMIN_CFG_ENABLE_CONTENT_PLUGIN="Enable Joomla Plugin" COM_VIRTUEMART_ADMIN_CFG_ENABLE_CONTENT_PLUGIN_EXPLAIN="Enable Joomla content Plugin for the Product description. Should not be checked if you don't use Joomla content plugin" COM_VIRTUEMART_ADMIN_CFG_ENABLE_DEBUG="Enable debugging messages" COM_VIRTUEMART_ADMIN_CFG_ENABLE_DEBUG_ADMIN="Only for administrators" COM_VIRTUEMART_ADMIN_CFG_ENABLE_DEBUG_ALL="For all" COM_VIRTUEMART_ADMIN_CFG_ENABLE_DEBUG_EXPLAIN="Select to who the debug message are reported" COM_VIRTUEMART_ADMIN_CFG_ENABLE_DEBUG_NONE="No debug" COM_VIRTUEMART_ADMIN_CFG_ENABLE_DOWNLOADS="Enable Downloads" COM_VIRTUEMART_ADMIN_CFG_ENABLE_DOWNLOADS_EXPLAIN="Check to enable the download capability. Only if you want to sell downloadable goods." COM_VIRTUEMART_ADMIN_CFG_ENABLE_ENGLISH="Use english as fallback for untranslated strings" COM_VIRTUEMART_ADMIN_CFG_ENABLE_ENGLISH_EXPLAIN="Load the english language file, to avoid untranslated strings to be displayed as keys" COM_VIRTUEMART_ADMIN_CFG_ENABLE_GOOGLE_JQUERY="Use external google jQuery library" COM_VIRTUEMART_ADMIN_CFG_ENABLE_GOOGLE_JQUERY_TIP="Using the external google library improves page speed" COM_VIRTUEMART_ADMIN_CFG_ENABLE_MULTIX="Enable Multivendor (experimental only for developers)" COM_VIRTUEMART_ADMIN_CFG_ENABLE_MULTIX_ADMIN="administrated multivendor" COM_VIRTUEMART_ADMIN_CFG_ENABLE_MULTIX_EXPLAIN="Enable this function only, when you can code php and know what to do, this is just an option to enable multivendor for customisation." COM_VIRTUEMART_ADMIN_CFG_ENABLE_MULTIX_NONE="none" COM_VIRTUEMART_ADMIN_CFG_ENABLE_PDF_INVOICES="Create and send pdf invoices" COM_VIRTUEMART_ADMIN_CFG_ENABLE_PDF_INVOICES_EXPLAIN="For this feature it is important that you set your safe path correctly" COM_VIRTUEMART_ADMIN_CFG_ERRORPAGE="ERRORPAGE" COM_VIRTUEMART_ADMIN_CFG_ERRORPAGE_EXPLAIN="This is the default page for displaying error messages." COM_VIRTUEMART_ADMIN_CFG_EXPLAIN="Be aware that a session cache is active for the configuration and has a life time of 500 minutes. Your changes take up to 5 minutes to affect all sessions, including your session. To generate a new session, just logout, and login again." COM_VIRTUEMART_ADMIN_CFG_FEAT_PROD_ROWS="Rows for featured products" COM_VIRTUEMART_ADMIN_CFG_FEAT_PROD_ROWS_EXPL="This defines the number of rows for featured products." COM_VIRTUEMART_ADMIN_CFG_FEED_DESCRIPTION_TYPE="Type of Product Description" COM_VIRTUEMART_ADMIN_CFG_FEED_DESCRIPTION_TYPE_TIP="Choose the type of product description that will be included with the feed." COM_VIRTUEMART_ADMIN_CFG_FEED_ENABLE="Enable Product Feeds" COM_VIRTUEMART_ADMIN_CFG_FEED_ENABLE_TIP="If enabled, shoppers can subscribe to a feed that provides the products of all certain categories in your shop." COM_VIRTUEMART_ADMIN_CFG_FEED_FEATURED_ENABLE="Enable Featured Product Feeds" COM_VIRTUEMART_ADMIN_CFG_FEED_FEATURED_ENABLE_TIP="If enabled, shoppers can subscribe to a feed that provides the Featured products in your shop." COM_VIRTUEMART_ADMIN_CFG_FEED_FEATURED_NB="Number of featured products" COM_VIRTUEMART_ADMIN_CFG_FEED_FEATURED_NB_TIP="Number of featured products to send to the feed" COM_VIRTUEMART_ADMIN_CFG_FEED_LATEST_ENABLE="Enable Latest Product Feeds" COM_VIRTUEMART_ADMIN_CFG_FEED_LATEST_ENABLE_TIP="If enabled, shoppers can subscribe to a feed that provides the latest products in your shop." COM_VIRTUEMART_ADMIN_CFG_FEED_LATEST_NB="Number of latest products" COM_VIRTUEMART_ADMIN_CFG_FEED_LATEST_NB_TIP="Number of latest products to send to the feed" COM_VIRTUEMART_ADMIN_CFG_FEED_LIMITTEXT="Limit the Description?" COM_VIRTUEMART_ADMIN_CFG_FEED_MAX_TEXT_LENGTH="Maximum Description Length" COM_VIRTUEMART_ADMIN_CFG_FEED_SHOWDESC="Include the Product Description?" COM_VIRTUEMART_ADMIN_CFG_FEED_SHOWDESC_TIP="If enabled, the Product Description will be added to the feed item" COM_VIRTUEMART_ADMIN_CFG_FEED_SHOWIMAGES="Include Images into the feed?" COM_VIRTUEMART_ADMIN_CFG_FEED_SHOWIMAGES_TIP="If enabled, the thumb images will be included with the feed item." COM_VIRTUEMART_ADMIN_CFG_FEED_SHOWPRICES="Include the Product Price into the description?" COM_VIRTUEMART_ADMIN_CFG_FEED_SHOWPRICES_TIP="If enabled, the standard Product Price will be added to the Product Description" COM_VIRTUEMART_ADMIN_CFG_FEED_TOPTEN_ENABLE="Enable Top Ten Product Feeds" COM_VIRTUEMART_ADMIN_CFG_FEED_TOPTEN_ENABLE_TIP="If enabled, shoppers can subscribe to a feed that provides the Top Ten products in your shop." COM_VIRTUEMART_ADMIN_CFG_FEED_TOPTEN_NB="Number of topten products" COM_VIRTUEMART_ADMIN_CFG_FEED_TOPTEN_NB_TIP="Number of topten products to send to the feed" COM_VIRTUEMART_ADMIN_CFG_FRONTENDAMDIN="Allow Frontend-Administration for non-Backend Users?" COM_VIRTUEMART_ADMIN_CFG_FRONTENDAMDIN_EXPLAIN="With this setting you can enable the Frontend Administration for users who" COM_VIRTUEMART_ADMIN_CFG_FRONT_CSS="Using the VirtueMart CSS" COM_VIRTUEMART_ADMIN_CFG_FRONT_CSS_JS_SETTINGS="Activate Css Styles & Javascripts" COM_VIRTUEMART_ADMIN_CFG_FRONT_CSS_JS_SETTINGS_TIP="Inactivate some of this script requires the installation of the replacement script in your template.
          In other case your shop is no longer functional " COM_VIRTUEMART_ADMIN_CFG_FRONT_CSS_TIP="Using the original Virtuemart CSS design" COM_VIRTUEMART_ADMIN_CFG_FRONT_JCHOSEN="Use jQuery chosen for dropdowns in FE" COM_VIRTUEMART_ADMIN_CFG_FRONT_JCHOSEN_TIP="Usually you can activate this, but some templates may have already their own solution" COM_VIRTUEMART_ADMIN_CFG_FRONT_JPRICE="Using the product Scripts" COM_VIRTUEMART_ADMIN_CFG_FRONT_JPRICE_TIP="These scripts are required for the dynamic operation of the basket and price!
          You loose all the standard inter-activity by turning off the script" COM_VIRTUEMART_ADMIN_CFG_FRONT_JQUERY="Using the VirtueMart jQuery" COM_VIRTUEMART_ADMIN_CFG_FRONT_JQUERY_TIP="To address some issues between VirtueMart and Templates / component / modules, you can disable the jQuery internal library " COM_VIRTUEMART_ADMIN_CFG_FRONT_JSITE="Using the Script ajax Countries / Regions" COM_VIRTUEMART_ADMIN_CFG_FRONT_JSITE_TIP="Dynamic update Your country / region will not work without this script.
          Please, verify that this does not affect the operation of your site" COM_VIRTUEMART_ADMIN_CFG_GD_MISSING="Dynamic Image Resizing is not available. The GD library seems to be missing" COM_VIRTUEMART_ADMIN_CFG_HOMEPAGE_SETTINGS="VirtueMart Home Page Settings" COM_VIRTUEMART_ADMIN_CFG_HOME_FEED_SETTINGS="Home Page Feed Settings" COM_VIRTUEMART_ADMIN_CFG_JOOMLA_TEMPLATE_DEFAULT="Use joomla default" COM_VIRTUEMART_ADMIN_CFG_LANGFIX="Language Javascript Fix" COM_VIRTUEMART_ADMIN_CFG_LANGFIX_EXPLAIN="Activate the language Javascript Fix for some Joomla version" COM_VIRTUEMART_ADMIN_CFG_LAT_PROD_ROWS="Rows for latest" COM_VIRTUEMART_ADMIN_CFG_LAT_PROD_ROWS_EXPL="This defines the number of rows for latest products." COM_VIRTUEMART_ADMIN_CFG_MAIL_FORMAT="Order-mail format" COM_VIRTUEMART_ADMIN_CFG_MAIL_FORMAT_EXPLAIN="This determines how your order confirmation emails are set up" COM_VIRTUEMART_ADMIN_CFG_MAIL_FORMAT_HTML="HTML mail" COM_VIRTUEMART_ADMIN_CFG_MAIL_FORMAT_TEXT="Text mail" COM_VIRTUEMART_ADMIN_CFG_MAIL_FROM_RECIPIENT="Receive vendor mail with recipient address" COM_VIRTUEMART_ADMIN_CFG_MAIL_FROM_RECIPIENT_EXPLAIN="Usually the vendor receives the mail from joomla system email address. If you set this, you'll receive the mail coming as recipient address. Set this option if you're really sure what you do! If in doubt, do not switch on this parameter." COM_VIRTUEMART_ADMIN_CFG_MAIL_FROM_SETSENDER="Recipient address set as Sender, not ReplyTo" COM_VIRTUEMART_ADMIN_CFG_MAIL_FROM_SETSENDER_EXPLAIN="If set, the mail address of the recipient is set as Sender. If not, the recipient is set as reply address. Set this option if you're really sure what you do! If in doubt, do not switch on this parameter." COM_VIRTUEMART_ADMIN_CFG_MAIL_USEVENDOR="Use the vendor email address" COM_VIRTUEMART_ADMIN_CFG_MAIL_USEVENDOR_EXPLAIN="You can use the vendor email address or the one set in the joomla configuration. This setting depends on your selected mailer." COM_VIRTUEMART_ADMIN_CFG_MAIN_LAYOUT="Layout for your home page" COM_VIRTUEMART_ADMIN_CFG_MAIN_LAYOUT_TIP="This is the default layout for your homepage" COM_VIRTUEMART_ADMIN_CFG_MANUFACTURER_PER_ROW="Default number of manufacturer in a row" COM_VIRTUEMART_ADMIN_CFG_MANUFACTURER_PER_ROW_EXPLAIN="This defines the number of manufacturer in a row.
          " COM_VIRTUEMART_ADMIN_CFG_MAX_TEXT_LENGTH_TIP="This is the maximum length of the product description for each feed item. If no value is set, the complete description is sent." COM_VIRTUEMART_ADMIN_CFG_MEDIA_CATEGORY_PATH="Category Media URL" COM_VIRTUEMART_ADMIN_CFG_MEDIA_CATEGORY_PATH_EXPLAIN="URL to the images of the categories (relative to joomla root, do not add http or domain)" COM_VIRTUEMART_ADMIN_CFG_MEDIA_FORSALE_PATH="Safe Path" COM_VIRTUEMART_ADMIN_CFG_MEDIA_FORSALE_PATH_EXPLAIN="Path for downloadable goods for sale and your invoices. This path is meant from your file root, not Joomla root. Attention - you must enter an absolute path here and it should (not must) be outside of your domain directory (i.e. httpdocs)" COM_VIRTUEMART_ADMIN_CFG_MEDIA_FORSALE_PATH_THUMB="Thumbnail url for media to sell" COM_VIRTUEMART_ADMIN_CFG_MEDIA_FORSALE_PATH_THUMB_EXPLAIN="The idea is that you can represent your downloadable goods by a self chosen thumbnail, this is usually a normal URL." COM_VIRTUEMART_ADMIN_CFG_MEDIA_MANUFACTURER_PATH="Manufacturer Media URL" COM_VIRTUEMART_ADMIN_CFG_MEDIA_MANUFACTURER_PATH_EXPLAIN="URL to the images of the manufacturers" COM_VIRTUEMART_ADMIN_CFG_MEDIA_PRODUCT_PATH="Product Media URL" COM_VIRTUEMART_ADMIN_CFG_MEDIA_PRODUCT_PATH_EXPLAIN="URL to the images of the products (relative to joomla root, do not add http or domain)" COM_VIRTUEMART_ADMIN_CFG_MEDIA_TITLE="Media Files Settings" COM_VIRTUEMART_ADMIN_CFG_MEDIA_VENDOR_PATH="Vendor Media URL" COM_VIRTUEMART_ADMIN_CFG_MEDIA_VENDOR_PATH_EXPLAIN="URL to the images of the vendors (relative to joomla root, do not add http or domain)" COM_VIRTUEMART_ADMIN_CFG_MORE_CORE_SETTINGS="Core Settings" COM_VIRTUEMART_ADMIN_CFG_MULTILANGUE="Multilingual shop" COM_VIRTUEMART_ADMIN_CFG_MULTILANGUE_EXPLAIN="Activate the multi-language translation system" COM_VIRTUEMART_ADMIN_CFG_NOIMAGEFOUND="'no image found' image" COM_VIRTUEMART_ADMIN_CFG_NOIMAGEFOUND_EXPLAIN="This means that there is no image found at the given path" COM_VIRTUEMART_ADMIN_CFG_NOIMAGEPAGE="'no image' image" COM_VIRTUEMART_ADMIN_CFG_NOIMAGEPAGE_EXPLAIN="This image will be shown when no product image is available." COM_VIRTUEMART_ADMIN_CFG_ORDER_DISABLE_DOWNLOADS="Order Status which disables downloads" COM_VIRTUEMART_ADMIN_CFG_ORDER_DISABLE_DOWNLOADS_EXPLAIN="Sets the order status at which the download is disabled for the shopper." COM_VIRTUEMART_ADMIN_CFG_ORDER_ENABLE_DOWNLOADS="Order Status which enables download" COM_VIRTUEMART_ADMIN_CFG_ORDER_ENABLE_DOWNLOADS_EXPLAIN="Select the order status at which the shopper is notified about the download via e-mail." COM_VIRTUEMART_ADMIN_CFG_PAGINATION_SEQUENCE="Set the pagination sequence for the List Box" COM_VIRTUEMART_ADMIN_CFG_PDF_BUTTON="PDF Button" COM_VIRTUEMART_ADMIN_CFG_PDF_BUTTON_EXPLAIN="Show or Hide the PDF - Button in the Shop" COM_VIRTUEMART_ADMIN_CFG_POOS_DISABLE_ADD="Displays 'Notify Me' instead of 'Add To Cart' button" COM_VIRTUEMART_ADMIN_CFG_POOS_DISABLE_IT="Do not Display Product" COM_VIRTUEMART_ADMIN_CFG_POOS_DISABLE_IT_CHILDREN="Do not Display Product, if child products also out of stock" COM_VIRTUEMART_ADMIN_CFG_POOS_NONE="Products Out of Stock are orderable, no special action" COM_VIRTUEMART_ADMIN_CFG_POOS_RISE_AVATIME="Products Out of Stock are orderable, and the field 'Availability' below is displayed" COM_VIRTUEMART_ADMIN_CFG_PRICES="Show Following Prices" COM_VIRTUEMART_ADMIN_CFG_PRICES_INCLUDE_TAX="Show Prices including tax?" COM_VIRTUEMART_ADMIN_CFG_PRICES_LABEL="Show Price" COM_VIRTUEMART_ADMIN_CFG_PRICES_ROUNDING="Rounding Digits" COM_VIRTUEMART_ADMIN_CFG_PRICES_TEXT="Show Label" COM_VIRTUEMART_ADMIN_CFG_PRICE_ACCESS_LEVEL="Membergroup to show prices to" COM_VIRTUEMART_ADMIN_CFG_PRICE_ACCESS_LEVEL_TIP="The selected membergroup and all groups with higher permissions will be able to see the product prices" COM_VIRTUEMART_ADMIN_CFG_PRICE_ASKPRICE="Show call for price, when the price is empty" COM_VIRTUEMART_ADMIN_CFG_PRICE_ASKPRICE_TIP="For this function you must enable 'Allow ask questions'. This gives the user the possibility to ask you for a price, when you dont like to publish it" COM_VIRTUEMART_ADMIN_CFG_PRICE_BASEPRICE="Baseprice" COM_VIRTUEMART_ADMIN_CFG_PRICE_BASEPRICE_EXPLAIN="Depending on where you do your profit/margin calculation it is either your cost price or your calculated price. In the frontend, this price is only displayed to the store administrator." COM_VIRTUEMART_ADMIN_CFG_PRICE_BASEPRICE_VAR="New baseprice modified by chosen product variant" COM_VIRTUEMART_ADMIN_CFG_PRICE_BASEPRICE_VAR_EXPLAIN="The baseprice gets modified by the chosen product variant. In the frontend, this price is only displayed to the store administrator." COM_VIRTUEMART_ADMIN_CFG_PRICE_BASEPRICE_WTAX="Baseprice with Tax, but without discounts" COM_VIRTUEMART_ADMIN_CFG_PRICE_BASEPRICE_WTAX_EXPLAIN="useful to show the old price without discount" COM_VIRTUEMART_ADMIN_CFG_PRICE_CONFIGURATION="Price Configuration" COM_VIRTUEMART_ADMIN_CFG_PRICE_CVARSWT="Display variant prices with tax" COM_VIRTUEMART_ADMIN_CFG_PRICE_CVARSWT_EXPLAIN="You can display the extra prices of variants (for exmample in the dropdown) with or without tax" COM_VIRTUEMART_ADMIN_CFG_PRICE_DISCPRICE_WOTAX="Discounted Price without tax" COM_VIRTUEMART_ADMIN_CFG_PRICE_DISCPRICE_WOTAX_EXPLAIN="This is interesting for Traders and Merchants (B2B)" COM_VIRTUEMART_ADMIN_CFG_PRICE_DISC_AMOUNT="Discount amount" COM_VIRTUEMART_ADMIN_CFG_PRICE_DISC_AMOUNT_EXPLAIN="Useful for the you save X money" COM_VIRTUEMART_ADMIN_CFG_PRICE_RAPPENRUNDUNG="Use for swizz CHF the Rappenrundung" COM_VIRTUEMART_ADMIN_CFG_PRICE_RAPPENRUNDUNG_TIP="only for the swiss, rounds only the display always to 0.00 or 0.05" COM_VIRTUEMART_ADMIN_CFG_PRICE_ROUNDINDIG="Round only display" COM_VIRTUEMART_ADMIN_CFG_PRICE_ROUNDINDIG_TIP="We advice to use this option, the rounding is only done on the display, the results are more accurate" COM_VIRTUEMART_ADMIN_CFG_PRICE_SALESPRICE="Final salesprice" COM_VIRTUEMART_ADMIN_CFG_PRICE_SALESPRICE_EXPLAIN="This is the price the shopper actually has to pay" COM_VIRTUEMART_ADMIN_CFG_PRICE_SALESPRICE_WD="Salesprice with discount, but without override" COM_VIRTUEMART_ADMIN_CFG_PRICE_SALESPRICE_WD_EXPLAIN="This is the same as the salesprice, except you used the product specific override option" COM_VIRTUEMART_ADMIN_CFG_PRICE_SALESPRICE_WOTAX="Salesprice without tax" COM_VIRTUEMART_ADMIN_CFG_PRICE_SALESPRICE_WOTAX_EXPLAIN="This is interesting for Traders and Merchants (B2B)" COM_VIRTUEMART_ADMIN_CFG_PRICE_SHOW_PACKAGING_PRICELABEL="Show the price label for packaging?" COM_VIRTUEMART_ADMIN_CFG_PRICE_SHOW_PACKAGING_PRICELABEL_TIP="When checked, the price label is derived from the products unit and packaging values" COM_VIRTUEMART_ADMIN_CFG_PRICE_SHOW_TAX="Show Tax in Cart" COM_VIRTUEMART_ADMIN_CFG_PRICE_SHOW_TAX_TIP="Display Tax details in Cart" COM_VIRTUEMART_ADMIN_CFG_PRICE_TAX_AMOUNT="Tax amount" COM_VIRTUEMART_ADMIN_CFG_PRICE_TAX_AMOUNT_EXPLAIN="Shows only the tax" COM_VIRTUEMART_ADMIN_CFG_PRICE_UNITPRICE="Unit price" COM_VIRTUEMART_ADMIN_CFG_PRICE_UNITPRICE_EXPLAIN="A unit price for products sold in units, for example in meter, liter, kilograms" COM_VIRTUEMART_ADMIN_CFG_PRICE_VARMOD="Baseprice modificator" COM_VIRTUEMART_ADMIN_CFG_PRICE_VARMOD_EXPLAIN="The modificator of the baseprice due the chosen product variant" COM_VIRTUEMART_ADMIN_CFG_PRICINGTAB="Pricing" COM_VIRTUEMART_ADMIN_CFG_PRODUCTORDERTAB="Product Order Settings" COM_VIRTUEMART_ADMIN_CFG_PRODUCTS_PER_ROW="Default number of products in a row" COM_VIRTUEMART_ADMIN_CFG_PRODUCTS_PER_ROW_EXPLAIN="This defines the number of products in a row.
          " COM_VIRTUEMART_ADMIN_CFG_PRODUCT_LAYOUT="Product layout" COM_VIRTUEMART_ADMIN_CFG_PRODUCT_LAYOUT_EXPLAIN="This is the default layout for displaying product details." COM_VIRTUEMART_ADMIN_CFG_PROXY_PASS="Proxy password" COM_VIRTUEMART_ADMIN_CFG_PROXY_PASS_TIP="If the proxy requires authentication please fill in the correct password here." COM_VIRTUEMART_ADMIN_CFG_PROXY_PORT="Proxy Port" COM_VIRTUEMART_ADMIN_CFG_PROXY_PORT_TIP="The port used for communication with the proxy server (mostly 80 or 8080)." COM_VIRTUEMART_ADMIN_CFG_PROXY_SETTINGS="Global Proxy Settings" COM_VIRTUEMART_ADMIN_CFG_PROXY_URL="URL of the proxy server" COM_VIRTUEMART_ADMIN_CFG_PROXY_URL_TIP="Example" COM_VIRTUEMART_ADMIN_CFG_PROXY_USER="Proxy username" COM_VIRTUEMART_ADMIN_CFG_PROXY_USER_TIP="If the proxy requires authentication please fill in your username here." COM_VIRTUEMART_ADMIN_CFG_RATING="Enable Rating System for" COM_VIRTUEMART_ADMIN_CFG_RATING_EXPLAIN="If enabled, you allow shoppers to see the product rating." COM_VIRTUEMART_ADMIN_CFG_RATING_MODE_ALL="Everybody" COM_VIRTUEMART_ADMIN_CFG_RATING_MODE_BOUGHT_PRODUCT="Shoppers who bought the product" COM_VIRTUEMART_ADMIN_CFG_RATING_MODE_NONE="Disabled" COM_VIRTUEMART_ADMIN_CFG_RATING_MODE_REGISTERED="Registered" COM_VIRTUEMART_ADMIN_CFG_RATING_SHOW="Show Rating" COM_VIRTUEMART_ADMIN_CFG_RATING_SHOW_ALL="To Everybody" COM_VIRTUEMART_ADMIN_CFG_RATING_SHOW_EXPLAIN="If enabled, you allow shoppers to rate the products." COM_VIRTUEMART_ADMIN_CFG_RATING_SHOW_NONE="None" COM_VIRTUEMART_ADMIN_CFG_RATING_SHOW_REGISTERED="To Registered Users" COM_VIRTUEMART_ADMIN_CFG_REC_PROD_ROWS="Rows for recent" COM_VIRTUEMART_ADMIN_CFG_REC_PROD_ROWS_EXPL="This defines the number of rows for recent products." COM_VIRTUEMART_ADMIN_CFG_REVIEW="Enable Review System for" COM_VIRTUEMART_ADMIN_CFG_REVIEW_EXPLAIN="If enabled, you allow shoppers to rate products and write reviews about them.
          " COM_VIRTUEMART_ADMIN_CFG_REVIEW_MAXIMUM_COMMENT_LENGTH="Comment Maximum Length" COM_VIRTUEMART_ADMIN_CFG_REVIEW_MAXIMUM_COMMENT_LENGTH_TIP="This is the maximum amount of characters that can be written by a shopper in a comment." COM_VIRTUEMART_ADMIN_CFG_REVIEW_MINIMUM_COMMENT_LENGTH="Comment Minimum Length" COM_VIRTUEMART_ADMIN_CFG_REVIEW_MINIMUM_COMMENT_LENGTH_TIP="This is the amount of characters that MUST at least be written by a shopper before the review can be submitted." COM_VIRTUEMART_ADMIN_CFG_REVIEW_MODE_ALL="Everybody" COM_VIRTUEMART_ADMIN_CFG_REVIEW_MODE_BOUGHT_PRODUCT="Shoppers who bought the product" COM_VIRTUEMART_ADMIN_CFG_REVIEW_MODE_NONE="Disabled" COM_VIRTUEMART_ADMIN_CFG_REVIEW_MODE_REGISTERED="To Registered users" COM_VIRTUEMART_ADMIN_CFG_REVIEW_SHOW="Show Review" COM_VIRTUEMART_ADMIN_CFG_REVIEW_SHOW_ALL="Show to Everybody" COM_VIRTUEMART_ADMIN_CFG_REVIEW_SHOW_EXPLAIN="If enabled, you allow shoppers to read the reviews about the products." COM_VIRTUEMART_ADMIN_CFG_REVIEW_SHOW_NONE="Don't show" COM_VIRTUEMART_ADMIN_CFG_REVIEW_SHOW_REGISTERED="Show to Registered users" COM_VIRTUEMART_ADMIN_CFG_REVIEW_TITLE="Shopper Review/Rating System" COM_VIRTUEMART_ADMIN_CFG_SEF="SEO" COM_VIRTUEMART_ADMIN_CFG_SEO_DISABLE="SEO Disabled" COM_VIRTUEMART_ADMIN_CFG_SEO_DISABLE_TIP="If checked, the SEO is disabled. When not checked, the SEO is enabled." COM_VIRTUEMART_ADMIN_CFG_SEO_ENABLE="Enable VirtueMart SEO" COM_VIRTUEMART_ADMIN_CFG_SEO_ENABLE_TIP="Activate the VirtueMart router.php" COM_VIRTUEMART_ADMIN_CFG_SEO_SETTINGS="SEO Settings" COM_VIRTUEMART_ADMIN_CFG_SEO_SUFIX="Seo Suffix" COM_VIRTUEMART_ADMIN_CFG_SEO_SUFIX_TIP="Seo Suffix to add at the end of product URLs" COM_VIRTUEMART_ADMIN_CFG_SEO_TRANSLATE="Translate Strings" COM_VIRTUEMART_ADMIN_CFG_SEO_TRANSLATE_TIP="If enabled, the URL uses the languages file for the VirtueMart strings in the URL. Otherwise, the URLs are created with default strings." COM_VIRTUEMART_ADMIN_CFG_SEO_USE_ID="Use Product and Category IDs" COM_VIRTUEMART_ADMIN_CFG_SEO_USE_ID_TIP="If enabled, the Product ID, and the Category ID will be added in the URL. Otherwise, the URL contains only the Product name or the Category name" COM_VIRTUEMART_ADMIN_CFG_SHOPFRONTTAB="Shopfront" COM_VIRTUEMART_ADMIN_CFG_SHOPFRONT_SETTINGS="Shopfront Settings" COM_VIRTUEMART_ADMIN_CFG_SHOPTAB="Shop" COM_VIRTUEMART_ADMIN_CFG_SHOP_ADVANCED="Advanced Settings" COM_VIRTUEMART_ADMIN_CFG_SHOP_EMAILS="Emails Settings" COM_VIRTUEMART_ADMIN_CFG_SHOP_LANGUAGES="Languages Settings" COM_VIRTUEMART_ADMIN_CFG_SHOP_OFFLINE="Shop is offline?" COM_VIRTUEMART_ADMIN_CFG_SHOP_OFFLINE_MSG="Offline Message" COM_VIRTUEMART_ADMIN_CFG_SHOP_OFFLINE_TIP="If you check this, the Shop will display an Offline Message." COM_VIRTUEMART_ADMIN_CFG_SHOP_SETTINGS="Shop Settings" COM_VIRTUEMART_ADMIN_CFG_SHOWVM_VERSION="Show footer" COM_VIRTUEMART_ADMIN_CFG_SHOWVM_VERSION_EXPLAIN="Displays a powered-by-VirtueMart footer image." COM_VIRTUEMART_ADMIN_CFG_SHOW_CATEGORIES="Show Categories" COM_VIRTUEMART_ADMIN_CFG_SHOW_CATEGORIES_TIP="If checked, VirtueMart home page will display the product categories." COM_VIRTUEMART_ADMIN_CFG_SHOW_CATEGORY="Show Children Category" COM_VIRTUEMART_ADMIN_CFG_SHOW_CATEGORY_EXPLAIN="If checked, Children categories will be displayed in the category view , and Product view." COM_VIRTUEMART_ADMIN_CFG_SHOW_FEATURED="Show featured" COM_VIRTUEMART_ADMIN_CFG_SHOW_FEATURED_TIP="If checked, VirtueMart home page will display Featured products" COM_VIRTUEMART_ADMIN_CFG_SHOW_LATEST="Show latest products" COM_VIRTUEMART_ADMIN_CFG_SHOW_LATEST_TIP="If checked, VirtueMart home page will display the latest products" COM_VIRTUEMART_ADMIN_CFG_SHOW_MANUFACTURERS="Show Manufacturers" COM_VIRTUEMART_ADMIN_CFG_SHOW_MANUFACTURERS_EXPLAIN="If checked, Manufacturers will displayed." COM_VIRTUEMART_ADMIN_CFG_SHOW_OUT_OF_STOCK_PRODUCTS="Show Products Out of Stock" COM_VIRTUEMART_ADMIN_CFG_SHOW_OUT_OF_STOCK_PRODUCTS_EXPLAIN="When enabled, Products that are currently not in Stock are displayed. Otherwise, such Products are hidden." COM_VIRTUEMART_ADMIN_CFG_SHOW_PRICES="Show Prices" COM_VIRTUEMART_ADMIN_CFG_SHOW_PRICES_EXPLAIN="Check to show prices. If using catalogue functionality, some don't want prices to appear on pages." COM_VIRTUEMART_ADMIN_CFG_SHOW_RECENT="Show recent" COM_VIRTUEMART_ADMIN_CFG_SHOW_RECENT_TIP="If checked, VirtueMart home page will display Recent products" COM_VIRTUEMART_ADMIN_CFG_SHOW_STORE_DESC="Show Store Description" COM_VIRTUEMART_ADMIN_CFG_SHOW_STORE_DESC_TIP="If checked, VirtueMart home page will display the Store Description." COM_VIRTUEMART_ADMIN_CFG_SHOW_TOPTEN="Show Top ten products" COM_VIRTUEMART_ADMIN_CFG_SHOW_TOPTEN_TIP="If checked, VirtueMart home page will display Top ten products" COM_VIRTUEMART_ADMIN_CFG_SSL="Enable SSL for sensitive areas (recommended)" COM_VIRTUEMART_ADMIN_CFG_SSL_EXPLAIN="This forces joomla to use SSL for the links in the cart and the user area. Be sure to use the right joomla settings for the user maintenance, the guest order and the login. Requires the prior installation of an SSL certificate for your domain/IP address" COM_VIRTUEMART_ADMIN_CFG_STATUS_PDF_INVOICES="Default Order Status to create an invoice" COM_VIRTUEMART_ADMIN_CFG_STATUS_PDF_INVOICES_TIP="Default Order Status to create an invoice. Select also the download status for the emails, to directly send the invoice. Can be overriden by the payment method" COM_VIRTUEMART_ADMIN_CFG_SYSTEMTAB="System" COM_VIRTUEMART_ADMIN_CFG_SYSTEM_SETTINGS="System Settings" COM_VIRTUEMART_ADMIN_CFG_TEMPLATESTAB="Templates" COM_VIRTUEMART_ADMIN_CFG_THUMBNAIL_HEIGHT="Thumbnail Image Height" COM_VIRTUEMART_ADMIN_CFG_THUMBNAIL_HEIGHT_TIP="The target height of the resized Thumbnail Image." COM_VIRTUEMART_ADMIN_CFG_THUMBNAIL_WIDTH="Thumbnail Image Width" COM_VIRTUEMART_ADMIN_CFG_THUMBNAIL_WIDTH_TIP="The target width of the resized Thumbnail Image." COM_VIRTUEMART_ADMIN_CFG_TITLES="Titles and Professional Titles" COM_VIRTUEMART_ADMIN_CFG_TITLES_LBL="Used Titles and Professional Titles" COM_VIRTUEMART_ADMIN_CFG_TOOLS_EXPLAIN="Enable the database Update tool. This tools are done for developers and can break your shop completly. Please use it with caution. " COM_VIRTUEMART_ADMIN_CFG_TOPTEN_PROD_ROWS="Rows for Top ten" COM_VIRTUEMART_ADMIN_CFG_TOPTEN_PROD_ROWS_EXPL="This defines the number of rows for Top ten products." COM_VIRTUEMART_ADMIN_CFG_USER_REGISTRATION_SETTINGS="User Registration Settings" COM_VIRTUEMART_ADMIN_CFG_USE_ONLY_AS_CATALOGUE="Use only as catalogue" COM_VIRTUEMART_ADMIN_CFG_USE_ONLY_AS_CATALOGUE_EXPLAIN="If you check this, you disable all cart functionalities." COM_VIRTUEMART_ADMIN_CHECKOUT_OPC="One Page Checkout enabled" COM_VIRTUEMART_ADMIN_CHECKOUT_OPC_TIP="If enabled, the shipment and payment selection will be displayed in the cart view. Note: if you are using 3rd party templates, the template must have implemented that feature." COM_VIRTUEMART_ADMIN_ONCHECKOUT_CHANGE_SHOPPER="Allow Administrators to change the current Shopper" COM_VIRTUEMART_ADMIN_ONCHECKOUT_CHANGE_SHOPPER_TIP="This option allows administrators to change the current shopper. The user session will be changed to the selected user and the original admin user ID is stored as created_by in the order table. This is usefull if you want to place an order on behalf of your customer in the FE, for which you need full access to the shopper's address(es)." COM_VIRTUEMART_ADMIN_ONCHECKOUT_ONLY_REGISTERED="Only registered users can checkout" COM_VIRTUEMART_ADMIN_ONCHECKOUT_ONLY_REGISTERED_TIP="This option let only registered users make a checkout, you should have 'On checkout, ask for registration' enabled" COM_VIRTUEMART_ADMIN_ONCHECKOUT_SHOW_LEGALINFO="Show Terms of Service on the cart/checkout?" COM_VIRTUEMART_ADMIN_ONCHECKOUT_SHOW_LEGALINFO_TIP="Store owners are required by law to inform their shoppers about return and order cancellation policies in most European countries. So this should be enabled in most cases." COM_VIRTUEMART_ADMIN_ONCHECKOUT_SHOW_PRODUCTIMAGES="Show product images" COM_VIRTUEMART_ADMIN_ONCHECKOUT_SHOW_PRODUCTIMAGES_TIP="Show mini thumbnails of the products in the cart, may break your layout" COM_VIRTUEMART_ADMIN_ONCHECKOUT_SHOW_REGISTER="On checkout, ask for registration" COM_VIRTUEMART_ADMIN_ONCHECKOUT_SHOW_REGISTER_TIP="During the checkout process, the client can register" COM_VIRTUEMART_ADMIN_ONCHECKOUT_SHOW_STEPS="Show checkout steps" COM_VIRTUEMART_ADMIN_ONCHECKOUT_SHOW_STEPS_TIP="Text to display before registration page" COM_VIRTUEMART_ADMIN_SHOW_EMAILFRIEND="Show the Recommend to a friend link?" COM_VIRTUEMART_ADMIN_SHOW_EMAILFRIEND_TIP="When enabled, a link is displayed that allows the shopper to send a recommendation email for a specific product." COM_VIRTUEMART_ADMIN_SHOW_PRINTICON="Show the Print View link?" COM_VIRTUEMART_ADMIN_SHOW_PRINTICON_TIP="When enabled, a link is displayed that opens the current page in a new popup for printing it out." COM_VIRTUEMART_ASK_QUESTION_CAPTCHA="Use ReCaptcha for recommendation and ask a question" COM_VIRTUEMART_ASK_QUESTION_CAPTCHA_TIP="Before you enable this you have to enter your Public Key and Private Key into the Joomla ReCaptcha Plugin basic options. For instructiions how to get those keys please read the plugin description." COM_VIRTUEMART_ASK_QUESTION_MAX_LENGTH="Question maximum length" COM_VIRTUEMART_ASK_QUESTION_MAX_LENGTH_EXPLAIN="Maximum valid length for asking a question" COM_VIRTUEMART_ASK_QUESTION_MIN_LENGTH="Question minimum length" COM_VIRTUEMART_ASK_QUESTION_MIN_LENGTH_EXPLAIN="Minimum valid length for asking a question" COM_VIRTUEMART_ASK_QUESTION_SHOW="Allows to Ask a question" COM_VIRTUEMART_ASK_QUESTION_SHOW_EXPLAIN="When enabled, a link is displayed that opens in a new popup and allows customers to send a question to the vendor" COM_VIRTUEMART_BROWSE_CAT_ORDERBY_DEFAULT_FIELD_LBL="Default category sort order" COM_VIRTUEMART_BROWSE_CAT_ORDERBY_DEFAULT_FIELD_LBL_TIP="Defines by which field categories are ordered by default on the browse pages" COM_VIRTUEMART_BROWSE_ORDERBY_DEFAULT_FIELD_LBL="Default product sort order" COM_VIRTUEMART_BROWSE_ORDERBY_DEFAULT_FIELD_LBL_TIP="Defines by which field products are ordered by default on the browse pages" COM_VIRTUEMART_BROWSE_ORDERBY_DEFAULT_FIELD_TITLE="Product Sort Order Settings" COM_VIRTUEMART_BROWSE_ORDERBY_FIELDS_LBL="Available Sort-by fields" COM_VIRTUEMART_BROWSE_ORDERBY_FIELDS_LBL_TIP="Choose the Sort-by fields for the browse page. Each one defines a sort method for the product browse page. If you deselect all, the Order-By-Form will not be shown." COM_VIRTUEMART_BROWSE_SEARCH_FIELDS_LBL="Available Search Fields" COM_VIRTUEMART_BROWSE_SEARCH_FIELDS_LBL_TIP="Choose the Search-by fields for the browse page. Each one defines a search method for the product browse page. If you deselect all, the Search-Form will not be shown." COM_VIRTUEMART_CFG_ADDITIONAL_IMAGES="Open additional images on main position" COM_VIRTUEMART_CFG_ADDITIONAL_IMAGES_TIP="If enabled, additional images are open on main image position. If disabled, additional images are open direct in lightbox." COM_VIRTUEMART_CFG_CONTENT_PLUGINS_ENABLE="Enable content plugins in descriptions?" COM_VIRTUEMART_CFG_CONTENT_PLUGINS_ENABLE_TIP="If enabled, product and category descriptions are parsed by all published content plugins." COM_VIRTUEMART_CFG_CURRENCY_MODULE="Select a currency converter module" COM_VIRTUEMART_CFG_CURRENCY_MODULE_TIP="This allows you to select a certain currency converter module. Such modules fetch exchange rates from a server and convert one currency into another." COM_VIRTUEMART_CFG_DELDATE_INV="Default delivery date" COM_VIRTUEMART_CFG_DELDATE_INV_TIP="Set here the default delivery date of your invoice. Common is the first option, you can override the used text, or the orderstatus shipped." COM_VIRTUEMART_CFG_ENABLE_FEATURE="Enable this Feature" COM_VIRTUEMART_CFG_FANCY="Use Fancybox" COM_VIRTUEMART_CFG_FANCY_TIP="In case you modded your shop with a lot js, you may stay with facebox, but we suggest fancybox." COM_VIRTUEMART_CFG_LOWSTOCK_NOTIFY="Send low stock notification" COM_VIRTUEMART_CFG_LOWSTOCK_NOTIFY_TIP="Sends a low stock notification if products in stock and booked are lower than the value set in the product edit" COM_VIRTUEMART_CFG_OSTATUS_EMAILS_SHOPPER="Default Order Status to send email to shopper" COM_VIRTUEMART_CFG_OSTATUS_EMAILS_SHOPPER_TIP="You can choose multiple order statuse" COM_VIRTUEMART_CFG_OSTATUS_EMAILS_VENDOR="Default Order Status to send email to vendor" COM_VIRTUEMART_CFG_OSTATUS_EMAILS_VENDOR_TIP="You can choose multiple order statuse" COM_VIRTUEMART_CFG_PAGSEQ_1="For views with 1 item per row" COM_VIRTUEMART_CFG_PAGSEQ_1_TIP="Set a list of numbers separated by commas that will be used in the list box on the frontend.
          Example: 3,5,10,20
          Leave empty, to use the generic pagination. Be aware the generic default is already product per row multiplied by 5,10,20,50" COM_VIRTUEMART_CFG_PAGSEQ_2="For 2 items per row" COM_VIRTUEMART_CFG_PAGSEQ_2_TIP="Set a list of numbers separated by commas that will be used in the list box on the frontend.
          Example: 6,12,18,30
          Leave empty, to use the generic pagination. Be aware the generic default is already product per row multiplied by 5,10,20,50" COM_VIRTUEMART_CFG_PAGSEQ_3="For 3 items per row" COM_VIRTUEMART_CFG_PAGSEQ_3_TIP="Set a list of numbers separated by commas that will be used in the list box on the frontend.
          Example: 6,12,18,24
          Leave empty, to use the generic pagination. Be aware the generic default is already product per row multiplied by 5,10,20,50" COM_VIRTUEMART_CFG_PAGSEQ_4="For 4 items per row" COM_VIRTUEMART_CFG_PAGSEQ_4_TIP="Set a list of numbers separated by commas that will be used in the list box on the frontend.
          Example: 8,24,32,64
          Leave empty, to use the generic pagination. Be aware the generic default is already product per row multiplied by 5,10,20,50" COM_VIRTUEMART_CFG_PAGSEQ_5="For 5 items per row" COM_VIRTUEMART_CFG_PAGSEQ_5_TIP="Set a list of numbers separated by commas that will be used in the list box on the frontend.
          Example: 15,50,100,150
          Leave empty, to use the generic pagination. Be aware the generic default is already product per row multiplied by 5,10,20,50" COM_VIRTUEMART_CFG_PAGSEQ_BE="Backend pagination sequence" COM_VIRTUEMART_CFG_PAGSEQ_BE_TIP="Set a list of numbers separated by commas that will be used in the list box on the backend.
          Example: 15,50,100,150
          Leave empty, to use the generic pagination. Be aware the generic default is already product per row multiplied by 5,10,20,50" COM_VIRTUEMART_CFG_POOS_ENABLE="Action when a Product is Out of Stock" COM_VIRTUEMART_CFG_POOS_ENABLE_EXPLAIN="You can define here, which action should happen, when a product is out of stock" COM_VIRTUEMART_CFG_POPUP_REL="Show related products in the popup" COM_VIRTUEMART_CFG_POPUP_REL_TIP="Showing related products in the add to cart popup can increase your conversion rate" COM_VIRTUEMART_COUPONS_ENABLE="Enable Coupon Usage" COM_VIRTUEMART_COUPONS_ENABLE_EXPLAIN="If you enable the Coupon Usage, you allow shoppers to fill in Coupon Numbers to gain discounts on their purchase." COM_VIRTUEMART_COUPONS_EXPIRE="Default Coupon Lifetime" COM_VIRTUEMART_COUPONS_EXPIRE_EXPLAIN="You can set a default lifetime for coupons here; they will expire the given amount of time after creation. This date can be changed per coupon." COM_VIRTUEMART_COUPONS_REMOVE="Order Status to Delete a Gift Coupon" COM_VIRTUEMART_COUPONS_REMOVE_TIP="Gift coupons will be deleted only for those order status" COM_VIRTUEMART_LATEST_PRODUCTS_DAYS="Latest Products - Number of days to display" COM_VIRTUEMART_LATEST_PRODUCTS_DAYS_EXPLAIN="Number of consecutive days on which latest products are being displayed" COM_VIRTUEMART_LATEST_PRODUCTS_ORDERBY="Latest Products - Sort order of display" COM_VIRTUEMART_LATEST_PRODUCTS_ORDERBY_CREATED="Last created products first" COM_VIRTUEMART_LATEST_PRODUCTS_ORDERBY_EXPLAIN="Sort order of displayed latest products" COM_VIRTUEMART_LIST_LIMIT="Default items per list view" COM_VIRTUEMART_LIST_LIMIT_EXPLAIN="The standard pagination list limit for all listings, back and frontend" COM_VIRTUEMART_LIST_MEDIA="Max items listed displaying media" COM_VIRTUEMART_LIST_MEDIA_TIP="Max items displayed in the listing decide if medias are shown in the list, or not." COM_VIRTUEMART_LLIMIT_INIT_BE="Backend default items per list view" COM_VIRTUEMART_LLIMIT_INIT_BE_TIP="The standard pagination list limit for all listings in the backend" COM_VIRTUEMART_LLIMIT_INIT_FE="Frontend default items per list view" COM_VIRTUEMART_LLIMIT_INIT_FE_TIP="The standard pagination list limit for all listings in the frontend" COM_VIRTUEMART_LWH_UNIT_DEFAULT="Default LWH Unit" COM_VIRTUEMART_LWH_UNIT_DEFAULT_EXPLAIN="Set the default unit for your shop" COM_VIRTUEMART_PDF_ICON_SHOW="Show the pdf view icon?" COM_VIRTUEMART_PDF_ICON_SHOW_EXPLAIN="Show or Hide the pdf link icon" COM_VIRTUEMART_PRODUCT_NAVIGATION_SHOW="Show the product navigation?" COM_VIRTUEMART_PRODUCT_NAVIGATION_SHOW_EXPLAIN="Show the product navigation on the top of the product page" COM_VIRTUEMART_RECCOMEND_UNATUH="Allow non logged-in to send a recommendation or ask a question" COM_VIRTUEMART_RECCOMEND_UNATUH_EXPLAIN="When enabled any user can send recommendation on product, ask a question, or call for price, otherwise only logged users are able to use this functions. You can enable it, but check your emails regularly, it can be misused for spam" COM_VIRTUEMART_REGISTRATION_CAPTCHA="Use ReCaptcha for Registration" COM_VIRTUEMART_REGISTRATION_CAPTCHA_EXPLAIN="Before you enable this you have to enter your Public Key and Private Key into the Joomla ReCaptcha Plugin basic options. For instructiions how to get those keys please read the plugin description." COM_VIRTUEMART_REVIEWS_AUTOPUBLISH="Auto-Publish Reviews?" COM_VIRTUEMART_REVIEWS_AUTOPUBLISH_TIP="If checked, reviews are automatically published after being posted. If not, the administrator must approve/publish them." COM_VIRTUEMART_REVIEWS_OS="Order status Review/Rating" COM_VIRTUEMART_REVIEWS_OS_TIP="Order status to enable the Review/Rating in case the option Shoppers who bought the product was selected" COM_VIRTUEMART_SELECT_DEFAULT_SHOP_TEMPLATE="Select the default template for your Shop" COM_VIRTUEMART_SELECT_DEFAULT_SHOP_TEMPLATE_TIP="Templates allow styling and customizing your shop.
          If no other templates than the 'default' one are present, you haven't installed more templates." COM_VIRTUEMART_UNCAT_CHILD_PRODUCTS_SHOW="Show uncategorised child products in search results and modules?" COM_VIRTUEMART_UNCAT_CHILD_PRODUCTS_SHOW_EXPLAIN="When enabled, all products and child products will appear in search results and standard modules. When disabled, any uncategorised child products will not appear, only the parent." COM_VIRTUEMART_VM_ERROR_HANDLING_ENABLE="Enable VirtueMart 404 error handling" COM_VIRTUEMART_VM_ERROR_HANDLING_ENABLE_EXPLAIN="When VirtueMart encounters a 404 error (missing product, missing category, etc), selecting this option will redirect the user to the storefront. Leaving this unchecked will pass the error to Joomla to handle in the usual way." COM_VIRTUEMART_WEIGHT_UNIT_DEFAULT="Default Weight Unit" COM_VIRTUEMART_WEIGHT_UNIT_DEFAULT_EXPLAIN="Default Weight Unit used for the products. This value can be changed per product"language/en-GB/en-GB.com_virtuemart_media.ini000066600000010323151374526160015023 0ustar00; Virtuemart! Project ; Copyright (C) 2012 Virtuemart Team. All rights reserved. ; License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 - No BOM ; COM_VIRTUEMART_DEFAULT_URL="(Default URL) %1$s" COM_VIRTUEMART_FILES_FORM="Product Files Form" COM_VIRTUEMART_FILES_FORM_ALREADY_ATTACHED_FILE="already attached file" COM_VIRTUEMART_FILES_FORM_ALREADY_ATTACHED_FILE_PRIMARY="primary attached file" COM_VIRTUEMART_FILES_FORM_AUTO_THUMBNAIL="Create Thumbnail" COM_VIRTUEMART_FILES_FORM_CURRENT_FILE="Current File" COM_VIRTUEMART_FILES_FORM_CURRENT_FULL_IMAGE="Current Full Image" COM_VIRTUEMART_FILES_FORM_CURRENT_THUMB_IMAGE="Current Thumbnail Image" COM_VIRTUEMART_FILES_FORM_DOWNLOADABLE="Downloadable File" COM_VIRTUEMART_FILES_FORM_FILE="Additional File" COM_VIRTUEMART_FILES_FORM_FILE_DESCRIPTION="Displayed image subtitle" COM_VIRTUEMART_FILES_FORM_FILE_META="Image Alt-Text" COM_VIRTUEMART_FILES_FORM_FILE_PUBLISHED="File published?" COM_VIRTUEMART_FILES_FORM_FILE_TITLE="Unique Filename " COM_VIRTUEMART_FILES_FORM_FILE_URL="Used url" COM_VIRTUEMART_FILES_FORM_FILE_URL_THUMB="Used thumb url" COM_VIRTUEMART_FILES_FORM_IMAGE="Additional Image" COM_VIRTUEMART_FILES_FORM_IMAGETYPES_SUPPORTED="Supported filetypes for thumbnail creation " COM_VIRTUEMART_FILES_FORM_LANGUAGE="Languages" COM_VIRTUEMART_FILES_FORM_LANGUAGE_TIP="Show this image along with the selected languages (leave blank for all)" COM_VIRTUEMART_FILES_FORM_LOCATION="Storing location/type" COM_VIRTUEMART_FILES_FORM_MIME_CONTENT_TYPE_NOT_SUPPORTED="The server does NOT support mime type recognition, using table" COM_VIRTUEMART_FILES_FORM_MIME_CONTENT_TYPE_SUPPORTED="The server supports mime type recognition" COM_VIRTUEMART_FILES_FORM_PRODUCT_IMAGE="Product Image (full and thumb)" COM_VIRTUEMART_FILES_FORM_RESIZE_IMAGE="Resize Full Image File?" COM_VIRTUEMART_FILES_FORM_ROLE="Role" COM_VIRTUEMART_FILES_FORM_UPLOAD_DOWNLOADPATH="Standard download directory" COM_VIRTUEMART_FILES_FORM_UPLOAD_IMAGEPATH="Standard image directory" COM_VIRTUEMART_FILES_FORM_UPLOAD_TO="Upload to" COM_VIRTUEMART_FILE_DESCRIPTION="File Description" COM_VIRTUEMART_FILE_MIMETYPE="File Mimetype" COM_VIRTUEMART_FILE_TITLE="Title" COM_VIRTUEMART_FILE_UPLOAD="Upload File" COM_VIRTUEMART_FILE_URL="Url" COM_VIRTUEMART_FORM_IMAGE_DELETE_LBL="Delete Image" COM_VIRTUEMART_FORM_MEDIA_CREATE_THUMBNAIL="Create thumb" COM_VIRTUEMART_FORM_MEDIA_DELETE="delete" COM_VIRTUEMART_FORM_MEDIA_DISPLAYABLE="Displayable" COM_VIRTUEMART_FORM_MEDIA_DOWNLOADABLE="Downloadable" COM_VIRTUEMART_FORM_MEDIA_NO_ATTRIB="No attribute" COM_VIRTUEMART_FORM_MEDIA_SET_CATEGORIES="category" COM_VIRTUEMART_FORM_MEDIA_SET_CATEGORY="category" COM_VIRTUEMART_FORM_MEDIA_SET_FORSALE="For sale" COM_VIRTUEMART_FORM_MEDIA_SET_MANUFACTURER="manufacturer" COM_VIRTUEMART_FORM_MEDIA_SET_MANUFACTURERS="manufacturer" COM_VIRTUEMART_FORM_MEDIA_SET_PRODUCT="product" COM_VIRTUEMART_FORM_MEDIA_SET_PRODUCTS="product" COM_VIRTUEMART_FORM_MEDIA_SET_VENDOR="vendor" COM_VIRTUEMART_FORM_MEDIA_SET_VENDORS="vendor" COM_VIRTUEMART_FORM_MEDIA_SET_VENDORS="vendor" COM_VIRTUEMART_FORM_MEDIA_UPLOAD="Upload" COM_VIRTUEMART_FORM_MEDIA_UPLOAD_ATTACH="upload and attach" COM_VIRTUEMART_FORM_MEDIA_UPLOAD_DELETE="upload and delete" COM_VIRTUEMART_FORM_MEDIA_UPLOAD_REPLACE="Replace" COM_VIRTUEMART_FORM_MEDIA_UPLOAD_REPLACE_THUMB="Replace thumb" COM_VIRTUEMART_IMAGES="Images" COM_VIRTUEMART_IMAGE_ACTION="Image Action" COM_VIRTUEMART_IMAGE_ATTACH_EXISTING="--Image Choice--" COM_VIRTUEMART_IMAGE_ATTACH_NEW="Attach new Image" COM_VIRTUEMART_IMAGE_DETACH="Image Detach" COM_VIRTUEMART_IMAGE_EDIT_INFO="Edit Image Information" COM_VIRTUEMART_IMAGE_INFORMATION="Image Information" COM_VIRTUEMART_IMAGE_NOT_FOUND="Image not found!" COM_VIRTUEMART_IMAGE_REMOVE="Remove Image" COM_VIRTUEMART_MEDIA_LIST="Product Media File List" COM_VIRTUEMART_RTB_AD="Sell more with professional looking product images! Get them edited by our partner Remove The Background. They love to remove backgrounds, crop, resize, add shadow, combine images (and much more) so you get the perfect result every time." COM_VIRTUEMART_SEARCH_MEDIA="Search for images" COM_VIRTUEMART_SEARCH_MEDIA_TIP="Type a space to display all images or the first letters of an image title" COPYRIGHT.php000066600000010351151374526160006643 0ustar00
          
          Copyright:
          Since VM2 is a derived work of VM1, we list them beyond, some rests of them may be in the code.
          VirtueMart derives from copyrighted works licensed under the GNU General
          Public License.  This version has been modified pursuant to the
          GNU General Public License as of September 15, 2005, and as distributed,
          it includes or is derivative of works licensed under the GNU General
          Public License or other free or open source software licenses, including
          works copyrighted by any or all of the following, from 2009 - 2012,
          Max Milbers, Patrick Kohl, Valérie Isaksen, Rick Glunt, Roland Dalmulder, Oscar van Eijk, Urs Brülhart, Devendra Kumar Shukla,
          Jörg Kiekebusch, Christopher Roussel, John Acosta, George Kostopoulos, Zbigniew Mazur, John Wicks, Markus Öhler, Stephanie Schmidt,
          Vu Hoang Viet, Simon Hodgkiss, Fred Bidon, Mickaël Cabanas, Alexander Kludt, Konstantin Dzvonik
          
          
          
          If you have contributed a vital part of VirtueMart that is not mentioned and/or missing here,
          and you feel that your copyright note should be mentioned here,
          please contact the leader of the author team of VirtueMart (max|at|virtuemart.net).
          
          VirtueMart includes or is derivative of works distributed under the following copyright notices:
          
          Administrator Icons
          ----
          Copyright:	2008 Simon Josephson (http://www.artatwork.com.au)
          
          
          Currency Converter Module
          ----
          Copyright:	2004 Werner Knudsen
          License:	GNU General Public License (GPL)
          
          
          Image2Thumbnail Class
          ---
          Copyright:	Andreas Martens and Patrick Teague
          License:	Freeware
          
          
          jQuery JavaScript Library
          ----
          Copyright: 2009 John Resig
          License: Dual licensed under the MIT and GPL licenses.
          
          PEAR
          ----
          Copyright:	1997-2004 The PHP Group
          License:	PHP license
          
          
          OLD VM1: Copyright, since we used some lines, all not already mentioned above is here again
          
          VirtueMart derives from copyrighted works licensed under the GNU General
          Public License.  This version has been modified pursuant to the
          GNU General Public License as of September 15, 2005, and as distributed,
          it includes or is derivative of works licensed under the GNU General
          Public License or other free or open source software licenses, including
          works copyrighted by any or all of the following, from 2000 through 2005 (appearing in alphabetical order):
          Ekkehard Domning, Zdenek Dvorak, Edikon corp., Soeren Eberhardt,
          pablo (from Edikon), Bernhard Pfeifer,  John Syben, Phil Taylor, Erich Vinson,
          or Mike Wattier from Zephware (devcompany.com)
          
          (If you have contributed a piece of VirtueMart that is not mentioned and missing here,
          and you feel that your copyright note should be mentioned here,
          please contact the author of VirtueMart (max |at| virtuemart.net).)
          
          
          CreditCard Class
          ---
          Copyright:	Daniel Fr�z Costa
          License:	Public Domain
          
          
          FPDF
          ----
          Copyright:	Olivier PLATHEY
          License:	Freeware
          
          HMTL2PDF
          ----
          Copyright: 2004-2005 Renato Coelho
          License:	GNU Lesser General Public License (LGPL)
          
          phpInputfilter
          ----
          Copyright:	Daniel Morris
          License:	GNU General Public License (GPL)
          
          phpMailer
          ----
          Copyright:	2001 - 2003  Brent R. Matzelle
          License:	GNU Lesser General Public License (LGPL)
          
          phpShop
          ----
          Copyright:	2000 - 2004 Edikon Corp. (http://www.edikon.com)
          License:	GNU General Public License (GPL)
          Community: http://www.phpshop.org
          
          tar-archive
          ----
          Copyright:	1997-2003 The PHP Group
          License:	PHP License
          
          wz-tooltip
          ----
          Copyright:	2002-2004 Walter Zorn
          License:	GNU Lesser General Public License (LGPL)
          
          
          plugins/vmuserfieldtypeplugin.php000066600000003423151374526160013424 0ustar00_tablename = '#__virtuemart_userfield_' . $this->_name; // $this->_createTable(); // $this->_tableChecked = true; } // add params fields in object function AddUserfieldParameter($params){ $plgParams = explode('|', $params); foreach($plgParams as $item){ if (empty($item)) continue; $param = explode('=',$item); $this->$param[0] = json_decode($param[1]); //unset($item[0]); } } // add params fields in object by name function AddUserfieldParameterByPlgName($plgName){ if(empty($this->_db)) $this->_db = JFactory::getDBO(); $q = 'SELECT `params` FROM `#__virtuemart_userfields` WHERE `type` = "plugin' . $plgName.'"'; $this->_db->setQuery($q); $params = $this->_db->loadResult(); $this->AddUserfieldParameter($params); } } plugins/currency_converter/index.html000066600000000000151374526160014147 0ustar00plugins/currency_converter/convertECB.php000066600000014676151374526160014705 0ustar00lifetime; $cache->setLifeTime(86400/4); // check 4 time per day // save cache conf $conf = JFactory::getConfig(); // check if cache is enabled in configuration $cacheactive = $conf->getValue('config.caching'); $cache->setCaching(1); //enable caching $globalCurrencyConverter = $cache->call( array( 'convertECB', 'getSetExchangeRates' ),$this->document_address ); // revert configuration $cache->setCaching($cacheactive); if(!$globalCurrencyConverter ){ //vmdebug('convert convert No $globalCurrencyConverter convert '.$amountA); return $amountA; } else { $valA = isset( $globalCurrencyConverter[$currA] ) ? $globalCurrencyConverter[$currA] : 1.0; $valB = isset( $globalCurrencyConverter[$currB] ) ? $globalCurrencyConverter[$currB] : 1.0; $val = (float)$amountA * (float)$valB / (float)$valA; //vmdebug('convertECB with '.$currA.' '.$amountA.' * '.$valB.' / '.$valA.' = '.$val,$globalCurrencyConverter[$currA]); return $val; } } static function getSetExchangeRates($ecb_filename){ $archive = true; setlocale(LC_TIME, "en-GB"); $now = time() + 3600; // Time in ECB (Germany) is GMT + 1 hour (3600 seconds) if (date("I")) { $now += 3600; // Adjust for daylight saving time } $weekday_now_local = gmdate('w', $now); // week day, important: week starts with sunday (= 0) !! $date_now_local = gmdate('Ymd', $now); $time_now_local = gmdate('Hi', $now); $time_ecb_update = '1415'; if( is_writable(JPATH_BASE.DS.'cache') ) { $store_path = JPATH_BASE.DS.'cache'; } else { $store_path = JPATH_SITE.DS.'media'; } $archivefile_name = $store_path.'/daily.xml'; $val = ''; if(file_exists($archivefile_name) && filesize( $archivefile_name ) > 0 ) { // timestamp for the Filename $file_datestamp = date('Ymd', filemtime($archivefile_name)); // check if today is a weekday - no updates on weekends if( date( 'w' ) > 0 && date( 'w' ) < 6 // compare filedate and actual date && $file_datestamp != $date_now_local // if localtime is greater then ecb-update-time go on to update and write files && $time_now_local > $time_ecb_update) { $curr_filename = $ecb_filename; } else { $curr_filename = $archivefile_name; $last_updated = $file_datestamp; $archive = false; } } else { $curr_filename = $ecb_filename; } if( !is_writable( $store_path )) { $archive = false; vmError( "The file $archivefile_name can't be created. The directory $store_path is not writable" ); } // JError::raiseNotice(1, "The file $archivefile_name should be in the directory $store_path " ); if( $curr_filename == $ecb_filename ) { // Fetch the file from the internet if(!class_exists('VmConnector')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'connection.php'); // JError::raiseNotice(1, "Updating currency " ); if (!$contents = VmConnector::handleCommunication( $curr_filename )) { if (isset($file_datestamp)) { $contents = @file_get_contents( $curr_filename ); } } else $last_updated = date('Ymd'); } else { $contents = @file_get_contents( $curr_filename ); } if( $contents ) { // if archivefile does not exist if( $archive ) { // now write new file file_put_contents( $archivefile_name, $contents ); } $contents = str_replace (" loadXML($contents) ) { //todo vmError('Failed to parse the Currency Converter XML document.'); vmError('The content: '.$contents); // $GLOBALS['product_currency'] = $vendor_currency; return false; } $currency_list = $xmlDoc->getElementsByTagName( "Cube" ); // Loop through the Currency List $length = $currency_list->length; for ($i = 0; $i < $length; $i++) { $currNode = $currency_list->item($i); if(!empty($currNode) && !empty($currNode->attributes->getNamedItem("currency")->nodeValue)){ $currency[$currNode->attributes->getNamedItem("currency")->nodeValue] = $currNode->attributes->getNamedItem("rate")->nodeValue; unset( $currNode ); } } $globalCurrencyConverter = $currency; } else { $globalCurrencyConverter = false; vmError( 'Failed to retrieve the Currency Converter XML document.'); // return false; } return $globalCurrencyConverter; } } // pure php no closing tag plugins/currency_converter/convertECB.xml000066600000001421151374526160014676 0ustar00 ECB Currency Converter 28. January 2008 GNU/GPL http://joomlacode.org/gf/project/jmart/ 1.0 Currency Converter Plugin, based on Rates from the European Central Bank convertECB convertECB.php plugins/currency_converter/.htaccess000066600000000177151374526160013767 0ustar00 Order allow,deny Deny from all plugins/vmextendedplugin.php000066600000007055151374526160012345 0ustar00_name; if (empty($name)) { $r = null; preg_match('/VmExtended(.*)/i', get_class($this), $r); $name = (empty($r)) ? '' : strtolower($r[1]); $this->_name = $name; } return $name; } /** * Constructor * * @param object $subject The object to observe * @param array $config An array that holds the plugin configuration */ public function __construct (&$subject, $config=array()) { parent::__construct($subject, $config); $this->_path = JPATH_PLUGINS.DS.$this->getName(); $lang = JFactory::getLanguage(); $lang->load('plg_vmextended_'.$this->getName(),JPATH_ADMINISTRATOR); } /** * Plugs into the backend controller logic to insert a custom controller into the VM component space * This means that links can be constructed as index.php?option=com_virtuemart&view=myaddon and work * * @param string $controller Name of controller requested * @return True if this loads a file (null otherwise) */ public function onVmAdminController ($controller) { return null; } /* example: if ($controller = 'myplug') { require_once($this->_path.DS.'controllers'.DS.'myplug_admin.php'); return true; }*/ /** * Plugs into the frontend controller logic to insert a custom controller into the VM component space * This means that links can be constructed as index.php?option=com_virtuemart&view=myaddon and work * * @param string $controller Name of controller requested * @return True if this loads a file (null otherwise) */ public function onVmSiteController ($controller) { return null; } /* example: if ($controller = 'myplug') { require_once($this->_path.DS.'controllers'.DS.'myplug.php'); return true; }*/ /** * Plugs into the updater model to remove additional VM data (useful if the plugin depends on fields in a VM table) * * @param object $updater VirtueMartModelUpdatesMigration object */ public function onVmSqlRemove (&$updater) { return null; } /* example: $filename = $this->_path.DS.'install'.DS.'uninstall_required_data.sql'; $updater->execSQLFile($filename);*/ /** * Plugs into the updater model to reinstall additional VM data (useful if the plugin depends on fields in a VM table) * * @param object $updater VirtueMartModelUpdatesMigration object */ public function onVmSqlRestore (&$updater) { return null; } /* example: $filename = $this->_path.DS.'install'.DS.'install_required_data.sql'; $updater->execSQLFile($filename);*/ }plugins/vmcouponplugin.php000066600000002106151374526160012040 0ustar00_tablename = '#__virtuemart_coupon_' . $this->_name; } }plugins/index.html000066600000000000151374526160010226 0ustar00plugins/vmcustomplugin.php000066600000024333151374526160012055 0ustar00 name */ protected $customs; function __construct (& $subject, $config) { parent::__construct ($subject, $config); $this->_tablepkey = 'virtuemart_product_id'; $this->_tablename = '#__virtuemart_product_' . $this->_psType . '_plg_' . $this->_name; $this->_idName = 'virtuemart_custom_id'; $this->_configTableFileName = $this->_psType . 's'; $this->_configTableClassName = 'Table' . ucfirst ($this->_psType) . 's'; //TablePaymentmethods $this->_configTable = '#__virtuemart_customs'; } function onDisplayEditBECustom ($virtuemart_custom_id, &$customPlugin) { //if($this->plugin = $this->selectedThisByMethodId($this->_psType,$virtuemart_custom_id)){ if ($this->plugin = $this->selectedThisByMethodId ($virtuemart_custom_id)) { if (empty($this->plugin)) { $this->plugin->custom_jplugin_id = NULL; return $this->plugin; } //Must use here the table to get valid params $this->plugin = $this->getVmPluginMethod ($this->plugin->virtuemart_custom_id); if (empty($this->plugin->virtuemart_vendor_id)) { if (!class_exists ('VirtueMartModelVendor')) { require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'vendor.php'); } $this->plugin->virtuemart_vendor_id = VirtueMartModelVendor::getLoggedVendor (); } $customPlugin = $this->plugin; // return $this->plugin; return TRUE; } } /* * helper to parse plugin parameters as object * */ public function parseCustomParams (&$field, $xParams = 'custom_params') { VmTable::bindParameterable ($field, $xParams, $this->_varsToPushParam); if (empty($field->custom_element)) { return 0; } if (!empty($field->custom_param) && is_string ($field->custom_param)) { $custom_param = json_decode ($field->custom_param, TRUE); } else { return; } //$field->custom_param = $custom_param; foreach ($custom_param as $k => $v) { if (!empty($v)) { $field->$k = $v; } } } /* * helper to get plugin parameters as object * All params are added to $this->params plugin */ public function getCustomParams (&$field) { VmTable::bindParameterable ($field, 'custom_params', $this->_varsToPushParam); //Why do we have this? if (empty($field->custom_element)) { return 0; } //Why do we have this, when bindParameterable could already doing it //And why we do it here, when we do it later again? foreach ($this->_varsToPushParam as $k => $v) { if (!isset($this->params->$k)) { $this->params->$k = $field->$k; } // vmdebug('fields org '.$this->_name,$this->params); } $this->virtuemart_custom_id = $field->virtuemart_custom_id; if (!empty($field->custom_param) && is_string ($field->custom_param)) { $this->params = json_decode ($field->custom_param); } else { return; } //$field->custom_param = $custom_param; //vmdebug('$this->_varsToPushParam '.$this->_name,$this->_varsToPushParam ); foreach ($this->_varsToPushParam as $k => $v) { if (!isset($this->params->$k)) { $this->params->$k = $field->$k; } } } /** * Helper to add all params of specific product of this custom to an object * * @param object $field * @param int $product_id */ protected function getPluginProductDataCustom (&$field, $product_id) { $id = $this->getIdForCustomIdProduct ($product_id, $field->virtuemart_custom_id); $datas = $this->getPluginInternalData ($id); if ($datas) { //$fields = get_object_vars($datas); // vmdebug('datas',$datas); foreach ($datas as $k=> $v) { if (!is_string ($v)) { continue; } // Only get real Table variable if (isset($field->$k) && $v === 0) { continue; } $field->$k = $v; } } } /** * helper to get plugin table as object * All params are added to $this->params plugin * * @param unknown_type $field * @param unknown_type $product_id */ protected function getPluginCustomData (&$field, $product_id) { $id = $this->getIdForCustomIdProduct ($product_id, $field->virtuemart_custom_id); $datas = $this->getPluginInternalData ($id); if ($datas) { foreach ($this->_varsToPushParam as $k => $v) { if (!isset($datas->$k)) { continue; } if (isset($this->params->$k) && $datas->$k == 0) { continue; } $this->params->$k = $datas->$k; } } } /** * This is the actions which take place, when a product gets stored * * @param string $type atm valid 'product' * @param array $data form data * @param int $id virtuemart_product_id */ function OnStoreProduct ($data, $plugin_param) { if (key ($plugin_param) !== $this->_name) { vmdebug('OnStoreProduct return because key '.key ($plugin_param).'!== '. $this->_name); return; } $key = key ($plugin_param); $plugin_param[$key]['virtuemart_product_id'] = $data['virtuemart_product_id']; //vmdebug ('plgData', $plugin_param[$key]); // $this->id = $this->getIdForCustomIdProduct($data['virtuemart_product_id'],$plugin_param[$key]['virtuemart_custom_id']); $this->storePluginInternalDataProduct ($plugin_param[$key], 'id', $data['virtuemart_product_id']); } /** * This stores the data of the plugin, attention NOT the configuration of the pluginmethod, * this function should never be triggered only called from triggered functions. * * @author Max Milbers * @param array $values array or object with the data to store * @param string $tableName When different then the default of the plugin, provid it here * @param string $tableKey an additionally unique key */ protected function storePluginInternalDataProduct (&$values, $primaryKey = 0, $product_id = 0) { $custom_id = $values['virtuemart_custom_id']; $db = JFactory::getDBO (); if (!empty($custom_id) && !empty($product_id)) { $_qry = 'SELECT `id` FROM `#__virtuemart_product_custom_plg_' . $this->_name . '` WHERE `virtuemart_product_id`=' . (int)$product_id . ' and `virtuemart_custom_id`=' . (int)$custom_id; $db->setQuery ($_qry); $id = $db->loadResult (); } $values['id'] = $id ? $id : 0; // vmdebug('$value',$values, $id); $this->storePluginInternalData ($values); return $values; } /** * Calculate the variant price by The plugin * override calculateModificators() in calculatorh. * Eg. recalculate price by a quantity set in the plugin * You must reimplement modifyPrice() in your plugin * or price is returned defaut custom_price */ // public function plgVmCalculatePluginVariant( $product, $field,$selected,$row){ public function getCustomVariant ($product, &$productCustomsPrice, $selected) { if ($productCustomsPrice->custom_element !== $this->_name) { return FALSE; } vmPlugin::declarePluginParams ('custom', $productCustomsPrice->custom_element, $productCustomsPrice->custom_jplugin_id, $productCustomsPrice); // VmTable::bindParameterable($productCustomsPrice,'custom_params',$this->_varsToPushParam); $pluginFields = JRequest::getVar ('customPlugin', NULL); if ($pluginFields == NULL and isset($product->customPlugin)) { $pluginFields = json_decode ($product->customPlugin, TRUE); } return $pluginFields[$productCustomsPrice->virtuemart_customfield_id][$this->_name]; } /** * convert param for render and * display The plugin in cart * return null if not $this->_name */ public function GetPluginInCart ($product) { //$plgName = $productCustom->value; if (!empty($product->param)) { if (!is_array ($product->param)) { return FALSE; } $param = array(); // vmdebug('$product->param',$product->param); foreach ($product->param as $k => $plg) { if (is_array ($plg) and key ($plg) == $this->_name) { $param[$k] = $plg[$this->_name]; } } if ($param) { return $param; } } return NULL; } /** * render the plugin with param to display on product edit * called by customfields inputTypePlugin * */ public function selectSearchableCustom (&$selectList) { return NULL; } /** * render the plugin with param to display on product edit * called by customfields inputTypePlugin * */ /* public function plgVmAddToSearch (&$where, $searchplugin) { }*/ /** * render the plugin with param to display on product edit * called by customfields inputTypePlugin * */ public function GetNameByCustomId ($custom_id) { static $custom_element; if (isset($custom_element)) { return $custom_element; } $db = JFactory::getDBO (); $q = 'SELECT `custom_element` FROM `#__virtuemart_customs` WHERE `virtuemart_custom_id`=' . (int)$custom_id; $db->setQuery ($q); $custom_element = $db->loadResult (); return $custom_element; } /** * render the plugin with param to display on product edit * called by customfields inputTypePlugin * */ public function getIdForCustomIdProduct ($product_id, $custom_id) { $db = JFactory::getDBO (); $q = 'SELECT `id` FROM `#__virtuemart_product_custom_plg_' . $this->_name . '` WHERE `virtuemart_product_id`=' . (int)$product_id . ' and `virtuemart_custom_id`=' . (int)$custom_id; $db->setQuery ($q); return $db->loadResult (); } } plugins/.htaccess000066600000000177151374526160010046 0ustar00 Order allow,deny Deny from all plugins/vmplugin.php000066600000045170151374526160010624 0ustar00_name = basename(__FILE, '.php'); // just as note: protected can be accessed only within the class itself and by inherited and parent classes //This is normal name of the plugin family, custom, payment protected $_psType = 0; //Id of the joomla table where the plugins are registered protected $_jid = 0; protected $_vmpItable = 0; //the name of the table to store plugin internal data, like payment logs protected $_tablename = 0; protected $_tableId = 'id'; //Name of the primary key of this table, for exampel virtuemart_calc_id or virtuemart_order_id protected $_tablepkey = 0; protected $_vmpCtable = 0; //the name of the table which holds the configuration like paymentmethods, shipmentmethods, customs protected $_configTable = 0; protected $_configTableFileName = 0; protected $_configTableClassName = 0; protected $_xParams = 0; protected $_varsToPushParam = array(); //id field of the config table protected $_idName = 0; //Name of the field in the configtable, which holds the parameters of the pluginmethod protected $_configTableFieldName = 0; protected $_debug = FALSE; protected $_loggable = FALSE; protected $_cryptedFields = false; /** * Constructor * * @param object $subject The object to observe * @param array $config An array that holds the plugin configuration * @since 1.5 */ function __construct (& $subject, $config) { parent::__construct ($subject, $config); $this->_psType = substr ($this->_type, 2); $filename = 'plg_' . $this->_type . '_' . $this->_name; $this->loadJLang($filename); if (!class_exists ('JParameter')) { require(JPATH_VM_LIBRARIES . DS . 'joomla' . DS . 'html' . DS . 'parameter.php'); } $this->_tablename = '#__virtuemart_' . $this->_psType . '_plg_' . $this->_name; $this->_tableChecked = FALSE; } public function loadJLang($fname,$type=0,$name=0){ $jlang =JFactory::getLanguage(); $tag = $jlang->getTag(); if(empty($type)) $type = $this->_type; if(empty($name)) $name = $this->_name; $path = $basePath = JPATH_PLUGINS.DS.$type.DS.$name; if(VmConfig::get('enableEnglish', true) and $tag!='en-GB'){ $testpath = $basePath.DS.'language'.DS.'en-GB'.DS.'en-GB.'.$fname.'.ini'; if(!file_exists($testpath)){ $epath = JPATH_ADMINISTRATOR; } else { $epath = $path; } $jlang->load($fname, $epath, 'en-GB'); } $testpath = $basePath.DS.'language'.DS.$tag.DS.$tag.'.'.$fname.'.ini'; if(!file_exists($testpath)){ $path = JPATH_ADMINISTRATOR; } $jlang->load($fname, $path,$tag,true); } function setPluginLoggable($set=TRUE){ $this->_loggable = $set; } function setCryptedFields($fieldNames){ $this->_cryptedFields = $fieldNames; } /** * @return array */ function getTableSQLFields () { return array(); } function getOwnUrl(){ if(JVM_VERSION!=1){ $url = '/plugins/'.$this->_type.'/'.$this->_name; } else{ $url = '/plugins/'.$this->_type; } return $url; } function display3rdInfo($intro,$developer,$contactlink,$manlink){ $logolink = $this->getOwnUrl() ; return shopfunctions::display3rdInfo($this->_name,$intro,$developer,$logolink,$contactlink,$manlink); } /** * Checks if this plugin should be active by the trigger * * @author Max Milbers * @param string $psType shipment,payment,custom * @param string the name of the plugin for example textinput, paypal * @param int/array $jid the registered plugin id(s) of the joomla table */ protected function selectedThis ($psType, $name = 0, $jid = 0) { if ($psType !== 0) { if ($psType != $this->_psType) { vmdebug ('selectedThis $psType does not fit'); return FALSE; } } if ($name !== 0) { if ($name != $this->_name) { vmdebug ('selectedThis $name ' . $name . ' does not fit pluginname ' . $this->_name); return FALSE; } } if ($jid === 0) { return FALSE; } else { if ($this->_jid === 0) { $this->getJoomlaPluginId (); } if (is_array ($jid)) { if (!in_array ($this->_jid, $jid)) { vmdebug ('selectedThis id ' . $jid . ' not in array does not fit ' . $this->_jid); return FALSE; } } else { if ($jid != $this->_jid) { vmdebug ('selectedThis $jid ' . $jid . ' does not fit ' . $this->_jid); return FALSE; } } } return TRUE; } /** * Checks if this plugin should be active by the trigger * * We should avoid this function, is expensive * * @author Max Milbers * @author Valérie Isaksen * * @param int/array $id the registered plugin id(s) of the joomla table */ function selectedThisByMethodId ($id = 'type') { //if($psType!=$this->_psType) return false; if ($id === 'type') { return TRUE; } else { $db = JFactory::getDBO (); if (JVM_VERSION === 1) { $q = 'SELECT vm.* FROM `' . $this->_configTable . '` AS vm, #__plugins AS j WHERE vm.`' . $this->_idName . '` = "' . $id . '" AND vm.' . $this->_psType . '_jplugin_id = j.id AND j.element = "' . $this->_name . '"'; } else { $q = 'SELECT vm.* FROM `' . $this->_configTable . '` AS vm, #__extensions AS j WHERE vm.`' . $this->_idName . '` = "' . $id . '" AND vm.' . $this->_psType . '_jplugin_id = j.extension_id AND j.element = "' . $this->_name . '"'; } $db->setQuery ($q); if (!$res = $db->loadObject ()) { // vmError('selectedThisByMethodId '.$db->getQuery()); return FALSE; } else { return $res; } } } /** * Checks if this plugin should be active by the trigger * * @author Max Milbers * @author Valérie Isaksen * @param int/array $jplugin_id the registered plugin id(s) of the joomla table */ protected function selectedThisByJPluginId ($jplugin_id = 'type') { if ($jplugin_id === 'type') { return TRUE; } else { $db = JFactory::getDBO (); if (JVM_VERSION === 1) { $q = 'SELECT vm.* FROM `' . $this->_configTable . '` AS vm, #__plugins AS j WHERE vm.`' . $this->_psType . '_jplugin_id` = "' . $jplugin_id . '" AND vm.' . $this->_psType . '_jplugin_id = j.id AND j.`element` = "' . $this->_name . '"'; } else { $q = 'SELECT vm.* FROM `' . $this->_configTable . '` AS vm, #__extensions AS j WHERE vm.`' . $this->_psType . '_jplugin_id` = "' . $jplugin_id . '" AND vm.`' . $this->_psType . '_jplugin_id` = j.extension_id AND j.`element` = "' . $this->_name . '"'; } $db->setQuery ($q); if (!$res = $db->loadObject ()) { // vmError('selectedThisByMethodId '.$db->getQuery()); return FALSE; } else { return $res; } } } /** * Gets the id of the joomla table where the plugin is registered * * @author Max Milbers */ final protected function getJoomlaPluginId () { if (!empty($this->_jid)) { return $this->_jid; } $db = JFactory::getDBO (); if (JVM_VERSION === 1) { $q = 'SELECT j.`id` AS c FROM #__plugins AS j WHERE j.element = "' . $this->_name . '" AND j.folder = "' . $this->_type . '"'; } else { $q = 'SELECT j.`extension_id` AS c FROM #__extensions AS j WHERE j.element = "' . $this->_name . '" AND j.`folder` = "' . $this->_type . '"'; } $db->setQuery ($q); $this->_jid = $db->loadResult (); if (!$this->_jid) { vmError ('getJoomlaPluginId ' . $db->getErrorMsg ()); return FALSE; } else { return $this->_jid; } } /** * Create the table for this plugin if it does not yet exist. * * @param string $psType shipment,payment,custom * @author Valérie Isaksen * @author Max Milbers */ protected function onStoreInstallPluginTable ($psType,$name=FALSE) { if(!empty($name) and $name!=$this->_name){ return false; } //Todo the psType should be name of the plugin. if ($psType == $this->_psType) { $query = $this->getVmPluginCreateTableSQL (); if(empty($query)){ return false; } else { //if ($query !== 0) { // vmdebug('onStoreInstallPluginTable '.$query); $db = JFactory::getDBO (); $db->setQuery ($query); if (!$db->query ()) { JError::raiseWarning (1, $this->_name . '::onStoreInstallPluginTable: ' . JText::_ ('COM_VIRTUEMART_SQL_ERROR') . ' ' . $db->stderr (TRUE)); echo $this->_name . '::onStoreInstallPluginTable: ' . JText::_ ('COM_VIRTUEMART_SQL_ERROR') . ' ' . $db->stderr (TRUE); } else { return true; } } } return false; } /** * adds loggable fields to the table * * @return array */ function getTableSQLLoggablefields () { return array( 'created_on' => 'datetime NOT NULL default \'0000-00-00 00:00:00\'', 'created_by' => "int(11) NOT NULL DEFAULT '0'", 'modified_on' => 'datetime NOT NULL DEFAULT \'0000-00-00 00:00:00\'', 'modified_by' => "int(11) NOT NULL DEFAULT '0'", 'locked_on' => 'datetime NOT NULL DEFAULT \'0000-00-00 00:00:00\'', 'locked_by' => 'int(11) NOT NULL DEFAULT \'0\'' ); } /** * @param $tableComment * @return string */ protected function createTableSQL ($tableComment,$tablesFields=0) { $query = "CREATE TABLE IF NOT EXISTS `" . $this->_tablename . "` ("; if(!empty($tablesFields)){ foreach ($tablesFields as $fieldname => $fieldtype) { $query .= '`' . $fieldname . '` ' . $fieldtype . " , "; } } else { $SQLfields = $this->getTableSQLFields (); $loggablefields = $this->getTableSQLLoggablefields (); foreach ($SQLfields as $fieldname => $fieldtype) { $query .= '`' . $fieldname . '` ' . $fieldtype . " , "; } foreach ($loggablefields as $fieldname => $fieldtype) { $query .= '`' . $fieldname . '` ' . $fieldtype . ", "; } } $query .= " PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='" . $tableComment . "' AUTO_INCREMENT=1 ;"; return $query; } /** * Set with this function the provided plugin parameters * * @param string $paramsFieldName * @param array $varsToPushParam */ function setConfigParameterable ($paramsFieldName, $varsToPushParam) { $this->_varsToPushParam = $varsToPushParam; $this->_xParams = $paramsFieldName; } /** * @param $name * @param $id * @param $table * @return bool */ protected function setOnTablePluginParams ($name, $id, &$table) { //Todo I think a test on this is wrong here //Adjusted it like already done in declarePluginParams if (!empty($this->_psType) and !$this->selectedThis ($this->_psType, $name, $id)) { return FALSE; } else { if($this->_cryptedFields){ $table->setCryptedFields($this->_cryptedFields); } $table->setParameterable ($this->_xParams, $this->_varsToPushParam); return TRUE; } } /** * @param $psType * @param $name * @param $id * @param $data * @return bool */ protected function declarePluginParams ($psType, $name, $id, &$data) { //vmdebug('declarePluginParams '.$this->_psType.' '.$psType); //Todo I know a test only on seledtThis is wrong here, it works now with extra !empty($this->_psType) if(!empty($this->_psType) and !$this->selectedThis($psType,$name,$id)){ return FALSE; } if (!class_exists ('VmTable')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'vmtable.php'); } VmTable::bindParameterable ($data, $this->_xParams, $this->_varsToPushParam); if($this->_cryptedFields){ $data->setCryptedFields($this->_cryptedFields); } return TRUE; // vmdebug('getDeclaredPluginParams return '.$this->_xParams); // return array($this->_xParams,$this->_varsToPushParam); // } else { // return false; // } } /** * @param $int * @return mixed */ protected function getVmPluginMethod ($int, $cache = true) { if ($this->_vmpCtable === 0 || !$cache) { $db = JFactory::getDBO (); if (!class_exists ($this->_configTableClassName)) { require(JPATH_VM_ADMINISTRATOR . DS . 'tables' . DS . $this->_configTableFileName . '.php'); } $this->_vmpCtable = new $this->_configTableClassName($db); if ($this->_xParams !== 0) { $this->_vmpCtable->setParameterable ($this->_xParams, $this->_varsToPushParam); } if($this->_cryptedFields){ $this->_vmpCtable->setCryptedFields($this->_cryptedFields); } // $this->_vmpCtable = $this->createPluginTableObject($this->_tablename,$this->tableFields,$this->_loggable); } return $this->_vmpCtable->load ($int); } /** * This stores the data of the plugin, attention NOT the configuration of the pluginmethod, * this function should never be triggered only called from triggered functions. * * @author Max Milbers * @param array $values array or object with the data to store * @param string $tableName When different then the default of the plugin, provid it here * @param string $tableKey an additionally unique key */ protected function storePluginInternalData (&$values, $primaryKey = 0, $id = 0, $preload = FALSE) { if ($primaryKey === 0) { $primaryKey = $this->_tablepkey; } if ($this->_vmpItable === 0 or $id==0) { $this->_vmpItable = $this->createPluginTableObject ($this->_tablename, $this->tableFields, $primaryKey, $this->_tableId, $this->_loggable); } $this->_vmpItable->bindChecknStore ($values, $preload); //vmdebug('storePluginInternalData',$values,$this->_vmpItable); $errors = $this->_vmpItable->getErrors (); if (!empty($errors)) { foreach ($errors as $error) { vmError ($error); } } return $values; } /** * This loads the data stored by the plugin before, NOT the configuration of the method, * this function should never be triggered only called from triggered functions. * * @param int $id * @param string $primaryKey */ protected function getPluginInternalData ($id, $primaryKey = 0) { if ($primaryKey === 0) { $primaryKey = $this->_tablepkey; } if ($this->_vmpItable === 0) { $this->_vmpItable = $this->createPluginTableObject ($this->_tablename, $this->tableFields, $primaryKey, $this->_tableId, $this->_loggable); } // vmdebug('getPluginInternalData $id '.$id.' and $primaryKey '.$primaryKey); return $this->_vmpItable->load ($id); } /** * @param $tableName * @param $tableFields * @param $primaryKey * @param $tableId * @param bool $loggable * @return VmTableData */ protected function createPluginTableObject ($tableName, $tableFields, $primaryKey, $tableId, $loggable = FALSE) { if (!class_exists ('VmTableData')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'vmtabledata.php'); } $db = JFactory::getDBO (); $table = new VmTableData($tableName, $tableId, $db); foreach ($tableFields as $field) { $table->$field = 0; } if ($primaryKey !== 0) { $table->setPrimaryKey ($primaryKey); } if ($loggable) { $table->setLoggable (); } if($this->_cryptedFields){ $this->_vmpCtable->setCryptedFields($this->_cryptedFields); } if (!$this->_tableChecked) { $this->onStoreInstallPluginTable ($this->_psType); $this->_tableChecked = TRUE; } return $table; } /** * @param $id * @param int $primaryKey * @return mixed */ protected function removePluginInternalData ($id, $primaryKey = 0) { if ($primaryKey === 0) { $primaryKey = $this->_tablepkey; } if ($this->_vmpItable === 0) { $this->_vmpItable = $this->createPluginTableObject ($this->_tablename, $this->tableFields, $primaryKey, $this->_tableId, $this->_loggable); } vmdebug ('removePluginInternalData $id ' . $id . ' and $primaryKey ' . $primaryKey); return $this->_vmpItable->delete ($id); } /** * Get the path to a layout for a type * * @param string $type The name of the type * @param string $layout The name of the type layout. If alternative * layout, in the form template:filename. * @param array $viewData The data you want to use in the layout * can be an object/array/string... to reuse in the template * @return string The path to the type layout * original from libraries\joomla\application\module\helper.php * @since 11.1 * @author Patrick Kohl, Valérie Isaksen */ public function renderByLayout ($layout = 'default', $viewData = NULL, $name = NULL, $psType = NULL) { if ($name === NULL) { $name = $this->_name; } if ($psType === NULL) { $psType = $this->_psType; } $layout = vmPlugin::_getLayoutPath ($name, 'vm' . $psType, $layout); ob_start (); include ($layout); return ob_get_clean (); } /** * Note: We have 2 subfolders for versions > J15 for 3rd parties developers, to avoid 2 installers * * @author Patrick Kohl, Valérie Isaksen */ private function _getLayoutPath ($pluginName, $group, $layout = 'default') { $app = JFactory::getApplication (); // get the template and default paths for the layout if (JVM_VERSION === 2) { $templatePath = JPATH_SITE . DS . 'templates' . DS . $app->getTemplate () . DS . 'html' . DS . $group . DS . $pluginName . DS . $layout . '.php'; $defaultPath = JPATH_SITE . DS . 'plugins' . DS . $group . DS . $pluginName . DS . $pluginName . DS . 'tmpl' . DS . $layout . '.php'; } else { $templatePath = JPATH_SITE . DS . 'templates' . DS . $app->getTemplate () . DS . 'html' . DS . $group . DS . $pluginName . DS . $layout . '.php'; $defaultPath = JPATH_SITE . DS . 'plugins' . DS . $group . DS . $pluginName . DS . 'tmpl' . DS . $layout . '.php'; } // if the site template has a layout override, use it jimport ('joomla.filesystem.file'); if (JFile::exists ($templatePath)) { return $templatePath; } else { return $defaultPath; } } } plugins/vmpsplugin.php000066600000130570151374526160011166 0ustar00_tablepkey = 'id'; //virtuemart_order_id'; $this->_idName = 'virtuemart_' . $this->_psType . 'method_id'; $this->_configTable = '#__virtuemart_' . $this->_psType . 'methods'; $this->_configTableFieldName = $this->_psType . '_params'; $this->_configTableFileName = $this->_psType . 'methods'; $this->_configTableClassName = 'Table' . ucfirst ($this->_psType) . 'methods'; //TablePaymentmethods // $this->_configTableIdName = $this->_psType.'_jplugin_id'; $this->_loggable = TRUE; $this->_tableChecked = TRUE; } public function getVarsToPush () { $black_list = array('spacer'); $data = array(); if (JVM_VERSION === 2) { $filename = JPATH_SITE . '/plugins/' . $this->_type . '/' . $this->_name . '/' . $this->_name . '.xml'; } else { $filename = JPATH_SITE . '/plugins/' . $this->_type . '/' . $this->_name . '.xml'; } // Check of the xml file exists $filePath = JPath::clean ($filename); if (is_file ($filePath)) { $xml = JFactory::getXMLParser ('simple'); $result = $xml->loadFile ($filename); if ($result) { if ($params = $xml->document->params) { foreach ($params as $param) { if ($param->_name = "params") { if ($children = $param->_children) { foreach ($children as $child) { if (isset($child->_attributes['name'])) { $data[$child->_attributes['name']] = array('', 'char'); $result = TRUE; } } } } } } } } return $data; } /** * check if it is the correct type * * @param string $psType either payment or shipment * @return boolean */ public function selectedThisType ($psType) { if ($this->_psType <> $psType) { return FALSE; } else { return TRUE; } } /** * Create the table for this plugin if it does not yet exist. * This functions checks if the called plugin is active one. * When yes it is calling the standard method to create the tables * * @author Valérie Isaksen * */ protected function onStoreInstallPluginTable ($jplugin_id, $name = FALSE) { if ($res = $this->selectedThisByJPluginId ($jplugin_id)) { parent::onStoreInstallPluginTable ($this->_psType); } return $res; } /** * This event is fired after the payment method has been selected. It can be used to store * additional payment info in the cart. * * @author Max Milbers * @author Valérie isaksen * * @param VirtueMartCart $cart: the actual cart * @return null if the payment was not selected, true if the data is valid, error message if the data is not vlaid * */ public function onSelectCheck (VirtueMartCart $cart) { $idName = $this->_idName; //vmdebug('OnSelectCheck',$idName); if (!$this->selectedThisByMethodId ($cart->$idName)) { return NULL; // Another method was selected, do nothing } return TRUE; // this method was selected , and the data is valid by default } /** * displayListFE * This event is fired to display the pluginmethods in the cart (edit shipment/payment) for example * * @param object $cart Cart object * @param integer $selected ID of the method selected * @return boolean True on success, false on failures, null when this plugin was not selected. * On errors, JError::raiseWarning (or JError::raiseError) must be used to set a message. * * @author Valerie Isaksen * @author Max Milbers */ public function displayListFE (VirtueMartCart $cart, $selected = 0, &$htmlIn) { if ($this->getPluginMethods ($cart->vendorId) === 0) { if (empty($this->_name)) { vmAdminInfo ('displayListFE cartVendorId=' . $cart->vendorId); $app = JFactory::getApplication (); $app->enqueueMessage (JText::_ ('COM_VIRTUEMART_CART_NO_' . strtoupper ($this->_psType))); return FALSE; } else { return FALSE; } } $html = array(); $method_name = $this->_psType . '_name'; foreach ($this->methods as $method) { if ($this->checkConditions ($cart, $method, $cart->pricesUnformatted)) { //$methodSalesPrice = $this->calculateSalesPrice ($cart, $method, $cart->pricesUnformatted); /* Because of OPC: the price must not be overwritten directly in the cart */ $pricesUnformatted= $cart->pricesUnformatted; $methodSalesPrice = $this->setCartPrices ($cart, $pricesUnformatted,$method); $method->$method_name = $this->renderPluginName ($method); $html [] = $this->getPluginHtml ($method, $selected, $methodSalesPrice); } } if (!empty($html)) { $htmlIn[] = $html; return TRUE; } return FALSE; } /* * onSelectedCalculatePrice * Calculate the price (value, tax_id) of the selected method * It is called by the calculator * This function does NOT to be reimplemented. If not reimplemented, then the default values from this function are taken. * @author Valerie Isaksen * @cart: VirtueMartCart the current cart * @cart_prices: array the new cart prices * @return null if the method was not selected, false if the shipping rate is not valid any more, true otherwise * */ public function onSelectedCalculatePrice (VirtueMartCart $cart, array &$cart_prices, &$cart_prices_name) { $id = $this->_idName; //vmTime('onSelectedCalculatePrice before test '.$cart->$id,'prepareCartData'); if (!($method = $this->selectedThisByMethodId ($cart->$id))) { return NULL; // Another method was selected, do nothing } if (!($method = $this->getVmPluginMethod ($cart->$id))) { return NULL; } $cart_prices_name = ''; $cart_prices['cost'] = 0; if (!$this->checkConditions ($cart, $method, $cart_prices)) { return FALSE; } $cart_prices_name = $this->renderPluginName ($method); $this->setCartPrices ($cart, $cart_prices, $method); return TRUE; } /** * onCheckAutomaticSelected * Checks how many plugins are available. If only one, the user will not have the choice. Enter edit_xxx page * The plugin must check first if it is the correct type * * @author Valerie Isaksen * @param VirtueMartCart cart: the cart object * @return null if no plugin was found, 0 if more then one plugin was found, virtuemart_xxx_id if only one plugin is found * */ function onCheckAutomaticSelected (VirtueMartCart $cart, array $cart_prices = array(), &$methodCounter = 0) { $virtuemart_pluginmethod_id = 0; $nbMethod = $this->getSelectable ($cart, $virtuemart_pluginmethod_id, $cart_prices); $methodCounter += $nbMethod; if ($nbMethod == NULL) { return NULL; } else { if ($nbMethod == 1) { return $virtuemart_pluginmethod_id; } else { return 0; } } } /** * This method is fired when showing the order details in the frontend. * It displays the method-specific data. * * @param integer $order_id The order ID * @return mixed Null for methods that aren't active, text (HTML) otherwise * @author Max Milbers * @author Valerie Isaksen */ protected function onShowOrderFE ($virtuemart_order_id, $virtuemart_method_id, &$method_info) { if (!($this->selectedThisByMethodId ($virtuemart_method_id))) { return NULL; } $method_info = $this->getOrderMethodNamebyOrderId ($virtuemart_order_id); } /** * * @author Valerie Isaksen * @author Max Milbers * @param int $virtuemart_order_id * @return string pluginName from the plugin table */ private function getOrderMethodNamebyOrderId ($virtuemart_order_id) { $db = JFactory::getDBO (); $q = 'SELECT * FROM `' . $this->_tablename . '` ' . 'WHERE `virtuemart_order_id` = ' . $virtuemart_order_id; $db->setQuery ($q); $err =$db->getErrorMsg (); if (!($pluginInfo = $db->loadObject ())) { vmdebug ('Attention, ' . $this->_tablename . ' has not any entry for order_id = '.$virtuemart_order_id); if(!empty($err)){ vmWarn ('Attention, ' . $this->_tablename . ' has not any entry for order_id = '.$virtuemart_order_id. ' err = '.$err); } return NULL; } $idName = $this->_psType . '_name'; return $pluginInfo->$idName; } /** * * @author Valerie Isaksen * @author Max Milbers * @param int $virtuemart_order_id * @return string pluginName from the plugin table */ private function getOrderPluginNamebyOrderId ($virtuemart_order_id) { $db = JFactory::getDBO (); $q = 'SELECT * FROM `' . $this->_tablename . '` ' . 'WHERE `virtuemart_order_id` = ' . $virtuemart_order_id; $db->setQuery ($q); if (!($pluginInfo = $db->loadObject ())) { vmWarn (500, $q . " getOrderPluginNamebyOrderId " . $db->getErrorMsg ()); return NULL; } $idName = $this->_idName; return $pluginInfo->$idName; } /** * check if it is the correct element * * @param string $element either standard or paypal * @return boolean */ public function selectedThisElement ($element) { if ($this->_name <> $element) { return FALSE; } else { return TRUE; } } /** * This method is fired when showing the order details in the backend. * It displays the the payment method-specific data. * All plugins *must* reimplement this method. * * @param integer $_virtuemart_order_id The order ID * @param integer $_paymethod_id Payment method used for this order * @return mixed Null when for payment methods that were not selected, text (HTML) otherwise * @author Max Milbers * @author Valerie Isaksen */ function onShowOrderBE ($_virtuemart_order_id, $_method_id) { return NULL; } /** * This method is fired when showing when priting an Order * It displays the the payment method-specific data. * * @param integer $_virtuemart_order_id The order ID * @param integer $method_id method used for this order * @return mixed Null when for payment methods that were not selected, text (HTML) otherwise * @author Valerie Isaksen */ function onShowOrderPrint ($order_number, $method_id) { if (!$this->selectedThisByMethodId ($method_id)) { return NULL; // Another method was selected, do nothing } if (!($order_name = $this->getOrderPluginName ($order_number, $method_id))) { return NULL; } VmConfig::loadJLang('com_virtuemart'); $html = '' . "\n" . ' ' . "\n" . ' ' . "\n" . ' ' . "\n" . ' ' . "\n" . ' ' . "\n" . ' ' . "\n" . ' ' . "\n" . ' ' . "\n" . ' ' . "\n"; $html .= '
          ' . JText::_ ('COM_VIRTUEMART_ORDER_PRINT_' . strtoupper($this->_type) . '_LBL') . '
          ' . JText::_ ('COM_VIRTUEMART_ORDER_PRINT_' . strtoupper($this->_type) . '_LBL') . ': ' . $order_name . '
          ' . "\n"; return $html; } private function getOrderPluginName ($order_number, $pluginmethod_id) { $db = JFactory::getDBO (); $q = 'SELECT * FROM `' . $this->_tablename . '` WHERE `order_number` = "' . $order_number . '" AND `' . $this->_idName . '` =' . $pluginmethod_id; $db->setQuery ($q); if (!($order = $db->loadObject ())) { return NULL; } $plugin_name = $this->_psType . '_name'; return $order->$plugin_name; } /** * Save updated order data to the method specific table * * @param array $_formData Form data * @return mixed, True on success, false on failures (the rest of the save-process will be * skipped!), or null when this method is not actived. * @author Oscar van Eijk */ public function onUpdateOrder ($formData) { return NULL; } /** * Save updated orderline data to the method specific table * * @param array $_formData Form data * @return mixed, True on success, false on failures (the rest of the save-process will be * skipped!), or null when this method is not actived. * @author Oscar van Eijk */ public function onUpdateOrderLine ($formData) { return NULL; } /** * OnEditOrderLineBE * This method is fired when editing the order line details in the backend. * It can be used to add line specific package codes * * @param integer $_orderId The order ID * @param integer $_lineId * @return mixed Null for method that aren't active, text (HTML) otherwise * @author Oscar van Eijk */ public function onEditOrderLineBE ($orderId, $lineId) { return NULL; } /** * This method is fired when showing the order details in the frontend, for every orderline. * It can be used to display line specific package codes, e.g. with a link to external tracking and * tracing systems * * @param integer $_orderId The order ID * @param integer $_lineId * @return mixed Null for method that aren't active, text (HTML) otherwise * @author Oscar van Eijk */ public function onShowOrderLineFE ($orderId, $lineId) { return NULL; } /** * This event is fired when the method notifies you when an event occurs that affects the order. * Typically, the events represents for payment authorizations, Fraud Management Filter actions and other actions, * such as refunds, disputes, and chargebacks. * * NOTE for Plugin developers: * If the plugin is NOT actually executed (not the selected payment method), this method must return NULL * * @param $return_context: it was given and sent in the payment form. The notification should return it back. * Used to know which cart should be emptied, in case it is still in the session. * @param int $virtuemart_order_id : payment order id * @param char $new_status : new_status for this order id. * @return mixed Null when this method was not selected, otherwise the true or false * * @author Valerie Isaksen * */ public function onNotification () { return NULL; } /** * OnResponseReceived * This event is fired when the method returns to the shop after the transaction * * the method itself should send in the URL the parameters needed * NOTE for Plugin developers: * If the plugin is NOT actually executed (not the selected payment method), this method must return NULL * * @param int $virtuemart_order_id : should return the virtuemart_order_id * @param text $html: the html to display * @return mixed Null when this method was not selected, otherwise the true or false * * @author Valerie Isaksen * */ function onResponseReceived (&$virtuemart_order_id, &$html) { return NULL; } function getDebug () { return $this->_debug; } function setDebug ($params) { return $this->_debug = $params->get ('debug', 0); } /** * Get Plugin Data for a go given plugin ID * * @author Valérie Isaksen * @param int $pluginmethod_id The method ID * @return method data */ final protected function getPluginMethod ($method_id) { if (!$this->selectedThisByMethodId ($method_id)) { return FALSE; } return $this->getVmPluginMethod ($method_id); } /** * Fill the array with all plugins found with this plugin for the current vendor * * @return True when plugins(s) was (were) found for this vendor, false otherwise * @author Oscar van Eijk * @author max Milbers * @author valerie Isaksen */ protected function getPluginMethods ($vendorId) { if (!class_exists ('VirtueMartModelUser')) { require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'user.php'); } $usermodel = VmModel::getModel ('user'); $user = $usermodel->getUser (); $user->shopper_groups = (array)$user->shopper_groups; $db = JFactory::getDBO (); $select = 'SELECT l.*, v.*, '; if (JVM_VERSION === 1) { $extPlgTable = '#__plugins'; $extField1 = 'id'; $extField2 = 'element'; $select .= 'j.`' . $extField1 . '`, j.`name`, j.`element`, j.`folder`, j.`client_id`, j.`access`, j.`params`, j.`checked_out`, j.`checked_out_time`, s.virtuemart_shoppergroup_id '; } else { $extPlgTable = '#__extensions'; $extField1 = 'extension_id'; $extField2 = 'element'; $select .= 'j.`' . $extField1 . '`,j.`name`, j.`type`, j.`element`, j.`folder`, j.`client_id`, j.`enabled`, j.`access`, j.`protected`, j.`manifest_cache`, j.`params`, j.`custom_data`, j.`system_data`, j.`checked_out`, j.`checked_out_time`, j.`state`, s.virtuemart_shoppergroup_id '; } if(!defined(VMLANG)){ VmConfig::setdbLanguageTag(); } $q = $select . ' FROM `#__virtuemart_' . $this->_psType . 'methods_' . VMLANG . '` as l '; $q .= ' JOIN `#__virtuemart_' . $this->_psType . 'methods` AS v USING (`virtuemart_' . $this->_psType . 'method_id`) '; $q .= ' LEFT JOIN `' . $extPlgTable . '` as j ON j.`' . $extField1 . '` = v.`' . $this->_psType . '_jplugin_id` '; $q .= ' LEFT OUTER JOIN `#__virtuemart_' . $this->_psType . 'method_shoppergroups` AS s ON v.`virtuemart_' . $this->_psType . 'method_id` = s.`virtuemart_' . $this->_psType . 'method_id` '; $q .= ' WHERE v.`published` = "1" AND j.`' . $extField2 . '` = "' . $this->_name . '" AND (v.`virtuemart_vendor_id` = "' . $vendorId . '" OR v.`virtuemart_vendor_id` = "0") AND ('; foreach ($user->shopper_groups as $groups) { $q .= ' s.`virtuemart_shoppergroup_id`= "' . (int)$groups . '" OR'; } $q .= ' (s.`virtuemart_shoppergroup_id`) IS NULL ) GROUP BY v.`virtuemart_' . $this->_psType . 'method_id` ORDER BY v.`ordering`'; $db->setQuery ($q); $this->methods = $db->loadObjectList (); $err = $db->getErrorMsg (); if (!empty($err)) { vmError ('Error reading getPluginMethods ' . $err); } if ($this->methods) { foreach ($this->methods as $method) { VmTable::bindParameterable ($method, $this->_xParams, $this->_varsToPushParam); } } return count ($this->methods); } /** * Get Method Data for a given Payment ID * * @author Valérie Isaksen * @param int $virtuemart_order_id The order ID * @return $methodData */ final protected function getDataByOrderId ($virtuemart_order_id) { $db = JFactory::getDBO (); $q = 'SELECT * FROM `' . $this->_tablename . '` ' . 'WHERE `virtuemart_order_id` = ' . $virtuemart_order_id; $db->setQuery ($q); $methodData = $db->loadObject (); return $methodData; } /** * Get Method Datas for a given Payment ID * * @author Valérie Isaksen * @param int $virtuemart_order_id The order ID * @return $methodData */ final protected function getDatasByOrderId ($virtuemart_order_id) { $db = JFactory::getDBO (); $q = 'SELECT * FROM `' . $this->_tablename . '` ' . 'WHERE `virtuemart_order_id` = ' . $virtuemart_order_id; $db->setQuery ($q); $methodData = $db->loadObjectList (); return $methodData; } /** * Get the total weight for the order, based on which the proper shipping rate * can be selected. * * @param object $cart Cart object * @return float Total weight for the order * @author Oscar van Eijk */ protected function getOrderWeight (VirtueMartCart $cart, $to_weight_unit) { static $weight = 0.0; if(count($cart->products)>0 and empty($weight)){ foreach ($cart->products as $product) { $weight += (ShopFunctions::convertWeightUnit ($product->product_weight, $product->product_weight_uom, $to_weight_unit) * $product->quantity); } } return $weight; } /** * getThisName * Get the name of the method * * @param int $id The method ID * @author Valérie Isaksen * @return string Shipment name */ final protected function getThisName ($virtuemart_method_id) { $db = JFactory::getDBO (); $q = 'SELECT `' . $this->_psType . '_name` ' . 'FROM #__virtuemart_' . $this->_psType . 'methods ' . 'WHERE ' . $this->_idName . ' = "' . $virtuemart_method_id . '" '; $db->setQuery ($q); return $db->loadResult (); // TODO Error check } /** * Extends the standard function in vmplugin. Extendst the input data by virtuemart_order_id * Calls the parent to execute the write operation * * @author Max Milbers * @param array $_values * @param string $_table */ protected function storePSPluginInternalData ($values, $primaryKey = 0, $preload = FALSE) { if (!class_exists ('VirtueMartModelOrders')) { require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'orders.php'); } if (!isset($values['virtuemart_order_id'])) { $values['virtuemart_order_id'] = VirtueMartModelOrders::getOrderIdByOrderNumber ($values['order_number']); } return $this->storePluginInternalData ($values, $primaryKey, 0, $preload); } /** * Something went wrong, Send notification to all administrators * * @param string subject of the mail * @param string message */ protected function sendEmailToVendorAndAdmins ($subject = NULL, $message = NULL) { // recipient is vendor and admin $vendorId = 1; $vendorModel = VmModel::getModel('vendor'); $vendor = $vendorModel->getVendor($vendorId); $vendorEmail = $vendorModel->getVendorEmail($vendorId); $vendorName = $vendorModel->getVendorName($vendorId); VmConfig::loadJLang('com_virtuemart'); if ($subject == NULL) { $subject = JText::sprintf('COM_VIRTUEMART_ERROR_SUBJECT', $this->_name, $vendor->vendor_store_name); } if ($message == NULL) { $link=juri::root().'administrator/index.php?option=com_virtuemart&view=log&task=edit&logfile='.$this->getLogFilename().VmConfig::LOGFILEEXT; //$logFileLink=''.$this->getLogFilename().VmConfig::LOGFILEEXT.''; $message = JText::sprintf('COM_VIRTUEMART_ERROR_BODY', $subject, $link); } JUtility::sendMail($vendorEmail, $vendorName, $vendorEmail, $subject, $message); if (JVM_VERSION === 1) { //get all super administrator $query = 'SELECT name, email, sendEmail' . ' FROM #__users' . ' WHERE LOWER( usertype ) = "super administrator"'; } else { $query = 'SELECT name, email, sendEmail' . ' FROM #__users' . ' WHERE sendEmail=1'; } $db = JFactory::getDBO(); $db->setQuery($query); $rows = $db->loadObjectList(); $subject = html_entity_decode($subject, ENT_QUOTES); // get superadministrators id foreach ($rows as $row) { if ($row->sendEmail) { $message = html_entity_decode($message, ENT_QUOTES); JUtility::sendMail($vendorEmail, $vendorName, $row->email, $subject, $message); } } } /** * displays the logos of a VirtueMart plugin * * @author Valerie Isaksen * @author Max Milbers * @param array $logo_list * @return html with logos */ protected function displayLogos ($logo_list) { $img = ""; if (!(empty($logo_list))) { $url = JURI::root () . 'images/stories/virtuemart/' . $this->_psType . '/'; if (!is_array ($logo_list)) { $logo_list = (array)$logo_list; } foreach ($logo_list as $logo) { $alt_text = substr ($logo, 0, strpos ($logo, '.')); $img .= ' '; } } return $img; } /** * @param $plugin plugin */ protected function renderPluginName ($plugin) { $return = ''; $plugin_name = $this->_psType . '_name'; $plugin_desc = $this->_psType . '_desc'; $description = ''; // $params = new JParameter($plugin->$plugin_params); // $logo = $params->get($this->_psType . '_logos'); $logosFieldName = $this->_psType . '_logos'; $logos = $plugin->$logosFieldName; if (!empty($logos)) { $return = $this->displayLogos ($logos) . ' '; } if (!empty($plugin->$plugin_desc)) { $description = '' . $plugin->$plugin_desc . ''; } $pluginName = $return . '' . $plugin->$plugin_name . '' . $description; return $pluginName; } protected function getPluginHtml ($plugin, $selectedPlugin, $pluginSalesPrice) { $pluginmethod_id = $this->_idName; $pluginName = $this->_psType . '_name'; if ($selectedPlugin == $plugin->$pluginmethod_id) { $checked = 'checked="checked"'; } else { $checked = ''; } if (!class_exists ('CurrencyDisplay')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php'); } $currency = CurrencyDisplay::getInstance (); $costDisplay = ""; if ($pluginSalesPrice) { $costDisplay = $currency->priceDisplay ($pluginSalesPrice); $costDisplay = ' (' . JText::_ ('COM_VIRTUEMART_PLUGIN_COST_DISPLAY') . $costDisplay . ")"; } $html = '\n" . '\n"; return $html; } /** * */ protected function getHtmlHeaderBE () { $class = "class='key'"; $html = ' ' . "\n" . ' ' . "\n" . ' ' . JText::_ ('COM_VIRTUEMART_ORDER_PRINT_' . strtoupper($this->_psType) . '_LBL') . '' . "\n" . ' ' . "\n" . ' ' . "\n"; return $html; } /** * */ protected function getHtmlRow ($key, $value, $class = '') { $lang = JFactory::getLanguage (); $key_text = ''; $complete_key = strtoupper ($this->_type . '_' . $key); // vmdebug('getHtmlRow',$key,$complete_key); // vmdebug('getHtmlRow',$key,$complete_key); if ($lang->hasKey($complete_key)) { $key_text = JText::_ ($complete_key); } else { $key_text = JText::_ ($key); } $more_key = strtoupper($complete_key . '_' . $value); if ($lang->hasKey ($more_key)) { $value .= " (" . JText::_ ($more_key) . ")"; } $html = "\n" . $key_text . "\n " . $value . "\n\n"; return $html; } function getHtmlRowBE ($key, $value) { return $this->getHtmlRow ($key, $value, "class='key'"); } /** * getSelectable * This method returns the number of valid methods * * @param VirtueMartCart cart: the cart object * @param $method_id eg $virtuemart_shipmentmethod_id * */ function getSelectable (VirtueMartCart $cart, &$method_id, $cart_prices) { $nbMethod = 0; if ($this->getPluginMethods ($cart->vendorId) === 0) { return FALSE; } foreach ($this->methods as $method) { if ($nb = (int)$this->checkConditions ($cart, $method, $cart_prices)) { $nbMethod = $nbMethod + $nb; $idName = $this->_idName; $method_id = $method->$idName; } } return $nbMethod; } /** * * Enter description here ... * * @author Valerie Isaksen * @author Max Milbers * @param VirtueMartCart $cart * @param int $method * @param array $cart_prices */ protected function checkConditions ($cart, $method, $cart_prices) { vmAdminInfo ('vmPsPlugin function checkConditions not overriden, gives always back FALSE'); return FALSE; } /** * @param $method */ function convert_condition_amount (&$method) { $method->min_amount = (float)str_replace(',','.',$method->min_amount); $method->max_amount = (float)str_replace(',','.',$method->max_amount); } /** * @param $method * @param bool $getCurrency */ static function getPaymentCurrency (&$method, $getCurrency = FALSE) { if (!isset($method->payment_currency) or empty($method->payment_currency) or !$method->payment_currency or $getCurrency) { // if (!class_exists('VirtueMartModelVendor')) require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'vendor.php'); $vendorId = 1; //VirtueMartModelVendor::getLoggedVendor(); $db = JFactory::getDBO (); $q = 'SELECT `vendor_currency` FROM `#__virtuemart_vendors` WHERE `virtuemart_vendor_id`=' . $vendorId; $db->setQuery ($q); $method->payment_currency = $db->loadResult (); } } function getEmailCurrency (&$method) { if (!isset($method->email_currency) or $method->email_currency=='vendor') { // if (!class_exists('VirtueMartModelVendor')) require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'vendor.php'); $vendorId = 1; //VirtueMartModelVendor::getLoggedVendor(); $db = JFactory::getDBO (); $q = 'SELECT `vendor_currency` FROM `#__virtuemart_vendors` WHERE `virtuemart_vendor_id`=' . $vendorId; $db->setQuery ($q); return $db->loadResult (); } else { return $method->payment_currency; // either the vendor currency, either same currency as payment } } /** * displayTaxRule * * @param int $tax_id * @return string $html: */ function displayTaxRule ($tax_id) { $html = ''; $db = JFactory::getDBO (); if (!empty($tax_id)) { $q = 'SELECT * FROM #__virtuemart_calcs WHERE `virtuemart_calc_id`="' . $tax_id . '" '; $db->setQuery ($q); $taxrule = $db->loadObject (); $html = $taxrule->calc_name . '(' . $taxrule->calc_kind . ':' . $taxrule->calc_value_mathop . $taxrule->calc_value . ')'; } return $html; } function getCosts (VirtueMartCart $cart, $method, $cart_prices) { if (preg_match ('/%$/', $method->cost_percent_total)) { $method->cost_percent_total = substr ($method->cost_percent_total, 0, -1); } else { $method->cost_percent_total = $method->cost_percent_total; } $cartPrice = !empty($cart_prices['withTax'])? $cart_prices['withTax']:$cart_prices['salesPrice']; return ($method->cost_per_transaction + ($cartPrice * $method->cost_percent_total * 0.01)); } /** * Get the cart amount for checking conditions if the payment conditions are fullfilled * @param $cart_prices * @return mixed */ function getCartAmount($cart_prices){ if(empty($cart_prices['salesPrice'])) $cart_prices['salesPrice'] = 0.0; $cartPrice = !empty($cart_prices['withTax'])? $cart_prices['withTax']:$cart_prices['salesPrice']; if(empty($cart_prices['salesPriceShipment'])) $cart_prices['salesPriceShipment'] = 0.0; if(empty($cart_prices['salesPriceCoupon'])) $cart_prices['salesPriceCoupon'] = 0.0; $amount= $cartPrice + $cart_prices['salesPriceShipment'] + $cart_prices['salesPriceCoupon'] ; if ($amount <= 0) $amount=0; return $amount; } /** * update the plugin cart_prices * * @author Valérie Isaksen * * @param $cart_prices: $cart_prices['salesPricePayment'] and $cart_prices['paymentTax'] updated. Displayed in the cart. * @param $value : fee * @param $tax_id : tax id */ function setCartPrices (VirtueMartCart $cart, &$cart_prices, $method, $progressive = true) { if (!class_exists ('calculationHelper')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'calculationh.php'); } $_psType = ucfirst ($this->_psType); $calculator = calculationHelper::getInstance (); $cart_prices[$this->_psType . 'Value'] = $calculator->roundInternal ($this->getCosts ($cart, $method, $cart_prices), 'salesPrice'); if($this->_psType=='payment'){ $cartTotalAmountOrig=$this->getCartAmount($cart_prices); if(!$progressive){ //Simple $cartTotalAmount=($cartTotalAmountOrig + $method->cost_per_transaction) * (1 +($method->cost_percent_total * 0.01)); vmdebug('Simple $cartTotalAmount = ('.$cartTotalAmountOrig.' + '.$method->cost_per_transaction.') * (1 + ('.$method->cost_percent_total.' * 0.01)) = '.$cartTotalAmount ); vmdebug('Simple $cartTotalAmount = '.($cartTotalAmountOrig + $method->cost_per_transaction).' * '. (1 + $method->cost_percent_total * 0.01) .' = '.$cartTotalAmount ); } else { //progressive $cartTotalAmount = ($cartTotalAmountOrig + $method->cost_per_transaction) / (1 -($method->cost_percent_total * 0.01)); vmdebug('Progressive $cartTotalAmount = ('.$cartTotalAmountOrig.' + '.$method->cost_per_transaction.') / (1 - ('.$method->cost_percent_total.' * 0.01)) = '.$cartTotalAmount ); vmdebug('Progressive $cartTotalAmount = '.($cartTotalAmountOrig + $method->cost_per_transaction) .' / '. (1 - $method->cost_percent_total * 0.01) .' = '.$cartTotalAmount ); } $cart_prices[$this->_psType . 'Value'] = $cartTotalAmount - $cartTotalAmountOrig; } $taxrules = array(); if(isset($method->tax_id) and (int)$method->tax_id === -1){ } else if (!empty($method->tax_id)) { $cart_prices[$this->_psType . '_calc_id'] = $method->tax_id; $db = JFactory::getDBO (); $q = 'SELECT * FROM #__virtuemart_calcs WHERE `virtuemart_calc_id`="' . $method->tax_id . '" '; $db->setQuery ($q); $taxrules = $db->loadAssocList (); if(!empty($taxrules) ){ foreach($taxrules as &$rule){ if(!isset($rule['subTotal'])) $rule['subTotal'] = 0; if(!isset($rule['taxAmount'])) $rule['taxAmount'] = 0; $rule['subTotalOld'] = $rule['subTotal']; $rule['taxAmountOld'] = $rule['taxAmount']; $rule['taxAmount'] = 0; $rule['subTotal'] = $cart_prices[$this->_psType . 'Value']; } } } else { $taxrules = array_merge($calculator->_cartData['VatTax'],$calculator->_cartData['taxRulesBill']); if(!empty($taxrules) ){ $denominator = 0.0; foreach($taxrules as &$rule){ //$rule['numerator'] = $rule['calc_value']/100.0 * $rule['subTotal']; if(!isset($rule['subTotal'])) $rule['subTotal'] = 0; if(!isset($rule['taxAmount'])) $rule['taxAmount'] = 0; $denominator += ($rule['subTotal']-$rule['taxAmount']); $rule['subTotalOld'] = $rule['subTotal']; $rule['subTotal'] = 0; $rule['taxAmountOld'] = $rule['taxAmount']; $rule['taxAmount'] = 0; //$rule['subTotal'] = $cart_prices[$this->_psType . 'Value']; } if(empty($denominator)){ $denominator = 1; } foreach($taxrules as &$rule){ $frac = ($rule['subTotalOld']-$rule['taxAmountOld'])/$denominator; $rule['subTotal'] = $cart_prices[$this->_psType . 'Value'] * $frac; vmdebug('Part $denominator '.$denominator.' $frac '.$frac,$rule['subTotal']); } } } if(empty($method->cost_per_transaction)) $method->cost_per_transaction = 0.0; if(empty($method->cost_percent_total)) $method->cost_percent_total = 0.0; if (count ($taxrules) > 0 ) { $cart_prices['salesPrice' . $_psType] = $calculator->roundInternal ($calculator->executeCalculation ($taxrules, $cart_prices[$this->_psType . 'Value'],true,false), 'salesPrice'); //vmdebug('I am in '.get_class($this).' and have this rules now',$taxrules,$cart_prices[$this->_psType . 'Value'],$cart_prices['salesPrice' . $_psType]); $cart_prices[$this->_psType . 'Tax'] = $calculator->roundInternal (($cart_prices['salesPrice' . $_psType] - $cart_prices[$this->_psType . 'Value']), 'salesPrice'); reset($taxrules); $taxrule = current($taxrules); $cart_prices[$this->_psType . '_calc_id'] = $taxrule['virtuemart_calc_id']; foreach($taxrules as &$rule){ if(isset($rule['subTotalOld'])) $rule['subTotal'] += $rule['subTotalOld']; if(isset($rule['taxAmountOld'])) $rule['taxAmount'] += $rule['taxAmountOld']; } } else { $cart_prices['salesPrice' . $_psType] = $cart_prices[$this->_psType . 'Value']; $cart_prices[$this->_psType . 'Tax'] = 0; $cart_prices[$this->_psType . '_calc_id'] = 0; } return $cart_prices['salesPrice' . $_psType]; } /** * calculateSalesPrice * * @param $value * @param $tax_id: tax id * @return $salesPrice */ protected function calculateSalesPrice ($cart, $method, $cart_prices) { return $this -> setCartPrices($cart,$cart_prices,$method); } public function processConfirmedOrderPaymentResponse ($returnValue, $cart, $order, $html, $payment_name, $new_status = '') { if ($returnValue == 1) { //We delete the old stuff // send the email only if payment has been accepted // update status $modelOrder = VmModel::getModel ('orders'); $order['order_status'] = $new_status; $order['customer_notified'] = 1; $order['comments'] = ''; $modelOrder->updateStatusForOneOrder ($order['details']['BT']->virtuemart_order_id, $order, TRUE); $order['paymentName'] = $payment_name; //if(!class_exists('shopFunctionsF')) require(JPATH_VM_SITE.DS.'helpers'.DS.'shopfunctionsf.php'); //shopFunctionsF::sentOrderConfirmedEmail($order); //We delete the old stuff $cart->emptyCart (); JRequest::setVar ('html', $html); // payment echos form, but cart should not be emptied, data is valid } elseif ($returnValue == 2) { $cart->_confirmDone = FALSE; $cart->_dataValidated = FALSE; $cart->setCartIntoSession (); JRequest::setVar ('html', $html); } elseif ($returnValue == 0) { // error while processing the payment $mainframe = JFactory::getApplication (); $mainframe->enqueueMessage ($html); $mainframe->redirect (JRoute::_ ('index.php?option=com_virtuemart&view=cart',FALSE), JText::_ ('COM_VIRTUEMART_CART_ORDERDONE_DATA_NOT_VALID')); } } /** * @param $amount * @param $currencyId * @return array */ static function getAmountInCurrency($amount, $currencyId){ if (!class_exists ('CurrencyDisplay')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php'); } $return = array(); $paymentCurrency = CurrencyDisplay::getInstance($currencyId); $return['value'] = $paymentCurrency->roundForDisplay($amount,$currencyId,1.0,false,2); $return['display'] = $paymentCurrency->getFormattedCurrency($return['value']) ; return $return; } /** * @param $amount * @param $currencyId * @return array */ static function getAmountValueInCurrency($amount, $currencyId){ $return= vmPSPlugin::getAmountInCurrency($amount, $currencyId); return $return['value']; } function emptyCart ($session_id = NULL, $order_number = NULL) { if (!class_exists ('VirtueMartCart')) { require(JPATH_VM_SITE . DS . 'helpers' . DS . 'cart.php'); } $this->logInfo ('Notification: emptyCart ' . $session_id, 'message'); if ($session_id != NULL and $order_number != NULL) { // Recover session from the storage session in wich the payment is done $this->emptyCartFromStorageSession ($session_id, $order_number); } else { $cart = VirtueMartCart::getCart (); $cart->emptyCart (); } return TRUE; } /* * recovers the session from Storage, and only empty the cart if it has not been done already */ function emptyCartFromStorageSession ($session_id, $order_number) { $conf = JFactory::getConfig (); $handler = $conf->get ('session_handler', 'none'); $config['session_name'] = 'site'; $name = Japplication::getHash ($config['session_name']); $options['name'] = $name; $sessionStorage = JSessionStorage::getInstance ($handler, $options); // The session store MUST be registered. $sessionStorage->register (); // reads directly the session from the storage $sessionStored = $sessionStorage->read ($session_id); if (empty($sessionStored)) { return; } $sessionStorageDecoded = self::session_decode ($sessionStored); $vm_namespace = '__vm'; $cart_name = 'vmcart'; if (array_key_exists ($vm_namespace, $sessionStorageDecoded)) { // vm session is there $vm_sessionStorage = $sessionStorageDecoded[$vm_namespace]; if (array_key_exists ($cart_name, $vm_sessionStorage)) { // vm cart session is there $sessionStorageCart = unserialize ($vm_sessionStorage[$cart_name]); // only empty the cart if the order number is still there. If not there, it means that the cart has already been emptied. if ($sessionStorageCart->order_number == $order_number) { if (!class_exists ('VirtueMartCart')) { require(JPATH_VM_SITE . DS . 'helpers' . DS . 'cart.php'); } VirtueMartCart::emptyCartValues ($sessionStorageCart); $sessionStorageDecoded[$vm_namespace][$cart_name] = serialize ($sessionStorageCart); $sessionStorageEncoded = self::session_encode ($sessionStorageDecoded); $sessionStorage->write ($session_id, $sessionStorageEncoded); } } } } private static function session_decode ($session_data) { $decoded_session = array(); $offset = 0; while ($offset < strlen ($session_data)) { if (!strstr (substr ($session_data, $offset), "|")) { return array(); } $pos = strpos ($session_data, "|", $offset); $num = $pos - $offset; $varname = substr ($session_data, $offset, $num); $offset += $num + 1; $data = unserialize (substr ($session_data, $offset)); $decoded_session[$varname] = $data; $offset += strlen (serialize ($data)); } return $decoded_session; } private static function session_encode ($session_data_array) { $encoded_session = ""; foreach ($session_data_array as $key => $session_data) { $encoded_session .= $key . "|" . serialize ($session_data); } return $encoded_session; } /** * get_passkey * Retrieve the payment method-specific encryption key * * @author Oscar van Eijk * @author Valerie Isaksen * @return mixed * @deprecated */ function get_passkey () { return TRUE; $_db = JFactory::getDBO (); $_q = 'SELECT ' . VM_DECRYPT_FUNCTION . "(secret_key, '" . ENCODE_KEY . "') as passkey " . 'FROM #__virtuemart_paymentmethods ' . "WHERE virtuemart_paymentmethod_id='" . (int)$this->_virtuemart_paymentmethod_id . "'"; $_db->setQuery ($_q); $_r = $_db->loadAssoc (); // TODO Error check return $_r['passkey']; } /** * validateVendor * Check if this plugin has methods for the current vendor. * * @author Oscar van Eijk * @param integer $_vendorId The vendor ID taken from the cart. * @return True when a id was found for this vendor, false otherwise * * @deprecated ???? */ protected function validateVendor ($_vendorId) { if (!$_vendorId) { $_vendorId = 1; } $_db = JFactory::getDBO (); if (JVM_VERSION === 1) { $_q = 'SELECT 1 ' . 'FROM #__virtuemart_' . $this->_psType . 'methods v ' . ', #__plugins j ' . 'WHERE j.`element` = "' . $this->_name . '" ' . 'AND v.`' . $this->_psType . '_jplugin_id` = j.`id` ' . 'AND v.`virtuemart_vendor_id` = "' . $_vendorId . '" ' . 'AND v.`published` = 1 '; } else { $_q = 'SELECT 1 ' . 'FROM #__virtuemart_' . $this->_psType . 'methods AS v ' . ', #__extensions AS j ' . 'WHERE j.`folder` = "' . $this->_type . '" ' . 'AND j.`element` = "' . $this->_name . '" ' . 'AND v.`' . $this->_psType . '_jplugin_id` = j.`extension_id` ' . 'AND v.`virtuemart_vendor_id` = "' . $_vendorId . '" ' . 'AND v.`published` = 1 '; } $_db->setQuery ($_q); $_r = $_db->loadAssoc (); if ($_r) { return TRUE; } else { return FALSE; } } /** * @param integer $virtuemart_order_id the id of the order */ function handlePaymentUserCancel ($virtuemart_order_id) { if ($virtuemart_order_id) { // set the order to cancel , to handle the stock correctly if (!class_exists ('VirtueMartModelOrders')) { require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'orders.php'); } $modelOrder = VmModel::getModel ('orders'); $order['order_status'] = 'X'; $order['virtuemart_order_id'] = $virtuemart_order_id; $order['customer_notified'] = 0; $order['comments'] = JText::_ ('COM_VIRTUEMART_PAYMENT_CANCELLED_BY_SHOPPER'); $modelOrder->updateStatusForOneOrder ($virtuemart_order_id, $order, TRUE); //$modelOrder->remove (array('virtuemart_order_id' => $virtuemart_order_id)); } } /** * logInfo * to help debugging Payment notification for example * Keep it for compatibilty */ protected function logInfo ($text, $type = 'message', $doLog=false) { if (!class_exists( 'VmConfig' )) require(JPATH_COMPONENT_ADMINISTRATOR.DS.'helpers'.DS.'config.php'); VmConfig::loadConfig(); if ((isset($this->_debug) and $this->_debug) OR $doLog) { $oldLogFileName= VmConfig::$logFileName; VmConfig::$logFileName =$this->getLogFileName() ; logInfo($text, $type); VmConfig::$logFileName =$oldLogFileName; } } /** * */ function getLogFileName() { $name=$this->_idName; $methodId=0; if (isset ($this->_currentMethod) ) { $methodId=$this->_currentMethod->$name; } return $this->_name. '.'.$methodId ; } /** * log all messages of type ERROR * log in case the debug option is on, and the log option is on * @param string $message the message to write * @param string $title * @param string $type message, deb-ug, info, error * @param boolean $doDebug in payment notification, we don't want to use vmdebug even if the debug option is on * */ public function debugLog($message, $title='', $type = 'message', $doDebug=true) { if ( isset($this->_currentMethod) and isset($this->_currentMethod->debug) and $this->_currentMethod->debug AND $doDebug) { //vmdebug($title, $message); } if ( isset($this->_currentMethod) and !$this->_currentMethod->log and $type !='error') { //Do not log message messages if we are not in LOG mode return; } if ( $type == 'error') { $this->sendEmailToVendorAndAdmins(); } $this->logInfo($title.': '.print_r($message,true), $type, true); } } plugins/vmcalculationplugin.php000066600000002710151374526160013034 0ustar00_tablepkey = 'virtuemart_calc_id'; $this->_tablename = '#__virtuemart_calc_plg_'. $this->_name; } protected function getPluginInternalDataCalc(&$calcData){ $datas = $this->getPluginInternalData($calcData->virtuemart_calc_id,'virtuemart_calc_id'); if($datas){ $attribsCalc = get_object_vars($datas); unset($attribsCalc['virtuemart_calc_id']); foreach($attribsCalc as $k=>$v){ $calcData->$k = $v; } } } }plugins/vmcurrencyplugin.php000066600000002010151374526160012361 0ustar00assignRef('perms', $perms); //@todo should be depended by loggedVendor $vendorId=1; $this->assignRef('vendorId', $vendorId); $db = JFactory::getDBO(); $this->SetViewTitle(); $layoutName = JRequest::getWord('layout', 'default'); if ($layoutName == 'edit') { $calc = $model->getCalc(); $this->assignRef('calc', $calc); $isNew = ($calc->virtuemart_calc_id < 1); if ($isNew) { $db = JFactory::getDBO(); //get default currency of the vendor, if not set get default of the shop $q = 'SELECT `vendor_currency` FROM `#__virtuemart_vendors` WHERE `virtuemart_vendor_id` = "'.$vendorId.'"'; $db->setQuery($q); $currency= $db->loadResult(); if(empty($currency)){ $q = 'SELECT `vendor_currency` FROM `#__virtuemart_vendors` WHERE `virtuemart_vendor_id` = "1" '; $db->setQuery($q); $currency= $db->loadResult(); $calc->calc_currency = $currency; } else { $calc->calc_currency = $currency; } } $entryPointsList = self::renderEntryPointsList($calc->calc_kind); $this->assignRef('entryPointsList',$entryPointsList); $mathOpList = self::renderMathOpList($calc->calc_value_mathop); $this->assignRef('mathOpList',$mathOpList); /* Get the category tree */ $categoryTree= null; if (isset($calc->calc_categories)){ $calc_categories = $calc->calc_categories; $categoryTree = ShopFunctions::categoryListTree($calc_categories); }else{ $categoryTree = ShopFunctions::categoryListTree(); } $this->assignRef('categoryTree', $categoryTree); $currencyModel = VmModel::getModel('currency'); $_currencies = $currencyModel->getCurrencies(); $this->assignRef('currencies', $_currencies); /* Get the shoppergroup tree */ $shopperGroupList= ShopFunctions::renderShopperGroupList($calc->virtuemart_shoppergroup_ids,True); $this->assignRef('shopperGroupList', $shopperGroupList); $countriesList = ShopFunctions::renderCountryList($calc->calc_countries,True); $this->assignRef('countriesList', $countriesList); $statesList = ShopFunctions::renderStateList($calc->virtuemart_state_ids,'', True); $this->assignRef('statesList', $statesList); $manufacturerList= ShopFunctions::renderManufacturerList($calc->virtuemart_manufacturers,true); $this->assignRef('manufacturerList', $manufacturerList); if(Vmconfig::get('multix','none')!=='none'){ $vendorList= ShopFunctions::renderVendorList($calc->virtuemart_vendor_id,false); $this->assignRef('vendorList', $vendorList); } $this->addStandardEditViewCommands(); } else { if((Vmconfig::get('multix','none')!='none') && $this->perms->check( 'admin' )){ JToolBarHelper::custom('toggle.shared.1', 'publish', 'yes', JText::_('COM_VIRTUEMART_SHARED_TOGGLE_ON'), true); JToolBarHelper::custom('toggle.shared.0', 'unpublish', 'no', JText::_('COM_VIRTUEMART_SHARED_TOGGLE_OFF'), true); } $this->addStandardDefaultViewCommands(); $this->addStandardDefaultViewLists($model); $search = JRequest::getWord('search', false); $calcs = $model->getCalcs(false, false, $search); $this->assignRef('calcs', $calcs); $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); } parent::display($tpl); } /** * Builds a list to choose the Entrypoints * When you want to add extra Entrypoints, look in helpers/calculationh.php for mor information * * * @copyright Copyright (c) 2009 VirtueMart Team. All rights reserved. * @author Max Milbers * @param $selected the selected values, may be single data or array * @return $list list of the Entrypoints */ function renderEntryPointsList($selected){ //MathOp array $entryPoints = array( '0' => array('calc_kind' => 'Marge', 'calc_kind_name' => JText::_('COM_VIRTUEMART_CALC_EPOINT_PMARGIN')), '1' => array('calc_kind' => 'DBTax', 'calc_kind_name' => JText::_('COM_VIRTUEMART_CALC_EPOINT_DBTAX')), '2' => array('calc_kind' => 'Tax', 'calc_kind_name' => JText::_('COM_VIRTUEMART_CALC_EPOINT_TAX')), '3' => array('calc_kind' => 'VatTax', 'calc_kind_name' => JText::_('COM_VIRTUEMART_CALC_EPOINT_VATTAX')), '4' => array('calc_kind' => 'DATax', 'calc_kind_name' => JText::_('COM_VIRTUEMART_CALC_EPOINT_DATAX')), '5' => array('calc_kind' => 'DBTaxBill', 'calc_kind_name' => JText::_('COM_VIRTUEMART_CALC_EPOINT_DBTAXBILL')), '6' => array('calc_kind' => 'TaxBill', 'calc_kind_name' => JText::_('COM_VIRTUEMART_CALC_EPOINT_TAXBILL')), '7' => array('calc_kind' => 'DATaxBill', 'calc_kind_name' => JText::_('COM_VIRTUEMART_CALC_EPOINT_DATAXBILL')), ); $listHTML = JHTML::_('Select.genericlist', $entryPoints, 'calc_kind', '', 'calc_kind', 'calc_kind_name', $selected ); return $listHTML; } /** * Builds a list to choose the mathematical operations * When you want to add extra operations, look in helpers/calculationh.php for more information * * @copyright Copyright (c) 2009 VirtueMart Team. All rights reserved. * @author Max Milbers * @param $selected the selected values, may be single data or array * @return $list list of the Entrypoints */ function renderMathOpList($selected){ //MathOp array $mathOps = array( '0' => array('calc_value_mathop' => '+', 'calc_value_mathop_name' => '+'), '1' => array('calc_value_mathop' => '-', 'calc_value_mathop_name' => '-'), '2' => array('calc_value_mathop' => '+%', 'calc_value_mathop_name' => '+%'), '3' => array('calc_value_mathop' => '-%', 'calc_value_mathop_name' => '-%') ); if (!class_exists('vmCalculationPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmcalculationplugin.php'); JPluginHelper::importPlugin('vmcalculation'); $dispatcher = JDispatcher::getInstance(); $answer = $dispatcher->trigger('plgVmAddMathOp', array(&$mathOps)); $listHTML = JHTML::_('Select.genericlist', $mathOps, 'calc_value_mathop', '', 'calc_value_mathop', 'calc_value_mathop_name', $selected ); return $listHTML; } } // pure php no closing tagviews/calc/.htaccess000066600000000177151374526160010424 0ustar00 Order allow,deny Deny from all views/calc/tmpl/edit_calc.php000066600000010526151374526160012221 0ustar00trigger('plgVmOnDisplayEdit', array('vmcalculation' , $html)); // print_r( $returnValues ); // vmdebug('pluginstuff',$returnValues); ?>
          calc->calc_name); ?> calc->published); ?> perms->check('admin') ){ echo VmHTML::row('checkbox','COM_VIRTUEMART_SHARED', 'shared', $this->calc->shared ); } ?> calc->ordering,'class="inputbox"','',4,4); ?> calc->calc_descr,'class="inputbox"','',70,255); ?> entryPointsList ); ?> mathOpList ); ?> calc->calc_value); ?> currencies ,$this->calc->calc_currency,'','virtuemart_currency_id', 'currency_name',false) ; ?> shopperGroupList ); ?> countriesList ); ?> statesList ); ?> manufacturerList ); /* Mod. St.Kraft 2013-02-24 Herstellerrabatt */ ?> calc->calc_shopper_published); ?> calc->calc_vendor_published); ?> calc->publish_up, 'publish_up') ); ?> calc->publish_down, 'publish_down') ); ?>
          trigger('plgVmOnDisplayEdit', array(&$this->calc,&$html)); echo $html; if(Vmconfig::get('multix','none')!=='none' and $this->perms->check('admin') ){ echo VmHTML::row('raw','COM_VIRTUEMART_VENDOR', $this->vendorList ); } ?>
          addStandardHiddenToForm(); ?>
          views/calc/tmpl/default.php000066600000015056151374526160011741 0ustar00

          perms->check( 'admin' )){ ?> */ ?> */ ?> perms->check( 'admin' )){ ?> */ ?> calcs ); $i < $n; $i++) { $row = $this->calcs[$i]; $checked = JHTML::_('grid.id', $i, $row->virtuemart_calc_id); $published = JHTML::_('grid.published', $row, $i); $shared = $this->toggle($row->shared, $i, 'toggle.shared'); $editlink = JROUTE::_('index.php?option=com_virtuemart&view=calc&task=edit&cid[]=' . $row->virtuemart_calc_id); ?> "> perms->check( 'admin' )){ ?> calc_shopper_published ? 'tick.png' : 'publish_x.png')); ?> */ ?> calc_amount_cond; ?> */ ?>
          sort('calc_name', 'COM_VIRTUEMART_NAME') ; ?> sort('calc_descr' , 'COM_VIRTUEMART_DESCRIPTION'); ?> sort('ordering') ; ?> sort('calc_kind') ; ?> sort('calc_value' , 'COM_VIRTUEMART_VALUE'); ?> sort('calc_currency' , 'COM_VIRTUEMART_CURRENCY'); ?> St.Kraft 2013-02-24 ?> sort('publish_up' , 'COM_VIRTUEMART_START_DATE'); ?> sort('publish_down' , 'COM_VIRTUEMART_END_DATE'); ?> sort('virtuemart_calc_id', 'COM_VIRTUEMART_ID') ?>
          calc_name; ?> virtuemart_vendor_id; ?> calc_descr; ?> ordering; ?> calc_kind; ?> calc_value_mathop; ?> calc_value; ?> currencyName; ?> calcCategoriesList; ?> calcManufacturersList; /* Mod. St.Kraft 2013-02-24 Herstellerrabatt */ ?> calcShoppersList; ?> calc_vendor_published ? 'tick.png' : 'publish_x.png')); ?> publish_up, 'LC4',true); ?> publish_down, 'LC4',true); ?> calc_amount_dimunit); ?> calcCountriesList); ?> calcStatesList); ?> virtuemart_calc_id; ?>
          pagination->getListFooter(); ?>
          addStandardHiddenToForm(); ?>
          views/calc/tmpl/.htaccess000066600000000177151374526160011400 0ustar00 Order allow,deny Deny from all views/calc/tmpl/edit.php000066600000001750151374526160011236 0ustar00 Order allow,deny Deny from all views/log/tmpl/edit.php000066600000002313151374526160011111 0ustar00
          	
            fileContentByLine as $line) echo "
          1. ".str_replace(array("
            ","
            "),"",$line)."
          2. "; ?>
            
            views/log/tmpl/index.html000066600000000000151374526160011437 0ustar00views/log/tmpl/.htaccess000066600000000177151374526160011257 0ustar00
            Order allow,deny
            Deny from all
            views/log/tmpl/default.php000066600000004423151374526160011614 0ustar00
            		logFiles) {
            			foreach ($this->logFiles as $logFile ) {
            				$addLink=false;
            				$fileSize = filesize($this->path.DS.$logFile);
            				$fileInfo= $finfo?$finfo->file($this->path.DS.$logFile):0;
            				$fileInfoMime=substr($fileInfo, 0 ,strlen("text/plain"));
            				if (!$finfo or strcmp("text/plain", $fileInfoMime)==0) {
            					$addLink=true;
            				}
            				?>
            				
            0 and $addLink) { ?> 0) { ?>
            addStandardHiddenToForm(); AdminUIHelper::endAdminArea(); ?> views/log/view.html.php000066600000003623151374526160011132 0ustar00get('log_path', JPATH_ROOT . "/log"); $layoutName = JRequest::getWord('layout', 'default'); VmConfig::loadJLang('com_virtuemart_log'); if ($layoutName == 'edit') { $logFile = JRequest::getString('logfile', ''); $this->SetViewTitle('LOG', $logFile); $fileContent = file_get_contents($log_path . DS . $logFile); $fileContentByLine = explode("\n", $fileContent); $this->assignRef('fileContentByLine', $fileContentByLine); JToolBarHelper::cancel(); } else { $logFiles = JFolder::files($log_path, $filter = '.', true, false, array('index.html')); $this->SetViewTitle('LOG'); $this->assignRef('logFiles', $logFiles); $this->assignRef('path', $log_path); } parent::display($tpl); } } //No Closing Tag views/log/index.html000066600000000000151374526160010463 0ustar00views/shipmentmethod/tmpl/index.html000066600000000000151374526160013706 0ustar00views/shipmentmethod/tmpl/edit_edit.php000066600000003677151374526160014403 0ustar00 langList; ?>
            shipment->shipment_name); ?> shipment->slug); ?> shipment->published); ?> shipment->shipment_desc); ?> pluginList); ?> shopperGroupList); ?> shipment->ordering, 'class="inputbox"', '', 4, 4); ?> vendorList); } ?>
            views/shipmentmethod/tmpl/edit_config.php000066600000004025151374526160014707 0ustar00shipment->shipment_name) { $parameters = new vmParameters($this->shipment, $this->shipment->shipment_element, 'plugin', 'vmshipment'); echo $rendered = $parameters->render(); } else { echo JText::_('COM_VIRTUEMART_SELECT_SHIPPING_METHOD'); } /* */ views/shipmentmethod/tmpl/default.php000066600000006567151374526160014076 0ustar00
            shipments ); $i < $n; $i++) { $row = $this->shipments[$i]; $published = JHTML::_('grid.published', $row, $i ); /** * @todo Add to database layout published column */ $row->published = 1; $checked = JHTML::_('grid.id', $i, $row->virtuemart_shipmentmethod_id); $editlink = JROUTE::_('index.php?option=com_virtuemart&view=shipmentmethod&task=edit&cid[]=' . $row->virtuemart_shipmentmethod_id); ?>
            sort('shipment_name', 'COM_VIRTUEMART_SHIPMENT_NAME_LBL'); ?> sort('shipment_element', 'COM_VIRTUEMART_SHIPMENTMETHOD'); ?> sort('ordering', 'COM_VIRTUEMART_LIST_ORDER'); ?> sort('published', 'COM_VIRTUEMART_PUBLISHED'); ?> sort('virtuemart_shipmentmethod_id', 'COM_VIRTUEMART_ID') ?>
            shipment_name)); ?> shipment_desc; ?> shipmentShoppersList; ?> shipment_element; //JHTML::_('link', $editlink, JText::_($row->shipment_element)); ?> ordering); ?> virtuemart_shipmentmethod_id; ?>
            pagination->getListFooter(); ?>
            addStandardHiddenToForm(); ?>
            views/shipmentmethod/tmpl/edit.php000066600000002750151374526160013365 0ustar00
            shipment->virtuemart_shipmentmethod_id ); // Loading Templates in Tabs END ?> addStandardHiddenToForm(); ?>
            views/shipmentmethod/tmpl/.htaccess000066600000000177151374526160013526 0ustar00 Order allow,deny Deny from all views/shipmentmethod/.htaccess000066600000000177151374526160012552 0ustar00 Order allow,deny Deny from all views/shipmentmethod/view.html.php000066600000007634151374526160013407 0ustar00addHelperPath(JPATH_VM_ADMINISTRATOR.DS.'helpers'); if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if(!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS.DS.'vmpsplugin.php'); if (!class_exists('VmHTML')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'html.php'); $model = VmModel::getModel(); $layoutName = JRequest::getWord('layout', 'default'); $this->SetViewTitle(); $layoutName = JRequest::getWord('layout', 'default'); if ($layoutName == 'edit') { $shipment = $model->getShipment(); if (!class_exists('VmImage')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'image.php'); if (!class_exists('vmParameters')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'parameterparser.php'); if(!class_exists('VirtueMartModelVendor')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'vendor.php'); $vendor_id = 1; $currency=VirtueMartModelVendor::getVendorCurrency ($vendor_id); $this->assignRef('vendor_currency', $currency->currency_symbol); if(Vmconfig::get('multix','none')!=='none'){ $vendorList= ShopFunctions::renderVendorList($shipment->virtuemart_vendor_id); $this->assignRef('vendorList', $vendorList); } $this->assignRef('pluginList', self::renderInstalledShipmentPlugins($shipment->shipment_jplugin_id)); $this->assignRef('shipment', $shipment); $this->assignRef('shopperGroupList', ShopFunctions::renderShopperGroupList($shipment->virtuemart_shoppergroup_ids,true)); $this->addStandardEditViewCommands($shipment->virtuemart_shipmentmethod_id); } else { JToolBarHelper::custom('cloneshipment', 'copy', 'copy', JText::_('COM_VIRTUEMART_SHIPMENT_CLONE'), true); $this->addStandardDefaultViewCommands(); $this->addStandardDefaultViewLists($model); $shipments = $model->getShipments(); $this->assignRef('shipments', $shipments); $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); } parent::display($tpl); } function renderInstalledShipmentPlugins($selected) { $db = JFactory::getDBO(); if (JVM_VERSION===1) { $table = '#__plugins'; $enable = 'published'; $ext_id = 'id'; } else { $table = '#__extensions'; $enable = 'enabled'; $ext_id = 'extension_id'; } $q = 'SELECT * FROM `'.$table.'` WHERE `folder` = "vmshipment" AND `state`="0" ORDER BY `ordering`,`name` ASC'; $db->setQuery($q); $result = $db->loadAssocList($ext_id); if(empty($result)){ $app = JFactory::getApplication(); $app -> enqueueMessage(JText::_('COM_VIRTUEMART_NO_SHIPMENT_PLUGINS_INSTALLED')); } foreach ($result as &$sh) { $sh['name'] = JText::_($sh['name']); } $attribs='style= "width: 300px;"'; return JHtml::_('select.genericlist', $result, 'shipment_jplugin_id', $attribs, $ext_id, 'name', $selected); } } // pure php no closing tag views/shipmentmethod/index.html000066600000000000151374526160012732 0ustar00views/custom/index.html000066600000000054151374526160011225 0ustar00views/custom/view.json.php000066600000005222151374526160011665 0ustar00setQuery( $query ); $json = $db->loadObject(); if (isset($json->file_url)) { $json->file_url = JURI::root().$json->file_url; $json->msg = 'OK'; echo json_encode($json); } else { $json->msg = ''.JText::_('COM_VIRTUEMART_NO_IMAGE_SET').''; echo json_encode($json); } } elseif ( $custom_jplugin_id = JRequest::getInt('custom_jplugin_id') ) { if (JVM_VERSION===1) { $table = '#__plugins'; $ext_id = 'id'; } else { $table = '#__extensions'; $ext_id = 'extension_id'; } $q = 'SELECT `params`,`element` FROM `' . $table . '` WHERE `' . $ext_id . '` = "'.$custom_jplugin_id.'"'; $db ->setQuery($q); $this->plugin = $db ->loadObject(); if (!class_exists('vmParameters')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'parameterparser.php'); $parameters = new vmParameters($this->plugin->params, $this->plugin->element , 'plugin' ,'vmcustom'); if (!class_exists('vmPlugin')) require(JPATH_VM_ADMINISTRATOR . DS . 'plugins' . DS . 'vmplugin.php'); $filename = 'plg_vmcustom_' . $this->plugin->element; vmPlugin::loadJLang($filename,'vmcustom',$this->plugin->element); echo $parameters->render(); echo ''; jExit(); } jExit(); } } // pure php no closing tag views/custom/.htaccess000066600000000177151374526160011034 0ustar00 Order allow,deny Deny from all views/custom/tmpl/edit.php000066600000006465151374526160011656 0ustar00
            customfields->addHidden('view', 'custom'); $this->customfields->addHidden('task', ''); $this->customfields->addHidden(JUtility::getToken(), 1); //if ($this->custom->custom_parent_id) $this->customfields->addHidden('custom_parent_id',$this->custom->custom_parent_id); $attribute_id = JRequest::getVar('attribute_id', ''); if (!empty($attribute_id)) $this->customfields->addHidden('attribute_id', $attribute_id); ?> customfields->displayCustomFields($this->custom); ?>
            pluginList ?>
            customPlugin)) { ?> customPlugin, $this->customPlugin->custom_element, 'plugin', 'vmcustom'); echo $rendered = $parameters->render(); ?>
            customPlugin->custom_jplugin_id)) { ?>
            views/custom/tmpl/default.php000066600000014632151374526160012350 0ustar00
            customs->items; //$roles = $this->customlistsroles; ?> $custom) { $checked = JHTML::_('grid.id', $i , $custom->virtuemart_custom_id,false,'virtuemart_custom_id'); if (!is_null($custom->virtuemart_custom_id)) $published = JHTML::_('grid.published', $custom, $i ); else $published = ''; ?> custom_parent_id."&option=".$option; ?> virtuemart_custom_id; if ($custom->is_cart_attribute) $cartIcon= 'default'; else $cartIcon= 'default-off'; ?>
            sort('ordering') ?> sort('virtuemart_custom_id', 'COM_VIRTUEMART_ID') ?>
            hasKey($custom->custom_parent_title) ? JText::_($custom->custom_parent_title) : $custom->custom_parent_title; echo JHTML::_('link', JRoute::_($link,FALSE),$text, array('title' => JText::_('COM_VIRTUEMART_FILTER_BY').' '.$text)); ?> custom_title, array('title' => JText::_('COM_VIRTUEMART_EDIT').' '.$custom->custom_title)); ?> custom_field_desc; ?> field_type_display; ?> pagination->orderUpIcon($i, true, 'orderUp', JText::_('COM_VIRTUEMART_MOVE_UP')); ?> pagination->orderDownIcon( $i, $n, true, 'orderDown', JText::_('COM_VIRTUEMART_MOVE_DOWN')); ?> virtuemart_custom_id; ?>
            pagination->getListFooter(); ?>
            views/custom/tmpl/.htaccess000066600000000177151374526160012010 0ustar00 Order allow,deny Deny from all views/custom/tmpl/index.html000066600000000001151374526160012171 0ustar00 views/custom/view.html.php000066600000010717151374526160011665 0ustar00SetViewTitle('PRODUCT_CUSTOM_FIELD'); $layoutName = JRequest::getWord('layout', 'default'); if ($layoutName == 'edit') { $this->addStandardEditViewCommands(); $customPlugin = ''; if (!class_exists('vmParameters')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'parameterparser.php'); $custom = $model->getCustom(); $customfields = VmModel::getModel('customfields'); // vmdebug('VirtuemartViewCustom',$custom); JPluginHelper::importPlugin('vmcustom'); $dispatcher = JDispatcher::getInstance(); $retValue = $dispatcher->trigger('plgVmOnDisplayEdit',array($custom->virtuemart_custom_id,&$customPlugin)); $this->SetViewTitle('PRODUCT_CUSTOM_FIELD', $custom->custom_title); $selected=0; if(!empty($custom->custom_jplugin_id)) { $selected = $custom->custom_jplugin_id; } $pluginList = self::renderInstalledCustomPlugins($selected); $this->assignRef('customPlugin', $customPlugin); $this->assignRef('pluginList',$pluginList); $this->assignRef('custom', $custom); $this->assignRef('customfields', $customfields); } else { JToolBarHelper::custom('createClone', 'copy', 'copy', JText::_('COM_VIRTUEMART_CLONE'), true); JToolBarHelper::custom('toggle.admin_only.1', 'publish','', JText::_('COM_VIRTUEMART_TOGGLE_ADMIN'), true); JToolBarHelper::custom('toggle.admin_only.0', 'unpublish','', JText::_('COM_VIRTUEMART_TOGGLE_ADMIN'), true); JToolBarHelper::custom('toggle.is_hidden.1', 'publish','', JText::_('COM_VIRTUEMART_TOGGLE_HIDDEN'), true); JToolBarHelper::custom('toggle.is_hidden.0', 'unpublish','', JText::_('COM_VIRTUEMART_TOGGLE_HIDDEN'), true); $this->addStandardDefaultViewCommands(); $this->addStandardDefaultViewLists($model); $customs = $model->getCustoms(JRequest::getInt('custom_parent_id'),JRequest::getWord('keyword')); $this->assignRef('customs', $customs); $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); } parent::display($tpl); } function renderInstalledCustomPlugins($selected) { $db = JFactory::getDBO(); if (JVM_VERSION===1) { $table = '#__plugins'; $enable = 'published'; $ext_id = 'id'; } else { $table = '#__extensions'; $enable = 'enabled'; $ext_id = 'extension_id'; } $q = 'SELECT * FROM `'.$table.'` WHERE `folder` = "vmcustom" AND `'.$enable.'`="1" '; $db->setQuery($q); $results = $db->loadAssocList($ext_id); if (!class_exists('vmPlugin')) require(JPATH_VM_ADMINISTRATOR . DS . 'plugins' . DS . 'vmplugin.php'); $lang =JFactory::getLanguage(); foreach ($results as $result) { //$filename = 'plg_vmcustom_' . $this->plugin->element; $filename = 'plg_' .strtolower ( $result['name']).'.sys'; vmPlugin::loadJLang($filename,'vmcustom',$result['name']); } return VmHTML::select( 'custom_jplugin_id', $results, $selected,"",$ext_id, 'name'); //return JHtml::_('select.genericlist', $result, 'custom_jplugin_id', null, $ext_id, 'name', $selected); } } // pure php no closing tagviews/shoppergroup/.htaccess000066600000000177151374526160012257 0ustar00 Order allow,deny Deny from all views/shoppergroup/index.html000066600000000000151374526160012437 0ustar00views/shoppergroup/view.html.php000066600000004773151374526160013115 0ustar00assignRef('perms', Permissions::getInstance()); $model = VmModel::getModel(); $layoutName = $this->getLayout(); $task = JRequest::getWord('task',$layoutName); $this->assignRef('task', $task); if ($layoutName == 'edit') { //For shoppergroup specific price display VmConfig::loadJLang('com_virtuemart_config'); $shoppergroup = $model->getShopperGroup(); $this->SetViewTitle('SHOPPERGROUP',$shoppergroup->shopper_group_name); $vendors = ShopFunctions::renderVendorList($shoppergroup->virtuemart_vendor_id); $this->assignRef('vendorList', $vendors); $this->assignRef('shoppergroup', $shoppergroup); $this->addStandardEditViewCommands(); } else { $this->SetViewTitle(); JToolBarHelper::makeDefault(); if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); $showVendors = Permissions::getInstance()->check('admin'); $this->assignRef('showVendors',$showVendors); $this->addStandardDefaultViewCommands(); $this->addStandardDefaultViewLists($model); $shoppergroups = $model->getShopperGroups(false, true); $this->assignRef('shoppergroups', $shoppergroups); $pagination = $model->getPagination(); $this->assignRef('sgrppagination', $pagination); } parent::display($tpl); } } // pure php no closing tag views/shoppergroup/tmpl/.htaccess000066600000000177151374526160013233 0ustar00 Order allow,deny Deny from all views/shoppergroup/tmpl/index.html000066600000000000151374526160013413 0ustar00views/shoppergroup/tmpl/default.php000066600000007307151374526160013574 0ustar00
            showVendors){ ?> shoppergroups ); $i < $n; $i++) { $row = $this->shoppergroups[$i]; $published = JHTML::_('grid.published', $row, $i ); $checked = JHTML::_('grid.id', $i, $row->virtuemart_shoppergroup_id,null,'virtuemart_shoppergroup_id'); $editlink = JROUTE::_('index.php?option=com_virtuemart&view=shoppergroup&task=edit&virtuemart_shoppergroup_id[]=' . $row->virtuemart_shoppergroup_id); ?> showVendors){ ?>
            sort('virtuemart_shoppergroup_id', 'COM_VIRTUEMART_ID') ?>
            shopper_group_name); ?> shopper_group_desc); ?> default == 1) { if (JVM_VERSION===1) { ?> <?php echo JText::_( 'COM_VIRTUEMART_SHOPPERGROUP_DEFAULT' ); ?>   virtuemart_vendor_id; ?> virtuemart_shoppergroup_id; ?>
            sgrppagination->getListFooter(); ?>
            addStandardHiddenToForm($this->_name,$this->task); ?>
            views/shoppergroup/tmpl/edit.php000066600000013520151374526160013067 0ustar00addScriptDeclaration($js); AdminUIHelper::startAdminArea($this); AdminUIHelper::imitateTabs('start', 'COM_VIRTUEMART_SHOPPERGROUP_NAME'); ?>
            shoppergroup->shopper_group_name); ?> shoppergroup->published); ?> * */ ?> shoppergroup->default == 1) { ?> shoppergroup->shopper_group_desc); ?>
            vendorList; ?>
            <?php echo JText::_('Default'); ?>
            shoppergroup->custom_price_display,1,0,$attributes) ?>
            shoppergroup->price_display, 'basePrice', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_BASEPRICE'); echo ShopFunctions::writePriceConfigLine($this->shoppergroup->price_display, 'variantModification', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_VARMOD'); echo ShopFunctions::writePriceConfigLine($this->shoppergroup->price_display, 'basePriceVariant', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_BASEPRICE_VAR'); echo ShopFunctions::writePriceConfigLine($this->shoppergroup->price_display, 'basePriceWithTax', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_BASEPRICE_WTAX'); echo ShopFunctions::writePriceConfigLine($this->shoppergroup->price_display, 'discountedPriceWithoutTax', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_DISCPRICE_WOTAX'); echo ShopFunctions::writePriceConfigLine($this->shoppergroup->price_display, 'salesPriceWithDiscount', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_SALESPRICE_WD'); echo ShopFunctions::writePriceConfigLine($this->shoppergroup->price_display, 'salesPrice', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_SALESPRICE'); echo ShopFunctions::writePriceConfigLine($this->shoppergroup->price_display, 'priceWithoutTax', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_SALESPRICE_WOTAX'); echo ShopFunctions::writePriceConfigLine($this->shoppergroup->price_display, 'discountAmount', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_DISC_AMOUNT'); echo ShopFunctions::writePriceConfigLine($this->shoppergroup->price_display, 'taxAmount', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_TAX_AMOUNT'); echo ShopFunctions::writePriceConfigLine($this->shoppergroup->price_display, 'unitPrice', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_UNITPRICE'); ?>
            shoppergroup->price_display->get('show_prices')); ?>
            addStandardHiddenToForm(); ?>
            views/media/tmpl/default.php000066600000011256151374526160012114 0ustar00
            files; //$roles = $this->productfilesroles; ?> 0) { $i = 0; $k = 0; foreach ($productfileslist as $key => $productfile) { $checked = JHTML::_('grid.id', $i , $productfile->virtuemart_media_id,null,'virtuemart_media_id'); if (!is_null($productfile->virtuemart_media_id)) $published = JHTML::_('grid.published', $productfile, $i ); else $published = ''; ?> limitstart."&keyword=".urlencode($keyword)."&option=".$option; ?> virtuemart_media_id; ?>
            sort('file_title', 'COM_VIRTUEMART_FILES_LIST_FILETITLE') ?> sort('file_type', 'COM_VIRTUEMART_FILES_LIST_ROLE') ?> sort('published', 'COM_VIRTUEMART_PUBLISHED'); ?> sort('virtuemart_media_id', 'COM_VIRTUEMART_ID') ?>
            product_name)? '': $productfile->product_name); ?> file_title, array('title' => JText::_('COM_VIRTUEMART_EDIT').' '.$productfile->file_title)); ?> file_is_product_image)) echo JText::_('COM_VIRTUEMART_'.strtoupper($productfile->file_type).'_IMAGE') ; if(!empty($productfile->file_is_downloadable)) echo JText::_('COM_VIRTUEMART_DOWNLOADABLE') ; if(!empty($productfile->file_is_forSale)) echo JText::_('COM_VIRTUEMART_FOR_SALE'); ?> displayMediaThumb(); ?> file_name; ?> file_extension; ?> virtuemart_media_id; ?>
            pagination->getListFooter(); ?>
            addStandardHiddenToForm(); ?>
            views/media/tmpl/.htaccess000066600000000177151374526160011555 0ustar00 Order allow,deny Deny from all views/media/tmpl/index.html000066600000000054151374526160011746 0ustar00views/media/tmpl/edit.php000066600000003202151374526160011405 0ustar00'; echo '
            '; $this->media->addHidden('view','media'); $this->media->addHidden('task',''); $this->media->addHidden(JUtility::getToken(),1); $this->media->addHidden('file_type',$this->media->file_type); $virtuemart_product_id = JRequest::getInt('virtuemart_product_id', ''); if(!empty($virtuemart_product_id)) $this->media->addHidden('virtuemart_product_id',$virtuemart_product_id); $virtuemart_category_id = JRequest::getInt('virtuemart_category_id', ''); if(!empty($virtuemart_category_id)) $this->media->addHidden('virtuemart_category_id',$virtuemart_category_id); echo $this->media->displayFileHandler(); echo '
            '; echo ''; AdminUIHelper::imitateTabs('end'); AdminUIHelper::endAdminArea(); views/media/view.json.php000066600000004230151374526160011430 0ustar00setMimeEncoding( 'application/json' ); if ($virtuemart_media_id = JRequest::getInt('virtuemart_media_id')) { //JResponse::setHeader( 'Content-Disposition', 'attachment; filename="media'.$virtuemart_media_id.'.json"' ); $model = VmModel::getModel('Media'); $image = $model->createMediaByIds($virtuemart_media_id); // echo '
            '.print_r($image,1).'
            '; $this->json = $image[0]; //echo json_encode($this->json); if (isset($this->json->file_url)) { $this->json->file_root = JURI::root(true).'/'; $this->json->msg = 'OK'; echo @json_encode($this->json); } else { $this->json->msg = ''.JText::_('COM_VIRTUEMART_NO_IMAGE_SET').''; echo @json_encode($this->json); } } else { if (!class_exists('VmMediaHandler')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'mediahandler.php'); $start = JRequest::getInt('start',0); $type = JRequest::getWord('mediatype',0); $list = VmMediaHandler::displayImages($type,$start ); echo @json_encode($list); } jExit(); } } // pure php no closing tag views/media/.htaccess000066600000000177151374526160010601 0ustar00 Order allow,deny Deny from all views/media/view.html.php000066600000007046151374526160011433 0ustar00assignRef('vendorId', $vendorId); // TODO add icon for media view $this->SetViewTitle(); $model = VmModel::getModel('media'); $perms = Permissions::getInstance(); $this->assignRef('perms', $perms); $layoutName = JRequest::getWord('layout', 'default'); if ($layoutName == 'edit') { $media = $model->getFile(); $this->assignRef('media', $media); $isNew = ($media->virtuemart_media_id < 1); $this->addStandardEditViewCommands(); } else { $virtuemart_product_id = JRequest::getVar('virtuemart_product_id',array(),'', 'array'); if(is_array($virtuemart_product_id) && count($virtuemart_product_id) > 0){ $virtuemart_product_id = (int)$virtuemart_product_id[0]; } else { $virtuemart_product_id = (int)$virtuemart_product_id; } $cat_id = JRequest::getInt('virtuemart_category_id',0); JToolBarHelper::customX('synchronizeMedia', 'new', 'new', JText::_('COM_VIRTUEMART_TOOLS_SYNC_MEDIA_FILES'),false); $this->addStandardDefaultViewCommands(); $this->addStandardDefaultViewLists($model,null,null,'searchMedia'); $options = array( '' => JText::_('COM_VIRTUEMART_LIST_ALL_TYPES'), 'product' => JText::_('COM_VIRTUEMART_PRODUCT'), 'category' => JText::_('COM_VIRTUEMART_CATEGORY'), 'manufacturer' => JText::_('COM_VIRTUEMART_MANUFACTURER'), 'vendor' => JText::_('COM_VIRTUEMART_VENDOR') ); $this->lists['search_type'] = VmHTML::selectList('search_type', JRequest::getVar('search_type'),$options,1,'','onchange="this.form.submit();"'); $options = array( '' => JText::_('COM_VIRTUEMART_LIST_ALL_ROLES'), 'file_is_displayable' => JText::_('COM_VIRTUEMART_FORM_MEDIA_DISPLAYABLE'), 'file_is_downloadable' => JText::_('COM_VIRTUEMART_FORM_MEDIA_DOWNLOADABLE'), 'file_is_forSale' => JText::_('COM_VIRTUEMART_FORM_MEDIA_SET_FORSALE'), ); $this->lists['search_role'] = VmHTML::selectList('search_role', JRequest::getVar('search_role'),$options,1,'','onchange="this.form.submit();"'); $files = $model->getFiles(false,false,$virtuemart_product_id,$cat_id); $this->assignRef('files', $files); $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); } parent::display($tpl); } } // pure php no closing tagviews/media/index.html000066600000000054151374526160010772 0ustar00views/updatesmigration/.htaccess000066600000000177151374526160013101 0ustar00 Order allow,deny Deny from all views/updatesmigration/tmpl/update_preview.php000066600000011065151374526160016011 0ustar00


            • :
            • :
            '; $class = $is_writable ? 'writable' : 'unwritable'; $msg = $is_writable ? JText::_('COM_VIRTUEMART_UPDATE_PATCH_WRITABLE') : JText::_('COM_VIRTUEMART_UPDATE_PATCH_UNWRITABLE'); echo '\n"; } ?>
            '.$file.''.$msg."
            ' . JText::_('COM_VIRTUEMART_UPDATE_PATCH_QUERYTOEXEC') . ':'; echo ''; foreach($packageContents['queryArr'] as $query) { echo '
            '.$query. "
            "; } echo ''; } if( $valid ) { echo '


            '; } else { echo '
            ' . JText::_('COM_VIRTUEMART_UPDATE_PATCH_ERR_UNWRITABLE').'
            '; } $formObj->finishForm('applypatchpackage', 'admin.update_result'); ?>
            views/updatesmigration/tmpl/insfinished.php000066600000007767151374526160015307 0ustar00load('com_virtuemart.sys',JPATH_ADMINISTRATOR,'en_GB',true); $lang->load('com_virtuemart',JPATH_ADMINISTRATOR,'en_GB',true); //load specific language $lang->load('com_virtuemart.sys',JPATH_ADMINISTRATOR,null,true); $lang->load('com_virtuemart',JPATH_ADMINISTRATOR,null,true);*/ $update = vRequest::getInt('update',0); $option = vRequest::getString('option'); if($option=='com_virtuemart'){ if (!class_exists('AdminUIHelper')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'adminui.php'); if (!class_exists('JToolBarHelper')) require(JPATH_ADMINISTRATOR.DS.'includes'.DS.'toolbar.php'); AdminUIHelper::startAdminArea($this); } ?>
            Cart

            '.vmText::_('COM_VIRTUEMART_EXTENSION_UPGRADE_REMIND'); } else { echo vmText::_('COM_VIRTUEMART_INSTALLATION_SUCCESSFUL'); echo '
            '.vmText::_('COM_VIRTUEMART_EXTENSION_UPGRADE_REMIND'); } ?>


            setQuery($q); $productsExists = $db->loadResult(); if(!$productsExists){ ?>
            views/updatesmigration/tmpl/default.php000066600000001724151374526160014413 0ustar00 'COM_VIRTUEMART_UPDATE_TOOLS_TAB', 'migrator' => 'COM_VIRTUEMART_MIGRATION_TAB' ) ); AdminUIHelper::endAdminArea(); views/updatesmigration/tmpl/install.php000066600000004275151374526160014441 0ustar00root() . 'administrator/index.php?option=com_virtuemart&view=config'; ?>
            views/updatesmigration/tmpl/default_tools.php000066600000017010151374526160015626 0ustar00root() . 'administrator/index.php?option=com_virtuemart&view=config'; ?>
            views/updatesmigration/tmpl/index.html000066600000000000151374526160014235 0ustar00views/updatesmigration/tmpl/.htaccess000066600000000177151374526160014055 0ustar00 Order allow,deny Deny from all views/updatesmigration/tmpl/default_migrator.php000066600000013427151374526160016322 0ustar00
            get('reWriteOrderNumber', 1, 'vm')); echo VmHTML::row('checkbox','COM_VIRTUEMART_MIGRATION_USER_ORDER_ID','userOrderId',$session->get('userOrderId', 0, 'vm')); echo VmHTML::row('checkbox','COM_VIRTUEMART_MIGRA_SGRP_PRICES','userSgrpPrices',$session->get('userSgrpPrices', 0, 'vm')); echo VmHTML::row('checkbox','COM_VIRTUEMART_MIGRA_PORTFLY','portFlypages',$session->get('portFlypages', 0, 'vm')); echo VmHTML::row('input','COM_VIRTUEMART_MIGRATION_DCAT_BROWSE','migration_default_category_browse',$session->get('migration_default_category_browse', 0, 'vm')); echo VmHTML::row('input','COM_VIRTUEMART_MIGRATION_DCAT_FLY','migration_default_category_fly',$session->get('migration_default_category_fly', 0, 'vm')); ?>

            '; @ini_set( 'max_execution_time', $max_execution_time+1 ); $new_max_execution_time = ini_get('max_execution_time'); if($max_execution_time===$new_max_execution_time){ echo 'Server settings do not allow changes of your max_execution_time in the php.ini file, you may get problems migrating a big shop'; } else { echo JText::_('COM_VIRTUEMART_UPDATE_MIGRATION_CHANGE_MAX_EXECUTION_TIME').''; } @ini_set( 'max_execution_time', $max_execution_time ); echo '
            '; $memory_limit = ini_get('memory_limit'); echo 'memory_limit '.$memory_limit; echo '
            '; if($memory_limit!=='128MB'){ // @ini_set( 'memory_limit', '128MB' ); // $new_memory_limit = ini_get('memory_limit'); // if($memory_limit===$new_memory_limit){ // echo 'Server settings do not allow changes of your memory_limit in the php.ini file, you may get problems migrating a big shop'; // }else { echo JText::_('COM_VIRTUEMART_UPDATE_MIGRATION_CHANGE_MEMORY_LIMIT').''; // } // @ini_set( 'max_execution_time', $memory_limit ); } ?>
            JText::_('COM_VIRTUEMART_UPDATE_GENERAL'), 'migrateUsersFromVmOne' => JText::_('COM_VIRTUEMART_UPDATE_USERS'), 'migrateProductsFromVmOne' => JText::_('COM_VIRTUEMART_UPDATE_PRODUCTS'), 'migrateOrdersFromVmOne' => JText::_('COM_VIRTUEMART_UPDATE_ORDERS'), 'migrateAllInOne' => JText::_('COM_VIRTUEMART_UPDATE_ALL'), 'portVmAttributes' => JText::_('COM_VIRTUEMART_UPDATE_ATTR').'
            '.JText::_('COM_VIRTUEMART_UPDATE_ATTR_2'), 'portVmRelatedProducts' => JText::_('COM_VIRTUEMART_UPDATE_REL'), // 'setStoreOwner' => JText::_('COM_VIRTUEMART_SETSTOREOWNER') ); echo VmHTML::radioList('task', $session->get('migration_task', 'migrateAllInOne', 'vm'), $options); ?>

            */ ?>views/updatesmigration/tmpl/default_update.php000066600000005634151374526160015761 0ustar00

            latestVersion) { echo "

            " . $this->latestVersion . "

            "; } else {?>  [] latestVersion) { if (version_compare($this->latestVersion, VmConfig::getInstalledVersion(), '>') == 1) { ?>
            views/updatesmigration/view.html.php000066600000003521151374526160013725 0ustar00assignRef('checkbutton_style', $checkbutton_style); $this->assignRef('downloadbutton_style', $downloadbutton_style); $this->assignRef('latestVersion', $latestVersion); $freshInstall = JRequest::getInt('install',0); if($freshInstall){ $this->setLayout('install'); } parent::display($tpl); } } // pure php no closing tag views/updatesmigration/index.html000066600000000000151374526160013261 0ustar00views/userfields/.htaccess000066600000000177151374526160011667 0ustar00 Order allow,deny Deny from all views/userfields/index.html000066600000000000151374526160012047 0ustar00views/userfields/view.html.php000066600000031643151374526160012521 0ustar00getCoreFields(); if ($layoutName == 'edit') { $editor = JFactory::getEditor(); $userField = $model->getUserfield(); $this->SetViewTitle('USERFIELD',$userField->name ); $this->assignRef('viewName',$viewName); $userFieldPlugin = ''; if ($userField->virtuemart_userfield_id < 1) { // Insert new userfield $this->assignRef('ordering', JText::_('COM_VIRTUEMART_NEW_ITEMS_PLACE')); $userFieldValues = array(); $attribs = ''; $lists['type'] = JHTML::_('select.genericlist', $this->_getTypes(), 'type', $attribs, 'type', 'text', $userField->type); } else { // Update existing userfield // Ordering dropdown $qry = 'SELECT ordering AS value, name AS text' . ' FROM #__virtuemart_userfields' . ' ORDER BY ordering'; $ordering = JHTML::_('list.specificordering', $userField, $userField->virtuemart_userfield_id, $qry); $this->assignRef('ordering', $ordering); $userFieldValues = $model->getUserfieldValues(); $lists['type'] = $this->_getTypes($userField->type) . ''; if (strpos($userField->type, 'plugin') !==false) $userFieldPlugin = self::renderUserfieldPlugin(substr($userField->type, 6),$userField); } $this->assignRef('userFieldPlugin', $userFieldPlugin); JToolBarHelper::divider(); JToolBarHelper::save(); JToolBarHelper::apply(); JToolBarHelper::cancel(); $notoggle = (in_array($userField->name, $lists['coreFields']) ? 'class="readonly"' : ''); // Vendor selection if(Vmconfig::get('multix','none')!=='none'){ $lists['vendors']= ShopFunctions::renderVendorList($userField->virtuemart_vendor_id); } // Shopper groups for EU VAT Id $shoppergroup_model = VmModel::getModel('shoppergroup'); $shoppergroup_list = $shoppergroup_model->getShopperGroups(true); array_unshift($shoppergroup_list,'0'); $lists['shoppergroups'] = JHTML::_('select.genericlist', $shoppergroup_list, 'virtuemart_shoppergroup_id', '', 'virtuemart_shoppergroup_id', 'shopper_group_name', $model->_params->get('virtuemart_shoppergroup_id')); // Minimum age select $ages = array(); for ($i = 13; $i <= 25; $i++) { $ages[] = array('key' => $i, 'value' => $i.' '.JText::_('COM_VIRTUEMART_YEAR_S')); } $lists['minimum_age'] = JHTML::_('select.genericlist', $ages, 'minimum_age', '', 'key', 'value', $model->_params->get('minimum_age', 18)); // Web address types $webaddress_types = array( array('key' => 0, 'value' => JText::_('COM_VIRTUEMART_USERFIELDS_URL_ONLY')) ,array('key' => 2, 'value' => JText::_('COM_VIRTUEMART_USERFIELDS_HYPERTEXT_URL')) ); $lists['webaddresstypes'] = JHTML::_('select.genericlist', $webaddress_types, 'webaddresstype', '', 'key', 'value', $model->_params->get('webaddresstype')); // Userfield values if (($n = count($userFieldValues)) < 1) { $lists['userfield_values'] = '' .'' .'' .''; $i = 1; } else { $lists['userfield_values'] = ''; $lang =JFactory::getLanguage(); for ($i = 0; $i < $n; $i++) { $translate= $lang->hasKey($userFieldValues[$i]->fieldtitle) ? " (".JText::_($userFieldValues[$i]->fieldtitle).")" : ""; $lists['userfield_values'] .= '' .'' .''.$translate.'' .''; } } $this->assignRef('valueCount', --$i); // Toggles $lists['required'] = VmHTML::row('booleanlist','COM_VIRTUEMART_FIELDMANAGER_REQUIRED','required',$userField->required,$notoggle); $lists['published'] = VmHTML::row('booleanlist','COM_VIRTUEMART_PUBLISHED','published',$userField->published,$notoggle); $lists['registration'] = VmHTML::row('booleanlist','COM_VIRTUEMART_FIELDMANAGER_SHOW_ON_REGISTRATION','registration',$userField->registration,$notoggle); $lists['shipment'] = VmHTML::row('booleanlist','COM_VIRTUEMART_FIELDMANAGER_SHOW_ON_SHIPPING','shipment',$userField->shipment,$notoggle); $lists['account'] = VmHTML::row('booleanlist','COM_VIRTUEMART_FIELDMANAGER_SHOW_ON_ACCOUNT','account',$userField->account,$notoggle); $lists['readonly'] = VmHTML::row('booleanlist','COM_VIRTUEMART_USERFIELDS_READONLY','readonly',$userField->readonly,$notoggle); $this->assignRef('lists', $lists); $this->assignRef('userField', $userField); $this->assignRef('userFieldValues', $userFieldValues); $this->assignRef('editor', $editor); } else { JToolBarHelper::title( JText::_('COM_VIRTUEMART_MANAGE_USER_FIELDS'),'vm_user_48 head'); JToolBarHelper::addNewX(); JToolBarHelper::editListX(); JToolBarHelper::divider(); JToolBarHelper::custom('toggle.required.1', 'publish','','COM_VIRTUEMART_FIELDMANAGER_REQUIRE'); JToolBarHelper::custom('toggle.required.0', 'unpublish','','COM_VIRTUEMART_FIELDMANAGER_UNREQUIRE'); JToolBarHelper::publishList(); JToolBarHelper::unpublishList(); JToolBarHelper::divider(); $barText = JText::_('COM_VIRTUEMART_FIELDMANAGER_SHOW_HIDE'); $bar= JToolBar::getInstance( 'toolbar' ); $bar->appendButton( 'Separator', '">'.$barText.'
            ' .$retImgSrc. ''); } } /** * Create an array with userfield types and the visible text in the format expected by the Joomla select class * * @param string $value If not null, the type of which the text should be returned * @return mixed array or string */ function _getTypes ($value = null) { $types = array( array('type' => 'text' , 'text' => JText::_('COM_VIRTUEMART_FIELDS_TEXTFIELD')) ,array('type' => 'checkbox' , 'text' => JText::_('COM_VIRTUEMART_FIELDS_CHECKBOX_SINGLE')) ,array('type' => 'multicheckbox' , 'text' => JText::_('COM_VIRTUEMART_FIELDS_CHECKBOX_MULTIPLE')) ,array('type' => 'date' , 'text' => JText::_('COM_VIRTUEMART_FIELDS_DATE')) ,array('type' => 'age_verification' , 'text' => JText::_('COM_VIRTUEMART_FIELDS_AGEVERIFICATION')) ,array('type' => 'select' , 'text' => JText::_('COM_VIRTUEMART_FIELDS_DROPDOWN_SINGLE')) ,array('type' => 'multiselect' , 'text' => JText::_('COM_VIRTUEMART_FIELDS_DROPDOWN_MULTIPLE')) ,array('type' => 'emailaddress' , 'text' => JText::_('COM_VIRTUEMART_FIELDS_EMAIL')) // ,array('type' => 'euvatid' , 'text' => JText::_('COM_VIRTUEMART_FIELDS_EUVATID')) ,array('type' => 'editorta' , 'text' => JText::_('COM_VIRTUEMART_FIELDS_EDITORAREA')) ,array('type' => 'textarea' , 'text' => JText::_('COM_VIRTUEMART_FIELDS_TEXTAREA')) ,array('type' => 'radio' , 'text' => JText::_('COM_VIRTUEMART_FIELDS_RADIOBUTTON')) ,array('type' => 'webaddress' , 'text' => JText::_('COM_VIRTUEMART_FIELDS_WEBADDRESS')) ,array('type' => 'delimiter' , 'text' => JText::_('COM_VIRTUEMART_FIELDS_DELIMITER')) ); $this->renderInstalledUserfieldPlugins($types); if ($value === null) { return $types; } else { foreach ($types as $type) { if ($type['type'] == $value) { return $type['text']; } return $value; } } } function renderUserfieldPlugin($element, $params){ $db = JFactory::getDBO(); if (JVM_VERSION===1) { $table = '#__plugins'; $jelement = 'element'; } else { $table = '#__extensions'; $jelement = 'element'; } $q = 'SELECT `params`,`element` FROM `' . $table . '` WHERE `' . $jelement . '` = "'.$element.'"'; $db ->setQuery($q); $this->plugin = $db ->loadObject(); if (!class_exists('vmParameters')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'parameterparser.php'); $parameters = new vmParameters($params, $this->plugin->element , 'plugin' ,'vmuserfield'); $lang = JFactory::getLanguage(); $filename = 'plg_vmuserfield_' . $this->plugin->element; $lang->load($filename, JPATH_ADMINISTRATOR); return $parameters->render(); } function renderInstalledUserfieldPlugins(&$plugins){ if ( JVM_VERSION===1) { $table = '#__plugins'; $ext_id = 'id'; $enable = 'published'; } else { $table = '#__extensions'; $ext_id = 'extension_id'; $enable = 'enabled'; } $db = JFactory::getDBO(); $q = 'SELECT * FROM `'.$table.'` WHERE `folder` = "vmuserfield" AND `'.$enable.'`="1" '; $db->setQuery($q); $userfieldplugins = $db->loadAssocList($ext_id); if(empty($userfieldplugins)){ return; } foreach($userfieldplugins as $userfieldplugin){ $plugins[] = array('type' => 'plugin'.$userfieldplugin['element'], 'text' => $userfieldplugin['name']); } return; } } //No Closing Tag views/userfields/tmpl/edit.php000066600000023252151374526160012502 0ustar00userField',$this->userField); ?>
            lists['type'] ); ?> userField->description,'100%','300', array('image','pagebreak', 'readmore') ); ?> userField->default,'class="inputbox"','',5); ?> lists['required']; ?> lists['registration']; ?> lists['account']; ?> lists['shipment']; ?> lists['readonly']; ?> lists['published']; ?> userField->size,'class="inputbox"','',5); ?> userField->ordering,'class="inputbox"','',5); ?> lists['vendors'] ); } ?>
            userField->maxlength,'class="inputbox"','',5); ?>
            userField->cols,'class="inputbox"','',5); ?> userField->rows,'class="inputbox"','',5); ?>
            lists['minimum_age'] ); ?>
            lists['webaddresstypes'] ); ?>
            lists['userfield_values'];?>
            userFieldPlugin; ?>
            userField->sys ? 'readonly="readonly"' : ''); $readonly=$this->userField->sys ? 'readonly' : '' ?> class="validate[required,funcCall[checkName]] inputbox " />
            hasKey($this->userField->title) ? JText::_($this->userField->title) : $this->userField->title; ?> ()
            addStandardHiddenToForm(); ?>
            setQuery("SHOW COLUMNS FROM `#__virtuemart_userfields`"); $existingFields = '"'.implode('","',$db->loadResultArray()).'"'; ?> views/userfields/tmpl/.htaccess000066600000000177151374526160012643 0ustar00 Order allow,deny Deny from all views/userfields/tmpl/index.html000066600000000000151374526160013023 0ustar00views/userfields/tmpl/default.php000066600000013736151374526160013207 0ustar00
            userfieldsList); $i < $n; $i++) { $row = $this->userfieldsList[$i]; // vmdebug('my rows',$row); $coreField = (in_array($row->name, $this->lists['coreFields'])); $image = (JVM_VERSION===1) ? 'checked_out.png' : 'admin/checked_out.png'; $image = JHtml::_('image.administrator', $image, '/images/', null, null, JText::_('COM_VIRTUEMART_FIELDMANAGER_COREFIELD')); //$checked = '
            '.JHTML::_('grid.id', $i, null,$row->virtuemart_userfield_id); $checked = JHTML::_('grid.id', $i ,$row->virtuemart_userfield_id,null,'virtuemart_userfield_id'); if ($coreField) $checked.=''. $image .''; $checked .= '
            '; // There is no reason not to allow moving of the core fields. We only need to disable deletion of them // ($coreField) ? // ''. $image .'' : $editlink = JROUTE::_('index.php?option=com_virtuemart&view=userfields&task=edit&virtuemart_userfield_id=' . $row->virtuemart_userfield_id); $required = $this->toggle($row->required, $i, 'toggle.required', $coreField); // $published = JHTML::_('grid.published', $row, $i); $published = $this->toggle($row->published, $i, 'toggle.published', $coreField); $registration = $this->toggle($row->registration, $i, 'toggle.registration', $coreField); $shipment = $this->toggle($row->shipment, $i, 'toggle.shipment', $coreField); $account = $this->toggle($row->account, $i, 'toggle.account', $coreField); $ordering = ($this->lists['filter_order'] == 'ordering'); $disabled = ($ordering ? '' : 'disabled="disabled"'); ?>
            sort('name','COM_VIRTUEMART_FIELDMANAGER_NAME') ?> sort('type','COM_VIRTUEMART_FIELDMANAGER_TYPE') ?> sort('ordering','COM_VIRTUEMART_FIELDMANAGER_REORDER') ?> userfieldsList ); ?> sort('virtuemart_userfield_id', 'COM_VIRTUEMART_ID') ?>
            name); ?> title); ?> type); ?> pagination->orderUpIcon( $i, true, 'orderup', JText::_('COM_VIRTUEMART_MOVE_UP'), $ordering ); ?> pagination->orderDownIcon( $i, $n, true, 'orderdown', JText::_('COM_VIRTUEMART_MOVE_DOWN'), $ordering ); ?> class="text_area" style="text-align: center" /> virtuemart_userfield_id; ?>
            pagination->getListFooter(); ?>
            addStandardHiddenToForm(); ?>
            views/userfields/view.json.php000066600000004350151374526160012521 0ustar00setQuery($q); $this->plugin = $db ->loadObject(); if (!class_exists('vmParameters')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'parameterparser.php'); $parameters = new vmParameters($this->plugin , $this->plugin->element , 'plugin' ,'vmuserfield'); $lang = JFactory::getLanguage(); $filename = 'plg_vmuserfield_' . $this->plugin->element; if(VmConfig::get('enableEnglish', 1)){ $lang->load($filename, JPATH_ADMINISTRATOR, 'en-GB', true); } $lang->load($filename, JPATH_ADMINISTRATOR, $lang->getDefault(), true); $lang->load($filename, JPATH_ADMINISTRATOR, null, true); echo $parameters->render(); //echo ''; jExit(); } } jExit(); } } // pure php no closing tag views/user/tmpl/default.php000066600000010414151374526160012006 0ustar00
            userList); $i < $n; $i++) { $row = $this->userList[$i]; $checked = JHTML::_('grid.id', $i, $row->id); $editlink = JROUTE::_('index.php?option=com_virtuemart&view=user&task=edit&virtuemart_user_id[]=' . $row->id); $is_vendor = $this->toggle($row->is_vendor, $i, 'toggle.user_is_vendor'); ?>
            sort('ju.username', 'COM_VIRTUEMART_USERNAME') ?> sort('ju.name', 'COM_VIRTUEMART_USER_DISPLAYED_NAME') ?> sort('shopper_group_name', 'COM_VIRTUEMART_SHOPPERGROUP') ?>
            username; ?> name; ?> email; ?> perm->getPermissions($row->id); // if(empty($row->perms)) $row->perms = 'shopper'; // echo $row->perms . ' / (' . $row->usertype . ')'; ?> shopper_group_name)) $row->shopper_group_name = $this->defaultShopperGroup; echo $row->shopper_group_name; ?> id; ?>
            pagination->getListFooter(); ?>
            addStandardHiddenToForm(); ?>
            views/user/tmpl/edit_vendorletter.php000066600000031024151374526160014104 0ustar00

            JText::_('COM_VIRTUEMART_VENDOR_LETTER_A4'), 'Letter'=>JText::_('COM_VIRTUEMART_VENDOR_LETTER_LETTER')), $default=$this->vendor->vendor_letter_format, $attrib='', 'value', 'text', $zero=false); ?> JText::_('COM_VIRTUEMART_VENDOR_LETTER_ORIENTATION_PORTRAIT'), 'L'=>JText::_('COM_VIRTUEMART_VENDOR_LETTER_ORIENTATION_LANDSCAPE')), $default=$this->vendor->vendor_letter_orientation, $attrib='', 'value', 'text', $zero=false); ?> vendor->vendor_letter_add_tos); ?> vendor->vendor_letter_add_tos_newpage); ?>
            :
            mm
            :
            mm
            :
            mm
            :
            mm
            :
            mm
            :
            mm
            pdfFonts, 'vendor_letter_font', 'size', 'value', 'text', $this->vendor->vendor_letter_font); // echo JHTML::link('http://dev.virtuemart.net/','Get More Fonts!','target="_blank"'); ?>
            : pt
            : pt
            : pt
            :
            vendor->vendor_letter_header); ?> :
            vendor->vendor_letter_header_line); ?> :
            vendor->vendor_letter_header_image); ?> :
            editor->display('vendor_letter_header_html', $this->vendor->vendor_letter_header_html, '100%', 200, 70, 15)?>

            vendor->vendor_letter_footer); ?> :
            vendor->vendor_letter_footer_line); ?> :
            editor->display('vendor_letter_footer_html', $this->vendor->vendor_letter_footer_html, '100%', 200, 70, 15)?>

            views/user/tmpl/edit_shipto.php000066600000005316151374526160012702 0ustar00
            shipToFields); if (count($this->shipToFields['functions']) > 0) { echo ''."\n"; } for ($_i = 0, $_n = count($this->shipToFields['fields']); $_i < $_n; $_i++) { // Do this at the start of the loop, since we're using 'continue' below! if ($_i == 0) { $_field = current($this->shipToFields['fields']); } else { $_field = next($this->shipToFields['fields']); } if ($_field['hidden'] == true) { $_hiddenFields .= $_field['formcode']."\n"; continue; } if ($_field['type'] == 'delimiter') { if ($_set) { // We're in Fieldset. Close this one and start a new if ($_table) { echo ' '."\n"; $_table = false; } echo '
            '."\n"; } $_set = true; echo '
            '."\n"; echo ' '."\n"; echo ' ' . $_field['title']; echo ' '."\n"; continue; } if (!$_table) { // A table hasn't been opened as well. We need one here, echo ' '."\n"; $_table = true; } echo ' '."\n"; echo ' '."\n"; echo ' '."\n"; echo ' '."\n"; } if ($_table) { echo '
            '."\n"; echo ' '."\n"; echo ' '."\n"; echo ' '.$_field['formcode']."\n"; echo '
            '."\n"; } if ($_set) { echo '
            '."\n"; } echo $_hiddenFields; if(!empty($this->virtuemart_userinfo_id)){ echo ''; } ?> views/manufacturer/tmpl/edit.php000066600000004411151374526160013025 0ustar00
            manufacturer->virtuemart_manufacturer_id); // Loading Templates in Tabs END ?> addStandardHiddenToForm(); ?>
            views/manufacturer/tmpl/edit_images.php000066600000001761151374526160014357 0ustar00
            manufacturer->images[0]->addHidden('virtuemart_vendor_id',$this->virtuemart_vendor_id); echo $this->manufacturer->images[0]->displayFilesHandler($this->manufacturer->virtuemart_media_id,'manufacturer'); ?>
            views/manufacturer/tmpl/edit_description.php000066600000003556151374526160015441 0ustar00 langList; ?>
            manufacturer->mf_name); ?> manufacturer->published); ?> viewName.' '. JText::_('COM_VIRTUEMART_SLUG'),'slug',$this->manufacturer->slug); ?> manufacturerCategories,$this->manufacturer->virtuemart_manufacturercategories_id,'','virtuemart_manufacturercategories_id', 'mf_category_name',false); ?> manufacturer->mf_url); ?> manufacturer->mf_email); ?> manufacturer->mf_desc); ?>
            views/config/.htaccess000066600000000177151374526160010767 0ustar00 Order allow,deny Deny from all views/config/tmpl/default_pricing.php000066600000010615151374526160014013 0ustar00addScriptDeclaration($js); ?>
            config, 'basePrice', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_BASEPRICE'); echo ShopFunctions::writePriceConfigLine($this->config, 'variantModification', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_VARMOD'); echo ShopFunctions::writePriceConfigLine($this->config, 'basePriceVariant', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_BASEPRICE_VAR'); echo ShopFunctions::writePriceConfigLine($this->config, 'discountedPriceWithoutTax', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_DISCPRICE_WOTAX', 0); echo ShopFunctions::writePriceConfigLine($this->config, 'priceWithoutTax', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_SALESPRICE_WOTAX', 0); echo ShopFunctions::writePriceConfigLine($this->config, 'taxAmount', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_TAX_AMOUNT', 0); echo ShopFunctions::writePriceConfigLine($this->config, 'basePriceWithTax', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_BASEPRICE_WTAX'); echo ShopFunctions::writePriceConfigLine($this->config, 'salesPrice', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_SALESPRICE'); echo ShopFunctions::writePriceConfigLine($this->config, 'salesPriceWithDiscount', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_SALESPRICE_WD'); echo ShopFunctions::writePriceConfigLine($this->config, 'discountAmount', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_DISC_AMOUNT'); echo ShopFunctions::writePriceConfigLine($this->config, 'unitPrice', 'COM_VIRTUEMART_ADMIN_CFG_PRICE_UNITPRICE'); ?>
            views/config/tmpl/default.php000066600000003254151374526160012301 0ustar00
            'COM_VIRTUEMART_ADMIN_CFG_SHOPTAB', 'shopfront' => 'COM_VIRTUEMART_ADMIN_CFG_SHOPFRONTTAB', 'templates' => 'COM_VIRTUEMART_ADMIN_CFG_TEMPLATESTAB', 'pricing' => 'COM_VIRTUEMART_ADMIN_CFG_PRICINGTAB', 'checkout' => 'COM_VIRTUEMART_ADMIN_CFG_CHECKOUTTAB', 'product_order'=> 'COM_VIRTUEMART_ADMIN_CFG_PRODUCTORDERTAB', 'sef' => 'COM_VIRTUEMART_ADMIN_CFG_SEF' )); ?>
            views/config/tmpl/index.html000066600000000054151374526160012134 0ustar00views/config/tmpl/.htaccess000066600000000177151374526160011743 0ustar00 Order allow,deny Deny from all views/config/tmpl/default_checkout.php000066600000022506151374526160014167 0ustar00addScriptDeclaration($js); /*
            */ ?>
            JText::_('COM_VIRTUEMART_DELDATE_INV') , 'osP' => JText::_('COM_VIRTUEMART_ORDER_STATUS_PENDING') , 'osU' => JText::_('COM_VIRTUEMART_ORDER_STATUS_CONFIRMED_BY_SHOPPER') , 'osC' => JText::_('COM_VIRTUEMART_ORDER_STATUS_CONFIRMED') , 'osS' => JText::_('COM_VIRTUEMART_ORDER_STATUS_SHIPPED') , 'osR' => JText::_('COM_VIRTUEMART_ORDER_STATUS_REFUNDED') , 'osC' => JText::_('COM_VIRTUEMART_ORDER_STATUS_CANCELLED') ); echo VmHTML::row('selectList','COM_VIRTUEMART_CFG_DELDATE_INV','del_date_type', VmConfig::get('del_date_type','m'), $_delivery_date_options); ?>
            orderStatusModel->renderOSList(VmConfig::get('inv_os',array('C')),'inv_os',TRUE); ?>
            orderStatusModel->renderOSList(VmConfig::get('email_os_s',array('U','C','S','R','X')),'email_os_s',TRUE); ?>
            orderStatusModel->renderOSList(VmConfig::get('email_os_v',array('U','C','R','X')),'email_os_v',TRUE); ?>
            titlesFields ; ?>
            */ ?>views/config/tmpl/default_shopfront.php000066600000033547151374526160014413 0ustar00
            '1 ' . JText::_('COM_VIRTUEMART_DAY') , '1,W' => '1 ' . JText::_('COM_VIRTUEMART_WEEK') , '2,W' => '2 ' . JText::_('COM_VIRTUEMART_WEEK_S') , '1,M' => '1 ' . JText::_('COM_VIRTUEMART_MONTH') , '3,M' => '3 ' . JText::_('COM_VIRTUEMART_MONTH_S') , '6,M' => '6 ' . JText::_('COM_VIRTUEMART_MONTH_S') , '1,Y' => '1 ' . JText::_('COM_VIRTUEMART_YEAR') ); echo VmHTML::selectList('coupons_default_expire', VmConfig::get('coupons_default_expire'), $_defaultExpTime); ?>
            orderStatusModel->renderOSList(VmConfig::get('cp_rm',array('C')),'cp_rm',TRUE) ; ?>
            JText::_('COM_VIRTUEMART_LATEST_PRODUCTS_ORDERBY_MODIFIED'), 'created_on' => JText::_('COM_VIRTUEMART_LATEST_PRODUCTS_ORDERBY_CREATED') ); echo VmHTML::selectList('latest_products_orderBy', VmConfig::get('latest_products_orderBy', 'created_on'), $latest_products_orderBy); ?>
            JText::_('COM_VIRTUEMART_ADMIN_CFG_POOS_NONE'), 'disableit' => JText::_('COM_VIRTUEMART_ADMIN_CFG_POOS_DISABLE_IT'), 'disableit_children' => JText::_('COM_VIRTUEMART_ADMIN_CFG_POOS_DISABLE_IT_CHILDREN'), 'disableadd' => JText::_('COM_VIRTUEMART_ADMIN_CFG_POOS_DISABLE_ADD'), 'risetime' => JText::_('COM_VIRTUEMART_ADMIN_CFG_POOS_RISE_AVATIME') ); echo VmHTML::radioList('stockhandle', VmConfig::get('stockhandle', 'none'), $options); ?>
            imagePath); ?>
            <?php echo JText::_('COM_VIRTUEMART_PREVIEW'); ?>
            JText::_('COM_VIRTUEMART_ADMIN_CFG_REVIEW_SHOW_NONE'), 'registered' => JText::_('COM_VIRTUEMART_ADMIN_CFG_REVIEW_SHOW_REGISTERED'), 'all' => JText::_('COM_VIRTUEMART_ADMIN_CFG_REVIEW_SHOW_ALL') ); //showReviewFor echo VmHTML::radioList('showReviewFor', VmConfig::get('showReviewFor', 'all'), $showReviewFor); ?>
            JText::_('COM_VIRTUEMART_ADMIN_CFG_REVIEW_MODE_NONE'), 'bought' => JText::_('COM_VIRTUEMART_ADMIN_CFG_REVIEW_MODE_BOUGHT_PRODUCT'), 'registered' => JText::_('COM_VIRTUEMART_ADMIN_CFG_REVIEW_MODE_REGISTERED') // 3 => JText::_('COM_VIRTUEMART_ADMIN_CFG_REVIEW_MODE_ALL') ); echo VmHTML::radioList('reviewMode', VmConfig::get('reviewMode', 'bought'), $showReviewFor); ?>
            JText::_('COM_VIRTUEMART_ADMIN_CFG_RATING_SHOW_NONE'), 'registered' => JText::_('COM_VIRTUEMART_ADMIN_CFG_RATING_SHOW_REGISTERED'), 'all' => JText::_('COM_VIRTUEMART_ADMIN_CFG_RATING_SHOW_ALL') ); echo VmHTML::radioList('showRatingFor', VmConfig::get('showRatingFor', 'all'), $showReviewFor); ?>
            JText::_('COM_VIRTUEMART_ADMIN_CFG_RATING_MODE_NONE'), 'bought' => JText::_('COM_VIRTUEMART_ADMIN_CFG_RATING_MODE_BOUGHT_PRODUCT'), 'registered' => JText::_('COM_VIRTUEMART_ADMIN_CFG_RATING_MODE_REGISTERED') // 3 => JText::_('COM_VIRTUEMART_ADMIN_CFG_RATING_MODE_ALL') //TODO write system for all users (cookies) ); echo VmHTML::radioList('ratingMode', VmConfig::get('ratingMode', 'bought'), $showReviewFor); ?>
            orderStatusModel->renderOSList(VmConfig::get('rr_os',array('C')),'rr_os',TRUE); ?>
            views/config/tmpl/default_sef.php000066600000004730151374526160013136 0ustar00
            views/config/tmpl/default_templates.php000066600000065143151374526160014364 0ustar00
            jTemplateList, 'vmtemplate', 'size=1 width=200', 'value', 'name', VmConfig::get('vmtemplate', 'default')); ?>
            jTemplateList, 'categorytemplate', 'size=1', 'value', 'name', VmConfig::get('categorytemplate', 'default')); ?>
            categoryLayoutList, 'categorylayout', 'size=1', 'value', 'text', VmConfig::get('categorylayout', 0)); ?>
            productLayoutList, 'productlayout', 'size=1', 'value', 'text', VmConfig::get('productlayout', 0)); ?>
            noimagelist, 'no_image_set', 'size=1', 'value', 'text', VmConfig::get('no_image_set')); ?>
            noimagelist, 'no_image_found', 'size=1', 'value', 'text', VmConfig::get('no_image_found')); ?>
            vmLayoutList, 'vmlayout', 'size=1', 'value', 'text', VmConfig::get('vmlayout', 0)); ?>
            views/config/tmpl/default_product_order.php000066600000006136151374526160015236 0ustar00
            orderByFieldsProduct->select, 'browse_orderby_field', 'size=1', 'value', 'text', VmConfig::get('browse_orderby_field', 'product_name'), 'product_name'); $orderDirs[] = JHTML::_('select.option', 'ASC' , JText::_('Ascending')) ; $orderDirs[] = JHTML::_('select.option', 'DESC' , JText::_('Descending')) ; echo JHTML::_('select.genericlist', $orderDirs, 'prd_brws_orderby_dir', 'size=10', 'value', 'text', VmConfig::get('prd_brws_orderby_dir', 'ASC') ); ?> orderByFieldsCat, 'browse_cat_orderby_field', 'size=1', 'value', 'text', VmConfig::get('browse_cat_orderby_field', 'category_name'), 'category_name'); echo JHTML::_('select.genericlist', $orderDirs, 'cat_brws_orderby_dir', 'size=10', 'value', 'text', VmConfig::get('cat_brws_orderby_dir', 'ASC') ); ?>
            orderByFieldsProduct->checkbox; ?>
            searchFields->checkbox; ?>
            views/config/tmpl/default_shop.php000066600000015317151374526160013335 0ustar00
            currConverterList, 'currency_converter_module', 'size=1', 'value', 'text', VmConfig::get('currency_converter_module', 'convertECB.php')); ?>
            activeLanguages; ?> Translations'); ?>
            JText::_('COM_VIRTUEMART_ADMIN_CFG_ENABLE_DEBUG_NONE'), 'admin' => JText::_('COM_VIRTUEMART_ADMIN_CFG_ENABLE_DEBUG_ADMIN'), 'all' => JText::_('COM_VIRTUEMART_ADMIN_CFG_ENABLE_DEBUG_ALL') ); echo VmHTML::radioList('debug_enable', VmConfig::get('debug_enable', 'none'), $options); ?>
            JText::_('COM_VIRTUEMART_ADMIN_CFG_ENABLE_MULTIX_NONE'), 'admin' => JText::_('COM_VIRTUEMART_ADMIN_CFG_ENABLE_MULTIX_ADMIN') // 'all' => JText::_('COM_VIRTUEMART_ADMIN_CFG_ENABLE_DEBUG_ALL') ); echo VmHTML::radioList('multix', VmConfig::get('multix', 'none'), $options); ?>
            views/config/view.html.php000066600000013125151374526160011614 0ustar00addStandardEditViewCommands(); $config = VmConfig::loadConfig(); if(!empty($config->_params)){ unset ($config->_params['pdf_invoice']); // parameter remove and replaced by inv_os } $this->assignRef('config', $config); $mainframe = JFactory::getApplication(); $this->assignRef('joomlaconfig', $mainframe); $userparams = JComponentHelper::getParams('com_users'); $this->assignRef('userparams', $userparams); $templateList = ShopFunctions::renderTemplateList(JText::_('COM_VIRTUEMART_ADMIN_CFG_JOOMLA_TEMPLATE_DEFAULT')); $this->assignRef('jTemplateList', $templateList); $vmLayoutList = $model->getLayoutList('virtuemart'); $this->assignRef('vmLayoutList', $vmLayoutList); $categoryLayoutList = $model->getLayoutList('category'); $this->assignRef('categoryLayoutList', $categoryLayoutList); $productLayoutList = $model->getLayoutList('productdetails'); $this->assignRef('productLayoutList', $productLayoutList); $noimagelist = $model->getNoImageList(); $this->assignRef('noimagelist', $noimagelist); $orderStatusModel=VmModel::getModel('orderstatus'); $this->assignRef('orderStatusModel', $orderStatusModel); $currConverterList = $model->getCurrencyConverterList(); $this->assignRef('currConverterList', $currConverterList); $moduleList = $model->getModuleList(); $this->assignRef('moduleList', $moduleList); $activeLanguages = $model->getActiveLanguages( VmConfig::get('active_languages') ); $this->assignRef('activeLanguages', $activeLanguages); $orderByFieldsProduct = $model->getProductFilterFields('browse_orderby_fields'); $this->assignRef('orderByFieldsProduct', $orderByFieldsProduct); VmModel::getModel('category'); foreach (VirtueMartModelCategory::$_validOrderingFields as $key => $field ) { if($field=='c.category_shared') continue; $fieldWithoutPrefix = $field; $dotps = strrpos($fieldWithoutPrefix, '.'); if($dotps!==false){ $prefix = substr($field, 0,$dotps+1); $fieldWithoutPrefix = substr($field, $dotps+1); } $text = JText::_('COM_VIRTUEMART_'.strtoupper($fieldWithoutPrefix)) ; $orderByFieldsCat[] = JHTML::_('select.option', $field, $text) ; } //$orderByFieldsCat = $model->get; $this->assignRef('orderByFieldsCat', $orderByFieldsCat); $searchFields = $model->getProductFilterFields( 'browse_search_fields'); $this->assignRef('searchFields', $searchFields); $aclGroups = $usermodel->getAclGroupIndentedTree(); $this->assignRef('aclGroups', $aclGroups); if(!class_exists('shopFunctionsF'))require(JPATH_VM_SITE.DS.'helpers'.DS.'shopfunctionsf.php'); $vmtemplate = shopFunctionsF::loadVmTemplateStyle(); if(is_Dir(JPATH_ROOT.DS.'templates'.DS.$vmtemplate.DS.'images'.DS.'availability'.DS)){ $imagePath = '/templates/'.$vmtemplate.'/images/availability/'; } else { $imagePath = '/components/com_virtuemart/assets/images/availability/'; } $this->assignRef('imagePath', $imagePath); shopFunctions::checkSafePath(); $this -> checkVmUserVendor(); parent::display($tpl); } private function checkVmUserVendor(){ $db = JFactory::getDBO(); $multix = Vmconfig::get('multix','none'); $q = 'select * from #__virtuemart_vmusers where user_is_vendor = 1';// and virtuemart_vendor_id '.$vendorWhere.' limit 1'; $db->setQuery($q); $r = $db->loadAssocList(); if (empty($r)){ vmWarn('Your Virtuemart installation contains an error: No user as marked as vendor. Please fix this in your phpMyAdmin and set #__virtuemart_vmusers.user_is_vendor = 1 and #__virtuemart_vmusers.virtuemart_vendor_id = 1 to one of your administrator users. Please update all users to be associated with virtuemart_vendor_id 1.'); } else { if($multix=='none' and count($r)!=1){ vmWarn('You are using single vendor mode, but it seems more than one user is set as vendor'); } foreach($r as $entry){ if(empty($entry['virtuemart_vendor_id'])){ vmWarn('The user with virtuemart_user_id = '.$entry['virtuemart_user_id'].' is set as vendor, but has no referencing vendorId.'); } } } } } // pure php no closing tag views/config/index.html000066600000000054151374526160011160 0ustar00views/inventory/.htaccess000066600000000177151374526160011557 0ustar00 Order allow,deny Deny from all views/inventory/index.html000066600000000000151374526160011737 0ustar00views/inventory/tmpl/index.html000066600000000000151374526160012713 0ustar00views/inventory/tmpl/.htaccess000066600000000177151374526160012533 0ustar00 Order allow,deny Deny from all views/inventory/tmpl/default.php000066600000010715151374526160013071 0ustar00
            inventorylist) > 0) { $i = 0; $k = 0; $keyword = vRequest::uword ('keyword', "", ' ,-,+,.,_,#,/'); foreach ($this->inventorylist as $key => $product) { $checked = JHTML::_('grid.id', $i , $product->virtuemart_product_id); $published = JHTML::_('grid.published', $product, $i ); // if ( $product->product_in_stock - $product->product_ordered < 1) $stockstatut ="out"; elseif ( $product->product_in_stock - $product->product_ordered < $product->low_stock_notification ) $stockstatut ="low"; else $stockstatut = "normal"; $stockstatut='class="stock-'.$stockstatut.'" title="'.jText::_('COM_VIRTUEMART_STOCK_LEVEL_'.$stockstatut).'"'; ?> virtuemart_product_id.'&product_parent_id='.$product->product_parent_id; ?>
            sort('product_name') ?> sort('product_sku')?> sort('product_in_stock','COM_VIRTUEMART_PRODUCT_FORM_IN_STOCK') ?> sort('product_price','COM_VIRTUEMART_PRODUCT_FORM_PRICE_COST') ?> sort('product_price', 'COM_VIRTUEMART_PRODUCT_INVENTORY_PRICE') ?> sort('product_weight','COM_VIRTUEMART_PRODUCT_INVENTORY_WEIGHT') ?> sort('published')?>
            product_name, array('title' => JText::_('COM_VIRTUEMART_EDIT').' '.$product->product_name)); ?> product_sku; ?> >product_in_stock; ?> width="5%">product_ordered; ?> product_price_display; ?> product_instock_value; ?> product_weight." ". $product->weigth_unit_display; ?>
            pagination->getListFooter(); ?>
            views/inventory/view.html.php000066600000005633151374526160012411 0ustar00addStandardDefaultViewLists($model); $inventorylist = $model->getProductListing(false,false); $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); // Apply currency $currencydisplay = CurrencyDisplay::getInstance(); foreach ($inventorylist as $virtuemart_product_id => $product) { //TODO oculd be interesting to show the price for each product, and all stored ones $product->product_in_stock $product->product_instock_value = $currencydisplay->priceDisplay($product->product_price,'',$product->product_in_stock,false); $product->product_price_display = $currencydisplay->priceDisplay($product->product_price,'',1,false); $product->weigth_unit_display= ShopFunctions::renderWeightUnit($product->product_weight_uom); } $this->assignRef('inventorylist', $inventorylist); $options = array(); $options[] = JHTML::_('select.option', '', JText::_('COM_VIRTUEMART_DISPLAY_STOCK').':'); $options[] = JHTML::_('select.option', 'stocklow', JText::_('COM_VIRTUEMART_STOCK_LEVEL_LOW')); $options[] = JHTML::_('select.option', 'stockout', JText::_('COM_VIRTUEMART_STOCK_LEVEL_OUT')); $this->lists['stockfilter'] = JHTML::_('select.genericlist', $options, 'search_type', 'onChange="document.adminForm.submit(); return false;"', 'value', 'text', JRequest::getVar('search_type')); $this->lists['filter_product'] = JRequest::getVar('filter_product'); // $this->assignRef('lists', $lists); /* Toolbar */ $this->SetViewTitle('PRODUCT_INVENTORY'); JToolBarHelper::publish(); JToolBarHelper::unpublish(); parent::display($tpl); } } // pure php no closing tag views/orders/tmpl/order_print.php000066600000001463151374526160013235 0ustar00addScriptDeclaration ( " function cancelOrderStatFormEdit(e) { jQuery('#orderStatForm').each(function(){ this.reset(); }); jQuery('#order_items_status') .find('option:selected').prop('selected', true) .end().trigger('liszt:updated'); jQuery('div#updateOrderStatus').hide(); e.preventDefault(); } "); ?>

            orderStatSelect; ?>


            orderID.'][update_lines]', true); ?>
                  
            views/orders/tmpl/order.php000066600000110040151374526160012011 0ustar00addScriptDeclaration ( " jQuery( function($) { $('.orderedit').hide(); $('.ordereditI').show(); $('.orderedit').css('backgroundColor', 'lightgray'); jQuery('.updateOrderItemStatus').click(function() { document.orderItemForm.task.value = 'updateOrderItemStatus'; document.orderItemForm.submit(); return false }); jQuery('select#virtuemart_paymentmethod_id').change(function(){ jQuery('span#delete_old_payment').show(); jQuery('input#delete_old_payment').attr('checked','checked'); }); }); function enableEdit(e) { jQuery('.orderedit').each( function() { var d = jQuery(this).css('visibility')=='visible'; jQuery(this).toggle(); jQuery('.orderedit').css('backgroundColor', d ? 'white' : 'lightgray'); jQuery('.orderedit').css('color', d ? 'blue' : 'black'); }); jQuery('.ordereditI').each( function() { jQuery(this).toggle(); }); e.preventDefault(); }; function addNewLine(e,i) { var row = jQuery('#itemTable').find('tbody tr:first').html(); var needle = 'item_id['+i+']'; //var needle = new RegExp('item_id['+i+']','igm'); while (row.contains(needle)){ row = row.replace(needle,'item_id[0]'); } //alert(needle); jQuery('#itemTable').find('tbody').prepend(''+row+''); e.preventDefault(); }; function cancelEdit(e) { jQuery('#orderItemForm').each(function(){ this.reset(); }); jQuery('.selectItemStatusCode') .find('option:selected').prop('selected', true) .end().trigger('liszt:updated'); jQuery('.orderedit').hide(); jQuery('.ordereditI').show(); e.preventDefault(); } function resetOrderHead(e) { jQuery('#orderForm').each(function(){ this.reset(); }); jQuery('select#virtuemart_paymentmethod_id') .find('option:selected').prop('selected', true) .end().trigger('liszt:updated'); jQuery('select#virtuemart_shipmentmethod_id') .find('option:selected').prop('selected', true) .end().trigger('liszt:updated'); e.preventDefault(); } "); ?>
              
            orderbt->virtuemart_order_id . '&order_number=' .$this->orderbt->order_number. '&order_pass=' .$this->orderbt->order_pass; $print_link = ""; $print_link .= $this->orderbt->order_number . ' '; ?> orderbt->coupon_code) { ?> orderbt->invoiceNumber and !shopFunctions::InvoiceNumberReserved($this->orderbt->invoiceNumber) ) { $invoice_url = juri::root().'index.php?option=com_virtuemart&view=invoice&layout=invoice&format=pdf&tmpl=component&virtuemart_order_id=' . $this->orderbt->virtuemart_order_id . '&order_number=' .$this->orderbt->order_number. '&order_pass=' .$this->orderbt->order_pass; $invoice_link = ""; $invoice_link .= $this->orderbt->invoiceNumber . '';?>
            orderbt->order_pass;?>
            orderbt->created_on,'LC2',true); ?>
            orderstatuslist[$this->orderbt->order_status]; ?>
            orderbt->company ? $this->orderbt->company." ":""; $username.=$this->orderbt->first_name." ".$this->orderbt->last_name." "; if ($this->orderbt->virtuemart_user_id) { $userlink = JROUTE::_ ('index.php?option=com_virtuemart&view=user&task=edit&virtuemart_user_id[]=' . $this->orderbt->virtuemart_user_id); echo JHTML::_ ('link', JRoute::_ ($userlink), $username, array('title' => JText::_ ('COM_VIRTUEMART_ORDER_EDIT_USER') . ' ' . $username)); } else { echo $this->orderbt->first_name.' '.$this->orderbt->last_name; } ?>
            orderbt->ip_address; ?>
            orderbt->coupon_code; ?>
            orderdetails['history'] as $this->orderbt_event ) { echo ""; echo "\n"; if ($this->orderbt_event->customer_notified == 1) { echo ''; } else { echo ''; } if(!isset($this->orderstatuslist[$this->orderbt_event->order_status_code])){ if(empty($this->orderbt_event->order_status_code)){ $this->orderbt_event->order_status_code = 'unknown'; } $_orderStatusList[$this->orderbt_event->order_status_code] = JText::_('COM_VIRTUEMART_UNKNOWN_ORDER_STATUS'); } echo ''; echo "\n"; echo "\n"; } ?> trigger('plgVmOnUpdateOrderBEPayment',array($this->orderID)); $_returnValues2 = $_dispatcher->trigger('plgVmOnUpdateOrderBEShipment',array( $this->orderID)); $_returnValues = array_merge($_returnValues1, $_returnValues2); $_plg = ''; foreach ($_returnValues as $_returnValue) { if ($_returnValue !== null) { $_plg .= (' \n"); } } if ($_plg !== '') { echo "\n$_plg\n"; } ?>
            ". vmJsApi::date($this->orderbt_event->created_on,'LC2',true) ."'.JText::_('COM_VIRTUEMART_YES').''.JText::_('COM_VIRTUEMART_NO').''.$this->orderstatuslist[$this->orderbt_event->order_status_code].'".$this->orderbt_event->comments."
            ' . $_returnValue . "
            orderbt->customer_note || true) { ?>
            getPayments(); $model = VmModel::getModel('shipmentmethod'); $shipments = $model->getShipments(); ?>
            virtuemart_paymentmethod_id == $this->orderbt->virtuemart_paymentmethod_id) echo $payment->payment_name; } ?>
            virtuemart_shipmentmethod_id == $this->orderbt->virtuemart_shipmentmethod_id) echo $shipment->shipment_name; } ?>
             
            userfields['fields'] as $_field ) { echo ' '."\n"; echo ' '."\n"; echo ' '."\n"; echo ' '."\n"; //*/ /* $fn = $_field['name']; $fv = $_field['value']; $ft = $_field['title']; echo ' '."\n"; echo ' '."\n"; echo ' '."\n"; echo ' '."\n";*/ } ?>
            '."\n"; echo ' '."\n"; echo ' '."\n"; echo ' '.$_field['formcode']."\n"; echo '
            '."\n"; echo ' '.$ft."\n"; echo ' '."\n"; echo " \n"; echo '
            shipmentfields['fields'] as $_field ) { echo ' '."\n"; echo ' '."\n"; echo ' '."\n"; echo ' '."\n"; } ?>
            '."\n"; echo ' '."\n"; echo ' '."\n"; echo ' '.$_field['formcode']."\n"; echo '
            orderdetails['items'] as $item) { ?> virtuemart_order_item_id; ?>" data-itemid="virtuemart_order_item_id; ?>">*/ ?> orderbt->coupon_discount > 0 || $this->orderbt->coupon_discount < 0) { ?> orderdetails['calc_rules'] as $rule){ if ($rule->calc_kind == 'DBTaxRulesBill') { ?> calc_kind == 'taxRulesBill') { ?> calc_kind == 'DATaxRulesBill') { ?> orderbt->user_currency_rate != 1.0) { ?>
            #
            product_quantity; ?> order_item_name; ?> order_item_name; if (!empty($item->product_attribute)) { if(!class_exists('VirtueMartModelCustomfields'))require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'customfields.php'); $product_attribute = VirtueMartModelCustomfields::CustomsFieldOrderDisplay($item,'BE'); echo '
            '.$product_attribute.'
            '; } $_dispatcher = JDispatcher::getInstance(); $_returnValues = $_dispatcher->trigger('plgVmOnShowOrderLineBEShipment',array( $this->orderID,$item->virtuemart_order_item_id)); $_plg = ''; foreach ($_returnValues as $_returnValue) { if ($_returnValue !== null) { $_plg .= $_returnValue; } } if ($_plg !== '') { echo '' . '' . '' // Indent . '' . '' . '
            '.$_plg.'
            '; } ?> virtuemart_product_id)) { ?> Product ID:
            order_item_sku; ?> itemstatusupdatefields[$item->virtuemart_order_item_id]; ?> product_discountedPriceWithoutTax = (float) $item->product_discountedPriceWithoutTax; if (!empty($item->product_priceWithoutTax) && $item->product_discountedPriceWithoutTax != $item->product_priceWithoutTax) { echo ''.$this->currency->priceDisplay($item->product_item_price) .'
            '; echo ''.$this->currency->priceDisplay($item->product_discountedPriceWithoutTax) .'
            '; } else { echo ''.$this->currency->priceDisplay($item->product_item_price) .'
            '; } ?>
            currency->priceDisplay($item->product_basePriceWithTax); ?> currency->priceDisplay($item->product_final_price); ?> currency->priceDisplay( $item->product_tax); ?> currency->priceDisplay( $item->product_subtotal_discount); ?> product_basePriceWithTax = (float) $item->product_basePriceWithTax; if(!empty($item->product_basePriceWithTax) && $item->product_basePriceWithTax != $item->product_final_price ) { echo ''.$this->currency->priceDisplay($item->product_basePriceWithTax,$this->currency,$item->product_quantity) .'
            ' ; } elseif (empty($item->product_basePriceWithTax) && $item->product_item_price != $item->product_final_price) { echo '' . $this->currency->priceDisplay($item->product_item_price,$this->currency,$item->product_quantity) . '
            '; } echo $this->currency->priceDisplay($item->product_subtotal_with_tax); ?>
                     orderStatSelect; ?>    
            orderbt->virtuemart_order_id.'&orderLineId=0&tmpl=component&task=editOrderItem'); ?>
            :
            currency->priceDisplay($this->orderbt->order_subtotal); ?>     currency->priceDisplay($this->orderbt->order_tax); ?> currency->priceDisplay($this->orderbt->order_discountAmount); ?> currency->priceDisplay($this->orderbt->order_salesPrice); ?>
                      currency->priceDisplay($this->orderbt->coupon_discount); ?>
            calc_rule_name ?> currency->priceDisplay($rule->calc_amount); ?> currency->priceDisplay($rule->calc_amount);?>
            calc_rule_name ?> currency->priceDisplay($rule->calc_amount); ?> currency->priceDisplay($rule->calc_amount); ?>
            calc_rule_name ?> currency->priceDisplay($rule->calc_amount); ?> currency->priceDisplay($rule->calc_amount); ?>
            : currency->priceDisplay($this->orderbt->order_shipment); ?>     currency->priceDisplay($this->orderbt->order_shipment_tax); ?>   currency->priceDisplay($this->orderbt->order_shipment+$this->orderbt->order_shipment_tax); ?>
            : currency->priceDisplay($this->orderbt->order_payment); ?>     currency->priceDisplay($this->orderbt->order_payment_tax); ?>   currency->priceDisplay($this->orderbt->order_payment+$this->orderbt->order_payment_tax); ?>
            :       currency->priceDisplay($this->orderbt->order_billTaxAmount); ?> currency->priceDisplay($this->orderbt->order_billDiscountAmount); ?> currency->priceDisplay($this->orderbt->order_total); ?>
            :           orderbt->user_currency_rate ?>
             
            trigger('plgVmOnShowOrderBEShipment',array( $this->orderID,$this->orderbt->virtuemart_shipmentmethod_id, $this->orderdetails)); foreach ($returnValues as $returnValue) { if ($returnValue !== null) { echo $returnValue; } } ?> trigger('plgVmOnShowOrderBEPayment',array( $this->orderID,$this->orderbt->virtuemart_paymentmethod_id, $this->orderdetails)); foreach ($_returnValues as $_returnValue) { if ($_returnValue !== null) { echo $_returnValue; } } ?>
            views/orders/tmpl/orders.php000066600000023662151374526160012211 0ustar00
            orderslist) > 0) { $i = 0; $k = 0; $keyword = JRequest::getWord ('keyword'); foreach ($this->orderslist as $key => $order) { $checked = JHTML::_ ('grid.id', $i, $order->virtuemart_order_id); ?> virtuemart_order_id; ?> virtuemart_order_id . '&order_number=' . $order->order_number . '&order_pass=' . $order->order_pass; $print_link = ""; $print_link .= ' '; $invoice_link = ''; $deliverynote_link = ''; if (!$order->invoiceNumber) { $invoice_url = juri::root () . 'index.php?option=com_virtuemart&view=invoice&layout=invoice&format=pdf&tmpl=component&virtuemart_order_id=' . $order->virtuemart_order_id . '&order_number=' . $order->order_number . '&order_pass=' . $order->order_pass . '&create_invoice=1'; $invoice_link .= "".''; } elseif (!shopFunctions::InvoiceNumberReserved ($order->invoiceNumber)) { $invoice_url = juri::root () . 'index.php?option=com_virtuemart&view=invoice&layout=invoice&format=pdf&tmpl=component&virtuemart_order_id=' . $order->virtuemart_order_id . '&order_number=' . $order->order_number . '&order_pass=' . $order->order_pass; $invoice_link = "" . ''; } if (!$order->invoiceNumber) { $deliverynote_url = juri::root () . 'index.php?option=com_virtuemart&view=invoice&layout=deliverynote&format=pdf&tmpl=component&virtuemart_order_id=' . $order->virtuemart_order_id . '&order_number=' . $order->order_number . '&order_pass=' . $order->order_pass . '&create_invoice=1'; $deliverynote_link = "" . ''; } elseif (!shopFunctions::InvoiceNumberReserved ($order->invoiceNumber)) { $deliverynote_url = juri::root () . 'index.php?option=com_virtuemart&view=invoice&layout=deliverynote&format=pdf&tmpl=component&virtuemart_order_id=' . $order->virtuemart_order_id . '&order_number=' . $order->order_number . '&order_pass=' . $order->order_pass; $deliverynote_link = "" . ''; } ?>
            sort ('order_number', 'COM_VIRTUEMART_ORDER_LIST_NUMBER') ?> sort ('order_name', 'COM_VIRTUEMART_ORDER_PRINT_NAME') ?> sort ('order_email', 'COM_VIRTUEMART_EMAIL') ?> sort ('payment_method', 'COM_VIRTUEMART_ORDER_PRINT_PAYMENT_LBL') ?> sort ('created_on', 'COM_VIRTUEMART_ORDER_CDATE') ?> sort ('modified_on', 'COM_VIRTUEMART_ORDER_LIST_MDATE') ?> sort ('order_status', 'COM_VIRTUEMART_STATUS') ?> sort ('order_total', 'COM_VIRTUEMART_TOTAL') ?> sort ('virtuemart_order_id', 'COM_VIRTUEMART_ORDER_LIST_ID') ?>
            order_number, array('title' => JText::_ ('COM_VIRTUEMART_ORDER_EDIT_ORDER_NUMBER') . ' ' . $order->order_number)); ?> virtuemart_user_id) { $userlink = JROUTE::_ ('index.php?option=com_virtuemart&view=user&task=edit&virtuemart_user_id[]=' . $order->virtuemart_user_id, FALSE); echo JHTML::_ ('link', JRoute::_ ($userlink, FALSE), $order->order_name, array('title' => JText::_ ('COM_VIRTUEMART_ORDER_EDIT_USER') . ' ' . $order->order_name)); } else { echo $order->order_name; } ?> order_email; ?> payment_method; ?> created_on, 'LC2', TRUE); ?> modified_on, 'LC2', TRUE); ?> orderstatuses, "orders[" . $order->virtuemart_order_id . "][order_status]", 'class="orderstatus_select"', 'order_status_code', 'order_status_name', $order->order_status, 'order_status' . $i, TRUE); ?>
            'show_comment')); ?>
            virtuemart_order_id . '][customer_notified]', 0) . JText::_ ('COM_VIRTUEMART_ORDER_LIST_NOTIFY'); ?>
               virtuemart_order_id . '][customer_send_comment]', 1) . JText::_ ('COM_VIRTUEMART_ORDER_HISTORY_INCLUDE_COMMENT'); ?>
            virtuemart_order_id . '][update_lines]', 1) . JText::_ ('COM_VIRTUEMART_ORDER_UPDATE_LINESTATUS'); ?>
            order_total; ?> virtuemart_order_id, array('title' => JText::_ ('COM_VIRTUEMART_ORDER_EDIT_ORDER_ID') . ' ' . $order->virtuemart_order_id)); ?>
            pagination->getListFooter (); ?>
            addStandardHiddenToForm (); ?>
            views/orders/view.raw.php000066600000010604151374526160011471 0ustar00getOrder($virtuemart_order_id); //$order = $this->get('Order'); $orderNumber = $order['details']['BT']->virtuemart_order_number; $orderbt = $order['details']['BT']; $orderst = (array_key_exists('ST', $order['details'])) ? $order['details']['ST'] : $orderbt; $currency = CurrencyDisplay::getInstance('',$order['details']['BT']->virtuemart_vendor_id); $this->assignRef('currency', $currency); $_userFields = $userFieldsModel->getUserFields( 'registration' , array('captcha' => true, 'delimiters' => true) // Ignore these types , array('delimiter_userinfo','user_is_vendor' ,'username', 'email', 'password', 'password2', 'agreed', 'address_type') // Skips ); $userfields = $userFieldsModel->getUserFieldsFilled( $_userFields ,$orderbt ); $_userFields = $userFieldsModel->getUserFields( 'shipment' , array() // Default switches , array('delimiter_userinfo', 'username', 'email', 'password', 'password2', 'agreed', 'address_type') // Skips ); $shipmentfields = $userFieldsModel->getUserFieldsFilled( $_userFields ,$orderst ); // Create an array to allow orderlinestatuses to be translated // We'll probably want to put this somewhere in ShopFunctions... $_orderStats = $this->get('OrderStatusList'); $_orderStatusList = array(); foreach ($_orderStats as $orderState) { $_orderStatusList[$orderState->order_status_code] = JText::_($orderState->order_status_name); } /*foreach($order['items'] as $_item) { if (!empty($_item->product_attribute)) { $_attribs = preg_split('/\s?\s?/i', $_item->product_attribute); $product = $productModel->getProduct($_item->virtuemart_product_id); $_productAttributes = array(); $_prodAttribs = explode(';', $product->attribute); foreach ($_prodAttribs as $_pAttr) { $_list = explode(',', $_pAttr); $_name = array_shift($_list); $_productAttributes[$_item->virtuemart_order_item_id][$_name] = array(); foreach ($_list as $_opt) { $_optObj = new stdClass(); $_optObj->option = $_opt; $_productAttributes[$_item->virtuemart_order_item_id][$_name][] = $_optObj; } } } }*/ //$_shipmentInfo = ShopFunctions::getShipmentRateDetails($orderbt->virtuemart_shipmentmethod_id); /* Assign the data */ $this->assignRef('orderdetails', $order); $this->assignRef('orderNumber', $orderNumber); $this->assignRef('userfields', $userfields); $this->assignRef('shipmentfields', $shipmentfields); $this->assignRef('orderstatuslist', $_orderStatusList); $this->assignRef('orderbt', $orderbt); $this->assignRef('orderst', $orderst); $this->assignRef('virtuemart_shipmentmethod_id', $orderbt->virtuemart_shipmentmethod_id); error_reporting(0); parent::display($tpl); } } views/about/.htaccess000066600000000177151374526160010634 0ustar00 Order allow,deny Deny from all views/about/index.html000066600000000054151374526160011025 0ustar00views/about/view.html.php000066600000002316151374526160011461 0ustar00views/about/tmpl/.htaccess000066600000000177151374526160011610 0ustar00 Order allow,deny Deny from all views/about/tmpl/default.php000066600000001513151374526160012142 0ustar00 ordersByStatus ); $i < $n; $i++) { $row = $this->ordersByStatus[$i]; $link = JROUTE::_('index.php?option=com_virtuemart&view=orders&show='.$row->order_status_code); ?> order_count; } ?> recentOrders); $i < $n; $i++) { $row = $this->recentOrders[$i]; $link = JROUTE::_('index.php?option=com_virtuemart&view=orders&task=edit&virtuemart_order_id='.$row->virtuemart_order_id); ?> recentCustomers); $i < $n; $i++) { $row = $this->recentCustomers[$i]; $link = JROUTE::_('index.php?option=com_virtuemart&view=user&virtuemart_user_id='.$row->virtuemart_user_id); ?>
            nbrCustomers ?>
            nbrActiveProducts ?>
            : nbrInActiveProducts ?>
            nbrFeaturedProducts ?>
            order_status_name); ?> order_count; ?>
            :
            order_number; ?> order_total ?>
            first_name . ' ' . $row->last_name. ' (' . $row->order_number . ') '; ?>
            views/virtuemart/tmpl/default_controlpanel.php000066600000013556151374526160016024 0ustar00
            canDo->get('core.admin') || $this->canDo->get('vm.product')) { ?>
            canDo->get('core.admin') || $this->canDo->get('vm.category')) { ?>
            canDo->get('core.admin') || $this->canDo->get('vm.orders')) { ?>
            canDo->get('core.admin') || $this->canDo->get('vm.paymentmethod')) { ?>
            canDo->get('core.admin') || $this->canDo->get('vm.user')) { ?>
            canDo->get('core.admin')) { ?>
            canDo->get('core.admin') || $this->canDo->get('vm.user.editshop')) { ?>
            virtuemartFeed) { ?>

              virtuemartFeed as $item) { if (!empty($item->link)) { $description=strip_tags($item->description); $description=substr($description, 0,200)."..."; ?>
            • title; ?>
            extensionsFeed ) { $j=0; foreach ($this->extensionsFeed as $item){ // This is directly related to extensions.virtuemart.net if (($j / 5) == 0) { ?>

            link)) { $description = $item->description; preg_match('/]+>/i',$description, $result); if (is_array($result) and isset($result[0])){ $image=$result[0]; $description=str_replace($image,"",$description); $description=strip_tags($description); $description=str_replace(JText::_ ('COM_VIRTUEMART_FEED_READMORE') ,"",$description); } else { $description=""; } ?>

            views/manufacturercategories/view.html.php000066600000004055151374526160015113 0ustar00SetViewTitle('MANUFACTURER_CATEGORY'); $layoutName = JRequest::getWord('layout', 'default'); if ($layoutName == 'edit') { $manufacturerCategory = $model->getData(); $this->assignRef('manufacturerCategory', $manufacturerCategory); $this->addStandardEditViewCommands($manufacturerCategory->virtuemart_manufacturercategories_id); } else { $this->addStandardDefaultViewCommands(); $this->addStandardDefaultViewLists($model); $manufacturerCategories = $model->getManufacturerCategories(); $this->assignRef('manufacturerCategories', $manufacturerCategories); $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); } parent::display($tpl); } } // pure php no closing tag views/manufacturercategories/tmpl/default.php000066600000006072151374526160015577 0ustar00
            manufacturerCategories ); $i < $n; $i++) { $row = $this->manufacturerCategories[$i]; $checked = JHTML::_('grid.id', $i, $row->virtuemart_manufacturercategories_id); $published = JHTML::_('grid.published', $row, $i); $editlink = JROUTE::_('index.php?option=com_virtuemart&view=manufacturercategories&task=edit&virtuemart_manufacturercategories_id=' . $row->virtuemart_manufacturercategories_id); $manufacturersList = JROUTE::_('index.php?option=com_virtuemart&view=manufacturer&virtuemart_manufacturercategories_id=' . $row->virtuemart_manufacturercategories_id); ?>
            sort('virtuemart_manufacturercategories_id', 'COM_VIRTUEMART_ID') ?>
            mf_category_name; ?> mf_category_desc); ?> virtuemart_manufacturercategories_id; ?>
            pagination->getListFooter(); ?>
            addStandardHiddenToForm(); ?>
            views/manufacturercategories/tmpl/edit.php000066600000003503151374526160015074 0ustar00
            langList; ?>
            manufacturerCategory->mf_category_name); ?> manufacturerCategory->published); ?> manufacturerCategory->mf_category_desc); ?>
            addStandardHiddenToForm(); ?>
            views/manufacturercategories/tmpl/.htaccess000066600000000177151374526160015240 0ustar00 Order allow,deny Deny from all views/manufacturercategories/tmpl/index.html000066600000000000151374526160015420 0ustar00views/manufacturercategories/index.html000066600000000000151374526160014444 0ustar00views/manufacturercategories/.htaccess000066600000000177151374526160014264 0ustar00 Order allow,deny Deny from all views/coupon/view.html.php000066600000006376151374526160011664 0ustar00getCoupon(); $this->SetViewTitle('', $coupon->coupon_code); $layoutName = JRequest::getWord('layout', 'default'); // if(Vmconfig::get('multix','none')!=='none'){ // $vendorList= ShopFunctions::renderVendorList($coupon->virtuemart_vendor_id); // $this->assignRef('vendorList', $vendorList); // } $vendorModel = VmModel::getModel('Vendor'); $vendorModel->setId(1); $vendor = $vendorModel->getVendor(); $currencyModel = VmModel::getModel('Currency'); $currencyModel = $currencyModel->getCurrency($vendor->vendor_currency); $this->assignRef('vendor_currency', $currencyModel->currency_symbol); if ($layoutName == 'edit') { if ($coupon->virtuemart_coupon_id < 1) { // Set a default expiration date $_expTime = explode(',', VmConfig::get('coupons_default_expire','14,D')); if (!empty( $_expTime[1]) && $_expTime[1] == 'W') { $_expTime[0] = $_expTime[0] * 7; $_expTime[1] = 'D'; } if (version_compare(PHP_VERSION, '5.3.0', '<')) { $_dtArray = getdate(time()); if ($_expTime[1] == 'D') { $_dtArray['mday'] += $_expTime[0]; } elseif ($_expTime[1] == 'M') { $_dtArray['mon'] += $_expTime[0]; } elseif ($_expTime[1] == 'Y') { $_dtArray['year'] += $_expTime[0]; } $coupon->coupon_expiry_date = mktime($_dtArray['hours'], $_dtArray['minutes'], $_dtArray['seconds'] , $_dtArray['mon'], $_dtArray['mday'], $_dtArray['year']); } else { $_expDate = new DateTime(); $_expDate->add(new DateInterval('P'.$_expTime[0].$_expTime[1])); $coupon->coupon_expiry_date = $_expDate->format("U"); } } $this->assignRef('coupon', $coupon); $this->addStandardEditViewCommands(); } else { $this->addStandardDefaultViewCommands(); $this->addStandardDefaultViewLists($model); $coupons = $model->getCoupons(); $this->assignRef('coupons', $coupons); $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); } parent::display($tpl); } } // pure php no closing tag views/coupon/index.html000066600000000000151374526160011205 0ustar00views/coupon/tmpl/default.php000066600000007075151374526160012344 0ustar00
            coupons); $i < $n; $i++) { $row = $this->coupons[$i]; $checked = JHTML::_('grid.id', $i, $row->virtuemart_coupon_id); $editlink = JROUTE::_('index.php?option=com_virtuemart&view=coupon&task=edit&cid[]=' . $row->virtuemart_coupon_id); ?>
            sort('virtuemart_coupon_id', 'COM_VIRTUEMART_ID') ?>
            coupon_code; ?> percent_or_total); ?> coupon_type); ?> coupon_value); ?> percent_or_total=='percent') echo '%' ; else echo $this->vendor_currency; ?> coupon_value_valid); ?> vendor_currency; ?> coupon_type=='gift'){ if ($row->coupon_used ) { echo JText::_('COM_VIRTUEMART_YES'); } else { echo JText::_('COM_VIRTUEMART_NO'); } } ?> virtuemart_coupon_id); ?>
            pagination->getListFooter(); ?>
            views/coupon/tmpl/edit.php000066600000005557151374526160011650 0ustar00
            coupon->coupon_code,'class="inputbox"','',20,32); ?> coupon->coupon_value,'class="inputbox"','',10,32); ?> coupon->percent_or_total); ?> coupon->coupon_type,'','value', 'text',false) ; ?> coupon->coupon_value_valid, 'class="inputbox"','',10,255,' ' . $this->vendor_currency ); ?> coupon->coupon_start_date , 'coupon_start_date') ); ?> coupon->coupon_expiry_date,'coupon_expiry_date') ); ?>
            addStandardHiddenToForm(); ?>
            views/coupon/tmpl/index.html000066600000000000151374526160012161 0ustar00views/coupon/tmpl/.htaccess000066600000000177151374526160012001 0ustar00 Order allow,deny Deny from all views/coupon/.htaccess000066600000000177151374526160011025 0ustar00 Order allow,deny Deny from all views/country/index.html000066600000000000151374526160011405 0ustar00views/country/view.html.php000066600000004374151374526160012060 0ustar00SetViewTitle(); $layoutName = JRequest::getWord('layout', 'default'); if ($layoutName == 'edit') { $country = $model->getData(); $this->assignRef('country', $country); $wzsList = $zoneModel->getWorldZonesSelectList(); $this->assignRef('worldZones', $wzsList ); $this->addStandardEditViewCommands(); } else { $this->addStandardDefaultViewCommands(true,false); //First the view lists, it sets the state of the model $this->addStandardDefaultViewLists($model,0,'ASC'); $filter_country = JRequest::getWord('filter_country', false); $countries = $model->getCountries(false, false, $filter_country); $this->assignRef('countries', $countries); $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); } parent::display($tpl); } } // pure php no closing tag views/country/tmpl/default.php000066600000010707151374526160012540 0ustar00
            */ ?> countries ); $i < $n; $i++) { $row = $this->countries[$i]; $checked = JHTML::_('grid.id', $i, $row->virtuemart_country_id); $published = JHTML::_('grid.published', $row, $i); $editlink = JROUTE::_('index.php?option=com_virtuemart&view=country&task=edit&cid[]=' . $row->virtuemart_country_id); $statelink = JROUTE::_('index.php?option=com_virtuemart&view=state&view=state&virtuemart_country_id=' . $row->virtuemart_country_id); ?> virtuemart_worldzone_id; ?> */ ?>
            sort('country_name') ?> sort('country_2_code') ?> sort('country_3_code') ?> sort('virtuemart_country_id') ?>
            country_3_code); ?> country_name ?>   hasKey($prefix.$row->country_3_code)) { echo "(".$country_string.") "; } ?> [] country_2_code; ?> country_3_code ; ?> virtuemart_country_id; ?>
            pagination->getListFooter(); ?>
            views/country/tmpl/index.html000066600000000000151374526160012361 0ustar00views/country/tmpl/.htaccess000066600000000177151374526160012201 0ustar00 Order allow,deny Deny from all views/country/tmpl/edit.php000066600000004711151374526160012037 0ustar00
            hasKey($prefix.$this->country->country_3_code) ? ' (' . JText::_($prefix.$this->country->country_3_code) . ')' : ' '; ?> country->country_name, 'class="inputbox"', '', 50, 50, $country_string); ?> country->published); ?> */ ?> country->country_3_code); ?> country->country_2_code); ?>
            worldZones, 'virtuemart_worldzone_id', '', 'virtuemart_worldzone_id', 'zone_name', $this->country->virtuemart_worldzone_id); ?>
            addStandardHiddenToForm(); ?>
            views/country/.htaccess000066600000000177151374526160011225 0ustar00 Order allow,deny Deny from all views/orderstatus/.htaccess000066600000000177151374526160012101 0ustar00 Order allow,deny Deny from all views/orderstatus/tmpl/edit.php000066600000005412151374526160012712 0ustar00
            orderStatus->order_status_code, $this->lists['vmCoreStatusCode'])); $orderStatusCodeTip = ($editcoreStatus) ? 'COM_VIRTUEMART_ORDER_STATUS_CODE_CORE' : 'COM_VIRTUEMART_ORDER_STATUS_CODE_TIP'; if ($editcoreStatus) { $readonly = 'readonly'; } else { $readonly = ''; } ?> hasKey($this->orderStatus->order_status_name) ? ' (' . JText::_($this->orderStatus->order_status_name) . ')' : ' '; echo VmHTML::row('input', 'COM_VIRTUEMART_ORDER_STATUS_NAME', 'order_status_name', $this->orderStatus->order_status_name, 'class="inputbox"', '', 50, 50, $text); ?> stockHandelList ,$this->orderStatus->order_stock_handle,'','value', 'text',false) ; ?> orderStatus->order_status_code, 'class="inputbox '.$readonly.'" '.$readonly.'', '', 3, 1); ?> orderStatus->order_status_description, '100%;', '250', array('image', 'pagebreak', 'readmore')); ?> lists['vendors']); ?> ordering); ?>
            addStandardHiddenToForm(); ?>
            views/orderstatus/tmpl/.htaccess000066600000000177151374526160013055 0ustar00 Order allow,deny Deny from all views/orderstatus/tmpl/index.html000066600000000000151374526160013235 0ustar00views/orderstatus/tmpl/default.php000066600000010361151374526160013410 0ustar00
            lists['vmCoreStatusCode']; for ($i = 0, $n = count($this->orderStatusList); $i < $n; $i++) { $row = $this->orderStatusList[$i]; $published = JHTML::_('grid.published', $row, $i ); $checked = JHTML::_('grid.id', $i, $row->virtuemart_orderstate_id); $coreStatus = (in_array($row->order_status_code, $this->lists['vmCoreStatusCode'])); $image = ((JVM_VERSION===1)) ? 'checked_out.png' : 'admin/checked_out.png'; $image = JHtml::_('image.administrator', $image, '/images/', null, null, JText::_('COM_VIRTUEMART_ORDER_STATUS_CODE_CORE')); $checked = ($coreStatus) ? ''. $image .'' : JHTML::_('grid.id', $i, $row->virtuemart_orderstate_id); $editlink = JROUTE::_('index.php?option=com_virtuemart&view=orderstatus&task=edit&cid[]=' . $row->virtuemart_orderstate_id); $deletelink = JROUTE::_('index.php?option=com_virtuemart&view=orderstatus&task=remove&cid[]=' . $row->virtuemart_orderstate_id); $ordering = $row->ordering ; ?>
            sort('order_status_name') ?> sort('order_status_code') ?> sort('ordering') ?> orderStatusList ); ?> sort('virtuemart_orderstate_id', 'COM_VIRTUEMART_ID') ?>
            hasKey($row->order_status_name)) { echo ''. vmText::_($row->order_status_name) .' ('.$row->order_status_name.')'; } else { echo ''. $row->order_status_name .' '; } ?> order_status_code; ?> stockHandelList[$row->order_stock_handle]); ?> order_status_description); ?> pagination->orderUpIcon($i, true, 'orderUp', JText::_('COM_VIRTUEMART_MOVE_UP')); ?> pagination->orderDownIcon( $i, $n, true, 'orderDown', JText::_('COM_VIRTUEMART_MOVE_DOWN')); ?> virtuemart_orderstate_id; ?>
            addStandardHiddenToForm(); ?>
            views/orderstatus/view.html.php000066600000006305151374526160012730 0ustar00 'COM_VIRTUEMART_ORDER_STATUS_STOCK_AVAILABLE', 'R' => 'COM_VIRTUEMART_ORDER_STATUS_STOCK_RESERVED', 'O' => 'COM_VIRTUEMART_ORDER_STATUS_STOCK_OUT' ); if ($layoutName == 'edit') { $orderStatus = $model->getData(); $this->SetViewTitle('',JText::_($orderStatus->order_status_name) ); if ($orderStatus->virtuemart_orderstate_id < 1) { $this->assignRef('ordering', JText::_('COM_VIRTUEMART_NEW_ITEMS_PLACE')); } else { // Ordering dropdown $qry = 'SELECT ordering AS value, order_status_name AS text' . ' FROM #__virtuemart_orderstates' . ' ORDER BY ordering'; $ordering = JHTML::_('list.specificordering', $orderStatus, $orderStatus->virtuemart_orderstate_id, $qry); $this->assignRef('ordering', $ordering); } $lists['vmCoreStatusCode'] = $model->getVMCoreStatusCode(); $this->assignRef('stockHandelList', $stockHandelList); // Vendor selection $vendor_model = VmModel::getModel('vendor'); $vendor_list = $vendor_model->getVendors(); $lists['vendors'] = JHTML::_('select.genericlist', $vendor_list, 'virtuemart_vendor_id', '', 'virtuemart_vendor_id', 'vendor_name', $orderStatus->virtuemart_vendor_id); $this->assignRef('orderStatus', $orderStatus); $this->assignRef('lists', $lists); $this->addStandardEditViewCommands(); } else { $this->SetViewTitle(''); $this->addStandardDefaultViewCommands(); $this->addStandardDefaultViewLists($model); $this->lists['vmCoreStatusCode'] = $model->getVMCoreStatusCode(); $orderStatusList = $model->getOrderStatusList(); $this->assignRef('orderStatusList', $orderStatusList); $this->assignRef('stockHandelList', $stockHandelList); $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); } parent::display($tpl); } } //No Closing Tag views/orderstatus/index.html000066600000000000151374526160012261 0ustar00views/currency/.htaccess000066600000000177151374526160011354 0ustar00 Order allow,deny Deny from all views/currency/tmpl/.htaccess000066600000000177151374526160012330 0ustar00 Order allow,deny Deny from all views/currency/tmpl/index.html000066600000000000151374526160012510 0ustar00views/currency/tmpl/default.php000066600000010205151374526160012660 0ustar00
            lists['search']) ; ?>
            */?> */?> */ ?> currencies ); $i < $n; $i++) { $row = $this->currencies[$i]; $checked = JHTML::_('grid.id', $i, $row->virtuemart_currency_id); $published = JHTML::_('grid.published', $row, $i); $editlink = JROUTE::_('index.php?option=com_virtuemart&view=currency&task=edit&cid[]=' . $row->virtuemart_currency_id); ?> currency_code_2; ?> */ ?> shared; ?> */?>
            sort('currency_name','COM_VIRTUEMART_CURRENCY') ; ?> sort('currency_exchange_rate') ?> sort('currency_code_3') ?>
            currency_name; ?> currency_exchange_rate; ?> currency_symbol; ?> currency_code_3; ?> currency_numeric_code; ?>
            pagination->getListFooter(); ?>
            views/currency/tmpl/edit.php000066600000006536151374526160012175 0ustar00
            currency->currency_name); ?> currency->published); ?> currency->currency_exchange_rate,'class="inputbox"','',6); ?> currency->currency_code_2,'class="inputbox"','',2,2); ?> currency->currency_code_3,'class="inputbox"','',3,3); ?> currency->currency_numeric_code,'class="inputbox"','',3,3); ?> currency->currency_symbol,'class="inputbox"','',20,20); ?> currency->currency_decimal_place,'class="inputbox"','',20,20); ?> currency->currency_decimal_symbol,'class="inputbox"','',10,10); ?> currency->currency_thousands,'class="inputbox"','',10,10); ?> currency->currency_positive_style,'class="inputbox"','',50,50); ?> currency->currency_negative_style,'class="inputbox"','',50,50); ?>
            addStandardHiddenToForm(); ?>
            views/currency/index.html000066600000000000151374526160011534 0ustar00views/currency/view.html.php000066600000004225151374526160012202 0ustar00setId($cid); $currency = $model->getCurrency(); $this->SetViewTitle('',$currency->currency_name); $this->assignRef('currency', $currency); $this->addStandardEditViewCommands(); } else { $this->SetViewTitle(); $this->addStandardDefaultViewCommands(); $this->addStandardDefaultViewLists($model,0,'ASC'); $currencies = $model->getCurrenciesList(JRequest::getWord('search', false)); $this->assignRef('currencies', $currencies); $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); } parent::display($tpl); } } // pure php no closing tag views/usergroups/view.html.php000066600000003546151374526160012573 0ustar00SetViewTitle(); $layoutName = JRequest::getWord('layout', 'default'); if ($layoutName == 'edit') { $usergroup = $model->getUsergroup(); $this->assignRef('usergroup', $usergroup); $this->addStandardEditViewCommands(); } else { $this->addStandardDefaultViewCommands(); $this->addStandardDefaultViewLists($model); $ugroups = $model->getUsergroups(false,true); $this->assignRef('usergroups', $ugroups); $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); } parent::display($tpl); } } // pure php no closing tag views/usergroups/.htaccess000066600000000177151374526160011740 0ustar00 Order allow,deny Deny from all views/usergroups/tmpl/default.php000066600000004730151374526160013252 0ustar00check( 'admin' )){ ?>
            usergroups ); $i < $n; $i++) { $row = $this->usergroups[$i]; $checked = JHTML::_('grid.id', $i, $row->virtuemart_shoppergroup_id); // $published = JHTML::_('grid.published', $row, $i); $editlink = JROUTE::_('index.php?option=com_virtuemart&view=usergroups&task=edit&cid[]=' . $row->virtuemart_shoppergroup_id); ?> ">
            virtuemart_shoppergroup_id; ?> group_name; ?> group_level); ?>
            pagination->getListFooter(); ?>
            addStandardHiddenToForm(); ?>
            views/usergroups/tmpl/.htaccess000066600000000177151374526160012714 0ustar00 Order allow,deny Deny from all views/usergroups/tmpl/edit.php000066600000004021151374526160012544 0ustar00
            addStandardHiddenToForm(); ?>
            views/usergroups/tmpl/index.html000066600000000000151374526160013074 0ustar00views/usergroups/index.html000066600000000000151374526160012120 0ustar00views/category/tmpl/edit.php000066600000002551151374526160012151 0ustar00
            'COM_VIRTUEMART_CATEGORY_FORM_LBL', 'images' => 'COM_VIRTUEMART_IMAGES' ),$this->category->virtuemart_category_id ); ?> addStandardHiddenToForm(); ?>
            views/category/tmpl/edit_images.php000066600000002343151374526160013475 0ustar00
            category->images[0]->displayFilesHandler($this->category->virtuemart_media_id); if(empty($this->category->images[0]->virtuemart_media_id)) $this->category->images[0]->addHidden('file_is_category_image','1'); if ($this->category->virtuemart_media_id) echo $this->category->images[0]->displayFilesHandler($this->category->virtuemart_media_id,'category'); else echo $this->category->images[0]->displayFilesHandler(null,'category'); ?>
            views/category/tmpl/edit_categoryform.php000066600000007731151374526160014737 0ustar00langList ?> perms->check('admin') ){ echo VmHTML::row('raw','COM_VIRTUEMART_VENDOR', $this->vendorList ); } ?>
            category->category_name); ?> category->published); ?> category->slug); ?> category->category_description); ?>
            parent->virtuemart_category_id, 'ordering', '', 'ordering', 'category_name', $this->category->ordering) ); ?> '.$this->categorylist.' '; echo VmHTML::row('raw','COM_VIRTUEMART_CATEGORY_ORDERING', $categorylist ); ?> category->products_per_row); ?> category->limit_list_step); ?> category->limit_list_initial); ?> jTemplateList ,$this->category->category_template,'','directory', 'name',false) ; ?> categoryLayouts ,$this->category->category_layout,'','value', 'text',false) ; ?> productLayouts ,$this->category->category_product_layout,'','value', 'text',false) ; ?>
            category); ?>
            views/product/.htaccess000066600000000177151374526160011202 0ustar00 Order allow,deny Deny from all views/product/view.json.php000066600000017232151374526160012037 0ustar00type = JRequest::getWord('type', false); $this->row = JRequest::getInt('row', false); $this->db = JFactory::getDBO(); $this->model = VmModel::getModel('Customfields') ; } function display($tpl = null) { $filter = JRequest::getVar('q', JRequest::getVar('term', false) ); $id = JRequest::getInt('id', false); $virtuemart_product_id = JRequest::getVar('virtuemart_product_id',array(),'', 'array'); if(is_array($virtuemart_product_id) && count($virtuemart_product_id) > 0){ $product_id = (int)$virtuemart_product_id[0]; } else { $product_id = (int)$virtuemart_product_id; } //$customfield = $this->model->getcustomfield(); /* Get the task */ if ($this->type=='relatedproducts') { $query = "SELECT virtuemart_product_id AS id, CONCAT(product_name, '::', product_sku) AS value FROM #__virtuemart_products_".VMLANG." JOIN `#__virtuemart_products` AS p using (`virtuemart_product_id`)"; if ($filter) $query .= " WHERE product_name LIKE '%". $this->db->getEscaped( $filter, true ) ."%' or product_sku LIKE '%". $this->db->getEscaped( $filter, true ) ."%' limit 0,10"; self::setRelatedHtml($query,'R'); } else if ($this->type=='relatedcategories') { $query = "SELECT virtuemart_category_id AS id, CONCAT(category_name, '::', virtuemart_category_id) AS value FROM #__virtuemart_categories_".VMLANG; if ($filter) $query .= " WHERE category_name LIKE '%". $this->db->getEscaped( $filter, true ) ."%' limit 0,10"; self::setRelatedHtml($query,'Z'); } else if ($this->type=='custom') { $query = "SELECT CONCAT(virtuemart_custom_id, '|', custom_value, '|', field_type) AS id, CONCAT(custom_title, '::', custom_tip) AS value FROM #__virtuemart_customs"; if ($filter) $query .= " WHERE custom_title LIKE '%".$filter."%' limit 0,50"; $this->db->setQuery($query); $this->json['value'] = $this->db->loadObjectList(); $this->json['ok'] = 1 ; } else if ($this->type=='fields') { $fieldTypes= $this->model->getField_types() ; $query = 'SELECT *,`custom_value` as value FROM `#__virtuemart_customs` WHERE (`virtuemart_custom_id`='.$id.' or `custom_parent_id`='.$id.' ) '; $query .= 'order by `ordering` asc'; $this->db->setQuery($query); $rows = $this->db->loadObjectlist(); $html = array (); foreach ($rows as $field) { if ($field->field_type =='C' ){ $this->json['table'] = 'childs'; $q='SELECT `virtuemart_product_id` FROM `#__virtuemart_products` WHERE `published`=1 AND `product_parent_id`= '.JRequest::getInt('virtuemart_product_id'); //$this->db->setQuery(' SELECT virtuemart_product_id, product_name FROM `#__virtuemart_products` WHERE `product_parent_id` ='.(int)$product_id); $this->db->setQuery($q); if ($childIds = $this->db->loadResultArray()) { // Get childs foreach ($childIds as $childId) { $field->custom_value = $childId; $display = $this->model->displayProductCustomfieldBE($field,$childId,$this->row); if ($field->is_cart_attribute) $cartIcone= 'default'; else $cartIcone= 'default-off'; $html[] = '
            '.$field->custom_title.' '.$display.$field->custom_tip.' '.JText::_($fieldTypes[$field->field_type]).' '.$this->model->setEditCustomHidden($field, $this->row).'
            '; $this->row++; } } } elseif ($field->field_type =='E') { $this->json['table'] = 'customPlugins'; $display = $this->model->displayProductCustomfieldBE($field,$product_id,$this->row); if ($field->is_cart_attribute) { $cartIcone= 'default'; } else { $cartIcone= 'default-off'; } $html[] = ' '.$field->custom_title.' '.$display.' '.$this->model->setEditCustomHidden($field, $this->row).'

            '.JTEXT::_('COM_VIRTUEMART_CUSTOM_ACTIVATE_JAVASCRIPT').'

            '.JText::_('COM_VIRTUEMART_CUSTOM_EXTENSION').' '; $this->row++; } else { $this->json['table'] = 'fields'; $display = $this->model->displayProductCustomfieldBE($field,$product_id,$this->row); if ($field->is_cart_attribute) $cartIcone= 'default'; else $cartIcone= 'default-off'; $html[] = ' '.$field->custom_title.' '.$display.' '.JText::_($fieldTypes[$field->field_type]).' '.$this->model->setEditCustomHidden($field, $this->row).' '; $this->row++; } } $this->json['value'] = $html; $this->json['ok'] = 1 ; } else if ($this->type=='userlist') { $status = JRequest::getvar('status'); $productShoppers=0; if ($status) { $productModel = VmModel::getModel('product'); $productShoppers = $productModel->getProductShoppersByStatus($product_id ,$status); } if(!class_exists('ShopFunctions'))require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'shopfunctions.php'); $html = ShopFunctions::renderProductShopperList($productShoppers); $this->json['value'] = $html; } else $this->json['ok'] = 0 ; if ( empty($this->json)) { $this->json['value'] = null; $this->json['ok'] = 1 ; } echo json_encode($this->json); } function setRelatedHtml($query,$fieldType) { $this->db->setQuery($query); $this->json = $this->db->loadObjectList(); $query = 'SELECT * FROM `#__virtuemart_customs` WHERE field_type ="'.$fieldType.'" '; $this->db->setQuery($query); $customs = $this->db->loadObject(); foreach ($this->json as &$related) { $customs->custom_value = $related->id; $display = $this->model->displayProductCustomfieldBE($customs,$related->id,$this->row); $html = '
            '.$display.' '.$this->model->setEditCustomHidden($customs, $this->row).'
            '; $related->label = $html; } } } // pure php no closing tag views/product/tmpl/product_edit_images.php000066600000003602151374526160015077 0ustar00
            product->images[0]->virtuemart_media_id)) $this->product->images[0]->addHidden('file_is_product_image','1'); if (!empty($this->product->virtuemart_media_id)) echo $this->product->images[0]->displayFilesHandler($this->product->virtuemart_media_id,'product'); else echo $this->product->images[0]->displayFilesHandler(null,'product'); ?>
            '.JText::_('COM_VIRTUEMART_RTB_AD').'
            '; $jlang =JFactory::getLanguage(); $tag = $jlang->getTag(); $imgUrl = 'http://www.removethebackground.de//images/logoremove.png'; if(strpos($tag,'de')!==FALSE){ $url = 'http://www.removethebackground.de/virtuemart.aspx'; } else if(strpos($tag,'fr')!==FALSE){ $url = 'http://www.removethebackground.fr/virtuemart.aspx'; } else { $url = 'http://www.removethebackground.co.uk/virtuemart.aspx'; } echo ''; ?>
            views/product/tmpl/product_edit_status.php000066600000012620151374526160015155 0ustar00
            waitinglist) && count($this->waitinglist) > 0) { $link=JROUTE::_('index.php?option=com_virtuemart&view=product&task=sentproductemailtoshoppers&virtuemart_product_id='.$this->product->virtuemart_product_id.'&token='.JUtility::getToken() ); }*/ ?>
            product->product_available_date, 'product_available_date'); ?>
            product->product_availability, " ", $this->imagePath); ?> <?php echo JText::_('COM_VIRTUEMART_PREVIEW'); ?>
            loadTemplate('customer'); ?>
            views/product/tmpl/index.html000066600000000000151374526160012336 0ustar00views/product/tmpl/product_edit.php000066600000004315151374526160013554 0ustar00editor = JFactory::getEditor(); ?>
            product->virtuemart_product_id ); // Loading Templates in Tabs END ?> addStandardHiddenToForm(); ?>
            addScriptDeclaration( 'jQuery(window).load(function(){ jQuery.ajaxSetup({ cache: false }); })'); ?> views/product/tmpl/product_edit_customer.php000066600000026313151374526160015477 0ustar00
            JText::_ ('COM_VIRTUEMART_PRODUCT_SHOPPERS'), 'notify' => JText::_ ('COM_VIRTUEMART_PRODUCT_WAITING_LIST_USERLIST'), ); $mail_default = 'notify'; if (VmConfig::get ('stockhandle', 0) != 'disableadd' or empty($this->waitinglist)) { echo ''; } else { echo VmHtml::radioList ('customer_email_type', $mail_default, $mail_options); } ?>




            lists['OrderStatus'];?>

            product->product_name)); ?>
            productShoppers); ?>
            waitinglist)) { ?>
            waitinglist) && count ($this->waitinglist) > 0) { $i=0; foreach ($this->waitinglist as $key => $wait) { if ($wait->virtuemart_user_id == 0) { $row = ''; } else { $row = ''; } echo $row; $i = 1 - $i; } } else { ?>
            ' . $wait->notify_email . '
            ' . $wait->name . '' . $wait->username . '' . '' . $wait->notify_email . '' . '
            '; echo JText::sprintf('COM_VIRTUEMART_AD_ACY',$aflink); ?>
            views/product/tmpl/massxref.php000066600000001630151374526160012714 0ustar00task=='massxref_cats' or $this->task=='massxref_cats_exe'){ include(JPATH_VM_ADMINISTRATOR.DS.'views'.DS.'category'.DS.'tmpl'.DS.'default.php'); } if($this->task=='massxref_sgrps' or $this->task=='massxref_sgrps_exe'){ include(JPATH_VM_ADMINISTRATOR.DS.'views'.DS.'shoppergroup'.DS.'tmpl'.DS.'default.php'); }views/product/tmpl/product_edit_dimensions.php000066600000006202151374526160016001 0ustar00
            lists['product_lwh_uom'];?>
            lists['product_weight_uom'];?>
              lists['product_iso_uom'];?>
             
            views/product/tmpl/product_edit_description.php000066600000002655151374526160016164 0ustar00
            editor->display('product_desc', $this->product->product_desc, '100%;', '450', '75', '20', array('pagebreak', 'readmore') ) ; ?>
            product); ?>
            views/product/tmpl/.htaccess000066600000000177151374526160012156 0ustar00 Order allow,deny Deny from all views/product/tmpl/default.php000066600000025556151374526160012525 0ustar00'); $search_type = JRequest::getVar('search_type', 'product'); // OSP in view.html.php $virtuemart_category_id = JRequest::getInt('virtuemart_category_id', false); if ($product_parent_id=JRequest::getInt('product_parent_id', false)) $col_product_name='COM_VIRTUEMART_PRODUCT_CHILDREN_LIST'; else $col_product_name='COM_VIRTUEMART_PRODUCT_NAME'; ?>
            productlist ?> lists['filter_order_Dir'], $this->lists['filter_order'] ); ?> */ ?> virtuemart_category_id ) { ?> productlist) ) { $i = 0; $k = 0; $keyword = JRequest::getWord('keyword'); foreach ($this->productlist as $key => $product) { $checked = JHTML::_('grid.id', $i , $product->virtuemart_product_id,null,'virtuemart_product_id'); $published = JHTML::_('grid.published', $product, $i ); $is_featured = $this->toggle($product->product_special, $i, 'toggle.product_special'); $link = 'index.php?option=com_virtuemart&view=product&task=edit&virtuemart_product_id='.$product->virtuemart_product_id; ?> virtuemart_product_id.'&option=com_virtuemart'); ?> virtuemart_category_id ) { ?> virtuemart_product_id; ?>
            sort('product_name',$col_product_name) ?> sort('product_parent_id','COM_VIRTUEMART_PRODUCT_CHILDREN_OF'); ?> sort('product_sku') ?> sort('product_price', 'COM_VIRTUEMART_PRODUCT_PRICE_TITLE') ; ?> sort('pc.ordering', 'COM_VIRTUEMART_FIELDMANAGER_REORDER'); ?> productlist); //vmCommonHTML::getSaveOrderButton( $num_rows, 'changeordering' ); ?> sort('mf_name', 'COM_VIRTUEMART_MANUFACTURER_S') ; ?> sort('product_special', 'COM_VIRTUEMART_PRODUCT_FORM_SPECIAL'); ?> sort('published') ; ?> sort('p.virtuemart_product_id', 'COM_VIRTUEMART_ID') ?>
            product_name, array('title' => JText::_('COM_VIRTUEMART_EDIT').' '.$product->product_name)); ?> product_parent_id ) { VirtuemartViewProduct::displayLinkToParent($product->product_parent_id); } ?> virtuemart_product_id , $product->product_name); ?> $mediaLimit = (int)VmConfig::get('mediaLimit',20); if($this->pagination->limit<=$mediaLimit or $total<=$mediaLimit){ // Product list should be ordered $this->model->addImages($product,1); $img = '('.$product->mediaitems.')'.$product->images[0]->displayMediaThumb('class="vm_mini_image"',false ); //echo JHTML::_('link', $link, $img, array('title' => JText::_('COM_VIRTUEMART_MEDIA_MANAGER').' '.$product->product_name)); } else { //echo JHTML::_('link', $link, ' ('.$product->mediaitems.')', array('title' => JText::_('COM_VIRTUEMART_MEDIA_MANAGER').' '.$product->product_name) ); $img = ' ('.$product->mediaitems.')'; } echo JHTML::_('link', $link, $img, array('title' => JText::_('COM_VIRTUEMART_MEDIA_MANAGER').' '.$product->product_name)); ?> product_sku; ?> product_price_display)) { echo $product->product_price_display; } elseif(!empty($product->prices)) { echo JText::_('COM_VIRTUEMART_MULTIPLE_PRICES'); } else { echo JText::_('COM_VIRTUEMART_NO_PRICE_SET'); } ?> virtuemart_category_id.'&option=com_virtuemart'), $product->category_name); echo $product->categoriesList; ?> pagination->orderUpIcon( $i, true, 'orderup', JText::_('COM_VIRTUEMART_MOVE_UP'), $product->ordering ); ?> pagination->orderDownIcon( $i, $total , true, 'orderdown', JText::_('COM_VIRTUEMART_MOVE_DOWN'), $product->ordering ); ?> ordering ); ?> virtuemart_manufacturer_id) { echo JHTML::_('link', JRoute::_('index.php?view=manufacturer&task=edit&virtuemart_manufacturer_id[]='.$product->virtuemart_manufacturer_id.'&option=com_virtuemart'), $product->mf_name); } ?> reviews); ?> virtuemart_product_id; // echo $product->vendor_name; ?>
            pagination->getListFooter(); ?>
            addStandardHiddenToForm(); ?>
            virtuemart_category_id ) { ?> views/product/tmpl/product_edit_information.php000066600000043310151374526160016157 0ustar00
            langList; ?>
            product->virtuemart_product_id ?> lists['manufacturers'])) { ?> '; }?> product->ordering)) { $this->product->ordering = 0; ?>
            lists['manufacturers'];?> productLayouts, 'layout', 'size=1', 'value', 'text', $this->product->layout); ?>
            shoppergroupList; ?> lists['vendors'];?> '; }?>
            activeShoppergroups); ?> product; if (empty($this->product->prices)) { $this->product->prices[] = array(); } $this->i = 0; $rowColor = 0; if (!class_exists ('calculationHelper')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'calculationh.php'); } $calculator = calculationHelper::getInstance (); $currency_model = VmModel::getModel ('currency'); $currencies = $currency_model->getCurrencies (); $nbPrice = count ($this->product->prices); $this->priceCounter = 0; $this->product->prices[$nbPrice] = $this->product_empty_price; if (!class_exists ('calculationHelper')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'calculationh.php'); } $calculator = calculationHelper::getInstance (); ?> product->prices); foreach ($this->product->prices as $sPrices) { if(count($sPrices) == 0) continue; if (empty($sPrices['virtuemart_product_price_id'])) { $sPrices['virtuemart_product_price_id'] = ''; } //vmdebug('my $sPrices ',$sPrices); $sPrices = (array)$sPrices; $this->tempProduct = (object)array_merge ((array)$this->product, $sPrices); $this->calculatedPrices = $calculator->getProductPrices ($this->tempProduct); if((string)$sPrices['product_price']==='0' or (string)$sPrices['product_price']===''){ $this->calculatedPrices['costPrice'] = ''; } $currency_model = VmModel::getModel ('currency'); $this->lists['currencies'] = JHTML::_ ('select.genericlist', $currencies, 'mprices[product_currency][' . $this->priceCounter . ']', '', 'virtuemart_currency_id', 'currency_name', $this->tempProduct->product_currency); $DBTax = ''; //vmText::_('COM_VIRTUEMART_RULES_EFFECTING') ; foreach ($calculator->rules['DBTax'] as $rule) { $DBTax .= $rule['calc_name'] . '
            '; } $this->DBTaxRules = $DBTax; $tax = ''; //vmText::_('COM_VIRTUEMART_TAX_EFFECTING').'
            '; foreach ($calculator->rules['Tax'] as $rule) { $tax .= $rule['calc_name'] . '
            '; } foreach ($calculator->rules['VatTax'] as $rule) { $tax .= $rule['calc_name'] . '
            '; } $this->taxRules = $tax; $DATax = ''; //vmText::_('COM_VIRTUEMART_RULES_EFFECTING'); foreach ($calculator->rules['DATax'] as $rule) { $DATax .= $rule['calc_name'] . '
            '; } $this->DATaxRules = $DATax; if (!isset($this->tempProduct->product_tax_id)) { $this->tempProduct->product_tax_id = 0; } $this->lists['taxrates'] = ShopFunctions::renderTaxList ($this->tempProduct->product_tax_id, 'mprices[product_tax_id][' . $this->priceCounter . ']'); if (!isset($this->tempProduct->product_discount_id)) { $this->tempProduct->product_discount_id = 0; } $this->lists['discounts'] = $this->renderDiscountList ($this->tempProduct->product_discount_id, 'mprices[product_discount_id][' . $this->priceCounter . ']'); $this->lists['shoppergroups'] = ShopFunctions::renderShopperGroupList ($this->tempProduct->virtuemart_shoppergroup_id, false, 'mprices[virtuemart_shoppergroup_id][' . $this->priceCounter . ']'); if ($this->priceCounter == $nbPrice) { $tmpl = "productPriceRowTmpl"; } else { $tmpl = "productPriceRowTmpl_" . $this->priceCounter; } ?> priceCounter++; } ?>
            */ ?> loadTemplate ('price'); ?>
            product->virtuemart_product_id) { $link=JROUTE::_('index.php?option=com_virtuemart&view=product&task=createVariant&virtuemart_product_id='.$this->product->virtuemart_product_id.'&token='.JUtility::getToken() ); $add_child_button=""; } else { $link=""; $add_child_button=" not-active"; } ?> product->product_parent_id) { $result = vmText::_('COM_VIRTUEMART_EDIT').' ' . $this->product_parent->product_name; echo ' | '.JHTML::_('link', JRoute::_('index.php?option=com_virtuemart&view=product&task=edit&virtuemart_product_id='.$this->product->product_parent_id), $this->product_parent->product_name, array('title' => $result)).' | '.$this->parentRelation; } ?>
            product_childs)>0 ) { $customs = array(); if(!empty($this->product->customfields)){ foreach($this->product->customfields as $custom){ //vmdebug('my custom',$custom); if($custom->field_type=='A'){ $customs[] = $custom; } } } // vmdebug('ma $customs',$customs); ?> product_childs as $child ) { $i = 1 - $i; ?> custom_value; if(isset($child->$attrib)){ $childAttrib = $child->$attrib; } else { //vmdebug('unset? use Fallback product_name instead $attrib '.$attrib,$child); $childAttrib = $child->product_name; } ?>
            custom_value)))?> foo
            virtuemart_product_id), $child->slug, array('title' => vmText::_('COM_VIRTUEMART_EDIT').' '.$child->product_name)) ?> product_in_stock ?> product_ordered ?> virtuemart_product_id.'][published]', $child->published) ?>
            views/product/tmpl/product_edit_custom.php000066600000025330151374526160015146 0ustar00product->customfields_fromParent)) { ?> '. VirtueMartModelCustomfields::setEditCustomHidden($customfield, $i) .''; /*$tables['fields'] .= ' ';*/ } else { $tables['fields'] .= ''; } $i++; } } $emptyTable = ' '; ?>
            '.$this->customsList; ?>
            '','products'=>'','fields'=>'','customPlugins'=>'',); if (isset($this->product->customfields)) { foreach ($this->product->customfields as $customfield) { if ($customfield->is_cart_attribute) $cartIcone= 'default'; else $cartIcone= 'default-off'; if ($customfield->field_type == 'Z') { // R: related categories $tables['categories'] .= '
            '.$customfield->display.' '. VirtueMartModelCustomfields::setEditCustomHidden($customfield, $i) .'
            '; } elseif ($customfield->field_type == 'R') { // R: related products $tables['products'] .= '
            '.$customfield->display.' '. VirtueMartModelCustomfields::setEditCustomHidden($customfield, $i) .'
            '; } elseif ($customfield->field_type == 'G') { // no display (group of) child , handled by plugin; } elseif ($customfield->field_type == 'E'){ $tables['fields'] .= '
            '.JText::_($customfield->custom_title).' '.$customfield->display.' '.JText::_('COM_VIRTUEMART_CUSTOM_EXTENSION').'
            '.JText::_($customfield->custom_title).' '.$customfield->display.$customfield->custom_tip.''. VirtueMartModelCustomfields::setEditCustomHidden($customfield, $i).' .'
            '.JText::_($customfield->custom_title).' '.$customfield->display.' '.JText::_($this->fieldTypes[$customfield->field_type]). VirtueMartModelCustomfields::setEditCustomHidden($customfield, $i) .'
            '.JText::_( 'COM_VIRTUEMART_CUSTOM_NO_TYPES').'
            views/product/tmpl/product_edit_price.php000066600000020760151374526160014740 0ustar00
            */ ?>
            */ ?>
            lists['currencies']; ?> lists['shoppergroups']; ?>
              vendor_currency; ?> lists['taxrates']; ?>
            ' . $this->taxRules ?>
            vendor_currency; ?> lists['discounts']; ?>
            DBTaxRules)) { echo JText::_ ('COM_VIRTUEMART_RULES_EFFECTING') . '
            ' . $this->DBTaxRules . '
            '; } if (!empty($this->DATaxRules)) { echo JText::_ ('COM_VIRTUEMART_RULES_EFFECTING') . '
            ' . $this->DATaxRules; } // vmdebug('my rules',$this->DBTaxRules,$this->DATaxRules); echo JText::_('COM_VIRTUEMART_PRODUCT_FORM_DISCOUNT_EFFECTING').$this->DBTaxRules; ?>
            tempProduct->product_price_publish_up, 'mprices[product_price_publish_up][]'); ?> tempProduct->product_price_publish_down, 'mprices[product_price_publish_down][]'); ?>
            vendor_currency; ?>
            JText::_ ('JNO'), 1 => JText::_ ('JYES')); // echo VmHtml::radioList ('mprices[use_desired_price][' . $this->priceCounter . ']', $this->tempProduct->override, $options); echo '' ?>
            product->override); $options = array(0 => JText::_ ('COM_VIRTUEMART_OVERWRITE_OFF'), 1 => JText::_ ('COM_VIRTUEMART_OVERWRITE_FINAL'), -1 => JText::_ ('COM_VIRTUEMART_OVERWRITE_PRICE_TAX')); echo VmHtml::radioList ('mprices[override][' . $this->priceCounter . ']', $this->tempProduct->override, $options,'',' '); ?>

            views/product/index.html000066600000000000151374526160011362 0ustar00views/product/view.html.php000066600000050710151374526160012030 0ustar00getLayout()); vmdebug('VirtuemartViewProduct '.$task); $this->assignRef('task', $task); // Load helpers if (!class_exists('CurrencyDisplay')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php'); if (!class_exists('VmHTML')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'html.php'); if (!class_exists('VmImage')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'image.php'); $model = VmModel::getModel(); // Handle any publish/unpublish switch ($task) { case 'add': case 'edit': //this was in the controller for the edit tasks, we need this for the access by FE $this->addTemplatePath(JPATH_COMPONENT_ADMINISTRATOR.DS.'views'.DS.'product'.DS.'tmpl'); VmConfig::loadJLang('com_virtuemart_orders',TRUE); VmConfig::loadJLang('com_virtuemart_shoppers',TRUE); $virtuemart_product_id = JRequest::getVar('virtuemart_product_id', array()); if(is_array($virtuemart_product_id) && count($virtuemart_product_id) > 0){ $virtuemart_product_id = (int)$virtuemart_product_id[0]; } else { $virtuemart_product_id = (int)$virtuemart_product_id; } $product = $model->getProductSingle($virtuemart_product_id,false); //$product_parent= $model->getProductParent($product->product_parent_id); $product_parent= $model->getProductSingle($product->product_parent_id,false); $mf_model = VmModel::getModel('manufacturer'); $manufacturers = $mf_model->getManufacturerDropdown($product->virtuemart_manufacturer_id); $this->assignRef('manufacturers', $manufacturers); // Get the category tree if (isset($product->categories)) $category_tree = ShopFunctions::categoryListTree($product->categories); else $category_tree = ShopFunctions::categoryListTree(); $this->assignRef('category_tree', $category_tree); //Fallback for categories inherited by parent to correctly calculate the prices if(empty($product->categories) and !empty($product_parent->categories)){ $product->categories = $product_parent->categories; } //Get the shoppergoup list - Cleanshooter Custom Shopper Visibility if (isset($product->shoppergroups)) $shoppergroupList = ShopFunctions::renderShopperGroupList($product->shoppergroups); $this->assignRef('shoppergroupList', $shoppergroupList); // Load the product price if(!class_exists('calculationHelper')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'calculationh.php'); $product_childIds = $model->getProductChildIds($virtuemart_product_id); $product_childs = array(); foreach($product_childIds as $id){ $product_childs[] = $model->getProductSingle($id,false); } $this->assignRef('product_childs', $product_childs); if(!class_exists('VirtueMartModelConfig')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'config.php'); $productLayouts = VirtueMartModelConfig::getLayoutList('productdetails'); $this->assignRef('productLayouts', $productLayouts); // Load Images $model->addImages($product); if(!class_exists('shopFunctionsF'))require(JPATH_VM_SITE.DS.'helpers'.DS.'shopfunctionsf.php'); $vmtemplate = shopFunctionsF::loadVmTemplateStyle(); if(is_Dir(JPATH_ROOT.DS.'templates'.DS.$vmtemplate.DS.'images'.DS.'availability'.DS)){ $imagePath = '/templates/'.$vmtemplate.'/images/availability/'; } else { $imagePath = '/components/com_virtuemart/assets/images/availability/'; } $this->assignRef('imagePath', $imagePath); // Load the vendors $vendor_model = VmModel::getModel('vendor'); if(Vmconfig::get('multix','none')!=='none'){ $lists['vendors'] = Shopfunctions::renderVendorList($product->virtuemart_vendor_id); } // Load the currencies $currency_model = VmModel::getModel('currency'); if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); $vendor_model->setId(Permissions::getInstance()->isSuperVendor()); $vendor = $vendor_model->getVendor(); if(empty($product->product_currency)){ $product->product_currency = $vendor->vendor_currency; } //$currencies = JHTML::_('select.genericlist', $currency_model->getCurrencies(), 'product_currency', '', 'virtuemart_currency_id', 'currency_name', $product->product_currency); $currency = $currency_model->getCurrency($product->product_currency); $this->assignRef('product_currency', $currency->currency_symbol); $currency = $currency_model->getCurrency($vendor->vendor_currency); $this->assignRef('vendor_currency', $currency->currency_symbol); if(count($manufacturers)>0 ){ $lists['manufacturers'] = JHTML::_('select.genericlist', $manufacturers, 'virtuemart_manufacturer_id', 'class="inputbox"', 'value', 'text', $product->virtuemart_manufacturer_id ); } if(!empty($product->product_weight_uom)){ // or !$task=='add' $product_weight_uom = $product->product_weight_uom; $product_unit = $product->product_unit; $product_lwh_uom = $product->product_lwh_uom; } else if(!empty($product_parent)){ $product_weight_uom = $product_parent->product_weight_uom; $product_unit = $product_parent->product_unit; $product_lwh_uom = $product_parent->product_lwh_uom; } else { $product_weight_uom = VmConfig::get('weight_unit_default'); $product_unit = VmConfig::get('weight_unit_default'); $product_lwh_uom= VmConfig::get('lwh_unit_default'); } $lists['product_weight_uom'] = ShopFunctions::renderWeightUnitList('product_weight_uom',$product_weight_uom); $lists['product_iso_uom'] = ShopFunctions::renderUnitIsoList('product_unit',$product_unit); $lists['product_lwh_uom'] = ShopFunctions::renderLWHUnitList('product_lwh_uom', $product_lwh_uom); if( empty( $product->product_available_date )) { $product->product_available_date = date("Y-m-d") ; } $waitinglistmodel = VmModel::getModel('waitinglist'); /* Load waiting list */ if ($product->virtuemart_product_id) { //$waitinglist = $this->get('waitingusers', 'waitinglist'); $waitinglist = $waitinglistmodel->getWaitingusers($product->virtuemart_product_id); $this->assignRef('waitinglist', $waitinglist); } $productShoppers = $model->getProductShoppersByStatus($product->virtuemart_product_id,array('S') ); $this->assignRef('productShoppers', $productShoppers); $orderstatusModel = VmModel::getModel('orderstatus'); $lists['OrderStatus'] = $orderstatusModel->renderOSList(array(),'order_status',TRUE); $field_model = VmModel::getModel('customfields'); $fieldTypes = $field_model->getField_types(); $this->assignRef('fieldTypes', $fieldTypes); // Add the virtuemart_shoppergroup_ids $cid = JFactory::getUser()->id; $this->activeShoppergroups = shopfunctions::renderGuiList('virtuemart_shoppergroup_id','#__virtuemart_vmuser_shoppergroups','virtuemart_user_id',$cid,'shopper_group_name','#__virtuemart_shoppergroups','virtuemart_shoppergroup_id','category', 4, 0); if(!$this->activeShoppergroups or (is_array($this->activeShoppergroups) and count($this->activeShoppergroups)==0)){ //vmdebug('$this->activeShoppergroups',$this->activeShoppergroups); $shoppergroupModel = VmModel::getModel('shoppergroup'); $this->activeShoppergroups = vmText::_($shoppergroupModel->getDefault(0)->shopper_group_name); } /* Load protocustom lists */ $customsList = $field_model->getCustomsList(); $attribs='style= "width: 300px;"'; $customlist = JHTML::_('select.genericlist', $customsList,'customlist', $attribs); $this->assignRef('customsList', $customlist); $ChildCustomRelation = $field_model->getProductChildCustomRelation(); $this->assignRef('ChildCustomRelation',$ChildCustomRelation); if ($product->product_parent_id > 0) { $parentRelation= $field_model->getProductParentRelation($product->virtuemart_product_id); $this->assignRef('parentRelation',$parentRelation); // Set up labels $info_label = JText::_('COM_VIRTUEMART_PRODUCT_FORM_ITEM_INFO_LBL'); $status_label = JText::_('COM_VIRTUEMART_PRODUCT_FORM_ITEM_STATUS_LBL'); $dim_weight_label = JText::_('COM_VIRTUEMART_PRODUCT_FORM_ITEM_DIM_WEIGHT_LBL'); $images_label = JText::_('COM_VIRTUEMART_PRODUCT_FORM_ITEM_IMAGES_LBL'); $delete_message = JText::_('COM_VIRTUEMART_PRODUCT_FORM_DELETE_ITEM_MSG'); } else { if ($task == 'add') $action = JText::_('COM_VIRTUEMART_PRODUCT_FORM_NEW_PRODUCT_LBL'); else $action = JText::_('COM_VIRTUEMART_PRODUCT_FORM_UPDATE_ITEM_LBL'); $info_label = JText::_('COM_VIRTUEMART_PRODUCT_FORM_PRODUCT_INFO_LBL'); $status_label = JText::_('COM_VIRTUEMART_PRODUCT_FORM_PRODUCT_STATUS_LBL'); $dim_weight_label = JText::_('COM_VIRTUEMART_PRODUCT_FORM_PRODUCT_DIM_WEIGHT_LBL'); $images_label = JText::_('COM_VIRTUEMART_PRODUCT_FORM_PRODUCT_IMAGES_LBL'); $delete_message = JText::_('COM_VIRTUEMART_PRODUCT_FORM_DELETE_PRODUCT_MSG'); } $this->assignRef('product', $product); $product_empty_price = array( 'virtuemart_product_price_id' => 0 , 'virtuemart_product_id' => $virtuemart_product_id , 'virtuemart_shoppergroup_id' => NULL , 'product_price' => NULL , 'override' => NULL , 'product_override_price' => NULL , 'product_tax_id' => NULL , 'product_discount_id' => NULL , 'product_currency' => $vendor->vendor_currency , 'product_price_publish_up' => NULL , 'product_price_publish_down' => NULL , 'price_quantity_start' => NULL , 'price_quantity_end' => NULL ); $this->assignRef ('product_empty_price', $product_empty_price); $this->assignRef('product_parent', $product_parent); /* Assign label values */ $this->assignRef('action', $action); $this->assignRef('info_label', $info_label); $this->assignRef('status_label', $status_label); $this->assignRef('dim_weight_label', $dim_weight_label); $this->assignRef('images_label', $images_label); $this->assignRef('delete_message', $delete_message); $this->assignRef('lists', $lists); // Toolbar if ($product->product_sku) $sku=' ('.$product->product_sku.')'; else $sku=""; if (!empty($product->canonCatLink)) $canonLink = '&virtuemart_category_id=' . $product->canonCatLink; else $canonLink = ''; if(!empty($product->virtuemart_product_id)){ if (!class_exists ('shopFunctionsF')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'shopfunctionsf.php'); $menuItemID = shopFunctionsF::getMenuItemId(JFactory::getLanguage()->getTag()); $text = ''. $product->product_name.$sku.''; } else { $text = $product->product_name.$sku; } $this->SetViewTitle('PRODUCT',$text); $this->addStandardEditViewCommands ($product->virtuemart_product_id); break; case 'massxref_cats': case 'massxref_cats_exe': $this->SetViewTitle('PRODUCT_MASSXREF'); if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); $showVendors = Permissions::getInstance()->check('admin'); $this->assignRef('showVendors',$showVendors); $keyWord =''; $catmodel = VmModel::getModel('category'); $this->assignRef('catmodel', $catmodel); //$this->addStandardDefaultViewCommands(); $this->addStandardDefaultViewLists($catmodel,'category_name'); $categories = $catmodel->getCategoryTree(0,0,false,$this->lists['search']); $this->assignRef('categories', $categories); $catpagination = $catmodel->getPagination(); $this->assignRef('catpagination', $catpagination); //$this->addStandardDefaultViewCommands(); $this->setLayout('massxref'); JToolBarHelper::custom('massxref_cats_exe', 'new', 'new', JText::_('COM_VIRTUEMART_PRODUCT_XREF_CAT_EXE'), false); break; case 'massxref_sgrps': case 'massxref_sgrps_exe': $sgrpmodel = VmModel::getModel('shoppergroup'); $this->addStandardDefaultViewLists($sgrpmodel); $shoppergroups = $sgrpmodel->getShopperGroups(false, true); $this->assignRef('shoppergroups', $shoppergroups); $sgrppagination = $sgrpmodel->getPagination(); $this->assignRef('sgrppagination', $sgrppagination); $this->setLayout('massxref'); JToolBarHelper::custom('massxref_sgrps_exe', 'new', 'new', JText::_('COM_VIRTUEMART_PRODUCT_XREF_SGRPS_EXE'), false); break; default: if ($product_parent_id=JRequest::getInt('product_parent_id',false) ) { $product_parent= $model->getProductSingle($product_parent_id,false); if($product_parent){ $title='PRODUCT_CHILDREN_LIST' ; $link_to_parent = JHTML::_('link', JRoute::_('index.php?view=product&task=edit&virtuemart_product_id='.$product_parent->virtuemart_product_id.'&option=com_virtuemart'), $product_parent->product_name, array('title' => JText::_('COM_VIRTUEMART_EDIT_PARENT').' '.$product_parent->product_name)); $msg= JText::_('COM_VIRTUEMART_PRODUCT_OF'). " ".$link_to_parent; } else { $title='PRODUCT_CHILDREN_LIST' ; $msg= 'Parent with product_parent_id '.$product_parent_id.' not found'; } } else { $title='PRODUCT'; $msg=""; } $this->db = JFactory::getDBO(); $this->SetViewTitle($title, $msg ); $this->addStandardDefaultViewLists($model,'created_on'); /* Get the list of products */ $productlist = $model->getProductListing(false,false,false,false,true); //The pagination must now always set AFTER the model load the listing $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); /* Get the category tree */ $categoryId = $model->virtuemart_category_id; //OSP switched to filter in model, was JRequest::getInt('virtuemart_category_id'); $category_tree = ShopFunctions::categoryListTree(array($categoryId)); $this->assignRef('category_tree', $category_tree); /* Load the product price */ if(!class_exists('calculationHelper')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'calculationh.php'); $vendor_model = VmModel::getModel('vendor'); $productreviews = VmModel::getModel('ratings'); foreach ($productlist as $virtuemart_product_id => $product) { $product->mediaitems = count($product->virtuemart_media_id); $product->reviews = $productreviews->countReviewsForProduct($product->virtuemart_product_id); $vendor_model->setId($product->virtuemart_vendor_id); $vendor = $vendor_model->getVendor(); $currencyDisplay = CurrencyDisplay::getInstance($vendor->vendor_currency,$vendor->virtuemart_vendor_id); if(!empty($product->product_price) && !empty($product->product_currency) ){ $product->product_price_display = $currencyDisplay->priceDisplay($product->product_price,(int)$product->product_currency,1,true); } /* Write the first 5 categories in the list */ $product->categoriesList = shopfunctions::renderGuiList('virtuemart_category_id','#__virtuemart_product_categories','virtuemart_product_id',$product->virtuemart_product_id,'category_name','#__virtuemart_categories','virtuemart_category_id','category'); } $mf_model = VmModel::getModel('manufacturer'); $manufacturers = $mf_model->getManufacturerDropdown(); $this->assignRef('manufacturers', $manufacturers); /* add Search filter in lists*/ /* Search type */ $options = array( '' => JText::_('COM_VIRTUEMART_LIST_EMPTY_OPTION'), 'parent' => JText::_('COM_VIRTUEMART_PRODUCT_LIST_SEARCH_BY_PARENT_PRODUCT'), 'product' => JText::_('COM_VIRTUEMART_PRODUCT_LIST_SEARCH_BY_DATE_TYPE_PRODUCT'), 'price' => JText::_('COM_VIRTUEMART_PRODUCT_LIST_SEARCH_BY_DATE_TYPE_PRICE'), 'withoutprice' => JText::_('COM_VIRTUEMART_PRODUCT_LIST_SEARCH_BY_DATE_TYPE_WITHOUTPRICE') ); $this->lists['search_type'] = VmHTML::selectList('search_type', JRequest::getVar('search_type'),$options); /* Search order */ $options = array( 'bf' => JText::_('COM_VIRTUEMART_PRODUCT_LIST_SEARCH_BY_DATE_BEFORE'), 'af' => JText::_('COM_VIRTUEMART_PRODUCT_LIST_SEARCH_BY_DATE_AFTER') ); $this->lists['search_order'] = VmHTML::selectList('search_order', JRequest::getVar('search_order'),$options); // Toolbar JToolBarHelper::custom('massxref_cats', 'new', 'new', JText::_('COM_VIRTUEMART_PRODUCT_XREF_CAT'), true); JToolBarHelper::custom('massxref_sgrps', 'new', 'new', JText::_('COM_VIRTUEMART_PRODUCT_XREF_SGRPS'), true); JToolBarHelper::custom('createchild', 'new', 'new', JText::_('COM_VIRTUEMART_PRODUCT_CHILD'), true); JToolBarHelper::custom('cloneproduct', 'copy', 'copy', JText::_('COM_VIRTUEMART_PRODUCT_CLONE'), true); JToolBarHelper::custom('addrating', 'default', '', JText::_('COM_VIRTUEMART_ADD_RATING'), true); $this->addStandardDefaultViewCommands(); $this->assignRef('productlist', $productlist); $this->assignRef('virtuemart_category_id', $categoryId); $this->assignRef('model', $model); break; } parent::display($tpl); } /** * This is wrong *@deprecated */ function renderMail() { $this->setLayout('mail_html_waitlist'); $this->subject = JText::sprintf('COM_VIRTUEMART_PRODUCT_WAITING_LIST_EMAIL_SUBJECT', $this->productName); $notice_body = JText::sprintf('COM_VIRTUEMART_PRODUCT_WAITING_LIST_EMAIL_BODY', $this->productName, $this->url); parent::display(); } /** * Renders the list for the discount rules * * @author Max Milbers */ function renderDiscountList($selected,$name='product_discount_id'){ if(!class_exists('VirtueMartModelCalc')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'calc.php'); $discounts = VirtueMartModelCalc::getDiscounts(); $discountrates = array(); $discountrates[] = JHTML::_('select.option', '-1', JText::_('COM_VIRTUEMART_PRODUCT_DISCOUNT_NONE'), 'product_discount_id' ); $discountrates[] = JHTML::_('select.option', '0', JText::_('COM_VIRTUEMART_PRODUCT_DISCOUNT_NO_SPECIAL'), 'product_discount_id' ); // $discountrates[] = JHTML::_('select.option', 'override', JText::_('COM_VIRTUEMART_PRODUCT_DISCOUNT_OVERRIDE'), 'product_discount_id'); foreach($discounts as $discount){ $discountrates[] = JHTML::_('select.option', $discount->virtuemart_calc_id, $discount->calc_name, 'product_discount_id'); } $listHTML = JHTML::_('Select.genericlist', $discountrates, $name, '', 'product_discount_id', 'text', $selected ); return $listHTML; } static function displayLinkToChildList($product_id, $product_name) { $db = JFactory::getDBO(); $db->setQuery(' SELECT COUNT( * ) FROM `#__virtuemart_products` WHERE `product_parent_id` ='.$product_id); if ($result = $db->loadResult()){ $result = JText::sprintf('COM_VIRTUEMART_X_CHILD_PRODUCT', $result); echo JHTML::_('link', JRoute::_('index.php?view=product&product_parent_id='.$product_id.'&option=com_virtuemart'), $result, array('title' => JText::sprintf('COM_VIRTUEMART_PRODUCT_LIST_X_CHILDREN',$product_name) )); } } static function displayLinkToParent($product_parent_id) { $db = JFactory::getDBO(); $db->setQuery(' SELECT * FROM `#__virtuemart_products_'.VMLANG.'` as l JOIN `#__virtuemart_products` using (`virtuemart_product_id`) WHERE `virtuemart_product_id` = '.$product_parent_id); if ($parent = $db->loadObject()){ $result = JText::sprintf('COM_VIRTUEMART_LIST_CHILDREN_FROM_PARENT', $parent->product_name); echo JHTML::_('link', JRoute::_('index.php?view=product&product_parent_id='.$product_parent_id.'&option=com_virtuemart'), $parent->product_name, array('title' => $result)); } } } //pure php no closing tag views/report/tmpl/.htaccess000066600000000177151374526160012011 0ustar00 Order allow,deny Deny from all views/report/tmpl/default.php000066600000015210151374526160012342 0ustar00report ); $intervalTitle = JRequest::getVar('intervals','day'); if ( ($intervalTitle =='week') or ($intervalTitle =='month') ) $addDateInfo = true ; else $addDateInfo = false; // if( $this->pagination->limit < $rows ){ // if( ($this->pagination->limitstart + $this->pagination->limit) < $rows ) { // $rows = $this->pagination->limitstart + $this->pagination->limit; // } // } if ( JVM_VERSION == 2 ) JHtml::_('behavior.framework', true); ?>
            report[$j]; //$is = $this->itemsSold[$j]; $s = 0; ?>
            sort('created_on', 'COM_VIRTUEMART_'.$intervalTitle); ?> sort('o.virtuemart_order_id', 'COM_VIRTUEMART_REPORT_BASIC_ORDERS') ; ?> sort('product_quantity', 'COM_VIRTUEMART_REPORT_BASIC_TOTAL_ITEMS') ; ?> sort('order_subtotal_netto', 'COM_VIRTUEMART_REPORT_BASIC_REVENUE_NETTO') ; ?> sort('order_subtotal_brutto', 'COM_VIRTUEMART_REPORT_BASIC_REVENUE_BRUTTO') ; ?> sort('order_item_name', 'COM_VIRTUEMART_PRODUCT_NAME') ; ?> sort('virtuemart_product_id', 'COM_VIRTUEMART_PRODUCT_ID') ; ?>
            totalReport['number_of_ordersTotal']?> totalReport['itemsSoldTotal'];?> totalReport['revenueTotal_netto'];?> totalReport['revenueTotal_brutto'];?>
            pagination->getListFooter(); ?>
            addStandardHiddenToForm(); ?>
            views/report/tmpl/index.html000066600000000000151374526160012171 0ustar00views/report/.htaccess000066600000000177151374526160011035 0ustar00 Order allow,deny Deny from all views/report/view.html.php000066600000010611151374526160011657 0ustar00SetViewTitle('REPORT'); $myCurrencyDisplay = CurrencyDisplay::getInstance(); //update order items button $q = 'SELECT * FROM #__virtuemart_order_items WHERE `product_discountedPriceWithoutTax` IS NULL '; $db = JFactory::getDBO(); $db->setQuery($q); $res = $db->loadRow(); if($res) { JToolBarHelper::customX('updateOrderItems', 'new', 'new', JText::_('COM_VIRTUEMART_REPORT_UPDATEORDERITEMS'),false); vmError('COM_VIRTUEMART_REPORT_UPDATEORDERITEMS_WARN'); } $this->addStandardDefaultViewLists($model); $revenueBasic = $model->getRevenue(); if($revenueBasic){ $totalReport['revenueTotal_brutto']= $totalReport['revenueTotal_netto']= $totalReport['number_of_ordersTotal'] = $totalReport['itemsSoldTotal'] = 0 ; foreach($revenueBasic as &$j){ vmdebug('VirtuemartViewReport revenue',$j); $totalReport['revenueTotal_netto'] += $j['order_subtotal_netto']; $totalReport['revenueTotal_brutto'] += $j['order_subtotal_brutto']; $totalReport['number_of_ordersTotal'] += $j['count_order_id']; $j['order_subtotal_netto'] = $myCurrencyDisplay->priceDisplay($j['order_subtotal_netto']); $j['order_subtotal_brutto'] = $myCurrencyDisplay->priceDisplay($j['order_subtotal_brutto']); //$j['product_quantity'] = $model->getItemsByRevenue($j); $totalReport['itemsSoldTotal'] +=$j['product_quantity']; } $totalReport['revenueTotal_netto'] = $myCurrencyDisplay->priceDisplay($totalReport['revenueTotal_netto']); $totalReport['revenueTotal_brutto'] = $myCurrencyDisplay->priceDisplay($totalReport['revenueTotal_brutto']); // if ( 'product_quantity'==JRequest::getWord('filter_order')) { // foreach ($revenueBasic as $key => $row) { // $created_on[] =$row['created_on']; // $intervals[] =$row['intervals']; // $itemsSold[] =$row['product_quantity']; // $number_of_orders[] =$row['count_order_id']; // $revenue[] =$row['revenue']; // } // if (JRequest::getWord('filter_order_Dir') == 'desc') array_multisort($itemsSold, SORT_DESC,$revenueBasic); // else array_multisort($itemsSold, SORT_ASC,$revenueBasic); // } } $this->assignRef('report', $revenueBasic); $this->assignRef('totalReport', $totalReport); //$itemsSold = $model->getItemsSold($revenueBasic); //$this->assignRef('itemsSold', $itemsSold); // I tihnk is to use in a different layout such as product solds // PATRICK K. // $productList = $model->getOrderItems(); // $this->assignRef('productList', $productList); $orderstatusM =VmModel::getModel('orderstatus'); $this->lists['select_date'] = $model->renderDateSelectList(); $orderstates = JRequest::getVar ('order_status_code', array('C','S')); $this->lists['state_list'] = $orderstatusM->renderOSList($orderstates,'order_status_code',TRUE); $this->lists['intervals'] = $model->renderIntervalsList(); $this->assignRef('from_period', $model->from_period); $this->assignRef('until_period', $model->until_period); $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); parent::display($tpl); } } views/report/index.html000066600000000000151374526160011215 0ustar00views/state/.htaccess000066600000000177151374526160010642 0ustar00 Order allow,deny Deny from all views/state/view.json.php000066600000003015151374526160011471 0ustar00setQuery($q); $states[$country_id] = $db->loadAssocList(); } echo json_encode($states); } } // pure php no closing tag views/state/tmpl/edit.php000066600000006635151374526160011463 0ustar00
            */?> virtuemart_country_id,JText::sprintf('COM_VIRTUEMART_STATE_COUNTRY',$this->country_name).' '. JText::_('COM_VIRTUEMART_DETAILS') ); ?>
            state->published); ?>
            worldZones, 'virtuemart_worldzone_id', '', 'virtuemart_worldzone_id', 'zone_name', $this->state->virtuemart_worldzone_id); ?>
            worldZones, 'virtuemart_worldzone_id', '', 'virtuemart_worldzone_id', 'zone_name', $this->country->virtuemart_worldzone_id);*/ ?>
            addStandardHiddenToForm(); ?>
            views/state/tmpl/.htaccess000066600000000177151374526160011616 0ustar00 Order allow,deny Deny from all views/state/tmpl/index.html000066600000000000151374526160011776 0ustar00views/state/tmpl/default.php000066600000005773151374526160012164 0ustar00
            virtuemart_country_id,JText::sprintf('COM_VIRTUEMART_STATES_COUNTRY',$this->country_name)); ?>
            states ); $i < $n; $i++) { $row = $this->states[$i]; $checked = JHTML::_('grid.id', $i, $row->virtuemart_state_id,null,'virtuemart_state_id'); $published = JHTML::_('grid.published', $row, $i); $editlink = JROUTE::_('index.php?option=com_virtuemart&view=state&task=edit&virtuemart_state_id=' . $row->virtuemart_state_id); ?>
            state_name; ?> virtuemart_worldzone_id; ?> state_2_code; ?> state_3_code; ?>
            pagination->getListFooter(); ?>
            addStandardHiddenToForm(); ?>
            views/state/index.html000066600000000000151374526160011022 0ustar00views/state/view.html.php000066600000004700151374526160011466 0ustar00SetViewTitle(); $model = VmModel::getModel(); // $stateId = JRequest::getVar('virtuemart_state_id'); // $model->setId($stateId); $state = $model->getSingleState(); $countryId = JRequest::getInt('virtuemart_country_id', 0); if(empty($countryId)) $countryId = $state->virtuemart_country_id; $this->assignRef('virtuemart_country_id', $countryId); $isNew = (count($state) < 1); if(empty($countryId) && $isNew){ JError::raiseWarning(412,'Country id is 0'); return false; } $country = VmModel::getModel('country'); $country->setId($countryId); $this->assignRef('country_name', $country->getData()->country_name); $layoutName = JRequest::getWord('layout', 'default'); if ($layoutName == 'edit') { $this->assignRef('state', $state); $zoneModel = VmModel::getModel('Worldzones'); $wzsList = $zoneModel->getWorldZonesSelectList(); $this->assignRef('worldZones', $wzsList); $this->addStandardEditViewCommands(); } else { $this->addStandardDefaultViewCommands(); $this->addStandardDefaultViewLists($model); $states = $model->getStates($countryId); $this->assignRef('states', $states); $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); } parent::display($tpl); } } // pure php no closing tag views/paymentmethod/tmpl/edit_config.php000066600000002336151374526160014540 0ustar00payment->payment_jplugin_id){ // vmdebug('my payment ',$this->payment); //$parameters = new vmParameters($this->paym->payment_params, JPATH_PLUGINS.DS.'vmpayment'.DS.basename($this->paym->payment_element).'.xml', 'plugin' ); $parameters = new vmParameters($this->payment, $this->payment->payment_element , 'plugin' ,'vmpayment'); echo $rendered = $parameters->render(); } else { echo JText::_('COM_VIRTUEMART_SELECT_PAYMENT_METHOD' ); } views/paymentmethod/tmpl/edit_edit.php000066600000003614151374526160014220 0ustar00 langList; ?>
            payment->payment_name); ?> payment->slug); ?> payment->published); ?> payment->payment_desc); ?> vmPPaymentList ); ?> shopperGroupList ); ?> payment->ordering,'class="inputbox"','',4,4); ?> vendorList); } ?>
            views/paymentmethod/tmpl/edit.php000066600000003244151374526160013212 0ustar00
            payment->virtuemart_paymentmethod_id ); // Loading Templates in Tabs END ?>
            views/paymentmethod/tmpl/default.php000066600000007351151374526160013714 0ustar00check( 'admin' )){ ?>
            perms->check( 'admin' )){ ?> payments ); $i < $n; $i++) { $row = $this->payments[$i]; $checked = JHTML::_('grid.id', $i, $row->virtuemart_paymentmethod_id); $published = JHTML::_('grid.published', $row, $i); $editlink = JROUTE::_('index.php?option=com_virtuemart&view=paymentmethod&task=edit&cid[]=' . $row->virtuemart_paymentmethod_id); ?> "> perms->check( 'admin' )){?>
            sort('payment_name', 'COM_VIRTUEMART_PAYMENT_LIST_NAME'); ?> sort('virtuemart_vendor_id', 'COM_VIRTUEMART_VENDOR'); ?> sort('payment_element', 'COM_VIRTUEMART_PAYMENT_ELEMENT'); ?> sort('ordering', 'COM_VIRTUEMART_LIST_ORDER'); ?> sort('published', 'COM_VIRTUEMART_PUBLISHED'); ?> sort('virtuemart_paymentmethod_id', 'COM_VIRTUEMART_ID') ?>
            payment_name; ?> payment_desc; ?> virtuemart_vendor_id); ?> paymShoppersList; ?> payment_element; ?> ordering; ?> shared; ?> virtuemart_paymentmethod_id; ?>
            pagination->getListFooter(); ?>
            addStandardHiddenToForm(); ?>
            views/paymentmethod/tmpl/.htaccess000066600000000177151374526160013354 0ustar00 Order allow,deny Deny from all views/paymentmethod/tmpl/index.html000066600000000000151374526160013534 0ustar00views/paymentmethod/index.html000066600000000000151374526160012560 0ustar00views/paymentmethod/.htaccess000066600000000177151374526160012400 0ustar00 Order allow,deny Deny from all views/paymentmethod/view.html.php000066600000012311151374526160013221 0ustar00addHelperPath(JPATH_VM_ADMINISTRATOR.DS.'helpers'); if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if (!class_exists('VmHTML')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'html.php'); if (!class_exists ('vmPlugin')) { require(JPATH_VM_PLUGINS . DS . 'vmplugin.php'); } if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); $this->assignRef('perms', Permissions::getInstance()); $model = VmModel::getModel('paymentmethod'); //@todo should be depended by loggedVendor // $vendorId=1; // $this->assignRef('vendorId', $vendorId); // TODO logo $this->SetViewTitle(); $layoutName = JRequest::getWord('layout', 'default'); $vendorModel = VmModel::getModel('vendor'); $vendorModel->setId(1); $vendor = $vendorModel->getVendor(); $currencyModel = VmModel::getModel('currency'); $currencyModel = $currencyModel->getCurrency($vendor->vendor_currency); $this->assignRef('vendor_currency', $currencyModel->currency_symbol); if ($layoutName == 'edit') { // Load the helper(s) if (!class_exists('VmImage')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'image.php'); if (!class_exists('vmParameters')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'parameterparser.php'); $payment = $model->getPayment(); $this->assignRef('payment', $payment); $this->assignRef('vmPPaymentList', self::renderInstalledPaymentPlugins($payment->payment_jplugin_id)); $this->assignRef('shopperGroupList', ShopFunctions::renderShopperGroupList($payment->virtuemart_shoppergroup_ids, true)); if(Vmconfig::get('multix','none')!=='none'){ $vendorList= ShopFunctions::renderVendorList($payment->virtuemart_vendor_id); $this->assignRef('vendorList', $vendorList); } $this->addStandardEditViewCommands( $payment->virtuemart_paymentmethod_id); } else { JToolBarHelper::custom('clonepayment', 'copy', 'copy', JText::_('COM_VIRTUEMART_PAYMENT_CLONE'), true); $this->addStandardDefaultViewCommands(); $this->addStandardDefaultViewLists($model); $payments = $model->getPayments(); $this->assignRef('payments', $payments); $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); } parent::display($tpl); } function renderInstalledPaymentPlugins($selected){ if ( JVM_VERSION===1) { $table = '#__plugins'; $ext_id = 'id'; $enable = 'published'; } else { $table = '#__extensions'; $ext_id = 'extension_id'; $enable = 'enabled'; } $db = JFactory::getDBO(); //Todo speed optimize that, on the other hand this function is NOT often used and then only by the vendors // $q = 'SELECT * FROM #__plugins as pl JOIN `#__virtuemart_payment_method` AS pm ON `pl`.`id`=`pm`.`payment_jplugin_id` WHERE `folder` = "vmpayment" AND `published`="1" '; // $q = 'SELECT * FROM #__plugins as pl,#__virtuemart_payment_method as pm WHERE `folder` = "vmpayment" AND `published`="1" AND pl.id=pm.payment_jplugin_id'; $q = 'SELECT * FROM `'.$table.'` WHERE `folder` = "vmpayment" and `state`="0" AND `element`<>"moneybookers" ORDER BY `ordering`,`name` ASC'; $db->setQuery($q); $result = $db->loadAssocList($ext_id); if(empty($result)){ $app = JFactory::getApplication(); $app -> enqueueMessage(JText::_('COM_VIRTUEMART_NO_PAYMENT_PLUGINS_INSTALLED')); } $listHTML=''; return $listHTML; } } // pure php not tag views/ratings/view.html.php000066600000010031151374526160012007 0ustar00max_rating = VmConfig::get('vm_maximum_rating_scale',5); $this->assignRef('max_rating', $this->max_rating); $model = VmModel::getModel(); $this->SetViewTitle('REVIEW_RATE' ); /* Get the task */ $task = JRequest::getWord('task'); switch ($task) { case 'listreviews': /* Get the data */ $this->addStandardDefaultViewLists($model); $virtuemart_product_id = JRequest::getVar('virtuemart_product_id',array(),'', 'array'); if(is_array($virtuemart_product_id) && count($virtuemart_product_id) > 0){ $virtuemart_product_id = (int)$virtuemart_product_id[0]; } else { $virtuemart_product_id = (int)$virtuemart_product_id; } $reviewslist = $model->getReviews($virtuemart_product_id); $lists = array(); $lists['filter_order'] = $mainframe->getUserStateFromRequest($option.'filter_order', 'filter_order', '', 'cmd'); $lists['filter_order_Dir'] = $mainframe->getUserStateFromRequest($option.'filter_order_Dir', 'filter_order_Dir', '', 'word'); $this->assignRef('reviewslist', $reviewslist); $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); $this->addStandardDefaultViewCommands(false,true); break; case 'edit': /* Get the data */ $rating = $model->getRating($cids); $this->addStandardEditViewCommands(); /* Assign the data */ $this->assignRef('rating', $rating); break; case 'edit_review': JToolBarHelper::divider(); /* Get the data */ $rating = $model->getReview($cids); if(!empty($rating)){ $this->SetViewTitle('REVIEW_RATE',$rating->product_name." (". $rating->customer.")" ); JToolBarHelper::customX('saveReview', 'save', 'save', JText::_('COM_VIRTUEMART_SAVE'), false); JToolBarHelper::customX('applyReview', 'apply', 'apply', JText::_('COM_VIRTUEMART_APPLY'), false); } else { $this->SetViewTitle('REVIEW_RATE','ERROR' ); } JToolBarHelper::customX('cancelEditReview', 'cancel', 'cancel', JText::_('COM_VIRTUEMART_CANCEL'), false); /* Assign the data */ $this->assignRef('rating', $rating); break; default: $this->addStandardDefaultViewCommands(false, true); $this->addStandardDefaultViewLists($model); $ratingslist = $model->getRatings(); $this->assignRef('ratingslist', $ratingslist); $pagination = $model->getPagination(); $this->assignRef('pagination', $pagination); break; } parent::display($tpl); } } // pure php no closing tag views/ratings/index.html000066600000000000151374526160011351 0ustar00views/ratings/tmpl/.htaccess000066600000000177151374526160012145 0ustar00 Order allow,deny Deny from all views/ratings/tmpl/edit_review.php000066600000011377151374526160013372 0ustar00
            max_rating;$i++) { $title = (JText::_("COM_VIRTUEMART_RATING_TITLE").' : '. $i . '/' . $this->max_rating) ; $stars = ''; $rating_options[] = JHTML::_('select.option',$i,$stars); } echo JHTML::_('select.radiolist', $rating_options, 'vote', 'id="vote" class="inputbox"', 'value', 'text', $this->rating->vote); ?>
             
            rating->published); ?>
            addStandardHiddenToForm(); ?>
            views/ratings/tmpl/default.php000066600000010134151374526160012476 0ustar00
            ratingslist) > 0) { $i = 0; $k = 0; $keyword = JRequest::getWord('keyword'); foreach ($this->ratingslist as $key => $review) { $checked = JHTML::_('grid.id', $i , $review->virtuemart_rating_id); $published = JHTML::_('grid.published', $review, $i ); ?> virtuemart_product_id; ?> virtuemart_product_id ; ?>
            sort('created_on', 'COM_VIRTUEMART_DATE') ; ?> sort('product_name') ; ?> sort('rating', 'COM_VIRTUEMART_RATE_NOM') ; ?> sort('published') ?>
            created_on,'LC2',true) , array("title" => JText::_('COM_VIRTUEMART_RATING_EDIT_TITLE'))); ?> product_name, array('title' => JText::_('COM_VIRTUEMART_EDIT').' '.$review->product_name)); ?> rating) * 24; ?> rating) . '/' . $maxrating) ?>" class="ratingbox" style="display:inline-block;">
            pagination->getListFooter(); ?>
            addStandardHiddenToForm(); ?>
            views/ratings/tmpl/list_reviews.php000066600000011343151374526160013574 0ustar00
            reviewslist) > 0) { $i = 2; //$k = 0; $keyword = JRequest::getWord('keyword'); foreach ($this->reviewslist as $key => $review) { //vmdebug('my review ',$review); $checked = JHTML::_('grid.id', $i , $review->virtuemart_rating_review_id ,null, 'virtuemart_rating_review_id'); $published = JHTML::_('grid.published', $review, $i); ?> virtuemart_rating_review_id; ?> virtuemart_product_id ?>
            sort('pr.created_on', 'COM_VIRTUEMART_DATE') ; ?> sort('product_name') ; ?> sort('vote', 'COM_VIRTUEMART_RATE_NOM') ; ?> sort('published') ; ?>
            customer.' ('.vmJsApi::date($review->created_on,'LC2',true).')', array("title" => JText::_('COM_VIRTUEMART_RATING_EDIT_TITLE'))); ?> product_name, array('title' => JText::_('COM_VIRTUEMART_EDIT').' '.$review->product_name)); ?> vote).'.gif',$review->vote,array("title" => (JText::_('COM_VIRTUEMART_RATING_TITLE').' : '. $review->vote . ' :: ' . $this->max_rating))); $maxrating = VmConfig::get('vm_maximum_rating_scale', 5); $ratingwidth = round($review->review_rating) * 24; ?> review_rating) . '/' . $maxrating) ?>" class="ratingbox" style="display:inline-block;">
            pagination->getListFooter(); ?>
            addStandardHiddenToForm(null,'listreviews'); ?>
            views/ratings/tmpl/index.html000066600000000000151374526160012325 0ustar00views/ratings/.htaccess000066600000000177151374526160011171 0ustar00 Order allow,deny Deny from all access.xml000066600000010624151374526160006550 0ustar00
            virtuemart.cfg000066600000007376151374526160007462 0ustar00# Required configuration data for the VirtueMart installer # http://www.virtuemart.net # Copyright (c) 2004 - 2010 VirtueMart Team. All rights reserved. # http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php # VirtueMart is free software. This version may have been modified pursuant # to the GNU General Public License, and as distributed it includes or # is derivative of works licensed under the GNU General Public License or # other free or open source software licenses. # $Id: virtuemart_defaults.cfg 3726 2011-07-16 12:01:49Z Milbo $ # # Notes: # - The hash-sign (#) is a comment character, but only if it's the first non-blank char on a line # - The equal-sign (=) when the default value is empty, is optional # - Constant values can be used by enclosing them in curly brackets ({}), eg: # some_path_value={JPATH_ROOT}{DS}virtuemart{DS}somewhere [config] ##shop settings shop_is_offline=0 offline_message=Our Shop is currently down for maintenance. Please check back again soon. use_as_catalog=0 currency_converter_module=convertECB.php order_mail_html=1 useSSL=0 dangeroustools=0 debug_enable=none google_jquery=1 multix=none ##Shopfront pdf_button_enable=1 show_emailfriend=1 show_printicon=0 show_out_of_stock_products=1 coupons_enable=0 show_uncat_child_products=0 coupons_default_expire=1,D weight_unit_default=KG lwh_unit_default=m list_limit=20 showReviewFor=all reviewMode=registered showRatingFor=all ratingMode=registered reviews_autopublish=1 reviews_minimum_comment_length=100 reviews_maximum_comment_length=2000 vmtemplate=default categorytemplate=default showCategory=1 categorylayout=0 categories_per_row=3 productlayout=0 products_per_row=3 vmlayout=0 show_featured=1 featured_products_per_row=3 show_topTen=1 topten_products_per_row=3 show_recent=1 show_latest=1 ##Paths assets_general_path=components/com_virtuemart/assets/ media_category_path=images/stories/virtuemart/category/ media_product_path=images/stories/virtuemart/product/ media_manufacturer_path=images/stories/virtuemart/manufacturer/ media_vendor_path=images/stories/virtuemart/vendor/ forSale_path_thumb=images/stories/virtuemart/forSale/resized/ img_resize_enable=1 img_width=90 img_height=90 no_image_set=noimage.gif no_image_found=warning.png ##Product order settings browse_orderby_field=p.virtuemart_product_id browse_orderby_fields=array:product_sku|category_name|mf_name|product_name browse_search_fields=array:product_sku|category_name|category_description|mf_name|product_name|product_s_desc ##Pricing show_prices=1 price_show_packaging_pricelabel=0 show_tax=1 basePrice=1 basePriceText=1 basePriceRounding=-1 variantModification=1 variantModificationText=1 variantModificationRounding=-1 basePriceVariant=1 basePriceVariantText=1 basePriceVariantRounding=-1 basePriceWithTax=1 basePriceWithTaxText=1 basePriceWithTaxRounding=-1 discountedPriceWithoutTax=1 discountedPriceWithoutTaxText=1 discountedPriceWithoutTaxRounding=-1 salesPriceWithDiscount=1 salesPriceWithDiscountText=1 salesPriceWithDiscountRounding=-1 salesPrice=1 salesPriceText=1 salesPriceRounding=-1 priceWithoutTax=1 priceWithoutTaxText=1 priceWithoutTaxRounding=-1 discountAmount=1 discountAmountText=1 discountAmountRounding=-1 taxAmount=1 taxAmountText=1 taxAmountRounding=-1 ##Check stock addtocart_popup=1 check_stock=0 automatic_payment=1 automatic_shipment=1 agree_to_tos_onorder=0 oncheckout_show_legal_info=1 oncheckout_show_register=1 oncheckout_show_steps=0 oncheckout_show_register_text=COM_VIRTUEMART_ONCHECKOUT_DEFAULT_TEXT_REGISTER ##SEO seo_disabled=0 seo_translate=0 seo_use_id=0 admin.virtuemart.php000066600000005216151374526160010570 0ustar00isSuperVendor()){ // if(!Permissions::getInstance()->check('admin','storeowner')){ $app = JFactory::getApplication(); vmError( 'Access restricted to Vendor and Administrator only (you are admin and should not see this messsage?)','Access restricted to Vendors and Administrator only' ); $app->redirect('index.php'); } // Require specific controller if requested if($_controller = vRequest::getCmd('view', vRequest::getCmd('controller', 'virtuemart'))) { if (file_exists(JPATH_VM_ADMINISTRATOR.DS.'controllers'.DS.$_controller.'.php')) { // Only if the file exists, since it might be a Joomla view we're requesting... require (JPATH_VM_ADMINISTRATOR.DS.'controllers'.DS.$_controller.'.php'); } else { // try plugins JPluginHelper::importPlugin('vmextended'); $dispatcher = JDispatcher::getInstance(); $results = $dispatcher->trigger('onVmAdminController', array($_controller)); if (empty($results)) { $app = JFactory::getApplication(); $app->enqueueMessage('Fatal Error in maincontroller admin.virtuemart.php: Couldnt find file '.$_controller); $app->redirect('index.php?option=com_virtuemart'); } } } // Create the controller $_class = 'VirtueMartController'.ucfirst($_controller); $controller = new $_class(); // Perform the Request task $controller->execute(vRequest::getCmd('task', $_controller)); vmTime($_class.' Finished task '.$_controller,'Start'); vmRam('End'); vmRamPeak('Peak'); $controller->redirect(); // pure php no closing tagchangelog.php000066600000002120151374526160007215 0ustar00 Legend: * -> Security Fix # -> Bug Fix $ -> Language fix or change + -> Addition ^ -> Change - -> Removed ! -> Note -------------------- 1.5.0 Stable Release [Release date here] ------------------ ^ Category maintenance converted to MVC ^ Manufacturer Category view converted ^ Landing page converted to MVC ^ Media handling converted to MVC ^ Product listing converted to MVC ^ Administrator menu converted to MVC helper ^ Country maintenance converted to MVC ^ Credit card maintenance converted to MVC ^ Currency maintenance converted to MVC ^ Coupon maintenance converted to MVC + Added the ability to publish/unpublish countries ^ Coupon maintenance converted to MVC ^ Shipment Carrier maintenance converted to MVC ^ Shipment Rate maintenance converted ^ Order Status maintenance page converted to MVC # Bug 1538 fixed; Product pricing table changecontrollers/translate.php000066600000006504151374526160011643 0ustar00getDefault() == $lang ) $dblang =''; $dblang= strtr($lang,'-','_'); $id = JRequest::getInt('id',0); $viewKey = JRequest::getWord('editView'); // TODO temp trick for vendor if ($viewKey == 'vendor') $id = 1 ; $tables = array ('category' =>'categories','product' =>'products','manufacturer' =>'manufacturers','manufacturercategories' =>'manufacturercategories','vendor' =>'vendors', 'paymentmethod' =>'paymentmethods', 'shipmentmethod' =>'shipmentmethods'); if ( !array_key_exists($viewKey, $tables) ) { $json['msg'] ="Invalid view ". $viewKey; echo json_encode($json); jExit(); } $tableName = '#__virtuemart_'.$tables[$viewKey].'_'.$dblang; $db =JFactory::getDBO(); $q='select * FROM `'.$tableName.'` where `virtuemart_'.$viewKey.'_id` ='.$id; $db->setQuery($q); if ($json['fields'] = $db->loadAssoc()) { $json['structure'] = 'filled' ; $json['msg'] = jText::_('COM_VIRTUEMART_SELECTED_LANG').':'.$lang; } else { $json['structure'] = 'empty' ; $db->setQuery('SHOW COLUMNS FROM '.$tableName); $tableDescribe = $db->loadAssocList(); array_shift($tableDescribe); $fields=array(); foreach ($tableDescribe as $key =>$val) $fields[$val['Field']] = $val['Field'] ; $json['fields'] = $fields; $json['msg'] = JText::sprintf('COM_VIRTUEMART_LANG_IS_EMPTY',$lang ,jText::_('COM_VIRTUEMART_'.strtoupper( $viewKey)) ) ; } echo json_encode($json); jExit(); } } //pure php no tag controllers/shoppergroup.php000066600000003707151374526160012405 0ustar00registerTask( 'default','makeDefault' ); } function makeDefault() { $mainframe = Jfactory::getApplication(); /* Load the view object */ $view = $this->getView('shoppergroup', 'html'); $model = VmModel::getModel('shoppergroup'); $msgtype = ''; $cids = JRequest::getVar('virtuemart_shoppergroup_id',array()); if ($model->makeDefault((int)$cids[0])) $msg = JText::_('COM_VIRTUEMART_SET_TO_DEFAULT_SUCCESSFULLY'); else { $msg = ''; // $msg = JText::_('COM_VIRTUEMART_SET_TO_DEFAULT_ERROR'); $msgtype = 'error'; } $mainframe->redirect('index.php?option=com_virtuemart&view=shoppergroup', $msg, $msgtype); } } // pure php no closing tag controllers/usergroups.php000066600000002343151374526160012061 0ustar00getType(); $view = $this->getView('userfields', $viewType); parent::display(); } function viewJson() { // Create the view object. $view = $this->getView('userfields', 'json'); // Now display the view. $view->display(null); } } //No Closing tag controllers/config.php000066600000004605151374526160011113 0ustar00store($data)) { $msg = JText::_('COM_VIRTUEMART_CONFIG_SAVED'); // Load the newly saved values into the session. VmConfig::loadConfig(); } else { $msg = $model->getError(); } $redir = 'index.php?option=com_virtuemart'; if(JRequest::getCmd('task') == 'apply'){ $redir = $this->redirectPath; } $this->setRedirect($redir, $msg); } /** * Overwrite the remove task * Removing config is forbidden. * @author Max Milbers */ function remove(){ $msg = JText::_('COM_VIRTUEMART_ERROR_CONFIGS_COULD_NOT_BE_DELETED'); $this->setRedirect( $this->redirectPath , $msg); } } //pure php no tag controllers/media.php000066600000006065151374526160010727 0ustar00getView('media', 'json'); /* Now display the view. */ $view->display(null); } function save($data = 0){ $fileModel = VmModel::getModel('media'); //Now we try to determine to which this media should be long to $data = JRequest::get('post'); //$data['file_title'] = JRequest::getVar('file_title','','post','STRING',JREQUEST_ALLOWHTML); $data['file_description'] = JRequest::getVar('file_description','','post','STRING',JREQUEST_ALLOWHTML); $data['media_attributes'] = JRequest::getWord('media_attributes'); $data['file_type'] = JRequest::getWord('file_type'); if(empty($data['file_type'])){ $data['file_type'] = $data['media_attributes']; } if ($id = $fileModel->store($data,$data['file_type'])) { $msg = JText::_('COM_VIRTUEMART_FILE_SAVED_SUCCESS'); } else { $msg = $fileModel->getError(); } $cmd = JRequest::getCmd('task'); if($cmd == 'apply'){ $redirection = 'index.php?option=com_virtuemart&view=media&task=edit&virtuemart_media_id='.$id; } else { $redirection = 'index.php?option=com_virtuemart&view=media'; } $this->setRedirect($redirection, $msg); } function synchronizeMedia(){ if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); if(!Permissions::getInstance()->check('admin')){ $msg = 'Forget IT'; $this->setRedirect('index.php?option=com_virtuemart', $msg); } if(!class_exists('Migrator')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'migrator.php'); $migrator = new Migrator(); $result = $migrator->portMedia(); $this->setRedirect($this->redirectPath, $result); } } // pure php no closing tag controllers/country.php000066600000002301151374526160011340 0ustar00setRedirect('index.php?option=com_virtuemart&view=log' ); } } // pure php no closing tagcontrollers/coupon.php000066600000002357151374526160011153 0ustar00setRedirect( 'index.php?option=com_virtuemart&view=calc', JText::_('COM_VIRTUEMART_NO_ITEMS_SELECTED') ); return false; } //getting the model $model = VmModel::getModel('calc'); if ($model->orderCalc($id, -1)) { $msg = JText::_('COM_VIRTUEMART_ITEM_MOVED_UP'); } else { $msg = $model->getError(); } $this->setRedirect( 'index.php?option=com_virtuemart&view=calc', $msg ); } /** * Save the calc order * * @author jseros */ public function orderDown() { // Check token JRequest::checkToken() or jexit( 'Invalid Token' ); $id = 0; $cid = JRequest::getVar( 'cid', array(), 'post', 'array' ); JArrayHelper::toInteger($cid); if (isset($cid[0]) && $cid[0]) { $id = $cid[0]; } else { $this->setRedirect( 'index.php?option=com_virtuemart&view=calc', JText::_('COM_VIRTUEMART_NO_ITEMS_SELECTED') ); return false; } //getting the model $model = VmModel::getModel('calc'); if ($model->orderCalc($id, 1)) { $msg = JText::_('COM_VIRTUEMART_ITEM_MOVED_DOWN'); } else { $msg = $model->getError(); } $this->setRedirect( 'index.php?option=com_virtuemart&view=calc', $msg ); } /** * Save the categories order */ public function saveOrder() { // Check for request forgeries JRequest::checkToken() or jexit( 'Invalid Token' ); $cid = JRequest::getVar( 'cid', array(), 'post', 'array' ); JArrayHelper::toInteger($cid); $model = VmModel::getModel('calc'); $order = JRequest::getVar('order', array(), 'post', 'array'); JArrayHelper::toInteger($order); if ($model->setOrder($cid,$order)) { $msg = JText::_('COM_VIRTUEMART_NEW_ORDERING_SAVED'); } else { $msg = $model->getError(); } $this->setRedirect('index.php?option=com_virtuemart&view=calc', $msg ); } } // pure php no closing tag controllers/report.php000066600000003017151374526160011155 0ustar00updateOrderItems(); $this->setRedirect($this->redirectPath, 'Order Items updated'); } } // pure php no closing tagcontrollers/updatesmigration.php000066600000047112151374526160013225 0ustar00check('admin')){ $msg = 'Forget IT'; $this->setRedirect('index.php?option=com_virtuemart', $msg); } return true; } /** * Akeeba release system tasks * Update * @author Max Milbers */ function liveUpdate(){ $this->setRedirect('index.php?option=com_virtuemart&view=liveupdate.', 'Akeeba release system'); } /** * Install sample data into the database * * @author RickG */ function checkForLatestVersion(){ $model = $this->getModel('updatesMigration'); JRequest::setVar('latestverison', $model->getLatestVersion()); JRequest::setVar('view', 'updatesMigration'); parent::display(); } /** * Install sample data into the database * * @author RickG * @author Max Milbers */ function installSampleData(){ $data = JRequest::get('get'); JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); // $this->checkPermissionForTools(); $model = $this->getModel('updatesMigration'); $msg = $model->installSampleData(); $this->setRedirect($this->redirectPath, $msg); } /** * Sets the storeowner to the currently logged in user * He needs admin rights * * @author Max Milbers */ function setStoreOwner(){ $data = JRequest::get('get'); JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); $model = $this->getModel('updatesMigration'); $storeOwnerId =JRequest::getInt('storeOwnerId'); $msg = $model->setStoreOwner($storeOwnerId); $this->setRedirect($this->redirectPath, $msg); } /** * Install sample data into the database * * @author RickG * @author Max Milbers */ function restoreSystemDefaults(){ $data = JRequest::get('get'); JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); if(VmConfig::get('dangeroustools', false)){ $model = $this->getModel('updatesMigration'); $model->restoreSystemDefaults(); $msg = JText::_('COM_VIRTUEMART_SYSTEM_DEFAULTS_RESTORED'); $msg .= ' User id of the main vendor is ' . $model->setStoreOwner(); $this->setDangerousToolsOff(); }else { $msg = $this->_getMsgDangerousTools(); } $this->setRedirect($this->redirectPath, $msg); } /** * Remove all the Virtuemart tables from the database. * * @author RickG * @author Max Milbers */ function deleteVmTables(){ $data = JRequest::get('get'); JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); $msg = JText::_('COM_VIRTUEMART_SYSTEM_VMTABLES_DELETED'); if(VmConfig::get('dangeroustools', false)){ $model = $this->getModel('updatesMigration'); if(!$model->removeAllVMTables()){ $this->setDangerousToolsOff(); $this->setRedirect('index.php?option=com_virtuemart', $model->getError()); } }else { $msg = $this->_getMsgDangerousTools(); } $this->setRedirect('index.php?option=com_installer', $msg); } /** * Deletes all dynamical created data and leaves a "fresh" installation without sampledata * OUTDATED * @author Max Milbers * */ function deleteVmData(){ $data = JRequest::get('get'); JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); $msg = JText::_('COM_VIRTUEMART_SYSTEM_VMDATA_DELETED'); if(VmConfig::get('dangeroustools', false)){ $model = $this->getModel('updatesMigration'); if(!$model->removeAllVMData()){ $this->setDangerousToolsOff(); $this->setRedirect('index.php?option=com_virtuemart', $model->getError()); } }else { $msg = $this->_getMsgDangerousTools(); } $this->setRedirect($this->redirectPath, $msg); } function deleteAll(){ $data = JRequest::get('get'); JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); $msg = JText::_('COM_VIRTUEMART_SYSTEM_ALLVMDATA_DELETED'); if(VmConfig::get('dangeroustools', false)){ $this->installer->populateVmDatabase("delete_essential.sql"); $this->installer->populateVmDatabase("delete_data.sql"); $this->setDangerousToolsOff(); }else { $msg = $this->_getMsgDangerousTools(); } $this->setRedirect($this->redirectPath, $msg); } function deleteRestorable(){ $data = JRequest::get('get'); JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); $msg = JText::_('COM_VIRTUEMART_SYSTEM_RESTVMDATA_DELETED'); if(VmConfig::get('dangeroustools', false)){ $this->installer->populateVmDatabase("delete_restoreable.sql"); $this->setDangerousToolsOff(); }else { $msg = $this->_getMsgDangerousTools(); } $this->setRedirect($this->redirectPath, $msg); } function refreshCompleteInstallAndSample(){ $this->refreshCompleteInstall(true); } function refreshCompleteInstall($sample=false){ $data = JRequest::get('get'); JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); if(VmConfig::get('dangeroustools', true)){ $model = $this->getModel('updatesMigration'); $model->restoreSystemTablesCompletly(); //$id = $model->determineStoreOwner(); $sid = $model->setStoreOwner(); $model->setUserToPermissionGroup($sid); if($sample)$model->installSampleData($sid); $msg = ''; if(empty($errors)){ $msg = 'System succesfull restored and sampledata installed, user id of the mainvendor is ' . $sid; } else { foreach($errors as $error){ $msg .= ( $error) . '
            '; } } VmConfig::installVMconfig(); $this->setDangerousToolsOff(); }else { $msg = $this->_getMsgDangerousTools(); } $this->setRedirect($this->redirectPath, $msg); } function installCompleteSamples(){ $this->installComplete(true); } function installComplete($sample=false){ $data = JRequest::get('get'); JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); if(VmConfig::get('dangeroustools', true)){ if(!class_exists('com_virtuemartInstallerScript')) require(JPATH_VM_ADMINISTRATOR . DS . 'install' . DS . 'script.virtuemart.php'); $updater = new com_virtuemartInstallerScript(); $updater->install(true); $model = $this->getModel('updatesMigration'); $sid = $model->setStoreOwner(); $model->setUserToPermissionGroup($sid); $msg = ''; if(empty($errors)){ $msg = 'System succesfull restored and sampledata installed, user id of the mainvendor is ' . $sid; } else { foreach($errors as $error){ $msg .= ( $error) . '
            '; } } if(!class_exists('com_virtuemart_allinoneInstallerScript')) require(JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart_allinone' . DS . 'script.vmallinone.php'); $updater = new com_virtuemart_allinoneInstallerScript(); $updater->vmInstall(true); if($sample) $model->installSampleData($sid); VmConfig::installVMconfig(); //Now lets set some joomla variables //Caching should be enabled, set to files and for 15 minutes if (!class_exists( 'ConfigModelApplication' )) require(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_config'.DS.'models'.DS.'application.php'); $jConfModel = new ConfigModelApplication(); $jConfig = $jConfModel->getData(); $jConfig['caching'] = 0; $jConfig['lifetime'] = 60; $jConfig['list_limit'] = 25; $jConfig['MetaDesc'] = 'VirtueMart works with Joomla! - the dynamic portal engine and content management system'; $jConfig['MetaKeys'] = 'virtuemart, vm2, joomla, Joomla'; $app = JFactory::getApplication(); $return = $jConfModel->save($jConfig); // Check the return value. if ($return === false) { // Save the data in the session. $app->setUserState('com_config.config.global.data', $jConfig); vmError(vmText::sprintf('JERROR_SAVE_FAILED', $model->getError())); //return false; } else { // Set the success message. //vmInfo('COM_CONFIG_SAVE_SUCCESS'); } }else { $msg = $this->_getMsgDangerousTools(); } $this->setRedirect($this->redirectPath, $msg); } /** * This is executing the update table commands to adjust tables to the latest layout * @author Max Milbers */ function updateDatabase(){ $data = JRequest::get('get'); JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); // $this->checkPermissionForTools(); if(!class_exists('com_virtuemartInstallerScript')) require(JPATH_VM_ADMINISTRATOR . DS . 'install' . DS . 'script.virtuemart.php'); $updater = new com_virtuemartInstallerScript(); $updater->update(false); $this->setRedirect($this->redirectPath, 'Database updated'); } /** * Delete the config stored in the database and renews it using the file * * @auhtor Max Milbers */ function renewConfig(){ $data = JRequest::get('get'); JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); //if(VmConfig::get('dangeroustools', true)){ $model = $this->getModel('config'); $model -> deleteConfig(); // } $this->setRedirect($this->redirectPath, 'Configuration is now restored by file'); } /** * This function resets the flag in the config that dangerous tools can't be executed anylonger * This is a security feature * * @author Max Milbers */ function setDangerousToolsOff(){ if(!class_exists('VirtueMartModelConfig')) require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'config.php'); $res = VirtueMartModelConfig::checkConfigTableExists(); if(!empty($res)){ $model = $this->getModel('config'); $model->setDangerousToolsOff(); } } /** * Sends the message to the user that the tools are disabled. * * @author Max Milbers */ function _getMsgDangerousTools(){ $uri = JFactory::getURI(); VmConfig::loadJLang('com_virtuemart_config'); $link = $uri->root() . 'administrator/index.php?option=com_virtuemart&view=config'; $msg = JText::sprintf('COM_VIRTUEMART_SYSTEM_DANGEROUS_TOOL_DISABLED', JText::_('COM_VIRTUEMART_ADMIN_CFG_DANGEROUS_TOOLS'), $link); return $msg; } function portMedia(){ $data = JRequest::get('get'); JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); $this->storeMigrationOptionsInSession(); if(!class_exists('Migrator')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'migrator.php'); $migrator = new Migrator(); $result = $migrator->portMedia(); $this->setRedirect($this->redirectPath, $result); } function migrateGeneralFromVmOne(){ $data = JRequest::get('get'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); $this->storeMigrationOptionsInSession(); if(!class_exists('Migrator')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'migrator.php'); $migrator = new Migrator(); $result = $migrator->migrateGeneral(); if($result){ $msg = 'Migration general finished'; } else { $msg = 'Migration general was interrupted by max_execution time, please restart'; } $this->setRedirect($this->redirectPath, $result); } function migrateUsersFromVmOne(){ JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); $this->storeMigrationOptionsInSession(); if(!class_exists('Migrator')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'migrator.php'); $migrator = new Migrator(); $result = $migrator->migrateUsers(); if($result){ $msg = 'Migration users finished'; } else { $msg = 'Migration users was interrupted by max_execution time, please restart'; } $this->setRedirect($this->redirectPath, $result); } function migrateProductsFromVmOne(){ JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); $this->storeMigrationOptionsInSession(); if(!class_exists('Migrator')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'migrator.php'); $migrator = new Migrator(); $result = $migrator->migrateProducts(); if($result){ $msg = 'Migration products finished'; } else { $msg = 'Migration products was interrupted by max_execution time, please restart'; } $this->setRedirect($this->redirectPath, $result); } function migrateOrdersFromVmOne(){ JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); $this->storeMigrationOptionsInSession(); if(!class_exists('Migrator')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'migrator.php'); $migrator = new Migrator(); $result = $migrator->migrateOrders(); if($result){ $msg = 'Migration orders finished'; } else { $msg = 'Migration orders was interrupted by max_execution time, please restart'; } $this->setRedirect($this->redirectPath, $result); } /** * Is doing all migrator steps in one row * * @author Max Milbers */ function migrateAllInOne(){ JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); if(!VmConfig::get('dangeroustools', true)){ $msg = $this->_getMsgDangerousTools(); $this->setRedirect($this->redirectPath, $msg); return false; } $this->storeMigrationOptionsInSession(); if(!class_exists('Migrator')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'migrator.php'); $migrator = new Migrator(); $result = $migrator->migrateAllInOne(); if($result){ $msg = 'Migration finished'; } else { $msg = 'Migration was interrupted by max_execution time, please restart'; } $this->setRedirect($this->redirectPath, $msg); } function portVmAttributes(){ $data = JRequest::get('get'); if(!empty($data['token']))JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); if(!VmConfig::get('dangeroustools', true)){ $msg = $this->_getMsgDangerousTools(); $this->setRedirect($this->redirectPath, $msg); return false; } $this->storeMigrationOptionsInSession(); if(!class_exists('Migrator')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'migrator.php'); $migrator = new Migrator(); $result = $migrator->portVm1Attributes(); if($result){ $msg = 'Migration Vm2 attributes finished'; } else { $msg = 'Migration was interrupted by max_execution time, please restart'; } $this->setRedirect($this->redirectPath, $msg); } function portVmRelatedProducts(){ $data = JRequest::get('get'); if(!empty($data['token']))JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); if(!VmConfig::get('dangeroustools', true)){ $msg = $this->_getMsgDangerousTools(); $this->setRedirect($this->redirectPath, $msg); return false; } $this->storeMigrationOptionsInSession(); if(!class_exists('Migrator')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'migrator.php'); $migrator = new Migrator(); $result = $migrator->portVm1RelatedProducts(); if($result){ $msg = 'Migration Vm2 related products finished'; } else { $msg = 'Migration was interrupted by max_execution time, please restart'; } $this->setRedirect($this->redirectPath, $msg); } function reOrderChilds(){ JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); if(!VmConfig::get('dangeroustools', true)){ $msg = $this->_getMsgDangerousTools(); $this->setRedirect($this->redirectPath, $msg); return false; } $this->storeMigrationOptionsInSession(); if(!class_exists('GenericTableUpdater')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'tableupdater.php'); $updater = new GenericTableUpdater(); $result = $updater->reOrderChilds(); //$msg = 'reOrderDone'; $this->setRedirect($this->redirectPath, $result); } function storeMigrationOptionsInSession(){ $session = JFactory::getSession(); $session->set('migration_task', JRequest::getString('task',''), 'vm'); $session->set('migration_default_category_browse', JRequest::getString('migration_default_category_browse',''), 'vm'); $session->set('migration_default_category_fly', JRequest::getString('migration_default_category_fly',''), 'vm'); } function resetThumbs(){ $data = JRequest::get('get'); JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $this->checkPermissionForTools(); if(!VmConfig::get('dangeroustools', true)){ $msg = $this->_getMsgDangerousTools(); $this->setRedirect($this->redirectPath, $msg); return false; } $model = VmModel::getModel('updatesMigration'); $result = $model->resetThumbs(); $this->setRedirect($this->redirectPath, $result); } } controllers/inventory.php000066600000002347151374526160011704 0ustar00addViewPath(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_virtuemart' . DS . 'views'); } /** * Shows the product add/edit screen */ public function edit($layout='edit') { parent::edit('product_edit'); } /** * We want to allow html so we need to overwrite some request data * * @author Max Milbers */ function save($data = 0){ $data = JRequest::get('post'); if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if(Permissions::getInstance()->check('admin')){ $data['product_desc'] = JRequest::getVar('product_desc','','post','STRING',2); $data['product_s_desc'] = JRequest::getVar('product_s_desc','','post','STRING',2); $data['customtitle'] = JRequest::getVar('customtitle','','post','STRING',2); } else { $data['product_desc'] = JRequest::getVar('product_desc','','post','STRING',2); $data['product_desc'] = JComponentHelper::filterText($data['product_desc']); //Why we have this? $multix = Vmconfig::get('multix','none'); if( $multix != 'none' ){ //in fact this shoudl be used, when the mode is administrated and the sysetm is so that //every product must be approved by an admin. unset($data['published']); //unset($data['childs']); } } parent::save($data); } function saveJS(){ $data = JRequest::get('get'); JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit( 'Invalid Token save' ); $model = VmModel::getModel($this->_cname); $id = $model->store($data); $errors = $model->getErrors(); if(empty($errors)) { $msg = JText::sprintf('COM_VIRTUEMART_STRING_SAVED',$this->mainLangKey); $type = 'save'; } else $type = 'error'; foreach($errors as $error){ $msg = ($error).'
            '; } $json['msg'] = $msg; if ($id) { $json['product_id'] = $id; $json['ok'] = 1 ; } else { $json['ok'] = 0 ; } echo json_encode($json); jExit(); } /** * This task creates a child by a given product id * * @author Max Milbers */ public function createChild(){ $app = Jfactory::getApplication(); /* Load the view object */ $view = $this->getView('product', 'html'); $model = VmModel::getModel('product'); //$cids = JRequest::getVar('cid'); $cids = JRequest::getVar($this->_cidName, JRequest::getVar('virtuemart_product_id',array(),'', 'ARRAY'), '', 'ARRAY'); //jimport( 'joomla.utilities.arrayhelper' ); JArrayHelper::toInteger($cids); foreach($cids as $cid){ if ($id=$model->createChild($cid)){ $msg = JText::_('COM_VIRTUEMART_PRODUCT_CHILD_CREATED_SUCCESSFULLY'); $redirect = 'index.php?option=com_virtuemart&view=product&task=edit&product_parent_id='.$cids[0].'&virtuemart_product_id='.$id; } else { $msg = JText::_('COM_VIRTUEMART_PRODUCT_NO_CHILD_CREATED_SUCCESSFULLY'); $msgtype = 'error'; $redirect = 'index.php?option=com_virtuemart&view=product'; } } $app->redirect($redirect, $msg, $msgtype); } /** * This task creates a child by a given product id * * @author Max Milbers */ public function createVariant(){ $data = JRequest::get('get'); JRequest::setVar($data['token'], '1', 'post'); JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $app = Jfactory::getApplication(); /* Load the view object */ $view = $this->getView('product', 'html'); $model = VmModel::getModel('product'); //$cids = JRequest::getVar('cid'); //$cid = JRequest::getInt('virtuemart_product_id',0); $cid = JRequest::getVar('virtuemart_product_id',array(),'', 'array'); if(is_array($cid) && count($cid) > 0){ $cid = (int)$cid[0]; } else { $cid = (int)$cid; } if(empty($cid)){ $msg = JText::_('COM_VIRTUEMART_PRODUCT_NO_CHILD_CREATED_SUCCESSFULLY'); // $redirect = 'index.php?option=com_virtuemart&view=product&task=edit&virtuemart_product_id='.$cid; } else { if ($id=$model->createChild($cid)){ $msg = JText::_('COM_VIRTUEMART_PRODUCT_CHILD_CREATED_SUCCESSFULLY'); $redirect = 'index.php?option=com_virtuemart&view=product&task=edit&virtuemart_product_id='.$cid; } else { $msg = JText::_('COM_VIRTUEMART_PRODUCT_NO_CHILD_CREATED_SUCCESSFULLY'); $msgtype = 'error'; $redirect = 'index.php?option=com_virtuemart&view=product'; } // vmdebug('$redirect '.$redirect); $app->redirect($redirect, $msg, $msgtype); } } public function massxref_sgrps(){ $this->massxref('massxref'); } public function massxref_sgrps_exe(){ $virtuemart_shoppergroup_ids = JRequest::getVar('virtuemart_shoppergroup_id',array(),'', 'ARRAY'); JArrayHelper::toInteger($virtuemart_shoppergroup_ids); $session = JFactory::getSession(); $cids = unserialize($session->get('vm_product_ids', array(), 'vm')); $productModel = VmModel::getModel('product'); foreach($cids as $cid){ $data = array('virtuemart_product_id' => $cid, 'virtuemart_shoppergroup_id' => $virtuemart_shoppergroup_ids); $data = $productModel->updateXrefAndChildTables ($data, 'product_shoppergroups'); } $this->massxref('massxref_sgrps'); } public function massxref_cats(){ $this->massxref('massxref'); } public function massxref_cats_exe(){ $virtuemart_cat_ids = JRequest::getVar('cid',array(),'', 'ARRAY'); JArrayHelper::toInteger($virtuemart_cat_ids); $session = JFactory::getSession(); $cids = unserialize($session->get('vm_product_ids', array(), 'vm')); $productModel = VmModel::getModel('product'); foreach($cids as $cid){ $data = array('virtuemart_product_id' => $cid, 'virtuemart_category_id' => $virtuemart_cat_ids); $data = $productModel->updateXrefAndChildTables ($data, 'product_categories',TRUE); } $this->massxref('massxref_cats'); } /** * */ public function massxref($layoutName){ JRequest::checkToken() or jexit('Invalid Token, in ' . JRequest::getWord('task')); $cids = JRequest::getVar('virtuemart_product_id',array(),'', 'ARRAY'); JArrayHelper::toInteger($cids); if(empty($cids)){ $session = JFactory::getSession(); $cids = unserialize($session->get('vm_product_ids', '', 'vm')); } else { $session = JFactory::getSession(); $session->set('vm_product_ids', serialize($cids),'vm'); } if(!empty($cids)){ $q = 'SELECT `product_name` FROM `#__virtuemart_products_' . VMLANG . '` '; $q .= ' WHERE `virtuemart_product_id` IN (' . implode(',', $cids) . ')'; $db = JFactory::getDbo(); $db->setQuery($q); $productNames = $db->loadResultArray(); vmInfo('COM_VIRTUEMART_PRODUCT_XREF_NAMES',implode(', ',$productNames)); } $this->addViewPath(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_virtuemart' . DS . 'views'); $document = JFactory::getDocument(); $viewType = $document->getType(); $view = $this->getView($this->_cname, $viewType); $view->setLayout($layoutName); $view->display(); } /** * Clone a product * * @author Max Milbers */ public function CloneProduct() { $mainframe = Jfactory::getApplication(); /* Load the view object */ $view = $this->getView('product', 'html'); $model = VmModel::getModel('product'); $msgtype = ''; //$cids = JRequest::getInt('virtuemart_product_id',0); $cids = JRequest::getVar($this->_cidName, JRequest::getVar('virtuemart_product_id',array(),'', 'ARRAY'), '', 'ARRAY'); //jimport( 'joomla.utilities.arrayhelper' ); JArrayHelper::toInteger($cids); foreach($cids as $cid){ if ($model->createClone($cid)) { $msg = JText::_('COM_VIRTUEMART_PRODUCT_CLONED_SUCCESSFULLY'); } else { $msg = JText::_('COM_VIRTUEMART_PRODUCT_NOT_CLONED_SUCCESSFULLY'); $msgtype = 'error'; } } $mainframe->redirect('index.php?option=com_virtuemart&view=product', $msg, $msgtype); } /** * Get a list of related products, categories * or customfields * @author Max Milbers * @author Kohl Patrick */ public function getData() { /* Create the view object. */ $view = $this->getView('product', 'json'); /* Now display the view. */ $view->display(NULL); } /** * Add a product rating * @author Max Milbers */ public function addRating() { $mainframe = Jfactory::getApplication(); /* Get the product ID */ // $cids = array(); $cids = JRequest::getVar($this->_cidName, JRequest::getVar('virtuemart_product_id',array(),'', 'ARRAY'), '', 'ARRAY'); jimport( 'joomla.utilities.arrayhelper' ); JArrayHelper::toInteger($cids); // if (!is_array($cids)) $cids = array($cids); $mainframe->redirect('index.php?option=com_virtuemart&view=ratings&task=add&virtuemart_product_id='.$cids[0]); } public function ajax_notifyUsers(){ //vmdebug('updatestatus'); $virtuemart_product_id = JRequest::getVar('virtuemart_product_id',array(),'', 'ARRAY'); if(is_array($virtuemart_product_id) and count($virtuemart_product_id) > 0){ $virtuemart_product_id = (int)$virtuemart_product_id[0]; } else { $virtuemart_product_id = (int)$virtuemart_product_id; } $subject = JRequest::getVar('subject', ''); $mailbody = JRequest::getVar('mailbody', ''); $max_number = (int)JRequest::getVar('max_number', ''); $waitinglist = VmModel::getModel('Waitinglist'); $waitinglist->notifyList($virtuemart_product_id,$subject,$mailbody,$max_number); exit; } public function ajax_waitinglist() { $virtuemart_product_id = JRequest::getVar('virtuemart_product_id',array(),'', 'ARRAY'); if(is_array($virtuemart_product_id) && count($virtuemart_product_id) > 0){ $virtuemart_product_id = (int)$virtuemart_product_id[0]; } else { $virtuemart_product_id = (int)$virtuemart_product_id; } $waitinglistmodel = VmModel::getModel('waitinglist'); $waitinglist = $waitinglistmodel->getWaitingusers($virtuemart_product_id); if(empty($waitinglist)) $waitinglist = array(); echo json_encode($waitinglist); exit; /* $result = array(); foreach($waitinglist as $wait) array_push($result,array("virtuemart_user_id"=>$wait->virtuemart_user_id,"notify_email"=>$wait->notify_email,'name'=>$wait->name,'username'=>$wait->username)); echo json_encode($result); exit; */ } } // pure php no closing tag controllers/custom.php000066600000004540151374526160011156 0ustar00getView('custom', 'json'); // Now display the view. $view->display(null); } function save($data = 0) { $data = JRequest::get('post'); // onSaveCustom plugin; parent::save($data); } /** * Clone a product * * @author Max Milbers */ public function createClone() { $mainframe = Jfactory::getApplication(); /* Load the view object */ $view = $this->getView('custom', 'html'); $model = VmModel::getModel('custom'); $msgtype = ''; $cids = JRequest::getVar($this->_cidName, JRequest::getVar('virtuemart_custom_id',array(),'', 'ARRAY'), '', 'ARRAY'); jimport( 'joomla.utilities.arrayhelper' ); JArrayHelper::toInteger($cids); foreach ($cids as $custom_id) { if ($model->createClone($custom_id)) $msg = JText::_('COM_VIRTUEMART_CUSTOM_CLONED_SUCCESSFULLY'); else { $msg = JText::_('COM_VIRTUEMART_CUSTOM_NOT_CLONED_SUCCESSFULLY').' : '.$custom_id; $msgtype = 'error'; } } $mainframe->redirect('index.php?option=com_virtuemart&view=custom', $msg, $msgtype); } } // pure php no closing tag controllers/currency.php000066600000003331151374526160011473 0ustar00_cname); JRequest::setVar('view', $this->_cname); JRequest::setVar('layout', 'edit_review'); // JRequest::setVar('hidemenu', 1); if(empty($view)){ $document = JFactory::getDocument(); $viewType = $document->getType(); $view = $this->getView($this->_cname, $viewType); } parent::display(); } /** * lits the reviews * @author Max Milbers */ public function listreviews(){ /* Create the view object */ $view = $this->getView('ratings', 'html'); $view->setLayout('list_reviews'); $view->display(); } /** * we must overwrite it here, because the task publish can be meant for two different list layouts. */ function publish(){ JRequest::checkToken() or jexit( 'Invalid Token save' ); $layout = JRequest::getString('layout','default'); if($layout=='list_reviews'){ $virtuemart_product_id = JRequest::getVar('virtuemart_product_id',array(),'', 'array'); if(is_array($virtuemart_product_id) && count($virtuemart_product_id) > 0){ $virtuemart_product_id = (int)$virtuemart_product_id[0]; } else { $virtuemart_product_id = (int)$virtuemart_product_id; } $redPath = ''; if (!empty($virtuemart_product_id)) { $redPath = '&task=listreviews&virtuemart_product_id=' . $virtuemart_product_id; } parent::publish('virtuemart_rating_review_id','rating_reviews',$this->redirectPath.$redPath); } else { parent::publish(); } } function unpublish(){ JRequest::checkToken() or jexit( 'Invalid Token save' ); $layout = JRequest::getString('layout','default'); if($layout=='list_reviews'){ $virtuemart_product_id = JRequest::getVar('virtuemart_product_id',array(),'', 'array'); if(is_array($virtuemart_product_id) && count($virtuemart_product_id) > 0){ $virtuemart_product_id = (int)$virtuemart_product_id[0]; } else { $virtuemart_product_id = (int)$virtuemart_product_id; } $redPath = ''; if (!empty($virtuemart_product_id)) { $redPath = '&task=listreviews&virtuemart_product_id=' . $virtuemart_product_id; } parent::unpublish('virtuemart_rating_review_id','rating_reviews',$this->redirectPath.$redPath); } else { parent::unpublish(); } } /** * Save task for review * * @author Max Milbers */ function saveReview(){ $this->storeReview(FALSE); } /** * Save task for review * * @author Max Milbers */ function applyReview(){ $this->storeReview(TRUE); } function storeReview($apply){ JRequest::checkToken() or jexit( 'Invalid Token save' ); if (empty($data)){ $data = JRequest::get ('post'); } $model = VmModel::getModel($this->_cname); $id = $model->saveRating($data); $errors = $model->getErrors(); if (empty($errors)) { $msg = JText::sprintf ('COM_VIRTUEMART_STRING_SAVED', $this->mainLangKey); } foreach($errors as $error){ $msg = ($error).'
            '; } $redir = $this->redirectPath; if($apply){ $redir = 'index.php?option=com_virtuemart&view=ratings&task=edit_review&virtuemart_rating_review_id='.$id; } else { $virtuemart_product_id = JRequest::getVar('virtuemart_product_id',array(),'', 'array'); if(is_array($virtuemart_product_id) && count($virtuemart_product_id) > 0){ $virtuemart_product_id = (int)$virtuemart_product_id[0]; } else { $virtuemart_product_id = (int)$virtuemart_product_id; } $redir = 'index.php?option=com_virtuemart&view=ratings&task=listreviews&virtuemart_product_id='.$virtuemart_product_id; } $this->setRedirect($redir, $msg); } /** * Save task for review * * @author Max Milbers */ function cancelEditReview(){ $virtuemart_product_id = JRequest::getVar('virtuemart_product_id',array(),'', 'array'); if(is_array($virtuemart_product_id) && count($virtuemart_product_id) > 0){ $virtuemart_product_id = (int)$virtuemart_product_id[0]; } else { $virtuemart_product_id = (int)$virtuemart_product_id; } $msg = JText::sprintf('COM_VIRTUEMART_STRING_CANCELLED',$this->mainLangKey); //'COM_VIRTUEMART_OPERATION_CANCELED' $this->setRedirect('index.php?option=com_virtuemart&view=ratings&task=listreviews&virtuemart_product_id='.$virtuemart_product_id, $msg); } } // pure php no closing tag controllers/orderstatus.php000066600000002457151374526160012230 0ustar00getView('shipmentmethod', 'html'); $model = VmModel::getModel('shipmentmethod'); $msgtype = ''; //$cids = JRequest::getInt('virtuemart_product_id',0); $cids = JRequest::getVar($this->_cidName, JRequest::getVar('virtuemart_shipment_id',array(),'', 'ARRAY'), '', 'ARRAY'); //jimport( 'joomla.utilities.arrayhelper' ); JArrayHelper::toInteger($cids); foreach($cids as $cid){ if ($model->createClone($cid)) $msg = JText::_('COM_VIRTUEMART_SHIPMENT_CLONED_SUCCESSFULLY'); else { $msg = JText::_('COM_VIRTUEMART_SHIPMENT_NOT_CLONED_SUCCESSFULLY'); $msgtype = 'error'; } } $mainframe->redirect('index.php?option=com_virtuemart&view=shipmentmethod', $msg, $msgtype); } } // pure php no closing tag controllers/paymentmethod.php000066600000005044151374526160012522 0ustar00getView('paymentmethod', 'html'); $model = VmModel::getModel('paymentmethod'); $msgtype = ''; //$cids = JRequest::getInt('virtuemart_product_id',0); $cids = JRequest::getVar($this->_cidName, JRequest::getVar('virtuemart_payment_id',array(),'', 'ARRAY'), '', 'ARRAY'); //jimport( 'joomla.utilities.arrayhelper' ); JArrayHelper::toInteger($cids); foreach($cids as $cid){ if ($model->createClone($cid)) $msg = JText::_('COM_VIRTUEMART_PAYMENT_CLONED_SUCCESSFULLY'); else { $msg = JText::_('COM_VIRTUEMART_PAYMENT_NOT_CLONED_SUCCESSFULLY'); $msgtype = 'error'; } } $mainframe->redirect('index.php?option=com_virtuemart&view=paymentmethod', $msg, $msgtype); } } // pure php no closing tag config.xml000066600000003657151374526160006564 0ustar00
            version.php000066600000004340151374526160006761 0ustar00" . vmVersion::$RELDATE . " " . vmVersion::$RELTIME . " " . vmVersion::$RELTZ; return; } if( !class_exists( 'vmVersion' ) ) { /** Version information */ class vmVersion { /** @var string Product */ static $PRODUCT = 'VirtueMart'; /** @var int Release Number */ static $RELEASE = '2.6.2'; /** @var string Development Status */ static $DEV_STATUS = 'MINOR'; /** @var string Codename */ static $CODENAME = 'PowerFox'; /** @var string Date */ static $RELDATE = 'May 22 2014'; /** @var string Time */ static $RELTIME = '1259'; /** @var string Timezone */ static $RELTZ = 'GMT'; /** @var string Revision */ static $REVISION = 'Revision: 7985'; /** @var string Copyright Text */ static $COPYRIGHT = 'Copyright (C) 2005-2012 VirtueMart Development Team - All rights reserved.'; /** @var string URL */ static $URL = 'VirtueMart is a Free Component for Joomla! released under the GNU/GPL2 License.'; } $shortversion = vmVersion::$PRODUCT . " " . vmVersion::$RELEASE . " " . vmVersion::$DEV_STATUS. " "; $myVersion = $shortversion .' '.vmVersion::$REVISION. " [".vmVersion::$CODENAME ."]
            " . vmVersion::$RELDATE . " " . vmVersion::$RELTIME . " " . vmVersion::$RELTZ; } // pure php no closing tagtables/product_shoppergroups.php000066600000002471151374526160013231 0ustar00setPrimaryKey('virtuemart_product_id'); $this->setSecondaryKey('virtuemart_shoppergroup_id'); } }tables/category_medias.php000066600000002441151374526160011705 0ustar00setPrimaryKey('virtuemart_category_id'); $this->setSecondaryKey('virtuemart_media_id'); $this->setOrderable(); $this->setTableShortCut('cm'); } } tables/categories.php000066600000015500151374526160010673 0ustar00setPrimaryKey('virtuemart_category_id'); $this->setObligatoryKeys('category_name'); $this->setLoggable(); $this->setTranslatable(array('category_name','category_description','metadesc','metakey','customtitle')); $this->setSlug('category_name'); $this->setTableShortCut('c'); } public function check(){ $csValue = $this->limit_list_step; if(!empty($csValue)){ $sequenceArray = explode(',', $csValue); foreach($sequenceArray as &$csV){ $csV = (int)trim($csV); } $this->limit_list_step = implode(',',$sequenceArray); vmdebug('my check',$this->limit_list_step); } return parent::check(); } /** * Overwrite method * * @author jseros * @param $dirn movement number * @param $parent_id category parent id * @param $where sql WHERE clausule */ public function move( $dirn, $parent_id = 0, $where='' ) { if (!in_array( 'ordering', array_keys($this->getProperties()))) { vmError( get_class( $this ).' does not support ordering' ); return false; } $k = $this->_tbl_key; $sql = "SELECT c.".$this->_tbl_key.", c.ordering FROM ".$this->_tbl." c LEFT JOIN #__virtuemart_category_categories cx ON c.virtuemart_category_id = cx.category_child_id"; $condition = 'cx.category_parent_id = '. $this->_db->Quote($parent_id); $where = ($where ? ' AND '.$condition : $condition); if ($dirn < 0) { $sql .= ' WHERE c.ordering < '.(int) $this->ordering; $sql .= ($where ? ' AND '.$where : ''); $sql .= ' ORDER BY c.ordering DESC'; } else if ($dirn > 0) { $sql .= ' WHERE c.ordering > '.(int) $this->ordering; $sql .= ($where ? ' AND '. $where : ''); $sql .= ' ORDER BY c.ordering'; } else { $sql .= ' WHERE c.ordering = '.(int) $this->ordering; $sql .= ($where ? ' AND '.$where : ''); $sql .= ' ORDER BY c.ordering'; } $this->_db->setQuery( $sql, 0, 1 ); $row = null; $row = $this->_db->loadObject(); if (isset($row)) { $query = 'UPDATE '. $this->_tbl . ' SET ordering = '. (int) $row->ordering . ' WHERE '. $this->_tbl_key .' = '. $this->_db->Quote($this->$k) ; $this->_db->setQuery( $query ); if (!$this->_db->query()) { $err = $this->_db->getErrorMsg(); JError::raiseError( 500, 'TableCategories move isset row this->k '.$err ); } $query = 'UPDATE '.$this->_tbl . ' SET ordering = '.(int) $this->ordering . ' WHERE '.$this->_tbl_key.' = '.$this->_db->Quote($row->$k) ; $this->_db->setQuery( $query ); if (!$this->_db->query()) { $err = $this->_db->getErrorMsg(); JError::raiseError( 500, 'TableCategories move isset row $row->$k '.$err ); } $this->ordering = $row->ordering; } else { $query = 'UPDATE '. $this->_tbl . ' SET ordering = '.(int) $this->ordering . ' WHERE '. $this->_tbl_key .' = '. $this->_db->Quote($this->$k) ; $this->_db->setQuery( $query ); if (!$this->_db->query()) { $err = $this->_db->getErrorMsg(); JError::raiseError( 500, 'TableCategories move update '.$err ); } } return true; } /** * Overwrite method * Compacts the ordering sequence of the selected records * @author jseros * * @param $parent_id category parent id * @param string Additional where query to limit ordering to a particular subset of records */ function reorder( $parent_id = 0, $where='' ) { $k = $this->_tbl_key; if (!in_array( 'ordering', array_keys($this->getProperties() ) )) { vmError( get_class( $this ).' does not support ordering'); return false; } $query = 'SELECT c.'.$this->_tbl_key.', c.ordering' . ' FROM '. $this->_tbl . ' c' . ' LEFT JOIN #__virtuemart_category_categories cx' . ' ON c.virtuemart_category_id = cx.category_child_id' . ' WHERE c.ordering >= 0' . ( $where ? ' AND '. $where : '' ) . ' AND cx.category_parent_id = '. $parent_id . ' ORDER BY c.ordering'.$order2; $this->_db->setQuery( $query ); if (!($orders = $this->_db->loadObjectList())) { vmError($this->_db->getErrorMsg()); return false; } // compact the ordering numbers for ($i=0, $n=count( $orders ); $i < $n; $i++) { if ($orders[$i]->ordering >= 0) { if ($orders[$i]->ordering != $i+1) { $orders[$i]->ordering = $i+1; $query = 'UPDATE '.$this->_tbl . ' SET ordering = '. (int) $orders[$i]->ordering . ' WHERE '. $k .' = '. $this->_db->Quote($orders[$i]->$k) ; $this->_db->setQuery( $query); $this->_db->query(); } } } return true; } } tables/userinfos.php000066600000012261151374526160010564 0ustar00setPrimaryKey('virtuemart_userinfo_id'); $this->setObligatoryKeys('address_type'); $this->setObligatoryKeys('virtuemart_user_id'); $this->setLoggable(); $this->setTableShortCut('ui'); } /** * Validates the user info record fields. * * @author RickG, RolandD, Max Milbers * @return boolean True if the table buffer is contains valid data, false otherwise. */ public function check(){ if($this->address_type=='BT' or $this->address_type=='ST' ){ if($this->address_type=='ST' and empty($this->address_type_name)){ $this->address_type_name = 'Delivery Address '.rand(1,9); vmWarn('Table userinfos check failed: address_type '.$this->address_type.' without name, autogenerated '.$this->address_type_name,'check failed: ST has no name, autogenerated '.$this->address_type_name); //return false; } } else { vmError('Table userinfos check failed: Unknown address_type '.$this->address_type,'check failed: Unknown address_type '); vmdebug('Table userinfos check failed: Unknown address_type '.$this->address_type.' virtuemart_user_id '.$this->virtuemart_user_id.' name '.$this->name); return false; } if (!empty($this->virtuemart_userinfo_id)) { $this->virtuemart_userinfo_id = (int)$this->virtuemart_userinfo_id; if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if(!Permissions::getInstance()->check("admin")) { $q = "SELECT virtuemart_user_id FROM #__virtuemart_userinfos WHERE virtuemart_userinfo_id = ".$this->virtuemart_userinfo_id; $this->_db->setQuery($q); $total = $this->_db->loadResultArray(); if (count($total) > 0) { $userId = JFactory::getUser()->id; if($total[0]!=$userId){ vmError('Hacking attempt uid check, you got logged'); echo 'Hacking attempt uid check, you got logged'; return false; } } } //return parent::check(); } else { if(empty($this->address_type)) $this->address_type = 'BT'; /* Check if a record exists */ $q = "SELECT virtuemart_userinfo_id FROM #__virtuemart_userinfos WHERE virtuemart_user_id = ".$this->virtuemart_user_id." AND address_type = ".$this->_db->Quote($this->address_type); if($this->address_type!='BT'){ $q .= " AND address_type_name = ".$this->_db->Quote($this->address_type_name); } $this->_db->setQuery($q); $total = $this->_db->loadResultArray(); if (count($total) > 0) { $this->virtuemart_userinfo_id = (int)$total[0]; } else { $this->virtuemart_userinfo_id = 0;//md5(uniqid($this->virtuemart_user_id)); } } if(empty($this->virtuemart_user_id)){ $user = JFactory::getUser(); if(!empty($user->id)){ $this->virtuemart_user_id = $user->id; } } return parent::check(); } /** * Overloaded delete() to delete a list of virtuemart_userinfo_id's based on the user id * @var mixed id * @return boolean True on success * @author Oscar van Eijk */ function delete( $id=null , $where = 0 ){ // TODO If $id is not numeric, assume it's a virtuemart_userinfo_id. Validate if this is safe enough if (!is_numeric($id)) { return (parent::delete($id)); } // Implicit else $this->_db->setQuery('DELETE from `#__virtuemart_userinfos` WHERE `virtuemart_user_id` = ' . $id); if ($this->_db->query() === false) { vmError($this->_db->getError()); return false; } return true; } } // No Closing tag tables/userfield_values.php000066600000006140151374526160012107 0ustar00setPrimaryKey('virtuemart_userfield_id'); } /** * Validates the userfields record fields, and checks if the given value already exists. * If so, the primary key is set. * * @return boolean True if the table buffer is contains valid data, false otherwise. */ function check() { if (preg_match('/[^a-z0-9\._\-]/i', $this->fieldvalue) > 0) { vmError(JText::_('COM_VIRTUEMART_TITLE_IN_FIELDVALUES_CONTAINS_INVALID_CHARACTERS')); return false; } $db = JFactory::getDBO(); $q = 'SELECT `virtuemart_userfield_value_id` FROM `#__virtuemart_userfield_values` ' . 'WHERE `fieldvalue`="' . $this->fieldvalue . '" ' . 'AND `virtuemart_userfield_id`=' . $this->virtuemart_userfield_id; $db->setQuery($q); $_id = $db->loadResult(); if ($_id === null) { $this->virtuemart_userfield_value_id = null; } else { $this->virtuemart_userfield_value_id = $_id; } return true; } /** * Reimplement delete() to get a list if value IDs based on the field id * @var Field id * @return boolean True on success */ function delete( $virtuemart_userfield_id=null , $where = 0 ){ $db = JFactory::getDBO(); $db->setQuery('DELETE from `#__virtuemart_userfield_values` WHERE `virtuemart_userfield_id` = ' . $virtuemart_userfield_id); if ($db->query() === false) { vmError($db->getError()); return false; } return true; } } //No CLosing Tag tables/order_items.php000066600000004742151374526160011070 0ustar00setLoggable(); } } // pure php no closing tag tables/calc_shoppergroups.php000066600000002322151374526160012446 0ustar00setPrimaryKey('virtuemart_calc_id'); $this->setSecondaryKey('virtuemart_shoppergroup_id'); } } tables/invoices.php000066600000002726151374526160010373 0ustar00setUniqueName('invoice_number'); $this->setLoggable(); $this->setTableShortCut('inv'); } } tables/vmusers.php000066600000003135151374526160010253 0ustar00setPrimaryKey('virtuemart_user_id'); $this->setLoggable(); $this->setTableShortCut('vmu'); } } tables/calc_categories.php000066600000002370151374526160011656 0ustar00setPrimaryKey('virtuemart_calc_id'); $this->setSecondaryKey('virtuemart_category_id','calc_categories'); } } tables/product_prices.php000066600000004775151374526160011607 0ustar00setPrimaryKey('virtuemart_product_price_id'); $this->setLoggable(); $this->setTableShortCut('pp'); $this->_updateNulls = true; } /** * @author Max Milbers * @param */ function check(){ if(!empty($this->product_price)){ $this->product_price = str_replace(array(',',' '),array('.',''),$this->product_price); } if(isset($this->product_override_price)){ $this->product_override_price = str_replace(array(',',' '),array('.',''),$this->product_override_price); } return parent::check(); } } // pure php no closing tag tables/shipmentmethods.php000066600000004334151374526160011764 0ustar00setUniqueName('shipment_name'); $this->setObligatoryKeys('shipment_jplugin_id'); $this->setObligatoryKeys('shipment_name'); $this->setLoggable(); $this->setTranslatable(array('shipment_name', 'shipment_desc')); $this->setSlug('shipment_name'); } } // pure php no closing tag tables/shipmentmethod_shoppergroups.php000066600000002471151374526160014601 0ustar00setPrimaryKey('virtuemart_shipmentmethod_id'); $this->setSecondaryKey('virtuemart_shoppergroup_id'); } } tables/currencies.php000066600000005465151374526160010721 0ustar00setUniqueName('currency_name'); $this->setLoggable(); $this->setOrderable(); } function check(){ //$this->checkCurrencySymbol(); return parent::check(); } /** * ATM Unused ! * Checks a currency symbol wether it is a HTML entity. * When not and $convertToEntity is true, it converts the symbol * Seems not be used ATTENTION seems BROKEN, working only for euro, ... * */ function checkCurrencySymbol($convertToEntity=true ) { $symbol = str_replace('&', '&', $this->currency_symbol ); if( substr( $symbol, 0, 1) == '&' && substr( $symbol, strlen($symbol)-1, 1 ) == ';') { return $symbol; } else { if( $convertToEntity ) { $symbol = htmlentities( $symbol, ENT_QUOTES, 'utf-8' ); if( substr( $symbol, 0, 1) == '&' && substr( $symbol, strlen($symbol)-1, 1 ) == ';') { return $symbol; } // Sometimes htmlentities() doesn't return a valid HTML Entity switch( ord( $symbol ) ) { case 128: case 63: $symbol = '€'; break; } } } $this->currency_symbol = $symbol; } } // pure php no closing tag tables/ratings.php000066600000003232151374526160010214 0ustar00setPrimaryKey('virtuemart_rating_id'); // $this->setObligatoryKeys('virtuemart_product_id'); $this->setLoggable(); $this->setTableShortCut('r'); } } // pure php no closing tag tables/paymentmethods.php000066600000004445151374526160011615 0ustar00setObligatoryKeys('payment_jplugin_id'); $this->setObligatoryKeys('payment_name'); $this->setLoggable(); $this->setTranslatable(array('payment_name', 'payment_desc')); $this->setSlug('payment_name'); // $this->setUniqueName('ordering'); } } // pure php no closing tag tables/.htaccess000066600000000177151374526160007637 0ustar00 Order allow,deny Deny from all tables/vendors.php000066600000011462151374526160010231 0ustar00setPrimaryKey('virtuemart_vendor_id'); $this->setUniqueName('vendor_name'); $this->setSlug('vendor_store_name'); //Attention the slug autoname MUST be also in the translatable, if existing $this->setLoggable(); $this->setTranslatable(array('vendor_store_name','vendor_phone','vendor_store_desc','vendor_terms_of_service','vendor_legal_info','vendor_url','metadesc','metakey','customtitle','vendor_letter_css', 'vendor_letter_header_html', 'vendor_letter_footer_html')); $varsToPushParam = array( 'vendor_min_pov'=>array(0.0,'float'), 'vendor_min_poq'=>array(1,'int'), 'vendor_freeshipment'=>array(0.0,'float'), 'vendor_address_format'=>array('','string'), 'vendor_date_format'=>array('','string'), 'vendor_letter_format'=>array('A4','string'), 'vendor_letter_orientation'=>array('P','string'), 'vendor_letter_margin_top'=>array(45,'int'), 'vendor_letter_margin_left'=>array(25,'int'), 'vendor_letter_margin_right'=>array(25,'int'), 'vendor_letter_margin_bottom'=>array(25,'int'), 'vendor_letter_margin_header'=>array(12,'int'), 'vendor_letter_margin_footer'=>array(20,'int'), 'vendor_letter_font'=>array('helvetica','string'), 'vendor_letter_font_size'=>array(8, 'int'), 'vendor_letter_header_font_size'=>array(7, 'int'), 'vendor_letter_footer_font_size'=>array(6, 'int'), 'vendor_letter_header'=>array(1,'int'), 'vendor_letter_header_line'=>array(1,'int'), 'vendor_letter_header_line_color'=>array("#000000",'string'), 'vendor_letter_header_image'=>array(1,'int'), 'vendor_letter_header_imagesize'=>array(60,'int'), 'vendor_letter_header_cell_height_ratio'=>array(1,'float'), 'vendor_letter_footer'=>array(1,'int'), 'vendor_letter_footer_line'=>array(1,'int'), 'vendor_letter_footer_line_color'=>array("#000000",'string'), 'vendor_letter_footer_cell_height_ratio'=>array(1,'float'), 'vendor_letter_add_tos' => array(0,'int'), 'vendor_letter_add_tos_newpage' => array(1,'int') ); $this->setParameterable('vendor_params',$varsToPushParam); $this->setTableShortCut('v'); // vmdebug('myvendor table',$this); } } //pure php no closing tag tables/paymentmethod_shoppergroups.php000066600000002423151374526160014424 0ustar00setPrimaryKey('virtuemart_paymentmethod_id'); $this->setSecondaryKey('virtuemart_shoppergroup_id'); } } tables/waitingusers.php000066600000003333151374526160011273 0ustar00setLoggable(); } function check() { if(empty($this->notify_email) || !filter_var($this->notify_email, FILTER_VALIDATE_EMAIL)) { vmError(JText::_('COM_VIRTUEMART_ENTER_A_VALID_EMAIL_ADDRESS'),JText::_('COM_VIRTUEMART_ENTER_A_VALID_EMAIL_ADDRESS')); return false; } return parent::check(); } } // pure php no closing tag tables/languages.php000066600000002777151374526160010530 0ustar00setTableShortCut('l'); } } // pure php no closing tag tables/product_categories.php000066600000002411151374526160012430 0ustar00setPrimaryKey('virtuemart_product_id'); $this->setSecondaryKey('virtuemart_category_id'); $this->setOrderable('ordering',false); } } tables/manufacturers.php000066600000003572151374526160011433 0ustar00setUniqueName('mf_name'); $this->setLoggable(); $this->setTranslatable(array('mf_name','mf_email','mf_desc','mf_url')); $this->setSlug('mf_name'); $this->setTableShortCut('m'); } } // pure php no closing tag tables/manufacturer_medias.php000066600000002417151374526160012567 0ustar00setPrimaryKey('virtuemart_manufacturer_id'); $this->setSecondaryKey('virtuemart_media_id'); $this->setOrderable(); } } tables/orders.php000066600000014643151374526160010053 0ustar00setUniqueName('order_number'); $this->setLoggable(); $this->setTableShortCut('o'); } function check(){ if(empty($this->order_number)){ if(!class_exists('VirtueMartModelOrders')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'orders.php'); $this->order_number = VirtueMartModelOrders::generateOrderNumber((string)time()); } if(empty($this->order_pass)){ $this->order_pass = 'p_'.substr( md5((string)time().$this->order_number ), 0, 5); } $adminID = JFactory::getSession()->get('vmAdminID'); if(isset($adminID)) { $this->created_by = $adminID; } return parent::check(); } /** * Overloaded delete() to delete records from order_userinfo and order payment as well, * and write a record to the order history (TODO Or should the hist table be cleaned as well?) * * @var integer Order id * @return boolean True on success * @author Oscar van Eijk * @author Kohl Patrick */ function delete( $id=null , $where = 0 ){ $this->_db->setQuery('DELETE from `#__virtuemart_order_userinfos` WHERE `virtuemart_order_id` = ' . $id); if ($this->_db->query() === false) { vmError($this->_db->getError()); return false; } /*vm_order_payment NOT EXIST have to find the table name*/ $this->_db->setQuery( 'SELECT `payment_element` FROM `#__virtuemart_paymentmethods` , `#__virtuemart_orders` WHERE `#__virtuemart_paymentmethods`.`virtuemart_paymentmethod_id` = `#__virtuemart_orders`.`virtuemart_paymentmethod_id` AND `virtuemart_order_id` = ' . $id ); $paymentTable = '#__virtuemart_payment_plg_'. $this->_db->loadResult(); $this->_db->setQuery('DELETE from `'.$paymentTable.'` WHERE `virtuemart_order_id` = ' . $id); if ($this->_db->query() === false) { vmError($this->_db->getError()); return false; } /*vm_order_shipment NOT EXIST have to find the table name*/ $this->_db->setQuery( 'SELECT `shipment_element` FROM `#__virtuemart_shipmentmethods` , `#__virtuemart_orders` WHERE `#__virtuemart_shipmentmethods`.`virtuemart_shipmentmethod_id` = `#__virtuemart_orders`.`virtuemart_shipmentmethod_id` AND `virtuemart_order_id` = ' . $id ); $shipmentName = $this->_db->loadResult(); if(empty($shipmentName)){ vmError('Seems the used shipmentmethod got deleted'); //Can we securely prevent this just using // 'SELECT `shipment_element` FROM `#__virtuemart_shipmentmethods` , `#__virtuemart_orders` // WHERE `#__virtuemart_shipmentmethods`.`virtuemart_shipmentmethod_id` = `#__virtuemart_orders`.`virtuemart_shipmentmethod_id` AND `virtuemart_order_id` = ' . $id ); } else { $shipmentTable = '#__virtuemart_shipment_plg_'. $shipmentName; $this->_db->setQuery('DELETE from `'.$shipmentTable.'` WHERE `virtuemart_order_id` = ' . $id); if ($this->_db->query() === false) { vmError('TableOrders delete Order shipmentTable = '.$shipmentTable.' `virtuemart_order_id` = '.$id.' dbErrorMsg '.$this->_db->getError()); return false; } } $_q = 'INSERT INTO `#__virtuemart_order_histories` (' . ' virtuemart_order_history_id' . ',virtuemart_order_id' . ',order_status_code' . ',created_on' . ',customer_notified' . ',comments' .') VALUES (' . ' NULL' . ','.$id . ",'-'" . ',NOW()' . ',0' . ",'Order deleted'" .')'; $this->_db->setQuery($_q); $this->_db->query(); // Ignore error here return parent::delete($id); } } tables/worldzones.php000066600000003410151374526160010751 0ustar00setUniqueName('zone_name'); $this->setLoggable(); } } // pure php no closing tag tables/coupons.php000066600000003524151374526160010237 0ustar00setObligatoryKeys('coupon_code'); $this->setLoggable(); } } // pure php no closing tag tables/calc_states.php000066600000002247151374526160011037 0ustar00setPrimaryKey('virtuemart_calc_id'); $this->setSecondaryKey('virtuemart_state_id'); } } tables/manufacturercategories.php000066600000004525151374526160013315 0ustar00setUniqueName('mf_category_name'); $this->setLoggable(); $this->setTranslatable(array('mf_category_name','mf_category_desc')); $this->setSlug('mf_category_name'); } /* * Verify that user have to delete all manufacturers of a particular category before that category can be removed * * @return boolean True if category is ready to be removed, otherwise False */ function checkManufacturer($categoryId = 0) { if($categoryId > 0) { $db = JFactory::getDBO(); $q = 'SELECT count(*)' .' FROM #__virtuemart_manufacturers' .' WHERE virtuemart_manufacturercategories_id = '.$categoryId; $db->setQuery($q); $mCount = $db->loadResult(); if($mCount > 0) { vmInfo('COM_VIRTUEMART_REMOVE_IN_USE'); return false; } } return true; } } // pure php no closing tag tables/rating_votes.php000066600000002660151374526160011255 0ustar00setPrimaryKey('virtuemart_rating_vote_id'); $this->setLoggable(); } } // pure php no closing tag tables/order_calc_rules.php000066600000003740151374526160012060 0ustar00setLoggable(); } } // pure php no closing tag tables/reports.php000066600000002236151374526160010246 0ustar00setPrimaryKey('virtuemart_media_id'); // $this->setUniqueName('file_title'); $this->setLoggable (); } /** * * @author Max Milbers * @return boolean True if the table buffer is contains valid data, false otherwise. */ function check () { $ok = TRUE; $notice = TRUE; if (empty($this->file_type) and empty($this->file_is_forSale)) { $ok = FALSE; vmError (JText::sprintf ('COM_VIRTUEMART_MEDIA_NO_TYPE'), $this->file_name); } if (!empty($this->file_url)) { if (function_exists ('mb_strlen')) { if (mb_strlen ($this->file_url) > 254) { vmError (JText::sprintf ('COM_VIRTUEMART_URL_TOO_LONG', mb_strlen ($this->file_url))); } } else { if (strlen ($this->file_url) > 254) { vmError (JText::sprintf ('COM_VIRTUEMART_URL_TOO_LONG', strlen ($this->file_url))); } } if (strpos ($this->file_url, '..') !== FALSE) { $ok = FALSE; vmError (JText::sprintf ('COM_VIRTUEMART_URL_NOT_VALID', $this->file_url)); } if (empty($this->virtuemart_media_id)) { $q = 'SELECT `virtuemart_media_id`,`file_url` FROM `' . $this->_tbl . '` WHERE `file_url` = "' . $this->_db->getEscaped ($this->file_url) . '" '; $this->_db->setQuery ($q); $unique_id = $this->_db->loadAssocList (); $count = count ($unique_id); if ($count !== 0) { if ($count == 1) { if (empty($this->virtuemart_media_id)) { $this->virtuemart_media_id = $unique_id[0]['virtuemart_media_id']; } else { vmError (JText::_ ('COM_VIRTUEMART_MEDIA_IS_ALREADY_IN_DB')); $ok = FALSE; } } else { // vmError(JText::_('COM_VIRTUEMART_MEDIA_IS_DOUBLED_IN_DB')); vmError (JText::_ ('COM_VIRTUEMART_MEDIA_IS_DOUBLED_IN_DB')); $ok = FALSE; } } } } else { vmError (JText::_ ('COM_VIRTUEMART_MEDIA_MUST_HAVE_URL')); $ok = FALSE; } if (empty($this->file_title) && !empty($this->file_name)) { $this->file_title = $this->file_name; } if (!empty($this->file_title)) { if (strlen ($this->file_title) > 126) { vmError (JText::sprintf ('COM_VIRTUEMART_TITLE_TOO_LONG', strlen ($this->file_title))); } $q = 'SELECT * FROM `' . $this->_tbl . '` '; $q .= 'WHERE `file_title`="' . $this->_db->getEscaped ($this->file_title) . '" AND `file_type`="' . $this->_db->getEscaped ($this->file_type) . '"'; $this->_db->setQuery ($q); $unique_id = $this->_db->loadAssocList (); $tblKey = 'virtuemart_media_id'; if (!empty($unique_id)) { foreach ($unique_id as $item) { if ($item['virtuemart_media_id'] != $this->virtuemart_media_id) { $lastDir = substr ($this->file_url, 0, strrpos ($this->file_url, '/')); $lastDir = substr ($lastDir, strrpos ($lastDir, '/') + 1); if (!empty($lastDir)) { $this->file_title = $this->file_title . '_' . $lastDir; } else { $this->file_title = $this->file_title . '_' . rand (1, 9); } } } } } else { vmError (JText::_ ('COM_VIRTUEMART_MEDIA_MUST_HAVE_TITLE')); $ok = FALSE; } if (!empty($this->file_description)) { if (strlen ($this->file_description) > 254) { vmError (JText::sprintf ('COM_VIRTUEMART_DESCRIPTION_TOO_LONG', strlen ($this->file_description))); } } // $app = JFactory::getApplication(); //vmError('Checking '.$this->file_url); if (empty($this->file_mimetype)) { $rel_path = str_replace ('/', DS, $this->file_url); //The function mime_content_type is deprecated, we may use /*function _mime_content_type($filename) { $result = new finfo(); if (is_resource($result) === true) { return $result->file($filename, FILEINFO_MIME_TYPE); } return false; } if (function_exists ('mime_content_type')) { $ok = TRUE; $app = JFactory::getApplication (); if (!$this->file_is_forSale) { $this->file_mimetype = mime_content_type (JPATH_ROOT . DS . $rel_path); } else { $this->file_mimetype = mime_content_type ($rel_path); } if (!empty($this->file_mimetype)) { if ($this->file_mimetype == 'directory') { vmError ('cant store this media, is a directory ' . $rel_path); return FALSE; } else { if (strpos ($this->file_mimetype, 'corrupt') !== FALSE) { vmError ('cant store this media, Document corrupt: Cannot read summary info ' . $rel_path); return FALSE; } } } else { vmError ('Couldnt resolve mime ' . $rel_path); return FALSE; } } else {*/ if (!class_exists ('JFile')) { require(JPATH_VM_LIBRARIES . DS . 'joomla' . DS . 'filesystem' . DS . 'file.php'); } if (!$this->file_is_forSale) { $lastIndexOfSlash = strrpos ($this->file_url, '/'); $name = substr ($this->file_url, $lastIndexOfSlash + 1); $file_extension = strtolower (JFile::getExt ($name)); } else { $lastIndexOfSlash = strrpos ($this->file_url, DS); $name = substr ($this->file_url, $lastIndexOfSlash + 1); $file_extension = strtolower (JFile::getExt ($name)); } if (empty($name)) { vmError (JText::_ ('COM_VIRTUEMART_NO_MEDIA')); } //images elseif($file_extension === 'jpg' or $file_extension === 'jpeg' or $file_extension === 'jpe'){ $this->file_mimetype = 'image/jpeg'; } elseif($file_extension === 'gif'){ $this->file_mimetype = 'image/gif'; } elseif($file_extension === 'png'){ $this->file_mimetype = 'image/png'; } elseif($file_extension === 'bmp'){ vmInfo(JText::sprintf('COM_VIRTUEMART_MEDIA_SHOULD_NOT_BMP',$name)); $notice = true; } //audio elseif($file_extension === 'mp3'){ $this->file_mimetype = 'audio/mpeg'; } elseif($file_extension === 'ogg'){ $this->file_mimetype = 'audio/ogg'; } elseif($file_extension === 'oga'){ $this->file_mimetype = 'audio/vorbis'; } elseif($file_extension === 'wma'){ $this->file_mimetype = 'audio-/x-ms-wma'; } //video //added missing mimetypes: m2v elseif( $file_extension === 'mp4' or $file_extension === 'mpe' or $file_extension === 'mpeg' or $file_extension === 'mpg' or $file_extension === 'mpga' or $file_extension === 'm2v'){ $this->file_mimetype = 'video/mpeg'; } elseif($file_extension === 'avi'){ $this->file_mimetype = 'video/x-msvideo'; } elseif($file_extension === 'qt' or $file_extension === 'mov'){ $this->file_mimetype = 'video/quicktime'; } elseif($file_extension === 'wmv'){ $this->file_mimetype = 'video/x-ms-wmv'; } //Added missing formats elseif($file_extension === '3gp'){ $this->file_mimetype = 'video/3gpp'; } elseif($file_extension === 'ogv'){ $this->file_mimetype = 'video/ogg'; } elseif($file_extension === 'flv'){ $this->file_mimetype = 'video/x-flv'; } elseif($file_extension === 'f4v'){ $this->file_mimetype = 'video/x-f4v'; } elseif($file_extension === 'm4v'){ $this->file_mimetype = 'video/x-m4v'; } elseif($file_extension === 'webm'){ $this->file_mimetype = 'video/webm'; } //applications elseif($file_extension === 'zip'){ $this->file_mimetype = 'application/zip'; } elseif($file_extension === 'pdf'){ $this->file_mimetype = 'application/pdf'; } elseif($file_extension === 'gz'){ $this->file_mimetype = 'application/x-gzip'; } elseif($file_extension === 'exe'){ $this->file_mimetype = 'application/octet-stream'; } elseif($file_extension === 'swf'){ $this->file_mimetype = 'application/x-shockwave-flash'; } //missing types elseif($file_extension === 'doc'){ $this->file_mimetype = 'application/msword'; } elseif($file_extension === 'docx'){ $this->file_mimetype = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'; } elseif($file_extension === 'xls'){ $this->file_mimetype = 'application/vnd.ms-excel'; } elseif($file_extension === 'xlsx'){ $this->file_mimetype = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; } elseif($file_extension === 'ppt'){ $this->file_mimetype = 'application/vnd.ms-powerpoint'; } elseif($file_extension === 'pptx'){ $this->file_mimetype = 'application/vnd.openxmlformats-officedocument.presentationml.presentation'; } elseif($file_extension === 'txt'){ $this->file_mimetype = 'text/plain'; } elseif($file_extension === 'rar'){ $this->file_mimetype = 'application/x-rar-compressed'; } else { vmInfo (JText::sprintf ('COM_VIRTUEMART_MEDIA_SHOULD_HAVE_MIMETYPE', $name)); $notice = TRUE; } //} } //Nasty small hack, should work as long the word for default is in the language longer than 3 words and the first //letter should be always / or something like this //It prevents storing of the default path $a = trim(substr($this->file_url_thumb,0,4)); $b = trim(substr(JText::_('COM_VIRTUEMART_DEFAULT_URL'),0,4)); if( strpos($a,$b)!==FALSE ){ $this->file_url_thumb = null; } if ($ok) { return parent::check (); } else { return FALSE; } } /** * We need a customised error handler to catch the errors maybe thrown by * mime_content_type * * @author Max Milbers derived from Philippe Gerber */ function handleError ($errno, $errstr) { // error was suppressed with the @-operator if (0 === error_reporting ()) { return FALSE; } throw new ErrorException($errstr, 0); //echo 'I throw exception'; //throw new ErrorException($errstr, 0, $errno, $errfile, $errline); } } // pure php no closing tag tables/vendor_medias.php000066600000002407151374526160011367 0ustar00setPrimaryKey('virtuemart_vendor_id'); $this->setSecondaryKey('virtuemart_media_id'); $this->setOrderable(); } } tables/customs.php000066600000005742151374526160010252 0ustar00setUniqueName('custom_title'); $this->setObligatoryKeys('field_type'); $this->setLoggable(); $this->setOrderable('ordering',false); } /* * field from 3 table have to be checked at delete * #__vm_custom_field,#__virtuemart_customs,#__virtuemart_product_customfields */ function delete( $id=null , $where = 0 ){ $this->_db->setQuery('DELETE X,C FROM `#__virtuemart_customs` AS C LEFT JOIN `#__virtuemart_product_customfields` AS X ON X.`virtuemart_custom_id` = C.`virtuemart_custom_id` WHERE C.`virtuemart_custom_id`=' . $id); if ($this->_db->query() === false) { vmError($this->_db->getError()); return false; } return true; } } // pure php no closing tag tables/rating_reviews.php000066600000003553151374526160011603 0ustar00setPrimaryKey('virtuemart_rating_review_id'); $this->setObligatoryKeys('comment'); $this->setLoggable(); } } // pure php no closing tag tables/configs.php000066600000002457151374526160010205 0ustar00setLoggable(); } } // pure php no closing tag tables/shoppergroups.php000066600000004230151374526160011464 0ustar00setUniqueName('shopper_group_name'); $this->setLoggable(); $this->setTableShortCut('sg'); } // /** // * Validates the shopper group record fields. // * // * @author Markus Öhler // * @return boolean True if the table buffer contains valid data, false otherwise. // */ function check(){ if (empty($this->shopper_group_name) ){ vmError(JText::_('COM_VIRTUEMART_SHOPPERGROUP_RECORDS_MUST_HAVE_NAME')); return false; } else { if(function_exists('mb_strlen') ){ if (mb_strlen($this->shopper_group_name) > 32) { vmError(JText::_('COM_VIRTUEMART_SHOPPERGROUP_NAME_LESS_THAN_32_CHARACTERS')); return false; } } else { if (strlen($this->shopper_group_name) > 32) { vmError(JText::_('COM_VIRTUEMART_SHOPPERGROUP_NAME_LESS_THAN_32_CHARACTERS')); return false; } } } return parent::check(); } } // pure php no closing tag tables/orderstates.php000066600000005233151374526160011107 0ustar00setObligatoryKeys('order_status_code'); $this->setObligatoryKeys('order_status_name'); $this->setObligatoryKeys('order_stock_handle'); $this->setLoggable(); } /** * Validates the order status record fields. * * @return boolean True if the table buffer is contains valid data, false otherwise. */ function check(){ $db = JFactory::getDBO(); $q = 'SELECT count(*),virtuemart_orderstate_id FROM `#__virtuemart_orderstates` '; $q .= 'WHERE `order_status_code`="' . $this->order_status_code . '"'; $db->setQuery($q); $row = $db->loadRow(); if(is_array($row)){ if($row[0]>0){ if($row[1] != $this->virtuemart_orderstate_id){ vmError(JText::_('COM_VIRTUEMART_ORDER_STATUS_CODE_EXISTS')); return false; } } } return parent::check(); } } //No CLosing Tag tables/calcs.php000066600000004733151374526160007641 0ustar00setUniqueName('calc_name'); $this->setObligatoryKeys('calc_kind'); $this->setLoggable(); } } // pure php no closing tag tables/products.php000066600000010762151374526160010416 0ustar00setPrimaryKey('virtuemart_product_id'); $this->setObligatoryKeys('product_name'); $this->setLoggable(); $this->setTranslatable(array('product_name','product_s_desc','product_desc','metadesc','metakey','customtitle')); $this->setSlug('product_name'); $this->setTableShortCut('p'); //We could put into the params also the product_availability and the low_stock_notification $varsToPushParam = array( 'min_order_level'=>array(null,'float'), 'max_order_level'=>array(null,'float'), 'step_order_level'=>array(null,'float'), //'product_packaging'=>array(null,'float'), 'product_box'=>array(null,'float') ); $this->setParameterable('product_params',$varsToPushParam); $this->_updateNulls = true; } } // pure php no closing tag tables/product_medias.php000066600000002457151374526160011557 0ustar00setPrimaryKey('virtuemart_product_id'); $this->setSecondaryKey('virtuemart_media_id'); $this->setOrderable('ordering',true); // $this->setOrderableFormname('mediaordering'); } } tables/countries.php000066600000003472151374526160010566 0ustar00setUniqueName('country_name'); $this->setObligatoryKeys('country_2_code'); $this->setObligatoryKeys('country_3_code'); $this->setLoggable(); $this->setOrderable('ordering',false); } } // pure php no closing tag tables/states.php000066600000003460151374526160010053 0ustar00setUniqueName('state_name'); $this->setObligatoryKeys('state_2_code'); $this->setObligatoryKeys('state_3_code'); $this->setLoggable(); } } // pure php no closing tag tables/index.html000066600000000000151374526160010017 0ustar00tables/usergroups.php000066600000003522151374526160010765 0ustar00setUniqueName('group_name'); $this->setLoggable(); } /** * Validates the userfields record fields. * * @return boolean True if the table buffer is contains valid data, false otherwise. */ function check($nrOfValues){ if (preg_match('/[^a-z0-9\._\-]/i', $this->group_name) > 0) { vmError(JText::_('COM_VIRTUEMART_PERMISSION_GROUP_NAME_INVALID_CHARACTERS')); return false; } return parent::check(); } } //No CLosing Tag tables/product_manufacturers.php000066600000002352151374526160013166 0ustar00setPrimaryKey('virtuemart_product_id'); $this->setSecondaryKey('virtuemart_manufacturer_id'); } } tables/calc_countries.php000066600000002315151374526160011543 0ustar00setPrimaryKey('virtuemart_calc_id'); $this->setSecondaryKey('virtuemart_country_id'); } } tables/category_categories.php000066600000002235151374526160012571 0ustar00setPrimaryKey('category_child_id'); $this->setOrderable(); $this->setTableShortCut('cx'); } }tables/userfields.php000066600000010520151374526160010710 0ustar00setPrimaryKey('virtuemart_userfield_id'); $this->setUniqueName('name'); $this->setObligatoryKeys('title'); $this->setLoggable(); $this->setOrderable('ordering',false); } /** * Validates the userfields record fields. * * @return boolean True if the table buffer is contains valid data, false otherwise. */ function check($nrOfValues) { if (preg_match('/[^a-z0-9\._\-]/i', $this->name) > 0) { vmError(JText::_('COM_VIRTUEMART_NAME_OF_USERFIELD_CONTAINS_INVALID_CHARACTERS')); return false; } if($this->name !='virtuemart_country_id' and $this->name !='virtuemart_state_id'){ $reqValues = array('select', 'multiselect', 'radio', 'multicheckbox'); if (in_array($this->type, $reqValues) and $nrOfValues == 0 ) { vmError(JText::_('COM_VIRTUEMART_VALUES_ARE_REQUIRED_FOR_THIS_TYPE')); return false; } } return parent::check(); } /** * Format the field type * @param $_data array array with additional data written to other tables * @return string Field type in SQL syntax */ function formatFieldType(&$_data = array()) { $_fieldType = $this->type; switch($this->type) { case 'date': $_fieldType = 'DATE'; break; case 'editorta': case 'textarea': case 'multiselect': case 'multicheckbox': $_fieldType = 'MEDIUMTEXT'; break; case 'checkbox': $_fieldType = 'TINYINT'; break; case 'age_verification': $this->params = 'minimum_age='.(int)$_data['minimum_age']."\n"; default: $_fieldType = 'VARCHAR(255)'; break; } return $_fieldType; } /** * Reimplement the store method to return the last inserted ID * * @return mixed When a new record was succesfully inserted, return the ID, otherwise the status */ public function store($updateNulls = false) { $isNew = ($this->virtuemart_userfield_id == 0); if (!parent::store($updateNulls)) { // Write data to the DB vmError($this->getError()); return false; } else { return $this->virtuemart_userfield_id; } } function checkAndDelete($table,$where = 0){ $ok = 1; $k = $this->_tbl_key; if($where!==0){ $whereKey = $where; } else { $whereKey = $this->_pkey; } $query = 'SELECT `'.$this->_tbl_key.'` FROM `'.$table.'` WHERE '.$whereKey.' = "' .$this->$k . '"'; // stAn - it should be better to add this directly to the controller of the shopper fields // only additionally, controllers are not considered as safe. if (isset($this->name)) { $umodel = VmModel::getModel('userfields'); $arr = $umodel->getCoreFields(); if (in_array($this->name, $arr)) { vmError('Cannot delete core field!'); return false; } } $this->_db->setQuery( $query ); $list = $this->_db->loadResultArray(); if($list){ foreach($list as $row){ $ok = $row; $query = 'DELETE FROM `'.$table.'` WHERE '.$this->_tbl_key.' = "'.$row.'"'; $this->_db->setQuery( $query ); if (!$this->_db->query()){ $this->setError($this->_db->getErrorMsg()); vmError('checkAndDelete '.$this->_db->getErrorMsg()); $ok = 0; } } } return $ok; } } //No CLosing Tag tables/order_histories.php000066600000003114151374526160011750 0ustar00setObligatoryKeys('virtuemart_order_id'); $this->setLoggable(); } } // pure php no closing tag tables/vmuser_shoppergroups.php000066600000002475151374526160013076 0ustar00setPrimaryKey('virtuemart_user_id'); $this->setSecondaryKey('virtuemart_shoppergroup_id'); } } tables/order_userinfos.php000066600000002215151374526160011755 0ustar00setLoggable(); } } // No closing tagtables/order_item_histories.php000066600000003303151374526160012766 0ustar00setObligatoryKeys('virtuemart_order_item_id'); $this->setLoggable(); } } // pure php no closing tag tables/calc_manufacturers.php000066600000002410151374526160012403 0ustar00 St.Kraft 2013-02-24 Herstellerrabatt * @param JDataBase $db */ function __construct(&$db){ parent::__construct('#__virtuemart_calc_manufacturers', 'id', $db); $this->setPrimaryKey('virtuemart_calc_id'); $this->setSecondaryKey('virtuemart_manufacturer_id'); } } tables/product_customfields.php000066600000003703151374526160013011 0ustar00setPrimaryKey('virtuemart_product_id'); // $this->setSecondaryKey('virtuemart_customfield_id'); $this->setLoggable(); $this->setOrderable(); } function check(){ if(!empty($this->custom_price)){ $this->custom_price = str_replace(array(',',' '),array('.',''),$this->custom_price); } else { $this->custom_price = null; } return parent::check(); } } elements/vmcategories.php000066600000005274151374526160011607 0ustar00element['key_field'] ? $this->element['key_field'] : 'value'); $val = ($this->element['value_field'] ? $this->element['value_field'] : $this->name); VmConfig::loadJLang('com_virtuemart', false); $categorylist = ShopFunctions::categoryListTree(array($this->value)); $html = '"; return $html; } function fetchElement($name, $value, &$node, $control_name) { JPlugin::loadLanguage('com_virtuemart', JPATH_ADMINISTRATOR); $categorylist = ShopFunctions::categoryListTree(array($value)); $class = ($node->attributes('class') ? 'class="' . $node->attributes('class') . '"' : ''); $html = '"; return $html; } } if (JVM_VERSION === 2 ) { class JFormFieldVmCategories extends VmElementVmCategories { } } else { class JElementVmCategories extends VmElementVmCategories { } }elements/vmmanufacturersmenu.php000066600000003435151374526160013223 0ustar00getManufacturers(true, true, false); return JHTML::_('select.genericlist', $manufacturers, $control_name . '[' . $name . ']', '', $name, 'mf_name', $value, $control_name . $name); } }elements/vmcurl.php000066600000001611151374526160010416 0ustar00_getProducts(), $control_name . '[' . $name . ']', '', 'value', 'text', $value, $control_name . $name); } private function _getProducts() { $productModel = VmModel::getModel('product'); $productModel->_noLimit = true; $products = $productModel->getProductListing(false, false, false, false, true,false); $productModel->_noLimit = false; $i = 0; $list = array(); foreach ($products as $product) { $list[$i]['value'] = $product->virtuemart_product_id; $list[$i]['text'] = $product->product_name. " (". $product->product_sku.")"; $i++; } return $list; } } elements/vmcurrencies.php000066600000004255151374526160011622 0ustar00setQuery($query); $currencies = $db->loadObjectList(); if(!class_exists('VirtueMartModelVendor')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'vendor.php'); $vendor_id = VirtueMartModelVendor::getLoggedVendor(); if (empty($value)) { $currency=VirtueMartModelVendor::getVendorCurrency ($vendor_id); $value= $currency->virtuemart_currency_id; } $class = ($node->attributes('class') ? 'class="' . $node->attributes('class') . '"' : ''); return JHTML::_('select.genericlist', $currencies, $control_name . '[' . $name . '][]', $class, 'value', 'text', $value, $control_name . $name); } }elements/vmweightunit.php000066600000002771151374526160011650 0ustar00attributes('class') ? 'class="' . $node->attributes('class') . '"' : ''); return ShopFunctions::renderWeightUnitList( $control_name . '[' . $name . ']', $value); } }elements/vmjpluginwarning.php000066600000002443151374526160012513 0ustar00load('com_virtuemart',JPATH_ADMINISTRATOR); $option = JRequest::getWord('option'); if ($option == 'com_virtuemart') return null; else return JText::_('COM_VIRTUEMART_PLUGIN_WARNING'); } }elements/vmorderstate.php000066600000003226151374526160011631 0ustar00attributes('class') ? 'class="' . $node->attributes('class') . '"' : ''); $db = JFactory::getDBO (); $query = 'SELECT `order_status_code` AS value, `order_status_name` AS text FROM `#__virtuemart_orderstates` WHERE `virtuemart_vendor_id` = 1 ORDER BY `ordering` ASC '; $db->setQuery ($query); $fields = $db->loadObjectList (); foreach ($fields as $field) { $field->text= JText::_ ($field->text); } return JHTML::_ ('select.genericlist', $fields, $control_name . '[' . $name . ']', $class, 'value', 'text', $value, $control_name . $name); } }elements/vmelements.php000066600000002171151374526160011267 0ustar00load ('com_virtuemart', JPATH_ADMINISTRATOR); // path to images directory $folder = $node->attributes ('directory'); $rel_path = str_replace ('/', DS, $folder); $path = JPATH_ROOT . DS . $rel_path; $filter = $node->attributes ('filter'); $exclude = array($node->attributes ('exclude'), '.svn', 'CVS', '.DS_Store', '__MACOSX', 'index.html'); $pattern = implode ( "|", $exclude); $stripExt = $node->attributes ('stripext'); if (!JFolder::exists ($path)) { return JText::sprintf ('COM_VIRTUEMART_FOLDER_NOT_EXIST', $node->attributes ('directory')); } $files = JFolder::files ($path, $filter, FALSE, FALSE, $exclude); $options = array(); if (!$node->attributes ('hide_none')) { $options[] = JHTML::_ ('select.option', '-1', '- ' . JText::_ ('Do not use') . ' -'); } if (!$node->attributes ('hide_default')) { $options[] = JHTML::_ ('select.option', '', '- ' . JText::_ ('Use default') . ' -'); } if (is_array ($files)) { foreach ($files as $file) { if ($exclude) { if (preg_match (chr (1) . $pattern . chr (1), $file)) { continue; } } if ($stripExt) { $file = JFile::stripExt ($file); } $options[] = JHTML::_ ('select.option', $file, $file); } } $class = ($node->attributes('class') ? 'class="' . $node->attributes('class') . '"' : ''); $class .= ' multiple="true" size="5" data-placeholder="'.JText::_('COM_VIRTUEMART_DRDOWN_SELECT_SOME_OPTIONS').'"'; return JHTML::_ ('select.genericlist', $options, '' . $control_name . '[' . $name . '][]', $class, 'value', 'text', $value, $control_name . $name); } } }elements/vmtaxes.php000066600000003272151374526160010602 0ustar00attributes('class') ? 'class="' . $node->attributes('class') . '"' : ''); return ShopFunctions::renderTaxList($value, $control_name . '[' . $name . ']', $class); // $class = 'multiple="true" size="10"'; // return JHTML::_('select.genericlist', $taxrates, $control_name . '[' . $name . '][]', $class, 'value', 'text', $value, $control_name . $name); } }elements/vmrules.php000066600000023345151374526160010613 0ustar00element['section'] ? (string) $this->element['section'] : ''; $component = $this->element['component'] ? (string) $this->element['component'] : ''; $assetField = $this->element['asset_field'] ? (string) $this->element['asset_field'] : 'asset_id'; // Get the actions for the asset. $actions = JAccess::getActions($component, $section); // Iterate over the children and add to the actions. foreach ($this->element->children() as $el) { if ($el->getName() == 'action') { $actions[] = (object) array('name' => (string) $el['name'], 'title' => (string) $el['title'], 'description' => (string) $el['description']); } } // Get the explicit rules for this asset. $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select($db->quoteName('id')); $query->from($db->quoteName('#__assets')); $query->where($db->quoteName('name') . ' = ' . $db->quote($component)); $db->setQuery($query); $assetId = (int) $db->loadResult(); if ($error = $db->getErrorMsg()) { JError::raiseNotice(500, $error); } // Full width format. // Get the rules for just this asset (non-recursive). $assetRules = JAccess::getAssetRules($assetId); // Get the available user groups. $groups = $this->getUserGroups(); // Build the form control. $curLevel = 0; // Prepare output $html = array(); $html[] = '
            '; $html[] = '
            '; $html[] = '

            ' . JText::_('JLIB_RULES_SETTINGS_DESC') . '

            '; $html[] = '
              '; // Start a row for each user group. foreach ($groups as $group) { $difLevel = $group->level - $curLevel; if ($difLevel > 0) { $html[] = '
              • '; } elseif ($difLevel < 0) { $html[] = str_repeat('
            • ', -$difLevel); } $html[] = '
            • '; $html[] = '
              '; $html[] = '

              '; $html[] = str_repeat('|– ', $curLevel = $group->level) . $group->text; $html[] = '

              '; $html[] = '
              '; $html[] = '
              '; $html[] = ''; $html[] = ''; $html[] = ''; $html[] = ''; $html[] = ''; // The calculated setting is not shown for the root group of global configuration. $canCalculateSettings = ($group->parent_id || !empty($component)); if ($canCalculateSettings) { $html[] = ''; } $html[] = ''; $html[] = ''; $html[] = ''; foreach ($actions as $action) { $html[] = ''; $html[] = ''; $html[] = ''; // Build the Calculated Settings column. // The inherited settings column is not displayed for the root group in global configuration. if ($canCalculateSettings) { $html[] = ''; } $html[] = ''; } $html[] = ''; $html[] = '
              '; $html[] = '' . JText::_('JLIB_RULES_ACTION') . ''; $html[] = ''; $html[] = '' . JText::_('JLIB_RULES_SELECT_SETTING') . ''; $html[] = ''; $html[] = '' . JText::_('JLIB_RULES_CALCULATED_SETTING') . ''; $html[] = '
              '; $html[] = ''; $html[] = ''; //$html[] = $this->formControl.'-'.$this->fieldname; $this->name = $this->formControl.'[rules]'; $html[] = '  '; // If this asset's rule is allowed, but the inherited rule is deny, we have a conflict. if (($assetRule === true) && ($inheritedRule === false)) { $html[] = JText::_('JLIB_RULES_CONFLICT'); } $html[] = ''; // This is where we show the current effective settings considering currrent group, path and cascade. // Check whether this is a component or global. Change the text slightly. if (JAccess::checkGroup($group->value, 'core.admin', $assetId) !== true) { if ($inheritedRule === null) { $html[] = '' . JText::_('JLIB_RULES_NOT_ALLOWED') . ''; } elseif ($inheritedRule === true) { $html[] = '' . JText::_('JLIB_RULES_ALLOWED') . ''; } elseif ($inheritedRule === false) { if ($assetRule === false) { $html[] = '' . JText::_('JLIB_RULES_NOT_ALLOWED') . ''; } else { $html[] = '' . JText::_('JLIB_RULES_NOT_ALLOWED_LOCKED') . ''; } } } elseif (!empty($component)) { $html[] = '' . JText::_('JLIB_RULES_ALLOWED_ADMIN') . ''; } else { // Special handling for groups that have global admin because they can't be denied. // The admin rights can be changed. if ($action->name === 'core.admin') { $html[] = '' . JText::_('JLIB_RULES_ALLOWED') . ''; } elseif ($inheritedRule === false) { // Other actions cannot be changed. $html[] = '' . JText::_('JLIB_RULES_NOT_ALLOWED_ADMIN_CONFLICT') . ''; } else { $html[] = '' . JText::_('JLIB_RULES_ALLOWED_ADMIN') . ''; } } $html[] = '
              '; $html[] = '
              '; $html[] = '
            • '; } $html[] = str_repeat('
            ', $curLevel); $html[] = '
        '; if ($section == 'component' || $section == null) { $html[] = JText::_('JLIB_RULES_SETTING_NOTES'); } else { $html[] = JText::_('JLIB_RULES_SETTING_NOTES_ITEM'); } $html[] = '
        '; $js = "window.addEvent('domready', function(){ new Fx.Accordion($$('div#permissions-sliders-".$section." div#permissions-sliders.pane-sliders .panel h3.pane-toggler')," . "$$('div#permissions-sliders-".$section." div#permissions-sliders.pane-sliders .panel div.pane-slider'), {onActive: function(toggler, i) {toggler.addClass('pane-toggler-down');" . "toggler.removeClass('pane-toggler');i.addClass('pane-down');i.removeClass('pane-hide');Cookie.write('jpanesliders_permissions-sliders-".$section . $component . "',$$('div#permissions-sliders-".$section." div#permissions-sliders.pane-sliders .panel h3').indexOf(toggler));}," . "onBackground: function(toggler, i) {toggler.addClass('pane-toggler');toggler.removeClass('pane-toggler-down');i.addClass('pane-hide');" . "i.removeClass('pane-down');}, duration: 300, display: " . JRequest::getInt('jpanesliders_permissions-sliders' . $component, 0, 'cookie') . ", show: " . JRequest::getInt('jpanesliders_permissions-sliders' . $component, 0, 'cookie') . ", alwaysHide:true, opacity: false}); });"; JFactory::getDocument()->addScriptDeclaration($js); return implode("\n", $html); } } elements/vmfile.php000066600000004746151374526160010404 0ustar00load ('com_virtuemart', JPATH_ADMINISTRATOR); // path to images directory $folder = $node->attributes ('directory'); $rel_path = str_replace ('/', DS, $folder); $path = JPATH_ROOT . DS . $rel_path; $filter = $node->attributes ('filter'); $exclude = array($node->attributes ('exclude'), '.svn', 'CVS', '.DS_Store', '__MACOSX', 'index.html'); $pattern = implode ( "|", $exclude); $stripExt = $node->attributes ('stripext'); if (!JFolder::exists ($path)) { return JText::sprintf ('COM_VIRTUEMART_FOLDER_NOT_EXIST', $node->attributes ('directory')); } $files = JFolder::files ($path, $filter, FALSE, FALSE, $exclude); $options = array(); if (!$node->attributes ('hide_none')) { $options[] = JHTML::_ ('select.option', '-1', '- ' . JText::_ ('Do not use') . ' -'); } if (!$node->attributes ('hide_default')) { $options[] = JHTML::_ ('select.option', '', '- ' . JText::_ ('Use default') . ' -'); } if (is_array ($files)) { foreach ($files as $file) { if ($exclude) { if (preg_match (chr (1) . $pattern . chr (1), $file)) { continue; } } if ($stripExt) { $file = JFile::stripExt ($file); } $options[] = JHTML::_ ('select.option', $file, $file); } } $class = ($node->attributes('class') ? 'class="' . $node->attributes('class') . '"' : ''); $class .= ' size="5" data-placeholder="'.JText::_('COM_VIRTUEMART_DRDOWN_SELECT_SOME_OPTIONS').'"'; return JHTML::_ ('select.genericlist', $options, '' . $control_name . '[' . $name . '][]', $class, 'value', 'text', $value, $control_name . $name); } }elements/vmtitle.php000066600000003043151374526160010573 0ustar00attributes('class') ? 'class="' . $node->attributes('class') . '"' : ''); if (empty($class)) { $class.="style=\"margin: 10px 0 5px 0; font-weight: bold; padding: 5px; background-color: #cacaca; float:none; clear:both;\""; } $description = ($node->attributes('description') ? JText::_($node->attributes('description')) : ''); $html = ''; if ($value) { $html .= '
        '; $html .= JText::_($value); $html .= '
        '; if ($description){ $html .= $description.'
        '; } } else { $html .= '
        '.$description.'
        '; } return $html; } }elements/vmvendormenu.php000066600000003117151374526160011636 0ustar00getVendors(true, true, false); return JHTML::_('select.genericlist', $vendors, $control_name . '[' . $name . ']', '', $name, 'vendor_name', $value, $control_name . $name); } } elements/vmfiles.php000066600000004770151374526160010564 0ustar00load ('com_virtuemart', JPATH_ADMINISTRATOR); // path to images directory $folder = $node->attributes ('directory'); $rel_path = str_replace ('/', DS, $folder); $path = JPATH_ROOT . DS . $rel_path; $filter = $node->attributes ('filter'); $exclude = array($node->attributes ('exclude'), '.svn', 'CVS', '.DS_Store', '__MACOSX', 'index.html'); $pattern = implode ( "|", $exclude); $stripExt = $node->attributes ('stripext'); if (!JFolder::exists ($path)) { return JText::sprintf ('COM_VIRTUEMART_FOLDER_NOT_EXIST', $node->attributes ('directory')); } $files = JFolder::files ($path, $filter, FALSE, FALSE, $exclude); $options = array(); if (!$node->attributes ('hide_none')) { $options[] = JHTML::_ ('select.option', '-1', '- ' . JText::_ ('Do not use') . ' -'); } if (!$node->attributes ('hide_default')) { $options[] = JHTML::_ ('select.option', '', '- ' . JText::_ ('Use default') . ' -'); } if (is_array ($files)) { foreach ($files as $file) { if ($exclude) { if (preg_match (chr (1) . $pattern . chr (1), $file)) { continue; } } if ($stripExt) { $file = JFile::stripExt ($file); } $options[] = JHTML::_ ('select.option', $file, $file); } } $class = ($node->attributes('class') ? 'class="' . $node->attributes('class') . '"' : ''); $class .= ' multiple="true" size="5" data-placeholder="'.JText::_('COM_VIRTUEMART_DRDOWN_SELECT_SOME_OPTIONS').'"'; return JHTML::_ ('select.genericlist', $options, '' . $control_name . '[' . $name . '][]', $class, 'value', 'text', $value, $control_name . $name); } }elements/vmacceptedcurrency.php000066600000005365151374526160013006 0ustar00setQuery($q); $vendor_currency = $db->loadAssoc(); if (!$vendor_currency['vendor_accepted_currencies']) { $vendor_currency['vendor_accepted_currencies'] = $vendor_currency['vendor_currency']; } $q = 'SELECT `virtuemart_currency_id` AS value ,CONCAT_WS(" ",`currency_name`,`currency_symbol`) as text FROM `#__virtuemart_currencies` WHERE `virtuemart_currency_id` IN (' . $vendor_currency['vendor_accepted_currencies'] . ') and (`virtuemart_vendor_id` = "' . $vendorId . '" OR `shared`="1") AND published = "1" ORDER BY `ordering`,`currency_name`'; $db->setQuery($q); $currencies = $db->loadObjectList(); $options = array(); $options[] = array( 'value' => 0 ,'text' =>JText::_('COM_VIRTUEMART_DEFAULT_VENDOR_CURRENCY')); if (!is_array($currencies)) { $currencies=(array)$currencies; } foreach ($currencies as $currency){ $options[] = array( 'value' => $currency->value ,'text' =>$currency->text); } $class = ($node->attributes('class') ? 'class="' . $node->attributes('class') . '"' : ''); return JHTML::_('select.genericlist', $options, $control_name . '[' . $name . ']', $class, 'value', 'text', $value, $control_name . $name); } }elements/index.html000066600000000000151374526160010361 0ustar00elements/vmcountries.php000066600000003162151374526160011467 0ustar00setQuery($query); $fields = $db->loadObjectList(); $class = ($node->attributes('class') ? 'class="' . $node->attributes('class') . '"' : ''); $class = 'multiple="true" size="10" '; return JHTML::_('select.genericlist', $fields, $control_name . '[' . $name . '][]', $class, 'value', 'text', $value, $control_name . $name); } }elements/vmcategoriesmenu.php000066600000003343151374526160012467 0ustar00'; $html .= ''; $html .= $categorylist; $html .=""; return $html; } } elements/.htaccess000066600000000177151374526160010201 0ustar00 Order allow,deny Deny from all models/config.php000066600000042040151374526160010023 0ustar00getTemplate();vmdebug('template',$tplpath); if (JVM_VERSION === 2) { $q = 'SELECT `template` FROM `#__template_styles` WHERE `client_id` ="0" AND `home`="1" '; } else { $q = 'SELECT `template` FROM `#__templates_menu` WHERE `client_id` ="0" '; } $db = JFactory::getDBO(); $db->setQuery($q); $tplnames = $db->loadResult(); if($tplnames){ if(is_dir(JPATH_ROOT.DS.'templates'.DS.$tplnames.DS.'html'.DS.'com_virtuemart'.DS.$view)){ $dirs[] = JPATH_ROOT.DS.'templates'.DS.$tplnames.DS.'html'.DS.'com_virtuemart'.DS.$view; } } $result = array(); $emptyOption = JHTML::_('select.option', '0', JText::_('COM_VIRTUEMART_ADMIN_CFG_NO_OVERRIDE')); $result[] = $emptyOption; $alreadyAddedFile = array(); foreach($dirs as $dir){ if ($handle = opendir($dir)) { while (false !== ($file = readdir($handle))) { if(!empty($file) and strpos($file,'.')!==0 and strpos($file,'_')==0 and $file != 'index.html' and !is_Dir($file)){ //Handling directly for extension is much cleaner $path_info = pathinfo($file); if(empty($path_info['extension'])){ vmError('Attention file '.$file.' has no extension in view '.$view.' and directory '.$dir); $path_info['extension'] = ''; } if ($path_info['extension'] == 'php' && !in_array($file,$alreadyAddedFile)) { $alreadyAddedFile[] = $file; //There is nothing to translate here // $result[] = JHTML::_('select.option', $file, $path_info['filename']); $result[] = JHTML::_('select.option', $path_info['filename'], $path_info['filename']); } } } } } return $result; } /** * Retrieve a list of available fonts to be used with PDF Invoice generation & PDF Product view on FE * * @author Nikos Zagas * @return object List of available fonts */ function getTCPDFFontsList() { $dir = JPATH_ROOT.DS.'libraries'.DS.'tcpdf'.DS.'fonts'; $result = array(); if(function_exists('glob')){ $specfiles = glob($dir.DS."*_specs.xml"); } else { $specfiles = array(); $manual = array('courier_specs.xml','freemono_specs.xml','helvetica_specs.xml'); foreach($manual as $file){ if(file_exists($dir.DS.$file)){ $specfiles[] = $dir.DS.$file; } } } foreach ($specfiles as $file) { $fontxml = @simpleXML_load_file($file); if ($fontxml) { if (file_exists($dir . DS . $fontxml->filename . '.php')) { $result[] = JHTML::_('select.option', $fontxml->filename, JText::_($fontxml->fontname.' ('.$fontxml->fonttype.')')); } else { vmError ('A font master file is missing: ' . $dir . DS . $fontxml->filename . '.php'); } } else { vmError ('Wrong structure in font XML file: '. $dir . DS . $file); } } return $result; } /** * Retrieve a list of possible images to be used for the 'no image' image. * * @author RickG * @author Max Milbers * @return object List of image objects */ function getNoImageList() { //TODO set config value here $dirs[] = JPATH_ROOT.DS.'components'.DS.'com_virtuemart'.DS.'assets'.DS.'images'.DS.'vmgeneral'; $tplpath = VmConfig::get('vmtemplate',0); if(!empty($tplpath) and is_numeric($tplpath)){ $db = JFactory::getDbo(); $query = 'SELECT `template`,`params` FROM `#__template_styles` WHERE `id`="'.$tplpath.'" '; $db->setQuery($query); $res = $db->loadAssoc(); if($res){ $registry = new JRegistry; $registry->loadString($res['params']); $tplpath = $res['template']; } } if($tplpath){ if(is_dir(JPATH_ROOT.DS.'templates'.DS.$tplpath.DS.'images'.DS.'vmgeneral')){ $dirs[] = JPATH_ROOT.DS.'templates'.DS.$tplpath.DS.'images'.DS.'vmgeneral'; } } $result = ''; foreach($dirs as $dir){ if ($handle = opendir($dir)) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != ".." && $file != '.svn' && $file != 'index.html') { if (filetype($dir.DS.$file) != 'dir') { $result[] = JHTML::_('select.option', $file, JText::_(str_replace('.php', '', $file))); } } } } } return $result; } /** * Retrieve a list of currency converter modules from the plugins directory. * * @author RickG * @return object List of theme objects */ function getCurrencyConverterList() { $dir = JPATH_VM_ADMINISTRATOR.DS.'plugins'.DS.'currency_converter'; $result = ''; if ($handle = opendir($dir)) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != ".." && $file != '.svn') { $info = pathinfo($file); if ((filetype($dir.DS.$file) == 'file') && ($info['extension'] == 'php')) { $result[] = JHTML::_('select.option', $file, JText::_($file)); } } } } return $result; } /** * Retrieve a list of modules. * * @author RickG * @return object List of module objects */ function getModuleList() { $db = JFactory::getDBO(); $query = 'SELECT `module_id`, `module_name` FROM `#__virtuemart_modules` '; $query .= 'ORDER BY `module_id`'; $db->setQuery($query); return $db->loadObjectList(); } /** * Retrieve a list of Joomla content items. * * @author RickG * @return object List of content objects */ function getContentLinks() { $db = JFactory::getDBO(); $query = 'SELECT `id`, CONCAT(`title`, " (", `title_alias`, ")") AS text FROM `#__content` '; $query .= 'ORDER BY `id`'; $db->setQuery($query); return $db->loadObjectList(); } /* * Get the joomla list of languages */ function getActiveLanguages($active_languages) { $activeLangs = array() ; $language =JFactory::getLanguage(); $jLangs = $language->getKnownLanguages(JPATH_BASE); foreach ($jLangs as $jLang) { $jlangTag = strtolower(strtr($jLang['tag'],'-','_')); $activeLangs[] = JHTML::_('select.option', $jLang['tag'] , $jLang['name']) ; } return JHTML::_('select.genericlist', $activeLangs, 'active_languages[]', 'size=10 multiple="multiple" data-placeholder="'.JText::_('COM_VIRTUEMART_DRDOWN_NOTMULTILINGUAL').'"', 'value', 'text', $active_languages );// $activeLangs; } /** * Retrieve a list of preselected and existing search or order By Fields * $type = 'browse_search_fields' or 'browse_orderby_fields' * @author Kohl Patrick * @return array of order list */ function getProductFilterFields( $type ) { $searchChecked = VmConfig::get($type) ; if (!is_array($searchChecked)) { $searchChecked = (array)$searchChecked; } if($type!='browse_cat_orderby_field'){ $searchFieldsArray = ShopFunctions::getValidProductFilterArray (); if($type=='browse_search_fields'){ if($key = array_search('pc.ordering',$searchFieldsArray)){ unset($searchFieldsArray[$key]); } } } else { $searchFieldsArray = array('category_name','category_description','cx.ordering','c.published'); } $searchFields= new stdClass(); $searchFields->checkbox ='
          '; foreach ($searchFieldsArray as $key => $field ) { if (in_array($field, $searchChecked) ) { $checked = 'checked="checked"'; } else { $checked = ''; } $fieldWithoutPrefix = $field; $dotps = strrpos($fieldWithoutPrefix, '.'); if($dotps!==false){ $prefix = substr($field, 0,$dotps+1); $fieldWithoutPrefix = substr($field, $dotps+1); } $text = JText::_('COM_VIRTUEMART_'.strtoupper($fieldWithoutPrefix)) ; if ($type == 'browse_orderby_fields' or $type == 'browse_cat_orderby_field'){ $searchFields->select[] = JHTML::_('select.option', $field, $text) ; } $searchFields->checkbox .= '
        • '; } $searchFields->checkbox .='
        '; return $searchFields; } /** * Save the configuration record * * @author Max Milbers * @return boolean True is successful, false otherwise */ function store(&$data,$replace = FALSE) { vRequest::vmCheckToken(); //$data['active_languages'] = strtolower(strtr($data['active_languages'],'-','_')); //ATM we want to ensure that only one config is used $config = VmConfig::loadConfig(TRUE); if(!self::checkConfigTableExists()){ VmConfig::installVMconfig(false); } $browse_cat_orderby_field = $config->get('browse_cat_orderby_field'); $cat_brws_orderby_dir = $config->get('cat_brws_orderby_dir'); $config->setParams($data,$replace); $confData = array(); $query = 'SELECT * FROM `#__virtuemart_configs`'; $this->_db->setQuery($query); if($this->_db->loadResult()){ $confData['virtuemart_config_id'] = 1; } else { $confData['virtuemart_config_id'] = 0; } $urls = array('assets_general_path','media_category_path','media_product_path','media_manufacturer_path','media_vendor_path'); foreach($urls as $urlkey){ $url = trim($config->get($urlkey)); $length = strlen($url); if(strrpos($url,'/')!=($length-1)){ $config->set($urlkey,$url.'/'); vmInfo('Corrected media url '.$urlkey.' added missing /'); } } //If empty it is not sent by the form, other forms do it by using a table to store, //the config is like a big xparams and so we check some values for this form manually /*$toSetEmpty = array('active_languages','inv_os','email_os_v','email_os_s'); foreach($toSetEmpty as $item){ if(!isset($data[$item])) { $config->set($item,array()); } }*/ $checkCSVInput = array('pagseq','pagseq_1','pagseq_2','pagseq_3','pagseq_4','pagseq_5'); foreach($checkCSVInput as $csValueKey){ $csValue = $config->get($csValueKey); if(!empty($csValue)){ $sequenceArray = explode(',', $csValue); foreach($sequenceArray as &$csV){ $csV = (int)trim($csV); } $csValue = implode(',',$sequenceArray); $config->set($csValueKey,$csValue); } } $safePath = trim($config->get('forSale_path')); if(!empty($safePath)){ if(DS!='/' and strpos($safePath,'/')!==false){ $safePath=str_replace('/',DS,$safePath); vmInfo('Corrected safe path, replaced / by '.DS); vmdebug('$safePath',$safePath); } $length = strlen($safePath); if(strrpos($safePath,DS)!=($length-1)){ $safePath = $safePath.DS; vmInfo('Corrected safe path, added missing '.DS); } $config->set('forSale_path',$safePath); } else { $safePath = JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart'.DS.'vmfiles'; $exists = JFolder::exists($safePath); if(!$exists){ $created = JFolder::create($safePath); $safePath = $safePath.DS; if($created){ vmInfo('COM_VIRTUEMART_SAFE_PATH_DEFAULT_CREATED',$safePath); /* create htaccess file */ $fileData = "order deny, allow\ndeny from all\nallow from none"; JLoader::import('joomla.filesystem.file'); $fileName = $safePath.DS.'.htaccess'; $result = JFile::write($fileName, $fileData); if (!$result) { VmWarn('COM_VIRTUEMART_HTACCESS_DEFAULT_NOT_CREATED',$safePath,$fileData); } $config->set('forSale_path',$safePath); } else { VmWarn('COM_VIRTUEMART_WARN_SAFE_PATH_NO_INVOICE',JText::_('COM_VIRTUEMART_ADMIN_CFG_MEDIA_FORSALE_PATH')); } } } if(!class_exists('shopfunctions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'shopfunctions.php'); $safePath = shopFunctions::checkSafePath($safePath); if(!empty($safePath)){ $exists = JFolder::exists($safePath.'invoices'); if(!$exists){ $created = JFolder::create($safePath.'invoices'); if($created){ vmInfo('COM_VIRTUEMART_SAFE_PATH_INVOICE_CREATED'); } else { VmWarn('COM_VIRTUEMART_WARN_SAFE_PATH_NO_INVOICE',JText::_('COM_VIRTUEMART_ADMIN_CFG_MEDIA_FORSALE_PATH')); } } } if(!$config->get('active_languages',false)){ $confData['active_languages'] = array(VmConfig::$langTag); } $confData['config'] = $config->toString(); $confTable = $this->getTable('configs'); if (!$confTable->bindChecknStore($confData)) { vmError($confTable->getError()); } // Load the newly saved values into the session. $config = VmConfig::loadConfig(true); if(!class_exists('GenericTableUpdater')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'tableupdater.php'); $updater = new GenericTableUpdater(); $result = $updater->createLanguageTables(); /* This conditions is not enough, if the language changes we need to recall the cache. $newbrowse_cat_orderby_field = $config->get('browse_cat_orderby_field'); $newcat_brws_orderby_dir = $config->get('cat_brws_orderby_dir'); if($browse_cat_orderby_field!=$newbrowse_cat_orderby_field or $newcat_brws_orderby_dir!=$cat_brws_orderby_dir){ $cache = JFactory::getCache('com_virtuemart_cats','callback'); $cache->clean(); }*/ $cache = JFactory::getCache('com_virtuemart_cats','callback'); $cache->clean(); $cache = JFactory::getCache('com_virtuemart_rss','callback'); $cache->clean(); $cache = JFactory::getCache('convertECB','callback'); $cache->clean(); $cache = JFactory::getCache('_virtuemart'); $cache->clean(); $cache = JFactory::getCache('com_plugins'); $cache->clean(); $cache = JFactory::getCache('_system'); $cache->clean(); $cache = JFactory::getCache('page'); $cache->clean(); return true; } public static function checkConfigTableExists(){ $db = JFactory::getDBO(); $query = 'SHOW TABLES LIKE "'.$db->getPrefix().'virtuemart_configs"'; $db->setQuery($query); $configTable = $db->loadResult(); $err = $db->getErrorMsg(); if(!empty($err) or !$configTable){ return false; } else { return true; } } static public function checkVirtuemartInstalled(){ $db = JFactory::getDBO(); $query = 'SHOW TABLES LIKE "'.$db->getPrefix().'virtuemart%"'; $db->setQuery($query); $vmTables = $db->loadColumn(); $err = $db->getErrorMsg(); if(!empty($err) or !$vmTables or count($vmTables)<2){ return false; } else { return true; } } /** * Dangerous tools get disabled after execution an operation which needed that rights. * This is the function actually doing it. * * @author Max Milbers */ function setDangerousToolsOff(){ if(self::checkConfigTableExists()){ $dangerousTools = VmConfig::readConfigFile(true); if( $dangerousTools){ $uri = JFactory::getURI(); $link = $uri->root() . 'administrator/index.php?option=com_virtuemart&view=config'; $lang = JText::sprintf('COM_VIRTUEMART_SYSTEM_DANGEROUS_TOOL_STILL_ENABLED',JText::_('COM_VIRTUEMART_ADMIN_CFG_DANGEROUS_TOOLS'),$link); VmInfo($lang); } else { $data['dangeroustools'] = 0; $data['virtuemart_config_id'] = 1; $this->store($data); } } } public function remove() { $table = $this->getTable('configs'); $id = 1; if (!$table->delete($id)) { vmError(get_class( $this ).'::remove '.$id.' '.$table->getError(),'Cannot delete config'); return false; } return true; } /** * This function deletes a config stored in the database * * @author Max Milbers */ function deleteConfig(){ if($this->remove()){ return VmConfig::loadConfig(true,true); } else { return false; } } } //pure php no closing tagmodels/userfields.php000066600000126177151374526160010741 0ustar00fieldname with formfields that are saved as parameters */ var $reqParam; // stAn, this variable is a cached result of getUserFields // where array key is $cache_hash = md5($sec.serialize($_switches).serialize($_skip).$this->_selectedOrdering.$this->_selectedOrderingDir); static $_cache_ordered; // this variable is a cached result of named fields of last call of getUserFields where the key is $_sec of the function ('registration', 'account', 'shipping'.. etc...) // example $_cached_named['registration']['email'] static $_cache_named; // *** code for htmlpurifier *** // var $htmlpurifier = ''; /** * constructs a VmModel * setMainTable defines the maintable of the model * @author Max Milbers */ function __construct() { parent::__construct('virtuemart_userfield_id'); $this->setMainTable('userfields'); $this->setToggleName('required'); $this->setToggleName('registration'); $this->setToggleName('shipment'); $this->setToggleName('account'); // Instantiate the Helper class $this->_params = new ParamHelper(); self::$_cache_ordered = null; self::$_cache_named = array(); // Form fields that must be translated to parameters $this->reqParam = array ( 'age_verification' => 'minimum_age' ,'euvatid' => 'virtuemart_shoppergroup_id' ,'webaddress' => 'webaddresstype' ); $this->_selectedOrdering = 'ordering'; $this->_selectedOrderingDir = 'ASC'; } /** * Prepare a user field for database update */ public function prepareFieldDataSave($field, &$data) { // $post = JRequest::get('post'); $fieldType = $field->type; $fieldName = $field->name; $value = $data[$field->name]; $params = $field->params; if(!class_exists('vmFilter'))require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'vmfilter.php'); switch(strtolower($fieldType)) { case 'webaddress': if (isset($post[$fieldName."Text"]) && ($post[$fieldName."Text"])) { $oValuesArr = array(); $oValuesArr[0] = str_replace(array('mailto:','http://','https://'),'', $value); $oValuesArr[1] = str_replace(array('mailto:','http://','https://'),'', $post[$fieldName."Text"]); $value = implode("|*|",$oValuesArr); } else { if ($value = vmFilter::urlcheck($value) ) $value = str_replace(array('mailto:','http://','https://'),'', $value); } break; case 'email': case 'emailaddress': //vmdebug('emailaddress before filter',$value); $value = vmFilter::mail( $value ); //$value = str_replace('mailto:','', $value); //$value = str_replace(array('\'','"',',','%','*','/','\\','?','^','`','{','}','|','~'),array(''),$value); //vmdebug('emailaddress after filter',$value); break; // case 'phone': // $value = vmFilter::phone( $value ); // break; case 'multiselect': case 'multicheckbox': case 'select': if (is_array($value)) $value = implode("|*|",$value); break; case 'age_verification': $value = JRequest::getInt('birthday_selector_year') .'-'.JRequest::getInt('birthday_selector_month') .'-'.JRequest::getInt('birthday_selector_day'); break; case 'textarea': $value = JRequest::getVar($fieldName, '', 'post', 'string' ,JREQUEST_ALLOWRAW); $value = vmFilter::hl( $value,'text' ); break; case 'editorta': $value = JRequest::getVar($fieldName, '', 'post', 'string' ,JREQUEST_ALLOWRAW); $value = vmFilter::hl( $value,'no_js_flash' ); break; default: // //*** code for htmlpurifier *** // //SEE http://htmlpurifier.org/ // // must only add all htmlpurifier in library/htmlpurifier/ // if (!$this->htmlpurifier) { // require(JPATH_VM_ADMINISTRATOR.DS.'library'.DS.'htmlpurifier'.DS.'HTMLPurifier.auto.php'); // $config = HTMLPurifier_Config::createDefault(); // $this->htmlpurifier = new HTMLPurifier($config); // } // $value = $this->htmlpurifier->purify($value); // vmdebug( "purified filter" , $value); //$config->set('URI.HostBlacklist', array('google.com'));// set eg .add google.com in black list if (strpos($fieldType,'plugin')!==false){ JPluginHelper::importPlugin('vmuserfield'); $dispatcher = JDispatcher::getInstance(); // vmdebug('params',$params); $dispatcher->trigger('plgVmPrepareUserfieldDataSave',array($fieldType, $fieldName, &$data, &$value, $params) ); return $value; } // no HTML TAGS but permit all alphabet $value = vmFilter::hl( $value,array('deny_attribute'=>'*')); $value = preg_replace('@<[\/\!]*?[^<>]*?>@si','',$value);//remove all html tags $value = (string)preg_replace('#on[a-z](.+?)\)#si','',$value);//replace start of script onclick() onload()... $value = trim(str_replace('"', ' ', $value),"'") ; $value = (string)preg_replace('#^\'#si','',$value);//replace ' at start break; } return $value; } /** * Retrieve the detail record for the current $id if the data has not already been loaded. */ function getUserfield($id = 0,$name = 0) { if($id === 0){ $id = $this->_id; } if (empty($this->_data)) { $this->_data = $this->getTable('userfields'); if($name !==0){ $this->_data->load($id, $name); } $this->_data->load($id); } if(strpos($this->_data->type,'plugin')!==false){ JPluginHelper::importPlugin('vmuserfield'); $dispatcher = JDispatcher::getInstance(); $plgName = substr($this->_data->type,6); $type = 'userfield'; $retValue = $dispatcher->trigger('plgVmDeclarePluginParamsUserfield',array($type,$plgName,$this->_data->userfield_jplugin_id,&$this->_data)); // vmdebug('pluginGet',$type,$plgName,$this->_id,$this->_data); } // Parse the parameters, if any else $this->_params->parseParam($this->_data->params); return $this->_data; } /** * Retrieve the value records for the current $id if available for the current type * * Updated by stAn to get userfieldvalues per specific id regardless on this->_id * * @return array List wil values, or an empty array if none exist */ function getUserfieldValues($id=null) { if (empty($id)) $id = $this->_id; $this->_data = $this->getTable('userfield_values'); if ($id > 0) { $query = 'SELECT * FROM `#__virtuemart_userfield_values` WHERE `virtuemart_userfield_id` = ' . (int)$id . ' ORDER BY `ordering`'; $_userFieldValues = $this->_getList($query); return $_userFieldValues; } else { return array(); } } static function getCoreFields(){ return array( 'name','username', 'email', 'password', 'password2' , 'agreed','language'); } /** * Bind the post data to the userfields table and save it * * @return boolean True is the save was successful, false otherwise. */ function store(&$data){ $field = $this->getTable('userfields'); $userinfo = $this->getTable('userinfos'); $orderinfo = $this->getTable('order_userinfos'); $isNew = ($data['virtuemart_userfield_id'] < 1) ? true : false; $coreFields = $this->getCoreFields(); if(in_array($data['name'],$coreFields)){ //vmError('Cant store/update core field. They belong to joomla'); //return false; } else { if ($isNew) { $reorderRequired = false; $_action = 'ADD'; } else { $field->load($data['virtuemart_userfield_id']); $_action = 'CHANGE'; if ($field->ordering == $data['ordering']) { $reorderRequired = false; } else { $reorderRequired = true; } } } //vmdebug ('SAVED userfields', $data); // Put the parameters, if any, in the correct format if (array_key_exists($data['type'], $this->reqParam)) { $this->_params->set($this->reqParam[$data['type']], $data[$this->reqParam[$data['type']]]); $data['params'] = $this->_params->paramString(); } // Store the fieldvalues, if any, in a correct array $fieldValues = $this->postData2FieldValues($data['vNames'], $data['vValues'], $data['virtuemart_userfield_id'] ); if(strpos($data['type'],'plugin')!==false){ // missing string FIX, Bad way ? if (JVM_VERSION===1) { $tb = '#__plugins'; $ext_id = 'id'; } else { $tb = '#__extensions'; $ext_id = 'extension_id'; } $plgName = substr($data['type'],6); $q = 'SELECT `' . $ext_id . '` FROM `' . $tb . '` WHERE `element` = "'.$plgName.'"'; $this->_db->setQuery($q); $data['userfield_jplugin_id'] = $this->_db->loadResult(); JPluginHelper::importPlugin('vmuserfield'); $dispatcher = JDispatcher::getInstance(); $dispatcher->trigger('plgVmOnBeforeUserfieldSave',array( $plgName , &$data, &$field ) ); } if (!$field->bind($data)) { // Bind data vmError($field->getError()); return false; } if (!$field->check(count($fieldValues))) { // Perform data checks //vmError($field->getError()); return false; } // Get the fieldtype for the database $_fieldType = $field->formatFieldType($data); if(!in_array($data['name'],$coreFields) && $field->type != 'delimiter'){ // Alter the user_info table if (!$userinfo->_modifyColumn ($_action, $data['name'], $_fieldType)) { vmError('userfield store modifyColumn userinfo',$userinfo->getError()); return false; } // Alter the order_userinfo table if (!$orderinfo->_modifyColumn ($_action, $data['name'], $_fieldType)) { vmError('userfield store modifyColumn orderinfo',$orderinfo->getError()); return false; } } // if new item, order last in appropriate group if ($isNew) { $field->ordering = $field->getNextOrder(); } $_id = $field->store(); if ($_id === false) { // Write data to the DB vmError($field->getError()); return false; } if (!$this->storeFieldValues($fieldValues, $_id)) { return false; } if(strpos($data['type'],'plugin')!==false){ JPluginHelper::importPlugin('vmuserfield'); $dispatcher = JDispatcher::getInstance(); $plgName = substr($data['type'],6); $dispatcher->trigger('plgVmOnStoreInstallPluginTable',array( 'userfield' , $data ) ); } if ($reorderRequired) { $field->reorder(); } vmdebug('storing userfield',$_id); // Alter the user_info database to hold the values return $_id; } /** * Bind and write all value records * * @param array $_values * @param mixed $_id If a new record is being inserted, it contains the virtuemart_userfield_id, otherwise the value true * @return boolean */ private function storeFieldValues($_values, $_id) { // stAn - not true, because if previously we had more values, we have to delete them /* if (count($_values) == 0) { return true; //Nothing to do } */ $fieldvalue = $this->getTable('userfield_values'); // get original values $originalvalues = $this->getUserfieldValues($_id); // for each orignal value search if it was deleted or modified for ($i = 0; $i < count($originalvalues); $i++) { if (isset($_values[$i])) { if (!($_id === true)) { // If $_id is true, it was not a new record $_values[$i]['virtuemart_userfield_id'] = $_id; } if (!$fieldvalue->bind($_values[$i])) { // Bind data vmError($fieldvalue->getError()); return false; } if (!$fieldvalue->check()) { // Perform data checks vmError($fieldvalue->getError()); return false; } if (!$fieldvalue->store()) { // Write data to the DB vmError($fieldvalue->getError()); return false; } } else { // the field was deleted // stAn, next line doesn't work, because it tries to delete by the virtuemart_userfield_id instead of virtuemart_userfield_value_id // $msg = $fieldvalue->delete($originalvalues->virtuemart_userfield_value_id); $db = JFactory::getDBO(); $q = 'DELETE from `#__virtuemart_userfield_values` WHERE `virtuemart_userfield_value_id` = ' . (int)$originalvalues[$i]->virtuemart_userfield_value_id.' and `virtuemart_userfield_id` = '.(int)$_id; $db->setQuery($q); if ($db->query() === false) { vmError($db->getError()); return false; } } } // for each new value that was added for ($i = count($originalvalues)-1; $i < count($_values) ; $i++) { // do a check here as we might not be using pure numeric arrays if (isset($_values[$i])) { if (!($_id === true)) { // If $_id is true, it was not a new record $_values[$i]['virtuemart_userfield_id'] = $_id; } if (!$fieldvalue->bind($_values[$i])) { // Bind data vmError($fieldvalue->getError()); return false; } if (!$fieldvalue->check()) { // Perform data checks vmError($fieldvalue->getError()); return false; } if (!$fieldvalue->store()) { // Write data to the DB vmError($fieldvalue->getError()); return false; } } } return true; } /** * * @author Max Milbers */ public function getUserFieldsFor($layoutName, $type,$userId = -1){ //vmdebug('getUserFieldsFor '.$layoutName.' '. $type .' ' . $userId); $register = false; if(VmConfig::get('oncheckout_show_register',1) and $type=='BT'){ $user = JFactory::getUser(); if(!empty($user)){ if(empty($user->id)){ $register = true; } } else { $register = true; } } else { $register = false; } $skips = array(); //Maybe there is another method to define the skips $skips = array('address_type'); if((!$register or $type =='ST') and $layoutName !='edit'){ $skips[] = 'name'; $skips[] = 'username'; $skips[] = 'password'; $skips[] = 'password2'; $skips[] = 'user_is_vendor'; $skips[] = 'agreed'; // MattLG: Added this line because it leaves the empty fieldset with just the label when editing the ST addresses // A better solution might be to make this a setting rather than hard coding this whole block here $skips[] = 'delimiter_userinfo'; } //Here we get the fields if ($type == 'BT') { $userFields = $this->getUserFields( 'account' , array() // Default toggles , $skips// Skips ); } else { $userFields = $this->getUserFields( 'shipment' , array() // Default toggles , $skips ); } //Small ugly hack to make registering optional //do we still need that? YES ! notice by Max Milbers if($register && $type == 'BT' && VmConfig::get('oncheckout_show_register',1) ){ $corefields = $this->getCoreFields(); unset($corefields[2]); //the 2 is for the email field, it is necessary in almost anycase. foreach($userFields as $field){ if(in_array($field->name,$corefields)){ $field->required = 0; $field->value = ''; $field->default = ''; } } } return $userFields; } /** * Retrieve an array with userfield objects * * @param string $section The section the fields belong to (e.g. 'registration' or 'account') * @param array $_switches Array to toggle these options: * * published published fields only (default: true) * * required Required fields only (default: false) * * delimiters Exclude delimiters (default: false) * * captcha Exclude Captcha type (default: false) * * system System fields filter (no default; true: only system fields, false: exclude system fields) * @param array $_skip Array with fieldsnames to exclude. Default: array('username', 'password', 'password2', 'agreed'), * specify array() to skip nothing. * @see getUserFieldsFilled() * @author Oscar van Eijk * @return array */ public function getUserFields ($_sec = 'registration', $_switches=array(), $_skip = array('username', 'password', 'password2')) { // stAn, we can't really create cache per sql as we want to create named array as well $cache_hash = md5($_sec.serialize($_switches).serialize($_skip).$this->_selectedOrdering.$this->_selectedOrderingDir); if (isset(self::$_cache_ordered[$cache_hash])) return self::$_cache_ordered[$cache_hash]; $_q = 'SELECT * FROM `#__virtuemart_userfields` WHERE 1 = 1 '; if( $_sec != 'bank' && $_sec != '') { $_q .= 'AND `'.$_sec.'`=1 '; } elseif ($_sec == 'bank' ) { $_q .= "AND name LIKE '%bank%' "; } /* if (($_skipBank = array_search('bank', $_skip)) !== false ) { $_q .= "AND name NOT LIKE '%bank%' "; unset ($_skip[$_skipBank]); }*/ if(array_key_exists('published',$_switches)){ if ($_switches['published'] !== false ) { $_q .= 'AND published = 1 '; } } else { $_q .= 'AND published = 1 '; } if(array_key_exists('required',$_switches)){ if ($_switches['required'] === true ) { $_q .= "AND required = 1 "; } } if(array_key_exists('delimiters',$_switches)){ if ($_switches['delimiters'] === true ) { $_q .= "AND type != 'delimiter' "; } } if(array_key_exists('captcha',$_switches)){ if ($_switches['captcha'] === true ) { $_q .= "AND type != 'captcha' "; } } if(array_key_exists('sys',$_switches)){ if ($_switches['sys'] === true ) { $_q .= "AND sys = 1 "; } else { $_q .= "AND sys = 0 "; } } if (count($_skip) > 0) { $_q .= "AND FIND_IN_SET(name, '".implode(',', $_skip)."') = 0 "; } $_q .= ' ORDER BY ordering '; $_fields = $this->_getList($_q); // We need some extra fields that are not in the userfields table. They will be hidden on the details form if (!in_array('address_type', $_skip)) { $_address_type = new stdClass(); $_address_type->virtuemart_userfield_id = 0; $_address_type->name = 'address_type'; $_address_type->title = ''; $_address_type->description = '' ; $_address_type->type = 'hidden'; $_address_type->maxlength = 0; $_address_type->size = 0; $_address_type->required = 0; $_address_type->ordering = 0; $_address_type->cols = 0; $_address_type->rows = 0; $_address_type->value = ''; $_address_type->default = 'BT'; $_address_type->published = 1; $_address_type->registration = 1; $_address_type->shipment = 0; $_address_type->account = 1; $_address_type->readonly = 0; $_address_type->calculated = 0; // what is this??? $_address_type->sys = 0; $_address_type->virtuemart_vendor_id = 1; $_address_type->params = ''; $_fields[] = $_address_type; } // stAn: slow to run the first time: self::$_cache_ordered[$cache_hash] = $_fields; if (!isset(self::$_cache_named[$_sec])) self::$_cache_named[$_sec] = array(); foreach ($_fields as &$f) { self::$_cache_named[$_sec][$f->name] = $f; } return $_fields; } /** * Return a boolean whethe the userfield is enabled in context of $_sec * * @access public * @param $_field_name: name of the user field such as 'email' * @param $_sec BT or ST, or one of the types of the fields: account, shipment, registration * @author stAn * @return true or false * * Note: this function will return a false result for skipped fields such as agreed, user_is_vendor * * when used from shipment method, you can use * $userFieldsModel =VmModel::getModel('Userfields'); * $type = (($cart->ST == 0) ? 'BT' : 'ST'); * if ($userFieldsModel->fieldPublished('zip', $type)) .... */ public function fieldPublished($_field_name, $_sec='account') { if ($_sec == 'BT') $_sec = 'account'; else if ($_sec == 'ST') $_sec = 'shipment'; if (isset(self::$_cache_named[$_sec])) return isset(self::$_cache_named[$_sec][$_field_name]); $this->getUserFields($_sec, array(), array()); if (isset(self::$_cache_named[$_sec])) return isset(self::$_cache_named[$_sec][$_field_name]); return false; } /** * Return an array with userFields in several formats. * * @access public * @param $_selection An array, as returned by getuserFields(), with fields that should be returned. * @param $_userData Array with userdata holding the values for the fields * @param $_prefix string Optional prefix for the formtag name attribute * @author Oscar van Eijk * @return array List with all userfield data in the format: * array( * 'fields' => array( // All fields * => array( * 'name' => // Name of the field * 'value' => // Existing value for the current user, or the default * 'title' => // Title used for label and such * 'type' => // Field type as specified in the userfields table * 'hidden' => // True/False * 'required' => // True/False. If True, the formcode also has the class "required" for the Joomla formvalidator * 'formcode' => // Full HTML tag * ) * [...] * ) * 'functions' => array() // Optional javascript functions without ; * 'scripts' => array( // Array with scriptsources for use with JHTML::script(); * => * [...] * ) * 'links' => array( // Array with stylesheets for use with JHTML::stylesheet(); * => * [...] * ) * ) * @example This example illustrates the use of this function. For additional examples, see the Order view * and the User view in the administrator section. *
        	 *   // In the controller, make sure this model is loaded.
        	 *   // In view.html.php, make the following calls:
        	 *   $_usrDetails = getUserDetailsFromSomeModel(); // retrieve an user_info record, eg from the usermodel or ordermodel
        	 *   $_usrFieldList = $userFieldsModel->getUserFields(
        	 *                    'registration'
        	 *                  , array() // Default switches
        	 *                  , array('delimiter_userinfo', 'username', 'email', 'password', 'password2', 'agreed', 'address_type') // Skips
        	 *    );
        	 *   $usrFieldValues = $userFieldsModel->getUserFieldsFilled(
        	 *                      $_usrFieldList
        	 *                     ,$_usrDetails
        	 *   );
        	 *   $this->assignRef('userfields', $userfields);
        	 *   // In the template, use code below to display the data. For an extended example using
        	 *   // delimiters, JavaScripts and StyleSheets, see the edit_shopper.php in the user view
        	 *   
        	 *     
        	 *       
        	 *         
        	 *       
        	 *     
        	 *      shipmentfields['fields'] as $_field ) {
        	 *          echo '  '."\n";
        	 *          echo '    '."\n";
        	 *          echo '    '."\n";
        	 *          echo '  '."\n";
        	 *        }
        	 *      ?>
        	 *    
        * *
        '."\n"; * echo ' '.$_field['title']."\n"; * echo ' '."\n"; * * echo ' '.$_field['value']."\n"; // Display only * Or: * echo ' '.$_field['formcode']."\n"; // Input form * * echo '
        *
        */ public function getUserFieldsFilled($_selection, $_userData = null, $_prefix = ''){ if(!class_exists('ShopFunctions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'shopfunctions.php'); $_return = array( 'fields' => array() ,'functions' => array() ,'scripts' => array() ,'links' => array() ); $admin = false; if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if(Permissions::getInstance()->check('admin','storeadmin')){ $admin = true; } // vmdebug('my user data in getUserFieldsFilled',$_selection,$_userData); $_userData=(array)($_userData); if (is_array($_selection)) { foreach ($_selection as $_fld) { $_return['fields'][$_fld->name] = array( 'name' => $_prefix . $_fld->name ,'value' => (($_userData == null || !array_key_exists($_fld->name, $_userData)) ? $_fld->default : @html_entity_decode($_userData[$_fld->name],ENT_COMPAT,'UTF-8')) ,'title' => vmText::_($_fld->title) ,'type' => $_fld->type ,'required' => $_fld->required ,'hidden' => false ,'formcode' => '' ,'description' => vmText::_($_fld->description) ); $readonly = ''; if(!$admin){ if($_fld->readonly ){ $readonly = ' readonly="readonly" '; } } // vmdebug ('getUserFieldsFilled',$_fld->name); // if($_fld->name==='email') vmdebug('user data email getuserfieldbyuser',$_userData); // First, see if there are predefined fields by checking the name switch( $_fld->name ) { // case 'email': // $_return['fields'][$_fld->name]['formcode'] = $_userData->email; // break; case 'virtuemart_country_id': $attrib = array(); //For nice lists in the FE if ($_fld->size) { $attrib = array('style'=>"width: ".$_fld->size."px"); } $_return['fields'][$_fld->name]['formcode'] = ShopFunctions::renderCountryList($_return['fields'][$_fld->name]['value'], false, $attrib , $_prefix, $_fld->required); if(!empty($_return['fields'][$_fld->name]['value'])){ // Translate the value from ID to name $_return['fields'][$_fld->name]['virtuemart_country_id'] = (int)$_return['fields'][$_fld->name]['value']; $db = JFactory::getDBO (); $q = 'SELECT * FROM `#__virtuemart_countries` WHERE virtuemart_country_id = "' . (int)$_return['fields'][$_fld->name]['value'] . '"'; $db->setQuery ($q); $r = $db->loadAssoc(); if($r){ $_return['fields'][$_fld->name]['value'] = !empty($r['country_name'])? $r['country_name']:'' ; $_return['fields'][$_fld->name]['country_2_code'] = !empty($r['country_2_code'])? $r['country_2_code']:'' ; $_return['fields'][$_fld->name]['country_3_code'] = !empty($r['country_3_code'])? $r['country_3_code']:'' ; } else { vmError('Model Userfields, country with id '.$_return['fields'][$_fld->name]['value'].' not found'); } } else { $_return['fields'][$_fld->name]['value'] = '' ; $_return['fields'][$_fld->name]['country_2_code'] = '' ; $_return['fields'][$_fld->name]['country_3_code'] = '' ; } //$_return['fields'][$_fld->name]['value'] = JText::_(shopFunctions::getCountryByID($_return['fields'][$_fld->name]['value'])); //$_return['fields'][$_fld->name]['state_2_code'] = JText::_(shopFunctions::getCountryByID($_return['fields'][$_fld->name]['value'])); break; case 'virtuemart_state_id': if (!class_exists ('shopFunctionsF')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'shopfunctionsf.php'); $attrib = array(); if ($_fld->size) { $attrib = array('style'=>"width: ".$_fld->size."px"); } $_return['fields'][$_fld->name]['formcode'] = shopFunctions::renderStateList( $_return['fields'][$_fld->name]['value'], $_prefix, false, $_fld->required, $attrib ); if(!empty($_return['fields'][$_fld->name]['value'])){ // Translate the value from ID to name $_return['fields'][$_fld->name]['virtuemart_state_id'] = (int)$_return['fields'][$_fld->name]['value']; $db = JFactory::getDBO (); $q = 'SELECT * FROM `#__virtuemart_states` WHERE virtuemart_state_id = "' . (int)$_return['fields'][$_fld->name]['value'] . '"'; $db->setQuery ($q); $r = $db->loadAssoc(); if($r){ $_return['fields'][$_fld->name]['value'] = !empty($r['state_name'])? $r['state_name']:'' ; $_return['fields'][$_fld->name]['state_2_code'] = !empty($r['state_2_code'])? $r['state_2_code']:'' ; $_return['fields'][$_fld->name]['state_3_code'] = !empty($r['state_3_code'])? $r['state_3_code']:'' ; } else { vmError('Model Userfields, state with id '.$_return['fields'][$_fld->name]['value'].' not found'); } } else { $_return['fields'][$_fld->name]['value'] = '' ; $_return['fields'][$_fld->name]['state_2_code'] = '' ; $_return['fields'][$_fld->name]['state_3_code'] = '' ; } //$_return['fields'][$_fld->name]['value'] = shopFunctions::getStateByID($_return['fields'][$_fld->name]['value']); break; //case 'agreed': // $_return['fields'][$_fld->name]['formcode'] = 'required ? ' class="required"' : '') . ' />'; // break; case 'password': case 'password2': $_return['fields'][$_fld->name]['formcode'] = ''."\n"; break; case 'agreed': $_return['fields'][$_fld->name]['formcode'] = 'name]['value'] ? 'checked="checked"' : '') .'/>'; break; // It's not a predefined field, so handle it by it's fieldtype default: if(strpos($_fld->type,'plugin')!==false){ JPluginHelper::importPlugin('vmuserfield'); $dispatcher = JDispatcher::getInstance(); $dispatcher->trigger('plgVmOnUserfieldDisplay',array($_prefix, $_fld,isset($_userData['virtuemart_user_id'])?$_userData['virtuemart_user_id']:0, &$_return) ); break; } switch( $_fld->type ) { case 'hidden': $_return['fields'][$_fld->name]['formcode'] = 'required ? ' class="required"' : '') . ($_fld->maxlength ? ' maxlength="' . $_fld->maxlength . '"' : '') . $readonly . ' /> '; $_return['fields'][$_fld->name]['hidden'] = true; break; case 'date': case 'age_verification': //echo JHTML::_('behavior.calendar'); /* * TODO We must add the joomla.javascript here that contains the calendar, * since Joomla does not load it when there's no user logged in. * Gotta find out why... some security issue or a bug??? * Note by Oscar */ // if ($_userData === null) { // Not logged in // $_doc = JFactory::getDocument(); // $_doc->addScript( JURI::root(true).'/includes/js/joomla.javascript.js'); // } $currentYear= date('Y'); // $calendar = vmJsApi::jDate($_return['fields'][$_fld->name]['value'], $_prefix.$_fld->name, $_prefix.$_fld->name . '_field',false,($currentYear-100).':'.$currentYear); // $_return['fields'][$_fld->name]['formcode'] = $calendar ; //if(empty($_return['fields'][$_fld->name]['value'])){ // $_return['fields'][$_fld->name]['value'] = "1912-01-01 00:00:00"; //} jDate($date='',$name="date",$id=null,$resetBt = true, $yearRange='') { // Year range MUST start 100 years ago, for birthday $_return['fields'][$_fld->name]['formcode'] = vmJsApi::jDate($_return['fields'][$_fld->name]['value'], $_prefix.$_fld->name,$_prefix.$_fld->name . '_field',false,($currentYear-100).':'.$currentYear); break; case 'emailaddress': if( JFactory::getApplication()->isSite()) { if(empty($_return['fields'][$_fld->name]['value'])) { $_return['fields'][$_fld->name]['value'] = JFactory::getUser()->email; } } // vmdebug('emailaddress',$_fld); case 'text': case 'webaddress': $_return['fields'][$_fld->name]['formcode'] = 'required ? ' class="required"' : '') . ($_fld->maxlength ? ' maxlength="' . $_fld->maxlength . '"' : '') . $readonly . ' /> '; break; case 'textarea': $_return['fields'][$_fld->name]['formcode'] = ''; break; case 'editorta': jimport( 'joomla.html.editor' ); $editor = JFactory::getEditor(); $_return['fields'][$_fld->name]['formcode'] = $editor->display($_prefix.$_fld->name, $_return['fields'][$_fld->name]['value'], '150', '100', $_fld->cols, $_fld->rows, array('pagebreak', 'readmore')); break; case 'checkbox': $_return['fields'][$_fld->name]['formcode'] = 'name]['value'] ? 'checked="checked"' : '') .'/>'; if($_return['fields'][$_fld->name]['value']) { $_return['fields'][$_fld->name]['value'] = JText::_($_prefix.$_fld->title); } break; // /*##mygruz20120223193710 { :*/ // case 'userfieldplugin': //why not just vmuserfieldsplugin ? // JPluginHelper::importPlugin('vmuserfield'); // $dispatcher = JDispatcher::getInstance(); // //Todo to adjust to new pattern, using & // $html = '' ; // $dispatcher->trigger('plgVmOnUserFieldDisplay',array($_return['fields'][$_fld->name], &$html) ); // $_return['fields'][$_fld->name]['formcode'] = $html; // break; // /*##mygruz20120223193710 } */ case 'multicheckbox': case 'multiselect': case 'select': case 'radio': $_qry = 'SELECT fieldtitle, fieldvalue ' . 'FROM #__virtuemart_userfield_values ' . 'WHERE virtuemart_userfield_id = ' . $_fld->virtuemart_userfield_id . ' ORDER BY ordering '; $_values = $this->_getList($_qry); // We need an extra lok here, especially for the Bank info; the values // must be translated. // Don't check on the field name though, since others might be added in the future :-( foreach ($_values as $_v) { $_v->fieldtitle = vmText::_($_v->fieldtitle); } $_attribs = array(); if ($_fld->readonly and !$admin) { $_attribs['readonly'] = 'readonly'; } if ($_fld->required) { $_attribs['class'] = 'required'; } if ($_fld->type == 'radio' or $_fld->type == 'select') { $_selected = $_return['fields'][$_fld->name]['value']; } else { $_attribs['size'] = $_fld->size; // Use for all but radioselects if (!is_array($_return['fields'][$_fld->name]['value'])){ $_selected = explode("|*|", $_return['fields'][$_fld->name]['value']); } else { $_selected = $_return['fields'][$_fld->name]['value']; } } // Nested switch... switch($_fld->type) { case 'multicheckbox': // todo: use those $_attribs['rows'] = $_fld->rows; $_attribs['cols'] = $_fld->cols; $formcode = ''; $field_values=""; $_idx = 0; $separator_form = '
        '; $separator_title = ','; foreach ($_values as $_val) { if ( in_array($_val->fieldvalue, $_selected)) { $is_selected='checked="checked"'; $field_values.= JText::_($_val->fieldtitle). $separator_title; } else { $is_selected=''; } $formcode .= ' '. $separator_form; $_idx++; } // remove last br $_return['fields'][$_fld->name]['formcode'] =substr($formcode ,0,-strlen($separator_form)); $_return['fields'][$_fld->name]['value'] = substr($field_values,0,-strlen($separator_title)); break; case 'multiselect': $_attribs['multiple'] = 'multiple'; $_attribs['class'] = 'vm-chzn-select'; $field_values=""; $_return['fields'][$_fld->name]['formcode'] = JHTML::_('select.genericlist', $_values, $_prefix.$_fld->name.'[]', $_attribs, 'fieldvalue', 'fieldtitle', $_selected); $separator_form = '
        '; $separator_title = ','; foreach ($_values as $_val) { if ( in_array($_val->fieldvalue, $_selected)) { $field_values.= JText::_($_val->fieldtitle). $separator_title; } } $_return['fields'][$_fld->name]['value'] = substr($field_values,0,-strlen($separator_title)); break; case 'select': $_attribs['class'] = 'vm-chzn-select'; if ($_fld->size) { $_attribs['style']= "width: ".$_fld->size."px"; } if(!$_fld->required){ $obj = new stdClass(); $obj->fieldtitle = vmText::_('COM_VIRTUEMART_LIST_EMPTY_OPTION'); $obj->fieldvalue = ''; array_unshift($_values,$obj); } $_return['fields'][$_fld->name]['formcode'] = JHTML::_('select.genericlist', $_values, $_prefix.$_fld->name, $_attribs, 'fieldvalue', 'fieldtitle', $_selected); foreach ($_values as $_val) { if ( !empty($_selected) and $_val->fieldvalue==$_selected ) { // vmdebug('getUserFieldsFilled set empty select to value',$_selected,$_fld,$_return['fields'][$_fld->name]); $_return['fields'][$_fld->name]['value'] = vmText::_($_val->fieldtitle); } } break; case 'radio': $_return['fields'][$_fld->name]['formcode'] = JHTML::_('select.radiolist', $_values, $_prefix.$_fld->name, $_attribs, 'fieldvalue', 'fieldtitle', $_selected); foreach ($_values as $_val) { if ( $_val->fieldvalue==$_selected) { $_return['fields'][$_fld->name]['value'] = vmText::_($_val->fieldtitle); } } break; } break; } break; } } } else { vmdebug('getUserFieldsFilled $_selection is not an array ',$_selection); // $_return['fields'][$_fld->name]['formcode'] = ''; } return $_return; } /** * Checks if a single field is required, used in the cart * * @author Max Milbers * @param string $fieldname */ function getIfRequired($fieldname) { $q = 'SELECT `required` FROM #__virtuemart_userfields WHERE `name` = "'.$fieldname.'" '; $this->_db->setQuery($q); $result = $this->_db->loadResult(); $error = $this->_db->getErrorMsg(); if(!empty($error)){ vmError('userfields getIfRequired '.$error,'Programmer used an unknown userfield '.$fieldname); } return $result; } /** * Translate arrays form userfield_values to the format expected by the table class. * * stAn Note -> when a field of [0] is deleted (or others), you cannot use count to itenerate the array * * @param array $titles List of titles from the formdata * @param array $values List of values from the formdata * @param int $virtuemart_userfield_id ID of the userfield to relate * @return array Data to bind to the userfield_values table */ private function postData2FieldValues($titles, $values, $virtuemart_userfield_id ){ $_values = array(); if (is_array($titles) && is_array($values)) { // updated by stAn: foreach ($values as $i=>$val) { $_values[$i] = array( 'virtuemart_userfield_id' => $virtuemart_userfield_id ,'fieldtitle' => $titles[$i] ,'fieldvalue' => $values[$i] ,'ordering' => $i ); } /* for ($i=0; $i < count($titles) ;$i++) { if (empty($titles[$i])) { continue; // Ignore empty fields } } */ } return $_values; } /** * Get the column name of a given fieldID * @param $_id integer Field ID * @return string Fieldname */ function getNameByID($_id) { $_sql = 'SELECT `name` FROM `#__virtuemart_userfields` WHERE virtuemart_userfield_id = "'.$_id.'" '; $_v = $this->_getList($_sql); return ($_v[0]->name); } /** * Delete all record ids selected * * @return boolean True is the remove was successful, false otherwise. */ function remove($fieldIds){ $field = $this->getTable('userfields'); $value = $this->getTable('userfield_values'); $userinfo = $this->getTable('userinfos'); $orderinfo = $this->getTable('order_userinfos'); $ok = true; foreach($fieldIds as $fieldId) { $_fieldName = $this->getNameByID($fieldId); $field->load($fieldId); if ($field->type != 'delimiter') { // Get the fieldtype for the database $_fieldType = $field->formatFieldType(); // Alter the user_info table if ($userinfo->_modifyColumn ('DROP', $_fieldName,$_fieldType) === false) { vmError($userinfo->getError()); $ok = false; } // Alter the order_userinfo table if ($orderinfo->_modifyColumn ('DROP', $_fieldName,$_fieldType) === false) { vmError($orderinfo->getError()); $ok = false; } } if (!$field->delete($fieldId)) { vmError($field->getError()); $ok = false; } if (!$value->delete($fieldId)) { vmError($field->getError()); $ok = false; } } return $ok; } /** * Get the userfields for the BE list * * @author Max Milbers * @return NULL */ function getUserfieldsList(){ if (!$this->_data) { $whereString = $this->_getFilter(); $ordering = $this->_getOrdering(); $this->_data = $this->exeSortSearchListQuery(0,'*',' FROM `#__virtuemart_userfields`',$whereString,'',$ordering); } return $this->_data; } /** * If a filter was set, get the SQL WHERE clase * * @return string text to add to the SQL statement */ function _getFilter() { $db = JFactory::getDBO(); if ($search = JRequest::getWord('search', false)) { $search = '"%' . $this->_db->getEscaped( $search, true ) . '%"' ; //$search = $this->_db->Quote($search, false); return (' WHERE `name` LIKE ' .$search); } return (''); } /** * Build the query to list all Userfields * *@deprecated * @return string SQL query statement */ function _getListQuery () { $query = 'SELECT * FROM `#__virtuemart_userfields` '; $query .= $this->_getFilter(); $query .= $this->_getOrdering(); return ($query); } //*/ } // No closing tag models/usergroups.php000066600000004011151374526160010770 0ustar00setMainTable('usergroups'); } function getUsergroup() { $db = JFactory::getDBO(); if (empty($this->_data)) { $this->_data = $this->getTable('usergroups'); $this->_data->load((int)$this->_id); } return $this->_data; } function getUsergroups($onlyPublished=false, $noLimit=false) { $where = array(); if ($onlyPublished) { $where[] = ' `#__virtuemart_shoppergroups`.`published` = 1'; } $whereString = ''; if (count($where) > 0) $whereString = ' WHERE '.implode(' AND ', $where) ; return $this->_data = $this->exeSortSearchListQuery(0,'*',' FROM `#__virtuemart_permgroups`',$whereString,'',$this->_getOrdering()); } } models/virtuemart.php000066600000010074151374526160010762 0ustar00_getListCount($query); } /** * Gets the total number of active products * * @author RickG * @return int Total number of active products in the database */ function getTotalActiveProducts() { $query = 'SELECT `virtuemart_product_id` FROM `#__virtuemart_products` WHERE `published`="1"'; return $this->_getListCount($query); } /** * Gets the total number of inactive products * * @author RickG * @return int Total number of inactive products in the database */ function getTotalInActiveProducts() { $query = 'SELECT `virtuemart_product_id` FROM `#__virtuemart_products` WHERE `published`="0"'; return $this->_getListCount($query); } /** * Gets the total number of featured products * * @author RickG * @return int Total number of featured products in the database */ function getTotalFeaturedProducts() { $query = 'SELECT `virtuemart_product_id` FROM `#__virtuemart_products` WHERE `product_special`="1"'; return $this->_getListCount($query); } /** * Gets the total number of orders with the given status * * @author RickG * @return int Total number of orders with the given status */ function getTotalOrdersByStatus() { $query = 'SELECT `#__virtuemart_orderstates`.`order_status_name`, `#__virtuemart_orderstates`.`order_status_code`, '; $query .= '(SELECT count(virtuemart_order_id) FROM `#__virtuemart_orders` WHERE `#__virtuemart_orders`.`order_status` = `#__virtuemart_orderstates`.`order_status_code`) as order_count '; $query .= 'FROM `#__virtuemart_orderstates`'; return $this->_getList($query); } /** * Gets a list of recent orders * * @author RickG * @return ObjectList List of recent orders. */ function getRecentOrders($nbrOrders=5) { $query = 'SELECT * FROM `#__virtuemart_orders` ORDER BY `created_on` desc'; return $this->_getList($query, 0, $nbrOrders); } /** * Gets a list of recent customers * * @author RickG * @return ObjectList List of recent orders. */ function getRecentCustomers($nbrCusts=5) { $query = 'SELECT `id` as `virtuemart_user_id`, `first_name`, `last_name`, `order_number` FROM `#__users` as `u` '; $query .= 'JOIN `#__virtuemart_vmusers` as uv ON u.id = uv.virtuemart_user_id '; $query .= 'JOIN `#__virtuemart_userinfos` as ui ON u.id = ui.virtuemart_user_id '; $query .= 'JOIN `#__virtuemart_orders` as uo ON u.id = uo.virtuemart_user_id '; $query .= 'WHERE `perms` <> "admin" '; $query .= 'AND `perms` <> "storeadmin" '; $query .= 'AND INSTR(`usertype`, "administrator") = 0 AND INSTR(`usertype`, "Administrator") = 0 '; $query .= ' ORDER BY uo.`created_on` DESC'; return $this->_getList($query, 0, $nbrCusts); } } //pure php no tagmodels/shoppergroup.php000066600000022335151374526160011320 0ustar00setMainTable('shoppergroups'); } /** * Retrieve the detail record for the current $id if the data has not already been loaded. * * @author Markus Öhler */ function getShopperGroup() { if (empty($this->_data)) { $this->_data = $this->getTable('shoppergroups'); $this->_data->load((int) $this->_id); if(!empty($this->_data->price_display)){ $this->_data->price_display = unserialize($this->_data->price_display); } else{ if(!class_exists('JParameter')) require(JPATH_VM_LIBRARIES.DS.'joomla'.DS.'html'.DS.'parameter.php' ); $this->_data->price_display = new JParameter(''); } } return $this->_data; } /** * Retireve a list of shopper groups from the database. * * @author Markus Öhler * @param boolean $onlyPublished * @param boolean $noLimit True if no record count limit is used, false otherwise * @return object List of shopper group objects */ function getShopperGroups($onlyPublished=false, $noLimit = false) { $db = JFactory::getDBO(); $query = 'SELECT * FROM `#__virtuemart_shoppergroups` ORDER BY `virtuemart_vendor_id`,`shopper_group_name` '; if ($noLimit) { $this->_data = $this->_getList($query); } else { $this->_data = $this->_getList($query, $this->getState('limitstart'), $this->getState('limit')); } return $this->_data; } function store(&$data){ $myfields = array('basePrice','variantModification','basePriceVariant', 'basePriceWithTax','basePriceWithTax','discountedPriceWithoutTax', 'salesPrice','priceWithoutTax', 'salesPriceWithDiscount','discountAmount','taxAmount','unitPrice'); $param ='show_prices='.$data['show_prices']."\n"; foreach($myfields as $fields){ $param .= $fields.'='.$data[$fields]."\n"; //attention there must be doublequotes $param .= $fields.'Text='.$data[$fields.'Text']."\n"; $param .= $fields.'Rounding='.$data[$fields.'Rounding']."\n"; } if(!class_exists('JParameter')) require(JPATH_VM_LIBRARIES.DS.'joomla'.DS.'html'.DS.'parameter.php' ); $jparam = new JParameter($param); $data['price_display'] = serialize(new JParameter($param)); return parent::store($data); } function makeDefault($id,$kind = 1) { //Prevent making anonymous Shoppergroup as default $adId = $this->getDefault(1); $anonymous_sg_id = $adId->virtuemart_shoppergroup_id; if($adId == $id){ $group = $this->getShoppergroupById($id); vmError(JText::sprintf('COM_VIRTUEMART_SHOPPERGROUP_CANT_MAKE_DEFAULT',$group->shopper_group_name,$id)); return false; } $this->_db->setQuery('UPDATE `#__virtuemart_shoppergroups` SET `default` = 0 WHERE `default`<"2"'); if (!$this->_db->query()) return ; $this->_db->setQuery('UPDATE `#__virtuemart_shoppergroups` SET `default` = "'.$kind.'" WHERE virtuemart_shoppergroup_id='.(int)$id); if (!$this->_db->query()) return ; return true; } /** * * Get default shoppergroup for anonymous and non anonymous * @param unknown_type $kind */ function getDefault($kind = 1, $onlyPublished = FALSE, $vendorId = 1){ $kind = $kind + 1; $q = 'SELECT * FROM `#__virtuemart_shoppergroups` WHERE `default` = "'.$kind.'" AND (`virtuemart_vendor_id` = "'.$vendorId.'" OR `shared` = "1") '; if($onlyPublished){ $q .= ' AND `published`="1" '; } $this->_db->setQuery($q); if(!$res = $this->_db->loadObject()){ $app = JFactory::getApplication(); $app->enqueueMessage('Attention no standard shopper group set '.$this->_db->getErrorMsg()); } else { //vmdebug('getDefault', $res); return $res; } } function appendShopperGroups(&$shopperGroups,$user,$onlyPublished = FALSE,$vendorId=1,$keepDefault = false){ $this->mergeSessionSgrps($shopperGroups); if(count($shopperGroups)<1 or $keepDefault){ $_defaultShopperGroup = $this->getDefault($user->guest,$onlyPublished,$vendorId); if(!in_array($_defaultShopperGroup->virtuemart_shoppergroup_id,$shopperGroups)){ $shopperGroups[] = $_defaultShopperGroup->virtuemart_shoppergroup_id; } } $this->removeSessionSgrps($shopperGroups); } function mergeSessionSgrps(&$ids){ $session = JFactory::getSession(); $shoppergroup_ids = $session->get('vm_shoppergroups_add',array(),'vm'); $ids = array_merge($ids,(array)$shoppergroup_ids); $ids = array_unique($ids); //$session->set('vm_shoppergroups_add',array(),'vm'); //vmdebug('mergeSessionSgrps',$shoppergroup_ids,$ids); } function removeSessionSgrps(&$ids){ $session = JFactory::getSession(); $shoppergroup_ids_remove = $session->get('vm_shoppergroups_remove',0,'vm'); if($shoppergroup_ids_remove!==0){ if(!is_array($shoppergroup_ids_remove)){ $shoppergroup_ids_remove = (array) $shoppergroup_ids_remove; } foreach($shoppergroup_ids_remove as $k => $id){ if(in_array($id,$ids)){ $key=array_search($id, $ids); if($key!==FALSE){ unset($ids[$key]); vmdebug('Anonymous case, remove session shoppergroup by plugin '.$id); } } } //$session->set('vm_shoppergroups_remove',0,'vm'); } } function remove($ids){ jimport( 'joomla.utilities.arrayhelper' ); JArrayHelper::toInteger($ids); $table = $this->getTable($this->_maintablename); $defaultSgId = $this->getDefault(0); $anonymSgId = $this->getDefault(1); foreach($ids as $id){ //Test if shoppergroup is default if($id == $defaultSgId->virtuemart_shoppergroup_id){ $this->_db->setQuery('SELECT shopper_group_name FROM `#__virtuemart_shoppergroups` WHERE `virtuemart_shoppergroup_id` = "'.(int)$id.'"'); $name = $this->_db->loadResult(); vmError(JText::sprintf('COM_VIRTUEMART_SHOPPERGROUP_DELETE_CANT_DEFAULT',vmText::_($name),$id)); continue; } //Test if shoppergroup is default if($id == $anonymSgId->virtuemart_shoppergroup_id){ $this->_db->setQuery('SELECT shopper_group_name FROM `#__virtuemart_shoppergroups` WHERE `virtuemart_shoppergroup_id` = "'.(int)$id.'"'); $name = $this->_db->loadResult(); vmError(JText::sprintf('COM_VIRTUEMART_SHOPPERGROUP_DELETE_CANT_DEFAULT',vmText::_($name),$id)); continue; } //Test if shoppergroup has members $this->_db->setQuery('SELECT * FROM `#__virtuemart_vmuser_shoppergroups` WHERE `virtuemart_shoppergroup_id` = "'.(int)$id.'"'); if($this->_db->loadResult()){ $this->_db->setQuery('SELECT shopper_group_name FROM `#__virtuemart_shoppergroups` WHERE `virtuemart_shoppergroup_id` = "'.(int)$id.'"'); $name = $this->_db->loadResult(); vmError(JText::sprintf('COM_VIRTUEMART_SHOPPERGROUP_DELETE_CANT_WITH_MEMBERS',vmText::_($name),$id)); continue; } if (!$table->delete($id)) { vmError(get_class( $this ).'::remove '.$table->getError()); return false; } } return true; } /** * Retrieves the Shopper Group Info of the SG specified by $id * * @param int $id * @param boolean $default_group * @return array */ static function getShoppergroupById($id, $default_group = false) { $virtuemart_vendor_id = 1; $db = JFactory::getDBO(); $q = 'SELECT `#__virtuemart_shoppergroups`.`virtuemart_shoppergroup_id`, `#__virtuemart_shoppergroups`.`shopper_group_name`, `default` AS default_shopper_group FROM `#__virtuemart_shoppergroups`'; if (!empty($id) && !$default_group) { $q .= ', `#__virtuemart_vmuser_shoppergroups`'; $q .= ' WHERE `#__virtuemart_vmuser_shoppergroups`.`virtuemart_user_id`="'.(int)$id.'" AND '; $q .= '`#__virtuemart_shoppergroups`.`virtuemart_shoppergroup_id`=`#__virtuemart_vmuser_shoppergroups`.`virtuemart_shoppergroup_id`'; } else { $q .= ' WHERE `#__virtuemart_shoppergroups`.`virtuemart_vendor_id`="'.(int)$virtuemart_vendor_id.'" AND `default`="2"'; } $db->setQuery($q); return $db->loadAssocList(); } } // pure php no closing tagmodels/product.php000066600000267330151374526160010251 0ustar00setMainTable ('products'); $this->starttime = microtime (TRUE); $this->maxScriptTime = VmConfig::getExecutionTime() * 0.95 - 1; $this->memory_limit = VmConfig::getMemoryLimit()-4; // $this->addvalidOrderingFieldName(array('m.mf_name','pp.product_price')); $app = JFactory::getApplication (); if ($app->isSite ()) { $this->_validOrderingFieldName = array(); $browseOrderByFields = VmConfig::get ('browse_orderby_fields',array('product_sku','category_name','mf_name','product_name')); } else { if (!class_exists ('shopFunctions')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'shopfunctions.php'); } $browseOrderByFields = ShopFunctions::getValidProductFilterArray (); $this->addvalidOrderingFieldName (array('product_price','product_sales')); //$this->addvalidOrderingFieldName (array('product_price')); // vmdebug('$browseOrderByFields',$browseOrderByFields); } $this->addvalidOrderingFieldName ((array)$browseOrderByFields); $this->removevalidOrderingFieldName ('virtuemart_product_id'); //$this->removevalidOrderingFieldName ('product_sales'); //unset($this->_validOrderingFieldName[0]);//virtuemart_product_id array_unshift ($this->_validOrderingFieldName, 'p.virtuemart_product_id'); $this->_selectedOrdering = VmConfig::get ('browse_orderby_field', '`p`.virtuemart_product_id'); $this->setToggleName('product_special'); $this->initialiseRequests (); //This is just done now for the moment for developing, the idea is of course todo this only when needed. $this->updateRequests (); } var $keyword = ""; var $product_parent_id = FALSE; var $virtuemart_manufacturer_id = FALSE; var $virtuemart_category_id = 0; var $search_type = ''; var $searchcustoms = FALSE; var $searchplugin = 0; var $filter_order = 'p.virtuemart_product_id'; var $filter_order_Dir = 'DESC'; var $valid_BE_search_fields = array('product_name', 'product_sku','product_gtin','product_mpn','`l`.`slug`', 'product_s_desc', '`l`.`metadesc`'); private $_autoOrder = 0; private $orderByString = 0; private $listing = FALSE; /** * This function resets the variables holding request depended data to the initial values * * @author Max Milbers */ function initialiseRequests () { $this->keyword = ""; $this->valid_search_fields = $this->valid_BE_search_fields; $this->product_parent_id = FALSE; $this->virtuemart_manufacturer_id = FALSE; $this->search_type = ''; $this->searchcustoms = FALSE; $this->searchplugin = 0; $this->filter_order = VmConfig::get ('browse_orderby_field'); ; $this->filter_order_Dir = VmConfig::get('prd_brws_orderby_dir', 'ASC'); $this->_uncategorizedChildren = null; } /** * This functions updates the variables of the model which are used in the sortSearchListQuery * with the variables from the Request * * @author Max Milbers */ function updateRequests () { $this->keyword = vRequest::uword ('keyword', "", ' ,-,+,.,_,#,/'); if ($this->keyword == "") { $this->keyword = vRequest::uword ('filter_product', "", ' ,-,+,.,_,#,/'); JRequest::setVar('filter_product',$this->keyword); JRequest::setVar('keyword',$this->keyword); } else { JRequest::setVar('keyword',$this->keyword); } $app = JFactory::getApplication (); $option = 'com_virtuemart'; $view = 'product'; if ($app->isSite ()) { $filter_order = JRequest::getString ('orderby', "0"); if($filter_order == "0"){ $filter_order_raw = $this->getLastProductOrdering($this->_selectedOrdering); $filter_order = $this->checkFilterOrder ($filter_order_raw); } else { vmdebug('my $filter_order ',$filter_order); $filter_order = $this->checkFilterOrder ($filter_order); vmdebug('my $filter_order after check',$filter_order); $this->setLastProductOrdering($filter_order); } $filter_order_Dir = strtoupper (JRequest::getWord ('dir', VmConfig::get('prd_brws_orderby_dir', 'ASC'))); $valid_search_fields = VmConfig::get ('browse_search_fields'); //vmdebug('$valid_search_fields ',$valid_search_fields); //unset($valid_search_fields[] } else { $filter_order = strtolower ($app->getUserStateFromRequest ('com_virtuemart.' . $view . '.filter_order', 'filter_order', $this->_selectedOrdering, 'cmd')); $filter_order = $this->checkFilterOrder ($filter_order); $filter_order_Dir = strtoupper ($app->getUserStateFromRequest ($option . '.' . $view . '.filter_order_Dir', 'filter_order_Dir', '', 'word')); $valid_search_fields = $this->valid_BE_search_fields; } $filter_order_Dir = $this->checkFilterDir ($filter_order_Dir); $this->filter_order = $filter_order; $this->filter_order_Dir = $filter_order_Dir; $this->valid_search_fields = $valid_search_fields; $this->product_parent_id = JRequest::getInt ('product_parent_id', FALSE); $this->virtuemart_manufacturer_id = JRequest::getInt ('virtuemart_manufacturer_id', FALSE); $this->search_type = JRequest::getVar ('search_type', ''); $this->searchcustoms = JRequest::getVar ('customfields', array(), 'default', 'array'); $this->searchplugin = JRequest::getInt ('custom_parent_id', 0); } /** * @author Max Milbers */ public function getLastProductOrdering($default = 0){ $session = JFactory::getSession(); return $session->get('vmlastproductordering', $default, 'vm'); } /** * @author Max Milbers */ public function setLastProductOrdering($ordering){ $session = JFactory::getSession(); return $session->set('vmlastproductordering', (string) $ordering, 'vm'); } /** * Sets the keyword variable for the search * * @param string $keyword */ function setKeyWord ($keyword) { $this->keyword = $keyword; } /** * New function for sorting, searching, filtering and pagination for product ids. * * @author Max Milbers */ function sortSearchListQuery ($onlyPublished = TRUE, $virtuemart_category_id = FALSE, $group = FALSE, $nbrReturnProducts = FALSE) { $app = JFactory::getApplication (); //User Q.Stanley said that removing group by is increasing the speed of product listing in a bigger shop (10k products) by factor 60 //So what was the reason for that we have it? TODO experiemental, find conditions for the need of group by $groupBy = ' group by p.`virtuemart_product_id` '; //administrative variables to organize the joining of tables $joinCategory = FALSE; $joinCatLang = false; $joinMf = FALSE; $joinMfLang = false; $joinPrice = FALSE; $joinCustom = FALSE; $joinShopper = FALSE; $joinChildren = FALSE; $joinLang = false; $orderBy = ' '; $where = array(); $useCore = TRUE; if ($this->searchplugin !== 0) { //reset generic filters ! Why? the plugin can do it, if it wishes it. // if ($this->keyword ==='') $where=array(); JPluginHelper::importPlugin ('vmcustom'); $dispatcher = JDispatcher::getInstance (); $PluginJoinTables = array(); $ret = $dispatcher->trigger ('plgVmAddToSearch', array(&$where, &$PluginJoinTables, $this->searchplugin)); foreach ($ret as $r) { if (!$r) { $useCore = FALSE; } } } if ($useCore) { $isSite = $app->isSite (); // if ( $this->keyword !== "0" and $group ===false) { if (!empty($this->keyword) and $this->keyword !== '' and $group === FALSE) { $keyword = '"%' .str_replace(array(' ','-'),'%',$this->_db->getEscaped( $this->keyword, true )). '%"'; //$keyword = '"%' . $this->_db->getEscaped ($this->keyword, TRUE) . '%"'; foreach ($this->valid_search_fields as $searchField) { if ($searchField == 'category_name' || $searchField == 'category_description') { //$joinCategory = TRUE; $joinCatLang = true; } else if ($searchField == 'mf_name') { //$joinMf = TRUE; $joinMfLang = true; } else if ($searchField == 'product_price') { $joinPrice = TRUE; } else if (!$joinLang and ($searchField == 'product_name' or $searchField == 'product_s_desc' or $searchField == 'product_desc' or $searchField == '`p`.product_sku' or $searchField == '`l`.slug') ){ $joinLang = TRUE; } if (strpos ($searchField, '`') !== FALSE){ $keywords_plural = preg_replace('/\s+/', '%" AND '.$searchField.' LIKE "%', $keyword); $filter_search[] = $searchField . ' LIKE ' . $keywords_plural; } else { $keywords_plural = preg_replace('/\s+/', '%" AND `'.$searchField.'` LIKE "%', $keyword); $filter_search[] = '`'.$searchField.'` LIKE '.$keywords_plural; //$filter_search[] = '`' . $searchField . '` LIKE ' . $keyword; } } if (!empty($filter_search)) { $where[] = '(' . implode (' OR ', $filter_search) . ')'; } else { $where[] = '`product_name` LIKE ' . $keyword; $joinLang = TRUE; //If they have no check boxes selected it will default to product name at least. } } // vmdebug('my $this->searchcustoms ',$this->searchcustoms); if (!empty($this->searchcustoms)) { $joinCustom = TRUE; foreach ($this->searchcustoms as $key => $searchcustom) { $custom_search[] = '(pf.`virtuemart_custom_id`="' . (int)$key . '" and pf.`custom_value` like "%' . $this->_db->getEscaped ($searchcustom, TRUE) . '%")'; } $where[] = " ( " . implode (' OR ', $custom_search) . " ) "; } if ($onlyPublished) { $where[] = ' p.`published`="1" '; } if($isSite and !VmConfig::get('use_as_catalog',0)) { if (VmConfig::get('stockhandle','none')=='disableit_children') { $where[] = ' ((p.`product_in_stock` - p.`product_ordered`) >"0" OR (children.`product_in_stock` - children.`product_ordered`) > "0") '; $joinChildren = TRUE; } else if (VmConfig::get('stockhandle','none')=='disableit') { $where[] = ' p.`product_in_stock` - p.`product_ordered` >"0" '; } } if ($virtuemart_category_id > 0) { $joinCategory = TRUE; $where[] = ' `pc`.`virtuemart_category_id` = ' . $virtuemart_category_id; } else if ($isSite and !VmConfig::get('show_uncat_child_products',TRUE)) { $joinCategory = TRUE; $where[] = ' `pc`.`virtuemart_category_id` > 0 '; } if ($this->product_parent_id) { $where[] = ' p.`product_parent_id` = ' . $this->product_parent_id; } if ($isSite) { $usermodel = VmModel::getModel ('user'); $currentVMuser = $usermodel->getUser (); $virtuemart_shoppergroup_ids = (array)$currentVMuser->shopper_groups; if (is_array ($virtuemart_shoppergroup_ids)) { $sgrgroups = array(); foreach ($virtuemart_shoppergroup_ids as $key => $virtuemart_shoppergroup_id) { $sgrgroups[] = ' `ps`.`virtuemart_shoppergroup_id`= "' . (int)$virtuemart_shoppergroup_id . '" '; } $sgrgroups[] = ' `ps`.`virtuemart_shoppergroup_id` IS NULL '; $where[] = " ( " . implode (' OR ', $sgrgroups) . " ) "; $joinShopper = TRUE; } } if ($this->virtuemart_manufacturer_id) { $joinMf = TRUE; $where[] = ' `#__virtuemart_product_manufacturers`.`virtuemart_manufacturer_id` = ' . $this->virtuemart_manufacturer_id; } // Time filter if ($this->search_type != '') { $search_order = $this->_db->getEscaped (JRequest::getWord ('search_order') == 'bf' ? '<' : '>'); switch ($this->search_type) { case 'parent': $where[] = 'p.`product_parent_id` = "0"'; break; case 'product': $where[] = 'p.`modified_on` ' . $search_order . ' "' . $this->_db->getEscaped (JRequest::getVar ('search_date')) . '"'; break; case 'price': $joinPrice = TRUE; $where[] = 'pp.`modified_on` ' . $search_order . ' "' . $this->_db->getEscaped (JRequest::getVar ('search_date')) . '"'; break; case 'withoutprice': $joinPrice = TRUE; $where[] = 'pp.`product_price` IS NULL'; break; case 'stockout': $where[] = ' p.`product_in_stock`- p.`product_ordered` < 1'; break; case 'stocklow': $where[] = 'p.`product_in_stock`- p.`product_ordered` < p.`low_stock_notification`'; break; } } // special orders case //vmdebug('my filter ordering ',$this->filter_order); $ff_select_price = ''; switch ($this->filter_order) { case '`p`.product_special': if($isSite){ $where[] = ' p.`product_special`="1" '; // TODO Change to a individual button $orderBy = 'ORDER BY RAND()'; } else { $orderBy = 'ORDER BY p.`product_special`'; } break; case 'category_name': $orderBy = ' ORDER BY `category_name` '; $joinCategory = TRUE; $joinCatLang = true; break; case 'category_description': $orderBy = ' ORDER BY `category_description` '; $joinCategory = TRUE; $joinCatLang = true; break; case 'mf_name': $orderBy = ' ORDER BY `mf_name` '; $joinMf = TRUE; $joinMfLang = true; break; case 'pc.ordering': $orderBy = ' ORDER BY `pc`.`ordering` '; $joinCategory = TRUE; break; case 'product_price': //$filters[] = 'p.`virtuemart_product_id` = p.`virtuemart_product_id`'; //$orderBy = ' ORDER BY `product_price` '; //$orderBy = ' ORDER BY `ff_final_price`, `product_price` '; $orderBy = ' ORDER BY `product_price` '; $ff_select_price = ' , IF(pp.override, pp.product_override_price, pp.product_price) as product_price '; $joinPrice = TRUE; break; case '`p`.created_on': $orderBy = ' ORDER BY p.`created_on` '; break; default; if (!empty($this->filter_order)) { $orderBy = ' ORDER BY ' . $this->filter_order . ' '; } else { $this->filter_order_Dir = ''; } break; } //Group case from the modules if ($group) { $latest_products_days = VmConfig::get ('latest_products_days', 7); $latest_products_orderBy = VmConfig::get ('latest_products_orderBy','created_on'); $groupBy = 'group by p.`virtuemart_product_id` '; switch ($group) { case 'featured': $where[] = 'p.`product_special`="1" '; $orderBy = 'ORDER BY RAND() '; break; case 'latest': $date = JFactory::getDate (time () - (60 * 60 * 24 * $latest_products_days)); $dateSql = $date->toMySQL (); //$where[] = 'p.`' . $latest_products_orderBy . '` > "' . $dateSql . '" '; $orderBy = 'ORDER BY p.`' . $latest_products_orderBy . '`'; $this->filter_order_Dir = 'DESC'; break; case 'random': $orderBy = ' ORDER BY RAND() '; //LIMIT 0, '.(int)$nbrReturnProducts ; //TODO set limit LIMIT 0, '.(int)$nbrReturnProducts; break; case 'topten': $orderBy = ' ORDER BY p.`product_sales` '; //LIMIT 0, '.(int)$nbrReturnProducts; //TODO set limitLIMIT 0, '.(int)$nbrReturnProducts; $joinPrice = true; $where[] = 'pp.`product_price`>"0.0" '; $this->filter_order_Dir = 'DESC'; break; case 'recent': $rSession = JFactory::getSession(); $rIds = $rSession->get('vmlastvisitedproductids', array(), 'vm'); // get recent viewed from browser session return $rIds; } $this->searchplugin = FALSE; } } $joinedTables = array(); //This option switches between showing products without the selected language or only products with language. if($app->isSite() and !VmConfig::get('prodOnlyWLang',true)){ //Maybe we have to join the language to order by product name, description, etc,... if(!$joinLang){ $productLangFields = array('product_s_desc','product_desc','product_name','metadesc','metakey','slug'); foreach($productLangFields as $field){ if(strpos($orderBy,$field,6)!==FALSE){ $joinLang = true; break; } } } } else { $joinLang = true; } $select = ' p.`virtuemart_product_id`'.$ff_select_price.' FROM `#__virtuemart_products` as p '; if ($joinLang) { $joinedTables[] = ' INNER JOIN `#__virtuemart_products_' . VmConfig::$vmlang . '` as l using (`virtuemart_product_id`)'; } if ($joinShopper == TRUE) { $joinedTables[] = ' LEFT JOIN `#__virtuemart_product_shoppergroups` as ps ON p.`virtuemart_product_id` = `ps`.`virtuemart_product_id` '; //$joinedTables[] = ' LEFT OUTER JOIN `#__virtuemart_shoppergroups` as s ON s.`virtuemart_shoppergroup_id` = `#__virtuemart_product_shoppergroups`.`virtuemart_shoppergroup_id` '; } if ($joinCategory == TRUE or $joinCatLang) { $joinedTables[] = ' LEFT JOIN `#__virtuemart_product_categories` as pc ON p.`virtuemart_product_id` = `pc`.`virtuemart_product_id` '; if($joinCatLang){ $joinedTables[] = ' LEFT JOIN `#__virtuemart_categories_' . VMLANG . '` as c ON c.`virtuemart_category_id` = `pc`.`virtuemart_category_id`'; } } if ($joinMf == TRUE or $joinMfLang) { $joinedTables[] = ' LEFT JOIN `#__virtuemart_product_manufacturers` ON p.`virtuemart_product_id` = `#__virtuemart_product_manufacturers`.`virtuemart_product_id` '; if($joinMfLang){ $joinedTables[] = 'LEFT JOIN `#__virtuemart_manufacturers_' . VMLANG . '` as m ON m.`virtuemart_manufacturer_id` = `#__virtuemart_product_manufacturers`.`virtuemart_manufacturer_id` '; } } if ($joinPrice == TRUE) { $joinedTables[] = ' LEFT JOIN `#__virtuemart_product_prices` as pp ON p.`virtuemart_product_id` = pp.`virtuemart_product_id` '; } if ($this->searchcustoms) { $joinedTables[] = ' LEFT JOIN `#__virtuemart_product_customfields` as pf ON p.`virtuemart_product_id` = pf.`virtuemart_product_id` '; } if ($this->searchplugin !== 0) { if (!empty($PluginJoinTables)) { $plgName = $PluginJoinTables[0]; $joinedTables[] = ' LEFT JOIN `#__virtuemart_product_custom_plg_' . $plgName . '` as ' . $plgName . ' ON ' . $plgName . '.`virtuemart_product_id` = p.`virtuemart_product_id` '; } } if ($joinChildren) { $joinedTables[] = ' LEFT OUTER JOIN `#__virtuemart_products` children ON p.`virtuemart_product_id` = children.`product_parent_id` '; } if (count ($where) > 0) { $whereString = ' WHERE (' . implode ("\n AND ", $where) . ') '; } else { $whereString = ''; } //vmdebug ( $joinedTables.' joined ? ',$select, $joinedTables, $whereString, $groupBy, $orderBy, $this->filter_order_Dir ); /* jexit(); */ $this->orderByString = $orderBy; if($this->_onlyQuery){ return (array($select,$joinedTables,$where,$orderBy,$joinLang)); } $joinedTables = " \n".implode(" \n",$joinedTables); $product_ids = $this->exeSortSearchListQuery (2, $select, $joinedTables, $whereString, $groupBy, $orderBy, $this->filter_order_Dir, $nbrReturnProducts); return $product_ids; } /** * Override * * @see VmModel::setPaginationLimits() */ public function setPaginationLimits () { $app = JFactory::getApplication (); $view = JRequest::getWord ('view','virtuemart'); $cateid = JRequest::getInt ('virtuemart_category_id', -1); $manid = JRequest::getInt ('virtuemart_manufacturer_id', 0); $limitString = 'com_virtuemart.' . $view . 'c' . $cateid . '.limit'; $limit = (int)$app->getUserStateFromRequest ($limitString, 'limit'); $limitStartString = 'com_virtuemart.' . $view . '.limitstart'; if ($app->isSite () and ($cateid != -1 or $manid != 0) ) { $lastCatId = ShopFunctionsF::getLastVisitedCategoryId (); $lastManId = ShopFunctionsF::getLastVisitedManuId (); vmdebug('setPaginationLimits is site and $cateid,$manid ',$cateid,$lastCatId,$manid); if( !empty($cateid) and $cateid != -1) { $gCatId = $cateid; } else if( !empty($lastCatId) ) { $gCatId = $lastCatId; } if(!empty($gCatId)){ $catModel= VmModel::getModel('category'); $category = $catModel->getCategory($gCatId); } else { $category = new stdClass(); } if ((!empty($lastCatId) and $lastCatId != $cateid) or (!empty($manid) and $lastManId != $manid)) { //We are in a new category or another manufacturer, so we start at page 1 $limitStart = JRequest::getInt ('limitstart', 0); } else { //We were already in the category/manufacturer, so we take the value stored in the session $limitStartString = 'com_virtuemart.' . $view . 'c' . $cateid .'m'.$manid. '.limitstart'; $limitStart = $app->getUserStateFromRequest ($limitStartString, 'limitstart', JRequest::getInt ('limitstart', 0), 'int'); } if(empty($limit) and !empty($category->limit_list_initial)){ $suglimit = $category->limit_list_initial; } else if(!empty($limit)){ $suglimit = $limit; } else { $suglimit = VmConfig::get ('llimit_init_FE', 20); } if(empty($category->products_per_row)){ $category->products_per_row = VmConfig::get ('products_per_row', 3); } $rest = $suglimit%$category->products_per_row; $limit = $suglimit - $rest; if(!empty($category->limit_list_step)){ $prod_per_page = explode(",",$category->limit_list_step); } else { //fix by hjet $prod_per_page = explode(",",VmConfig::get('pagseq_'.$category->products_per_row)); } if($limit <= $prod_per_page['0'] && array_key_exists('0',$prod_per_page)){ $limit = $prod_per_page['0']; } //vmdebug('Calculated $limit ',$limit,$suglimit); } else { $limitStart = $app->getUserStateFromRequest ('com_virtuemart.' . $view . '.limitstart', 'limitstart', JRequest::getInt ('limitstart', 0), 'int'); } if(empty($limit)){ if($app->isSite()){ $limit = VmConfig::get ('llimit_init_FE'); } else { $limit = VmConfig::get ('llimit_init_BE'); } if(empty($limit)){ $limit = 30; } } $this->setState ('limit', $limit); $this->setState ($limitString, $limit); $this->_limit = $limit; //There is a strange error in the frontend giving back 9 instead of 10, or 24 instead of 25 //This functions assures that the steps of limitstart fit with the limit $limitStart = ceil ((float)$limitStart / (float)$limit) * $limit; $this->setState ('limitstart', $limitStart); $this->setState ($limitStartString, $limitStart); $this->_limitStart = $limitStart; return array($this->_limitStart, $this->_limit); } /** * This function creates a product with the attributes of the parent. * * @param int $virtuemart_product_id * @param boolean $front for frontend use * @param boolean $withCalc calculate prices? * @param boolean published * @param int quantity * @param boolean load customfields */ public function getProduct ($virtuemart_product_id = NULL, $front = TRUE, $withCalc = TRUE, $onlyPublished = TRUE, $quantity = 1,$customfields = TRUE,$virtuemart_shoppergroup_ids=0) { if (isset($virtuemart_product_id)) { $virtuemart_product_id = $this->setId ($virtuemart_product_id); } else { if (empty($this->_id)) { vmError('Can not return product with empty id'); return FALSE; } else { $virtuemart_product_id = $this->_id; } } if($virtuemart_shoppergroup_ids !=0 and is_array($virtuemart_shoppergroup_ids)){ $virtuemart_shoppergroup_idsString = implode('',$virtuemart_shoppergroup_ids); } else { $virtuemart_shoppergroup_idsString = $virtuemart_shoppergroup_ids; } $front = $front?TRUE:0; $withCalc = $withCalc?TRUE:0; $onlyPublished = $onlyPublished?TRUE:0; $customfields = $customfields?TRUE:0; $this->withRating = $this->withRating?TRUE:0; $productKey = $virtuemart_product_id.$front.$onlyPublished.$quantity.$virtuemart_shoppergroup_idsString.$withCalc.$customfields.$this->withRating; static $_products = array(); // vmdebug('$productKey, not from cache : '.$productKey); if (array_key_exists ($productKey, $_products)) { //vmdebug('getProduct, take from cache : '.$productKey); return $_products[$productKey]; } else if(!$customfields or !$withCalc){ $productKeyTmp = $virtuemart_product_id.$front.$onlyPublished.$quantity.$virtuemart_shoppergroup_idsString.TRUE.TRUE.TRUE; if (array_key_exists ($productKeyTmp, $_products)) { //vmdebug('getProduct, take from cache full product '.$productKeyTmp); return $_products[$productKeyTmp]; } } if ($this->memory_limit<$mem = round(memory_get_usage(FALSE)/(1024*1024),2)) { vmdebug ('Memory limit reached in model product getProduct('.$virtuemart_product_id.'), $customfields= '.$customfields.' consumed: '.$mem.'M'); vmError ('Memory limit '.$this->memory_limit.' reached in model product getProduct() ' . $virtuemart_product_id. ' tried to allocate '.$mem); return false; } $child = $this->getProductSingle ($virtuemart_product_id, $front,$quantity,$customfields,$virtuemart_shoppergroup_ids); if (!$child->published && $onlyPublished) { //vmdebug('getProduct child is not published, returning zero'); $_products[$productKey] = FALSE; return FALSE; } if(!isset($child->orderable)){ $child->orderable = TRUE; } //store the original parent id $pId = $child->virtuemart_product_id; $ppId = $child->product_parent_id; $published = $child->published; $i = 0; $runtime = microtime (TRUE) - $this->starttime; //Check for all attributes to inherited by parent products while (!empty($child->product_parent_id)) { $runtime = microtime (TRUE) - $this->starttime; if ($runtime >= $this->maxScriptTime) { vmdebug ('Max execution time reached in model product getProduct() ', $child); vmError ('Max execution time reached in model product getProduct() ' . $child->product_parent_id); break; } else { if ($i > 10) { vmdebug ('Time: ' . $runtime . ' Too many child products in getProduct() ', $child); vmError ('Time: ' . $runtime . ' Too many child products in getProduct() ' . $child->product_parent_id); break; } } $parentProduct = $this->getProductSingle ($child->product_parent_id, $front,$quantity,$customfields,$virtuemart_shoppergroup_ids); if ($child->product_parent_id === $parentProduct->product_parent_id) { vmError('Error, parent product with virtuemart_product_id = '.$parentProduct->virtuemart_product_id.' has same parent id like the child with virtuemart_product_id '.$child->virtuemart_product_id); break; } $attribs = get_object_vars ($parentProduct); foreach ($attribs as $k=> $v) { if ('product_in_stock' != $k and 'product_ordered' != $k) {// Do not copy parent stock into child if (strpos ($k, '_') !== 0 and empty($child->$k)) { $child->$k = $v; // vmdebug($child->product_parent_id.' $child->$k',$child->$k); } } } $i++; if ($child->product_parent_id != $parentProduct->product_parent_id) { $child->product_parent_id = $parentProduct->product_parent_id; } else { $child->product_parent_id = 0; } } //vmdebug('getProduct Time: '.$runtime); $child->published = $published; $child->virtuemart_product_id = $pId; $child->product_parent_id = $ppId; if ($withCalc) { $child->prices = $this->getPrice ($child, array(), 1); //vmdebug(' use of $child->prices = $this->getPrice($child,array(),1)'); } if (empty($child->product_template)) { $child->product_template = VmConfig::get ('producttemplate'); } if(!empty($child->canonCatLink)) { // Add the product link for canonical $child->canonical = 'index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $virtuemart_product_id . '&virtuemart_category_id=' . $child->canonCatLink; } else { $child->canonical = 'index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $virtuemart_product_id; } $child->canonical = JRoute::_ ($child->canonical,FALSE); if(!empty($child->virtuemart_category_id)) { $child->link = JRoute::_ ('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $virtuemart_product_id . '&virtuemart_category_id=' . $child->virtuemart_category_id, FALSE); } else { $child->link = $child->canonical; } $child->quantity = $quantity; $app = JFactory::getApplication (); if ($app->isSite () and VmConfig::get ('stockhandle', 'none') == 'disableit' and ($child->product_in_stock - $child->product_ordered) <= 0) { vmdebug ('STOCK 0', VmConfig::get ('use_as_catalog', 0), VmConfig::get ('stockhandle', 'none'), $child->product_in_stock); $_products[$productKey] = FALSE; } else { $_products[$productKey] = $child; } return $_products[$productKey]; } public function loadProductPrices($productId,$quantity,$virtuemart_shoppergroup_ids,$front){ $db = JFactory::getDbo(); $this->_nullDate = $db->getNullDate(); $jnow = JFactory::getDate(); $this->_now = $jnow->toMySQL(); //$productId = $this->_id===0? $product->virtuemart_product_id:$this->_id; //$productId = $product->virtuemart_product_id===0? $this->_id:$product->virtuemart_product_id; $q = 'SELECT * FROM `#__virtuemart_product_prices` WHERE `virtuemart_product_id` = "'.$productId.'" '; if($front){ if(count($virtuemart_shoppergroup_ids)>0){ $q .= ' AND ('; $sqrpss = ''; foreach($virtuemart_shoppergroup_ids as $sgrpId){ $sqrpss .= ' `virtuemart_shoppergroup_id` ="'.$sgrpId.'" OR '; } $q .= substr($sqrpss,0,-4); $q .= ' OR `virtuemart_shoppergroup_id` IS NULL OR `virtuemart_shoppergroup_id`="0") '; } $q .= ' AND ( (`product_price_publish_up` IS NULL OR `product_price_publish_up` = "' . $db->getEscaped($this->_nullDate) . '" OR `product_price_publish_up` <= "' .$db->getEscaped($this->_now) . '" ) AND (`product_price_publish_down` IS NULL OR `product_price_publish_down` = "' .$db->getEscaped($this->_nullDate) . '" OR product_price_publish_down >= "' . $db->getEscaped($this->_now) . '" ) )'; $quantity = (int)$quantity; if(!empty($quantity)){ $q .= ' AND( (`price_quantity_start` IS NULL OR `price_quantity_start`="0" OR `price_quantity_start` <= '.$quantity.') AND (`price_quantity_end` IS NULL OR `price_quantity_end`="0" OR `price_quantity_end` >= '.$quantity.') )'; } } else { $q .= ' ORDER BY `product_price` DESC'; } $db->setQuery($q); $prices = $db->loadAssocList(); $err = $db->getErrorMsg(); if(!empty($err)){ vmError('getProductSingle '.$err); } else { if($prices and count($prices)==0){ vmdebug('getProductSingle getPrice query',$q); } } return $prices; } public function getProductPrices(&$product,$quantity,$virtuemart_shoppergroup_ids,$front,$loop=false){ $product->product_price = null; $product->product_override_price = null; $product->override = null; $product->virtuemart_product_price_id = null; $product->virtuemart_shoppergroup_id = null; $product->product_price_publish_up = null; $product->product_price_publish_down = null; $product->price_quantity_start = null; $product->price_quantity_end = null; $productId = $product->virtuemart_product_id===0? $this->_id:$product->virtuemart_product_id; $product->prices = $this->loadProductPrices($productId,$quantity,$virtuemart_shoppergroup_ids,$front); $i = 0; $runtime = microtime (TRUE) - $this->starttime; $product_parent_id = $product->product_parent_id; //Check for all attributes to inherited by parent products if($loop) { while ( $product_parent_id and count($product->prices)==0) { $runtime = microtime (TRUE) - $this->starttime; if ($runtime >= $this->maxScriptTime) { vmdebug ('Max execution time reached in model product getProductPrices() ', $product); vmError ('Max execution time reached in model product getProductPrices() ' . $product->product_parent_id); break; } else { if ($i > 10) { vmdebug ('Time: ' . $runtime . ' Too many child products in getProductPrices() ', $product); vmError ('Time: ' . $runtime . ' Too many child products in getProductPrices() ' . $product->product_parent_id); break; } } $product->prices = $this->loadProductPrices($product_parent_id,$quantity,$virtuemart_shoppergroup_ids,$front); $i++; if(!isset($product->prices['salesPrice']) and $product->product_parent_id!=0){ $db = JFactory::getDbo(); $db->setQuery (' SELECT `product_parent_id` FROM `#__virtuemart_products` WHERE `virtuemart_product_id` =' . $product_parent_id); $product_parent_id = $db->loadResult (); } } } if(count($product->prices)===1){ unset($product->prices[0]['virtuemart_product_id']); unset($product->prices[0]['created_on']); unset($product->prices[0]['created_by']); unset($product->prices[0]['modified_on']); unset($product->prices[0]['modified_by']); unset($product->prices[0]['locked_on']); unset($product->prices[0]['locked_by']); //vmdebug('getProductPrices my price ',$product->prices[0]); // For merging of the price and product array, the shoppergroup id from price must be unsetted. // Otherwise the product becomes the shoppergroup from the price. $priceShoppergroupID = $product->prices[0]['virtuemart_shoppergroup_id']; unset($product->prices[0]['virtuemart_shoppergroup_id']); $product = (object)array_merge ((array)$product, (array)$product->prices[0]); $product->prices[0]['virtuemart_shoppergroup_id'] = $priceShoppergroupID; } else if ( $front and count($product->prices)>1 ) { foreach($product->prices as $price){ if(empty($price['virtuemart_shoppergroup_id'])){ if(empty($emptySpgrpPrice))$emptySpgrpPrice = $price; } else if(in_array($price['virtuemart_shoppergroup_id'],$virtuemart_shoppergroup_ids)){ $spgrpPrice = $price; break; } } if(!empty($spgrpPrice)){ $product = (object)array_merge ((array)$product, (array)$spgrpPrice); //$prices = (array)$spgrpPrice; } else if(!empty($emptySpgrpPrice)){ $product = (object)array_merge ((array)$product, (array)$emptySpgrpPrice); //$prices = (array)$emptySpgrpPrice; } else { vmWarn('COM_VIRTUEMART_PRICE_AMBIGUOUS'); $product = (object)array_merge ((array)$product, (array)$product->prices[0]); //$prices = (array)$product->prices[0]; } } } var $withRating = false; public function getProductSingle ($virtuemart_product_id = NULL, $front = TRUE, $quantity = 1,$customfields=TRUE,$virtuemart_shoppergroup_ids=0) { //$this->fillVoidProduct($front); if (!empty($virtuemart_product_id)) { $virtuemart_product_id = $this->setId ($virtuemart_product_id); } if($virtuemart_shoppergroup_ids===0){ $usermodel = VmModel::getModel ('user'); $currentVMuser = $usermodel->getCurrentUser (); if(!is_array($currentVMuser->shopper_groups)){ $virtuemart_shoppergroup_ids = (array)$currentVMuser->shopper_groups; } else { $virtuemart_shoppergroup_ids = $currentVMuser->shopper_groups; } } $virtuemart_shoppergroup_idsString = 0; if(!empty($virtuemart_shoppergroup_ids) and is_array($virtuemart_shoppergroup_ids)){ $virtuemart_shoppergroup_idsString = implode('',$virtuemart_shoppergroup_ids); } else if(!empty($virtuemart_shoppergroup_ids)){ $virtuemart_shoppergroup_idsString = $virtuemart_shoppergroup_ids; } $front = $front?TRUE:0; $customfields = $customfields?TRUE:0; $this->withRating = $this->withRating?TRUE:0; $productKey = $virtuemart_product_id.$virtuemart_shoppergroup_idsString.$quantity.$front.$customfields.$this->withRating; //$productKey = md5($virtuemart_product_id.$front.$quantity.$customfields.$this->withRating.$virtuemart_shoppergroup_idsString); static $_productsSingle = array(); if (array_key_exists ($productKey, $_productsSingle)) { //vmdebug('getProduct, take from cache '.$productKey); return $_productsSingle[$productKey]; } else if(!$customfields or !$this->withRating){ $productKey = $virtuemart_product_id.$virtuemart_shoppergroup_idsString.$quantity.TRUE.TRUE.$this->withRating; //vmdebug('getProductSingle, recreate $productKey '.$productKey); if (array_key_exists ($productKey, $_productsSingle)) { //vmdebug('getProductSingle, take from cache recreated key',$_productsSingle[$productKey]); return $_productsSingle[$productKey]; } } if (!empty($this->_id)) { // $joinIds = array('virtuemart_product_price_id' =>'#__virtuemart_product_prices','virtuemart_manufacturer_id' =>'#__virtuemart_product_manufacturers','virtuemart_customfield_id' =>'#__virtuemart_product_customfields'); if($this->withRating){ $joinIds = array('rating' => '#__virtuemart_ratings','virtuemart_manufacturer_id' => '#__virtuemart_product_manufacturers', 'virtuemart_customfield_id' => '#__virtuemart_product_customfields'); } else { $joinIds = array('virtuemart_manufacturer_id' => '#__virtuemart_product_manufacturers', 'virtuemart_customfield_id' => '#__virtuemart_product_customfields'); } $product = $this->getTable ('products'); $product->load ($this->_id, 0, 0, $joinIds); $xrefTable = $this->getTable ('product_medias'); $product->virtuemart_media_id = $xrefTable->load ((int)$this->_id); // Load the shoppers the product is available to for Custom Shopper Visibility $product->shoppergroups = $this->getProductShoppergroups ($this->_id); if (!empty($product->shoppergroups) and $front) { if (!class_exists ('VirtueMartModelUser')) { require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'user.php'); } $commonShpgrps = array_intersect ($virtuemart_shoppergroup_ids, $product->shoppergroups); if (empty($commonShpgrps)) { vmdebug('getProductSingle creating void product, usergroup does not fit ',$product->shoppergroups); return $this->fillVoidProduct ($front); } } $this->getProductPrices($product,$quantity,$virtuemart_shoppergroup_ids,$front); if (!empty($product->virtuemart_manufacturer_id)) { $mfTable = $this->getTable ('manufacturers'); $mfTable->load ((int)$product->virtuemart_manufacturer_id); $product = (object)array_merge ((array)$mfTable, (array)$product); } else { $product->virtuemart_manufacturer_id = array(); $product->mf_name = ''; $product->mf_desc = ''; $product->mf_url = ''; } // Load the categories the product is in //$product->categories = $this->getProductCategories ($this->_id, $front); $product->categories = $this->getProductCategories ($this->_id, FALSE); //We need also the unpublished categories, else the calculation rules do not work if(!empty($product->product_url)){ $product->canonCatLink = $product->product_url; } else if(!empty($product->categories)){ $categories = $this->getProductCategories ($this->_id, TRUE); //only published if($categories){ if(!is_array($categories)) $categories = (array)$categories; $product->canonCatLink = $categories[0]; } } $product->virtuemart_category_id = 0; if ($front) { if (!empty($product->categories) and is_array ($product->categories) and count($product->categories)>1){ if (!class_exists ('shopFunctionsF')) { require(JPATH_VM_SITE . DS . 'helpers' . DS . 'shopfunctionsf.php'); } //We must first check if we come from another category, due the canoncial link we would have always the same catgory id for a product //But then we would have wrong neighbored products / category and product layouts $last_category_id = shopFunctionsF::getLastVisitedCategoryId (); if ($last_category_id!==0 and in_array ($last_category_id, $product->categories)) { $product->virtuemart_category_id = $last_category_id; //vmdebug('I take for product the last category ',$last_category_id,$product->categories); } else { $virtuemart_category_id = vRequest::getInt ('virtuemart_category_id', 0); if ($virtuemart_category_id!==0 and in_array ($virtuemart_category_id, $product->categories)) { $product->virtuemart_category_id = $virtuemart_category_id; //vmdebug('I take for product the requested category ',$virtuemart_category_id,$product->categories); } else { if (!empty($product->categories) and is_array ($product->categories) and array_key_exists (0, $product->categories)) { $product->virtuemart_category_id = $product->canonCatLink; //vmdebug('I take for product the main category ',$product->virtuemart_category_id,$product->categories); } } } } else if(!empty($product->canonCatLink)) { $product->virtuemart_category_id = $product->canonCatLink; } } else { //This construction should allow us to see category depended prices in the BE $virtuemart_category_id = JRequest::getInt ('virtuemart_category_id', 0); if($virtuemart_category_id!==0 and !empty($product->categories) ) { if(is_array($product->categories) and in_array ($virtuemart_category_id, $product->categories)){ $product->virtuemart_category_id = $virtuemart_category_id; } else if($product->categories==$virtuemart_category_id) { $product->virtuemart_category_id = $virtuemart_category_id; } } if (empty($product->virtuemart_category_id)) { if (!empty($product->categories) and is_array ($product->categories) and !empty($product->categories[0])) { $product->virtuemart_category_id = $product->categories[0]; } else { $product->virtuemart_category_id = null; } } // vmdebug('getProductSingle BE request $virtuemart_category_id',$virtuemart_category_id,$product->virtuemart_category_id); } if(!empty($product->virtuemart_category_id)){ $q = 'SELECT `ordering`,`id` FROM `#__virtuemart_product_categories` WHERE `virtuemart_product_id` = "' . $this->_id . '" and `virtuemart_category_id`= "' . $product->virtuemart_category_id . '" '; $this->_db->setQuery ($q); // change for faster ordering $ordering = $this->_db->loadObject (); if (!empty($ordering)) { $product->ordering = $ordering->ordering; //This is the ordering id in the list to store the ordering notice by Max Milbers $product->id = $ordering->id; } else { $product->ordering = $this->_autoOrder++; $product->id = $this->_autoOrder; vmdebug('$product->virtuemart_category_id no ordering stored for '.$ordering->id); } $catTable = $this->getTable ('categories'); $catTable->load ($product->virtuemart_category_id); $product->category_name = $catTable->category_name; } else { $product->category_name = null; $product->virtuemart_category_id = null; $product->ordering = null; $product->id = $this->_autoOrder++; vmdebug('$product->virtuemart_category_id is empty'); } if (!$front and $customfields) { if(!$this->listing){ $customfieldModel = VmModel::getModel ('Customfields'); $product->customfields = $customfieldModel->getproductCustomslist ($this->_id); if (empty($product->customfields) and !empty($product->product_parent_id)) { //$product->customfields = $this->productCustomsfieldsClone($product->product_parent_id,true) ; $product->customfields = $customfieldModel->getproductCustomslist ($product->product_parent_id, $this->_id); $product->customfields_fromParent = TRUE; } } } else if($customfields){ //only needed in FE productdetails, is now loaded in the view.html.php // /* Load the neighbours */ // $product->neighbours = $this->getNeighborProducts($product); // Fix the product packaging if ($product->product_packaging) { $product->packaging = $product->product_packaging & 0xFFFF; $product->box = ($product->product_packaging >> 16) & 0xFFFF; } else { $product->packaging = ''; $product->box = ''; } // set the custom variants //vmdebug('getProductSingle id '.$product->virtuemart_product_id.' $product->virtuemart_customfield_id '.$product->virtuemart_customfield_id); if (!empty($product->virtuemart_customfield_id)) { $customfieldModel = VmModel::getModel ('Customfields'); // Load the custom product fields $product->customfields = $customfieldModel->getProductCustomsField ($product); $product->customfieldsRelatedCategories = $customfieldModel->getProductCustomsFieldRelatedCategories ($product); $product->customfieldsRelatedProducts = $customfieldModel->getProductCustomsFieldRelatedProducts ($product); // custom product fields for add to cart $product->customfieldsCart = $customfieldModel->getProductCustomsFieldCart ($product); $child = $this->getProductChilds ($this->_id); $product->customsChilds = $customfieldModel->getProductCustomsChilds ($child, $this->_id); } // Check the stock level if (empty($product->product_in_stock)) { $product->product_in_stock = 0; } } $_productsSingle[$productKey] = $product; } else { $_productsSingle[$productKey] = $this->fillVoidProduct ($front); } $this->product = $_productsSingle[$productKey]; return $_productsSingle[$productKey]; } /** * This fills the empty properties of a product * todo add if(!empty statements * * @author Max Milbers * @param unknown_type $product * @param unknown_type $front */ private function fillVoidProduct ($front = TRUE) { /* Load an empty product */ $product = $this->getTable ('products'); $product->load (); /* Add optional fields */ $product->virtuemart_manufacturer_id = NULL; $product->virtuemart_product_price_id = NULL; if (!class_exists ('VirtueMartModelVendor')) { require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'vendor.php'); } //$product->virtuemart_vendor_id = VirtueMartModelVendor::getLoggedVendor(); $product->product_price = NULL; $product->product_currency = NULL; $product->product_price_quantity_start = NULL; $product->product_price_quantity_end = NULL; $product->product_price_publish_up = NULL; $product->product_price_publish_down = NULL; $product->product_tax_id = NULL; $product->product_discount_id = NULL; $product->product_override_price = NULL; $product->override = NULL; $product->categories = array(); $product->shoppergroups = array(); if ($front) { $product->link = ''; $product->prices = array(); $product->virtuemart_category_id = 0; $product->virtuemart_shoppergroup_id = 0; $product->mf_name = ''; $product->packaging = ''; $product->related = ''; $product->box = ''; } return $product; } /** * Load the product category * * @author Kohl Patrick,Max Milbers * @return array list of categories product is in */ public function getProductCategories ($virtuemart_product_id = 0, $front = FALSE) { $categories = array(); if ($virtuemart_product_id > 0) { $q = 'SELECT pc.`virtuemart_category_id` FROM `#__virtuemart_product_categories` as pc'; if ($front) { $q .= ' LEFT JOIN `#__virtuemart_categories` as c ON c.`virtuemart_category_id` = pc.`virtuemart_category_id`'; } $q .= ' WHERE pc.`virtuemart_product_id` = ' . (int)$virtuemart_product_id; if ($front) { $q .= ' AND `published`=1 ORDER BY `c`.`ordering` ASC'; } //$q .= ' ORDER BY `pc`.`ordering` DESC '; $this->_db->setQuery ($q); $categories = $this->_db->loadResultArray (); } return $categories; } /** * Load the product shoppergroups * * @author Kohl Patrick,Max Milbers, Cleanshooter * @return array list of updateProductShoppergroupsTable that can view the product */ private function getProductShoppergroups ($virtuemart_product_id = 0) { $shoppergroups = array(); if ($virtuemart_product_id > 0) { $q = 'SELECT `virtuemart_shoppergroup_id` FROM `#__virtuemart_product_shoppergroups` WHERE `virtuemart_product_id` = "' . (int)$virtuemart_product_id . '"'; $this->_db->setQuery ($q); $shoppergroups = $this->_db->loadResultArray (); } return $shoppergroups; } /** * Get the products in a given category * * @author RolandD * @access public * @param int $virtuemart_category_id the category ID where to get the products for * @return array containing product objects */ public function getProductsInCategory ($categoryId) { $ids = $this->sortSearchListQuery (TRUE, $categoryId); $this->products = $this->getProducts ($ids); return $this->products; } /** * Loads different kind of product lists. * you can load them with calculation or only published onces, very intersting is the loading of groups * valid values are latest, topten, featured, recent. * * The function checks itself by the config if the user is allowed to see the price or published products * * @author Max Milbers */ public function getProductListing ($group = FALSE, $nbrReturnProducts = FALSE, $withCalc = TRUE, $onlyPublished = TRUE, $single = FALSE, $filterCategory = TRUE, $category_id = 0) { $app = JFactory::getApplication (); if ($app->isSite ()) { $front = TRUE; if (!class_exists ('Permissions')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); } if (!Permissions::getInstance ()->check ('admin', 'storeadmin')) { $onlyPublished = TRUE; if ($show_prices = VmConfig::get ('show_prices', 1) == '0') { $withCalc = FALSE; } } } else { $front = FALSE; } $this->setFilter (); if ($filterCategory === TRUE) { if ($category_id) { $this->virtuemart_category_id = $category_id; } } else { $this->virtuemart_category_id = FALSE; } $ids = $this->sortSearchListQuery ($onlyPublished, $this->virtuemart_category_id, $group, $nbrReturnProducts); //quickndirty hack for the BE list, we can do that, because in vm2.1 this is anyway fixed correctly $this->listing = TRUE; $products = $this->getProducts ($ids, $front, $withCalc, $onlyPublished, $single); $this->listing = FALSE; return $products; } /** * overriden getFilter to persist filters * * @author OSP */ public function setFilter () { $app = JFactory::getApplication (); if (!$app->isSite ()) { //persisted filter only in admin $view = JRequest::getWord ('view'); $mainframe = JFactory::getApplication (); $this->virtuemart_category_id = $mainframe->getUserStateFromRequest ('com_virtuemart.' . $view . '.filter.virtuemart_category_id', 'virtuemart_category_id', 0, 'int'); $this->setState ('virtuemart_category_id', $this->virtuemart_category_id); $this->virtuemart_manufacturer_id = $mainframe->getUserStateFromRequest ('com_virtuemart.' . $view . '.filter.virtuemart_manufacturer_id', 'virtuemart_manufacturer_id', 0, 'int'); $this->setState ('virtuemart_manufacturer_id', $this->virtuemart_manufacturer_id); } else { $this->virtuemart_category_id = JRequest::getInt ('virtuemart_category_id', FALSE); } } /** * Returns products for given array of ids * * @author Max Milbers * @param int $productIds * @param boolean $front * @param boolean $withCalc * @param boolean $onlyPublished */ public function getProducts ($productIds, $front = TRUE, $withCalc = TRUE, $onlyPublished = TRUE, $single = FALSE) { if (empty($productIds)) { return array(); } $usermodel = VmModel::getModel ('user'); $currentVMuser = $usermodel->getCurrentUser (); if(!is_array($currentVMuser->shopper_groups)){ $virtuemart_shoppergroup_ids = (array)$currentVMuser->shopper_groups; } else { $virtuemart_shoppergroup_ids = $currentVMuser->shopper_groups; } $maxNumber = VmConfig::get ('absMaxProducts', 700); $products = array(); $i = 0; if ($single) { foreach ($productIds as $id) { if ($product = $this->getProductSingle ((int)$id, $front,1,TRUE,$virtuemart_shoppergroup_ids)) { $products[] = $product; $i++; } if ($i > $maxNumber) { vmdebug ('Better not to display more than ' . $maxNumber . ' products'); return $products; } } } else { foreach ($productIds as $id) { if ($product = $this->getProduct ((int)$id, $front, $withCalc, $onlyPublished, 1, TRUE, $virtuemart_shoppergroup_ids)) { $products[] = $product; $i++; } if ($i > $maxNumber) { vmdebug ('Better not to display more than ' . $maxNumber . ' products'); return $products; } } } return $products; } /** * This function retrieves the "neighbor" products of a product specified by $virtuemart_product_id * Neighbors are the previous and next product in the current list * * @author Max Milbers * @param object $product The product to find the neighours of * @return array */ public function getNeighborProducts ($product, $onlyPublished = TRUE, $max = 1) { $db = JFactory::getDBO (); $neighbors = array('previous' => '', 'next' => ''); $oldDir = $this->filter_order_Dir; $this->_onlyQuery = true; if($this->filter_order_Dir=='ASC'){ $direction = 'DESC'; $op = '<='; } else { $direction = 'ASC'; $op = '>='; } $this->filter_order_Dir = $direction; //We try the method to get exact the next product, the other method would be to get the list of the browse view again and do a match //with the product id and giving back the neighbours $queryArray = $this->sortSearchListQuery($onlyPublished,(int)$product->virtuemart_category_id,false,1); if(isset($queryArray[1])){ $pos= strpos($queryArray[3],'ORDER BY'); $sp = array(); if($pos){ $orderByName = trim(substr ($queryArray[3],($pos+8)) ); $orderByName = str_replace('`','',$orderByName); if(strpos($orderByName,'.')){ $sp = explode('.',$orderByName); $orderByName = $sp[1]; } } $q = 'SELECT p.`virtuemart_product_id`, l.`product_name`, `pc`.ordering FROM `#__virtuemart_products` as p'; $joinT = ''; if(is_array($queryArray[1])){ $joinT = implode('',$queryArray[1]); } $q .= $joinT . ' WHERE (' . implode (' AND ', $queryArray[2]) . ') AND l.`virtuemart_product_id`!="'.$product->virtuemart_product_id.'" '; if(isset($product->$orderByName)){ $orderByValue = $product->$orderByName; if(isset($sp[0])){ $orderByName = '`'.$sp[0].'`.'.$orderByName; } } else { $orderByName = 'product_name'; $orderByValue = $product->product_name; } foreach ($neighbors as &$neighbor) { $qm = ' AND '.$orderByName.' '.$op.' "'.$orderByValue.'" ORDER BY '.$orderByName.' '.$direction.' LIMIT 1'; $db->setQuery ($q.$qm); //vmdebug('getNeighborProducts ',$q.$qm); if ($result = $db->loadAssocList ()) { $neighbor = $result; } if($this->filter_order_Dir=='ASC'){ $direction = 'DESC'; $op = '<='; } else { $direction = 'ASC'; $op = '>='; } } } $this->filter_order_Dir = $oldDir; $this->_onlyQuery = false; return $neighbors; } /* reorder product in one category * TODO this not work perfect ! (Note by Patrick Kohl) */ function saveorder ($cid = array(), $order, $filter = NULL) { JRequest::checkToken () or jexit ('Invalid Token'); $virtuemart_category_id = JRequest::getInt ('virtuemart_category_id', 0); $q = 'SELECT `id`,`ordering` FROM `#__virtuemart_product_categories` WHERE virtuemart_category_id=' . (int)$virtuemart_category_id . ' ORDER BY `ordering` ASC'; $this->_db->setQuery ($q); $pkey_orders = $this->_db->loadObjectList (); $tableOrdering = array(); foreach ($pkey_orders as $orderTmp) { $tableOrdering[$orderTmp->id] = $orderTmp->ordering; } // set and save new ordering foreach ($order as $key => $ord) { $tableOrdering[$key] = $ord; } asort ($tableOrdering); $i = 1; $ordered = 0; foreach ($tableOrdering as $key => $ord) { // if ($order != $i) { $this->_db->setQuery ('UPDATE `#__virtuemart_product_categories` SET `ordering` = ' . $i . ' WHERE `id` = ' . (int)$key . ' '); if (!$this->_db->query ()) { vmError ($this->_db->getErrorMsg ()); return FALSE; } $ordered++; // } $i++; } if ($ordered) { $msg = JText::sprintf ('COM_VIRTUEMART_ITEMS_MOVED', $ordered); } else { $msg = JText::_ ('COM_VIRTUEMART_ITEMS_NOT_MOVED'); } JFactory::getApplication ()->redirect ('index.php?option=com_virtuemart&view=product&virtuemart_category_id=' . $virtuemart_category_id, $msg); } /** * Moves the order of a record * * @param integer The increment to reorder by */ function move ($direction, $filter = NULL) { JRequest::checkToken () or jexit ('Invalid Token'); // Check for request forgeries $table = $this->getTable ('product_categories'); $table->move ($direction); JFactory::getApplication ()->redirect ('index.php?option=com_virtuemart&view=product&virtuemart_category_id=' . JRequest::getInt ('virtuemart_category_id', 0)); } /** * Store a product * * @author Max Milbers * @param $product given as reference * @param bool $isChild Means not that the product is child or not. It means if the product should be threated as child * @return bool */ public function store (&$product, $isChild = FALSE) { JRequest::checkToken () or jexit ('Invalid Token'); if ($product) { $data = (array)$product; } if (!class_exists ('Permissions')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); $perm = Permissions::getInstance(); $superVendor = $perm->isSuperVendor(); if(empty($superVendor)){ vmError('You are not a vendor or administrator, storing of product cancelled'); return FALSE; } if (isset($data['intnotes'])) { $data['intnotes'] = trim ($data['intnotes']); } // Setup some place holders $product_data = $this->getTable ('products'); if(!empty($data['virtuemart_product_id'])){ $product_data -> load($data['virtuemart_product_id']); } //Set the decimals like product packaging //$decimals = array('product_length','product_width','product_height','product_weight','product_packaging'); foreach($this->decimals as $decimal){ if (array_key_exists ($decimal, $data)) { if(!empty($data[$decimal])){ $data[$decimal] = str_replace(',','.',$data[$decimal]); } else { $data[$decimal] = null; $product_data->$decimal = null; //vmdebug('Store product, set $decimal '.$decimal.' = null'); } } } //with the true, we do preloading and preserve so old values note by Max Milbers // $product_data->bindChecknStore ($data, $isChild); //We prevent with this line, that someone is storing a product as its own parent if(!empty($product_data->product_parent_id) and $product_data->product_parent_id == $data['virtuemart_product_id']){ $product_data->product_parent_id = 0; } $stored = $product_data->bindChecknStore ($data, false); $errors = $product_data->getErrors (); if(!$stored or count($errors)>0){ foreach ($errors as $error) { vmError ('Product store '.$error); } if(!$stored){ vmError('You are not an administrator or the correct vendor, storing of product cancelled'); } return FALSE; } $this->_id = $data['virtuemart_product_id'] = (int)$product_data->virtuemart_product_id; if (empty($this->_id)) { vmError('Product not stored, no id'); return FALSE; } //We may need to change this, the reason it is not in the other list of commands for parents if (!$isChild) { if (!empty($data['save_customfields'])) { if (!class_exists ('VirtueMartModelCustomfields')) { require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'customfields.php'); } VirtueMartModelCustomfields::storeProductCustomfields ('product', $data, $product_data->virtuemart_product_id); } } // Get old IDS $old_price_ids = $this->loadProductPrices($this->_id,0,0,false); //vmdebug('$old_price_ids ',$old_price_ids); if (isset($data['mprices']['product_price']) and count($data['mprices']['product_price']) > 0){ foreach($data['mprices']['product_price'] as $k => $product_price){ $pricesToStore = array(); $pricesToStore['virtuemart_product_id'] = $this->_id; $pricesToStore['virtuemart_product_price_id'] = (int)$data['mprices']['virtuemart_product_price_id'][$k]; if (!$isChild){ //$pricesToStore['basePrice'] = $data['mprices']['basePrice'][$k]; $pricesToStore['product_override_price'] = $data['mprices']['product_override_price'][$k]; $pricesToStore['override'] = (int)$data['mprices']['override'][$k]; $pricesToStore['virtuemart_shoppergroup_id'] = (int)$data['mprices']['virtuemart_shoppergroup_id'][$k]; $pricesToStore['product_tax_id'] = (int)$data['mprices']['product_tax_id'][$k]; $pricesToStore['product_discount_id'] = (int)$data['mprices']['product_discount_id'][$k]; $pricesToStore['product_currency'] = (int)$data['mprices']['product_currency'][$k]; $pricesToStore['product_price_publish_up'] = $data['mprices']['product_price_publish_up'][$k]; $pricesToStore['product_price_publish_down'] = $data['mprices']['product_price_publish_down'][$k]; $pricesToStore['price_quantity_start'] = (int)$data['mprices']['price_quantity_start'][$k]; $pricesToStore['price_quantity_end'] = (int)$data['mprices']['price_quantity_end'][$k]; } if (!$isChild and isset($data['mprices']['use_desired_price'][$k]) and $data['mprices']['use_desired_price'][$k] == "1") { if (!class_exists ('calculationHelper')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'calculationh.php'); } $calculator = calculationHelper::getInstance (); $pricesToStore['salesPrice'] = $data['mprices']['salesPrice'][$k]; $pricesToStore['product_price'] = $data['mprices']['product_price'][$k] = $calculator->calculateCostprice ($this->_id, $pricesToStore); unset($data['mprices']['use_desired_price'][$k]); } else { if(isset($data['mprices']['product_price'][$k]) ){ $pricesToStore['product_price'] = $data['mprices']['product_price'][$k]; } } if ($isChild) $childPrices = $this->loadProductPrices($this->_id,0,0,false); if ((isset($pricesToStore['product_price']) and $pricesToStore['product_price']!='') || (isset($childPrices) and count($childPrices)>1)) { if ($isChild) { //$childPrices = $this->loadProductPrices($pricesToStore['virtuemart_product_price_id'],0,0,false); if(is_array($old_price_ids) and count($old_price_ids)>1){ //We do not touch multiple child prices. Because in the parent list, we see no price, the gui is //missing to reflect the information properly. $pricesToStore = false; $old_price_ids = array(); } else { unset($data['mprices']['product_override_price'][$k]); unset($pricesToStore['product_override_price']); unset($data['mprices']['override'][$k]); unset($pricesToStore['override']); } } //$data['mprices'][$k] = $data['virtuemart_product_id']; if($pricesToStore){ $toUnset = array(); foreach($old_price_ids as $key => $oldprice){ if(array_search($pricesToStore['virtuemart_product_price_id'], $oldprice )){ $pricesToStore = array_merge($oldprice,$pricesToStore); $toUnset[] = $key; } } $this->updateXrefAndChildTables ($pricesToStore, 'product_prices',$isChild); foreach($toUnset as $key){ unset( $old_price_ids[ $key ] ); } } } } } if ( count($old_price_ids) ) { $oldPriceIdsSql = array(); foreach($old_price_ids as $oldPride){ $oldPriceIdsSql[] = $oldPride['virtuemart_product_price_id']; } // delete old unused Prices $this->_db->setQuery( 'DELETE FROM `#__virtuemart_product_prices` WHERE `virtuemart_product_price_id` in ("'.implode('","', $oldPriceIdsSql ).'") '); $this->_db->query(); $err = $this->_db->getErrorMsg(); if(!empty($err)){ vmWarn('In store prodcut, deleting old price error',$err); } } if (!empty($data['childs'])) { foreach ($data['childs'] as $productId => $child) { $child['product_parent_id'] = $data['virtuemart_product_id']; $child['virtuemart_product_id'] = $productId; $this->store ($child, TRUE); } } if (!$isChild) { $data = $this->updateXrefAndChildTables ($data, 'product_shoppergroups'); $data = $this->updateXrefAndChildTables ($data, 'product_manufacturers'); if (!empty($data['categories']) && count ($data['categories']) > 0) { $data['virtuemart_category_id'] = $data['categories']; } else { $data['virtuemart_category_id'] = array(); } $data = $this->updateXrefAndChildTables ($data, 'product_categories'); // Update waiting list //TODO what is this doing? if (!empty($data['notify_users'])) { if ($data['product_in_stock'] > 0 && $data['notify_users'] == '1') { $waitinglist = VmModel::getModel ('Waitinglist'); $waitinglist->notifyList ($data['virtuemart_product_id']); } } // Process the images $mediaModel = VmModel::getModel ('Media'); $mediaModel->storeMedia ($data, 'product'); $errors = $mediaModel->getErrors (); foreach ($errors as $error) { vmError ($error); } } return $product_data->virtuemart_product_id; } public function updateXrefAndChildTables ($data, $tableName, $preload = FALSE) { JRequest::checkToken () or jexit ('Invalid Token'); //First we load the xref table, to get the old data $product_table_Parent = $this->getTable ($tableName); //We must go that way, because the load function of the vmtablexarry // is working different. if($preload){ //$product_table_Parent->setOrderable('ordering',false); $orderingA = $product_table_Parent->load($data['virtuemart_product_id']); } $product_table_Parent->bindChecknStore ($data); $errors = $product_table_Parent->getErrors (); foreach ($errors as $error) { vmError ($error); } return $data; } /** * This function creates a child for a given product id * * @author Max Milbers * @author Patrick Kohl * @param int id of parent id */ public function createChild ($id) { // created_on , modified_on $db = JFactory::getDBO (); $vendorId = 1; $childs = count ($this->getProductChildIds ($id)); $db->setQuery ('SELECT `product_name`,`slug` FROM `#__virtuemart_products` JOIN `#__virtuemart_products_' . VMLANG . '` as l using (`virtuemart_product_id`) WHERE `virtuemart_product_id`=' . (int)$id); $parent = $db->loadObject (); $prodTable = $this->getTable ('products'); //$newslug = $parent->slug . $id . rand (1, 9); $newslug = $prodTable->checkCreateUnique('products_' . VmConfig::$vmlang,$parent->slug); $data = array('product_name' => $parent->product_name, 'slug' => $newslug, 'virtuemart_vendor_id' => (int)$vendorId, 'product_parent_id' => (int)$id); $prodTable->bindChecknStore ($data); $langs = (array)VmConfig::get ('active_languages'); if (count ($langs) > 1) { foreach ($langs as $lang) { $lang = str_replace ('-', '_', strtolower ($lang)); $db->setQuery ('SELECT `product_name` FROM `#__virtuemart_products_' . $lang . '` WHERE `virtuemart_product_id` = "' . $prodTable->virtuemart_product_id . '" '); $res = $db->loadResult (); if (!$res) { $db->setQuery ('INSERT INTO `#__virtuemart_products_' . $lang . '` (`virtuemart_product_id`,`slug`) VALUES ("' . $prodTable->virtuemart_product_id . '","' . $newslug . '");'); $db->query (); $err = $db->getErrorMsg (); if (!empty($err)) { vmError ('Database error: createChild ' . $err); } } } } return $data['virtuemart_product_id']; } /** * Creates a clone of a given product id * * @author Max Milbers * @param int $virtuemart_product_id */ public function createClone ($id) { // if (is_array($cids)) $cids = array($cids); $product = $this->getProduct ($id, FALSE, FALSE, FALSE); $product->field = $this->productCustomsfieldsClone ($id); // vmdebug('$product->field',$product->field); $product->virtuemart_product_id = $product->virtuemart_product_price_id = 0; $product->mprices = $this->productPricesClone ($id); //Lets check if the user is admin or the mainvendor if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); $admin = Permissions::getInstance()->check('admin'); if($admin){ $product->created_on = "0000-00-00 00:00:00"; $product->created_by = 0; } $product->slug = $product->slug . '-' . $id; $product->save_customfields = 1; JPluginHelper::importPlugin ('vmcustom'); $dispatcher = JDispatcher::getInstance (); $result=$dispatcher->trigger ('plgVmCloneProduct', array(&$product)); $this->store ($product); return $this->_id; } private function productPricesClone ($virtuemart_product_id) { $this->_db = JFactory::getDBO (); $q = "SELECT * FROM `#__virtuemart_product_prices`"; $q .= " WHERE `virtuemart_product_id` = " . $virtuemart_product_id; $this->_db->setQuery ($q); $prices = $this->_db->loadAssocList (); if ($prices) { foreach ($prices as $k => &$price) { unset($price['virtuemart_product_id'], $price['virtuemart_product_price_id']); if(empty($mprices[$k])) $mprices[$k] = array(); foreach ($price as $i => $value) { if(empty($mprices[$i])) $mprices[$i] = array(); $mprices[$i][$k] = $value; } } return $mprices; } else { return NULL; } } /* look if whe have a product type */ private function productCustomsfieldsClone ($virtuemart_product_id) { $this->_db = JFactory::getDBO (); $q = "SELECT * FROM `#__virtuemart_product_customfields`"; $q .= " WHERE `virtuemart_product_id` = " . $virtuemart_product_id; $this->_db->setQuery ($q); $customfields = $this->_db->loadAssocList (); if ($customfields) { foreach ($customfields as &$customfield) { unset($customfield['virtuemart_product_id'], $customfield['virtuemart_customfield_id']); } return $customfields; } else { return NULL; } } /** * removes a product and related table entries * * @author Max Milberes */ public function remove ($ids) { $table = $this->getTable ($this->_maintablename); $cats = $this->getTable ('product_categories'); $customfields = $this->getTable ('product_customfields'); $manufacturers = $this->getTable ('product_manufacturers'); $medias = $this->getTable ('product_medias'); $prices = $this->getTable ('product_prices'); $shop = $this->getTable ('product_shoppergroups'); $rating = $this->getTable ('ratings'); $review = $this->getTable ('rating_reviews'); $votes = $this->getTable ('rating_votes'); $ok = TRUE; foreach ($ids as $id) { $childIds = $this->getProductChildIds ($id); if (!empty($childIds)) { vmError (JText::_ ('COM_VIRTUEMART_PRODUCT_CANT_DELETE_CHILD')); $ok = FALSE; continue; } if (!$table->delete ($id)) { vmError ('Product delete ' . $table->getError ()); $ok = FALSE; } if (!$cats->delete ($id, 'virtuemart_product_id')) { vmError ('Product delete categories ' . $cats->getError ()); $ok = FALSE; } if (!$customfields->delete ($id, 'virtuemart_product_id')) { vmError ('Product delete customs ' . $customfields->getError ()); $ok = FALSE; } $db = JFactory::getDbo(); $q = 'SELECT `virtuemart_customfield_id` FROM `#__virtuemart_product_customfields` as pc '; $q .= 'LEFT JOIN `#__virtuemart_customs`as c using (`virtuemart_custom_id`) WHERE pc.`custom_value` = "' . $id . '" AND `field_type`= "R"'; $db->setQuery($q); $list = $db->loadResultArray(); if ($list) { $listInString = implode(',',$list); //Delete media xref $query = 'DELETE FROM `#__virtuemart_product_customfields` WHERE `virtuemart_customfield_id` IN ('. $listInString .') '; $this->_db->setQuery($query); if(!$this->_db->query()){ vmError( $this->_db->getErrorMsg() ); } } if (!$manufacturers->delete ($id, 'virtuemart_product_id')) { vmError ('Product delete manufacturer ' . $manufacturers->getError ()); $ok = FALSE; } if (!$medias->delete ($id, 'virtuemart_product_id')) { vmError ('Product delete medias ' . $medias->getError ()); $ok = FALSE; } if (!$prices->delete ($id, 'virtuemart_product_id')) { vmError ('Product delete prices ' . $prices->getError ()); $ok = FALSE; } if (!$shop->delete ($id, 'virtuemart_product_id')) { vmError ('Product delete shoppergroups ' . $shop->getError ()); $ok = FALSE; } if (!$rating->delete ($id, 'virtuemart_product_id')) { vmError ('Product delete rating ' . $rating->getError ()); $ok = FALSE; } if (!$review->delete ($id, 'virtuemart_product_id')) { vmError ('Product delete reviews ' . $review->getError ()); $ok = FALSE; } if (!$votes->delete ($id, 'virtuemart_product_id')) { vmError ('Product delete votes ' . $votes->getError ()); $ok = FALSE; } // delete plugin on product delete // $ok must be set to false if an error occurs JPluginHelper::importPlugin ('vmcustom'); $dispatcher = JDispatcher::getInstance (); $dispatcher->trigger ('plgVmOnDeleteProduct', array($id, &$ok)); } return $ok; } /** * Gets the price for a variant * * @author Max Milbers */ public function getPrice ($product, $customVariant, $quantity) { $this->_db = JFactory::getDBO (); // vmdebug('strange',$product); if (!is_object ($product)) { // vmError('deprecated use of getPrice'); $product = $this->getProduct ($product, TRUE, FALSE, TRUE,$quantity); // return false; } // Loads the product price details if (!class_exists ('calculationHelper')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'calculationh.php'); } $calculator = calculationHelper::getInstance (); // Calculate the modificator $variantPriceModification = $calculator->calculateModificators ($product, $customVariant); $prices = $calculator->getProductPrices ($product, $variantPriceModification, $quantity); return $prices; } /** * Get the Order By Select List * * notice by Max Milbers html tags should never be in a model. This function should be moved to a helper or simular,... * * @author Kohl Patrick * @access public * @param $fieds from config Back-end * @return $orderByList * Order,order By, manufacturer and category link List to echo Out **/ function getOrderByList ($virtuemart_category_id = FALSE) { $getArray = (JRequest::get ('get')); $link = ''; $fieldLink = ''; // remove setted variable unset ($getArray['globalCurrencyConverter'], $getArray['virtuemart_manufacturer_id'], $getArray['order'], $getArray['orderby']); // foreach ($getArray as $key => $value ) // $fieldLink .= '&'.$key.'='.$value; //vmdebug('getOrderByList',$getArray); foreach ($getArray as $key => $value) { if (is_array ($value)) { foreach ($value as $k => $v) { $fieldLink .= '&' . $key . '[' . $k . ']' . '=' . $v; } } else { if($key=='dir' or $key=='orderby') continue; if(empty($value)) continue; $fieldLink .= '&' . $key . '=' . $value; } } $fieldLink[0] = "?"; $fieldLink = 'index.php' . $fieldLink; $orderDirLink = ''; $orderDirConf = VmConfig::get ('prd_brws_orderby_dir'); $orderDir = JRequest::getWord ('dir', $orderDirConf); if ($orderDir != $orderDirConf ) { $orderDirLink .= '&dir=' . $orderDir; //was '&order=' } $orderbyTxt = ''; $orderby = JRequest::getVar ('orderby', VmConfig::get ('browse_orderby_field')); $orderby = $this->checkFilterOrder ($orderby); $orderbyCfg = VmConfig::get ('browse_orderby_field'); if ($orderby != $orderbyCfg) { $orderbyTxt = '&orderby=' . $orderby; } $manufacturerTxt = ''; $manufacturerLink = ''; if (VmConfig::get ('show_manufacturers')) { // manufacturer link list $virtuemart_manufacturer_id = JRequest::getInt ('virtuemart_manufacturer_id', ''); if ($virtuemart_manufacturer_id != '') { $manufacturerTxt = '&virtuemart_manufacturer_id=' . $virtuemart_manufacturer_id; } // if ($mf_virtuemart_product_ids) { $query = 'SELECT DISTINCT l.`mf_name`,l.`virtuemart_manufacturer_id` FROM `#__virtuemart_manufacturers_' . VMLANG . '` as l'; $query .= ' JOIN `#__virtuemart_product_manufacturers` AS pm using (`virtuemart_manufacturer_id`)'; $query .= ' LEFT JOIN `#__virtuemart_products` as p ON p.`virtuemart_product_id` = pm.`virtuemart_product_id` '; $query .= ' LEFT JOIN `#__virtuemart_product_categories` as c ON c.`virtuemart_product_id` = pm.`virtuemart_product_id` '; $query .= ' WHERE p.`published` =1'; if ($virtuemart_category_id) { $query .= ' AND c.`virtuemart_category_id` =' . (int)$virtuemart_category_id; } $query .= ' ORDER BY l.`mf_name`'; $this->_db->setQuery ($query); $manufacturers = $this->_db->loadObjectList (); // vmdebug('my manufacturers',$this->_db->getQuery()); $manufacturerLink = ''; if (count ($manufacturers) > 0) { $manufacturerLink = '
        '; if ($virtuemart_manufacturer_id > 0) { $manufacturerLink .= ''; } if (count ($manufacturers) > 1) { foreach ($manufacturers as $mf) { $link = JRoute::_ ($fieldLink . '&virtuemart_manufacturer_id=' . $mf->virtuemart_manufacturer_id . $orderbyTxt . $orderDirLink,FALSE); if ($mf->virtuemart_manufacturer_id != $virtuemart_manufacturer_id) { $manufacturerLink .= ''; } else { $currentManufacturerLink = '
        ' . JText::_ ('COM_VIRTUEMART_PRODUCT_DETAILS_MANUFACTURER_LBL') . '
        ' . $mf->mf_name . '
        '; } } } elseif ($virtuemart_manufacturer_id > 0) { $currentManufacturerLink = '
        ' . JText::_ ('COM_VIRTUEMART_PRODUCT_DETAILS_MANUFACTURER_LBL') . '
        ' . $manufacturers[0]->mf_name . '
        '; } else { $currentManufacturerLink = '
        ' . JText::_ ('COM_VIRTUEMART_PRODUCT_DETAILS_MANUFACTURER_LBL') . '
        ' . $manufacturers[0]->mf_name . '
        '; } $manufacturerLink .= '
        '; } // } } /* order by link list*/ $orderByLink = ''; $fields = VmConfig::get ('browse_orderby_fields'); if (count ($fields) > 1) { $orderByLink = '
        '; foreach ($fields as $field) { if ($field != $orderby) { $dotps = strrpos ($field, '.'); if ($dotps !== FALSE) { $prefix = substr ($field, 0, $dotps + 1); $fieldWithoutPrefix = substr ($field, $dotps + 1); // vmdebug('Found dot '.$dotps.' $prefix '.$prefix.' $fieldWithoutPrefix '.$fieldWithoutPrefix); } else { $prefix = ''; $fieldWithoutPrefix = $field; } $text = JText::_ ('COM_VIRTUEMART_' . strtoupper ($fieldWithoutPrefix)); $field = explode('.',$field); if(isset($field[1])){ $field = $field[1]; } else { $field = $field[0]; } $link = JRoute::_ ($fieldLink . $manufacturerTxt . '&orderby=' . $field,FALSE); $orderByLink .= ''; } } $orderByLink .= '
        '; } if($orderDir == 'ASC'){ $orderDir = 'DESC'; } else { $orderDir = 'ASC'; } if ($orderDir != $orderDirConf ) { $orderDirLink = '&dir=' . $orderDir; //was '&order=' } else { $orderDirLink = ''; } //$orderDirTxt = JText::_ ('COM_VIRTUEMART_SEARCH_ORDER_'.$orderDir); $orderDirTxt = JText::_ ('COM_VIRTUEMART_'.$orderDir); $link = JRoute::_ ($fieldLink . $orderbyTxt . $orderDirLink . $manufacturerTxt,FALSE); // full string list if ($orderby == '') { $orderby = $orderbyCfg; } $orderby = strtoupper ($orderby); $dotps = strrpos ($orderby, '.'); if ($dotps !== FALSE) { $prefix = substr ($orderby, 0, $dotps + 1); $orderby = substr ($orderby, $dotps + 1); // vmdebug('Found dot '.$dotps.' $prefix '.$prefix.' $fieldWithoutPrefix '.$fieldWithoutPrefix); } else { $prefix = ''; // $orderby = $orderby; } $orderByList = '
        ' . JText::_ ('COM_VIRTUEMART_ORDERBY') . '
        '; $orderByList .= $orderByLink . '
        '; $manuList = ''; if (VmConfig::get ('show_manufacturers')) { if (empty ($currentManufacturerLink)) { $currentManufacturerLink = '
        ' . JText::_ ('COM_VIRTUEMART_PRODUCT_DETAILS_MANUFACTURER_LBL') . '
        ' . JText::_ ('COM_VIRTUEMART_SEARCH_SELECT_MANUFACTURER') . '
        '; } $manuList = '
        ' . $currentManufacturerLink; $manuList .= $manufacturerLink . '
        '; } return array('orderby'=> $orderByList, 'manufacturer'=> $manuList); } // ************************************************** //Stocks // /** * Get the stock level for a given product * * @author RolandD * @access public * @param object $product the product to get stocklevel for * @return array containing product objects */ public function getStockIndicator ($product) { $this->_db = JFactory::getDBO (); /* Assign class to indicator */ $stock_level = $product->product_in_stock - $product->product_ordered; $reorder_level = $product->low_stock_notification; $level = 'normalstock'; $stock_tip = JText::_ ('COM_VIRTUEMART_STOCK_LEVEL_DISPLAY_NORMAL_TIP'); if ($stock_level <= $reorder_level) { $level = 'lowstock'; $stock_tip = JText::_ ('COM_VIRTUEMART_STOCK_LEVEL_DISPLAY_LOW_TIP'); } if ($stock_level <= 0) { $level = 'nostock'; $stock_tip = JText::_ ('COM_VIRTUEMART_STOCK_LEVEL_DISPLAY_OUT_TIP'); } $stock = new Stdclass(); $stock->stock_tip = $stock_tip; $stock->stock_level = $level; return $stock; } public function updateStockInDB ($product, $amount, $signInStock, $signOrderedStock) { // vmdebug( 'stockupdate in DB', $product->virtuemart_product_id,$amount, $signInStock, $signOrderedStock ); $validFields = array('=', '+', '-'); if (!in_array ($signInStock, $validFields)) { return FALSE; } if (!in_array ($signOrderedStock, $validFields)) { return FALSE; } //sanitize fields $id = (int)$product->virtuemart_product_id; $amount = (float)$amount; $update = array(); if ($signInStock != '=' or $signOrderedStock != '=') { if ($signInStock != '=') { $update[] = '`product_in_stock` = `product_in_stock` ' . $signInStock . $amount; if (strpos ($signInStock, '+') !== FALSE) { $signInStock = '-'; } else { $signInStock = '+'; } $update[] = '`product_sales` = `product_sales` ' . $signInStock . $amount; } if ($signOrderedStock != '=') { $update[] = '`product_ordered` = `product_ordered` ' . $signOrderedStock . $amount; } $q = 'UPDATE `#__virtuemart_products` SET ' . implode (", ", $update) . ' WHERE `virtuemart_product_id` = ' . $id; $this->_db->setQuery ($q); $this->_db->query (); //The low on stock notification comes now, when the people ordered. //You need to know that the stock is going low before you actually sent the wares, because then you ususally know it already yoursefl //note by Max Milbers if ($signInStock == '+') { $this->_db->setQuery ('SELECT (IFNULL(`product_in_stock`,"0")+IFNULL(`product_ordered`,"0")) < IFNULL(`low_stock_notification`,"0") ' . 'FROM `#__virtuemart_products` ' . 'WHERE `virtuemart_product_id` = ' . $id ); if ($this->_db->loadResult () == 1) { $this->lowStockWarningEmail( $id) ; } } } } function lowStockWarningEmail($virtuemart_product_id) { if(VmConfig::get('lstockmail',TRUE)){ if (!class_exists ('shopFunctionsF')) { require(JPATH_VM_SITE . DS . 'helpers' . DS . 'shopfunctionsf.php'); } /* Load the product details */ $q = "SELECT l.product_name,product_in_stock FROM `#__virtuemart_products_" . VMLANG . "` l JOIN `#__virtuemart_products` p ON p.virtuemart_product_id=l.virtuemart_product_id WHERE p.virtuemart_product_id = " . $virtuemart_product_id; $this->_db->setQuery ($q); $vars = $this->_db->loadAssoc (); $url = JURI::root () . 'index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $virtuemart_product_id; $link = ''. $vars['product_name'].''; $vars['subject'] = JText::sprintf('COM_VIRTUEMART_PRODUCT_LOW_STOCK_EMAIL_SUBJECT',$vars['product_name']); $vars['mailbody'] =JText::sprintf('COM_VIRTUEMART_PRODUCT_LOW_STOCK_EMAIL_BODY',$link, $vars['product_in_stock']); $virtuemart_vendor_id = 1; $vendorModel = VmModel::getModel ('vendor'); $vendor = $vendorModel->getVendor ($virtuemart_vendor_id); $vendorModel->addImages ($vendor); $vars['vendor'] = $vendor; $vars['vendorAddress']= shopFunctions::renderVendorAddress($virtuemart_vendor_id); $vars['vendorEmail'] = $vendorModel->getVendorEmail ($virtuemart_vendor_id); $vars['user'] = $vendor->vendor_store_name ; shopFunctionsF::renderMail ('productdetails', $vars['vendorEmail'], $vars, 'productdetails', TRUE) ; return TRUE; } else { return FALSE; } } public function getUncategorizedChildren ($withParent) { if (empty($this->_uncategorizedChildren[$this->_id])) { //Todo add check for shoppergroup depended product display $q = 'SELECT * FROM `#__virtuemart_products` as p LEFT JOIN `#__virtuemart_products_' . VMLANG . '` as pl USING (`virtuemart_product_id`) LEFT JOIN `#__virtuemart_product_categories` as pc USING (`virtuemart_product_id`) '; // $q .= ' WHERE (`product_parent_id` = "'.$this->_id.'" AND (pc.`virtuemart_category_id`) IS NULL ) OR (`virtuemart_product_id` = "'.$this->_id.'" ) '; if ($withParent) { $q .= ' WHERE (`product_parent_id` = "' . $this->_id . '" OR `virtuemart_product_id` = "' . $this->_id . '") '; } else { $q .= ' WHERE `product_parent_id` = "' . $this->_id . '" '; } $app = JFactory::getApplication (); if ($app->isSite () && !VmConfig::get ('use_as_catalog', 0) && VmConfig::get ('stockhandle', 'none') == 'disableit') { $q .= ' AND p.`product_in_stock`>"0" '; } if ($app->isSite ()) { $q .= ' AND p.`published`="1"'; } $q .= ' GROUP BY `virtuemart_product_id` ORDER BY p.pordering ASC'; $this->_db->setQuery ($q); $this->_uncategorizedChildren[$this->_id] = $this->_db->loadAssocList (); $err = $this->_db->getErrorMsg (); if (!empty($err)) { vmError ('getUncategorizedChildren sql error ' . $err, 'getUncategorizedChildren sql error'); vmdebug ('getUncategorizedChildren ' . $err); return FALSE; } // vmdebug('getUncategorizedChildren '.$this->_db->getQuery(),$this->_uncategorizedChildren); } return $this->_uncategorizedChildren[$this->_id]; } /** * Check if the product has any children * * @author RolandD * @author Max Milbers * @param int $virtuemart_product_id Product ID * @return bool True if there are child products, false if there are no child products */ public function checkChildProducts ($virtuemart_product_id) { $q = 'SELECT IF(COUNT(virtuemart_product_id) > 0, "0", "1") FROM `#__virtuemart_products` WHERE `product_parent_id` = "' . (int)$virtuemart_product_id . '"'; $this->_db->setQuery ($q); return $this->_db->loadResult (); } function getProductChilds ($product_id) { if (empty($product_id)) { return array(); } $db = JFactory::getDBO (); $db->setQuery (' SELECT virtuemart_product_id, product_name FROM `#__virtuemart_products_' . VMLANG . '` JOIN `#__virtuemart_products` as C using (`virtuemart_product_id`) WHERE `product_parent_id` =' . (int)$product_id); return $db->loadObjectList (); } function getProductChildIds ($product_id) { if (empty($product_id)) { return array(); } $db = JFactory::getDBO (); $db->setQuery (' SELECT virtuemart_product_id FROM `#__virtuemart_products` WHERE `product_parent_id` =' . (int)$product_id.' ORDER BY pordering ASC'); return $db->loadResultArray (); } function getProductParent ($product_parent_id) { if (empty($product_parent_id)) { return array(); } $db = JFactory::getDBO (); $db->setQuery (' SELECT * FROM `#__virtuemart_products_' . VMLANG . '` WHERE `virtuemart_product_id` =' . (int)$product_parent_id); return $db->loadObject (); } function sentProductEmailToShoppers () { jimport ('joomla.utilities.arrayhelper'); if (!class_exists ('ShopFunctions')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'shopfunctions.php'); } $product_id = JRequest::getVar ('virtuemart_product_id', ''); vmdebug ('sentProductEmailToShoppers product id', $product_id); $vars = array(); $vars['subject'] = JRequest::getVar ('subject'); $vars['mailbody'] = JRequest::getVar ('mailbody'); $order_states = JRequest::getVar ('statut', array(), '', 'ARRAY'); $productShoppers = $this->getProductShoppersByStatus ($product_id, $order_states); vmdebug ('productShoppers ', $productShoppers); $productModel = VmModel::getModel ('product'); $product = $productModel->getProduct ($product_id); $vendorModel = VmModel::getModel ('vendor'); $vendor = $vendorModel->getVendor ($product->virtuemart_vendor_id); $vendorModel->addImages ($vendor); $vars['vendor'] = $vendor; $vars['vendorEmail'] = $vendorModel->getVendorEmail ($product->virtuemart_vendor_id); $vars['vendorAddress'] = shopFunctions::renderVendorAddress ($product->virtuemart_vendor_id); $orderModel = VmModel::getModel ('orders'); foreach ($productShoppers as $productShopper) { $vars['user'] = $productShopper['name']; if (shopFunctionsF::renderMail ('productdetails', $productShopper['email'], $vars, 'productdetails', TRUE)) { $string = 'COM_VIRTUEMART_MAIL_SEND_SUCCESSFULLY'; } else { $string = 'COM_VIRTUEMART_MAIL_NOT_SEND_SUCCESSFULLY'; } /* Update the order history for each order */ foreach ($productShopper['order_info'] as $order_info) { $orderModel->_updateOrderHist ($order_info['order_id'], $order_info['order_status'], 1, $vars['subject'] . ' ' . $vars['mailbody']); } // todo: when there is an error while sending emails //vmInfo (JText::sprintf ($string, $productShopper['email'])); } } public function getProductShoppersByStatus ($product_id, $states) { if (empty($states)) { return FALSE; } $orderstatusModel = VmModel::getModel ('orderstatus'); $orderStates = $orderstatusModel->getOrderStatusNames (); foreach ($states as &$status) { if (!array_key_exists ($status, $orderStates)) { unset($status); } } if (empty($states)) { return FALSE; } $q = 'SELECT ou.* , oi.product_quantity , o.order_number, o.order_status, oi.`order_status` AS order_item_status , o.virtuemart_order_id FROM `#__virtuemart_order_userinfos` as ou JOIN `#__virtuemart_order_items` AS oi USING (`virtuemart_order_id`) JOIN `#__virtuemart_orders` AS o ON o.`virtuemart_order_id` = oi.`virtuemart_order_id` WHERE ou.`address_type`="BT" AND oi.`virtuemart_product_id`=' . (int)$product_id; if (count ($orderStates) !== count ($states)) { $q .= ' AND oi.`order_status` IN ( "' . implode ('","', $states) . '") '; } $q .= ' ORDER BY ou.`email` ASC'; $this->_db->setQuery ($q); $productShoppers = $this->_db->loadAssocList (); $shoppers = array(); foreach ($productShoppers as $productShopper) { $key = $productShopper['email']; if (!array_key_exists ($key, $shoppers)) { $shoppers[$key]['phone'] = !empty($productShopper['phone_1']) ? $productShopper['phone_1'] : (!empty($productShopper['phone_2']) ? $productShopper['phone_2'] : '-'); $shoppers[$key]['name'] = $productShopper['first_name'] . ' ' . $productShopper['last_name']; $shoppers[$key]['email'] = $productShopper['email']; $shoppers[$key]['mail_to'] = 'mailto:' . $productShopper['email']; $shoppers[$key]['nb_orders'] = 0; } $i = $shoppers[$key]['nb_orders']; $shoppers[$key]['order_info'][$i]['order_number'] = $productShopper['order_number']; $shoppers[$key]['order_info'][$i]['order_id'] = $productShopper['virtuemart_order_id']; $shoppers[$key]['order_info'][$i]['order_status'] = $productShopper['order_status']; $shoppers[$key]['order_info'][$i]['order_item_status_name'] = $orderStates[$productShopper['order_item_status']]['order_status_name']; $shoppers[$key]['order_info'][$i]['quantity'] = $productShopper['product_quantity']; $shoppers[$key]['nb_orders']++; } return $shoppers; } } // No closing tagmodels/currency.php000066600000010046151374526160010411 0ustar00setMainTable('currencies'); } /** * Retrieve the detail record for the current $id if the data has not already been loaded. * * @author Max Milbers */ function getCurrency($currency_id=0) { if(!empty($currency_id)) $this->setId((int)$currency_id); if (empty($this->_data) ) { $this->_data = $this->getTable('currencies'); $this->_data->load((int)$this->_id); } return $this->_data; } /** * Retireve a list of currencies from the database. * This function is used in the backend for the currency listing, therefore no asking if enabled or not * @author Max Milbers * @return object List of currency objects */ function getCurrenciesList($search,$vendorId=1) { $where = array(); // $this->_query = 'SELECT * FROM `#__virtuemart_currencies` '; if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if( !Permissions::getInstance()->check('admin') ){ $where[] = '(`virtuemart_vendor_id` = "'.(int)$vendorId.'" OR `shared`="1")'; } if(empty($search)){ $search = JRequest::getString('search', false); } /* add filters */ if($search){ $search = '"%' . $this->_db->getEscaped( $search, true ) . '%"' ; //$search = $this->_db->Quote($search, false); $where[] = '`currency_name` LIKE '.$search.' OR `currency_code_2` LIKE '.$search.' OR `currency_code_3` LIKE '.$search; } // if (JRequest::getString('search', false)) $where[] = '`currency_name` LIKE "%'.$this->_db->getEscaped(JRequest::getString('search')).'%"'; $whereString=''; if (count($where) > 0) $whereString = ' WHERE '.implode(' AND ', $where) ; // if (count($where) > 0) $this->_query .= ' WHERE '.implode(' AND ', $where) ; // $this->_query .= $this->_getOrdering('currency_name'); // $this->_data = $this->_getList($this->_query, $this->getState('limitstart'), $this->getState('limit')); // $this->_total = $this->_getListCount($this->_query) ; // $object, $select, $joinedTables, $whereString = '', $groupBy = '', $orderBy = '', $filter_order_Dir = '', $nbrReturnProducts = false $this->_data = $this->exeSortSearchListQuery(0,'*',' FROM `#__virtuemart_currencies`',$whereString,'',$this->_getOrdering()); return $this->_data; // return $this->_data; } /** * Retireve a list of currencies from the database. * * This is written to get a list for selecting currencies. Therefore it asks for enabled * @author Max Milbers * @return object List of currency objects */ function getCurrencies($vendorId=1) { $db = JFactory::getDBO(); $q = 'SELECT * FROM `#__virtuemart_currencies` WHERE (`virtuemart_vendor_id` = "'.(int)$vendorId.'" OR `shared`="1") AND published = "1" ORDER BY `#__virtuemart_currencies`.`currency_name`'; $db->setQuery($q); return $db->loadObjectList(); } } // pure php no closing tagmodels/updatesmigration.php000066600000051441151374526160012142 0ustar00 0) { $this->_user = JFactory::getUser($virtuemart_user_id); } else { $this->_user = JFactory::getUser(); } return $this->_user->id; } /** * @author Max Milbers */ function setStoreOwner($userId=-1) { $allowInsert=FALSE; if($userId===-1){ $allowInsert = TRUE; $userId = 0; } if (empty($userId)) { $userId = $this->determineStoreOwner(); vmdebug('setStoreOwner $userId = '.$userId.' by determineStoreOwner'); } $db = JFactory::getDBO(); $db->setQuery('SELECT * FROM `#__virtuemart_vmusers` WHERE `virtuemart_user_id`= "' . $userId . '" '); $oldUserId = $db->loadResult(); if (!empty($oldUserId) and !empty($userId)) { $db->setQuery( 'UPDATE `#__virtuemart_vmusers` SET `virtuemart_vendor_id` = "0", `user_is_vendor` = "0", `perms` = "" WHERE `virtuemart_vendor_id` ="1" '); if ($db->query() == false ) { JError::raiseWarning(1, 'UPDATE __vmusers failed for virtuemart_user_id '.$userId); return false; } $db->setQuery( 'UPDATE `#__virtuemart_vmusers` SET `virtuemart_vendor_id` = "1", `user_is_vendor` = "1", `perms` = "admin" WHERE `virtuemart_user_id` ="'.$userId.'" '); if ($db->query() === false ) { JError::raiseWarning(1, 'UPDATE __vmusers failed for virtuemart_user_id '.$userId); return false; } else { vmInfo('setStoreOwner VmUser updated new main vendor has user id '.$userId); } } else if($allowInsert){ $db->setQuery('INSERT `#__virtuemart_vmusers` (`virtuemart_user_id`, `user_is_vendor`, `virtuemart_vendor_id`, `perms`) VALUES ("' . $userId . '", "1","1","admin")'); if ($db->query() === false ) { JError::raiseWarning(1, 'setStoreOwner was not possible to execute INSERT __vmusers for virtuemart_user_id '.$userId); return false; } else { vmInfo('setStoreOwner VmUser inserted new main vendor has user id '.$userId); } } return $userId; } /** * Syncs user permission * * @param int virtuemart_user_id * @return bool true on success * @author Christopher Roussel */ function setUserToPermissionGroup ($userId=0) { if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); $usersTable = $this->getTable('vmusers'); $usersTable->load((int)$userId); $perm = Permissions::getInstance(); $usersTable->perms = $perm->getPermissions($userId); $result = $usersTable->check(); if ($result) { $result = $usersTable->store(); } if (!$result) { $errors = $usersTable->getErrors(); foreach($errors as $error) { vmError(get_class( $this ).'::setUserToPermissionGroup user '.$error); } return false; } $xrefTable = $this->getTable('vmuser_shoppergroups'); $data = $xrefTable->load((int)$userId); if (empty($data)) { $data = array('virtuemart_user_id'=>$userId, 'virtuemart_shoppergroup_id'=>'0'); if (!$xrefTable->save($data)) { $errors = $xrefTable->getErrors(); foreach($errors as $error){ vmError(get_class( $this ).'::setUserToPermissionGroup xref '.$error); } return false; } } return true; } /** * Installs sample data to the current database. * * @author Max Milbers, RickG * @params $userId User Id to add the userinfo and vendor sample data to */ function installSampleData($userId = null) { if ($userId == null) { $userId = $this->determineStoreOwner(); } $fields['username'] = $this->_user->username; $fields['virtuemart_user_id'] = $userId; $fields['address_type'] = 'BT'; // Don't change this company name; it's used in install_sample_data.sql $fields['company'] = "Sample Company"; $fields['title'] = 'Mr'; $fields['last_name'] = 'John'; $fields['first_name'] = 'Doe'; $fields['middle_name'] = ''; $fields['phone_1'] = '555-555-555'; $fields['address_1'] = 'PO Box 123'; $fields['city'] = 'Seattle'; $fields['zip'] = '98101'; $fields['virtuemart_state_id'] = '48'; $fields['virtuemart_country_id'] = '223'; // $fields['virtuemart_shoppergroup_id'] = ''; //Dont change this, atm everything is mapped to mainvendor with id=1 $fields['user_is_vendor'] = '1'; $fields['virtuemart_vendor_id'] = '1'; $fields['vendor_name'] = 'Sample Company'; $fields['vendor_phone'] = '555-555-1212'; $fields['vendor_store_name'] = "VirtueMart 2 Sample store"; $fields['vendor_store_desc'] = '

        We have the best clothing for up-to-date people. Check it out!

        We were established in 1869 in a time when getting good clothes was expensive, but the quality was good. Now that only a select few of those authentic clothes survive, we have dedicated this store to bringing the experience alive for collectors and master carrier everywhere.

        You can easily find products selecting the category you would like to browse above.

        '; $fields['virtuemart_media_id'] = 1; $fields['vendor_currency'] = '47'; $fields['vendor_accepted_currencies'] = '52,26,47,144'; $fields['vendor_terms_of_service'] = '
        You have not configured any terms of service yet. Click here to change this text.
        '; $fields['vendor_url'] = JURI::root(); $fields['vendor_name'] = 'Sample Company'; $fields['perms']='admin'; $fields['vendor_legal_info']="VAT-ID: XYZ-DEMO
        Reg.Nr: DEMONUMBER"; $fields['vendor_letter_css']='.vmdoc-header { }.vmdoc-footer { }'; $fields['vendor_letter_header_html']='

        {vm:vendorname}

        {vm:vendoraddress}

        '; $fields['vendor_letter_header_image']='1'; $fields['vendor_letter_footer_html']='{vm:vendorlegalinfo}
        Page {vm:pagenum}/{vm:pagecount}'; if(!class_exists('VirtueMartModelUser')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'user.php'); $usermodel = VmModel::getModel('user'); $usermodel->setId($userId); //Save the VM user stuff if(!$usermodel->store($fields)){ vmError(JText::_('COM_VIRTUEMART_NOT_ABLE_TO_SAVE_USER_DATA') ); JError::raiseWarning('', JText::_('COM_VIRTUEMART_RAISEWARNING_NOT_ABLE_TO_SAVE_USER_DATA')); } // $params = JComponentHelper::getParams('com_languages'); // $lang = $params->get('site', 'en-GB');//use default joomla // $this->installSampleSQL($lang); $filename = JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart'.DS.'install'.DS.'install_sample_data.sql'; if(!defined('VMLANG')){ $params = JComponentHelper::getParams('com_languages'); $lang = $params->get('site', 'en-GB');//use default joomla $lang = strtolower(strtr($lang,'-','_')); } else { $lang = VMLANG; } if(!$this->execSQLFile($filename)){ vmError(JText::_('Problems execution of SQL File '.$filename)); } else { //update jplugin_id from shipment and payment $db = JFactory::getDBO(); $q = 'SELECT `extension_id` FROM #__extensions WHERE element = "weight_countries" AND folder = "vmshipment"'; $db->setQuery($q); $shipment_plg_id = $db->loadResult(); if(!empty($shipment_plg_id)){ $q = 'INSERT INTO `#__virtuemart_shipmentmethods` (`virtuemart_shipmentmethod_id`, `virtuemart_vendor_id`, `shipment_jplugin_id`, `shipment_element`, `shipment_params`, `ordering`, `shared`, `published`, `created_on`, `created_by`, `modified_on`, `modified_by`, `locked_on`, `locked_by`) VALUES (1, 1, '.$shipment_plg_id.', "weight_countries", \'shipment_logos=""|countries=""|zip_start=""|zip_stop=""|weight_start=""|weight_stop=""|weight_unit="KG"|nbproducts_start=0|nbproducts_stop=0|orderamount_start=""|orderamount_stop=""|cost="0"|package_fee="2.49"|tax_id="0"|free_shipment="500"|\', 0, 0, 1, "0000-00-00 00:00:00", 0, "0000-00-00 00:00:00", 0, "0000-00-00 00:00:00", 0)'; $db->setQuery($q); $db->query(); $q = 'INSERT INTO `#__virtuemart_shipmentmethods_'.$lang.'` (`virtuemart_shipmentmethod_id`, `shipment_name`, `shipment_desc`, `slug`) VALUES (1, "Self pick-up", "", "Self-pick-up")'; $db->setQuery($q); $db->query(); //Create table of the plugin if(JVM_VERSION!=1){ $url = '/plugins/vmshipment/weight_countries'; } else{ $url = '/plugins/vmshipment'; } if (!class_exists ('plgVmShipmentWeight_countries')) require(JPATH_ROOT . DS . $url . DS . 'weight_countries.php'); $this->installPluginTable('plgVmShipmentWeight_countries','#__virtuemart_shipment_plg_weight_countries','Shipment Weight Countries Table'); } $q = 'SELECT `extension_id` FROM #__extensions WHERE element = "standard" AND folder = "vmpayment"'; $db->setQuery($q); $payment_plg_id = $db->loadResult(); if(!empty($payment_plg_id)){ $q='INSERT INTO `#__virtuemart_paymentmethods` (`virtuemart_paymentmethod_id`, `virtuemart_vendor_id`, `payment_jplugin_id`, `payment_element`, `payment_params`, `shared`, `ordering`, `published`, `created_on`, `created_by`, `modified_on`, `modified_by`, `locked_on`, `locked_by`) VALUES (1, 1, '.$payment_plg_id.', "standard", \'payment_logos=""|countries=""|payment_currency="0"|status_pending="U"|send_invoice_on_order_null="1"|min_amount=""|max_amount=""|cost_per_transaction="0.10"|cost_percent_total="1.5"|tax_id="0"|payment_info=""|\', 0, 0, 1, "0000-00-00 00:00:00", 0, "0000-00-00 00:00:00", 0, "0000-00-00 00:00:00", 0)'; $db->setQuery($q); $db->query(); $q="INSERT INTO `#__virtuemart_paymentmethods_".$lang."` (`virtuemart_paymentmethod_id`, `payment_name`, `payment_desc`, `slug`) VALUES (1, 'Cash on delivery', '', 'Cash-on-delivery')"; $db->setQuery($q); $db->query(); if(JVM_VERSION!=1){ $url = '/plugins/vmpayment/standard'; } else{ $url = '/plugins/vmpayment'; } if (!class_exists ('plgVmPaymentStandard')) require(JPATH_ROOT . DS . $url . DS . 'standard.php'); $this->installPluginTable('plgVmPaymentStandard','#__virtuemart_payment_plg_standard','Payment Standard Table'); } vmInfo(JText::_('COM_VIRTUEMART_SAMPLE_DATA_INSTALLED')); } return true; } function installPluginTable ($className,$tablename,$tableComment) { $query = "CREATE TABLE IF NOT EXISTS `" . $tablename . "` ("; if(!empty($tablesFields)){ foreach ($tablesFields as $fieldname => $fieldtype) { $query .= '`' . $fieldname . '` ' . $fieldtype . " , "; } } else { $SQLfields = call_user_func($className."::getTableSQLFields"); //$SQLfields = $className::getTableSQLFields (); // $loggablefields = $className::getTableSQLLoggablefields (); $loggablefields = call_user_func($className."::getTableSQLLoggablefields"); foreach ($SQLfields as $fieldname => $fieldtype) { $query .= '`' . $fieldname . '` ' . $fieldtype . " , "; } foreach ($loggablefields as $fieldname => $fieldtype) { $query .= '`' . $fieldname . '` ' . $fieldtype . ", "; } } $query .= " PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='" . $tableComment . "' AUTO_INCREMENT=1 ;"; $db = JFactory::getDBO(); $db->setQuery($query); if (!$db->query ()) { vmError ( $className.'::onStoreInstallPluginTable: ' . JText::_ ('COM_VIRTUEMART_SQL_ERROR') . ' ' . $db->stderr (TRUE)); } } function restoreSystemDefaults() { JPluginHelper::importPlugin('vmextended'); $dispatcher = JDispatcher::getInstance(); $dispatcher->trigger('onVmSqlRemove', $this); $filename = JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart'.DS.'install'.DS.'uninstall_essential_data.sql'; $this->execSQLFile($filename); $filename = JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart'.DS.'install'.DS.'uninstall_required_data.sql'; $this->execSQLFile($filename); $filename = JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart'.DS.'install'.DS.'install.sql'; $this->execSQLFile($filename); $filename = JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart'.DS.'install'.DS.'install_essential_data.sql'; $this->execSQLFile($filename); $filename = JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart'.DS.'install'.DS.'install_required_data.sql'; $this->execSQLFile($filename); if(!class_exists('GenericTableUpdater')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'tableupdater.php'); $updater = new GenericTableUpdater(); $updater->createLanguageTables(); JPluginHelper::importPlugin('vmextended'); $dispatcher = JDispatcher::getInstance(); $dispatcher->trigger('onVmSqlRestore', $this); } function restoreSystemTablesCompletly() { $this->removeAllVMTables(); $filename = JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart'.DS.'install'.DS.'install.sql'; $this->execSQLFile($filename); $filename = JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart'.DS.'install'.DS.'install_essential_data.sql'; $this->execSQLFile($filename); $filename = JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart'.DS.'install'.DS.'install_required_data.sql'; $this->execSQLFile($filename); if(!class_exists('GenericTableUpdater')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'tableupdater.php'); $updater = new GenericTableUpdater(); $updater->createLanguageTables(); JPluginHelper::importPlugin('vmextended'); $dispatcher = JDispatcher::getInstance(); $dispatcher->trigger('onVmSqlRestore', $this); } /** * Parse a sql file executing each sql statement found. * * @author Max Milbers */ function execSQLFile($sqlfile ) { // Check that sql files exists before reading. Otherwise raise error for rollback if ( !file_exists($sqlfile) ) { vmError('No SQL file provided!'); return false; } if(!class_exists('VmConfig')){ require_once(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'config.php'); VmConfig::loadConfig(false,true); } if(!defined('VMLANG')){ $params = JComponentHelper::getParams('com_languages'); $lang = $params->get('site', 'en-GB');//use default joomla $lang = strtolower(strtr($lang,'-','_')); } else { $lang = VMLANG; } // Create an array of queries from the sql file jimport('joomla.installer.helper'); $queries = JInstallerHelper::splitSql(file_get_contents($sqlfile)); if (count($queries) == 0) { vmError('SQL file has no queries!'); return false; } $ok = true; $db = JFactory::getDBO(); // Process each query in the $queries array (split out of sql file). foreach ($queries as $query) { $query = trim($query); if ($query != '' && $query{0} != '#') { if(strpos($query, 'CREATE' )!==false or strpos( $query, 'INSERT')!==false){ $query = str_replace('XLANG',$lang,$query); } $db->setQuery($query); if (!$db->query()) { JError::raiseWarning(1, 'JInstaller::install: '.$sqlfile.' '.JText::_('COM_VIRTUEMART_SQL_ERROR')." ".$db->stderr(true)); $ok = false; } } } return $ok; } /** * Delete all Virtuemart tables. * * @return True if successful, false otherwise */ function removeAllVMTables() { $db = JFactory::getDBO(); $config = JFactory::getConfig(); $prefix = $config->getValue('config.dbprefix').'virtuemart_%'; $db->setQuery('SHOW TABLES LIKE "'.$prefix.'"'); if (!$tables = $db->loadResultArray()) { vmInfo ('removeAllVMTables no tables found '.$db->getErrorMsg()); return false; } $app = JFactory::getApplication(); foreach ($tables as $table) { $db->setQuery('DROP TABLE ' . $table); if($db->query()){ $droppedTables[] = substr($table,strlen($prefix)-1); } else { $errorTables[] = $table; $app->enqueueMessage('Error drop virtuemart table ' . $table); } } if(!empty($droppedTables)){ $app->enqueueMessage('Dropped virtuemart table ' . implode(', ',$droppedTables)); } if(!empty($errorTables)){ $app->enqueueMessage('Error dropping virtuemart table ' . implode($errorTables,', ')); return false; } return true; } /** * Remove all the data from all Virutmeart tables. * * @return boolean True if successful, false otherwise. */ function removeAllVMData() { JPluginHelper::importPlugin('vmextended'); $dispatcher = JDispatcher::getInstance(); $dispatcher->trigger('onVmSqlRemove', $this); $filename = JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart'.DS.'install'.DS.'uninstall_data.sql'; $this->execSQLFile($filename); $tables = array('categories','manufacturers','manufacturercategories','paymentmethods','products','shipmentmethods','vendors'); $prefix = $this->_db->getPrefix(); foreach ($tables as $table) { $query = 'SHOW TABLES LIKE "'.$prefix.'virtuemart_'.$table.'_%"'; $this->_db->setQuery($query); if($translatedTables= $this->_db->loadResultArray()) { foreach ($translatedTables as $translatedTable) { $this->_db->setQuery('TRUNCATE TABLE `'.$translatedTable.'`'); if($this->_db->query()) vmInfo( $translatedTable.' empty'); else vmError($translatedTable.' language table Cannot be deleted'); } } else vmInfo('No '.$table.' language table found to delete '.$query); } //"TRUNCATE TABLE IS FASTER and reset the primary Keys; //install required data again $filename = JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart'.DS.'install'.DS.'install_required_data.sql'; $this->execSQLFile($filename); return true; } /** * This function deletes all stored thumbs and deletes the entries for all thumbs, usually this is need for shops * older than vm2.0.22. The new pattern is now not storing the url as long it is not overwritten. * Of course the function deletes all overwrites, but you can now relativly easy change the thumbsize in your shop * @author Max Milbers */ function resetThumbs(){ $db = JFactory::getDbo(); $q = 'UPDATE `#__virtuemart_medias` SET `file_url_thumb`=""'; $db->setQuery($q); $db->query(); $err = $db->getErrorMsg(); if(!empty($err)){ vmError('resetThumbs Update entries failed ',$err); } jimport('joomla.filesystem.folder'); $tmpimg_resize_enable = VmConfig::get('img_resize_enable',1); VmConfig::set('img_resize_enable',0); $this->deleteMediaThumbFolder('media_category_path'); $this->deleteMediaThumbFolder('media_product_path'); $this->deleteMediaThumbFolder('media_manufacturer_path'); $this->deleteMediaThumbFolder('media_vendor_path'); $this->deleteMediaThumbFolder('forSale_path_thumb',''); VmConfig::set('img_resize_enable',$tmpimg_resize_enable); return true; } /** * Delets a thumb folder and recreates it, contains small nasty hack for the thumbnail folder of the "file for sale" * @author Max Milbers * @param $type * @param string $resized * @return bool */ private function deleteMediaThumbFolder($type,$resized='resized'){ if(!empty($resized)) $resized = DS.$resized; $typePath = VmConfig::get($type); if(!empty($typePath)){ $path = JPATH_ROOT.DS.str_replace('/',DS,$typePath).$resized; $msg = JFolder::delete($path); if(!$msg){ vmWarn('Problem deleting '.$type); } if(!class_exists('JFile')) require(JPATH_VM_LIBRARIES.DS.'joomla'.DS.'filesystem'.DS.'file.php'); $msg = JFolder::create($path); return $msg; } else { return 'Config path for '.$type.' empty'; } } } //pure php no tag models/ratings.php000066600000037414151374526160010236 0ustar00setMainTable('ratings'); $layout = JRequest::getString('layout','default'); $task = JRequest::getCmd('task','default'); if($layout == 'list_reviews' or $task == 'listreviews'){ vmdebug('in review list'); $myarray = array('pr.created_on','virtuemart_rating_review_id','vote'); $this->removevalidOrderingFieldName('created_on'); $this->removevalidOrderingFieldName('product_name'); $this->removevalidOrderingFieldName('virtuemart_rating_id'); $this->removevalidOrderingFieldName('rating'); $this->_selectedOrdering = 'pr.created_on'; } else { $myarray = array('created_on','product_name','virtuemart_rating_id'); $this->removevalidOrderingFieldName('pr.created_on'); $this->removevalidOrderingFieldName('virtuemart_rating_review_id'); $this->removevalidOrderingFieldName('vote'); $this->_selectedOrdering = 'created_on'; } $this->addvalidOrderingFieldName($myarray); } /** * Select the products to list on the product list page */ public function getRatings() { $tables = ' FROM `#__virtuemart_ratings` AS `r` JOIN `#__virtuemart_products_'.VMLANG.'` AS `p` USING (`virtuemart_product_id`) '; $whereString = ''; $this->_data = $this->exeSortSearchListQuery(0,' r.*,p.`product_name` ',$tables,$whereString,'',$this->_getOrdering()); // $this->_data = $this->_getList($q, $this->getState('limitstart'), $this->getState('limit')); // set total for pagination // $this->_total = $this->_getListCount($q) ; // if(empty($this->_data)) $this->_data = array(); // if(!isset($this->_total)) $this->_total = 0; return $this->_data; } /** * Load a single rating * @author RolandD */ public function getRating($cids) { if (empty($cids)) { return; } /* First copy the product in the product table */ $ratings_data = $this->getTable('ratings'); /* Load the rating */ $joinValue = array('product_name' =>'#__virtuemart_products'); if ($cids) { $ratings_data->load ($cids[0], $joinValue, 'virtuemart_product_id'); } /* Add some variables for a new rating */ if (JRequest::getWord('task') == 'add') { $virtuemart_product_id = JRequest::getVar('virtuemart_product_id',array(),'', 'array'); if(is_array($virtuemart_product_id) && count($virtuemart_product_id) > 0){ $virtuemart_product_id = (int)$virtuemart_product_id[0]; } else { $virtuemart_product_id = (int)$virtuemart_product_id; } $ratings_data->virtuemart_product_id = $virtuemart_product_id; /* User ID */ $user = JFactory::getUser(); $ratings_data->virtuemart_user_id = $user->id; } return $ratings_data; } /** * @author Max Milbers * @param $virtuemart_product_id * @return null */ function getReviews($virtuemart_product_id){ if (empty($virtuemart_product_id)) { return NULL; } $select = '`u`.*,`pr`.*,`p`.`product_name`,`rv`.`vote`, `u`.`name` AS customer, `pr`.`published`'; $tables = ' FROM `#__virtuemart_rating_reviews` AS `pr` LEFT JOIN `#__users` AS `u` ON `pr`.`created_by` = `u`.`id` LEFT JOIN `#__virtuemart_products_'.VMLANG.'` AS `p` ON `p`.`virtuemart_product_id` = `pr`.`virtuemart_product_id` LEFT JOIN `#__virtuemart_rating_votes` AS `rv` on `rv`.`virtuemart_product_id`=`pr`.`virtuemart_product_id` and `rv`.`created_by`=`u`.`id`'; $whereString = ' WHERE `p`.`virtuemart_product_id` = "'.$virtuemart_product_id.'"'; $result = $this->exeSortSearchListQuery(0,$select,$tables,$whereString,'',$this->_getOrdering()); return $result; } /** * @author Max Milbers * @param $cids * @return mixed@ */ function getReview($cids){ $q = 'SELECT `u`.*,`pr`.*,`p`.`product_name`,`rv`.`vote`,CONCAT_WS(" ",`u`.`title`,u.`last_name`,`u`.`first_name`) as customer FROM `#__virtuemart_rating_reviews` AS `pr` LEFT JOIN `#__virtuemart_userinfos` AS `u` ON `pr`.`created_by` = `u`.`virtuemart_user_id` LEFT JOIN `#__virtuemart_products_'.VMLANG.'` AS `p` ON `p`.`virtuemart_product_id` = `pr`.`virtuemart_product_id` LEFT JOIN `#__virtuemart_rating_votes` as `rv` on `rv`.`virtuemart_product_id`=`pr`.`virtuemart_product_id` and `rv`.`created_by`=`pr`.`created_by` WHERE virtuemart_rating_review_id="'.(int)$cids[0].'" ' ; $this->_db->setQuery($q); vmdebug('getReview',$this->_db->getQuery()); return $this->_db->loadObject(); } /** * gets a rating by a product id * * @author Max Milbers * @param int $product_id */ function getRatingByProduct($product_id){ $q = 'SELECT * FROM `#__virtuemart_ratings` WHERE `virtuemart_product_id` = "'.(int)$product_id.'" '; $this->_db->setQuery($q); return $this->_db->loadObject(); } /** * gets a review by a product id * * @author Max Milbers * @param int $product_id */ function getReviewByProduct($product_id,$userId=0){ if(empty($userId)){ $user = JFactory::getUser(); $userId = $user->id; } $q = 'SELECT * FROM `#__virtuemart_rating_reviews` WHERE `virtuemart_product_id` = "'.(int)$product_id.'" AND `created_by` = "'.(int)$userId.'" '; $this->_db->setQuery($q); return $this->_db->loadObject(); } /** * gets a reviews by a product id * * @author Max Milbers * @param int $product_id */ function getReviewsByProduct($product_id){ if(empty($userId)){ $user = JFactory::getUser(); $userId = $user->id; } $q = 'SELECT * FROM `#__virtuemart_rating_reviews` WHERE `virtuemart_product_id` = "'.(int)$product_id.'" '; $this->_db->setQuery($q); return $this->_db->loadObjectList(); } /** * gets a vote by a product id and userId * * @author Max Milbers * @param int $product_id */ function getVoteByProduct($product_id,$userId=0){ if(empty($userId)){ $user = JFactory::getUser(); $userId = $user->id; } $q = 'SELECT * FROM `#__virtuemart_rating_votes` WHERE `virtuemart_product_id` = "'.(int)$product_id.'" AND `created_by` = "'.(int)$userId.'" '; $this->_db->setQuery($q); return $this->_db->loadObject(); } /** * Save a rating * @author Max Milbers */ public function saveRating($data=0) { //Check user_rating $maxrating = VmConfig::get('vm_maximum_rating_scale',5); $virtuemart_product_id = vRequest::getInt('virtuemart_product_id',0); $app = JFactory::getApplication(); if( $app->isSite() ){ $user = JFactory::getUser(); $userId = $user->id; $allowReview = $this->allowReview($virtuemart_product_id); $allowRating = $this->allowRating($virtuemart_product_id); } else { $userId = $data['created_by']; $allowReview = true; $allowRating = true; } if(!empty($virtuemart_product_id)){ //if ( !empty($data['virtuemart_product_id']) && !empty($userId)){ if(empty($data)) $data = vRequest::getPost(); if($allowRating){ //normalize the rating if ($data['vote'] < 0) { $data['vote'] = 0; } if ($data['vote'] > ($maxrating + 1)) { $data['vote'] = $maxrating; } $data['lastip'] = $_SERVER['REMOTE_ADDR']; $data['vote'] = (int) $data['vote']; $rating = $this->getRatingByProduct($data['virtuemart_product_id']); vmdebug('$rating',$rating); $vote = $this->getVoteByProduct($data['virtuemart_product_id'],$userId); vmdebug('$vote',$vote); $data['virtuemart_rating_vote_id'] = empty($vote->virtuemart_rating_vote_id)? 0: $vote->virtuemart_rating_vote_id; if(isset($data['vote'])){ $votesTable = $this->getTable('rating_votes'); $votesTable->bindChecknStore($data,TRUE); $errors = $votesTable->getErrors(); foreach($errors as $error){ vmError(get_class( $this ).'::Error store votes '.$error); } } if(!empty($rating->rates) && empty($vote) ){ $data['rates'] = $rating->rates + $data['vote']; $data['ratingcount'] = $rating->ratingcount+1; } else { if (!empty($rating->rates) && !empty($vote->vote)) { $data['rates'] = $rating->rates - $vote->vote + $data['vote']; $data['ratingcount'] = $rating->ratingcount; } else { $data['rates'] = $data['vote']; $data['ratingcount'] = 1; } } if(empty($data['rates']) || empty($data['ratingcount']) ){ $data['rating'] = 0; } else { $data['rating'] = $data['rates']/$data['ratingcount']; } $data['virtuemart_rating_id'] = empty($rating->virtuemart_rating_id)? 0: $rating->virtuemart_rating_id; vmdebug('saveRating $data',$data); $rating = $this->getTable('ratings'); $rating->bindChecknStore($data,TRUE); $errors = $rating->getErrors(); foreach($errors as $error){ vmError(get_class( $this ).'::Error store rating '.$error); } } if($allowReview and !empty($data['comment'])){ //if(!empty($data['comment'])){ $data['comment'] = substr($data['comment'], 0, VmConfig::get('vm_reviews_maximum_comment_length', 2000)) ; // no HTML TAGS but permit all alphabet $value = preg_replace('@<[\/\!]*?[^<>]*?>@si','',$data['comment']);//remove all html tags $value = (string)preg_replace('#on[a-z](.+?)\)#si','',$value);//replace start of script onclick() onload()... $value = trim(str_replace('"', ' ', $value),"'") ; $data['comment'] = (string)preg_replace('#^\'#si','',$value);//replace ' at start $data['comment'] = nl2br($data['comment']); // keep returns //set to defaut value not used (prevent hack) $data['review_ok'] = 0; $data['review_rating'] = 0; $data['review_editable'] = 0; // Check if ratings are auto-published (set to 0 prevent injected by user) // $app = JFactory::getApplication(); if( $app->isSite() ){ if (!class_exists ('Permissions')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); } if(!Permissions::getInstance()->check('admin')){ if (VmConfig::get ('reviews_autopublish', 1)) { $data['published'] = 1; } } } $review = $this->getReviewByProduct($data['virtuemart_product_id'],$userId); if(!empty($review->review_rates)){ $data['review_rates'] = $review->review_rates + $data['vote']; } else { $data['review_rates'] = $data['vote']; } if(!empty($review->review_ratingcount)){ $data['review_ratingcount'] = $review->review_ratingcount+1; } else { $data['review_ratingcount'] = 1; } $data['review_rating'] = $data['review_rates']/$data['review_ratingcount']; $data['virtuemart_rating_review_id'] = empty($review->virtuemart_rating_review_id)? 0: $review->virtuemart_rating_review_id; $reviewTable = $this->getTable('rating_reviews'); $reviewTable->bindChecknStore($data,TRUE); $errors = $reviewTable->getErrors(); foreach($errors as $error){ vmError(get_class( $this ).'::Error store review '.$error); } } return $data['virtuemart_rating_review_id']; } else{ vmError('Cant save rating/review/vote without vote/product_id'); return FALSE; } } /** * removes a product and related table entries * * @author Max Milberes */ public function remove($ids) { $rating = $this->getTable($this->_maintablename); $review = $this->getTable('rating_reviews'); $votes = $this->getTable('rating_votes'); $ok = TRUE; foreach($ids as $id) { $rating->load($id); $prod_id = $rating->virtuemart_product_id; if (!$rating->delete($id)) { vmError(get_class( $this ).'::Error deleting ratings '.$rating->getError()); $ok = FALSE; } if (!$review->delete($prod_id,'virtuemart_product_id')) { vmError(get_class( $this ).'::Error deleting review '.$review->getError()); $ok = FALSE; } if (!$votes->delete($prod_id,'virtuemart_product_id')) { vmError(get_class( $this ).'::Error deleting votes '.$votes->getError()); $ok = FALSE; } } return $ok; } /** * Returns the number of reviews assigned to a product * * @author RolandD * @param int $pid Product ID * @return int */ public function countReviewsForProduct($pid) { $db = JFactory::getDBO(); $q = "SELECT COUNT(*) AS total FROM #__virtuemart_rating_reviews WHERE virtuemart_product_id=".(int)$pid; $db->setQuery($q); $reviews = $db->loadResult(); return $reviews; } public function showReview($product_id){ return $this->show($product_id, VmConfig::get('showReviewFor','all')); } public function showRating($product_id = 0){ return $this->show($product_id, VmConfig::get('showRatingFor','all')); } public function allowReview($product_id){ return $this->show($product_id, VmConfig::get('reviewMode','bought')); } public function allowRating($product_id){ return $this->show($product_id, VmConfig::get('ratingMode','bought')); } /** * Decides if the rating/review should be shown on the FE * @author Max Milbers */ private function show($product_id, $show){ //dont show if($show == 'none'){ return false; } //show all else { if ($show == 'all') { return true; } //show only registered else { if ($show == 'registered') { $user = JFactory::getUser (); return !empty($user->id); } //show only registered && who bought the product else { if ($show == 'bought') { if (empty($product_id)) { return false; } if (isset($this->_productBought[$product_id])) { return $this->_productBought[$product_id]; } $user = JFactory::getUser (); $rr_os=VmConfig::get('rr_os',array('C')); if(!is_array($rr_os)) $rr_os = array($rr_os); $db = JFactory::getDBO (); $q = 'SELECT COUNT(*) as total FROM `#__virtuemart_orders` AS o LEFT JOIN `#__virtuemart_order_items` AS oi '; $q .= 'ON `o`.`virtuemart_order_id` = `oi`.`virtuemart_order_id` '; $q .= 'WHERE o.virtuemart_user_id = "' . $user->id . '" AND oi.virtuemart_product_id = "' . $product_id . '" '; $q .= 'AND o.order_status IN (\'' . implode("','",$rr_os). '\') '; $db->setQuery ($q); $count = $db->loadResult (); if ($count) { $this->_productBought[$product_id] = true; return true; } else { $this->_productBought[$product_id] = false; return false; } } } } } } } // pure php no closing tag models/waitinglist.php000066600000011272151374526160011117 0ustar00setQuery ($q); return $db->loadObjectList (); } /** * Notify customers product is back in stock * * @author RolandD * @author Christopher Rouseel * @todo Add Itemid * @todo Do something if the mail cannot be send * @todo Update mail from * @todo Get the from name/email from the vendor */ public function notifyList ($virtuemart_product_id, $subject = '', $mailbody = '', $max_number = 0) { if (!$virtuemart_product_id) { return FALSE; } //sanitize id $virtuemart_product_id = (int)$virtuemart_product_id; $max_number = (int)$max_number; if (!class_exists ('shopFunctionsF')) { require(JPATH_VM_SITE . DS . 'helpers' . DS . 'shopfunctionsf.php'); } $vars = array(); $waiting_users = $this->getWaitingusers ($virtuemart_product_id); /* Load the product details */ $db = JFactory::getDbo (); $q = "SELECT l.product_name,product_in_stock FROM `#__virtuemart_products_" . VMLANG . "` l JOIN `#__virtuemart_products` p ON p.virtuemart_product_id=l.virtuemart_product_id WHERE p.virtuemart_product_id = " . $virtuemart_product_id; $db->setQuery ($q); $item = $db->loadObject (); $vars['productName'] = $item->product_name; /* if ($item->product_in_stock <= 0) { return FALSE; } */ $url = JURI::root () . 'index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $virtuemart_product_id; $vars['link'] = ''. $item->product_name.''; if (empty($subject)) { $subject = JText::sprintf('COM_VIRTUEMART_PRODUCT_WAITING_LIST_EMAIL_SUBJECT', $item->product_name); } $vars['subject'] = $subject; $vars['mailbody'] = $mailbody; $virtuemart_vendor_id = 1; $vendorModel = VmModel::getModel ('vendor'); $vendor = $vendorModel->getVendor ($virtuemart_vendor_id); $vendorModel->addImages ($vendor); $vars['vendor'] = $vendor; $vars['vendorAddress']= shopFunctions::renderVendorAddress($virtuemart_vendor_id); $vendorEmail = $vendorModel->getVendorEmail ($virtuemart_vendor_id); $vars['vendorEmail'] = $vendorEmail; $i = 0; foreach ($waiting_users as $waiting_user) { $vars['user'] = $waiting_user->name ; if (shopFunctionsF::renderMail ('productdetails', $waiting_user->notify_email, $vars, 'productdetails')) { $db->setQuery ('UPDATE #__virtuemart_waitingusers SET notified=1 WHERE virtuemart_waitinguser_id=' . $waiting_user->virtuemart_waitinguser_id); $db->query (); $i++; } if (!empty($max_number) && $i >= $max_number) { break; } } return TRUE; } /** * Add customer to the waiting list for specific product * * @author Seyi Awofadeju * @return insert_id if the save was successful, false otherwise. */ public function adduser ($data) { JRequest::checkToken () or jexit ('Invalid Token, in notify customer'); $field = $this->getTable ('waitingusers'); if (!$field->bind ($data)) { // Bind data vmError ($field->getError ()); return FALSE; } if (!$field->check ()) { // Perform data checks vmError ($field->getError ()); return FALSE; } $_id = $field->store (); if ($_id === FALSE) { // Write data to the DB vmError ($field->getError ()); return FALSE; } //jexit(); return $_id; } } // pure php no closing tag models/manufacturer.php000066600000013565151374526160011264 0ustar00setMainTable('manufacturers'); $this->addvalidOrderingFieldName(array('m.virtuemart_manufacturer_id','mf_name','mf_desc','mf_category_name','mf_url')); $this->removevalidOrderingFieldName('virtuemart_manufacturer_id'); $this->_selectedOrdering = 'mf_name'; $this->_selectedOrderingDir = 'ASC'; } /** * Load a single manufacturer */ public function getManufacturer() { static $_manus = array(); if (!array_key_exists ($this->_id, $_manus)) { $this->_data = $this->getTable('manufacturers'); $this->_data->load($this->_id); $xrefTable = $this->getTable('manufacturer_medias'); $this->_data->virtuemart_media_id = $xrefTable->load($this->_id); $_manus[$this->_id] = $this->_data; } return $_manus[$this->_id]; } /** * Bind the post data to the manufacturer table and save it * * @author Roland * @author Max Milbers * @return boolean True is the save was successful, false otherwise. */ public function store(&$data) { // Setup some place holders $table = $this->getTable('manufacturers'); $table->bindChecknStore($data); $errors = $table->getErrors(); foreach($errors as $error){ vmError($error); } // Process the images $mediaModel = VmModel::getModel('Media'); $mediaModel->storeMedia($data,'manufacturer'); $errors = $mediaModel->getErrors(); foreach($errors as $error){ vmError($error); } return $table->virtuemart_manufacturer_id; } /** * Returns a dropdown menu with manufacturers * @author Max Milbers * @return object List of manufacturer to build filter select box */ function getManufacturerDropDown() { $db = JFactory::getDBO(); $query = "SELECT `virtuemart_manufacturer_id` AS `value`, `mf_name` AS text, '' AS disable FROM `#__virtuemart_manufacturers_".VMLANG."` ORDER BY `mf_name` ASC"; $db->setQuery($query); $options = $db->loadObjectList(); array_unshift($options, JHTML::_('select.option', '0', '- '. JText::_('COM_VIRTUEMART_SELECT_MANUFACTURER') .' -' )); return $options; } /** * Retireve a list of countries from the database. * * @param string $onlyPuiblished True to only retreive the publish countries, false otherwise * @param string $noLimit True if no record count limit is used, false otherwise * @return object List of manufacturer objects */ public function getManufacturers($onlyPublished=false, $noLimit=false, $getMedia=false) { $this->_noLimit = $noLimit; $mainframe = JFactory::getApplication(); // $db = JFactory::getDBO(); $option = 'com_virtuemart'; $virtuemart_manufacturercategories_id = $mainframe->getUserStateFromRequest( $option.'virtuemart_manufacturercategories_id', 'virtuemart_manufacturercategories_id', 0, 'int' ); $search = $mainframe->getUserStateFromRequest( $option.'search', 'search', '', 'string' ); $where = array(); if ($virtuemart_manufacturercategories_id > 0) { $where[] .= ' `m`.`virtuemart_manufacturercategories_id` = '. $virtuemart_manufacturercategories_id; } if ( $search && $search != 'true') { $search = '"%' . $this->_db->getEscaped( $search, true ) . '%"' ; //$search = $this->_db->Quote($search, false); $where[] .= ' LOWER( `mf_name` ) LIKE '.$search; } if ($onlyPublished) { $where[] .= ' `m`.`published` = 1'; } $whereString = ''; if (count($where) > 0) $whereString = ' WHERE '.implode(' AND ', $where) ; $select = ' `m`.*,`#__virtuemart_manufacturers_'.VMLANG.'`.*, mc.`mf_category_name` '; $joinedTables = 'FROM `#__virtuemart_manufacturers_'.VMLANG.'` JOIN `#__virtuemart_manufacturers` as m USING (`virtuemart_manufacturer_id`) '; $joinedTables .= ' LEFT JOIN `#__virtuemart_manufacturercategories_'.VMLANG.'` AS mc on mc.`virtuemart_manufacturercategories_id`= `m`.`virtuemart_manufacturercategories_id` '; $groupBy=' '; if($getMedia){ $select .= ',mmex.virtuemart_media_id '; $joinedTables .= 'LEFT JOIN `#__virtuemart_manufacturer_medias` as mmex ON `m`.`virtuemart_manufacturer_id`= mmex.`virtuemart_manufacturer_id` '; $groupBy=' GROUP BY `m`.`virtuemart_manufacturer_id` '; } $whereString = ' '; if (count($where) > 0) $whereString = ' WHERE '.implode(' AND ', $where).' ' ; $ordering = $this->_getOrdering(); return $this->_data = $this->exeSortSearchListQuery(0,$select,$joinedTables,$whereString,$groupBy,$ordering ); } } // pure php no closing tagmodels/calc.php000066600000027517151374526160007474 0ustar00 St.Kraft 2013-02-24 manufacturer relation added * @link http://www.virtuemart.net * @copyright Copyright (c) 2004 - 2010 VirtueMart Team. All rights reserved. * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php * VirtueMart is free software. This version may have been modified pursuant * to the GNU General Public License, and as distributed it includes or * is derivative of works licensed under the GNU General Public License or * other free or open source software licenses. * @version $Id: calc.php 6396 2012-09-05 17:35:36Z Milbo $ */ if(!class_exists('VmModel'))require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'vmmodel.php'); class VirtueMartModelCalc extends VmModel { /** * Constructor for the calc model. * * The calc id is read and detmimined if it is an array of ids or just one single id. * * @author RickG */ public function __construct(){ parent::__construct(); $this->setMainTable('calcs'); $this->setToggleName('calc_shopper_published'); $this->setToggleName('calc_vendor_published'); $this->setToggleName('shared'); $this->addvalidOrderingFieldName(array('virtuemart_category_id','virtuemart_country_id','virtuemart_state_id','virtuemart_shoppergroup_id' ,'virtuemart_manufacturer_id' )); } /** * Retrieve the detail record for the current $id if the data has not already been loaded. * * @author Max Milbers */ public function getCalc(){ if (empty($this->_data)) { if(empty($this->_db)) $this->_db = JFactory::getDBO(); $this->_data = $this->getTable('calcs'); $this->_data->load((int)$this->_id); $xrefTable = $this->getTable('calc_categories'); $this->_data->calc_categories = $xrefTable->load($this->_id); if ( $xrefTable->getError() ) { vmError(get_class( $this ).' calc_categories '.$xrefTable->getError()); } $xrefTable = $this->getTable('calc_shoppergroups'); $this->_data->virtuemart_shoppergroup_ids = $xrefTable->load($this->_id); if ( $xrefTable->getError() ) { vmError(get_class( $this ).' calc_shoppergroups '.$xrefTable->getError()); } $xrefTable = $this->getTable('calc_countries'); $this->_data->calc_countries = $xrefTable->load($this->_id); if ( $xrefTable->getError() ) { vmError(get_class( $this ).' calc_countries '.$xrefTable->getError()); } $xrefTable = $this->getTable('calc_states'); $this->_data->virtuemart_state_ids = $xrefTable->load($this->_id); if ( $xrefTable->getError() ) { vmError(get_class( $this ).' virtuemart_state_ids '.$xrefTable->getError()); } $xrefTable = $this->getTable('calc_manufacturers'); $this->_data->virtuemart_manufacturers = $xrefTable->load($this->_id); if ( $xrefTable->getError() ) { vmError(get_class( $this ).' calc_manufacturers '.$xrefTable->getError()); } JPluginHelper::importPlugin('vmcalculation'); $dispatcher = JDispatcher::getInstance(); $dispatcher->trigger('plgVmGetPluginInternalDataCalc',array(&$this->_data)); } // if($errs = $this->getErrors()){ // $app = JFactory::getApplication(); // foreach($errs as $err){ // $app->enqueueMessage($err); // } // } // vmdebug('my calc',$this->_data); return $this->_data; } /** * Retrieve a list of calculation rules from the database. * * @author Max Milbers * @param string $onlyPuiblished True to only retreive the published Calculation rules, false otherwise * @param string $noLimit True if no record count limit is used, false otherwise * @return object List of calculation rule objects */ public function getCalcs($onlyPublished=false, $noLimit=false, $search=false){ $where = array(); $this->_noLimit = $noLimit; // add filters if ($onlyPublished) $where[] = '`published` = 1'; if($search){ $db = JFactory::getDBO(); $search = '"%' . $db->getEscaped( $search, true ) . '%"' ; $where[] = ' `calc_name` LIKE '.$search.' OR `calc_descr` LIKE '.$search.' OR `calc_value` LIKE '.$search.' '; } $whereString= ''; if (count($where) > 0) $whereString = ' WHERE '.implode(' AND ', $where) ; $this->_data = $this->exeSortSearchListQuery(0,'*',' FROM `#__virtuemart_calcs`',$whereString,'',$this->_getOrdering()); if(!class_exists('shopfunctions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'shopfunctions.php'); foreach ($this->_data as $data){ /* Write the first 5 categories in the list */ $data->calcCategoriesList = shopfunctions::renderGuiList('virtuemart_category_id','#__virtuemart_calc_categories','virtuemart_calc_id',$data->virtuemart_calc_id,'category_name','#__virtuemart_categories','virtuemart_category_id','category'); /* Write the first 5 shoppergroups in the list */ $data->calcShoppersList = shopfunctions::renderGuiList('virtuemart_shoppergroup_id','#__virtuemart_calc_shoppergroups','virtuemart_calc_id',$data->virtuemart_calc_id,'shopper_group_name','#__virtuemart_shoppergroups','virtuemart_shoppergroup_id','shoppergroup',4,false); /* Write the first 5 countries in the list */ $data->calcCountriesList = shopfunctions::renderGuiList('virtuemart_country_id','#__virtuemart_calc_countries','virtuemart_calc_id',$data->virtuemart_calc_id,'country_name','#__virtuemart_countries','virtuemart_country_id','country',4,false); /* Write the first 5 states in the list */ $data->calcStatesList = shopfunctions::renderGuiList('virtuemart_state_id','#__virtuemart_calc_states','virtuemart_calc_id',$data->virtuemart_calc_id,'state_name','#__virtuemart_states','virtuemart_state_id','state',4,false); /* Write the first 5 manufacturers in the list */ $data->calcManufacturersList = shopfunctions::renderGuiList('virtuemart_manufacturer_id','#__virtuemart_calc_manufacturers','virtuemart_calc_id',$data->virtuemart_calc_id,'mf_name','#__virtuemart_manufacturers','virtuemart_manufacturer_id','manufacturer'); $query = 'SELECT `currency_name` FROM `#__virtuemart_currencies` WHERE `virtuemart_currency_id` = "'.(int)$data->calc_currency.'" '; $this->_db->setQuery($query); $data->currencyName = $this->_db->loadResult(); JPluginHelper::importPlugin('vmcalculation'); $dispatcher = JDispatcher::getInstance(); $error = $dispatcher->trigger('plgVmGetPluginInternalDataCalcList',array(&$data)); } return $this->_data; } /** * Bind the post data to the calculation table and save it * * @author Max Milbers * @return boolean True is the save was successful, false otherwise. */ public function store(&$data) { JRequest::checkToken() or jexit( 'Invalid Token, in store calc'); $table = $this->getTable('calcs'); // Convert selected dates to MySQL format for storing. $startDate = JFactory::getDate($data['publish_up']); $data['publish_up'] = $startDate->toMySQL(); // if ($data['publish_down'] == '' or $data['publish_down']==0){ if (empty($data['publish_down']) || trim($data['publish_down']) == JText::_('COM_VIRTUEMART_NEVER')){ if(empty($this->_db)) $this->_db = JFactory::getDBO(); $data['publish_down'] = $this->_db->getNullDate(); } else { $expireDate = JFactory::getDate($data['publish_down']); $data['publish_down'] = $expireDate->toMySQL(); } $table->bindChecknStore($data); if($table->getError()){ vmError('Calculation store '.$table->getError()); return false; } $xrefTable = $this->getTable('calc_categories'); $xrefTable->bindChecknStore($data); if($xrefTable->getError()){ vmError('Calculation store '.$xrefTable->getError()); } $xrefTable = $this->getTable('calc_shoppergroups'); $xrefTable->bindChecknStore($data); if($xrefTable->getError()){ vmError('Calculation store '.$xrefTable->getError()); } $xrefTable = $this->getTable('calc_countries'); $xrefTable->bindChecknStore($data); if($xrefTable->getError()){ vmError('Calculation store '.$xrefTable->getError()); } $xrefTable = $this->getTable('calc_states'); $xrefTable->bindChecknStore($data); if($xrefTable->getError()){ vmError('Calculation store '.$xrefTable->getError()); } $xrefTable = $this->getTable('calc_manufacturers'); $xrefTable->bindChecknStore($data); if($xrefTable->getError()){ vmError('Calculation store '.$xrefTable->getError()); } if (!class_exists('vmCalculationPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmcalculationplugin.php'); JPluginHelper::importPlugin('vmcalculation'); $dispatcher = JDispatcher::getInstance(); $error = $dispatcher->trigger('plgVmStorePluginInternalDataCalc',array(&$data)); $errMsg = $this->_db->getErrorMsg(); $errs = $this->_db->getErrors(); if(!empty($errMsg)){ $errNum = $this->_db->getErrorNum(); vmError('SQL-Error: '.$errNum.' '.$errMsg.'
        used query '.$this->_db->getQuery()); } if(!empty($errs)){ foreach($errs as $err){ if(!empty($err)) vmError('Calculation store '.$err); } } return $table->virtuemart_calc_id; } static function getRule($kind){ if (!is_array($kind)) $kind = array($kind); $db = JFactory::getDBO(); $nullDate = $db->getNullDate(); $now = JFactory::getDate()->toMySQL(); $q = 'SELECT * FROM `#__virtuemart_calcs` WHERE '; foreach ($kind as $field){ $q .= '`calc_kind`='.$db->Quote($field).' OR '; } $q=substr($q,0,-3); $q .= 'AND ( publish_up = "' . $db->getEscaped($nullDate) . '" OR publish_up <= "' . $db->getEscaped($now) . '" ) AND ( publish_down = "' . $db->getEscaped($nullDate) . '" OR publish_down >= "' . $db->getEscaped($now) . '" ) '; $db->setQuery($q); $data = $db->loadObjectList(); if (!$data) { $data = new stdClass(); } return $data; } /** * Delete all calcs selected * * @author Max Milbers * @param array $cids categories to remove * @return boolean if the item remove was successful */ public function remove($cids) { JRequest::checkToken() or jexit( 'Invalid Token, in remove category'); $table = $this->getTable($this->_maintablename); $cat = $this->getTable('calc_categories'); $sgrp = $this->getTable('calc_shoppergroups'); $countries = $this->getTable('calc_countries'); $states = $this->getTable('calc_states'); $manufacturers = $this->getTable('calc_manufacturers'); $ok = true; foreach($cids as $id) { $id = (int)$id; vmdebug('remove '.$id); if (!$table->delete($id)) { vmError(get_class( $this ).'::remove '.$id.' '.$table->getError()); $ok = false; } if (!$cat->delete($id)) { vmError(get_class( $this ).'::remove '.$id.' '.$cat->getError()); $ok = false; } if (!$sgrp->delete($id)) { vmError(get_class( $this ).'::remove '.$id.' '.$sgrp->getError()); $ok = false; } if (!$countries->delete($id)) { vmError(get_class( $this ).'::remove '.$id.' '.$countries->getError()); $ok = false; } if (!$states->delete($id)) { vmError(get_class( $this ).'::remove '.$id.' '.$states->getError()); $ok = false; } // Mod. St.Kraft 2013-02-24 if (!$manufacturers->delete($id)) { vmError(get_class( $this ).'::remove '.$id.' '.$manufacturers->getError()); $ok = false; } // if(!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS.DS.'vmpsplugin.php'); JPluginHelper::importPlugin('vmcalculation'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmDeleteCalculationRow', array( $id)); } return $ok; } static function getTaxes() { return self::getRule(array('TAX','VatTax','TaxBill')); } static function getDiscounts(){ return self::getRule(array('DATax','DATaxBill','DBTax','DBTaxBill')); } static function getDBDiscounts() { return self::getRule(array('DBTax','DBTaxBill')); } static function getDADiscounts() { return self::getRule(array('DATax','DATaxBill')); } }models/coupon.php000066600000005547151374526160010074 0ustar00setMainTable('coupons'); } /** * Retrieve the detail record for the current $id if the data has not already been loaded. * * @author RickG */ function getCoupon() { $db = JFactory::getDBO(); if (empty($this->_data)) { $this->_data = $this->getTable('coupons'); $this->_data->load((int)$this->_id); } if (!$this->_data) { $this->_data = new stdClass(); $this->_id = 0; $this->_data = null; } return $this->_data; } /** * Bind the post data to the coupon table and save it * * @author RickG, Oscar van Eijk * @return mixed False if the save was unsuccessful, the coupon ID otherwise. */ function store(&$data) { $table = $this->getTable('coupons'); //$data = JRequest::get('post'); $table->bindChecknStore($data); // Convert selected dates to MySQL format for storing. if ($data['coupon_start_date']) { $startDate = JFactory::getDate($data['coupon_start_date']); $data['coupon_start_date'] = $startDate->toMySQL(); } if ($data['coupon_expiry_date']) { $expireDate = JFactory::getDate($data['coupon_expiry_date']); $data['coupon_expiry_date'] = $expireDate->toMySQL(); } parent::store($data); return $table->virtuemart_coupon_id; } /** * Retireve a list of coupons from the database. * * @author RickG * @return object List of coupon objects */ function getCoupons() { $whereString = ''; // if (count($where) > 0) $whereString = ' WHERE '.implode(' AND ', $where) ; return $this->_data = $this->exeSortSearchListQuery(0,'*',' FROM `#__virtuemart_coupons`',$whereString,'',$this->_getOrdering()); } } // pure php no closing tagmodels/category.php000066600000071437151374526160010407 0ustar00setMainTable('categories'); $this->addvalidOrderingFieldName(self::$_validOrderingFields); $toCheck = VmConfig::get('browse_cat_orderby_field','category_name'); if(!in_array($toCheck, $this->_validOrderingFieldName)){ $toCheck = 'category_name'; } $this->_selectedOrdering = $toCheck; $this->_selectedOrderingDir = VmConfig::get('cat_brws_orderby_dir', 'ASC'); $this->setToggleName('shared'); } /** * Retrieve the detail record for the current $id if the data has not already been loaded. * * @author RickG, jseros, RolandD, Max Milbers */ public function getCategory($virtuemart_category_id=0,$childs=TRUE){ if(!empty($virtuemart_category_id)) $this->setId((int)$virtuemart_category_id); if (empty($this->_data)) { $this->_data = $this->getTable('categories'); $this->_data->load((int)$this->_id); $xrefTable = $this->getTable('category_medias'); $this->_data->virtuemart_media_id = $xrefTable->load((int)$this->_id); if($xrefTable->getError()) vmError($xrefTable->getError()); if(empty($this->_data->category_template)){ $this->_data->category_template = VmConfig::get('categorytemplate'); } if(empty($this->_data->category_layout)){ $this->_data->category_layout = VmConfig::get('categorylayout'); } if($childs){ $this->_data->haschildren = $this->hasChildren($this->_id); /* Get children if they exist */ if ($this->_data->haschildren) $this->_data->children = $this->getCategories(true,$this->_id); else $this->_data->children = null; /* Get the product count */ $this->_data->productcount = $this->countProducts($this->_id); /* Get parent for breatcrumb */ $this->_data->parents = $this->getParentsList($this->_id); } if($errs = $this->getErrors()){ $app = JFactory::getApplication(); foreach($errs as $err){ $app->enqueueMessage($err); } } } return $this->_data; } /** * Get the list of child categories for a given category, is cached * * @param int $virtuemart_category_id Category id to check for child categories * @return object List of objects containing the child categories * */ public function getChildCategoryList($vendorId, $virtuemart_category_id,$selectedOrdering = null, $orderDir = null, $cache = true) { $useCache = true; if(empty($this) or get_class($this)!='VirtueMartModelCategory'){ $useCache = false; } if($selectedOrdering===null){ if($useCache){ $selectedOrdering = $this->_selectedOrdering; } else { $selectedOrdering = VmConfig::get('browse_cat_orderby_field','category_name'); } } if(!in_array($selectedOrdering, self::$_validOrderingFields)){ $selectedOrdering = 'category_name'; } if($orderDir===null){ if($useCache){ $orderDir = $this->_selectedOrderingDir; } else { $orderDir = VmConfig::get('cat_brws_orderby_dir', 'ASC'); } } $validOrderingDir = array('ASC','DESC'); if(!in_array(strtoupper($orderDir), $validOrderingDir)){ $orderDir = 'ASC'; } static $_childCategoryList = array (); $key = (int)$vendorId.'_'.(int)$virtuemart_category_id.$selectedOrdering.$orderDir.VMLANG ; //We have here our internal key to preven calling of the cache if (! array_key_exists ($key,$_childCategoryList)){ if($useCache){ $cache = JFactory::getCache('com_virtuemart_cats','callback'); $cache->setCaching(true); $_childCategoryList[$key] = $cache->call( array( 'VirtueMartModelCategory', 'getChildCategoryListObject' ),$vendorId, $virtuemart_category_id, $selectedOrdering, $orderDir); } else { $_childCategoryList[$key] = VirtueMartModelCategory::getChildCategoryListObject($vendorId, $virtuemart_category_id, $selectedOrdering, $orderDir); } } return $_childCategoryList[$key]; } /** * Be aware we need the lang to assure that the cache works properly. The cache needs all paraemeters * in the function call to use the right hash * * @author Max Milbers * @param $vendorId * @param $virtuemart_category_id * @param null $selectedOrdering * @param null $orderDir * @param $lang * @return mixed */ static public function getChildCategoryListObject($vendorId, $virtuemart_category_id,$selectedOrdering = null, $orderDir = null,$lang = VMLANG) { $query = 'SELECT L.* FROM `#__virtuemart_categories_'.$lang.'` as L JOIN `#__virtuemart_categories` as c using (`virtuemart_category_id`)'; $query .= ' LEFT JOIN `#__virtuemart_category_categories` as cx on c.`virtuemart_category_id` = cx.`category_child_id` '; $query .= 'WHERE cx.`category_parent_id` = ' . (int)$virtuemart_category_id . ' '; $query .= 'AND c.`virtuemart_vendor_id` = ' . (int)$vendorId . ' '; $query .= 'AND c.`published` = 1 '; $query .= ' ORDER BY '.$selectedOrdering.' '.$orderDir; $db = JFactory::getDBO(); $db->setQuery( $query); $childList = $db->loadObjectList(); if(!empty($childList)){ if(!class_exists('TableCategory_medias'))require(JPATH_VM_ADMINISTRATOR.DS.'tables'.DS.'category_medias.php'); foreach($childList as $child){ $xrefTable = new TableCategory_medias($db); $child->virtuemart_media_id = $xrefTable->load($child->virtuemart_category_id); } } return $childList; } // public sortArraysPerXref(){ // $q = 'SELECT * FROM ' // } public function getCategoryTree($parentId=0, $level = 0, $onlyPublished = true,$keyword = ''){ $sortedCats = array(); $limits = $this->setPaginationLimits(); $limitStart = $limits[0]; $limit = $limits[1]; // vmRam('What take the cats?'); $this->_noLimit = true; if($keyword!=''){ $sortedCats = self::getCategories($onlyPublished, false, false, $keyword); } else { $this->rekurseCats($parentId,$level,$onlyPublished,$keyword,$sortedCats); } $this->_noLimit = false; $this->_total = count($sortedCats); $this->_limitStart = $limitStart; $this->_limit = $limit; $this->getPagination(); if(empty($limit)){ return $sortedCats; } else { $sortedCats = array_slice($sortedCats, $limitStart,$limit); return $sortedCats; } } public function rekurseCats($virtuemart_category_id,$level,$onlyPublished,$keyword,&$sortedCats){ $level++; if($this->hasChildren($virtuemart_category_id)){ $childCats = self::getCategories($onlyPublished, $virtuemart_category_id, false, $keyword); if(!empty($childCats)){ foreach ($childCats as $key => $category) { $category->level = $level; $sortedCats[] = $category; $this->rekurseCats($category->virtuemart_category_id,$level,$onlyPublished,$keyword,$sortedCats); } } } } public function getCategories($onlyPublished = true, $parentId = false, $childId = false, $keyword = "") { $vendorId = 1; $select = ' c.`virtuemart_category_id`, l.`category_description`, l.`category_name`, c.`ordering`, c.`published`, cx.`category_child_id`, cx.`category_parent_id`, c.`shared` '; $joinedTables = ' FROM `#__virtuemart_categories_'.VMLANG.'` l JOIN `#__virtuemart_categories` AS c using (`virtuemart_category_id`) LEFT JOIN `#__virtuemart_category_categories` AS cx ON l.`virtuemart_category_id` = cx.`category_child_id` '; $where = array(); if( $onlyPublished ) { $where[] = " c.`published` = 1 "; } if( $parentId !== false ){ $where[] = ' cx.`category_parent_id` = '. (int)$parentId; } if( $childId !== false ){ $where[] = ' cx.`category_child_id` = '. (int)$childId; } if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if( !Permissions::getInstance()->check('admin') ){ $where[] = ' (c.`virtuemart_vendor_id` = "'. (int)$vendorId. '" OR c.`shared` = "1") '; } if( !empty( $keyword ) ) { $keyword = '"%' . $this->_db->getEscaped( $keyword, true ) . '%"' ; //$keyword = $this->_db->Quote($keyword, false); $where[] = ' ( l.`category_name` LIKE '.$keyword.' OR l.`category_description` LIKE '.$keyword.') '; } $whereString = ''; if (count($where) > 0){ $whereString = ' WHERE '.implode(' AND ', $where) ; } else { $whereString = 'WHERE 1 '; } $ordering = $this->_getOrdering(); $this->_category_tree = $this->exeSortSearchListQuery(0,$select,$joinedTables,$whereString,'',$ordering ); return $this->_category_tree; } /** * count the products in a category * * @author Max Milbers * @return array list of categories product is in */ public function countProducts($cat_id=0) { if(!empty($this->_db))$this->_db = JFactory::getDBO(); $vendorId = 1; if ($cat_id > 0) { $q = 'SELECT count(#__virtuemart_products.virtuemart_product_id) AS total FROM `#__virtuemart_products`, `#__virtuemart_product_categories` WHERE `#__virtuemart_products`.`virtuemart_vendor_id` = "'.(int)$vendorId.'" AND `#__virtuemart_product_categories`.`virtuemart_category_id` = '.(int)$cat_id.' AND `#__virtuemart_products`.`virtuemart_product_id` = `#__virtuemart_product_categories`.`virtuemart_product_id` AND `#__virtuemart_products`.`published` = "1" '; $this->_db->setQuery($q); $count = $this->_db->loadResult(); } else $count=0 ; return $count; } /** * Order any category * * @author jseros * @param int $id category id * @param int $movement movement number * @return bool */ public function orderCategory($id, $movement){ //retrieving the category table object //and loading data $row = $this->getTable('categories'); $row->load($id); $query = 'SELECT `category_parent_id` FROM `#__virtuemart_category_categories` WHERE `category_child_id` = '. (int)$row->virtuemart_category_id ; $this->_db->setQuery($query); $parent = $this->_db->loadObject(); if (!$row->move( $movement, $parent->category_parent_id)) { vmError($row->getError()); return false; } return true; } /** * Order category group * * @author jseros * @param array $cats categories to order * @return bool */ public function setOrder($cats, $order){ $total = count( $cats ); $groupings = array(); $row = $this->getTable('categories'); $query = 'SELECT `category_parent_id` FROM `#__virtuemart_categories` c LEFT JOIN `#__virtuemart_category_categories` cx ON c.`virtuemart_category_id` = cx.`category_child_id` WHERE c.`virtuemart_category_id` = %s'; // update ordering values for( $i=0; $i < $total; $i++ ) { $row->load( $cats[$i] ); $this->_db->setQuery( sprintf($query, (int)$cats[$i] ), 0 ,1 ); $parent = $this->_db->loadObject(); $groupings[] = $parent->category_parent_id; if ($row->ordering != $order[$i]) { $row->ordering = $order[$i]; if (!$row->toggle('ordering',$row->ordering)) { vmError($row->getError()); return false; } } } // execute reorder for each parent group $groupings = array_unique( $groupings ); foreach ($groupings as $group){ $row->reorder($group); } $cache = JFactory::getCache('com_virtuemart_cats','callback'); $cache->clean(); return true; } /** * Retrieve the detail record for the parent category of $categoryd * * @author jseros * * @param int $categoryId Child category id * @return JTable parent category data */ public function getParentCategory( $categoryId = 0 ){ $data = $this->getRelationInfo( $categoryId ); $parentId = isset($data->category_parent_id) ? $data->category_parent_id : 0; $parent = $this->getTable('categories'); $parent->load((int) $parentId); return $parent; } /** * Retrieve category child-parent relation record * * @author jseros * * @param int $virtuemart_category_id * @return object Record of parent relation */ public function getRelationInfo( $virtuemart_category_id = 0 ){ $virtuemart_category_id = (int) $virtuemart_category_id; $query = 'SELECT `category_parent_id`, `ordering` FROM `#__virtuemart_category_categories` WHERE `category_child_id` = '. $this->_db->Quote($virtuemart_category_id); $this->_db->setQuery($query); return $this->_db->loadObject(); } /** * Bind the post data to the category table and save it * * @author jseros, RolandD, Max Milbers * @return int category id stored */ public function store(&$data) { JRequest::checkToken() or jexit( 'Invalid Token, in store category'); $table = $this->getTable('categories'); /* vmdebug('categorytemplate to null',VmConfig::get('categorytemplate'),$data['category_template']); * VmConfig::get('categorytemplate') = default * $data['category_template'] = 0 */ if ( !array_key_exists ('category_template' , $data ) ){ $data['category_template'] = $data['category_layout'] = $data['category_product_layout'] = 0 ; } if(VmConfig::get('categorytemplate') == $data['category_template'] ){ $data['category_template'] = 0; } if(VmConfig::get('categorylayout') == $data['category_layout']){ $data['category_layout'] = 0; } if(VmConfig::get('productlayout') == $data['category_product_layout']){ $data['category_product_layout'] = 0; } // vmdebug('category store ',$data); $table->bindChecknStore($data); $errors = $table->getErrors(); foreach($errors as $error){ vmError($error); } if(!empty($data['virtuemart_category_id'])){ $xdata['category_child_id'] = (int)$data['virtuemart_category_id']; $xdata['category_parent_id'] = empty($data['category_parent_id'])? 0:(int)$data['category_parent_id']; $xdata['ordering'] = empty($data['ordering'])? 0: (int)$data['ordering']; $table = $this->getTable('category_categories'); $table->bindChecknStore($xdata); $errors = $table->getErrors(); foreach($errors as $error){ vmError($error); } } // Process the images $mediaModel = VmModel::getModel('Media'); $file_id = $mediaModel->storeMedia($data,'category'); $errors = $mediaModel->getErrors(); foreach($errors as $error){ vmError($error); } $cache = JFactory::getCache('com_virtuemart_cats','callback'); $cache->clean(); return $data['virtuemart_category_id'] ; } /** * Delete all categories selected * * @author jseros * @param array $cids categories to remove * @return boolean if the item remove was successful */ public function remove($cids) { JRequest::checkToken() or jexit( 'Invalid Token, in remove category'); $table = $this->getTable('categories'); foreach($cids as &$cid) { if (!$table->delete($cid)) { vmError($table->getError()); return false; } $db = JFactory::getDbo(); $q = 'SELECT `virtuemart_customfield_id` FROM `#__virtuemart_product_customfields` as pc '; $q .= 'LEFT JOIN `#__virtuemart_customs`as c using (`virtuemart_custom_id`) WHERE pc.`custom_value` = "' . $cid . '" AND `field_type`= "Z"'; $db->setQuery($q); $list = $db->loadResultArray(); if ($list) { $listInString = implode(',',$list); //Delete media xref $query = 'DELETE FROM `#__virtuemart_product_customfields` WHERE `virtuemart_customfield_id` IN ('. $listInString .') '; $this->_db->setQuery($query); if(!$this->_db->query()){ vmError( $this->_db->getErrorMsg() ); } } } $cidInString = implode(',',$cids); //Delete media xref $query = 'DELETE FROM `#__virtuemart_category_medias` WHERE `virtuemart_category_id` IN ('. $cidInString .') '; $this->_db->setQuery($query); if(!$this->_db->query()){ vmError( $this->_db->getErrorMsg() ); } //deleting product relations $query = 'DELETE FROM `#__virtuemart_product_categories` WHERE `virtuemart_category_id` IN ('. $cidInString .') '; $this->_db->setQuery($query); if(!$this->_db->query()){ vmError( $this->_db->getErrorMsg() ); } //deleting category relations $query = 'DELETE FROM `#__virtuemart_category_categories` WHERE `category_child_id` IN ('. $cidInString .') '; $this->_db->setQuery($query); if(!$this->_db->query()){ vmError( $this->_db->getErrorMsg() ); } //updating parent relations $query = 'UPDATE `#__virtuemart_category_categories` SET `category_parent_id` = 0 WHERE `category_parent_id` IN ('. $cidInString .') '; $this->_db->setQuery($query); if(!$this->_db->query()){ vmError( $this->_db->getErrorMsg() ); } $cache = JFactory::getCache('com_virtuemart_cats','callback'); $cache->clean(); return true; } /** * Checks for children of the category $virtuemart_category_id * * @author RolandD * @param int $virtuemart_category_id the category ID to check * @return boolean true when the category has childs, false when not */ public function hasChildren($virtuemart_category_id) { // vmSetStartTime('hasChildren'); $db = JFactory::getDBO(); $q = "SELECT `category_child_id` FROM `#__virtuemart_category_categories` WHERE `category_parent_id` = ".(int)$virtuemart_category_id; $db->setQuery($q); $db->query(); if ($db->getAffectedRows() > 0){ // vmTime('hasChildren YES','hasChildren'); return true; } else { // vmTime('hasChildren NO','hasChildren'); return false; } } /** * Creates a bulleted of the childen of this category if they exist * * @author RolandD * @todo Add vendor ID * @param int $virtuemart_category_id the category ID to create the list of * @return array containing the child categories */ public function getParentsList($virtuemart_category_id) { $db = JFactory::getDBO(); $menu = JFactory::getApplication()->getMenu(); $parents = array(); if (empty($query['Itemid'])) { $menuItem = $menu->getActive(); } else { $menuItem = $menu->getItem($query['Itemid']); } $menuCatid = (empty($menuItem->query['virtuemart_category_id'])) ? 0 : $menuItem->query['virtuemart_category_id']; if ($menuCatid == $virtuemart_category_id) return ; $parents_id = array_reverse($this->getCategoryRecurse($virtuemart_category_id,$menuCatid)); foreach ($parents_id as $id ) { $q = 'SELECT `category_name`,`virtuemart_category_id` FROM `#__virtuemart_categories_'.VMLANG.'` WHERE `virtuemart_category_id`='.(int)$id; $db->setQuery($q); $parents[] = $db->loadObject(); } return $parents; } var $categoryRecursed = 0; function getCategoryRecurse($virtuemart_category_id,$catMenuId,$first=true ) { static $idsArr = array(); if($first) { $idsArr = array(); $this->categoryRecursed = 0; } else if($this->categoryRecursed>10){ vmWarn('Stopped getCategoryRecurse after 10 rekursions'); return $idsArr; } $db = JFactory::getDBO(); $q = "SELECT `category_child_id` AS `child`, `category_parent_id` AS `parent` FROM `#__virtuemart_category_categories` AS `xref` WHERE `xref`.`category_child_id`= ".(int)$virtuemart_category_id; $db->setQuery($q); if (!$ids = $db->loadObject()) { return $idsArr; } if ($ids->child) $idsArr[] = $ids->child; if($ids->child != 0 and $catMenuId != $virtuemart_category_id and $catMenuId != $ids->parent) { $this->categoryRecursed++; $this->getCategoryRecurse($ids->parent,$catMenuId,false); } return $idsArr; } /** * Stuff of categorydetails */ /* array container for category tree ID*/ var $container = array(); /** * Sorts an array with categories so the order of the categories is the same as in a tree. * * @author jseros * * @param array $this->_category_tree * @return associative array ordering categories * @deprecated */ public function sortCategoryTree($categoryArr){ /** FIRST STEP * Order the Category Array and build a Tree of it **/ $idList = array(); $rowList = array(); $depthList = array(); $children = array(); $parentIds = array(); $parentIdsHash = array(); $parentId = 0; for( $i = 0, $nrows = count($categoryArr); $i < $nrows; $i++ ) { $parentIds[$i] = $categoryArr[$i]->category_parent_id; if($categoryArr[$i]->category_parent_id == 0){ array_push($idList, $categoryArr[$i]->category_child_id); array_push($rowList, $i); array_push($depthList, 0); } $parentId = $parentIds[$i]; if( isset($parentIdsHash[$parentId] )){ $parentIdsHash[$parentId][$categoryArr[$i]->category_child_id] = $i; } else{ $parentIdsHash[$parentId] = array($categoryArr[$i]->category_child_id => $i); } } $loopCount = 0; $watch = array(); // Hash to store children while( count($idList) < $nrows ){ if( $loopCount > $nrows ) break; $idTemp = array(); $rowTemp = array(); $depthTemp = array(); for($i = 0, $cIdlist = count($idList); $i < $cIdlist ; $i++) { $id = $idList[$i]; $row = $rowList[$i]; $depth = $depthList[$i]; array_push($idTemp, $id); array_push($rowTemp, $row); array_push($depthTemp, $depth); $children = @$parentIdsHash[$id]; if( !empty($children) ){ foreach($children as $key => $value) { if( !isset($watch[$id][$key]) ){ $watch[$id][$key] = 1; array_push($idTemp, $key); array_push($rowTemp, $value); array_push($depthTemp, $depth + 1); } } } } $idList = $idTemp; $rowList = $rowTemp; $depthList = $depthTemp; $loopCount++; } return array('id_list' => $idList, 'row_list' => $rowList, 'depth_list' => $depthList, 'categories' => $categoryArr ); } /* * Returns an array of the categories recursively for a given category * @author Kohl Patrick * @param int $id * @param int $maxLevel * @Object $this->container * @deprecated */ function treeCat($id=0,$maxLevel =1000) { static $level = 0; static $num = -1 ; $db = JFactory::getDBO(); $q = 'SELECT `category_child_id`,`category_name` FROM `#__virtuemart_categories_'.VMLANG.'` LEFT JOIN `#__virtuemart_category_categories` on `#__virtuemart_categories`.`virtuemart_category_id`=`#__virtuemart_category_categories`.`category_child_id` WHERE `category_parent_id`='.(int)$id; $db->setQuery($q); $num ++; // if it is a leaf (no data underneath it) then return $childs = $db->loadObjectList(); if ($level==$maxLevel) return; if ($childs) { $level++; foreach ($childs as $child) { $this->container[$num]->id = $child->category_child_id; $this->container[$num]->name = $child->category_name; $this->container[$num]->level = $level; self::treeCat($child->category_child_id,$maxLevel ); } $level--; } } /** * @author Kohl Patrick * @param $maxlevel the number of level * @param $id the root category id * @Object $this->container * @ return categories id, name and level in container * if you set Maxlevel to 0, then you see nothing * max level =1 for simple category,2 for category and child cat .... * don't set it for all (1000 levels) * @deprecated */ function GetTreeCat($id=0,$maxLevel = 1000) { self::treeCat($id ,$maxLevel) ; return $this->container ; } /** * This function is repsonsible for returning an array containing category information * @param boolean Show only published products? * @param string the keyword to filter categories * @deprecated */ function getCategoryTreeArray( $only_published=true, $keyword = "" ) { $db = JFactory::getDBO(); if( empty( $this->_category_tree)) { // Get only published categories $query = "SELECT `virtuemart_category_id`, `category_description`, `category_name`,`category_child_id`, `category_parent_id`,`#__virtuemart_categories`.`ordering`, `published` as category_publish FROM `#__virtuemart_category_categories`, `#__virtuemart_categories_".VMLANG."` as L JOIN `#__virtuemart_categories` using (`virtuemart_category_id`) WHERE "; if( $only_published ) { $query .= "`#__virtuemart_categories`.`published`=1 AND "; } $query .= " L.`virtuemart_category_id`=`#__virtuemart_category_categories`.`category_child_id` "; if( !empty( $keyword ) ) { $keyword = '"%' . $this->_db->getEscaped( $keyword, true ) . '%"' ; //$keyword = $this->_db->Quote($keyword, false); $query .= 'AND ( `category_name` LIKE '.$keyword.' OR `category_description` LIKE '.$keyword.') '; } /* if( !empty( $keyword )) { $query .= "AND ( `category_name` LIKE '%$keyword%' "; $query .= "OR `category_description` LIKE '%$keyword%' "; $query .= ") "; }*/ $query .= " ORDER BY `#__virtuemart_categories`.`ordering` ASC, L.`category_name` ASC"; // initialise the query in the $database connector $db->setQuery($query); // Transfer the Result into a searchable Array $dbCategories = $db->loadAssocList(); //if (!$ids = $db->loadObject()) foreach( $dbCategories as $Cat ) { $this->_category_tree[$Cat['category_child_id']] = $Cat; } } } /** * Sorts an array with categories so the order of the categories is the same as in a tree, just as a flat list. * The Tree Depth is * * @deprecated * @param array $categoryArr */ function sortCategoryTreeArray() { // Copy the Array into an Array with auto_incrementing Indexes $key = array_keys($this->_category_tree); // Array of category table primary keys $nrows = $size = sizeOf($key); // Category count /** FIRST STEP * Order the Category Array and build a Tree of it **/ $id_list = array(); $row_list = array(); $depth_list = array(); $children = array(); $parent_ids = array(); $parent_ids_hash = array(); //Build an array of category references $category_tmp = Array(); for ($i=0; $i<$size; $i++) { $category_tmp[$i] = $this->_category_tree[$key[$i]]; $parent_ids[$i] = $category_tmp[$i]['category_parent_id']; if($category_tmp[$i]["category_parent_id"] == 0) { array_push($id_list,$category_tmp[$i]["category_child_id"]); array_push($row_list,$i); array_push($depth_list,0); } $parent_id = $parent_ids[$i]; if (isset($parent_ids_hash[$parent_id])) { $parent_ids_hash[$parent_id][$i] = $parent_id; } else { $parent_ids_hash[$parent_id] = array($i => $parent_id); } } $loop_count = 0; $watch = array(); // Hash to store children while(count($id_list) < $nrows) { if( $loop_count > $nrows ) break; $id_temp = array(); $row_temp = array(); $depth_temp = array(); for($i = 0 ; $i < count($id_list) ; $i++) { $id = $id_list[$i]; $row = $row_list[$i]; $depth = $depth_list[$i]; array_push($id_temp,$id); array_push($row_temp,$row); array_push($depth_temp,$depth); $children = @$parent_ids_hash[$id]; if (!empty($children)) { foreach($children as $key => $value) { if( !isset($watch[$id][$category_tmp[$key]["category_child_id"]])) { $watch[$id][$category_tmp[$key]["category_child_id"]] = 1; array_push($id_temp,$category_tmp[$key]["category_child_id"]); array_push($row_temp,$key); array_push($depth_temp,$depth + 1); } } } } $id_list = $id_temp; $row_list = $row_temp; $depth_list = $depth_temp; $loop_count++; } return array('id_list' => $id_list, 'row_list' => $row_list, 'depth_list' => $depth_list, 'category_tmp' => $category_tmp); } }models/state.php000066600000007763151374526160007713 0ustar00setMainTable('states'); $this->_selectedOrderingDir = 'ASC'; } /** * Retrieve the detail record for the current $id if the data has not already been loaded. * * Renamed to getSingleState to avoid overwriting by jseros * * @author Max Milbers */ function getSingleState(){ if (empty($this->_data)) { $this->_data = $this->getTable('states'); $this->_data->load((int)$this->_id); } return $this->_data; } /** * Retireve a list of countries from the database. * * @author RickG, Max Milbers * @return object List of state objects */ public function getStates($countryId, $noLimit=false, $published = false) { $quer= 'SELECT * FROM `#__virtuemart_states` WHERE `virtuemart_country_id`= "'.(int)$countryId.'" '; if($published){ $quer .= 'AND `published`="1" '; } $quer .= 'ORDER BY `#__virtuemart_states`.`state_name`'; if ($noLimit) { $this->_data = $this->_getList($quer); } else { $this->_data = $this->_getList($quer, $this->getState('limitstart'), $this->getState('limit')); } if(count($this->_data) >0){ $this->_total = $this->_getListCount($quer); } return $this->_data; } /** * Tests if a state and country fits together and if they are published * * @author Max Milbers * @return String Attention, this function gives a 0=false back in case of success */ public static function testStateCountry($countryId,$stateId) { $countryId = (int)$countryId; $stateId = (int)$stateId; vmdebug('testStateCountry country '.$countryId.' $stateId '.$stateId); $db = JFactory::getDBO(); $q = 'SELECT * FROM `#__virtuemart_countries` WHERE `virtuemart_country_id`= "'.$countryId.'" AND `published`="1" '; $db->setQuery($q); if($db->loadResult()){ //Test if country has states $q = 'SELECT * FROM `#__virtuemart_states` WHERE `virtuemart_country_id`= "'.$countryId.'" AND `published`="1" '; $db->setQuery($q); if($res = $db->loadResult()){ vmdebug('testStateCountry country has states ',$res); //Test if virtuemart_state_id fits to virtuemart_country_id $q = 'SELECT * FROM `#__virtuemart_states` WHERE `virtuemart_country_id`= "'.$countryId.'" AND `virtuemart_state_id`="'.$stateId.'" and `published`="1"'; $db->setQuery($q); if($db->loadResult()){ return true; } else { //There is a country, but the state does not exist or is unlisted return false; } } else { vmdebug('testStateCountry country has no states listed'); //This country has no states listed return true; } } else { //The given country does not exist, this can happen, when no country was chosen, which maybe valid. return true; } } } // pure php no closing tagmodels/index.html000066600000000054151374526160010041 0ustar00models/inventory.php000066600000006370151374526160010621 0ustar00setMainTable('products'); $this->addvalidOrderingFieldName(array('product_name','product_sku','product_in_stock','product_price','product_weight','published')); } /** * Select the products to list on the product list page * @author Max Milbers */ public function getInventory() { $select = ' `#__virtuemart_products`.`virtuemart_product_id`, `#__virtuemart_products`.`product_parent_id`, `product_name`, `product_sku`, `product_in_stock`, `product_weight`, `published`, `product_price`'; $joinedTables = 'FROM `#__virtuemart_products` LEFT JOIN `#__virtuemart_product_prices` ON `#__virtuemart_products`.`virtuemart_product_id` = `#__virtuemart_product_prices`.`virtuemart_product_id` LEFT JOIN `#__virtuemart_shoppergroups` ON `#__virtuemart_product_prices`.`virtuemart_shoppergroup_id` = `#__virtuemart_shoppergroups`.`virtuemart_shoppergroup_id`'; return $this->_data = $this->exeSortSearchListQuery(0,$select,$joinedTables,$this->getInventoryFilter(),'',$this->_getOrdering()); } /** * Collect the filters for the query * @author RolandD * @author Max Milbers */ private function getInventoryFilter() { /* Check some filters */ $filters = array(); if ($search = JRequest::getVar('filter_inventory', false)){ $search = '"%' . $this->_db->getEscaped( $search, true ) . '%"' ; //$search = $this->_db->Quote($search, false); $filters[] = '`#__virtuemart_products`.`product_name` LIKE '.$search; } if (JRequest::getInt('stockfilter', 0) == 1){ $filters[] = '`#__virtuemart_products`.`product_in_stock` > 0'; } if ($catId = JRequest::getInt('virtuemart_category_id', 0) > 0){ $filters[] = '`#__virtuemart_categories`.`virtuemart_category_id` = '.$catId; } $filters[] = '(`#__virtuemart_shoppergroups`.`default` = 1 OR `#__virtuemart_shoppergroups`.`default` is NULL)'; return ' WHERE '.implode(' AND ', $filters).$this->_getOrdering(); } } // pure php no closing tagmodels/worldzones.php000066600000004325151374526160010770 0ustar00setMainTable('worldzones'); } /** * Retrieve the detail record for the current $id if the data has not already been loaded. * * @author RickG */ function getShipmentZone() { $db = JFactory::getDBO(); if (empty($this->_data)) { $query = 'SELECT * '; $query .= 'FROM `#__virtuemart_worldzones` '; $query .= 'WHERE `virtuemart_worldzone_id` = ' . (int)$this->_id; $db->setQuery($query); $this->_data = $db->loadObject(); } if (!$this->_data) { $this->_data = new stdClass(); $this->_id = 0; $this->_data = null; } return $this->_data; } /** * Retrieve a list of zone ids and zone names for use in a HTML select list. * * @author RickG */ function getWorldZonesSelectList() { $db = JFactory::getDBO(); $query = 'SELECT `virtuemart_worldzone_id`, `zone_name` '; $query .= 'FROM `#__virtuemart_worldzones`'; $db->setQuery($query); return $db->loadObjectList(); } } // pure php no closing tagmodels/vendor.php000066600000031101151374526160010047 0ustar00setId (1); } $this->setMainTable ('vendors'); } /** * name: getLoggedVendor * Checks which $vendorId has the just logged in user. * * @author Max Milbers * @param @param $ownerOnly returns only an id if the vendorOwner is logged in (dont get confused with storeowner) * returns int $vendorId */ static function getLoggedVendor ($ownerOnly = TRUE) { $user = JFactory::getUser (); $userId = $user->id; if (isset($userId)) { $vendorId = self::getVendorId ('user', $userId, $ownerOnly); return $vendorId; } else { JError::raiseNotice (1, '$virtuemart_user_id empty, no user logged in'); return 0; } } /** * Retrieve the vendor details from the database. * * @author Max Milbers * @return object Vendor details */ function getVendor ($vendor_id = NULL) { if ($vendor_id) { $this->_id = $vendor_id; } if (empty($this->_data)) { $this->_data = $this->getTable ('vendors'); $this->_data->load ($this->_id); // vmdebug('getVendor',$this->_id,$this->_data); // Convert ; separated string into array if ($this->_data->vendor_accepted_currencies) { $this->_data->vendor_accepted_currencies = explode (',', $this->_data->vendor_accepted_currencies); } else { $this->_data->vendor_accepted_currencies = array(); } //Todo, check this construction $xrefTable = $this->getTable ('vendor_medias'); $this->_data->virtuemart_media_id = $xrefTable->load ($this->_id); } return $this->_data; } /** * Retrieve a list of vendors * todo only names are needed here, maybe it should be enhanced (loading object list is slow) * todo add possibility to load without limit * * @author RickG * @author Max Milbers * @return object List of vendors */ public function getVendors () { $this->setId (0); //This is important ! notice by Max Milbers $query = 'SELECT * FROM `#__virtuemart_vendors_' . VMLANG . '` as l JOIN `#__virtuemart_vendors` as v using (`virtuemart_vendor_id`)'; $query .= ' ORDER BY l.`virtuemart_vendor_id`'; $this->_data = $this->_getList ($query, $this->getState ('limitstart'), $this->getState ('limit')); return $this->_data; } /** * Find the user id given a vendor id * * @author Max Milbers * @param int $virtuemart_vendor_id * @return int $virtuemart_user_id */ static function getUserIdByVendorId ($vendorId) { //this function is used static, needs its own db if (empty($vendorId)) { return; } else { $db = JFactory::getDBO (); $query = 'SELECT `virtuemart_user_id` FROM `#__virtuemart_vmusers` WHERE `virtuemart_vendor_id`=' . (int)$vendorId; $db->setQuery ($query); $result = $db->loadResult (); $err = $db->getErrorMsg (); if (!empty($err)) { vmError ('getUserIdByVendorId ' . $err, 'Failed to retrieve user id by vendor'); } return (isset($result) ? $result : 0); } } /** * Bind the post data to the vendor table and save it * This function DOES NOT safe information which is in the vmusers or vm_user_info table * It only stores the stuff into the vendor table * * @author RickG * @author Max Milbers * @return boolean True is the save was successful, false otherwise. */ function store (&$data) { JPluginHelper::importPlugin ('vmvendor'); $dispatcher = JDispatcher::getInstance (); $plg_datas = $dispatcher->trigger ('plgVmOnVendorStore', $data); foreach ($plg_datas as $plg_data) { $data = array_merge ($plg_data); } $oldVendorId = $data['virtuemart_vendor_id']; $table = $this->getTable ('vendors'); /* if(!$table->checkDataContainsTableFields($data)){ $app = JFactory::getApplication(); //$app->enqueueMessage('Data contains no Info for vendor, storing not needed'); return $this->_id; }*/ // Store multiple selectlist entries as a ; separated string if (array_key_exists ('vendor_accepted_currencies', $data) && is_array ($data['vendor_accepted_currencies'])) { $data['vendor_accepted_currencies'] = implode (',', $data['vendor_accepted_currencies']); } $table->bindChecknStore ($data); $errors = $table->getErrors (); foreach ($errors as $error) { $this->setError ($error); vmError ('store vendor', $error); } //set vendormodel id to the lastinserted one // $dbv = $table->getDBO(); // if(empty($this->_id)) $this->_id = $dbv->insertid(); if (empty($this->_id)) { $data['virtuemart_vendor_id'] = $this->_id = $table->virtuemart_vendor_id; } if ($this->_id != $oldVendorId) { vmdebug('Developer notice, tried to update vendor xref should not appear in singlestore $oldVendorId = '.$oldVendorId.' newId = '.$this->_id); //update user table $usertable = $this->getTable ('vmusers'); // $vendorsUserData =$usertable->load($this->_id); // $vendorsUserData =$usertable->load($data['virtuemart_user_id']); // $vendorsUserData->virtuemart_vendor_id = $virtuemart_vendor_id; //$vmusersData = array('virtuemart_user_id'=>$data['virtuemart_user_id'],'user_is_vendor'=>1,'virtuemart_vendor_id'=>$virtuemart_vendor_id,'customer_number'=>$data['customer_number'],'perms'=>$data['perms']); $usertable->bindChecknStore ($data, TRUE); $errors = $usertable->getErrors (); foreach ($errors as $error) { $this->setError ($error); vmError ('Store vendor ' . $error); } } // Process the images $mediaModel = VmModel::getModel ('Media'); $mediaModel->storeMedia ($data, 'vendor'); $errors = $mediaModel->getErrors (); foreach ($errors as $error) { vmError ($error); } $plg_datas = $dispatcher->trigger ('plgVmAfterVendorStore', $data); foreach ($plg_datas as $plg_data) { $data = array_merge ($plg_data); } return $this->_id; } /** * Get the vendor specific currency * * @author Oscar van Eijk * @param $_vendorId Vendor ID * @return string Currency code */ static $_vendorCurrencies = array(); static function getVendorCurrency ($_vendorId) { if(!isset(self::$_vendorCurrencies[$_vendorId])){ $db = JFactory::getDBO (); $q = 'SELECT * FROM `#__virtuemart_currencies` AS c , `#__virtuemart_vendors` AS v WHERE v.virtuemart_vendor_id = ' . (int)$_vendorId . ' AND v.vendor_currency = c.virtuemart_currency_id'; $db->setQuery ($q); self::$_vendorCurrencies[$_vendorId] = $db->loadObject (); } return self::$_vendorCurrencies[$_vendorId]; } /** * Retrieve a lost of vendor objects * * @author Oscar van Eijk * @return Array with all Vendor objects */ function getVendorCategories () { $_q = 'SELECT * FROM `#__vm_vendor_category`'; $this->_db->setQuery ($_q); return $this->_db->loadObjectList (); } function getUserIdByOrderId ($virtuemart_order_id) { if (empty ($virtuemart_order_id)) { return 0; } $virtuemart_order_id = (int)$virtuemart_order_id; $q = "SELECT `virtuemart_user_id` FROM `#__virtuemart_orders` WHERE `virtuemart_order_id`='.$virtuemart_order_id'"; // $db->query( $q ); $this->_db->setQuery ($q); // if($db->next_record()){ if ($this->_db->query ()) { // $virtuemart_user_id = $db->f('virtuemart_user_id'); return $this->_db->loadResult (); } else { JError::raiseNotice (1, 'Error in DB $virtuemart_order_id ' . $virtuemart_order_id . ' dont have a virtuemart_user_id'); return 0; } } /** * Gets the vendorId by user Id mapped by table auth_user_vendor or by the order item * Assigned users cannot change storeinformations * ownerOnly = false should be used for users who are assigned to a vendor * for administrative jobs like execution of orders or managing products * Changing of vendorinformation should ONLY be possible by the Mainvendor who is in charge * * @author by Max Milbers * @author RolandD * @param string $type Where the vendor ID should be taken from * @param mixed $value Whatever value the vendor ID should be filtered on * @return int Vendor ID */ static public function getVendorId ($type, $value, $ownerOnly = TRUE) { if (empty($value)) { return 0; } //sanitize input params $value = (int)$value; //static call used, so we need our own db instance $db = JFactory::getDBO (); switch ($type) { case 'order': $q = 'SELECT virtuemart_vendor_id FROM #__virtuemart_order_items WHERE virtuemart_order_id=' . $value; break; case 'user': if ($ownerOnly) { $q = 'SELECT `virtuemart_vendor_id` FROM `#__virtuemart_vmusers` `au` LEFT JOIN `#__virtuemart_userinfos` `u` ON (au.virtuemart_user_id = u.virtuemart_user_id) WHERE `u`.`virtuemart_user_id`=' . $value; } else { $q = 'SELECT `virtuemart_vendor_id` FROM `#__virtuemart_vmusers` WHERE `virtuemart_user_id`= "' . $value . '" '; } break; case 'product': $q = 'SELECT virtuemart_vendor_id FROM #__virtuemart_products WHERE virtuemart_product_id=' . $value; break; } $db->setQuery ($q); $virtuemart_vendor_id = $db->loadResult (); if ($virtuemart_vendor_id) { return $virtuemart_vendor_id; } else { return 0; // if($type!='user'){ // return 0; // } else { // JError::raiseNotice(1, 'No virtuemart_vendor_id found for '.$value.' on '.$type.' check.'); // return 0; // } } } /** * This function gives back the storename for the given vendor. * * @author Max Milbers */ public function getVendorName ($virtuemart_vendor_id = 1) { $query = 'SELECT `vendor_store_name` FROM `#__virtuemart_vendors_' . VMLANG . '` WHERE `virtuemart_vendor_id` = "' . (int)$virtuemart_vendor_id . '" '; $this->_db->setQuery ($query); if ($this->_db->query ()) { return $this->_db->loadResult (); } else { return ''; } } /** * This function gives back the email for the given vendor. * * @author Max Milbers */ public function getVendorEmail ($virtuemart_vendor_id) { $virtuemart_user_id = self::getUserIdByVendorId ((int)$virtuemart_vendor_id); if (!empty($virtuemart_user_id)) { $query = 'SELECT `email` FROM `#__users` WHERE `id` = "' . $virtuemart_user_id . '" '; $this->_db->setQuery ($query); if ($this->_db->query ()) { return $this->_db->loadResult (); } else { return ''; } } return ''; } public function getVendorAdressBT ($virtuemart_vendor_id) { $userId = self::getUserIdByVendorId ($virtuemart_vendor_id); $usermodel = VmModel::getModel ('user'); // $usermodel->setId($userId); $virtuemart_userinfo_id = $usermodel->getBTuserinfo_id ($userId); $vendorAddressBt = $this->getTable ('userinfos'); $vendorAddressBt->load ($virtuemart_userinfo_id); return $vendorAddressBt; } private $_vendorFields = FALSE; public function getVendorAddressFields(){ if(!$this->_vendorFields){ $userId = VirtueMartModelVendor::getUserIdByVendorId ($this->_id); $userModel = VmModel::getModel ('user'); $virtuemart_userinfo_id = $userModel->getBTuserinfo_id ($userId); // this is needed to set the correct user id for the vendor when the user is logged $userModel->getVendor($this->_id,FALSE); $vendorFieldsArray = $userModel->getUserInfoInUserFields ('mail', 'BT', $virtuemart_userinfo_id, FALSE, TRUE); $this->_vendorFields = $vendorFieldsArray[$virtuemart_userinfo_id]; } return $this->_vendorFields; } } models/media.php000066600000034327151374526160007646 0ustar00setMainTable('medias'); $this->addvalidOrderingFieldName(array('ordering')); $this->_selectedOrdering = 'created_on'; } /** * Gets a single media by virtuemart_media_id * . * @param string $type * @param string $mime mime type of file, use for exampel image * @return mediaobject */ function getFile($type=0,$mime=0){ if (empty($this->_data)) { $data = $this->getTable('medias'); $data->load((int)$this->_id); if (!class_exists('VmMediaHandler')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'mediahandler.php'); $this->_data = VmMediaHandler::createMedia($data,$type,$mime); } return $this->_data; } /** * Kind of getFiles, it creates a bunch of image objects by an array of virtuemart_media_id * * @author Max Milbers * @param int $virtuemart_media_id * @param string $type * @param string $mime */ function createMediaByIds($virtuemart_media_ids,$type='',$mime='',$limit =0){ if (!class_exists('VmMediaHandler')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'mediahandler.php'); $app = JFactory::getApplication(); $medias = array(); static $_medias = array(); if(!empty($virtuemart_media_ids)){ if(!is_array($virtuemart_media_ids)) $virtuemart_media_ids = explode(',',$virtuemart_media_ids); //Lets delete empty ids //$virtuemart_media_ids = array_diff($virtuemart_media_ids,array('0','')); $data = $this->getTable('medias'); foreach($virtuemart_media_ids as $k => $virtuemart_media_id){ if($limit!==0 and $k==$limit and !empty($medias)) break; // never break if $limit = 0 if(is_object($virtuemart_media_id)){ $id = $virtuemart_media_id->virtuemart_media_id; } else { $id = $virtuemart_media_id; } if(!empty($id)){ if (!array_key_exists ($id, $_medias)) { $data->load((int)$id); if($app->isSite()){ if($data->published==0){ $_medias[$id] = $this->createVoidMedia($type,$mime); continue; } } $file_type = empty($data->file_type)? $type:$data->file_type; $mime = empty($data->file_mimetype)? $mime:$data->file_mimetype; if($app->isSite()){ $selectedLangue = explode(",", $data->file_lang); //vmdebug('selectedLangue',$selectedLangue); $lang = JFactory::getLanguage(); if(in_array($lang->getTag(), $selectedLangue) || $data->file_lang == '') { $_medias[$id] = VmMediaHandler::createMedia($data,$file_type,$mime); if(is_object($virtuemart_media_id) && !empty($virtuemart_media_id->product_name)) $_medias[$id]->product_name = $virtuemart_media_id->product_name; } } else { $_medias[$id] = VmMediaHandler::createMedia($data,$file_type,$mime); if(is_object($virtuemart_media_id) && !empty($virtuemart_media_id->product_name)) $_medias[$id]->product_name = $virtuemart_media_id->product_name; } } if (!empty($_medias[$id])) { $medias[] = $_medias[$id]; } } } } if(empty($medias)){ $medias[] = $this->createVoidMedia($type,$mime); } return $medias; } function createVoidMedia($type,$mime){ static $voidMedia = null; if(empty($voidMedia)){ $data = $this->getTable('medias'); //Create empty data $data->virtuemart_media_id = 0; $data->virtuemart_vendor_id = 0; $data->file_title = ''; $data->file_description = ''; $data->file_meta = ''; $data->file_mimetype = ''; $data->file_type = ''; $data->file_url = ''; $data->file_url_thumb = ''; $data->published = 0; $data->file_is_downloadable = 0; $data->file_is_forSale = 0; $data->file_is_product_image = 0; $data->shared = 0; $data->file_params = 0; $data->file_lang = ''; $voidMedia = VmMediaHandler::createMedia($data,$type,$mime); } return $voidMedia; } /** * Retrieve a list of files from the database. This is meant only for backend use * * @author Max Milbers * @param boolean $onlyPublished True to only retrieve the published files, false otherwise * @param boolean $noLimit True if no record count limit is used, false otherwise * @return object List of media objects */ function getFiles($onlyPublished=false, $noLimit=false, $virtuemart_product_id=null, $cat_id=null, $where=array(),$nbr=false){ $this->_noLimit = $noLimit; if(empty($this->_db)) $this->_db = JFactory::getDBO(); $vendorId = 1; //TODO set to logged user or requested vendorId, not easy later $query = ''; $selectFields = array(); $joinTables = array(); $joinedTables = ''; $whereItems= array(); $groupBy =''; $orderByTable = ''; if(!empty($virtuemart_product_id)){ $mainTable = '`#__virtuemart_product_medias`'; $selectFields[] = ' `#__virtuemart_medias`.`virtuemart_media_id` as virtuemart_media_id '; $joinTables[] = ' LEFT JOIN `#__virtuemart_medias` ON `#__virtuemart_medias`.`virtuemart_media_id`=`#__virtuemart_product_medias`.`virtuemart_media_id` and `virtuemart_product_id` = "'.$virtuemart_product_id.'"'; $whereItems[] = '`virtuemart_product_id` = "'.$virtuemart_product_id.'"'; if($this->_selectedOrdering=='ordering'){ $orderByTable = '`#__virtuemart_product_medias`.'; } else{ $orderByTable = '`#__virtuemart_medias`.'; } } else if(!empty($cat_id)){ $mainTable = '`#__virtuemart_category_medias`'; $selectFields[] = ' `#__virtuemart_medias`.`virtuemart_media_id` as virtuemart_media_id'; $joinTables[] = ' LEFT JOIN `#__virtuemart_medias` ON `#__virtuemart_medias`.`virtuemart_media_id`=`#__virtuemart_category_medias`.`virtuemart_media_id` and `virtuemart_category_id` = "'.$cat_id.'"'; $whereItems[] = '`virtuemart_category_id` = "'.$cat_id.'"'; if($this->_selectedOrdering=='ordering'){ $orderByTable = '`#__virtuemart_category_medias`.'; } else{ $orderByTable = '`#__virtuemart_medias`.'; } } else { $mainTable = '`#__virtuemart_medias`'; $selectFields[] = ' `virtuemart_media_id` '; if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if(!Permissions::getInstance()->check('admin') ){ $whereItems[] = '(`virtuemart_vendor_id` = "'.(int)$vendorId.'" OR `shared`="1")'; } } if ($onlyPublished) { $whereItems[] = '`#__virtuemart_medias`.`published` = 1'; } if ($search = JRequest::getString('searchMedia', false)){ $search = '"%' . $this->_db->getEscaped( $search, true ) . '%"' ; $where[] = ' (`file_title` LIKE '.$search.' OR `file_description` LIKE '.$search.' OR `file_meta` LIKE '.$search.' OR `file_url` LIKE '.$search.' OR `file_url_thumb` LIKE '.$search.' ) '; } if ($type = JRequest::getWord('search_type')) { $where[] = 'file_type = "'.$type.'" ' ; } if ($role = JRequest::getWord('search_role')) { if ($role == "file_is_downloadable") { $where[] = '`file_is_downloadable` = 1'; $where[] = '`file_is_forSale` = 0'; } elseif ($role == "file_is_forSale") { $where[] = '`file_is_downloadable` = 0'; $where[] = '`file_is_forSale` = 1'; } else { $where[] = '`file_is_downloadable` = 0'; $where[] = '`file_is_forSale` = 0'; } } if (!empty($where)) $whereItems = array_merge($whereItems,$where); if(count($whereItems)>0){ $whereString = ' WHERE '.implode(' AND ', $whereItems ); } else { $whereString = ' '; } $orderBy = $this->_getOrdering($orderByTable);# if(count($selectFields)>0){ $select = implode(', ', $selectFields ).' FROM '.$mainTable; //$selectFindRows = 'SELECT COUNT(*) FROM '.$mainTable; if(count($joinTables)>0){ foreach($joinTables as $table){ $joinedTables .= $table; } } } else { vmError('No select fields given in getFiles','No select fields given'); return false; } $this->_data = $this->exeSortSearchListQuery(2, $select, $joinedTables, $whereString, $groupBy, $orderBy,'',$nbr); if(empty($this->_data)){ return array(); } if( !is_array($this->_data)){ $this->_data = explode(',',$this->_data); } $this->_data = $this->createMediaByIds($this->_data); return $this->_data; } /** * This function stores a media and updates then the refered table * * @author Max Milbers * @author Patrick Kohl * @param array $data Data from a from * @param string $type type of the media category,product,manufacturer,shop, ... */ function storeMedia($data,$type){ // vmdebug('my data in media to store start',$data['virtuemart_media_id']); JRequest::checkToken() or jexit( 'Invalid Token, while trying to save media' ); if(empty($data['media_action'])){ $data['media_action'] = 'none'; } //vmdebug('storeMedia',$data); //the active media id is not empty, so there should be something done with it //if( (!empty($data['active_media_id']) && !empty($data['virtuemart_media_id']) ) || $data['media_action']=='upload'){ if( (!empty($data['active_media_id']) and isset($data['virtuemart_media_id']) ) || $data['media_action']=='upload'){ $oldIds = $data['virtuemart_media_id']; $data['file_type'] = $type; //$data['virtuemart_media_id'] = (int)$data['active_media_id']; //done within the function now $this -> setId($data['active_media_id']); $virtuemart_media_id = $this->store($data,$type); //added by Mike, Mike why did you add this? This function storeMedia is extremely nasty $this->setId($virtuemart_media_id); if(!empty($oldIds)){ if(!is_array($oldIds)) $oldIds = array($oldIds); if(!empty($data['mediaordering']) && $data['media_action']=='upload'){ // array_push($data['mediaordering'],count($data['mediaordering'])+1); $data['mediaordering'][$virtuemart_media_id] = count($data['mediaordering']); } $virtuemart_media_ids = array_merge( (array)$virtuemart_media_id,$oldIds); // vmdebug('merged old and new',$virtuemart_media_ids); $data['virtuemart_media_id'] = array_unique($virtuemart_media_ids); } else { $data['virtuemart_media_id'] = $virtuemart_media_id; } } if(!empty($data['mediaordering'])){ asort($data['mediaordering']); $sortedMediaIds = array(); foreach($data['mediaordering'] as $k=>$v){ $sortedMediaIds[] = $k; } // vmdebug('merging old and new',$oldIds,$virtuemart_media_id); $data['virtuemart_media_id'] = $sortedMediaIds; } // vmdebug('my data in media to store',$data['virtuemart_media_id'],$data['mediaordering']); //set the relations $table = $this->getTable($type.'_medias'); // Bind the form fields to the country table $table->bindChecknStore($data); $errors = $table->getErrors(); foreach($errors as $error){ vmError($error); } return $table->virtuemart_media_id; } /** * Store an entry of a mediaItem, this means in end effect every media file in the shop * images, videos, pdf, zips, exe, ... * * @author Max Milbers */ public function store(&$data,$type) { VmConfig::loadJLang('com_virtuemart_media'); //if(empty($data['media_action'])) return $table->virtuemart_media_id; if (!class_exists('VmMediaHandler')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'mediahandler.php'); $table = $this->getTable('medias'); /* $a = trim($data['file_url_thumb']); $b = trim(JText::sprintf('COM_VIRTUEMART_DEFAULT_URL',$data['file_url_thumb'])); vmdebug(' the miese Assi',$a,$b); if( $a == $b ){ vmdebug('Unset the miese Assi'); unset($data['file_url_thumb']); }*/ //unset($data['file_url_thumb']); $data['virtuemart_media_id'] = $this->getId(); $table->bind($data); $data = VmMediaHandler::prepareStoreMedia($table,$data,$type); //this does not store the media, it process the actions and prepares data // workarround for media published and product published two fields in one form. $tmpPublished = false; if (isset($data['media_published'])){ $tmpPublished = $data['published']; $data['published'] = $data['media_published']; //vmdebug('$data["published"]',$data['published']); } $table->bindChecknStore($data); $errors = $table->getErrors(); foreach($errors as $error){ vmError('store medias '.$error); } if($tmpPublished){ $data['published'] = $tmpPublished; } // vmdebug('store media $table->virtuemart_media_id '.$table->virtuemart_media_id); return $table->virtuemart_media_id; } public function attachImages($objects,$type,$mime='',$limit=0){ if(!empty($objects)){ if(!is_array($objects)) $objects = array($objects); foreach($objects as $k => $object){ if(empty($object->virtuemart_media_id)) $virtuemart_media_id = null; else $virtuemart_media_id = $object->virtuemart_media_id; $object->images = $this->createMediaByIds($virtuemart_media_id,$type,$mime,$limit); //This should not be used in fact. It is for legacy reasons there. if(isset($object->images[0]->file_url_thumb)){ $object->file_url_thumb = $object->images[0]->file_url_thumb; $object->file_url = $object->images[0]->file_url; } } } } } // pure php no closing tag models/manufacturercategories.php000066600000010421151374526160013316 0ustar00setMainTable('manufacturercategories'); $this->addvalidOrderingFieldName(array('mf_category_name')); $config=JFactory::getConfig(); } /** * Retrieve the detail record for the current $id if the data has not already been loaded. * */ // function getManufacturerCategory(){ //// $db = JFactory::getDBO(); // if (empty($this->_data)) { // $this->_data = $this->getTable('manufacturercategories'); // $this->_data->load((int)$this->_id); // } //// print_r( $this->_db->_sql ); // if (!$this->_data) { // $this->_data = new stdClass(); // $this->_id = 0; // $this->_data = null; // } // return $this->_data; // } /** * Delete all record ids selected * * @return boolean True is the remove was successful, false otherwise. */ function remove($categoryIds) { $table = $this->getTable('manufacturercategories'); foreach($categoryIds as $categoryId) { if($table->checkManufacturer($categoryId)) { if (!$table->delete($categoryId)) { vmError($table->getError()); return false; } } else { vmError(get_class( $this ).'::remove '.$categoryId.' '.$table->getError()); return false; } } return true; } /** * Retireve a list of countries from the database. * * @param string $onlyPuiblished True to only retreive the published categories, false otherwise * @param string $noLimit True if no record count limit is used, false otherwise * @return object List of manufacturer categories objects */ function getManufacturerCategories($onlyPublished=false, $noLimit=false) { $this->_noLimit = $noLimit; $select = '* FROM `#__virtuemart_manufacturercategories_'.VMLANG.'` as l'; $joinedTables = ' JOIN `#__virtuemart_manufacturercategories` as mc using (`virtuemart_manufacturercategories_id`)'; $where = array(); if ($onlyPublished) { $where[] = ' `#__virtuemart_manufacturercategories`.`published` = 1'; } // $query .= ' ORDER BY `#__virtuemart_manufacturercategories`.`mf_category_name`'; $whereString = ''; if (count($where) > 0) $whereString = ' WHERE '.implode(' AND ', $where) ; if ( JRequest::getCmd('view') == 'manufacturercategories') { $ordering = $this->_getOrdering(); } else { $ordering = ' order by mf_category_name DESC'; } return $this->_data = $this->exeSortSearchListQuery(0,$select,$whereString,$joinedTables,$ordering); } /** * Build category filter * * @return object List of category to build filter select box */ function getCategoryFilter(){ $db = JFactory::getDBO(); $query = 'SELECT `virtuemart_manufacturercategories_id` as `value`, `mf_category_name` as text' .' FROM #__virtuemart_manufacturercategories_'.VMLANG.'`'; $db->setQuery($query); $categoryFilter[] = JHTML::_('select.option', '0', '- '. JText::_('COM_VIRTUEMART_SELECT_MANUFACTURER_CATEGORY') .' -' ); $categoryFilter = array_merge($categoryFilter, (array)$db->loadObjectList()); return $categoryFilter; } } // pure php no closing tagmodels/custom.php000066600000021072151374526160010072 0ustar00setMainTable('customs'); $this->setToggleName('admin_only'); $this->setToggleName('is_hidden'); } /** * Gets a single custom by virtuemart_custom_id * . * @param string $type * @param string $mime mime type of custom, use for exampel image * @return customobject */ function getCustom(){ if(empty($this->_data)){ // JTable::addIncludePath(JPATH_VM_ADMINISTRATOR.DS.'tables'); $this->_data = $this->getTable('customs'); $this->_data->load($this->_id); $customfields = VmModel::getModel('Customfields'); $this->_data->field_types = $customfields->getField_types() ; // vmdebug('getCustom $data',$this->_data); if(!empty($this->_data->custom_jplugin_id)){ JPluginHelper::importPlugin('vmcustom'); $dispatcher = JDispatcher::getInstance(); // $varsToPushParam = $dispatcher->trigger('plgVmDeclarePluginParams',array('custom',$this->_data->custom_element,$this->_data->custom_jplugin_id)); $retValue = $dispatcher->trigger('plgVmDeclarePluginParamsCustom',array('custom',$this->_data->custom_element,$this->_data->custom_jplugin_id,&$this->_data)); } else { //Todo this is not working, because the custom is using custom_params, while the customfield is using custom_param ! //VirtueMartModelCustomfields::bindParameterableByFieldType($this->_data); } } return $this->_data; } /** * Retireve a list of customs from the database. This is meant only for backend use * * @author Kohl Patrick, Max Milbers * @return object List of custom objects */ function getCustoms($custom_parent_id,$search = false){ $query='* FROM `#__virtuemart_customs` WHERE field_type <> "R" AND field_type <> "Z" AND field_type <> "G" '; if($custom_parent_id){ $query .= 'AND `custom_parent_id` ='.(int)$custom_parent_id; } if($search){ $search = '"%' . $this->_db->getEscaped( $search, true ) . '%"' ; $query .= 'AND `custom_title` LIKE '.$search; } $datas = new stdClass(); $datas->items = $this->exeSortSearchListQuery(0, $query, '','',$this->_getOrdering()); $customfields = VmModel::getModel('Customfields'); if (!class_exists('VmHTML')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'html.php'); $datas->field_types = $customfields->getField_types() ; foreach ($datas->items as $key => & $data) { if (!empty($data->custom_parent_id)) $data->custom_parent_title = $customfields->getCustomParentTitle($data->custom_parent_id); else { $data->custom_parent_title = '-' ; } if(!empty($datas->field_types[$data->field_type ])){ $data->field_type_display = vmText::_( $datas->field_types[$data->field_type ] ); } else { $data->field_type_display = 'not valid, delete this line'; vmError('The field with id '.$data->virtuemart_custom_id.' and title '.$data->custom_title.' is not longer valid, please delete it from the list'); } } $datas->customsSelect=$customfields->displayCustomSelection(); return $datas; } /** * Creates a clone of a given custom id * * @author Max Milbers * @param int $virtuemart_product_id */ public function createClone($id){ $this->virtuemart_custom_id = $id; $row = $this->getTable('customs'); $row->load( $id ); $row->virtuemart_custom_id = 0; $row->custom_title = $row->custom_title.' Copy'; if (!$clone = $row->store()) { JError::raiseError(500, 'createClone '. $row->getError() ); } return $clone; } /* Save and delete from database * all Child product custom_fields relation * @ var $table : the xref table(eg. product,category ...) * @array $data : array of customfields * @int $id : The concerned id (eg. product_id) **/ public function saveChildCustomRelation($table,$datas) { JRequest::checkToken() or jexit( 'Invalid Token, in store customfields'); //Table whitelist $tableWhiteList = array('product','category','manufacturer'); if(!in_array($table,$tableWhiteList)) return false; $customfieldIds = array(); // delete existings from modelXref and table customfields foreach ($datas as $child_id =>$fields) { $fields['virtuemart_'.$table.'_id']=$child_id; $this->_db->setQuery( 'DELETE PC FROM `#__virtuemart_'.$table.'_customfields` as `PC`, `#__virtuemart_customs` as `C` WHERE `PC`.`virtuemart_custom_id` = `C`.`virtuemart_custom_id` AND field_type="C" and virtuemart_'.$table.'_id ='.$child_id ); if(!$this->_db->query()){ vmError('Error in deleting child relation '); //.$this->_db->getQuery()); Dont give hackers too much info } $tableCustomfields = $this->getTable($table.'_customfields'); $tableCustomfields->bindChecknStore($fields); $errors = $tableCustomfields->getErrors(); foreach($errors as $error){ vmError($error); } } } public function store(&$data){ if(!empty($data['params'])){ foreach($data['params'] as $k=>$v){ $data[$k] = $v; } } if(empty($data['virtuemart_vendor_id'])){ if(!class_exists('VirtueMartModelVendor')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'vendor.php'); $data['virtuemart_vendor_id'] = VirtueMartModelVendor::getLoggedVendor(); } else { $data['virtuemart_vendor_id'] = (int) $data['virtuemart_vendor_id']; } // missing string FIX, Bad way ? if (JVM_VERSION===1) { $tb = '#__plugins'; $ext_id = 'id'; } else { $tb = '#__extensions'; $ext_id = 'extension_id'; } $q = 'SELECT `element` FROM `' . $tb . '` WHERE `' . $ext_id . '` = "'.$data['custom_jplugin_id'].'"'; $this->_db->setQuery($q); $data['custom_element'] = $this->_db->loadResult(); // vmdebug('store custom',$data); $table = $this->getTable('customs'); if(isset($data['custom_jplugin_id'])){ vmdebug('$data store custom',$data); JPluginHelper::importPlugin('vmcustom'); $dispatcher = JDispatcher::getInstance(); // $retValue = $dispatcher->trigger('plgVmSetOnTablePluginParamsCustom',array($data['custom_value'],$data['custom_jplugin_id'],&$table)); $retValue = $dispatcher->trigger('plgVmSetOnTablePluginParamsCustom',array($data['custom_element'],$data['custom_jplugin_id'],&$table)); } $table->bindChecknStore($data); $errors = $table->getErrors(); if(!empty($errors)){ foreach($errors as $error){ vmError($error); } } JPluginHelper::importPlugin('vmcustom'); $dispatcher = JDispatcher::getInstance(); $error = $dispatcher->trigger('plgVmOnStoreInstallPluginTable', array('custom' , $data, $data['custom_element'])); return $table->virtuemart_custom_id ; } /** * Delete all record ids selected * * @author Max Milbers * @return boolean True is the delete was successful, false otherwise. */ public function remove($ids) { $table = $this->getTable($this->_maintablename); $customfields = $this->getTable ('product_customfields'); foreach($ids as $id) { if (!$table->delete((int)$id)) { vmError(get_class( $this ).'::remove '.$id.' '.$table->getError()); return false; } else { //Delete this customfield also in all product_customfield tables if (!$customfields->delete ($id, 'virtuemart_custom_id')) { vmError ('Custom delete Productcustomfield delete ' . $customfields->getError ()); $ok = FALSE; } } } return true; } } // pure php no closing tag models/orderstatus.php000066600000007211151374526160011136 0ustar00setMainTable('orderstates'); } function getVMCoreStatusCode(){ return array( 'P','S'); } /** * Retrieve a list of order statuses from the database. * * @return object List of order status objects */ function getOrderStatusList() { if (JRequest::getWord('view') !== 'orderstatus') $ordering = ' order by `ordering` '; else $ordering = $this->_getOrdering(); $this->_noLimit=true; $this->_data = $this->exeSortSearchListQuery(0,'*',' FROM `#__virtuemart_orderstates`','','',$ordering); // vmdebug('order data',$this->_data); return $this->_data ; } /** * Return the order status names * * @author Kohl Patrick * @access public * * @param char $_code Order status code * @return string The name of the order status */ public function getOrderStatusNames () { $q = 'SELECT `order_status_name`,`order_status_code` FROM `#__virtuemart_orderstates` order by `ordering` '; $this->_db->setQuery($q); return $this->_db->loadAssocList('order_status_code'); } function renderOSList($value,$name = 'order_status',$multiple=FALSE,$attrs='',$langkey='' ){ $idA = $id = $name; $attrs .= ' class="inputbox" '; if ($multiple) { $attrs .= ' multiple="multiple" '; if(empty($langkey)) $langkey = 'COM_VIRTUEMART_DRDOWN_SELECT_SOME_OPTIONS'; $attrs .= ' data-placeholder="'.JText::_($langkey).'"'; $idA .= '[]'; } else { if(empty($langkey)) $langkey = 'COM_VIRTUEMART_LIST_EMPTY_OPTION'; } if(is_array($value)){ $hashValue = implode($value); } else { $hashValue = $value; } $hash = md5($hashValue.$name.$attrs); if (!isset($this->_renderStatusList[$hash])) { $orderStates = $this->getOrderStatusNames(); $emptyOption = JHTML::_ ('select.option', -1, JText::_ ($langkey), 'order_status_code', 'order_status_name'); array_unshift ($orderStates, $emptyOption); if ($multiple) { $attrs .=' size="'.count($orderStates).'" '; } $this->_renderStatusList[$hash] = JHTML::_('select.genericlist', $orderStates, $idA, $attrs, 'order_status_code', 'order_status_name', $value,$id,true); } return $this->_renderStatusList[$hash] ; } function renderOrderStatusList($value, $name = 'order_status[]' ) { $id = substr($name,0,-2); return $this->renderOSList($value,$id,TRUE); } } //No Closing tag models/.htaccess000066600000000177151374526160007650 0ustar00 Order allow,deny Deny from all models/shipmentmethod.php000066600000020753151374526160011615 0ustar00setMainTable('shipmentmethods'); $this->_selectedOrdering = 'ordering'; } /** * Retrieve the detail record for the current $id if the data has not already been loaded. * * @author RickG */ function getShipment() { if (empty($this->_data[$this->_id])) { $this->_data[$this->_id] = $this->getTable('shipmentmethods'); $this->_data[$this->_id]->load((int)$this->_id); if(empty($this->_data[$this->_id]->virtuemart_vendor_id)){ if(!class_exists('VirtueMartModelVendor')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'vendor.php'); $this->_data[$this->_id]->virtuemart_vendor_id = VirtueMartModelVendor::getLoggedVendor();; } if($this->_data[$this->_id]->shipment_jplugin_id){ JPluginHelper::importPlugin('vmshipment'); $dispatcher = JDispatcher::getInstance(); $retValue = $dispatcher->trigger('plgVmDeclarePluginParamsShipment',array($this->_data[$this->_id]->shipment_element,$this->_data[$this->_id]->shipment_jplugin_id,&$this->_data[$this->_id])); } if($this->_data[$this->_id]->getCryptedFields()){ if(!class_exists('vmCrypt')){ require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'vmcrypt.php'); } if(isset($this->_data[$this->_id]->modified_on)){ $date = JFactory::getDate($this->_data[$this->_id]->modified_on); $date = $date->toUnix(); } else { $date = 0; } foreach($this->_data[$this->_id]->getCryptedFields() as $field){ if(isset($this->_data[$this->_id]->$field)){ $this->_data[$this->_id]->$field = vmCrypt::decrypt($this->_data[$this->_id]->$field,$date); } } } // vmdebug('$$this->_data getShipment',$this->_data); //if(!empty($this->_id)){ /* Add the shipmentcarreir shoppergroups */ $q = 'SELECT `virtuemart_shoppergroup_id` FROM #__virtuemart_shipmentmethod_shoppergroups WHERE `virtuemart_shipmentmethod_id` = "'.$this->_id.'"'; $this->_db->setQuery($q); $this->_data[$this->_id]->virtuemart_shoppergroup_ids = $this->_db->loadResultArray();# if(empty($this->_data[$this->_id]->virtuemart_shoppergroup_ids)) $this->_data[$this->_id]->virtuemart_shoppergroup_ids = 0; //} } return $this->_data[$this->_id]; } /** * Retireve a list of shipment from the database. * * @author RickG * @return object List of shipment objects */ public function getShipments() { if (JVM_VERSION===1) { $table = '#__plugins'; $enable = 'published'; $ext_id = 'id'; } else { $table = '#__extensions'; $enable = 'enabled'; $ext_id = 'extension_id'; } $query = ' `#__virtuemart_shipmentmethods`.* , `'.$table.'`.`name` as shipmentmethod_name FROM `#__virtuemart_shipmentmethods` '; $query .= 'JOIN `'.$table.'` ON `'.$table.'`.`'.$ext_id.'` = `#__virtuemart_shipmentmethods`.`shipment_jplugin_id` '; $whereString = ''; $select = ' * FROM `#__virtuemart_shipmentmethods_'.VMLANG.'` as l '; $joinedTables = ' JOIN `#__virtuemart_shipmentmethods` USING (`virtuemart_shipmentmethod_id`) '; $this->_data =$this->exeSortSearchListQuery(0,$select,$joinedTables,$whereString,' ',$this->_getOrdering() ); //$this->_data = $this->exeSortSearchListQuery(0,'',$query,$whereString,'',$this->_getOrdering('ordering')); if(isset($this->_data)){ if(!class_exists('shopfunctions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'shopfunctions.php'); foreach ($this->_data as $data){ /* Add the shipment shoppergroups */ $q = 'SELECT `virtuemart_shoppergroup_id` FROM #__virtuemart_shipmentmethod_shoppergroups WHERE `virtuemart_shipmentmethod_id` = "'.$data->virtuemart_shipmentmethod_id.'"'; $this->_db->setQuery($q); $data->virtuemart_shoppergroup_ids = $this->_db->loadResultArray(); /* Write the first 5 shoppergroups in the list */ $data->shipmentShoppersList = shopfunctions::renderGuiList('virtuemart_shoppergroup_id','#__virtuemart_shipmentmethod_shoppergroups','virtuemart_shipmentmethod_id',$data->virtuemart_shipmentmethod_id,'shopper_group_name','#__virtuemart_shoppergroups','virtuemart_shoppergroup_id','shoppergroup',4,0); } } return $this->_data; } /** * Bind the post data to the shipment tables and save it * * @author Max Milbers * @return boolean True is the save was successful, false otherwise. */ public function store(&$data) { if(is_object($data)){ $data = (array)$data; } if(!empty($data['params'])){ foreach($data['params'] as $k=>$v){ $data[$k] = $v; } } if(empty($data['virtuemart_vendor_id'])){ if(!class_exists('VirtueMartModelVendor')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'vendor.php'); $data['virtuemart_vendor_id'] = VirtueMartModelVendor::getLoggedVendor(); } $table = $this->getTable('shipmentmethods'); if(isset($data['shipment_jplugin_id'])){ // missing string FIX, Bad way ? if (JVM_VERSION===1) { $tb = '#__plugins'; $ext_id = 'id'; } else { $tb = '#__extensions'; $ext_id = 'extension_id'; } $q = 'SELECT `element` FROM `' . $tb . '` WHERE `' . $ext_id . '` = "'.$data['shipment_jplugin_id'].'"'; $db = JFactory::getDbo(); $db->setQuery($q); $data['shipment_element'] = $db->loadResult(); $q = 'UPDATE `' . $tb . '` SET `enabled`= 1 WHERE `' . $ext_id . '` = "'.$data['shipment_jplugin_id'].'"'; $this->_db->setQuery($q); $this->_db->query(); JPluginHelper::importPlugin('vmshipment'); $dispatcher = JDispatcher::getInstance(); //bad trigger, we should just give it data, so that the plugins itself can check the data to be stored //so this trigger is now deprecated and will be deleted in vm3 $retValue = $dispatcher->trigger('plgVmSetOnTablePluginParamsShipment',array( $data['shipment_element'],$data['shipment_jplugin_id'],&$table)); $retValue = $dispatcher->trigger('plgVmSetOnTablePluginShipment',array( &$data,&$table)); } $table->bindChecknStore($data); $errors = $table->getErrors(); foreach($errors as $error){ vmError($error); } $xrefTable = $this->getTable('shipmentmethod_shoppergroups'); $xrefTable->bindChecknStore($data); $errors = $xrefTable->getErrors(); foreach($errors as $error){ vmError($error); } if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); JPluginHelper::importPlugin('vmshipment'); //Add a hook here for other shipment methods, checking the data of the choosed plugin $dispatcher = JDispatcher::getInstance(); $retValues = $dispatcher->trigger('plgVmOnStoreInstallShipmentPluginTable', array( $data['shipment_jplugin_id'])); return $table->virtuemart_shipmentmethod_id; } /** * Creates a clone of a given shipmentmethod id * * @author Valérie Isaksen * @param int $virtuemart_shipmentmethod_id */ public function createClone ($id) { $this->setId ($id); $shipment = $this->getShipment (); $shipment->virtuemart_shipmentmethod_id = 0; $shipment->shipment_name = $shipment->shipment_name.' Copy'; if (!$clone = $this->store($shipment)) { vmError( 'createClone '. $shipment->getError() ); } return $clone; } } //no closing tag models/report.php000066600000034574151374526160010106 0ustar00setMainTable ('orders'); $this->setDatePresets (); $app = JFactory::getApplication (); $this->period = $app->getUserStateFromRequest ('com_virtuemart.revenue.period', 'period', 'last30', 'string'); //$post = JRequest::get ('post'); //vmdebug ('$post ', $post); if (empty($this->period) or $this->period != 'none') { $this->setPeriodByPreset (); } else { $this->setPeriod (); } $this->removevalidOrderingFieldName ('virtuemart_order_id'); $this->addvalidOrderingFieldName (array('product_quantity', 'o.virtuemart_order_id')); $this->_selectedOrdering = 'created_on'; } function correctTimeOffset(&$inputDate){ $config = JFactory::getConfig(); $this->siteOffset = $config->getValue('config.offset'); $date = new JDate($inputDate); $date->setTimezone($this->siteTimezone); $inputDate = $date->format('Y-m-d H:i:s',true); } /* * Set Start & end Date */ function setPeriod () { $this->from_period = JRequest::getVar ('from_period', $this->date_presets['last30']['from']); $this->until_period = JRequest::getVar ('until_period', $this->date_presets['last30']['until']); $config = JFactory::getConfig(); $siteOffset = $config->getValue('config.offset'); $this->siteTimezone = new DateTimeZone($siteOffset); $this->correctTimeOffset($this->from_period); $this->correctTimeOffset($this->until_period); } /* * Set Start & end Date if Var peroid */ function setPeriodByPreset () { $this->from_period = $this->date_presets[$this->period]['from']; $this->until_period = $this->date_presets[$this->period]['until']; $config = JFactory::getConfig(); $siteOffset = $config->getValue('config.offset'); $this->siteTimezone = new DateTimeZone($siteOffset); $this->correctTimeOffset($this->from_period); $this->correctTimeOffset($this->until_period); } function getItemsByRevenue ($revenue) { $q = 'select SUM(`product_quantity`) as product_quantity from `#__virtuemart_order_items` as i LEFT JOIN #__virtuemart_orders as o ON o.virtuemart_order_id=i.virtuemart_order_id ' . $this->whereItem . ' CAST(' . $this->intervals . ' AS DATE) = CAST("' . $revenue['intervals'] . '" AS DATE) '; $this->_db->setQuery ($q); //echo $this->_db->_sql; return $this->_db->loadResult (); } function getRevenueSortListOrderQuery ($sold = FALSE, $items = FALSE) { $selectFields = array(); $mainTable = ''; $joinTables = array(); $joinedTables = ''; $where = array(); // group always by intervals (day,week, ... or ID) and set grouping and defaut ordering $intervals = JRequest::getWord ('intervals', 'day'); switch ($intervals) { case 'day': $this->intervals = 'DATE( o.created_on )'; break; case 'week': $this->intervals = 'WEEK( o.created_on )'; break; case 'month': $this->intervals = 'MONTH( o.created_on )'; break; case 'year': $this->intervals = 'YEAR( o.created_on )'; break; default: // invidual grouping $this->intervals = 'o.created_on'; break; } // if(!empty($this->intervals)){ // $orderBy = $this->_getOrdering('o.`created_on`'); // } $selectFields['intervals'] = $this->intervals . ' AS intervals, CAST( o.`created_on` AS DATE ) AS created_on'; vmdebug('getRevenueSortListOrderQuery '.$intervals); if($intervals=='product_s'){ $selectFields[] = '`order_item_name`'; $selectFields[] = '`virtuemart_product_id`'; $groupBy = 'GROUP BY `virtuemart_product_id` '; } else { $groupBy = 'GROUP BY intervals '; } //$selectFields[] = 'COUNT(virtuemart_order_id) as number_of_orders'; //with tax => brutto //$selectFields[] = 'SUM(product_subtotal_with_tax) as order_total'; //without tax => netto //$selectFields[] = 'SUM(product_item_price) as order_subtotal'; $selectFields[] = 'SUM(product_discountedPriceWithoutTax * product_quantity) as order_subtotal_netto'; $selectFields[] = 'SUM(product_subtotal_with_tax) as order_subtotal_brutto'; $this->dates = ' DATE( o.created_on ) BETWEEN "' . $this->from_period . '" AND "' . $this->until_period . '" '; $statusList = array(); // Filter by statut if ($orderstates = JRequest::getVar ('order_status_code', array('C,S'))) { $query = 'SELECT `order_status_code` FROM `#__virtuemart_orderstates` WHERE published=1 '; $this->_db->setQuery ($query); $list = $this->_db->loadResultArray (); foreach ($orderstates as $val) { if (in_array ($val, $list)) { $statusList[] = '`i`.`order_status` = "' . $val . '"'; } } if ($statusList) { $where[] = '(' . implode (' OR ', $statusList) . ')'; } } //getRevenue // select wich table to order sum ordered $filterorders = JRequest::getvar ('filter_order', 'intervals'); $orderdir = (JRequest::getWord ('filter_order_Dir', NULL) == 'desc') ? 'desc' : ''; switch ($filterorders) { case 'o.virtuemart_order_id': $orderBy = ' ORDER BY count_order_id ' . $orderdir; $groupBy = 'GROUP BY intervals '; break; case 'product_quantity' : // GROUP BY product_quantity, intervals // ORDER BY `product_quantity` ASC // TODO grouping and ordering $orderBy = ' ORDER BY product_quantity ' . $orderdir; $groupBy = 'GROUP BY intervals '; //$selectFields['intervals'] = $this->intervals.' AS intervals, i.`created_on` '; break; case 'o.order_subtotal' : $orderBy = ' ORDER BY order_subtotal'; break; //getOrderItemsSumGrouped($this->intervals , $filterorders); break; default: // invidual grouping $orderBy = $this->_getOrdering (); vmdebug ('default case', $orderBy); //$this->intervals= '`o`.`created_on`'; // $orderBy = ' ORDER BY '.$filterorders.' '.$orderdir; break; } $selectFields[] = 'COUNT(DISTINCT o.virtuemart_order_id) as count_order_id'; $selectFields[] = 'SUM(product_quantity) as product_quantity'; $mainTable = '`#__virtuemart_order_items` as i'; $joinTables['orders'] = ' LEFT JOIN `#__virtuemart_orders` as o ON o.virtuemart_order_id=i.virtuemart_order_id '; if (count ($selectFields) > 0) { $select = implode (', ', $selectFields) . ' FROM ' . $mainTable; //$selectFindRows = 'SELECT COUNT(*) FROM '.$mainTable; if (count ($joinTables) > 0) { foreach ($joinTables as $table) { $joinedTables .= $table; } } } else { vmError ('No select fields given in getRevenueSortListOrderQuery', 'No select fields given'); return FALSE; } $virtuemart_product_id = JRequest::getInt ('virtuemart_product_id', FALSE); if ($virtuemart_product_id) { $where[] = 'i.virtuemart_product_id = "' . $virtuemart_product_id . '" '; } if (VmConfig::get ('multix', 'none') != 'none') { $vendorId = JRequest::getInt ('virtuemart_vendor_id', 0); if ($vendorId != 0) { $where[] = 'i.virtuemart_vendor_id = "' . $vendorId . '" '; } } if (count ($where) > 0) { $this->whereItem = ' WHERE ' . implode (' AND ', $where) . ' AND '; } else { $this->whereItem = ' WHERE '; } // $this->whereItem; /* WHERE differences with orders and items from orders are only date periods and ordering */ $whereString = $this->whereItem . $this->dates; return $this->exeSortSearchListQuery (1, $select, $joinedTables, $whereString, $groupBy, $orderBy); } /** * Retrieve a list of report items from the database. * * @author Wicksj * @param string $noLimit True if no record count limit is used, false otherwise * @return object List of order objects */ function getRevenue ($noLimit = FALSE) { return $this->getRevenueSortListOrderQuery (); } /** * Retrieve a list of report items from the database. * DONT know why this ???? Patrick Kohl * * @author Wicksj * @param string $noLimit True if no record count limit is used, false otherwise * @return object List of order objects */ function getOrderItems ($noLimit = FALSE) { // $db = JFactory::getDBO(); $query = "SELECT `product_name`, `product_sku`, "; $query .= "i.created_on as order_date, "; $query .= "SUM(product_quantity) as product_quantity "; $query .= "FROM #__virtuemart_order_items i, #__virtuemart_orders o, #__virtuemart_products p "; $query .= "WHERE i.created_on BETWEEN '{$this->start_date} 00:00:00' AND '{$this->until_period} 23:59:59' "; $query .= "AND o.virtuemart_order_id=i.virtuemart_order_id "; $query .= "AND i.virtuemart_product_id=p.virtuemart_product_id "; $query .= "GROUP BY product_sku, product_name, order_date "; $query .= " ORDER BY order_date, product_name ASC"; if ($noLimit) { $this->_data = $this->_getList ($query); } else { $this->_data = $this->_getList ($query, $this->getState ('limitstart'), $this->getState ('limit')); } if (!$this->_total) { $this->_total = $this->_getListCount ($query); } return $this->_data; } public function setDatePresets () { if ($this->date_presets) { return $this->date_presets; } // set date presets $curDate = JFactory::getDate (); $curDate = $curDate->toUnix (); $curDate = mktime (0, 0, 0, date ('m', $curDate), date ('d', $curDate), date ('Y', $curDate)); $monday = (date ('w', $curDate) == 1) ? $curDate : strtotime ('last Monday', $curDate); $this->date_presets['last90'] = array( 'name' => JText::_ ('COM_VIRTUEMART_REPORT_PERIOD_LAST90'), 'from' => date ('Y-m-d', strtotime ('-89 day', $curDate)), 'until' => date ('Y-m-d', $curDate)); $this->date_presets['last60'] = array( 'name' => JText::_ ('COM_VIRTUEMART_REPORT_PERIOD_LAST60'), 'from' => date ('Y-m-d', strtotime ('-59 day', $curDate)), 'until' => date ('Y-m-d', $curDate)); $this->date_presets['last30'] = array( 'name' => JText::_ ('COM_VIRTUEMART_REPORT_PERIOD_LAST30'), 'from' => date ('Y-m-d', strtotime ('-29 day', $curDate)), 'until' => date ('Y-m-d', $curDate)); $this->date_presets['today'] = array( 'name' => JText::_ ('COM_VIRTUEMART_REPORT_PERIOD_TODAY'), 'from' => date ('Y-m-d', $curDate), 'until' => date ('Y-m-d', $curDate)); $this->date_presets['this-week'] = array( 'name' => JText::_ ('COM_VIRTUEMART_REPORT_PERIOD_THIS_WEEK'), 'from' => date ('Y-m-d', $monday), 'until' => date ('Y-m-d', strtotime ('+6 day', $monday))); $this->date_presets['this-month'] = array( 'name' => JText::_ ('COM_VIRTUEMART_REPORT_PERIOD_THIS_MONTH'), 'from' => date ('Y-m-d', mktime (0, 0, 0, date ('n', $curDate), 1, date ('Y', $curDate))), 'until' => date ('Y-m-d', mktime (0, 0, 0, date ('n', $curDate) + 1, 0, date ('Y', $curDate)))); $this->date_presets['this-year'] = array( 'name' => JText::_ ('COM_VIRTUEMART_REPORT_PERIOD_THIS_YEAR'), 'from' => date ('Y-m-d', mktime (0, 0, 0, 1, 1, date ('Y', $curDate))), 'until' => date ('Y-m-d', mktime (0, 0, 0, 12, 31, date ('Y', $curDate)))); } public function renderDateSelectList () { // simpledate select $select = ''; $options = array(JHTML::_ ('select.option', 'none', '- ' . JText::_ ('COM_VIRTUEMART_REPORT_SET_PERIOD') . ' -', 'text', 'value')); $app = JFactory::getApplication (); $select = $app->getUserStateFromRequest ('com_virtuemart.revenue.period', 'period', 'last30', 'string'); foreach ($this->date_presets as $name => $value) { $options[] = JHTML::_ ('select.option', $name, JText::_ ($value['name']), 'text', 'value'); } $listHTML = JHTML::_ ('select.genericlist', $options, 'period', 'size="7" class="inputbox" onchange="this.form.submit();" ', 'text', 'value', $select); //$listHTML = JHTML::_ ('select.genericlist', $options, 'period', 'size="7" class="inputbox" ', 'text', 'value', $select); return $listHTML; } public function renderIntervalsList () { $intervals = JRequest::getWord ('intervals', 'day'); $options = array(); $options[] = JHTML::_ ('select.option', JText::_ ('COM_VIRTUEMART_PRODUCT_S'), 'product_s'); $options[] = JHTML::_ ('select.option', JText::_ ('COM_VIRTUEMART_ORDERS'), 'orders'); $options[] = JHTML::_ ('select.option', JText::_ ('COM_VIRTUEMART_REPORT_INTERVAL_GROUP_DAILY'), 'day'); $options[] = JHTML::_ ('select.option', JText::_ ('COM_VIRTUEMART_REPORT_INTERVAL_GROUP_WEEKLY'), 'week'); $options[] = JHTML::_ ('select.option', JText::_ ('COM_VIRTUEMART_REPORT_INTERVAL_GROUP_MONTHLY'), 'month'); $options[] = JHTML::_ ('select.option', JText::_ ('COM_VIRTUEMART_REPORT_INTERVAL_GROUP_YEARLY'), 'year'); //$listHTML = JHTML::_ ('select.genericlist', $options, 'intervals', 'class="inputbox" onchange="this.form.submit();" size="5"', 'text', 'value', $intervals); $listHTML = JHTML::_ ('select.genericlist', $options, 'intervals', 'class="inputbox" size="6"', 'text', 'value', $intervals); return $listHTML; } public function updateOrderItems () { $q = 'UPDATE #__virtuemart_order_items SET `product_discountedPriceWithoutTax`=( (IF(product_final_price is NULL, 0.00,product_final_price) - IF(product_tax is NULL, 0.00,product_tax) )) WHERE `product_discountedPriceWithoutTax` IS NULL'; $this->_db = JFactory::getDBO(); $this->_db->setQuery($q); $this->_db->query(); } } models/paymentmethod.php000066600000023010151374526160011430 0ustar00setMainTable('paymentmethods'); $this->_selectedOrdering = 'ordering'; } /** * Gets the virtuemart_paymentmethod_id with a plugin and vendorId * * @author Max Milbers */ public function getIdbyCodeAndVendorId($jpluginId,$vendorId=1){ if(!$jpluginId) return 0; $q = 'SELECT `virtuemart_paymentmethod_id` FROM #__virtuemart_paymentmethods WHERE `payment_jplugin_id` = "'.$jpluginId.'" AND `virtuemart_vendor_id` = "'.$vendorId.'" '; $this->_db->setQuery($q); return $this->_db->loadResult(); } /** * Retrieve the detail record for the current $id if the data has not already been loaded. * * @author Max Milbers */ public function getPayment(){ if (empty($this->_data[$this->_id])) { $this->_data[$this->_id] = $this->getTable('paymentmethods'); $this->_data[$this->_id]->load((int)$this->_id); if(empty($this->_data->virtuemart_vendor_id)){ if(!class_exists('VirtueMartModelVendor')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'vendor.php'); $this->_data[$this->_id]->virtuemart_vendor_id = VirtueMartModelVendor::getLoggedVendor(); } if($this->_data[$this->_id]->payment_jplugin_id){ JPluginHelper::importPlugin('vmpayment'); $dispatcher = JDispatcher::getInstance(); $retValue = $dispatcher->trigger('plgVmDeclarePluginParamsPayment',array($this->_data[$this->_id]->payment_element,$this->_data[$this->_id]->payment_jplugin_id,&$this->_data[$this->_id])); } if($this->_data[$this->_id]->getCryptedFields()){ if(!class_exists('vmCrypt')){ require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'vmcrypt.php'); } if(isset($this->_data[$this->_id]->modified_on)){ $date = JFactory::getDate($this->_data[$this->_id]->modified_on); $date = $date->toUnix(); } else { $date = 0; } foreach($this->_data[$this->_id]->getCryptedFields() as $field){ if(isset($this->_data[$this->_id]->$field)){ $this->_data[$this->_id]->$field = vmCrypt::decrypt($this->_data[$this->_id]->$field,$date); } } } $q = 'SELECT `virtuemart_shoppergroup_id` FROM #__virtuemart_paymentmethod_shoppergroups WHERE `virtuemart_paymentmethod_id` = "'.$this->_id.'"'; $this->_db->setQuery($q); $this->_data[$this->_id]->virtuemart_shoppergroup_ids = $this->_db->loadResultArray(); if(empty($this->_data[$this->_id]->virtuemart_shoppergroup_ids)) $this->_data[$this->_id]->virtuemart_shoppergroup_ids = 0; } return $this->_data[$this->_id]; } /** * Retireve a list of calculation rules from the database. * * @author Max Milbers * @param string $onlyPuiblished True to only retreive the publish Calculation rules, false otherwise * @param string $noLimit True if no record count limit is used, false otherwise * @return object List of calculation rule objects */ public function getPayments($onlyPublished=false, $noLimit=false) { $where = array(); if ($onlyPublished) { $where[] = ' `#__virtuemart_paymentmethods`.`published` = 1'; } $whereString = ''; if (count($where) > 0) $whereString = ' WHERE '.implode(' AND ', $where) ; $select = ' * FROM `#__virtuemart_paymentmethods_'.VMLANG.'` as l '; $joinedTables = ' JOIN `#__virtuemart_paymentmethods` USING (`virtuemart_paymentmethod_id`) '; $this->_data =$this->exeSortSearchListQuery(0,$select,$joinedTables,$whereString,' ',$this->_getOrdering() ); //$this->exeSortSearchListQuery(0,'*',' FROM `#__virtuemart_paymentmethods`',$whereString,'',$this->_getOrdering('ordering')); if(isset($this->_data)){ if(!class_exists('shopfunctions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'shopfunctions.php'); foreach ($this->_data as $data){ /* Add the paymentmethod shoppergroups */ $q = 'SELECT `virtuemart_shoppergroup_id` FROM #__virtuemart_paymentmethod_shoppergroups WHERE `virtuemart_paymentmethod_id` = "'.$data->virtuemart_paymentmethod_id.'"'; $this->_db->setQuery($q); $data->virtuemart_shoppergroup_ids = $this->_db->loadResultArray(); /* Write the first 5 shoppergroups in the list */ $data->paymShoppersList = shopfunctions::renderGuiList('virtuemart_shoppergroup_id','#__virtuemart_paymentmethod_shoppergroups','virtuemart_paymentmethod_id',$data->virtuemart_paymentmethod_id,'shopper_group_name','#__virtuemart_shoppergroups','virtuemart_shoppergroup_id','shoppergroup',4,0); } } return $this->_data; } /** * Bind the post data to the paymentmethod tables and save it * * @author Max Milbers * @return boolean True is the save was successful, false otherwise. */ public function store(&$data) { if(is_object($data)){ $data = (array)$data; } if(!empty($data['params'])){ foreach($data['params'] as $k=>$v){ $data[$k] = $v; } } if(empty($data['virtuemart_vendor_id'])){ if(!class_exists('VirtueMartModelVendor')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'vendor.php'); $data['virtuemart_vendor_id'] = VirtueMartModelVendor::getLoggedVendor(); } $table = $this->getTable('paymentmethods'); if(isset($data['payment_jplugin_id'])){ // missing string FIX, Bad way ? if (JVM_VERSION===1) { $tb = '#__plugins'; $ext_id = 'id'; } else { $tb = '#__extensions'; $ext_id = 'extension_id'; } $q = 'SELECT `element` FROM `' . $tb . '` WHERE `' . $ext_id . '` = "'.$data['payment_jplugin_id'].'"'; $this->_db->setQuery($q); $data['payment_element'] = $this->_db->loadResult(); $q = 'UPDATE `' . $tb . '` SET `enabled`= 1 WHERE `' . $ext_id . '` = "'.$data['payment_jplugin_id'].'"'; $this->_db->setQuery($q); $this->_db->query(); // special case moneybookers if ( strpos($data['payment_element'] , "moneybookers" ) !==false) { $q = 'UPDATE `#__extensions` SET `enabled`= 1 WHERE `element` ="moneybookers"'; $this->_db->setQuery($q); $this->_db->query(); } JPluginHelper::importPlugin('vmpayment'); $dispatcher = JDispatcher::getInstance(); $retValue = $dispatcher->trigger('plgVmSetOnTablePluginParamsPayment',array( $data['payment_element'],$data['payment_jplugin_id'],&$table)); } $table->bindChecknStore($data); $errors = $table->getErrors(); foreach($errors as $error){ vmError($error); } $xrefTable = $this->getTable('paymentmethod_shoppergroups'); $xrefTable->bindChecknStore($data); $errors = $xrefTable->getErrors(); foreach($errors as $error){ vmError($error); } if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); JPluginHelper::importPlugin('vmpayment'); //Add a hook here for other shipment methods, checking the data of the choosed plugin $dispatcher = JDispatcher::getInstance(); $retValues = $dispatcher->trigger('plgVmOnStoreInstallPaymentPluginTable', array( $data['payment_jplugin_id'])); return $table->virtuemart_paymentmethod_id; } /** * Publish a field * * @author Max Milbers * */ /* public function published( $row, $i, $variable = 'published' ) { $imgY = 'tick.png'; $imgX = 'publish_x.png'; $img = $row->$variable ? $imgY : $imgX; $task = $row->$variable ? 'unpublish' : 'publish'; $alt = $row->$variable ? JText::_('COM_VIRTUEMART_PUBLISHED') : JText::_('COM_VIRTUEMART_UNPUBLISHED'); $action = $row->$variable ? JText::_('COM_VIRTUEMART_UNPUBLISH_ITEM') : JText::_('COM_VIRTUEMART_PUBLISH_ITEM'); $href = ' '. $alt .'' ; return $href; }*/ /** * Due the new plugin system this should be obsolete * function to render the payment plugin list * * @author Max Milbers * * @param radio list of creditcards * @return html */ public function renderPaymentList($selectedPaym=0,$selecedCC=0){ $payms = self::getPayments(false,true); $listHTML=''; foreach($payms as $item){ $checked=''; if($item->virtuemart_paymentmethod_id==$selectedPaym){ $checked='"checked"'; } $listHTML .= ''.$item->payment_name.'
        '; $listHTML .= '
        '; } return $listHTML; } /** * Creates a clone of a given shipmentmethod id * * @author Valérie Isaksen * @param int $virtuemart_shipmentmethod_id */ public function createClone ($id) { $this->setId ($id); $payment = $this->getPayment (); $payment->virtuemart_paymentmethod_id = 0; $payment->payment_name = $payment->payment_name.' Copy'; if (!$clone = $this->store($payment)) { vmError( 'createClone '. $payment->getError() ); } return $clone; } } models/country.php000066600000006455151374526160010273 0ustar00setMainTable('countries'); array_unshift($this->_validOrderingFieldName,'country_name'); $this->_selectedOrdering = 'country_name'; $this->_selectedOrderingDir = 'ASC'; } /** * Retreive a country record given a country code. * * @author RickG * @param string $code Country code to lookup * @return object Country object from database */ function getCountryByCode($code) { $db = JFactory::getDBO(); $countryCodeLength = strlen($code); switch ($countryCodeLength) { case 2: $countryCodeFieldname = 'country_2_code'; break; case 3: $countryCodeFieldname = 'country_3_code'; break; default: return false; } $query = 'SELECT *'; $query .= ' FROM `#__virtuemart_countries`'; $query .= ' WHERE `' . $countryCodeFieldname . '` = "' . $code . '"'; $db->setQuery($query); return $db->loadObject(); } /** * Retrieve a list of countries from the database. * * @author RickG * @author Max Milbers * @param string $onlyPublished True to only retrieve the publish countries, false otherwise * @param string $noLimit True if no record count limit is used, false otherwise * @return object List of country objects */ function getCountries($onlyPublished=true, $noLimit=false, $filterCountry = false) { $where = array(); $this->_noLimit = $noLimit; // $query = 'SELECT * FROM `#__virtuemart_countries` '; /* add filters */ if ($onlyPublished) $where[] = '`published` = 1'; if($filterCountry){ $filterCountry = '"%' . $this->_db->getEscaped( $filterCountry, true ) . '%"' ; //$keyword = $this->_db->Quote($filterCountry, false); $where[] = '`country_name` LIKE '.$filterCountry.' OR `country_2_code` LIKE '.$filterCountry.' OR `country_3_code` LIKE '.$filterCountry; } $whereString = ''; if (count($where) > 0) $whereString = ' WHERE '.implode(' AND ', $where) ; $ordering = $this->_getOrdering(); return $this->_data = $this->exeSortSearchListQuery(0,'*',' FROM `#__virtuemart_countries`',$whereString,'',$ordering); } } //no closing tag pure phpmodels/orders.php000066600000222377151374526160010071 0ustar00db is never used in the model ? * @package VirtueMart * @author RolandD */ class VirtueMartModelOrders extends VmModel { /** * constructs a VmModel * setMainTable defines the maintable of the model * @author Max Milbers */ function __construct() { parent::__construct(); $this->setMainTable('orders'); $this->addvalidOrderingFieldName(array('order_name','order_email','payment_method','virtuemart_order_id' ) ); } /** * This function gets the orderId, for anonymous users * @author Max Milbers */ public function getOrderIdByOrderPass($orderNumber,$orderPass){ $db = JFactory::getDBO(); $q = 'SELECT `virtuemart_order_id` FROM `#__virtuemart_orders` WHERE `order_pass`="'.$db->getEscaped($orderPass).'" AND `order_number`="'.$db->getEscaped($orderNumber).'"'; $db->setQuery($q); $orderId = $db->loadResult(); // vmdebug('getOrderIdByOrderPass '.$orderId); return $orderId; } /** * This function gets the orderId, for payment response * author Valerie Isaksen */ public static function getOrderIdByOrderNumber($orderNumber){ $db = JFactory::getDBO(); $q = 'SELECT `virtuemart_order_id` FROM `#__virtuemart_orders` WHERE `order_number`="'.$db->getEscaped($orderNumber).'"'; $db->setQuery($q); $orderId = $db->loadResult(); return $orderId; } /** * This function seems completly broken, JRequests are not allowed in the model, sql not escaped * This function gets the secured order Number, to send with paiement * */ public function getOrderNumber($virtuemart_order_id){ $db = JFactory::getDBO(); $q = 'SELECT `order_number` FROM `#__virtuemart_orders` WHERE virtuemart_order_id="'.(int)$virtuemart_order_id.'" '; $db->setQuery($q); $OrderNumber = $db->loadResult(); return $OrderNumber; } /** * Was also broken, actually used? * * get next/previous order id * */ public function getOrderId($order_id, $direction ='DESC') { if ($direction == 'ASC') { $arrow ='>'; } else { $arrow ='<'; } $db = JFactory::getDBO(); $q = 'SELECT `virtuemart_order_id` FROM `#__virtuemart_orders` WHERE `virtuemart_order_id`'.$arrow.(int)$order_id; $q.= ' ORDER BY `virtuemart_order_id` '.$direction ; $db->setQuery($q); if ($oderId = $db->loadResult()) { return $oderId ; } return 0 ; } /** * This is a proxy function to return an order safely, we may set the getOrder function to private * Maybe the right place would be the controller, cause there are JRequests in it. But for a fast solution, * still better than to have it 3-4 times in the view.html.php of the views. * @author Max Milbers * * @return array */ public function getMyOrderDetails($orderID = 0, $orderNumber = false, $orderPass = false){ $_currentUser = JFactory::getUser(); $cuid = $_currentUser->get('id'); $orderDetails = false; // If the user is not logged in, we will check the order number and order pass if(empty($orderID) and empty($cuid)){ // If the user is not logged in, we will check the order number and order pass if ($orderPass = JRequest::getString('order_pass',$orderPass)){ $orderNumber = JRequest::getString('order_number',$orderNumber); $orderId = $this->getOrderIdByOrderPass($orderNumber,$orderPass); if(empty($orderId)){ echo JText::_('COM_VIRTUEMART_RESTRICTED_ACCESS'); return false; } $orderDetails = $this->getOrder($orderId); } } else { // If the user is logged in, we will check if the order belongs to him $virtuemart_order_id = JRequest::getInt('virtuemart_order_id',$orderID) ; if (!$virtuemart_order_id) { $virtuemart_order_id = VirtueMartModelOrders::getOrderIdByOrderNumber(JRequest::getString('order_number')); } $orderDetails = $this->getOrder($virtuemart_order_id); if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if(!Permissions::getInstance()->check("admin")) { if(!isset($orderDetails['details']['BT']->virtuemart_user_id)){ $orderDetails['details']['BT']->virtuemart_user_id = 0; } //if(!empty($orderDetails['details']['BT']->virtuemart_user_id)){ vmdebug('getMyOrderDetails',$cuid,$orderDetails['details']['BT']->virtuemart_user_id); if ($orderDetails['details']['BT']->virtuemart_user_id != $cuid) { echo JText::_('COM_VIRTUEMART_RESTRICTED_ACCESS'); return false; } //} } } return $orderDetails; } /** * Load a single order, Attention, this function is not protected! Do the right manangment before, to be certain * we suggest to use getMyOrderDetails */ public function getOrder($virtuemart_order_id){ //sanitize id $virtuemart_order_id = (int)$virtuemart_order_id; $db = JFactory::getDBO(); $order = array(); // Get the order details $q = "SELECT u.*,o.*, s.order_status_name FROM #__virtuemart_orders o LEFT JOIN #__virtuemart_orderstates s ON s.order_status_code = o.order_status LEFT JOIN #__virtuemart_order_userinfos u ON u.virtuemart_order_id = o.virtuemart_order_id WHERE o.virtuemart_order_id=".$virtuemart_order_id; $db->setQuery($q); $order['details'] = $db->loadObjectList('address_type'); // Get the order history $q = "SELECT * FROM #__virtuemart_order_histories WHERE virtuemart_order_id=".$virtuemart_order_id." ORDER BY virtuemart_order_history_id ASC"; $db->setQuery($q); $order['history'] = $db->loadObjectList(); // Get the order items $q = 'SELECT virtuemart_order_item_id, product_quantity, order_item_name, order_item_sku, i.virtuemart_product_id, product_item_price, product_final_price, product_basePriceWithTax, product_discountedPriceWithoutTax, product_priceWithoutTax, product_subtotal_with_tax, product_subtotal_discount, product_tax, product_attribute, order_status, p.product_available_date, p.product_availability, intnotes, virtuemart_category_id FROM (#__virtuemart_order_items i LEFT JOIN #__virtuemart_products p ON p.virtuemart_product_id = i.virtuemart_product_id) LEFT JOIN #__virtuemart_product_categories c ON p.virtuemart_product_id = c.virtuemart_product_id WHERE `virtuemart_order_id`="'.$virtuemart_order_id.'" group by `virtuemart_order_item_id`'; //group by `virtuemart_order_id`'; Why ever we added this, it makes trouble, only one order item is shown then. // without group by we get the product 3 times, when it is in 3 categories and similar, so we need a group by //lets try group by `virtuemart_order_item_id` $db->setQuery($q); $order['items'] = $db->loadObjectList(); // Get the order items $q = "SELECT * FROM #__virtuemart_order_calc_rules AS z WHERE virtuemart_order_id=".$virtuemart_order_id; $db->setQuery($q); $order['calc_rules'] = $db->loadObjectList(); // vmdebug('getOrder my order',$order); return $order; } /** * Select the products to list on the product list page * @param $uid integer Optional user ID to get the orders of a single user * @param $_ignorePagination boolean If true, ignore the Joomla pagination (for embedded use, default false) */ public function getOrdersList($uid = 0, $noLimit = false) { // vmdebug('getOrdersList'); $this->_noLimit = $noLimit; $select = " o.*, CONCAT_WS(' ',u.first_name,u.middle_name,u.last_name) AS order_name " .',u.email as order_email,pm.payment_name AS payment_method '; $from = $this->getOrdersListQuery(); /* $_filter = array(); if ($uid > 0) { $_filter[] = ('u.virtuemart_user_id = ' . (int)$uid); }*/ $where = array(); if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if(!Permissions::getInstance()->check('storeadmin')){ $myuser =JFactory::getUser(); $where[]= ' u.virtuemart_user_id = ' . (int)$myuser->id.' AND o.virtuemart_vendor_id = "1" '; } else { if(empty($uid)){ $where[]= ' o.virtuemart_vendor_id = "1" '; } else { $where[]= ' u.virtuemart_user_id = ' . (int)$uid.' AND o.virtuemart_vendor_id = "1" '; } } if ($search = JRequest::getString('search', false)){ $search = '"%' . $this->_db->getEscaped( $search, true ) . '%"' ; $search = str_replace(' ','%',$search); $searchFields = array(); $searchFields[] = 'u.first_name'; $searchFields[] = 'u.middle_name'; $searchFields[] = 'u.last_name'; $searchFields[] = 'o.order_number'; $searchFields[] = 'u.company'; $searchFields[] = 'u.email'; $searchFields[] = 'u.phone_1'; $searchFields[] = 'u.address_1'; $searchFields[] = 'u.zip'; $where[] = implode (' LIKE '.$search.' OR ', $searchFields) . ' LIKE '.$search.' '; //$where[] = ' ( u.first_name LIKE '.$search.' OR u.middle_name LIKE '.$search.' OR u.last_name LIKE '.$search.' OR `order_number` LIKE '.$search.')'; } $order_status_code = JRequest::getString('order_status_code', false); if ($order_status_code and $order_status_code!=-1){ $where[] = ' o.order_status = "'.$order_status_code.'" '; } if (count ($where) > 0) { $whereString = ' WHERE (' . implode (' AND ', $where) . ') '; } else { $whereString = ''; } if ( JRequest::getCmd('view') == 'orders') { $ordering = $this->_getOrdering(); } else { $ordering = ' order by o.modified_on DESC'; } $this->_data = $this->exeSortSearchListQuery(0,$select,$from,$whereString,'',$ordering); return $this->_data ; } /** * List of tables to include for the product query * @author RolandD */ private function getOrdersListQuery() { return ' FROM #__virtuemart_orders as o LEFT JOIN #__virtuemart_order_userinfos as u ON u.virtuemart_order_id = o.virtuemart_order_id AND u.address_type="BT" LEFT JOIN #__virtuemart_paymentmethods_'.VMLANG.' as pm ON o.virtuemart_paymentmethod_id = pm.virtuemart_paymentmethod_id '; } /** * Update an order item status * @author Max Milbers * @author Ondřej Spilka - used for item edit also * @author Maik Künnemann */ public function updateSingleItem($virtuemart_order_item_id, &$orderdata, $orderUpdate = false) { //vmdebug('updateSingleItem',$virtuemart_order_item_id,$orderdata); $table = $this->getTable('order_items'); $table->load($virtuemart_order_item_id); $oldOrderStatus = $table->order_status; if(empty($oldOrderStatus)){ $oldOrderStatus = $orderdata->current_order_status; if($orderUpdate and empty($oldOrderStatus)){ $oldOrderStatus = 'P'; } } // $table->order_status = $orderdata->orderstatus; JPluginHelper::importPlugin('vmcustom'); $_dispatcher = JDispatcher::getInstance(); $_returnValues = $_dispatcher->trigger('plgVmOnUpdateSingleItem',array($table,&$orderdata)); $dataT = get_object_vars($table); // $doUpdate = JRequest::getString('update_values'); $orderdatacopy = $orderdata; $data = array_merge($dataT,(array)$orderdatacopy); // $data['order_status'] = $orderdata->orderstatus; if (!class_exists('CurrencyDisplay')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php'); } $this->_currencyDisplay = CurrencyDisplay::getInstance(); $rounding = $this->_currencyDisplay->_priceConfig['salesPrice'][1]; if ( $orderUpdate and !empty($data['virtuemart_order_item_id'])) { //get tax calc_value of product VatTax $db = JFactory::getDBO(); $sql = "SELECT `calc_value` FROM `#__virtuemart_order_calc_rules` WHERE `virtuemart_order_id` = ".$data['virtuemart_order_id']." AND `virtuemart_order_item_id` = ".$data['virtuemart_order_item_id']." AND `calc_kind` = 'VatTax' "; $db->setQuery($sql); $taxCalcValue = $db->loadResult(); if($data['calculate_product_tax']) { if(!$taxCalcValue){ //Could be a new item, missing the tax rules, we try to get one of another product. //get tax calc_value of product VatTax $db = JFactory::getDBO(); $sql = "SELECT `calc_value` FROM `#__virtuemart_order_calc_rules` WHERE `virtuemart_order_id` = ".$data['virtuemart_order_id']." AND `calc_kind` = 'VatTax' "; $db->setQuery($sql); $taxCalcValue = $db->loadResult(); } if(empty($data['product_subtotal_discount']))$data['product_subtotal_discount'] = 0.0; // "",null,0,NULL, FALSE => 0.0 //We do two cases, either we have the final amount and discount if(!empty($data['product_final_price']) and $data['product_final_price']!=0){ if(empty($data['product_tax']) or $data['product_tax']==0){ $data['product_tax'] = $data['product_final_price'] * $taxCalcValue / ($taxCalcValue + 100); //vmdebug($data['product_final_price'] .' * '.$taxCalcValue.' / '.($taxCalcValue + 100).' = '.$data['product_tax']); } if(empty($data['product_item_price']) or $data['product_item_price']==0){ if(empty($data['product_tax']))$data['product_tax'] = 0.0; $data['product_item_price'] = round($data['product_final_price'], $rounding) - $data['product_tax']; $data['product_discountedPriceWithoutTax'] = 0.0;// round($data['product_final_price'], $rounding) ; $data['product_priceWithoutTax'] = 0.0; $data['product_basePriceWithTax'] = round($data['product_final_price'], $rounding) - $data['product_subtotal_discount']; } } else //or we have the base price and a manually set discount. if(!empty($data['product_item_price']) and $data['product_item_price']!=0){ if(empty($data['product_tax']) or $data['product_tax']==0){ $data['product_tax'] = ($data['product_item_price']-$data['product_subtotal_discount']) * ($taxCalcValue/100.0); } $data['product_discountedPriceWithoutTax'] = 0.0; $data['product_priceWithoutTax'] = 0.0; $data['product_final_price'] = round($data['product_item_price'], $rounding) + $data['product_tax'] + $data['product_subtotal_discount']; $data['product_basePriceWithTax'] = round($data['product_final_price'], $rounding) - $data['product_subtotal_discount']; } } //$data['product_subtotal_discount'] = (round($orderdata->product_final_price, $rounding) - round($data['product_basePriceWithTax'], $rounding)) * $orderdata->product_quantity; $data['product_subtotal_with_tax'] = round($data['product_final_price'], $rounding) * $orderdata->product_quantity; } $table->bindChecknStore($data); if ( $orderUpdate ) { if ( empty($data['order_item_sku']) ) { //update product identification $db = JFactory::getDBO(); $prolang = '#__virtuemart_products_' . VMLANG; $oi = " #__virtuemart_order_items"; $protbl = "#__virtuemart_products"; $sql = "UPDATE $oi, $protbl, $prolang" . " SET $oi.order_item_sku=$protbl.product_sku, $oi.order_item_name=$prolang.product_name ". " WHERE $oi.virtuemart_product_id=$protbl.virtuemart_product_id " . " and $oi.virtuemart_product_id=$prolang.virtuemart_product_id " . " and $oi.virtuemart_order_item_id=$virtuemart_order_item_id"; $db->setQuery($sql); if ($db->query() === false) { vmError($db->getError()); } } } // Update the order item history //$this->_updateOrderItemHist($id, $order_status, $customer_notified, $comment); $errors = $table->getErrors(); foreach($errors as $error){ vmError( get_class( $this ).'::store '.$error); } //OSP update cartRules/shipment/payment //it would seem strange this is via item edit //but in general, shipment and payment would be tractated as another items of the order //in datas they are not, bu okay we have it here and functional //moreover we can compute all aggregate values here via one aggregate SQL if ( $orderUpdate ) { $db = JFactory::getDBO(); $ordid = $table->virtuemart_order_id; //cartRules $calc_rules = JRequest::getVar('calc_rules','', '', 'array'); $calc_rules_amount = 0; $calc_rules_discount_amount = 0; $calc_rules_tax_amount = 0; if(!empty($calc_rules)) { foreach($calc_rules as $calc_kind => $calc_rule) { foreach($calc_rule as $virtuemart_order_calc_rule_id => $calc_amount) { $sql = "UPDATE `#__virtuemart_order_calc_rules` SET `calc_amount`=$calc_amount WHERE `virtuemart_order_calc_rule_id`=$virtuemart_order_calc_rule_id"; $db->setQuery($sql); if(isset($calc_amount)) $calc_rules_amount += $calc_amount; if ($calc_kind == 'DBTaxRulesBill' || $calc_kind == 'DATaxRulesBill') { $calc_rules_discount_amount += $calc_amount; } if ($calc_kind == 'taxRulesBill') { $calc_rules_tax_amount += $calc_amount; } if ($db->query() === false) { vmError($db->getError()); } } } } //shipment $os = JRequest::getString('order_shipment'); $ost = JRequest::getString('order_shipment_tax'); if ( $os!="" ) { $sql = "UPDATE `#__virtuemart_orders` SET `order_shipment`=$os,`order_shipment_tax`=$ost WHERE `virtuemart_order_id`=$ordid"; $db->setQuery($sql); if ($db->query() === false) { vmError($db->getError()); } } //payment $op = JRequest::getString('order_payment'); $opt = JRequest::getString('order_payment_tax'); if ( $op!="" ) { $sql = "UPDATE `#__virtuemart_orders` SET `order_payment`=$op,`order_payment_tax`=$opt WHERE `virtuemart_order_id`=$ordid"; $db->setQuery($sql); if ($db->query() === false) { vmError($db->getError()); } } $sql = " UPDATE `#__virtuemart_orders` SET `order_total`=(SELECT sum(product_final_price*product_quantity) FROM #__virtuemart_order_items where `virtuemart_order_id`=$ordid)+`order_shipment`+`order_shipment_tax`+`order_payment`+`order_payment_tax`+$calc_rules_amount, `order_discountAmount`=(SELECT sum(product_subtotal_discount) FROM #__virtuemart_order_items where `virtuemart_order_id`=$ordid), `order_billDiscountAmount`=`order_discountAmount`+$calc_rules_discount_amount, `order_salesPrice`=(SELECT sum(product_final_price*product_quantity) FROM #__virtuemart_order_items where `virtuemart_order_id`=$ordid), `order_tax`=(SELECT sum( product_tax*product_quantity) FROM #__virtuemart_order_items where `virtuemart_order_id`=$ordid), `order_subtotal`=(SELECT sum(ROUND(product_item_price, ". $rounding .")*product_quantity) FROM #__virtuemart_order_items where `virtuemart_order_id`=$ordid),"; if(JRequest::getString('calculate_billTaxAmount')) { $sql .= "`order_billTaxAmount`=(SELECT sum( product_tax*product_quantity) FROM #__virtuemart_order_items where `virtuemart_order_id`=$ordid)+`order_shipment_tax`+`order_payment_tax`+$calc_rules_tax_amount"; } else { $sql .= "`order_billTaxAmount`=".JRequest::getString('order_billTaxAmount'); } $sql .= " WHERE `virtuemart_order_id`=$ordid"; $db->setQuery($sql); if ($db->query() === false) { vmError('updateSingleItem '.$db->getError().' and '.$sql); } } $this->handleStockAfterStatusChangedPerProduct($orderdata->order_status, $oldOrderStatus, $table,$table->product_quantity); // } } /** * Strange name is just temporarly * * @param unknown_type $order_id * @param unknown_type $order_status * @author Max Milbers */ var $useDefaultEmailOrderStatus = true; public function updateOrderStatus($orders=0, $order_id =0,$order_status=0){ //General change of orderstatus $total = 1 ; if(empty($orders)){ $orders = array(); $orderslist = JRequest::getVar('orders', array()); $total = 0 ; // Get the list of orders in post to update foreach ($orderslist as $key => $order) { if ( $orderslist[$key]['order_status'] !== $orderslist[$key]['current_order_status'] ) { $orders[$key] = $orderslist[$key]; $total++; } } } if(!is_array($orders)){ $orders = array($orders); } /* Process the orders to update */ $updated = 0; $error = 0; if ($orders) { // $notify = JRequest::getVar('customer_notified', array()); // ??? // $comments = JRequest::getVar('comments', array()); // ??? foreach ($orders as $virtuemart_order_id => $order) { if ($order_id >0) $virtuemart_order_id= $order_id; $this->useDefaultEmailOrderStatus = false; if($this->updateStatusForOneOrder($virtuemart_order_id,$order)){ $updated ++; } else { $error++; } } } $result = array( 'updated' => $updated , 'error' =>$error , 'total' => $total ) ; return $result ; } // IMPORTANT: The $inputOrder can contain extra data by plugins //also strange $useTriggers is always activated? function updateStatusForOneOrder($virtuemart_order_id,$inputOrder,$useTriggers=true){ // vmdebug('updateStatusForOneOrder', $inputOrder); /* Update the order */ $data = $this->getTable('orders'); $data->load($virtuemart_order_id); $old_order_status = $data->order_status; $data->bind($inputOrder); $cp_rm = VmConfig::get('cp_rm',array('C')); if(!is_array($cp_rm)) $cp_rm = array($cp_rm); if ( in_array((string) $data->order_status,$cp_rm) ){ if (!empty($data->coupon_code)) { if (!class_exists('CouponHelper')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'coupon.php'); CouponHelper::RemoveCoupon($data->coupon_code); } } //First we must call the payment, the payment manipulates the result of the order_status if($useTriggers){ if(!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS.DS.'vmpsplugin.php'); // Payment decides what to do when order status is updated JPluginHelper::importPlugin('vmcalculation'); JPluginHelper::importPlugin('vmcustom'); JPluginHelper::importPlugin('vmshipment'); JPluginHelper::importPlugin('vmpayment'); $_dispatcher = JDispatcher::getInstance(); //Should we add this? $inputOrder $_returnValues = $_dispatcher->trigger('plgVmOnUpdateOrderPayment',array(&$data,$old_order_status)); foreach ($_returnValues as $_returnValue) { if ($_returnValue === true) { break; // Plugin was successfull } elseif ($_returnValue === false) { return false; // Plugin failed } // Ignore null status and look for the next returnValue } $_dispatcher = JDispatcher::getInstance(); //Should we add this? $inputOrder $_returnValues = $_dispatcher->trigger('plgVmOnUpdateOrderShipment',array(&$data,$old_order_status)); /** * If an order gets cancelled, fire a plugin event, perhaps * some authorization needs to be voided */ if ($data->order_status == "X") { $_dispatcher = JDispatcher::getInstance(); //Should be renamed to plgVmOnCancelOrder $_dispatcher->trigger('plgVmOnCancelPayment',array(&$data,$old_order_status)); } } if(empty($data->delivery_date)){ $del_date_type = VmConfig::get('del_date_type','m'); if(strpos($del_date_type,'os')!==FALSE){ //for example osS $os = substr($del_date_type,2); if($data->order_status == $os){ $date = JFactory::getDate(); $data->delivery_date = $date->toMySQL(); } } else { VmConfig::loadJLang('com_virtuemart_orders', true); $data->delivery_date = JText::_('COM_VIRTUEMART_DELDATE_INV'); } } if ($data->store()) { $task= JRequest::getCmd('task',0); $view= JRequest::getWord('view',0); /*if($task=='edit'){ $update_lines = JRequest::getInt('update_lines'); } else /*/ if ($task=='updatestatus' and $view=='orders') { $lines = JRequest::getVar('orders'); $update_lines = $lines[$virtuemart_order_id]['update_lines']; } else { $update_lines = 1; } if($update_lines==1){ vmdebug('$update_lines '.$update_lines); $q = 'SELECT virtuemart_order_item_id FROM #__virtuemart_order_items WHERE virtuemart_order_id="'.$virtuemart_order_id.'"'; $db = JFactory::getDBO(); $db->setQuery($q); $order_items = $db->loadObjectList(); if ($order_items) { // vmdebug('updateStatusForOneOrder',$data); foreach ($order_items as $order_item) { //$this->updateSingleItem($order_item->virtuemart_order_item_id, $data->order_status, $order['comments'] , $virtuemart_order_id, $data->order_pass); $this->updateSingleItem($order_item->virtuemart_order_item_id, $data); } } } /* Update the order history */ $this->_updateOrderHist($virtuemart_order_id, $data->order_status, $inputOrder['customer_notified'], $inputOrder['comments']); // When the plugins did not already notified the user, do it here (the normal way) //Attention the ! prevents at the moment that an email is sent. But it should used that way. // if (!$inputOrder['customer_notified']) { $this->notifyCustomer( $data->virtuemart_order_id , $inputOrder ); // } JPluginHelper::importPlugin('vmcoupon'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmCouponUpdateOrderStatus', array($data, $old_order_status)); if(!empty($returnValues)){ foreach ($returnValues as $returnValue) { if ($returnValue !== null ) { return $returnValue; } } } return true; } else { return false; } } /** * Update an order status and send e-mail if needed * @author RolandD * @author Oscar van Eijk * @deprecated */ public function updateStatus( $orders=null,$virtuemart_order_id =0){ $this -> updateOrderStatus($orders,$virtuemart_order_id); return; } /** * Get the information from the cart and create an order from it * * @author Oscar van Eijk * @param object $_cart The cart data * @return mixed The new ordernumber, false on errors */ public function createOrderFromCart($cart) { if ($cart === null) { vmError('createOrderFromCart() called without a cart - that\'s a programming bug','Can\'t create order, sorry.'); return false; } $usr = JFactory::getUser(); $prices = $cart->getCartPrices(); if (($orderID = $this->_createOrder($cart, $usr, $prices)) == 0) { vmError('Couldn\'t create order','Couldn\'t create order'); return false; } if (!$this->_createOrderLines($orderID, $cart)) { vmError('Couldn\'t create order items','Couldn\'t create order items'); return false; } if (!$this-> _createOrderCalcRules($orderID, $cart) ) { vmError('Couldn\'t create order items','Couldn\'t create order items'); return false; } $this->_updateOrderHist($orderID); if (!$this->_writeUserInfo($orderID, $usr, $cart)) { vmError('Couldn\'t create order history','Couldn\'t create order history'); return false; } return $orderID; } /** * Write the order header record * * @author Oscar van Eijk * @param object $_cart The cart data * @param object $_usr User object * @param array $_prices Price data * @return integer The new ordernumber */ private function _createOrder($_cart, $_usr, $_prices) { // TODO We need tablefields for the new values: // Shipment: // $_prices['shipmentValue'] w/out tax // $_prices['shipmentTax'] Tax // $_prices['salesPriceShipment'] Total // // Payment: // $_prices['paymentValue'] w/out tax // $_prices['paymentTax'] Tax // $_prices['paymentDiscount'] Discount // $_prices['salesPricePayment'] Total $_orderData = new stdClass(); $_orderData->virtuemart_order_id = null; $_orderData->virtuemart_user_id = $_usr->get('id'); $_orderData->virtuemart_vendor_id = $_cart->vendorId; $_orderData->customer_number = $_cart->customer_number; //Note as long we do not have an extra table only storing addresses, the virtuemart_userinfo_id is not needed. //The virtuemart_userinfo_id is just the id of a stored address and is only necessary in the user maintance view or for choosing addresses. //the saved order should be an snapshot with plain data written in it. // $_orderData->virtuemart_userinfo_id = 'TODO'; // $_cart['BT']['virtuemart_userinfo_id']; // TODO; Add it in the cart... but where is this used? Obsolete? $_orderData->order_total = $_prices['billTotal']; $_orderData->order_salesPrice = $_prices['salesPrice']; $_orderData->order_billTaxAmount = $_prices['billTaxAmount']; $_orderData->order_billDiscountAmount = $_prices['billDiscountAmount']; $_orderData->order_discountAmount = $_prices['discountAmount']; $_orderData->order_subtotal = $_prices['priceWithoutTax']; $_orderData->order_tax = $_prices['taxAmount']; $_orderData->order_shipment = $_prices['shipmentValue']; $_orderData->order_shipment_tax = $_prices['shipmentTax']; $_orderData->order_payment = $_prices['paymentValue']; $_orderData->order_payment_tax = $_prices['paymentTax']; if (!empty($_cart->cartData['VatTax'])) { $taxes = array(); foreach($_cart->cartData['VatTax'] as $k=>$VatTax) { $taxes[$k]['virtuemart_calc_id'] = $k; $taxes[$k]['calc_name'] = $VatTax['calc_name']; $taxes[$k]['calc_value'] = $VatTax['calc_value']; $taxes[$k]['result'] = $VatTax['result']; } $_orderData->order_billTax = json_encode($taxes); } if (!empty($_cart->couponCode)) { $_orderData->coupon_code = $_cart->couponCode; $_orderData->coupon_discount = $_prices['salesPriceCoupon']; } $_orderData->order_discount = $_prices['discountAmount']; // discount order_items $_orderData->order_status = 'P'; $_orderData->order_currency = $this->getVendorCurrencyId($_orderData->virtuemart_vendor_id); if (isset($_cart->pricesCurrency)) { $_orderData->user_currency_id = $_cart->paymentCurrency ;//$this->getCurrencyIsoCode($_cart->pricesCurrency); $currency = CurrencyDisplay::getInstance($_orderData->user_currency_id); if($_orderData->user_currency_id != $_orderData->order_currency){ $_orderData->user_currency_rate = $currency->convertCurrencyTo($_orderData->user_currency_id ,1.0,false); } else { $_orderData->user_currency_rate=1.0; } } $_orderData->virtuemart_paymentmethod_id = $_cart->virtuemart_paymentmethod_id; $_orderData->virtuemart_shipmentmethod_id = $_cart->virtuemart_shipmentmethod_id; $_filter = JFilterInput::getInstance (array('br', 'i', 'em', 'b', 'strong'), array(), 0, 0, 1); $_orderData->customer_note = $_filter->clean($_cart->customer_comment); $_orderData->order_language = $_cart->order_language; $_orderData->ip_address = $_SERVER['REMOTE_ADDR']; $_orderData->order_number =''; JPluginHelper::importPlugin('vmshopper'); $dispatcher = JDispatcher::getInstance(); $plg_datas = $dispatcher->trigger('plgVmOnUserOrder',array(&$_orderData)); foreach($plg_datas as $plg_data){ // $data = array_merge($plg_data,$data); } if(empty($_orderData->order_number)){ $_orderData->order_number = $this->generateOrderNumber($_usr->get('id'),4,$_orderData->virtuemart_vendor_id); } if(empty($_orderData->order_pass)){ $_orderData->order_pass = 'p_'.substr( md5((string)time().rand(1,1000).$_orderData->order_number ), 0, 5); } $orderTable = $this->getTable('orders'); $orderTable -> bindChecknStore($_orderData); $errors = $orderTable->getErrors(); foreach($errors as $error){ vmError($error); } $db = JFactory::getDBO(); $_orderID = $db->insertid(); if (!empty($_cart->couponCode)) { //set the virtuemart_order_id in the Request for 3rd party coupon components (by Seyi and Max) JRequest::setVar ( 'virtuemart_order_id', $_orderData->virtuemart_order_id ); // If a gift coupon was used, remove it now //CouponHelper::RemoveCoupon($_cart->couponCode); CouponHelper::setInUseCoupon($_cart->couponCode, true); } // the order number is saved into the session to make sure that the correct cart is emptied with the payment notification $_cart->order_number=$_orderData->order_number; $_cart->setCartIntoSession (); return $_orderID; } private function getVendorCurrencyId($vendorId){ $q = 'SELECT `vendor_currency` FROM `#__virtuemart_vendors` WHERE `virtuemart_vendor_id`="'.$vendorId.'" '; $db = JFactory::getDBO(); $db->setQuery($q); $vendorCurrency = $db->loadResult(); return $vendorCurrency; // return $this->getCurrencyIsoCode($vendorCurrency); } private function getCurrencyIsoCode($vmCode){ $q = 'SELECT `currency_numeric_code` FROM `#__virtuemart_currencies` WHERE `virtuemart_currency_id`="'.$vmCode.'" '; $db = JFactory::getDBO(); $db->setQuery($q); return $db->loadResult(); } /** * Write the BillTo record, and if set, the ShipTo record * * @author Oscar van Eijk * @param integer $_id Order ID * @param object $_usr User object * @param object $_cart Cart object * @return boolean True on success */ private function _writeUserInfo($_id, &$_usr, $_cart) { $_userInfoData = array(); if(!class_exists('VirtueMartModelUserfields')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'userfields.php'); //if(!class_exists('shopFunctions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'shopfunctions.php'); $_userFieldsModel = VmModel::getModel('userfields'); $_userFieldsBT = $_userFieldsModel->getUserFields('account' , array('delimiters'=>true, 'captcha'=>true) , array('username', 'password', 'password2', 'user_is_vendor') ); foreach ($_userFieldsBT as $_fld) { $_name = $_fld->name; if(!empty( $_cart->BT[$_name])){ if (is_array( $_cart->BT[$_name])) { $_userInfoData[$_name] = implode("|*|",$_cart->BT[$_name]); } else { $_userInfoData[$_name] = $_cart->BT[$_name]; } } } $_userInfoData['virtuemart_order_id'] = $_id; $_userInfoData['virtuemart_user_id'] = $_usr->get('id'); $_userInfoData['address_type'] = 'BT'; $order_userinfosTable = $this->getTable('order_userinfos'); if (!$order_userinfosTable->bindChecknStore($_userInfoData)){ vmError($order_userinfosTable->getError()); return false; } if ($_cart->ST) { $_userInfoData = array(); // $_userInfoData['virtuemart_order_userinfo_id'] = null; // Reset key to make sure it doesn't get overwritten by ST $_userFieldsST = $_userFieldsModel->getUserFields('shipment' , array('delimiters'=>true, 'captcha'=>true) , array('username', 'password', 'password2', 'user_is_vendor') ); foreach ($_userFieldsST as $_fld) { $_name = $_fld->name; if(!empty( $_cart->ST[$_name])){ $_userInfoData[$_name] = $_cart->ST[$_name]; } } $_userInfoData['virtuemart_order_id'] = $_id; $_userInfoData['virtuemart_user_id'] = $_usr->get('id'); $_userInfoData['address_type'] = 'ST'; $order_userinfosTable = $this->getTable('order_userinfos'); if (!$order_userinfosTable->bindChecknStore($_userInfoData)){ vmError($order_userinfosTable->getError()); return false; } } return true; } function handleStockAfterStatusChangedPerProduct($newState, $oldState,$tableOrderItems, $quantity) { if($newState == $oldState) return; // $StatutWhiteList = array('P','C','X','R','S','N'); $db = JFactory::getDBO(); $db->setQuery('SELECT * FROM `#__virtuemart_orderstates` '); $StatutWhiteList = $db->loadAssocList('order_status_code'); // new product is statut N $StatutWhiteList['N'] = Array ( 'order_status_id' => 0 , 'order_status_code' => 'N' , 'order_stock_handle' => 'A'); if(!array_key_exists($oldState,$StatutWhiteList) or !array_key_exists($newState,$StatutWhiteList)) { vmError('The workflow for '.$newState.' or '.$oldState.' is unknown, take a look on model/orders function handleStockAfterStatusChanged','Can\'t process workflow, contact the shopowner. Status is'.$newState); return ; } //vmdebug( 'updatestock qt :' , $quantity.' id :'.$productId); // P Pending // C Confirmed // X Cancelled // R Refunded // S Shipped // N New or coming from cart // TO have no product setted as ordered when added to cart simply delete 'P' FROM array Reserved // don't set same values in the 2 arrays !!! // stockOut is in normal case shipped product //order_stock_handle // 'A' : stock Available // 'O' : stock Out // 'R' : stock reserved // the status decreasing real stock ? // $stockOut = array('S'); if ($StatutWhiteList[$newState]['order_stock_handle'] == 'O') $isOut = 1; else $isOut = 0; if ($StatutWhiteList[$oldState]['order_stock_handle'] == 'O') $wasOut = 1; else $wasOut = 0; // $isOut = in_array($newState, $stockOut); // $wasOut= in_array($oldState, $stockOut); // Stock change ? if ($isOut && !$wasOut) $product_in_stock = '-'; else if ($wasOut && !$isOut ) $product_in_stock = '+'; else $product_in_stock = '='; // the status increasing reserved stock(virtual Stock = product_in_stock - product_ordered) // $Reserved = array('P','C'); if ($StatutWhiteList[$newState]['order_stock_handle'] == 'R') $isReserved = 1; else $isReserved = 0; if ($StatutWhiteList[$oldState]['order_stock_handle'] == 'R') $wasReserved = 1; else $wasReserved = 0; // $isReserved = in_array($newState, $Reserved); // $wasReserved = in_array($oldState, $Reserved); // reserved stock must be change(all ordered product) if ($isReserved && !$wasReserved ) $product_ordered = '+'; else if (!$isReserved && $wasReserved ) $product_ordered = '-'; else $product_ordered = '='; //Here trigger plgVmGetProductStockToUpdateByCustom $productModel = VmModel::getModel('product'); if (!empty($tableOrderItems->product_attribute)) { if(!class_exists('VirtueMartModelCustomfields'))require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'customfields.php'); $virtuemart_product_id = $tableOrderItems->virtuemart_product_id; $product_attributes = json_decode($tableOrderItems->product_attribute,true); foreach ($product_attributes as $virtuemart_customfield_id=>$param){ if ($param) { if ($productCustom = VirtueMartModelCustomfields::getProductCustomField ($virtuemart_customfield_id ) ) { if ($productCustom->field_type == "E") { //$product = self::addParam($product); if(!class_exists('vmCustomPlugin')) require(JPATH_VM_PLUGINS.DS.'vmcustomplugin.php'); JPluginHelper::importPlugin('vmcustom'); $dispatcher = JDispatcher::getInstance(); //vmdebug('handleStockAfterStatusChangedPerProduct ',$param); $dispatcher->trigger('plgVmGetProductStockToUpdateByCustom',array(&$tableOrderItems,$param, $productCustom)); } } } } //vmdebug('produit',$product); // we can have more then one product in case of pack // in case of child, ID must be the child ID // TO DO use $prod->amount change for packs(eg. 1 computer and 2 HDD) if (is_array($tableOrderItems)) foreach ($tableOrderItems as $prod ) $productModel->updateStockInDB($prod, $quantity,$product_in_stock,$product_ordered); else $productModel->updateStockInDB($tableOrderItems, $quantity,$product_in_stock,$product_ordered); } else { $productModel->updateStockInDB ($tableOrderItems, $quantity,$product_in_stock,$product_ordered); } } /** * Create the ordered item records * * @author Oscar van Eijk * @author Kohl Patrick * @param integer $_id integer Order ID * @param object $_cart array The cart data * @return boolean True on success */ private function _createOrderLines($_id, $_cart) { $_orderItems = $this->getTable('order_items'); // $_lineCount = 0; foreach ($_cart->products as $priceKey=>$_prod) { if (!is_int($priceKey)) { if(!class_exists('calculationHelper')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'calculationh.php'); $calculator = calculationHelper::getInstance(); $variantmods = $calculator->parseModifier($priceKey); $row=0 ; //$product_id = (int)$priceKey; $_prod->product_attribute = ''; $product_attribute = array(); //MarkerVarMods //foreach($variantmods as $variant=>$selected){ foreach($variantmods as $selected=>$variant){ if ($selected) { if(!class_exists('VirtueMartModelCustomfields')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'customfields.php'); $productCustom = VirtueMartModelCustomfields::getProductCustomField ($selected ); //vmdebug('$_prod,$productCustom',$productCustom ); if ($productCustom->field_type == "E") { if(!class_exists('vmCustomPlugin')) require(JPATH_VM_PLUGINS.DS.'vmcustomplugin.php'); //We need something like this $product_attribute[$selected] = $productCustom->virtuemart_custom_id; //but seems we are forced to use this //$product_attribute[$selected] = $selected; if(!empty($_prod->param)){ foreach($_prod->param as $k => $plg){ if ($k == $selected){ //TODO productCartId $product_attribute[$selected] = $plg ; } } } } else { $product_attribute[$selected] = ' '.$productCustom->custom_title.''.$productCustom->custom_value.''; //$product_attribute[$variant] = ' '.$productCustom->custom_title.''.$productCustom->custom_value.''; } } $row++; } //if (isset($_prod->userfield )) $_prod->product_attribute .= '
        '.$_prod->userfield.' : '; $_orderItems->product_attribute = json_encode($product_attribute); //print_r($product_attribute); } else { $_orderItems->product_attribute = null ; } // TODO: add fields for the following data: // * [double] basePrice = 38.48 // * [double] basePriceVariant = 38.48 // * [double] basePriceWithTax = 42.04 // * [double] discountedPriceWithoutTax = 36.48 // * [double] priceBeforeTax = 36.48 // * [double] salesPrice = 39.85 // * [double] salesPriceTemp = 39.85 // * [double] taxAmount = 3.37 // * [double] salesPriceWithDiscount = 0 // * [double] discountAmount = 2.19 // * [double] priceWithoutTax = 36.48 // * [double] variantModification = 0 $_orderItems->virtuemart_order_item_id = null; $_orderItems->virtuemart_order_id = $_id; // $_orderItems->virtuemart_userinfo_id = 'TODO'; //$_cart['BT']['virtuemart_userinfo_id']; // TODO; Add it in the cart... but where is this used? Obsolete? $_orderItems->virtuemart_vendor_id = $_prod->virtuemart_vendor_id; $_orderItems->virtuemart_product_id = $_prod->virtuemart_product_id; $_orderItems->order_item_sku = $_prod->product_sku; $_orderItems->order_item_name = $_prod->product_name; //TODO Patrick $_orderItems->product_quantity = $_prod->quantity; $_orderItems->product_item_price = $_cart->pricesUnformatted[$priceKey]['basePrice']; $_orderItems->product_basePriceWithTax = $_cart->pricesUnformatted[$priceKey]['basePriceWithTax']; $_orderItems->product_priceWithoutTax = $_cart->pricesUnformatted[$priceKey]['priceWithoutTax']; $_orderItems->product_discountedPriceWithoutTax = $_cart->pricesUnformatted[$priceKey]['discountedPriceWithoutTax']; //$_orderItems->product_tax = $_cart->pricesUnformatted[$priceKey]['subtotal_tax_amount']; $_orderItems->product_tax = $_cart->pricesUnformatted[$priceKey]['taxAmount']; $_orderItems->product_final_price = $_cart->pricesUnformatted[$priceKey]['salesPrice']; $_orderItems->product_subtotal_discount = $_cart->pricesUnformatted[$priceKey]['subtotal_discount']; $_orderItems->product_subtotal_with_tax = $_cart->pricesUnformatted[$priceKey]['subtotal_with_tax']; // $_orderItems->order_item_currency = $_prices[$_lineCount]['']; // TODO Currency $_orderItems->order_status = 'P'; if (!$_orderItems->check()) { vmError($this->getError()); return false; } // Save the record to the database if (!$_orderItems->store()) { vmError($this->getError()); return false; } $_prod->virtuemart_order_item_id = $_orderItems->virtuemart_order_item_id; // vmdebug('_createOrderLines',$_prod); $this->handleStockAfterStatusChangedPerProduct( $_orderItems->order_status,'N',$_orderItems,$_orderItems->product_quantity); } //jExit(); return true; } /** * Create the ordered item records * * @author Valerie Isaksen * @param integer $_id integer Order ID * @param object $_cart array The cart data * @return boolean True on success */ private function _createOrderCalcRules($order_id, $_cart) { $productKeys = array_keys($_cart->products); $calculation_kinds = array('DBTax','Tax','VatTax','DATax'); foreach($productKeys as $key){ foreach($calculation_kinds as $calculation_kind) { if(!isset($_cart->pricesUnformatted[$key][$calculation_kind])) continue; $productRules = $_cart->pricesUnformatted[$key][$calculation_kind]; foreach($productRules as $rule){ $orderCalcRules = $this->getTable('order_calc_rules'); $orderCalcRules->virtuemart_order_calc_rule_id= null; $orderCalcRules->virtuemart_calc_id= $rule[7]; $orderCalcRules->virtuemart_order_item_id = $_cart->products[$key]->virtuemart_order_item_id; $orderCalcRules->calc_rule_name = $rule[0]; $orderCalcRules->calc_amount = 0; $orderCalcRules->calc_result = 0; if ($calculation_kind == 'VatTax') { $orderCalcRules->calc_amount = $_cart->pricesUnformatted[$key]['taxAmount']; $orderCalcRules->calc_result = $_cart->cartData['VatTax'][$rule[7]]['result']; } $orderCalcRules->calc_value = $rule[1]; $orderCalcRules->calc_mathop = $rule[2]; $orderCalcRules->calc_kind = $calculation_kind; $orderCalcRules->calc_currency = $rule[4]; $orderCalcRules->calc_params = $rule[5]; $orderCalcRules->virtuemart_vendor_id = $rule[6]; $orderCalcRules->virtuemart_order_id = $order_id; if (!$orderCalcRules->check()) { vmError('_createOrderCalcRules check product rule '.$this->getError()); vmdebug('_createOrderCalcRules check product rule '.$this->getError()); return false; } // Save the record to the database if (!$orderCalcRules->store()) { vmError('_createOrderCalcRules store product rule '.$this->getError()); vmdebug('_createOrderCalcRules store product rule '.$this->getError()); return false; } } } } $Bill_calculation_kinds=array('DBTaxRulesBill', 'taxRulesBill', 'DATaxRulesBill'); // vmdebug('_createOrderCalcRules',$_cart ); foreach($Bill_calculation_kinds as $calculation_kind) { // if(empty($_cart->cartData)){ // vmError('Cart data was empty, why?'); // if(!class_exists('calculationHelper')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'calculationh.php'); // $calculator = calculationHelper::getInstance(); // $_cart->cartData = $calculator->getCartData(); // } foreach($_cart->cartData[$calculation_kind] as $rule){ $orderCalcRules = $this->getTable('order_calc_rules'); $orderCalcRules->virtuemart_order_calc_rule_id = null; $orderCalcRules->virtuemart_calc_id= $rule['virtuemart_calc_id']; $orderCalcRules->calc_rule_name= $rule['calc_name']; $orderCalcRules->calc_amount = $_cart->pricesUnformatted[$rule['virtuemart_calc_id'].'Diff']; if ($calculation_kind == 'taxRulesBill' and !empty($_cart->cartData['VatTax'][$rule['virtuemart_calc_id']]['result'])) { $orderCalcRules->calc_result = $_cart->cartData['VatTax'][$rule['virtuemart_calc_id']]['result']; } $orderCalcRules->calc_kind=$calculation_kind; $orderCalcRules->calc_mathop=$rule['calc_value_mathop']; $orderCalcRules->virtuemart_order_id=$order_id; $orderCalcRules->calc_params=$rule['calc_params']; if (!$orderCalcRules->check()) { vmError('_createOrderCalcRules store bill rule '.$this->getError()); return false; } // Save the record to the database if (!$orderCalcRules->store()) { vmError('_createOrderCalcRules store bill rule '.$this->getError()); return false; } } } if(!empty($_cart->virtuemart_paymentmethod_id)){ $orderCalcRules = $this->getTable('order_calc_rules'); $calcModel = VmModel::getModel('calc'); $calcModel->setId($_cart->pricesUnformatted['payment_calc_id']); $calc = $calcModel->getCalc(); $orderCalcRules->virtuemart_order_calc_rule_id = null; $orderCalcRules->virtuemart_calc_id = $calc->virtuemart_calc_id; $orderCalcRules->calc_kind = 'payment'; $orderCalcRules->calc_rule_name = $calc->calc_name; $orderCalcRules->calc_amount = $_cart->pricesUnformatted['paymentTax']; $orderCalcRules->calc_value = $calc->calc_value; $orderCalcRules->calc_mathop = $calc->calc_value_mathop; $orderCalcRules->calc_currency = $calc->calc_currency; $orderCalcRules->calc_params = $calc->calc_params; $orderCalcRules->virtuemart_vendor_id = $calc->virtuemart_vendor_id; $orderCalcRules->virtuemart_order_id = $order_id; if (!$orderCalcRules->check()) { vmError('_createOrderCalcRules store payment rule '.$this->getError()); return false; } // Save the record to the database if (!$orderCalcRules->store()) { vmError('_createOrderCalcRules store payment rule '.$this->getError()); return false; } } if(!empty($_cart->virtuemart_shipmentmethod_id)){ $orderCalcRules = $this->getTable('order_calc_rules'); $calcModel = VmModel::getModel('calc'); $calcModel->setId($_cart->pricesUnformatted['shipment_calc_id']); $calc = $calcModel->getCalc(); $orderCalcRules->virtuemart_order_calc_rule_id = null; $orderCalcRules->virtuemart_calc_id = $calc->virtuemart_calc_id; $orderCalcRules->calc_kind = 'shipment'; $orderCalcRules->calc_rule_name = $calc->calc_name; $orderCalcRules->calc_amount = $_cart->pricesUnformatted['shipmentTax']; $orderCalcRules->calc_value = $calc->calc_value; $orderCalcRules->calc_mathop = $calc->calc_value_mathop; $orderCalcRules->calc_currency = $calc->calc_currency; $orderCalcRules->calc_params = $calc->calc_params; $orderCalcRules->virtuemart_vendor_id = $calc->virtuemart_vendor_id; $orderCalcRules->virtuemart_order_id = $order_id; if (!$orderCalcRules->check()) { vmError('_createOrderCalcRules store shipment rule '.$this->getError()); return false; } // Save the record to the database if (!$orderCalcRules->store()) { vmError('_createOrderCalcRules store shipment rule '.$this->getError()); return false; } } //jExit(); return true; } /** * Update the order history * * @author Oscar van Eijk * @param $_id Order ID * @param $_status New order status (default: P) * @param $_notified 1 (default) if the customer was notified, 0 otherwise * @param $_comment (Customer) comment, default empty */ public function _updateOrderHist($_id, $_status = 'P', $_notified = 0, $_comment = '') { $_orderHist = $this->getTable('order_histories'); $_orderHist->virtuemart_order_id = $_id; $_orderHist->order_status_code = $_status; //$_orderHist->date_added = date('Y-m-d G:i:s', time()); $_orderHist->customer_notified = $_notified; $_orderHist->comments = nl2br($_comment); $_orderHist->store(); } /** * Update the order item history * * @author Oscar van Eijk,kohl patrick * @param $_id Order ID * @param $_status New order status (default: P) * @param $_notified 1 (default) if the customer was notified, 0 otherwise * @param $_comment (Customer) comment, default empty */ private function _updateOrderItemHist($_id, $status = 'P', $notified = 1, $comment = '') { $_orderHist = $this->getTable('order_item_histories'); $_orderHist->virtuemart_order_item_id = $_id; $_orderHist->order_status_code = $status; $_orderHist->customer_notified = $notified; $_orderHist->comments = $comment; $_orderHist->store(); } /** * Generate a unique ordernumber. This is done in a similar way as VM1.1.x, although * the reason for this is unclear to me :-S * * @author Oscar van Eijk * @param integer $uid The user ID. Defaults to 0 for guests * @return string A unique ordernumber */ static public function generateOrderNumber($uid = 0,$length=10, $virtuemart_vendor_id=1) { $db = JFactory::getDBO(); $q = 'SELECT COUNT(1) FROM #__virtuemart_orders WHERE `virtuemart_vendor_id`="'.$virtuemart_vendor_id.'"'; $db->setQuery($q); //We can use that here, because the order_number is free to set, the invoice_number must often follow special rules $count = $db->loadResult(); $count = $count + (int)VM_ORDER_OFFSET; // vmdebug('my db creating ordernumber VM_ORDER_OFFSET '.VM_ORDER_OFFSET.' $count '.$count, $this->_db); // $variable_fixed=sprintf("%06s",$num_rows); $data = substr( md5( session_id().(string)time().(string)$uid ) ,0 ,$length ).'0'.$count; return $data; } /* * returns true if an invoice number has been created * returns false if an invoice number has not been created due to some configuration parameters */ function createInvoiceNumber($orderDetails, &$invoiceNumber){ $orderDetails = (array)$orderDetails; $db = JFactory::getDBO(); if(!isset($orderDetails['virtuemart_order_id'])){ vmWarn('createInvoiceNumber $orderDetails has no virtuemart_order_id ',$orderDetails); vmdebug('createInvoiceNumber $orderDetails has no virtuemart_order_id ',$orderDetails); } $q = 'SELECT * FROM `#__virtuemart_invoices` WHERE `virtuemart_order_id`= "'.$orderDetails['virtuemart_order_id'].'" '; // AND `order_status` = "'.$orderDetails->order_status.'" '; $db->setQuery($q); $result = $db->loadAssoc(); // vmdebug('my createInvoiceNumber $q '.$q,$result); if (!class_exists('ShopFunctions')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'shopfunctions.php'); if(!$result or empty($result['invoice_number']) ){ $data['virtuemart_order_id'] = $orderDetails['virtuemart_order_id']; $data['order_status'] = $orderDetails['order_status']; $data['virtuemart_vendor_id'] = $orderDetails['virtuemart_vendor_id']; JPluginHelper::importPlugin('vmshopper'); JPluginHelper::importPlugin('vmpayment'); $dispatcher = JDispatcher::getInstance(); // plugin returns invoice number, 0 if it does not want an invoice number to be created by Vm $plg_datas = $dispatcher->trigger('plgVmOnUserInvoice',array($orderDetails,&$data)); foreach($plg_datas as $plg_data){ // $data = array_merge($plg_data,$data); } if(!isset($data['invoice_number']) ) { // check the default configuration $orderstatusForInvoice = VmConfig::get('inv_os',array('C')); if(!is_array($orderstatusForInvoice)) $orderstatusForInvoice = array($orderstatusForInvoice); //for backward compatibility 2.0.8e $pdfInvoice = (int)VmConfig::get('pdf_invoice', 0); // backwards compatible $force_create_invoice=JRequest::getInt('create_invoice', 0); // florian : added if pdf invoice are enabled if ( in_array($orderDetails['order_status'],$orderstatusForInvoice) or $pdfInvoice==1 or $force_create_invoice==1 ){ $q = 'SELECT COUNT(1) FROM `#__virtuemart_invoices` WHERE `virtuemart_vendor_id`= "'.$orderDetails['virtuemart_vendor_id'].'" '; // AND `order_status` = "'.$orderDetails->order_status.'" '; $db->setQuery($q); $count = $db->loadResult()+1; if(empty($data['invoice_number'])) { //$variable_fixed=sprintf("%05s",$num_rows); $date = date("Y-m-d"); // $date = JFactory::getDate()->toMySQL(); $data['invoice_number'] = str_replace('-', '', substr($date,2,8)).substr(md5($orderDetails['order_number'].$orderDetails['order_status']),0,3).'0'.$count; } } else { return false; } } $table = $this->getTable('invoices'); $table->bindChecknStore($data); $invoiceNumber= array($table->invoice_number,$table->created_on); } elseif (ShopFunctions::InvoiceNumberReserved($result['invoice_number']) ) { $invoiceNumber = array($result['invoice_number'],$result['created_on']); return true; } else { $invoiceNumber = array($result['invoice_number'],$result['created_on']); } return true; } /* * @author Valérie Isaksen */ function getInvoiceNumber($virtuemart_order_id){ $db = JFactory::getDBO(); $q = 'SELECT `invoice_number` FROM `#__virtuemart_invoices` WHERE `virtuemart_order_id`= "'.$virtuemart_order_id.'" '; $db->setQuery($q); return $db->loadresult(); } /** * Notifies the customer that the Order Status has been changed * * @author RolandD, Christopher Roussel, Valérie Isaksen, Max Milbers * */ private function notifyCustomer($virtuemart_order_id, $newOrderData = 0 ) { // vmdebug('notifyCustomer', $newOrderData); if (isset($newOrderData['customer_notified']) && $newOrderData['customer_notified']==0) { return true; } if(!class_exists('shopFunctionsF')) require(JPATH_VM_SITE.DS.'helpers'.DS.'shopfunctionsf.php'); //Important, the data of the order update mails, payments and invoice should //always be in the database, so using getOrder is the right method $orderModel=VmModel::getModel('orders'); $order = $orderModel->getOrder($virtuemart_order_id); $payment_name = $shipment_name=''; if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); JPluginHelper::importPlugin('vmshipment'); JPluginHelper::importPlugin('vmpayment'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmOnShowOrderFEShipment',array( $order['details']['BT']->virtuemart_order_id, $order['details']['BT']->virtuemart_shipmentmethod_id, &$shipment_name)); $returnValues = $dispatcher->trigger('plgVmOnShowOrderFEPayment',array( $order['details']['BT']->virtuemart_order_id, $order['details']['BT']->virtuemart_paymentmethod_id, &$payment_name)); $order['shipmentName']=$shipment_name; $order['paymentName']=$payment_name; if($newOrderData!=0){ //We do not really need that $vars['newOrderData'] = (array)$newOrderData; } $vars['orderDetails']=$order; //$vars['includeComments'] = JRequest::getVar('customer_notified', array()); //I think this is misleading, I think it should always ask for example $vars['newOrderData']['doVendor'] directly //Using this function garantue us that it is always there. If the vendor should be informed should be done by the plugins //We may add later something to the method, defining this better $vars['url'] = 'url'; if(!isset($newOrderData['doVendor'])) $vars['doVendor'] = false; else $vars['doVendor'] = $newOrderData['doVendor']; $virtuemart_vendor_id=1; $vendorModel = VmModel::getModel('vendor'); $vendor = $vendorModel->getVendor($virtuemart_vendor_id); $vars['vendor'] = $vendor; $vendorEmail = $vendorModel->getVendorEmail($virtuemart_vendor_id); $vars['vendorEmail'] = $vendorEmail; /* $path = VmConfig::get('forSale_path',0); $orderstatusForInvoice = VmConfig::get('inv_os','C'); $pdfInvoice = VmConfig::get('pdf_invoice', 1); // backwards compatible */ // florian : added if pdf invoice are enabled //if ($this->getInvoiceNumber( $order['details']['BT']->virtuemart_order_id ) ){ $invoiceNumberDate = array(); if ($orderModel->createInvoiceNumber($order['details']['BT'], $invoiceNumberDate )) { $orderstatusForInvoice = VmConfig::get('inv_os',array('C')); if(!is_array($orderstatusForInvoice)) $orderstatusForInvoice = array($orderstatusForInvoice); // for backward compatibility 2.0.8e $pdfInvoice = (int)VmConfig::get('pdf_invoice', 0); // backwards compatible $force_create_invoice=JRequest::getInt('create_invoice', 0); //TODO we need an array of orderstatus if ( (in_array($order['details']['BT']->order_status,$orderstatusForInvoice)) or $pdfInvoice==1 or $force_create_invoice==1 ){ if (!shopFunctions::InvoiceNumberReserved($invoiceNumberDate[0])) { if(!class_exists('VirtueMartControllerInvoice')) require( JPATH_VM_SITE.DS.'controllers'.DS.'invoice.php' ); $controller = new VirtueMartControllerInvoice( array( 'model_path' => JPATH_VM_SITE.DS.'models', 'view_path' => JPATH_VM_SITE.DS.'views' )); $vars['mediaToSend'][] = $controller->getInvoicePDF($order); } } } // Send the email $res = shopFunctionsF::renderMail('invoice', $order['details']['BT']->email, $vars, null,$vars['doVendor'],$this->useDefaultEmailOrderStatus); if(is_object($res) or !$res){ $string = 'COM_VIRTUEMART_NOTIFY_CUSTOMER_ERR_SEND'; vmdebug('notifyCustomer function shopFunctionsF::renderMail throws JException'); $res = 0; } //We need this, to prevent that a false alert is thrown. else if ($res and $res!=-1) { $string = 'COM_VIRTUEMART_NOTIFY_CUSTOMER_SEND_MSG'; } if($res!=-1){ vmInfo( JText::_($string,false).' '.$order['details']['BT']->first_name.' '.$order['details']['BT']->last_name. ', '.$order['details']['BT']->email); } return true; } /** * Retrieve the details for an order line item. * * @author RickG * @param string $orderId Order id number * @param string $orderLineId Order line item number * @return object Object containing the order item details. */ function getOrderLineDetails($orderId, $orderLineId) { $table = $this->getTable('order_items'); if ($table->load((int)$orderLineId)) { return $table; } else { $table->reset(); $table->virtuemart_order_id = $orderId; return $table; } } /** * Save an order line item. * * @author RickG * @return boolean True of remove was successful, false otherwise */ function saveOrderLineItem($data) { $table = $this->getTable('order_items'); //Done in the table already /* $curDate = JFactory::getDate(); $data['modified_on'] = $curDate->toMySql();*/ if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); JPluginHelper::importPlugin('vmshipment'); $_dispatcher = JDispatcher::getInstance(); $_returnValues = $_dispatcher->trigger('plgVmOnUpdateOrderLineShipment',array( $data)); foreach ($_returnValues as $_retVal) { if ($_retVal === false) { // Stop as soon as the first active plugin returned a failure status return; } } if (!class_exists('vmPSPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'); JPluginHelper::importPlugin('vmpayment'); $_returnValues = $_dispatcher->trigger('plgVmOnUpdateOrderLinePayment',array( $data)); foreach ($_returnValues as $_retVal) { if ($_retVal === false) { // Stop as soon as the first active plugin returned a failure status return; } } $table->bindChecknStore($data); return true; // return true; } /* *remove product from order item table *@var $virtuemart_order_id Order to clear */ function removeOrderItems ($virtuemart_order_id){ $q ='DELETE from `#__virtuemart_order_items` WHERE `virtuemart_order_id` = ' .(int) $virtuemart_order_id; $this->_db->setQuery($q); if ($this->_db->query() === false) { vmError($this->_db->getError()); return false; } return true; } /** * Remove an order line item. * * @author RickG * @param string $orderLineId Order line item number * @return boolean True of remove was successful, false otherwise */ function removeOrderLineItem($orderLineId) { $item = $this->getTable('order_items'); if (!$item->load($orderLineId)) { vmError($item->getError()); return false; } //TODO Why should the stock change, when the order is deleted? Paypal? Valerie? // $this->handleStockAfterStatusChangedPerProduct('C', $item->order_status,$item, $item->product_quantity); if ($item->delete($orderLineId)) { return true; } else { vmError($item->getError()); return false; } } /** * Delete all record ids selected * * @author Max Milbers * @author Patrick Kohl * @return boolean True is the delete was successful, false otherwise. */ public function remove($ids) { $table = $this->getTable($this->_maintablename); foreach($ids as $id) { // remove order_item and update stock $q = "SELECT `virtuemart_order_item_id` FROM `#__virtuemart_order_items` WHERE `virtuemart_order_id`=".$id; $this->_db->setQuery($q); $item_ids = $this->_db->loadResultArray(); foreach( $item_ids as $item_id ) { $this->removeOrderLineItem($item_id); } // rename invoice number by adding the date, and update the invoice table $this->renameInvoice($id ); if (!$table->delete((int)$id)) { vmError(get_class( $this ).'::remove '.$id.' '.$table->getError()); return false; } } return true; } /** Update order head record * * @author Ondřej Spilka * @author Maik Künnemann * @return boolean True is the update was successful, otherwise false. */ public function UpdateOrderHead($virtuemart_order_id, $_orderData) { $orderTable = $this->getTable('orders'); $orderTable->load($virtuemart_order_id); if (!$orderTable->bindChecknStore($_orderData, true)){ vmError($orderTable->getError()); return false; } $_userInfoData = array(); if(!class_exists('VirtueMartModelUserfields')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'userfields.php'); $_userFieldsModel = VmModel::getModel('userfields'); //bill to $_userFieldsBT = $_userFieldsModel->getUserFields('account' , array('delimiters'=>true, 'captcha'=>true) , array('username', 'password', 'password2', 'user_is_vendor') ); foreach ($_userFieldsBT as $_fld) { $_name = $_fld->name; if(isset( $_orderData["BT_{$_name}"])){ $_userInfoData[$_name] = $_orderData["BT_{$_name}"]; } } $_userInfoData['virtuemart_order_id'] = $virtuemart_order_id; $_userInfoData['address_type'] = 'BT'; $order_userinfosTable = $this->getTable('order_userinfos'); $order_userinfosTable->load($virtuemart_order_id, 'virtuemart_order_id'," AND address_type='BT'"); if (!$order_userinfosTable->bindChecknStore($_userInfoData, true)){ vmError($order_userinfosTable->getError()); return false; } //ship to $_userFieldsST = $_userFieldsModel->getUserFields('account' , array('delimiters'=>true, 'captcha'=>true) , array('username', 'password', 'password2', 'user_is_vendor') ); $_userInfoData = array(); foreach ($_userFieldsST as $_fld) { $_name = $_fld->name; if(isset( $_orderData["ST_{$_name}"])){ $_userInfoData[$_name] = $_orderData["ST_{$_name}"]; } } $_userInfoData['virtuemart_order_id'] = $virtuemart_order_id; $_userInfoData['address_type'] = 'ST'; $order_userinfosTable = $this->getTable('order_userinfos'); $order_userinfosTable->load($virtuemart_order_id, 'virtuemart_order_id'," AND address_type='ST'"); if (!$order_userinfosTable->bindChecknStore($_userInfoData, true)){ vmError($order_userinfosTable->getError()); return false; } $orderModel = VmModel::getModel('orders'); $order = $orderModel->getOrder($virtuemart_order_id); $dispatcher = JDispatcher::getInstance(); if (!class_exists ('CurrencyDisplay')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php'); } // Update Payment Method if($_orderData['old_virtuemart_paymentmethod_id'] != $_orderData['virtuemart_paymentmethod_id']) { $this->_db->setQuery( 'SELECT `payment_element` FROM `#__virtuemart_paymentmethods` , `#__virtuemart_orders` WHERE `#__virtuemart_paymentmethods`.`virtuemart_paymentmethod_id` = `#__virtuemart_orders`.`virtuemart_paymentmethod_id` AND `virtuemart_order_id` = ' . $virtuemart_order_id ); $paymentTable = '#__virtuemart_payment_plg_'. $this->_db->loadResult(); $this->_db->setQuery("DELETE from `". $paymentTable ."` WHERE `virtuemart_order_id` = " . $virtuemart_order_id); if ($this->_db->query() === false) { vmError($this->_db->getError()); return false; } else { JPluginHelper::importPlugin('vmpayment'); } } // Update Shipment Method if($_orderData['old_virtuemart_shipmentmethod_id'] != $_orderData['virtuemart_shipmentmethod_id']) { $this->_db->setQuery( 'SELECT `shipment_element` FROM `#__virtuemart_shipmentmethods` , `#__virtuemart_orders` WHERE `#__virtuemart_shipmentmethods`.`virtuemart_shipmentmethod_id` = `#__virtuemart_orders`.`virtuemart_shipmentmethod_id` AND `virtuemart_order_id` = ' . $virtuemart_order_id ); $shipmentTable = '#__virtuemart_shipment_plg_'. $this->_db->loadResult(); $this->_db->setQuery("DELETE from `". $shipmentTable ."` WHERE `virtuemart_order_id` = " . $virtuemart_order_id); if ($this->_db->query() === false) { vmError($this->_db->getError()); return false; } else { JPluginHelper::importPlugin('vmshipment'); } } // JPluginHelper::importPlugin('vmshipment'); // JPluginHelper::importPlugin('vmcustom'); if (!class_exists('VirtueMartCart')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'cart.php'); $cart = VirtueMartCart::getCart(); $cart->virtuemart_paymentmethod_id = $_orderData['virtuemart_paymentmethod_id']; $cart->virtuemart_shipmentmethod_id = $_orderData['virtuemart_shipmentmethod_id']; $order['order_status'] = $order['details']['BT']->order_status; $order['customer_notified'] = 0; $order['comments'] = ''; $returnValues = $dispatcher->trigger('plgVmConfirmedOrder', array($cart, $order)); return true; } /** Create empty order head record from admin only * * @author Ondřej Spilka * @return ID of the newly created order */ public function CreateOrderHead() { // TODO // multivendor //usrid $usrid = 0; $_orderData = new stdClass(); $_orderData->virtuemart_order_id = null; $_orderData->virtuemart_user_id = 0; $_orderData->virtuemart_vendor_id = 1; //TODO $_orderData->order_total = 0; $_orderData->order_salesPrice = 0; $_orderData->order_billTaxAmount = 0; $_orderData->order_billDiscountAmount = 0; $_orderData->order_discountAmount = 0; $_orderData->order_subtotal = 0; $_orderData->order_tax = 0; $_orderData->order_shipment = 0; $_orderData->order_shipment_tax = 0; $_orderData->order_payment = 0; $_orderData->order_payment_tax = 0; $_orderData->order_discount = 0; $_orderData->order_status = 'P'; $_orderData->order_currency = $this->getVendorCurrencyId($_orderData->virtuemart_vendor_id); $_orderData->virtuemart_paymentmethod_id = JRequest::getInt('virtuemart_paymentmethod_id'); $_orderData->virtuemart_shipmentmethod_id = JRequest::getInt('virtuemart_shipmentmethod_id'); $_orderData->customer_note = ''; $_orderData->ip_address = $_SERVER['REMOTE_ADDR']; $_orderData->order_number =''; JPluginHelper::importPlugin('vmshopper'); $dispatcher = JDispatcher::getInstance(); $_orderData->order_number = $this->generateOrderNumber($usrid,4,$_orderData->virtuemart_vendor_id); $_orderData->order_pass = 'p_'.substr( md5((string)time().rand(1,1000).$_orderData->order_number ), 0, 5); $orderTable = $this->getTable('orders'); $orderTable -> bindChecknStore($_orderData); $errors = $orderTable->getErrors(); foreach($errors as $error){ vmError($error); } $db = JFactory::getDBO(); $_orderID = $db->insertid(); $_usr = JFactory::getUser(); if (!$this->_writeUserInfo($_orderID, $_usr, array())) { vmError($error); } $orderModel = VmModel::getModel('orders'); $order= $orderModel->getOrder($_orderID); $dispatcher = JDispatcher::getInstance(); JPluginHelper::importPlugin('vmcustom'); JPluginHelper::importPlugin('vmshipment'); JPluginHelper::importPlugin('vmpayment'); if (!class_exists('VirtueMartCart')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'cart.php'); $cart = VirtueMartCart::getCart(); $returnValues = $dispatcher->trigger('plgVmConfirmedOrder', array($cart, $order)); return $_orderID; } /** Rename Invoice (when an order is deleted) * * @author Valérie Isaksen * @param $order_id Id of the order * @return boolean true if deleted successful, false if there was a problem */ function renameInvoice($order_id ) { $db = JFactory::getDBO(); $q = 'SELECT * FROM `#__virtuemart_invoices` WHERE `virtuemart_order_id`= "'.$order_id.'" '; $db->setQuery($q); $data = $db->loadAssoc(); if(!$data or empty($data['invoice_number']) ){ return true; } // rename invoice pdf file $invoice_prefix='vminvoice_'; $path = shopFunctions::getInvoicePath(VmConfig::get('forSale_path',0)); $invoice_name_src = $path.DS.$invoice_prefix.$data['invoice_number'].'.pdf'; if(!file_exists($invoice_name_src)){ // may be it was already deleted when changing order items $data['invoice_number'] = $data['invoice_number'].' not found.'; } else { $date = date("Ymd"); $data['invoice_number'] = $data['invoice_number'].'_'.$date; $invoice_name_dst = $path.DS.$data['invoice_number'].'.pdf'; if(!class_exists('JFile')) require(JPATH_VM_LIBRARIES.DS.'joomla'.DS.'filesystem'.DS.'file.php'); if (!JFile::move($invoice_name_src, $invoice_name_dst)) { vmError ('Could not rename Invoice '.$invoice_name_src.'to '. $invoice_name_dst ); } } $table = $this->getTable('invoices'); $table->bindChecknStore($data); return true; } /** Delete Invoice when an item is updated * * @author Valérie Isaksen * @param $order_id Id of the order * @return boolean true if deleted successful, false if there was a problem */ function deleteInvoice($order_id ) { $db = JFactory::getDBO(); $q = 'SELECT * FROM `#__virtuemart_invoices` WHERE `virtuemart_order_id`= "'.$order_id.'" '; $db->setQuery($q); $data = $db->loadAssoc(); if(!$data or empty($data['invoice_number']) ){ return true; } // rename invoice pdf file $invoice_prefix='vminvoice_'; $path = shopFunctions::getInvoicePath(VmConfig::get('forSale_path',0)); $invoice_name_src = $path.DS.$invoice_prefix.$data['invoice_number'].'.pdf'; if(!file_exists($invoice_name_src)){ // was already deleted by a previoous change return; } if(!class_exists('JFile')) require(JPATH_VM_LIBRARIES.DS.'joomla'.DS.'filesystem'.DS.'file.php'); if (!JFile::delete($invoice_name_src )) { vmError ('Could not delete Invoice '.$invoice_name_src ); } } } // No closing tag models/fields/vendor.php000066600000003624151374526160011326 0ustar00element['key_field'] ? $this->element['key_field'] : 'value'); $val = ($this->element['value_field'] ? $this->element['value_field'] : $this->name); $model = VmModel::getModel('vendor'); $vendors = $model->getVendors(true, true, false); return JHTML::_('select.genericlist', $vendors, $this->name, 'class="inputbox" size="1"', 'virtuemart_vendor_id', 'vendor_name', $this->value, $this->id); } }models/fields/product.php000066600000003441151374526160011506 0ustar00element['key_field'] ? $this->element['key_field'] : 'value'); $val = ($this->element['value_field'] ? $this->element['value_field'] : $this->name); return JHTML::_('select.genericlist', $this->_getProducts(), $this->name, 'class="inputbox" ', 'value', 'text', $this->value, $this->id); } private function _getProducts() { if (!class_exists('VmModel')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'vmmodel.php'); $productModel = VmModel::getModel('Product'); $productModel->_noLimit = true; $products = $productModel->getProductListing(false, false, false, false, true,false); $productModel->_noLimit = false; $i = 0; $list = array(); foreach ($products as $product) { $list[$i]['value'] = $product->virtuemart_product_id; $list[$i]['text'] = $product->product_name. " (". $product->product_sku.")"; $i++; } return $list; } }models/fields/layout.php000066600000003450151374526160011343 0ustar00fieldname,0,-6);; $vmLayoutList =VirtueMartModelConfig::getLayoutList($view); $html = JHTML::_('Select.genericlist',$vmLayoutList, $this->name, 'size=1 width=200', 'value', 'text', array($this->value)); return $html; } }models/fields/manufacturer.php000066600000003267151374526160012530 0ustar00element['key_field'] ? $this->element['key_field'] : 'value'); $val = ($this->element['value_field'] ? $this->element['value_field'] : $this->name); $model = VmModel::getModel('Manufacturer'); $manufacturers = $model->getManufacturers(true, true, false); return JHTML::_('select.genericlist', $manufacturers, $this->name, 'class="inputbox" size="1"', 'virtuemart_manufacturer_id', 'mf_name', $this->value, $this->id); } }models/fields/.htaccess000066600000000177151374526160011116 0ustar00 Order allow,deny Deny from all models/fields/index.html000066600000000037151374526160011310 0ustar00 models/fields/category.php000066600000003606151374526160011646 0ustar00element['key_field'] ? $this->element['key_field'] : 'value'); $val = ($this->element['value_field'] ? $this->element['value_field'] : $this->name); VmConfig::loadJLang('com_virtuemart'); $categorylist = ShopFunctions::categoryListTree(array($this->value)); $html = '"; return $html; } }models/fields/orderstatus.php000066600000003364151374526160012411 0ustar00element['key_field'] ? $this->element['key_field'] : 'value'); $val = ($this->element['value_field'] ? $this->element['value_field'] : $this->name); $model = VmModel::getModel ('Orderstatus'); $orderStatus = $model->getOrderStatusList (); foreach ($orderStatus as $orderState) { $orderState->order_status_name = JText::_ ($orderState->order_status_name); } return JHTML::_ ('select.genericlist', $orderStatus, $this->name, 'class="inputbox" multiple="true" size="1"', 'order_status_code', 'order_status_name', $this->value, $this->id); } }models/customfields.php000066600000155551151374526160011273 0ustar00setMainTable ('product_customfields'); } /** * Gets a single custom by virtuemart_customfield_id * * @param string $type * @param string $mime mime type of custom, use for exampel image * @return customobject */ function getCustomfield () { $this->data = $this->getTable ('product_customfields'); $this->data->load ($this->_id); return $this; } // ************************************************** // Custom FIELDS // function getProductCustomsChilds ($childs) { $data = array(); foreach ($childs as $child) { $query = 'SELECT C.* , field.* FROM `#__virtuemart_product_customfields` AS field LEFT JOIN `#__virtuemart_customs` AS C ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id` WHERE `virtuemart_product_id` =' . (int)$child->virtuemart_product_id; $query .= ' and C.field_type = "C" '; $this->_db->setQuery ($query); $child->field = $this->_db->loadObject (); $customfield = new stdClass(); $customfield->custom_value = $child->virtuemart_product_id; $customfield->field_type = 'C'; $child->display = $this->displayProductCustomfieldFE ($child, $customfield); if ($child->field) { $data[] = $child; } } return $data; } public function getCustomParentTitle ($custom_parent_id) { $q = 'SELECT custom_title FROM `#__virtuemart_customs` WHERE virtuemart_custom_id =' . (int)$custom_parent_id; $this->_db->setQuery ($q); return $this->_db->loadResult (); } /** @return autorized Types of data **/ function getField_types () { return array('S' => 'COM_VIRTUEMART_CUSTOM_STRING', 'I' => 'COM_VIRTUEMART_CUSTOM_INT', 'P' => 'COM_VIRTUEMART_CUSTOM_PARENT', 'B' => 'COM_VIRTUEMART_CUSTOM_BOOL', 'D' => 'COM_VIRTUEMART_DATE', 'T' => 'COM_VIRTUEMART_TIME', 'M' => 'COM_VIRTUEMART_IMAGE', 'V' => 'COM_VIRTUEMART_CUSTOM_CART_VARIANT', 'A' => 'COM_VIRTUEMART_CHILD_GENERIC_VARIANT', 'X' => 'COM_VIRTUEMART_CUSTOM_EDITOR', 'Y' => 'COM_VIRTUEMART_CUSTOM_TEXTAREA', 'E' => 'COM_VIRTUEMART_CUSTOM_EXTENSION' ); // 'U'=>'COM_VIRTUEMART_CUSTOM_CART_USER_VARIANT', // 'C'=>'COM_VIRTUEMART_CUSTOM_PRODUCT_CHILD', // 'G'=>'COM_VIRTUEMART_CUSTOM_PRODUCT_CHILD_GROUP', // 'R'=>'COM_VIRTUEMART_RELATED_PRODUCT', // 'Z'=>'COM_VIRTUEMART_RELATED_CATEGORY', } static function setParameterableByFieldType(&$table,$type=0){ if($type===0) $type = $table->field_type; $varsToPush = self::getVarsToPush($type); if(!empty($varsToPush)){ $table->setParameterable('custom_param',$varsToPush,TRUE); } } static function bindParameterableByFieldType(&$table,$type=0){ if($type===0) $type = $table->field_type; $varsToPush = self::getVarsToPush($type); if(!empty($varsToPush)){ VmTable::bindParameterable($table,'custom_param',$varsToPush); } } static function getVarsToPush($type){ $varsToPush = 0; if($type=='A'){ $varsToPush = array( 'withParent' => array(0, 'int'), 'parentOrderable' => array(0, 'int') ); } return $varsToPush; } private $_hidden = array(); /** * Use this to adjust the hidden fields of the displaycustomHandler to your form * * @author Max Milbers * @param string $name for exampel view * @param string $value for exampel custom */ public function addHidden ($name, $value = '') { $this->_hidden[$name] = $value; } /** * Adds the hidden fields which are needed for the form in every case * * @author Max Milbers * OBSELTE ? */ private function addHiddenByType ($datas) { $this->addHidden ('virtuemart_custom_id', $datas->virtuemart_custom_id); $this->addHidden ('option', 'com_virtuemart'); } /** * Displays a possibility to select custom groups * * @author Max Milbers * @author Maik K�nnemann * @author Patrick Kohl */ public function displayCustomSelection () { $customslist = $this->getParentList (); if (isset($this->virtuemart_custom_id)) { $value = $this->virtuemart_custom_id; } else { $value = JRequest::getInt ('custom_parent_id', 0); } return VmHTML::row ('select', 'COM_VIRTUEMART_CUSTOM_PARENT', 'custom_parent_id', $customslist, $value); } /** * Retrieve a list of layouts from the default and chosen templates directory. * * We may use here the getCustoms function of the custom model or write something simular * * @author Max Milbers * @param name of the view * @return object List of flypage objects */ function getCustomsList ($publishedOnly = FALSE) { $vendorId = 1; // get custom parents $q = 'SELECT virtuemart_custom_id as value ,custom_title as text FROM `#__virtuemart_customs` where custom_parent_id=0 AND field_type <> "R" AND field_type <> "Z" '; if ($publishedOnly) { $q .= 'AND `published`=1'; } if ($ID = JRequest::getInt ('virtuemart_custom_id', 0)) { $q .= ' and `virtuemart_custom_id`!=' . (int)$ID; } //if (isset($this->virtuemart_custom_id)) $q.=' and virtuemart_custom_id !='.$this->virtuemart_custom_id; $this->_db->setQuery ($q); // $result = $this->_db->loadAssocList(); $result = $this->_db->loadObjectList (); $errMsg = $this->_db->getErrorMsg (); $errs = $this->_db->getErrors (); if (!empty($errMsg)) { $app = JFactory::getApplication (); $errNum = $this->_db->getErrorNum (); $app->enqueueMessage ('SQL-Error: ' . $errNum . ' ' . $errMsg); } if ($errs) { $app = JFactory::getApplication (); foreach ($errs as $err) { $app->enqueueMessage ($err); } } return $result; } /** * This displays a custom handler. * * @param string $html atttributes, Just for displaying the fullsized image */ public function displayCustomFields ($datas) { $identify = ''; // ':'.$this->virtuemart_custom_id; if (!class_exists ('VmHTML')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'html.php'); } if ($datas->field_type) { $this->addHidden ('field_type', $datas->field_type); } $this->addHiddenByType ($datas); //$html = '
        '.$datas->custom_title.'
        '; $html = ""; //$html = ' '; if (!class_exists ('Permissions')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); } if (!Permissions::getInstance ()->check ('admin')) { $readonly = 'readonly'; } else { $readonly = ''; } // only input when not set else display if ($datas->field_type) { $html .= VmHTML::row ('value', 'COM_VIRTUEMART_CUSTOM_FIELD_TYPE', $datas->field_types[$datas->field_type]); } else { $html .= VmHTML::row ('select', 'COM_VIRTUEMART_CUSTOM_FIELD_TYPE', 'field_type', $this->getOptions ($datas->field_types), $datas->field_type, VmHTML::validate ('R')); } $html .= VmHTML::row ('input', 'COM_VIRTUEMART_TITLE', 'custom_title', $datas->custom_title, VmHTML::validate ('S')); $html .= VmHTML::row ('booleanlist', 'COM_VIRTUEMART_SHOW_TITLE', 'show_title', $datas->show_title); $html .= VmHTML::row ('booleanlist', 'COM_VIRTUEMART_PUBLISHED', 'published', $datas->published); $html .= VmHTML::row ('select', 'COM_VIRTUEMART_CUSTOM_PARENT', 'custom_parent_id', $this->getParentList ($datas->virtuemart_custom_id), $datas->custom_parent_id, ''); $html .= VmHTML::row ('booleanlist', 'COM_VIRTUEMART_CUSTOM_IS_CART_ATTRIBUTE', 'is_cart_attribute', $datas->is_cart_attribute); $html .= VmHTML::row ('input', 'COM_VIRTUEMART_DESCRIPTION', 'custom_field_desc', $datas->custom_field_desc); // change input by type $html .= VmHTML::row ('input', 'COM_VIRTUEMART_DEFAULT', 'custom_value', $datas->custom_value); $html .= VmHTML::row ('input', 'COM_VIRTUEMART_CUSTOM_TIP', 'custom_tip', $datas->custom_tip); $html .= VmHTML::row ('input', 'COM_VIRTUEMART_CUSTOM_LAYOUT_POS', 'layout_pos', $datas->layout_pos); //$html .= VmHTML::row('booleanlist','COM_VIRTUEMART_CUSTOM_PARENT','custom_parent_id',$this->getCustomsList(), $datas->custom_parent_id,''); $html .= VmHTML::row ('booleanlist', 'COM_VIRTUEMART_CUSTOM_ADMIN_ONLY', 'admin_only', $datas->admin_only); $html .= VmHTML::row ('booleanlist', 'COM_VIRTUEMART_CUSTOM_IS_LIST', 'is_list', $datas->is_list); $html .= VmHTML::row ('booleanlist', 'COM_VIRTUEMART_CUSTOM_IS_HIDDEN', 'is_hidden', $datas->is_hidden); // $html .= '
        '; removed $html .= VmHTML::inputHidden ($this->_hidden); return $html; } /** * child classes can add their own options and you can get them with this function * * @param array $optionsarray */ private function getOptions ($field_types) { $options = array(); foreach ($field_types as $optionName=> $langkey) { $options[] = JHTML::_ ('select.option', $optionName, vmText::_ ($langkey)); } return $options; } /** * Just for creating simpel rows * * @author Max Milbers * @param string $descr * @param string $name */ private function displayRow ($descr, $name, $readonly = '') { $html = ' ' . vmText::_ ($descr) . ' '; return $html; } /** * * Enter description here ... * * @param unknown_type $excludedId * @return unknown|multitype: */ function getParentList ($excludedId = 0) { $this->_db->setQuery (' SELECT virtuemart_custom_id as value,custom_title as text FROM `#__virtuemart_customs` WHERE `field_type` ="P" and virtuemart_custom_id!=' . $excludedId); if ($results = $this->_db->loadObjectList ()) { return $results; } else { return array(); } } /** * * Enter description here ... */ function getProductChildCustomRelation () { $this->_db->setQuery (' SELECT virtuemart_custom_id as value,custom_title as text FROM `#__virtuemart_customs` WHERE `field_type` ="C"'); if ($results = $this->_db->loadObjectList ()) { return $results; } else { return array(); } } /** * * Enter description here ... * * @param unknown_type $product_id * @return unknown */ function getProductChildCustom ($product_id) { $this->_db->setQuery (' SELECT `virtuemart_custom_id`,`custom_value` FROM `#__virtuemart_product_customfields` WHERE `virtuemart_product_id` =' . (int)$product_id); if ($childcustom = $this->_db->loadObject ()) { return $childcustom; } else { $childcustom->virtuemart_custom_id = 0; $childcustom->custom_value = ''; return $childcustom; } } /** * * Enter description here ... * * @param unknown_type $product_id * @return string|Ambigous */ function getProductParentRelation ($product_id) { $this->_db->setQuery (' SELECT `custom_value` FROM `#__virtuemart_product_customfields` WHERE `virtuemart_product_id` =' . (int)$product_id); if ($childcustom = $this->_db->loadResult ()) { return '(' . $childcustom . ')'; } else { return vmText::_ ('COM_VIRTUEMART_CUSTOM_NO_PARENT_RELATION'); } } /** * AUthor Kohl Patrick * Load all custom fields for a Single product * return custom fields value and definition */ public function getproductCustomslist ($virtuemart_product_id, $parent_id = NULL) { $query = 'SELECT C.`virtuemart_custom_id` , `custom_element`, `custom_jplugin_id`, `custom_params`, `custom_parent_id` , `admin_only` , `custom_title` , `show_title` , `custom_tip` , C.`custom_value` AS value, `custom_field_desc` , `field_type` , `is_list` , `is_cart_attribute` , `is_hidden` , C.`published` , field.`virtuemart_customfield_id` , field.`custom_value`,field.`custom_param`,field.`custom_price`,field.`ordering` FROM `#__virtuemart_customs` AS C LEFT JOIN `#__virtuemart_product_customfields` AS field ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id` Where `virtuemart_product_id` =' . $virtuemart_product_id . ' order by field.`ordering` ASC'; $this->_db->setQuery ($query); $productCustoms = $this->_db->loadObjectList (); //if (!$productCustoms ) return array(); if (!$productCustoms) { return; } $row = 0; foreach ($productCustoms as $field) { if ($parent_id) { $field->custom_value = ""; $field->virtuemart_customfield_id = ""; $field->custom_param = NULL; $virtuemart_product_id = $parent_id; } if ($field->field_type == 'E') { JPluginHelper::importPlugin ('vmcustom'); $dispatcher = JDispatcher::getInstance (); $retValue = $dispatcher->trigger ('plgVmDeclarePluginParams', array('custom', $field->custom_element, $field->custom_jplugin_id, $field)); }else { VirtueMartModelCustomfields::bindParameterableByFieldType($field); } //vmdebug('fields',$field); $field->display = $this->displayProductCustomfieldBE ($field, $virtuemart_product_id, $row); //custom_param without S !!! $row++; } return $productCustoms; } /* Save and delete from database * all product custom_fields and xref @ var $table : the xref table(eg. product,category ...) @array $data : array of customfields @int $id : The concerned id (eg. product_id) */ public function storeProductCustomfields($table,$datas, $id) { //vmdebug('storeProductCustomfields',$datas); JRequest::checkToken() or jexit( 'Invalid Token, in store customfields'); //Sanitize id $id = (int)$id; //Table whitelist $tableWhiteList = array('product','category','manufacturer'); if(!in_array($table,$tableWhiteList)) return false; // Get old IDS $this->_db->setQuery( 'SELECT `virtuemart_customfield_id` FROM `#__virtuemart_'.$table.'_customfields` as `PC` WHERE `PC`.virtuemart_'.$table.'_id ='.$id ); $old_customfield_ids = $this->_db->loadResultArray(); if (isset ( $datas['custom_param'] )) $params = true ; else $params = false ; if (array_key_exists('field', $datas)) { //vmdebug('datas save',$datas); $customfieldIds = array(); foreach($datas['field'] as $key => $fields){ $fields['virtuemart_'.$table.'_id'] =$id; $tableCustomfields = $this->getTable($table.'_customfields'); $tableCustomfields->setPrimaryKey('virtuemart_product_id'); if (!empty($datas['custom_param'][$key]) and !isset($datas['clone']) ) { if (array_key_exists( $key,$datas['custom_param'])) { $fields['custom_param'] = json_encode($datas['custom_param'][$key]); } } VirtueMartModelCustomfields::setParameterableByFieldType($tableCustomfields,$fields['field_type']); if(!isset($datas['clone'])){ VirtueMartModelCustomfields::bindParameterableByFieldType($tableCustomfields,$fields['field_type']); } $tableCustomfields->bindChecknStore($fields); $errors = $tableCustomfields->getErrors(); foreach($errors as $error){ vmError($error); } $key = array_search($fields['virtuemart_customfield_id'], $old_customfield_ids ); if ($key !== false ) unset( $old_customfield_ids[ $key ] ); // vmdebug('datas clone',$old_customfield_ids,$fields); } } if ( count($old_customfield_ids) ) { // delete old unused Customfields $this->_db->setQuery( 'DELETE FROM `#__virtuemart_'.$table.'_customfields` WHERE `virtuemart_customfield_id` in ("'.implode('","', $old_customfield_ids ).'") '); $this->_db->query(); } JPluginHelper::importPlugin('vmcustom'); $dispatcher = JDispatcher::getInstance(); if (isset($datas['plugin_param']) and is_array($datas['plugin_param'])) { foreach ($datas['plugin_param'] as $key => $plugin_param ) { $dispatcher->trigger('plgVmOnStoreProduct', array($datas, $plugin_param )); } } } /** * Formatting admin display by roles * input Types for product only ! * $field->is_cart_attribute if can have a price */ public function displayProductCustomfieldBE ($field, $product_id, $row) { $field->custom_value = empty($field->custom_value) ? $field->value : $field->custom_value; if ($field->is_cart_attribute) { if(!class_exists('VirtueMartModelVendor')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'vendor.php'); if(!class_exists('VirtueMartModelCurrency')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'currency.php'); $vendor_model = VmModel::getModel('vendor'); $vendor_model->setId(1); $vendor = $vendor_model->getVendor(); $currency_model = VmModel::getModel('currency'); $vendor_currency = $currency_model->getCurrency($vendor->vendor_currency); $priceInput = ' '.$vendor_currency->currency_symbol.""; } else { $priceInput = ' '; } if ($field->is_list) { $options = array(); $values = explode (';', $field->value); foreach ($values as $key => $val) { $options[] = array('value' => $val, 'text' => $val); } $currentValue = $field->custom_value; return JHTML::_ ('select.genericlist', $options, 'field[' . $row . '][custom_value]', null, 'value', 'text', $currentValue) . '' . $priceInput; } else { switch ($field->field_type) { case 'A': //vmdebug('displayProductCustomfieldBE $field',$field); if(!isset($field->withParent)) $field->withParent = 0; if(!isset($field->parentOrderable)) $field->parentOrderable = 0; //vmdebug('displayProductCustomfieldFE',$field); if (!class_exists('VmHTML')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'html.php'); $html = vmText::_('COM_VIRTUEMART_CUSTOM_WP').VmHTML::checkbox('field[' . $row . '][withParent]',$field->withParent,1,0,'').'
        '; $html .= vmText::_('COM_VIRTUEMART_CUSTOM_PO').VmHTML::checkbox('field[' . $row . '][parentOrderable]',$field->parentOrderable,1,0,''); $options = array(); // $options[] = array( 'value' => 'product_name' ,'text' =>vmText::_('COM_VIRTUEMART_PRODUCT_FORM_NAME')); Is anyway displayed there $options[] = array('value' => 'product_sku', 'text' => vmText::_ ('COM_VIRTUEMART_PRODUCT_SKU')); $options[] = array('value' => 'slug', 'text' => vmText::_ ('COM_VIRTUEMART_PRODUCT_ALIAS')); $options[] = array('value' => 'product_length', 'text' => vmText::_ ('COM_VIRTUEMART_PRODUCT_LENGTH')); $options[] = array('value' => 'product_width', 'text' => vmText::_ ('COM_VIRTUEMART_PRODUCT_WIDTH')); $options[] = array('value' => 'product_height', 'text' => vmText::_ ('COM_VIRTUEMART_PRODUCT_HEIGHT')); $options[] = array('value' => 'product_weight', 'text' => vmText::_ ('COM_VIRTUEMART_PRODUCT_WEIGHT')); $html .= JHTML::_ ('select.genericlist', $options, 'field[' . $row . '][custom_value]', '', 'value', 'text', $field->custom_value) . '' . $priceInput; return $html; // return 'Automatic Childvariant creation (later you can choose here attributes to show, now product name) '; break; // variants case 'V': return '' . $priceInput; break; /* * Stockable (group of) child variants * Special type setted by the plugin */ case 'G': return; break; /*Extended by plugin*/ case 'E': $html = ''; if (!class_exists ('vmCustomPlugin')) { require(JPATH_VM_PLUGINS . DS . 'vmcustomplugin.php'); } JPluginHelper::importPlugin ('vmcustom', $field->custom_element); $dispatcher = JDispatcher::getInstance (); $retValue = ''; $dispatcher->trigger ('plgVmOnProductEdit', array($field, $product_id, &$row, &$retValue)); return $html . $retValue . ''. $priceInput; break; case 'D': return vmJsApi::jDate ($field->custom_value, 'field[' . $row . '][custom_value]', 'field_' . $row . '_customvalue') .''. $priceInput; break; case 'T': //TODO Patrick return '' . $priceInput; break; /* string or integer */ case 'S': case 'I': return '' . $priceInput; break; //'X'=>'COM_VIRTUEMART_CUSTOM_EDITOR', case 'X': // Not sure why this block is needed to get it to work when editing the customfield (the subsequent block works fine when creating it, ie. in JS) $document=& JFactory::getDocument(); if (get_class($document) == 'JDocumentHTML') { $editor =& JFactory::getEditor(); return $editor->display('field['.$row.'][custom_value]',$field->custom_value, '550', '400', '60', '20', false).''; } return ' ' . $priceInput; //return ''.$priceInput; break; //'Y'=>'COM_VIRTUEMART_CUSTOM_TEXTAREA' case 'Y': return '' . $priceInput; //return ''.$priceInput; break; case 'editorta': jimport ('joomla.html.editor'); $editor = JFactory::getEditor (); //TODO This is wrong! $_return['fields'][$_fld->name]['formcode'] = $editor->display ($_prefix . $_fld->name, $_return['fields'][$_fld->name]['value'], 300, 150, $_fld->cols, $_fld->rows); break; /* bool */ case 'B': return JHTML::_ ('select.booleanlist', 'field[' . $row . '][custom_value]', 'class="inputbox"', $field->custom_value) . '' . $priceInput; break; /* parent */ case 'P': return $field->custom_value . ''; break; /* related category*/ case 'Z': if (!$field->custom_value) { return ''; } // special case it's category ID ! $q = 'SELECT * FROM `#__virtuemart_categories_' . VMLANG . '` JOIN `#__virtuemart_categories` AS p using (`virtuemart_category_id`) WHERE `virtuemart_category_id`= "' . (int)$field->custom_value . '" '; $this->_db->setQuery ($q); //echo $this->_db->_sql; if ($category = $this->_db->loadObject ()) { $q = 'SELECT `virtuemart_media_id` FROM `#__virtuemart_category_medias` WHERE `virtuemart_category_id`= "' . (int)$field->custom_value . '" '; $this->_db->setQuery ($q); $thumb = ''; if ($media_id = $this->_db->loadResult ()) { $thumb = $this->displayCustomMedia ($media_id,'category'); } $display = ''; $display .= JHTML::link (JRoute::_ ('index.php?option=com_virtuemart&view=category&task=edit&virtuemart_category_id=' . (int)$field->custom_value,FALSE), ''.$thumb.'' . $category->category_name, array('title' => $category->category_name)).''; return $display; } else { return 'no result'; } /* related product*/ case 'R': if (!$field->custom_value) { return ''; } $pModel = VmModel::getModel('product'); $related = $pModel->getProduct((int)$field->custom_value,FALSE,FALSE,FALSE,1,FALSE); $thumb =''; if (!empty($related->virtuemart_media_id[0])) { $thumb = $this->displayCustomMedia ($related->virtuemart_media_id[0]).' '; } else { $thumb = $this->displayCustomMedia (0).' '; } $display = ''; $display .= JHTML::link (juri::root().'index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $related->virtuemart_product_id . '&virtuemart_category_id=' . $related->virtuemart_category_id, ''.$thumb.''. $related->product_name, array('title' => $related->product_name,'target'=>'blank')).''; return $display; break; /* image */ case 'M': if (empty($product)) { $vendorId = 1; } else { $vendorId = $product->virtuemart_vendor_id; } $q = 'SELECT `virtuemart_media_id` as value,`file_title` as text FROM `#__virtuemart_medias` WHERE `published`=1 AND (`virtuemart_vendor_id`= "' . $vendorId . '" OR `shared` = "1")'; $this->_db->setQuery ($q); $options = $this->_db->loadObjectList (); return JHTML::_ ('select.genericlist', $options, 'field[' . $row . '][custom_value]', '', 'value', 'text', $field->custom_value) . '' . $priceInput; break; /* Child product */ /* case 'C': if (empty($product)){ $virtuemart_product_id = JRequest::getInt('virtuemart_product_id', 0); } else { $virtuemart_product_id = $product->virtuemart_product_id; } $html = ''; $q='SELECT concat(`product_sku`,":",`product_name`) as text ,`virtuemart_product_id`,`product_in_stock` FROM `#__virtuemart_products` WHERE `published`=1 AND `virtuemart_product_id`= "'.$field->custom_value.'"'; //$db->setQuery(' SELECT virtuemart_product_id, product_name FROM `#__virtuemart_products` WHERE `product_parent_id` ='.(int)$product_id); $this->_db->setQuery($q); if ($child = $this->_db->loadObject()) { $html .= JHTML::link ( JRoute::_ ( 'index.php?option=com_virtuemart&view=product&task=edit&virtuemart_product_id='.$field->custom_value), $child->text.' ('.$field->custom_value.')', array ('title' => $child->text )); $html .= ' '.vmText::_('COM_VIRTUEMART_PRODUCT_FORM_IN_STOCK').':'.$child->product_in_stock ; $html .= '
        '.$priceInput; return $html; // return ''; } else return vmText::_('COM_VIRTUEMART_CUSTOM_NO_CHILD_PRODUCT'); break;*/ } } } public function getProductCustomsField ($product) { $query = 'SELECT C.`virtuemart_custom_id` , `custom_element`, `custom_params`, `custom_parent_id` , `admin_only` , `custom_title` , `show_title` , `custom_tip` , C.`custom_value` AS value, `custom_field_desc` , `field_type` , `is_list` , `is_hidden`, `layout_pos`, C.`published` , field.`virtuemart_customfield_id` , field.`custom_value`, field.`custom_param`, field.`custom_price`, field.`ordering` FROM `#__virtuemart_customs` AS C LEFT JOIN `#__virtuemart_product_customfields` AS field ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id` Where `virtuemart_product_id` =' . (int)$product->virtuemart_product_id . ' and `field_type` != "G" and `field_type` != "R" and `field_type` != "Z"'; $query .= ' and is_cart_attribute = 0 order by field.`ordering`,virtuemart_custom_id'; $this->_db->setQuery ($query); if ($productCustoms = $this->_db->loadObjectList ()) { $row = 0; if (!class_exists ('vmCustomPlugin')) { require(JPATH_VM_PLUGINS . DS . 'vmcustomplugin.php'); } foreach ($productCustoms as $field) { if ($field->field_type == "E") { $field->display = ''; JPluginHelper::importPlugin ('vmcustom'); $dispatcher = JDispatcher::getInstance (); $ret = $dispatcher->trigger ('plgVmOnDisplayProductFE', array($product, &$row, &$field)); } else { $field->display = $this->displayProductCustomfieldFE ($product, $field, $row); } $row++; } return $productCustoms; } else { return array(); } } public function getProductCustomsFieldRelatedCategories ($product) { $query = 'SELECT C.`virtuemart_custom_id` , `custom_parent_id` , `admin_only` , `custom_title` , `custom_tip` , C.`custom_value` AS value, `custom_field_desc` , `field_type` , `is_list` , `is_hidden` , C.`published` , field.`virtuemart_customfield_id` , field.`custom_value`, field.`custom_param`, field.`custom_price`, field.`ordering` FROM `#__virtuemart_customs` AS C LEFT JOIN `#__virtuemart_product_customfields` AS field ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id` Where `virtuemart_product_id` =' . (int)$product->virtuemart_product_id . ' and `field_type` = "Z"'; $query .= ' and is_cart_attribute = 0 order by ordering'; $this->_db->setQuery ($query); if ($productCustoms = $this->_db->loadObjectList ()) { $row = 0; foreach ($productCustoms as & $field) { $field->display = $this->displayProductCustomfieldFE ($product, $field, $row); $row++; } return $productCustoms; } else { return array(); } } public function getProductCustomsFieldRelatedProducts ($product) { $query = 'SELECT C.`virtuemart_custom_id` , `custom_parent_id` , `admin_only` , `custom_title` , `custom_tip` , C.`custom_value` AS value, `custom_field_desc` , `field_type` , `is_list` , `is_hidden` , C.`published` , field.`virtuemart_customfield_id` , field.`custom_value`, field.`custom_param`, field.`custom_price`, field.`ordering` FROM `#__virtuemart_customs` AS C LEFT JOIN `#__virtuemart_product_customfields` AS field ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id` Where `virtuemart_product_id` =' . (int)$product->virtuemart_product_id . ' and `field_type` = "R"'; $query .= ' and is_cart_attribute = 0 order by ordering'; $this->_db->setQuery ($query); if ($productCustoms = $this->_db->loadObjectList ()) { $row = 0; foreach ($productCustoms as & $field) { $field->display = $this->displayProductCustomfieldFE ($product, $field, $row); $row++; } return $productCustoms; } else { return array(); } } /** * Display for the cart * * @author Patrick Kohl * @param obj $product product object * @return html code */ public function getProductCustomsFieldCart ($product) { // group by virtuemart_custom_id $query = 'SELECT C.`virtuemart_custom_id`, `custom_title`, `show_title`, C.`custom_value`,`custom_field_desc` ,`custom_tip`,`field_type`,field.`virtuemart_customfield_id`,`is_hidden` FROM `#__virtuemart_customs` AS C LEFT JOIN `#__virtuemart_product_customfields` AS field ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id` Where `virtuemart_product_id` =' . (int)$product->virtuemart_product_id . ' and `field_type` != "G" and `field_type` != "R" and `field_type` != "Z"'; $query .= ' and is_cart_attribute = 1 group by virtuemart_custom_id ORDER BY field.`ordering`'; $this->_db->setQuery ($query); $groups = $this->_db->loadObjectList (); $err = $this->_db->getErrorMsg(); if(!empty($err)){ vmWarn('getProductCustomsFieldCart '.$err); } else { if(empty($groups)) return array(); } if (!class_exists ('VmHTML')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'html.php'); } $row = 0; if (!class_exists ('CurrencyDisplay')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php'); } $currency = CurrencyDisplay::getInstance (); if (!class_exists ('calculationHelper')) { require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'calculationh.php'); } $calculator = calculationHelper::getInstance (); $calculator ->_product = $product; $calculator->_cats = $product->categories; $calculator->product_tax_id = isset($product->product_tax_id)? $product->product_tax_id:0; $calculator->product_discount_id = isset($product->product_discount_id)? $product->product_discount_id:0; $calculator->productCurrency = isset($product->product_currency)? $product->product_currency:$calculator->productCurrency; if (!class_exists ('vmCustomPlugin')) { require(JPATH_VM_PLUGINS . DS . 'vmcustomplugin.php'); } //$free = vmText::_ ('COM_VIRTUEMART_CART_PRICE_FREE'); // render select list foreach ($groups as $group) { // $query='SELECT field.`virtuemart_customfield_id` as value ,concat(field.`custom_value`," :bu ", field.`custom_price`) AS text $query = 'SELECT field.`virtuemart_product_id`, `custom_params`,`custom_element`, field.`virtuemart_custom_id`, field.`virtuemart_customfield_id`,field.`custom_value`, field.`custom_price`, field.`custom_param` FROM `#__virtuemart_customs` AS C LEFT JOIN `#__virtuemart_product_customfields` AS field ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id` Where `virtuemart_product_id` =' . (int)$product->virtuemart_product_id; $query .= ' and is_cart_attribute = 1 and C.`virtuemart_custom_id`=' . (int)$group->virtuemart_custom_id; // We want the field to be ordered as the user defined $query .= ' ORDER BY field.`ordering`'; $this->_db->setQuery ($query); $options = $this->_db->loadObjectList (); //vmdebug('getProductCustomsFieldCart options',$options); $group->options = array(); foreach ($options as $option) { $group->options[$option->virtuemart_customfield_id] = $option; } if ($group->field_type == 'V') { $default = current ($group->options); foreach ($group->options as $productCustom) { $price = self::_getCustomPrice($productCustom->custom_price, $currency, $calculator); $productCustom->text = vmText::_($productCustom->custom_value) . ' ' . $price; } $group->display = VmHTML::select ('customPrice[' . $row . '][' . $group->virtuemart_custom_id . ']', $group->options, $default->custom_value, '', 'virtuemart_customfield_id', 'text', FALSE, false); } else { if ($group->field_type == 'G') { $group->display .= ''; // no direct display done by plugin; } else { if ($group->field_type == 'E') { $group->display = ''; foreach ($group->options as $k=> $productCustom) { $price = self::_getCustomPrice($productCustom->custom_price, $currency, $calculator); $productCustom->text = $productCustom->custom_value . ' ' . $price; $productCustom->virtuemart_customfield_id = $k; if (!class_exists ('vmCustomPlugin')) { require(JPATH_VM_PLUGINS . DS . 'vmcustomplugin.php'); } //legacy, it will be removed 2.2 $productCustom->value = $productCustom->virtuemart_customfield_id; JPluginHelper::importPlugin ('vmcustom'); JPluginHelper::importPlugin ('vmcalculation'); $dispatcher = JDispatcher::getInstance (); $fieldsToShow = $dispatcher->trigger ('plgVmOnDisplayProductVariantFE', array($productCustom, &$row, &$group)); // $group->display .= ' '; $group->display .= ' '; if (!empty($currency->_priceConfig['variantModification'][0]) and $price !== '') { $group->display .= '
        ' . vmText::_ ('COM_VIRTUEMART_CART_PRICE') . '' . $price . '
        '; } $row++; } $row--; } else { if ($group->field_type == 'U') { foreach ($group->options as $productCustom) { $price = self::_getCustomPrice($productCustom->custom_price, $currency, $calculator); $productCustom->text = $productCustom->custom_value . ' ' . $price; $group->display .= ' '; if (!empty($currency->_priceConfig['variantModification'][0]) and $price !== '') { $group->display .= '
        ' . vmText::_ ('COM_VIRTUEMART_CART_PRICE') . '' . $price . '
        '; } } } else { if ($group->field_type == 'A') { $group->display = ''; foreach ($group->options as $productCustom) { /* if ((float)$productCustom->custom_price) { $price = $currency->priceDisplay ($calculator->calculateCustomPriceWithTax ($productCustom->custom_price)); } else { $price = ($productCustom->custom_price === '') ? '' : $free; }*/ $productCustom->field_type = $group->field_type; $productCustom->is_cart = 1; $group->display .= $this->displayProductCustomfieldFE ($product, $productCustom, $row); $checked = ''; } } else { $group->display = ''; $checked = 'checked="checked"'; foreach ($group->options as $productCustom) { //vmdebug('getProductCustomsFieldCart',$productCustom); $price = self::_getCustomPrice($productCustom->custom_price, $currency, $calculator); $productCustom->field_type = $group->field_type; $productCustom->is_cart = 1; // $group->display .= ''; //MarkerVarMods $group->display .= ''; $checked = ''; } } } } } } $row++; } return $groups; } static function _getCustomPrice($customPrice, $currency, $calculator) { if ((float)$customPrice) { $price = strip_tags ($currency->priceDisplay ($calculator->calculateCustomPriceWithTax ($customPrice))); if ($customPrice >0) { $price ="+".$price; } } else { $price = ($customPrice === '') ? '' : vmText::_ ('COM_VIRTUEMART_CART_PRICE_FREE'); } return $price; } /** * Formating front display by roles * for product only ! */ public function displayProductCustomfieldFE (&$product, $customfield, $row = '') { $virtuemart_custom_id = isset($customfield->virtuemart_custom_id)? $customfield->virtuemart_custom_id:0; $value = $customfield->custom_value; $type = $customfield->field_type; $is_list = isset($customfield->is_list)? $customfield->is_list:0; $price = isset($customfield->custom_price)? $customfield->custom_price:0; $is_cart = isset($customfield->is_cart)? $customfield->is_cart:0; //vmdebug('displayProductCustomfieldFE and here is something wrong ',$customfield); if (!class_exists ('CurrencyDisplay')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php'); $currency = CurrencyDisplay::getInstance (); if ($is_list > 0) { $values = explode (';', $value); if ($is_cart != 0) { $options = array(); foreach ($values as $key => $val) { $options[] = array('value' => $val, 'text' => $val); } vmJsApi::chosenDropDowns(); return JHTML::_ ('select.genericlist', $options, 'field[' . $row . '][custom_value]', NULL, 'value', 'text', FALSE, TRUE); } else { $html = ''; $html .= '
        ' . $value . '
        '; return $html; } } else { if ($price > 0) { $price = $currency->priceDisplay ((float)$price); } switch ($type) { case 'A': $options = array(); $session = JFactory::getSession (); $virtuemart_category_id = $session->get ('vmlastvisitedcategoryid', 0, 'vm'); $productModel = VmModel::getModel ('product'); //Note by Jeremy Magne (Daycounts) 2013-08-31 //Previously the the product model is loaded but we need to ensure the correct product id is set because the getUncategorizedChildren does not get the product id as parameter. //In case the product model was previously loaded, by a related product for example, this would generate wrong uncategorized children list $productModel->setId($product->virtuemart_product_id); //parseCustomParams VirtueMartModelCustomfields::bindParameterableByFieldType($customfield); //Todo preselection as dropdown of children //Note by Max Milbers: This is not necessary, in this case it is better to unpublish the parent and to give the child which should be preselected a category //Or it is withParent, in that case there exists the case, that a parent should be used as a kind of mini category and not be orderable. //There exists already other customs and in special plugins which wanna disable or change the add to cart button. //I suggest that we manipulate the button with a message "choose a variant first" //if(!isset($customfield->pre_selected)) $customfield->pre_selected = 0; $selected = JRequest::getVar ('virtuemart_product_id',0); if(is_array($selected) ) { $selected = $selected[0]; } $selected = (int) $selected; $html = ''; $uncatChildren = $productModel->getUncategorizedChildren ($customfield->withParent); if(empty($uncatChildren)){ return $html; break; } foreach ($uncatChildren as $child) { $options[] = array('value' => JRoute::_ ('index.php?option=com_virtuemart&view=productdetails&virtuemart_category_id=' . $virtuemart_category_id . '&virtuemart_product_id=' . $child['virtuemart_product_id'],FALSE), 'text' => $child['product_name']); } //vmJsApi::chosenDropDowns(); would need class="inputbox vm-chzn-select", but it does not work, in case people have two times the same product, //because both dropdowns have then the same id and the js does not work. $html .= JHTML::_ ('select.genericlist', $options, 'field[' . $row . '][custom_value]', 'onchange="window.top.location.href=this.options[this.selectedIndex].value" size="1" class="inputbox"', "value", "text", JRoute::_ ('index.php?option=com_virtuemart&view=productdetails&virtuemart_category_id=' . $virtuemart_category_id . '&virtuemart_product_id=' . $selected,FALSE)); //vmdebug('$customfield',$customfield); if($customfield->parentOrderable==0 and $product->product_parent_id==0){ $product->orderable = FALSE; } return $html; break; /* variants*/ case 'V': if ($price == 0) $price = vmText::_ ('COM_VIRTUEMART_CART_PRICE_FREE'); /* Loads the product price details */ return ' ' . vmText::_ ('COM_VIRTUEMART_CART_PRICE') . $price . ' '; break; /*Date variant*/ case 'D': return '' . vmJsApi::date ($value, 'LC1', TRUE) . ''; //vmJsApi::jDate($field->custom_value, 'field['.$row.'][custom_value]','field_'.$row.'_customvalue').$priceInput; break; /* text area or editor No vmText, only displayed in BE */ case 'X': case 'Y': return $value; break; /* string or integer */ case 'S': case 'I': return vmText::_ ($value); break; /* bool */ case 'B': if ($value == 0) return vmText::_ ('COM_VIRTUEMART_NO'); return vmText::_ ('COM_VIRTUEMART_YES'); break; /* parent */ case 'P': return '' . vmText::_ ($value) . ''; break; /* related */ case 'R': $pModel = VmModel::getModel('product'); $related = $pModel->getProduct((int)$value,TRUE,TRUE,TRUE,1,FALSE); if(!$related){ vmError('related product is missing, maybe unpublished '.$product->product_name.' id: '.$product->virtuemart_product_id); return false; } $thumb =''; if (!empty($related->virtuemart_media_id[0])) { $thumb = $this->displayCustomMedia ($related->virtuemart_media_id[0]).' '; } else { $thumb = $this->displayCustomMedia (0).' '; } return JHTML::link (JRoute::_ ('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $related->virtuemart_product_id . '&virtuemart_category_id=' . $related->virtuemart_category_id,FALSE), $thumb . $related->product_name, array('title' => $related->product_name)); break; /* image */ case 'M': return $this->displayCustomMedia ($value); break; /* categorie */ case 'Z': $q = 'SELECT * FROM `#__virtuemart_categories_' . VMLANG . '` as l JOIN `#__virtuemart_categories` AS c using (`virtuemart_category_id`) WHERE `published`=1 AND l.`virtuemart_category_id`= "' . (int)$value . '" '; $this->_db->setQuery ($q); if ($category = $this->_db->loadObject ()) { $q = 'SELECT `virtuemart_media_id` FROM `#__virtuemart_category_medias`WHERE `virtuemart_category_id`= "' . $category->virtuemart_category_id . '" '; $this->_db->setQuery ($q); $thumb = ''; if ($media_id = $this->_db->loadResult ()) { $thumb = $this->displayCustomMedia ($media_id,'category'); } return JHTML::link (JRoute::_ ('index.php?option=com_virtuemart&view=category&virtuemart_category_id=' . $category->virtuemart_category_id, FALSE), $thumb . ' ' . $category->category_name, array('title' => $category->category_name)); } else return ''; /* Child Group list * this have no direct display , used for stockable product */ case 'G': return ''; //' '.vmText::_('COM_VIRTUEMART_CART_PRICE').' : '.$price .' '; break; break; } } } function displayCustomMedia ($media_id, $table = 'product', $absUrl = FALSE) { if (!class_exists ('TableMedias')) require(JPATH_VM_ADMINISTRATOR . DS . 'tables' . DS . 'medias.php'); //$data = $this->getTable('medias'); $db = JFactory::getDBO (); $data = new TableMedias($db); $data->load ((int)$media_id); if (!class_exists ('VmMediaHandler')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'mediahandler.php'); $media = VmMediaHandler::createMedia ($data, $table); //if($media_id==0){ // return $media->getIcon('', FALSE, TRUE, TRUE,$absUrl); //} return $media->displayMediaThumb ('', FALSE, '', TRUE, TRUE, $absUrl); } /** * There are too many functions doing almost the same for my taste * the results are sometimes slighty different and makes it hard to work with it, therefore here the function for future proxy use * */ public static function customFieldDisplay ($product, $variantmods, $html, $trigger) { //vmdebug('customFieldDisplay $variantmods',$variantmods); $row = 0; if (!class_exists ('shopFunctionsF')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'shopfunctionsf.php'); //MarkerVarMods foreach ($variantmods as $selected => $variant) { //foreach ($variantmods as $variant=> $selected) { //vmdebug('customFieldDisplay '.$variant.' '.$selected); if ($selected) { $productCustom = self::getProductCustomField ($selected); //vmdebug('customFieldDisplay',$selected,$productCustom); if (!empty($productCustom)) { $html .= ''; if ($productCustom->field_type == "E") { $product = self::addParam ($product); $product->productCustom = $productCustom; //vmdebug('CustomsFieldCartDisplay $productCustom',$productCustom); // vmdebug('customFieldDisplay $product->param selected '.$selected,$product->param); if (!class_exists ('vmCustomPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmcustomplugin.php'); JPluginHelper::importPlugin ('vmcustom'); $dispatcher = JDispatcher::getInstance (); $dispatcher->trigger ($trigger, array($product, $row, &$html)); } else { //vmdebug('customFieldDisplay $productCustom by self::getProductCustomField $variant: '.$variant.' $selected: '.$selected,$productCustom); $value = ''; if (($productCustom->field_type == "G")) { $child = self::getChild ($productCustom->custom_value); // $html .= $productCustom->custom_title.' '.$child->product_name; $value = $child->product_name; } elseif (($productCustom->field_type == "M")) { // $html .= $productCustom->custom_title.' '.self::displayCustomMedia($productCustom->custom_value); $value = self::displayCustomMedia ($productCustom->custom_value); } elseif (($productCustom->field_type == "S")) { // q $html .= $productCustom->custom_title.' '.vmText::_($productCustom->custom_value); $value = $productCustom->custom_value; } else { // $html .= $productCustom->custom_title.' '.$productCustom->custom_value; //vmdebug('customFieldDisplay',$productCustom); $value = $productCustom->custom_value; } $html .= ShopFunctionsF::translateTwoLangKeys ($productCustom->show_title ? $productCustom->custom_title : '', $value); } $html .= '
        '; } else { // falldown method if customfield are deleted foreach ((array)$selected as $key => $value) { $html .= '
        Couldnt find customfield' . ($key ? '' . $key . ' ' : '') . $value; } } } $row++; } // vmdebug ('customFieldDisplay html begin: ' . $html . ' end'); return $html . '
        '; } /** * TODO This is html and view stuff and MUST NOT be in the model, notice by Max * render custom fields display cart module FE */ public static function CustomsFieldCartModDisplay ($priceKey, $product) { if (empty($calculator)) { if (!class_exists ('calculationHelper')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'calculationh.php'); $calculator = calculationHelper::getInstance (); } $variantmods = $calculator->parseModifier ($priceKey); return self::customFieldDisplay ($product, $variantmods, '
        ', 'plgVmOnViewCartModule'); } /** * TODO This is html and view stuff and MUST NOT be in the model, notice by Max * render custom fields display cart FE */ public static function CustomsFieldCartDisplay ($priceKey, $product) { if (empty($calculator)) { if (!class_exists ('calculationHelper')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'calculationh.php'); $calculator = calculationHelper::getInstance (); } $variantmods = $calculator->parseModifier ($priceKey); return self::customFieldDisplay ($product, $variantmods, '
        ', 'plgVmOnViewCart'); } /* * render custom fields display order BE/FE */ public function CustomsFieldOrderDisplay ($item, $view = 'FE', $absUrl = FALSE) { $row = 0; // $item=(array)$item; if (!empty($item->product_attribute)) { $item->param = json_decode ($item->product_attribute, TRUE); // $html = '
        '; if (!empty($item->param)) { return self::customFieldDisplay ($item, $item->param, '
        ', 'plgVmDisplayInOrder' . $view); } else { vmdebug ('CustomsFieldOrderDisplay $item->param empty? '); } } else { // vmTrace('$item->product_attribut is empty'); } return FALSE; } /** * * custom fields for cart and cart module */ public static function getProductCustomField ($selected) { $db = JFactory::getDBO (); $query = 'SELECT C.`virtuemart_custom_id` , `custom_element` , `custom_parent_id` , `admin_only` , `custom_title` , `show_title` , `custom_tip` , C.`custom_value` AS value, `custom_field_desc` , `field_type` , `is_list` , `is_cart_attribute` , `is_hidden` , C.`published` , field.`virtuemart_customfield_id` , field.`custom_value`,field.`custom_param`,field.`custom_price` FROM `#__virtuemart_customs` AS C LEFT JOIN `#__virtuemart_product_customfields` AS field ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id` WHERE `virtuemart_customfield_id` ="' . (int)$selected . '"'; // if($product_parent_id!=0){ // $query .= ' AND (`virtuemart_product_id` ="' . $product_id.'" XOR `virtuemart_product_id` ="' . $product_parent_id.'")'; // } else { // $query .= ' AND (`virtuemart_product_id` ="' . $product_id.'"'; // } $db->setQuery ($query); return $db->loadObject (); } /* * add parameter to product definition */ public function addParam ($product) { // vmdebug('addParam? ',$product->custom_param,$product->customPlugin); $custom_param = empty($product->custom_param) ? array() : json_decode ($product->custom_param, TRUE); $product_param = empty($product->customPlugin) ? array() : json_decode ($product->customPlugin, TRUE); $params = (array)$product_param + (array)$custom_param; foreach ($params as $key => $param) { $product->param[$key] = $param; } return $product; } public function getChild ($child) { $db = JFactory::getDBO (); $db->setQuery ('SELECT `product_sku`, `product_name` FROM `#__virtuemart_products_' . VMLANG . '` WHERE virtuemart_product_id=' . $child); return $db->loadObject (); } static public function setEditCustomHidden ($customfield, $i) { if (!isset($customfield->virtuemart_customfield_id)) $customfield->virtuemart_customfield_id = '0'; $html = ' '; return $html; } } // pure php no closing tag models/user.php000066600000141265151374526160007545 0ustar00setMainTable('vmusers'); $this->setToggleName('user_is_vendor'); $this->addvalidOrderingFieldName(array('ju.username','ju.name','sg.virtuemart_shoppergroup_id','shopper_group_name','shopper_group_desc') ); array_unshift($this->_validOrderingFieldName,'ju.id'); // $user = JFactory::getUser(); // $this->_id = $user->id; } /** * public function Resets the user id and data * * * @author Max Milbers */ public function setId($cid){ $user = JFactory::getUser(); //anonymous sets to 0 for a new entry if(empty($user->id)){ $userId = 0; //echo($this->_id,'Recognized anonymous case'); } else { //not anonymous, but no cid means already registered user edit own data if(empty($cid)){ $userId = $user->id; // vmdebug('setId setCurrent $user',$user->get('id')); } else { if($cid != $user->id){ if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if(Permissions::getInstance()->check("admin")) { $userId = $cid; // vmdebug('Admin watches user, setId '.$cid); } else { JError::raiseWarning(1,'Hacking attempt'); $userId = $user->id; } }else { $userId = $user->id; } } } $this->setUserId($userId); return $userId; } /** * Internal function * * @param unknown_type $id */ private function setUserId($id){ $app = JFactory::getApplication(); // if($app->isAdmin()){ if($this->_id!=$id){ $this->_id = (int)$id; $this->_data = null; $this->customer_number = 0; } // } } public function getCurrentUser(){ $user = JFactory::getUser(); $this->setUserId($user->id); return $this->getUser(); } private $_defaultShopperGroup = 0; /** * Sets the internal user id with given vendor Id * * @author Max Milbers * @param int $vendorId */ function getVendor($vendorId=1,$return=TRUE){ $vendorModel = VmModel::getModel('vendor'); $userId = VirtueMartModelVendor::getUserIdByVendorId($vendorId); if($userId){ $this->setUserId($userId); if($return){ return $this->getUser(); } } else { return false; } } /** * Retrieve the detail record for the current $id if the data has not already been loaded. * @author Max Milbers */ function getUser(){ if(!empty($this->_data)) return $this->_data; if(empty($this->_db)) $this->_db = JFactory::getDBO(); $this->_data = $this->getTable('vmusers'); $this->_data->load((int)$this->_id); // vmdebug('$this->_data->vmusers',$this->_data); $this->_data->JUser = JUser::getInstance($this->_id); // vmdebug('$this->_data->JUser',$this->_data->JUser); if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); $this->_data->perms = Permissions::getInstance()->getPermissions((int)$this->_id); // Add the virtuemart_shoppergroup_ids $xrefTable = $this->getTable('vmuser_shoppergroups'); $this->_data->shopper_groups = $xrefTable->load($this->_id); $shoppergroupmodel = VmModel::getModel('ShopperGroup'); $site = JFactory::getApplication ()->isSite (); if($site){ if(empty($this->_data->shopper_groups)) $this->_data->shopper_groups = array(); $shoppergroupmodel->appendShopperGroups($this->_data->shopper_groups,$this->_data->JUser,$site); } if(!empty($this->_id)) { $q = 'SELECT `virtuemart_userinfo_id` FROM `#__virtuemart_userinfos` WHERE `virtuemart_user_id` = "' . (int)$this->_id.'"'; $this->_db->setQuery($q); $userInfo_ids = $this->_db->loadResultArray(0); } else { $userInfo_ids = array(); } // vmdebug('my query',$this->_db->getQuery()); //vmdebug('my $_ui',$userInfo_ids,$this->_id); $this->_data->userInfo = array (); $BTuid = 0; foreach($userInfo_ids as $uid){ $this->_data->userInfo[$uid] = $this->getTable('userinfos'); $this->_data->userInfo[$uid]->load($uid); if ($this->_data->userInfo[$uid]->address_type == 'BT') { $BTuid = $uid; $this->_data->userInfo[$BTuid]->name = $this->_data->JUser->name; $this->_data->userInfo[$BTuid]->email = $this->_data->JUser->email; $this->_data->userInfo[$BTuid]->username = $this->_data->JUser->username; $this->_data->userInfo[$BTuid]->address_type = 'BT'; // vmdebug('$this->_data->vmusers',$this->_data); } } // vmdebug('user_is_vendor ?',$this->_data->user_is_vendor); if($this->_data->user_is_vendor){ $vendorModel = VmModel::getModel('vendor'); if(Vmconfig::get('multix','none')=='none'){ $this->_data->virtuemart_vendor_id = 1; //vmdebug('user model, single vendor',$this->_data->virtuemart_vendor_id); } $vendorModel->setId($this->_data->virtuemart_vendor_id); $this->_data->vendor = $vendorModel->getVendor(); } return $this->_data; } /** * Retrieve contact info for a user if any * * @return array of null */ function getContactDetails() { if ($this->_id) { $this->_db->setQuery('SELECT * FROM #__contact_details WHERE user_id = ' . $this->_id); $_contacts = $this->_db->loadObjectList(); if (count($_contacts) > 0) { return $_contacts[0]; } } return null; } /** * Functions belonging to get_groups_below_me Taken with correspondence from CommunityBuilder * adjusted to the our needs * @version $Id: user.php 6543 2012-10-16 06:41:27Z Milbo $ * @package Community Builder * @subpackage cb.acl.php * @author Beat and mambojoe * @author Max Milbers * @copyright (C) Beat, www.joomlapolis.com * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU/GPL version 2 */ function get_object_id( $var_1 = null, $var_2 = null, $var_3 = null ) { if ( JVM_VERSION === 2) { $return = $var_2; } else { $return = $this->_acl->get_object_id( $var_1, $var_2, $var_3 ); } return $return; } /** * Taken with correspondence from CommunityBuilder * adjusted to the our needs * @version $Id: user.php 6543 2012-10-16 06:41:27Z Milbo $ * @package Community Builder * @subpackage cb.acl.php * @author Beat and mambojoe * @author Max Milbers * @copyright (C) Beat, www.joomlapolis.com * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU/GPL version 2 */ function get_object_groups( $var_1 = null, $var_2 = null, $var_3 = null ) { if ( version_compare(JVERSION,'1.6.0','ge') ) { $user_id = ( is_integer( $var_1 ) ? $var_1 : $var_2 ); $recurse = ( $var_3 == 'RECURSE' ? true : false ); $return = $this->_acl->getGroupsByUser( $user_id, $recurse ); } else { if ( ! $var_2 ) { $var_2 = 'ARO'; } if ( ! $var_3 ) { $var_3 = 'NO_RECURSE'; } $return = $this->_acl->get_object_groups( $var_1, $var_2, $var_3 ); } return $return; } /** * Remap literal groups (such as in default values) to the hardcoded CMS values * * @param string|array $name of int|string * @return int|array of int */ function mapGroupNamesToValues( $name ) { static $ps = null; $selected = (array) $name; foreach ( $selected as $k => $v ) { if ( ! is_numeric( $v ) ) { if ( ! $ps ) { if ( JVM_VERSION === 2 ) { $ps = array( 'Root' => 0 , 'Users' => 0 , 'Public' => 1, 'Registered' => 2, 'Author' => 3, 'Editor' => 4, 'Publisher' => 5, 'Backend' => 0 , 'Manager' => 6, 'Administrator' => 7, 'Superadministrator' => 8 ); } else { $ps = array( 'Root' => 17, 'Users' => 28, 'Public' => 29, 'Registered' => 18, 'Author' => 19, 'Editor' => 20, 'Publisher' => 21, 'Backend' => 30, 'Manager' => 23, 'Administrator' => 24, 'Superadministrator' => 25 ); } } if ( array_key_exists( $v, $ps ) ) { if ( $ps[$v] != 0 ) { $selected[$k] = $ps[$v]; } else { unset( $selected[$k] ); } } else { $selected[$k] = (int) $v; } } } if ( ! is_array( $name ) ) { $selected = $selected[0]; } return $selected; } function get_group_children_tree( $var_1 = null, $var_2 = null, $var_3 = null, $var_4 = null ) { $_CB_database = &$this->getDbo(); if ( ! $var_4 ) { $var_4 = true; } if ( JVM_VERSION === 2 ) { $query = 'SELECT a.' . $_CB_database->NameQuote( 'id' ) . ' AS value' . ', a.' . $_CB_database->NameQuote( 'title' ) . ' AS text' . ', COUNT( DISTINCT b.' . $_CB_database->NameQuote( 'id' ) . ' ) AS level' . "\n FROM " . $_CB_database->NameQuote( '#__usergroups' ) . " AS a" . "\n LEFT JOIN " . $_CB_database->NameQuote( '#__usergroups' ) . " AS b" . ' ON a.' . $_CB_database->NameQuote( 'lft' ) . ' > b.' . $_CB_database->NameQuote( 'lft' ) . ' AND a.' . $_CB_database->NameQuote( 'rgt' ) . ' < b.' . $_CB_database->NameQuote( 'rgt' ) . "\n GROUP BY a." . $_CB_database->NameQuote( 'id' ) . "\n ORDER BY a." . $_CB_database->NameQuote( 'lft' ) . " ASC"; $_CB_database->setQuery( $query ); $groups = $_CB_database->loadObjectList(); $user_groups = array(); for ( $i = 0, $n = count( $groups ); $i < $n; $i++ ) { $groups[$i]->text = str_repeat( '- ', $groups[$i]->level ) . JText::_( $groups[$i]->text ); if ( $var_4 ) { $user_groups[$i] = JHtml::_( 'select.option', $groups[$i]->value, $groups[$i]->text ); } else { $user_groups[$i] = array( 'value' => $groups[$i]->value, 'text' => $groups[$i]->text ); } } $return = $user_groups; } else { if ( ! $var_3 ) { $var_3 = true; } $return = $this->_acl->get_group_children_tree( $var_1, $var_2, $var_3, $var_4 ); } return $return; } /** * Return a list with groups that can be set by the current user * * @return mixed Array with groups that can be set, or the groupname (string) if it cannot be changed. */ function getGroupList() { if(JVM_VERSION === 2) { //hm CB thing also not help // $_grpList = $this->get_groups_below_me(); // return $_grpList; /* if(!class_exists('UsersModelUser')) require(JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_users'.DS.'models'.DS.'user.php'); $jUserModel = new UsersModelUser(); $list = $jUserModel->getGroups(); $user = JFactory::getUser(); if ($user->authorise('core.edit', 'com_users') && $user->authorise('core.manage', 'com_users')) { $model = JModel::getInstance('Groups', 'UsersModel', array('ignore_request' => true)); return $model->getItems(); } else { return null; }*/ $user = JFactory::getUser(); $authGroups = JAccess::getGroupsByUser($user->id); // $authGroups = $user->getAuthorisedGroups(); // vmdebug('getGroupList j17',$authGroups); $db = $this->getDbo(); $where = implode($authGroups,'" OR `id` = "').'"'; $q = 'SELECT `id` as value,`title` as text FROM #__usergroups WHERE `id` = "'.$where; $db->setQuery($q); $list = $db->loadAssocList(); // foreach($list as $item){ // vmdebug('getGroupList $item ',$item); // } // vmdebug('getGroupList $q '.$list); return $list; } else { $_aclObject = JFactory::getACL(); if(empty($this->_data)) $this->getUser(); if (JVM_VERSION>1){ //TODO fix this latter. It's just an workarround to make it working on 1.6 $gids = $this->_data->JUser->get('groups'); return array_flip($gids); } $_usr = $_aclObject->get_object_id ('users', $this->_data->JUser->get('id'), 'ARO'); $_grp = $_aclObject->get_object_groups ($_usr, 'ARO'); $_grpName = strtolower ($_aclObject->get_group_name($_grp[0], 'ARO')); $_currentUser = JFactory::getUser(); $_my_usr = $_aclObject->get_object_id ('users', $_currentUser->get('id'), 'ARO'); $_my_grp = $_aclObject->get_object_groups ($_my_usr, 'ARO'); $_my_grpName = strtolower ($_aclObject->get_group_name($_my_grp[0], 'ARO')); // administrators can't change each other and frontend-only users can only see groupnames if (( $_grpName == $_my_grpName && $_my_grpName == 'administrator' ) || !$_aclObject->is_group_child_of($_my_grpName, 'Public Backend')) { return $_grpName; } else { $_grpList = $_aclObject->get_group_children_tree(null, 'USERS', false); $_remGroups = $_aclObject->get_group_children( $_my_grp[0], 'ARO', 'RECURSE' ); if (!$_remGroups) { $_remGroups = array(); } // Make sure privs higher than my own can't be granted if (in_array($_grp[0], $_remGroups)) { // nor can privs of users with higher privs be decreased. return $_grpName; } $_i = 0; $_j = count($_grpList); while ($_i < $_j) { if (in_array($_grpList[$_i]->value, $_remGroups)) { array_splice( $_grpList, $_i, 1 ); $_j = count($_grpList); } else { $_i++; } } return $_grpList; } } } /** * Bind the post data to the JUser object and the VM tables, then saves it * It is used to register new users * This function can also change already registered users, this is important when a registered user changes his email within the checkout. * * @author Max Milbers * @author Oscar van Eijk * @return boolean True is the save was successful, false otherwise. */ public function store(&$data,$checkToken = TRUE){ $message = ''; $user = ''; $newId = 0; if($checkToken){ JRequest::checkToken() or jexit( 'Invalid Token, while trying to save user' ); $mainframe = JFactory::getApplication() ; } if(empty($data)){ vmError('Developer notice, no data to store for user'); return false; } //To find out, if we have to register a new user, we take a look on the id of the usermodel object. //The constructor sets automatically the right id. $new = ($this->_id < 1); if(empty($this->_id)){ $user = new JUser(); //thealmega http://forum.virtuemart.net/index.php?topic=99755.msg393758#msg393758 } else { $user = JFactory::getUser($this->_id); } $gid = $user->get('gid'); // Save original gid // Preformat and control user datas by plugin JPluginHelper::importPlugin('vmuserfield'); $dispatcher = JDispatcher::getInstance(); $valid = true ; $dispatcher->trigger('plgVmOnBeforeUserfieldDataSave',array(&$valid,$this->_id,&$data,$user )); // $valid must be false if plugin detect an error if( $valid == false ) { return false; } // Before I used this "if($cart && !$new)" // This construction is necessary, because this function is used to register a new JUser, so we need all the JUser data in $data. // On the other hand this function is also used just for updating JUser data, like the email for the BT address. In this case the // name, username, password and so on is already stored in the JUser and dont need to be entered again. if(empty ($data['email'])){ $email = $user->get('email'); if(!empty($email)){ $data['email'] = $email; } } else { $data['email'] = JRequest::getString('email', '', 'post', 'email'); } $data['email'] = str_replace(array('\'','"',',','%','*','/','\\','?','^','`','{','}','|','~'),array(''),$data['email']); //This is important, when a user changes his email address from the cart, //that means using view user layout edit_address (which is called from the cart) $user->set('email',$data['email']); if(empty ($data['name'])){ $name = $user->get('name'); if(!empty($name)){ $data['name'] = $name; } } else { $data['name'] = JRequest::getString('name', '', 'post', 'name'); } $data['name'] = str_replace(array('\'','"',',','%','*','/','\\','?','^','`','{','}','|','~'),array(''),$data['name']); if(empty ($data['username'])){ $username = $user->get('username'); if(!empty($username)){ $data['username'] = $username; } else { $data['username'] = JRequest::getVar('username', '', 'post', 'username'); } } if(empty ($data['password'])){ $data['password'] = JRequest::getVar('password', '', 'post', 'string' ,JREQUEST_ALLOWRAW); } if(empty ($data['password2'])){ $data['password2'] = JRequest::getVar('password2', '', 'post', 'string' ,JREQUEST_ALLOWRAW); } if(!$new && !empty($data['password']) && empty($data['password2'])){ unset($data['password']); unset($data['password2']); } // Bind Joomla userdata if (!$user->bind($data)) { foreach($user->getErrors() as $error) { // vmError('user bind '.$error); vmError('user bind '.$error,JText::sprintf('COM_VIRTUEMART_USER_STORE_ERROR',$error)); } $message = 'Couldnt bind data to joomla user'; array('user'=>$user,'password'=>$data['password'],'message'=>$message,'newId'=>$newId,'success'=>false); } if($new){ // If user registration is not allowed, show 403 not authorized. // But it is possible for admins and storeadmins to save $usersConfig = JComponentHelper::getParams( 'com_users' ); if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if (!Permissions::getInstance()->check("admin,storeadmin") && $usersConfig->get('allowUserRegistration') == '0') { VmConfig::loadJLang('com_virtuemart'); JError::raiseError( 403, JText::_('COM_VIRTUEMART_ACCESS_FORBIDDEN')); return; } $authorize = JFactory::getACL(); // Initialize new usertype setting $newUsertype = $usersConfig->get( 'new_usertype' ); if (!$newUsertype) { if ( JVM_VERSION===1){ $newUsertype = 'Registered'; } else { $newUsertype = 2; } } // Set some initial user values $user->set('usertype', $newUsertype); if ( JVM_VERSION===1){ $user->set('gid', $authorize->get_group_id( '', $newUsertype, 'ARO' )); } else { $user->groups[] = $newUsertype; } $date = JFactory::getDate(); $user->set('registerDate', $date->toMySQL()); // If user activation is turned on, we need to set the activation information $useractivation = $usersConfig->get( 'useractivation' ); $doUserActivation=false; if ( JVM_VERSION===1){ if ($useractivation == '1' ) { $doUserActivation=true; } } else { if ($useractivation == '1' or $useractivation == '2') { $doUserActivation=true; } } vmdebug('user',$useractivation , $doUserActivation); if ($doUserActivation ) { jimport('joomla.user.helper'); $user->set('activation', JUtility::getHash( JUserHelper::genRandomPassword()) ); $user->set('block', '1'); //$user->set('lastvisitDate', '0000-00-00 00:00:00'); } } $option = JRequest::getCmd( 'option'); // If an exising superadmin gets a new group, make sure enough admins are left... if (!$new && $user->get('gid') != $gid && $gid == __SUPER_ADMIN_GID) { if ($this->getSuperAdminCount() <= 1) { vmError(JText::_('COM_VIRTUEMART_USER_ERR_ONLYSUPERADMIN')); return false; } } if(isset($data['language'])){ $user->setParam('language',$data['language']); } // Save the JUser object if (!$user->save()) { vmError(JText::_( $user->getError()) , JText::_( $user->getError())); return false; } //vmdebug('my user, why logged in? ',$user); $newId = $user->get('id'); $data['virtuemart_user_id'] = $newId; //We need this in that case, because data is bound to table later $this->setUserId($newId); //Save the VM user stuff if(!$this->saveUserData($data) || !self::storeAddress($data)){ vmError('COM_VIRTUEMART_NOT_ABLE_TO_SAVE_USER_DATA'); // vmError(Jtext::_('COM_VIRTUEMART_NOT_ABLE_TO_SAVE_USERINFO_DATA')); } else { if ($new) { $this->sendRegistrationEmail($user,$user->password_clear, $doUserActivation); if ($doUserActivation ) { vmInfo('COM_VIRTUEMART_REG_COMPLETE_ACTIVATE'); } else { vmInfo('COM_VIRTUEMART_REG_COMPLETE'); $user->set('activation', '' ); $user->set('block', '0'); $user->set('guest', '0'); } } else { vmInfo('COM_VIRTUEMART_USER_DATA_STORED'); } } //The extra check for isset vendor_name prevents storing of the vendor if there is no form (edit address cart) if((int)$data['user_is_vendor']==1 and isset($data['vendor_name'])){ vmdebug('vendor recognised '.$data['virtuemart_vendor_id']); if($this ->storeVendorData($data)){ if ($new) { if ($doUserActivation ) { vmInfo('COM_VIRTUEMART_REG_VENDOR_COMPLETE_ACTIVATE'); } else { vmInfo('COM_VIRTUEMART_REG_VENDOR_COMPLETE'); } } else { vmInfo('COM_VIRTUEMART_VENDOR_DATA_STORED'); } } } return array('user'=>$user,'password'=>$data['password'],'message'=>$message,'newId'=>$newId,'success'=>true); } /** * This function is NOT for anonymous. Anonymous just get the information directly sent by email. * This function saves the vm Userdata for registered JUsers. * TODO, setting of shoppergroup isnt done * * TODO No reason not to use this function for new users, but it requires a Joomla plugin * that gets fired by the onAfterStoreUser. I'll built that (OvE) * * Notice: * As long we do not have the silent registration, an anonymous does not get registered. It is enough to send the virtuemart_order_id * with the email. The order is saved with all information in an extra table, so there is * no need for a silent registration. We may think about if we actually need/want the feature silent registration * The information of anonymous is stored in the order table and has nothing todo with the usermodel! * * @author Max Milbers * @author Oscar van Eijk * return boolean */ public function saveUserData(&$data,$trigger=true){ if(empty($this->_id)){ echo 'This is a notice for developers, you used this function for an anonymous user, but it is only designed for already registered ones'; vmError( 'This is a notice for developers, you used this function for an anonymous user, but it is only designed for already registered ones'); return false; } $noError = true; $usertable = $this->getTable('vmusers'); $alreadyStoredUserData = $usertable->load($this->_id); $app = JFactory::getApplication(); if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if(!Permissions::getInstance()->check("admin")){ unset($data['virtuemart_vendor_id']); unset($data['user_is_vendor']); $data['user_is_vendor'] = $alreadyStoredUserData->user_is_vendor; $data['virtuemart_vendor_id'] = $alreadyStoredUserData->virtuemart_vendor_id; } else { if(!isset($data['user_is_vendor']) and !empty($alreadyStoredUserData->user_is_vendor)){ $data['user_is_vendor'] = $alreadyStoredUserData->user_is_vendor; } if(!isset($data['virtuemart_vendor_id']) and !empty($alreadyStoredUserData->virtuemart_vendor_id)){ $data['virtuemart_vendor_id'] = $alreadyStoredUserData->virtuemart_vendor_id; } } unset($data['customer_number']); if(empty($alreadyStoredUserData->customer_number)){ //if(!class_exists('vmUserPlugin')) require(JPATH_VM_SITE.DS.'helpers'.DS.'vmuserplugin.php'); ///if(!$returnValues){ $data['customer_number'] = strtoupper(substr($data['username'],0,2)).substr(md5($data['username']),0,9); //We set this data so that vmshopper plugin know if they should set the customer nummer $data['customer_number_bycore'] = 1; //} } else { if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if(!Permissions::getInstance()->check("admin,storeadmin")) { $data['customer_number'] = $alreadyStoredUserData->customer_number; } } if($app->isSite()){ unset($data['perms']); if(!empty($alreadyStoredUserData->perms)){ $data['perms'] = $alreadyStoredUserData->perms; } else { $data['perms'] = 'shopper'; } } else { } if($trigger){ JPluginHelper::importPlugin('vmshopper'); $dispatcher = JDispatcher::getInstance(); $plg_datas = $dispatcher->trigger('plgVmOnUserStore',array(&$data)); foreach($plg_datas as $plg_data){ // $data = array_merge($plg_data,$data); } } $usertable -> bindChecknStore($data); $errors = $usertable->getErrors(); foreach($errors as $error){ $this->setError($error); vmError('storing user adress data'.$error); $noError = false; } if(Permissions::getInstance()->check("admin,storeadmin")) { $shoppergroupmodel = VmModel::getModel('ShopperGroup'); if(empty($this->_defaultShopperGroup)){ $this->_defaultShopperGroup = $shoppergroupmodel->getDefault(0); } if(empty($data['virtuemart_shoppergroup_id']) or $data['virtuemart_shoppergroup_id']==$this->_defaultShopperGroup->virtuemart_shoppergroup_id){ $data['virtuemart_shoppergroup_id'] = array(); } // Bind the form fields to the table if(!empty($data['virtuemart_shoppergroup_id'])){ $shoppergroupData = array('virtuemart_user_id'=>$this->_id,'virtuemart_shoppergroup_id'=>$data['virtuemart_shoppergroup_id']); $user_shoppergroups_table = $this->getTable('vmuser_shoppergroups'); $shoppergroupData = $user_shoppergroups_table -> bindChecknStore($shoppergroupData); $errors = $user_shoppergroups_table->getErrors(); foreach($errors as $error){ $this->setError($error); vmError('Set shoppergroup '.$error); $noError = false; } } } if($trigger){ $plg_datas = $dispatcher->trigger('plgVmAfterUserStore',array($data)); foreach($plg_datas as $plg_data){ $data = array_merge($plg_data); } } return $noError; } public function storeVendorData($data){ if($data['user_is_vendor']){ $vendorModel = VmModel::getModel('vendor'); //TODO Attention this is set now to virtuemart_vendor_id=1, because using a vendor with different id then 1 is not completly supported and can lead to bugs //So we disable the possibility to store vendors not with virtuemart_vendor_id = 1 if(Vmconfig::get('multix','none')=='none' ){ $data['virtuemart_vendor_id'] = 1; vmdebug('no multivendor, set virtuemart_vendor_id = 1'); } $vendorModel->setId($data['virtuemart_vendor_id']); if(empty($data['vendor_store_name']) and !empty($data['company'])) $data['vendor_store_name'] = $data['company']; if (!$vendorModel->store($data)) { vmError('storeVendorData '.$vendorModel->getError()); vmdebug('Error storing vendor',$vendorModel); return false; } } return true; } /** * Take a data array and save any address info found in the array. * * @author unknown, oscar, max milbers * @param array $data (Posted) user data * @param sting $_table Table name to write to, null (default) not to write to the database * @param boolean $_cart Attention, this was deleted, the address to cart is now done in the controller (True to write to the session (cart)) * @return boolean True if the save was successful, false otherwise. */ function storeAddress(&$data){ // if(empty($data['address_type'])){ // vmError('storeAddress no address_type given'); // return false; // } $user =JFactory::getUser(); $userinfo = $this->getTable('userinfos'); if($data['address_type'] == 'BT'){ if(isset($data['virtuemart_userinfo_id']) and $data['virtuemart_userinfo_id']!=0){ $data['virtuemart_userinfo_id'] = (int)$data['virtuemart_userinfo_id']; if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); if(!Permissions::getInstance()->check('admin')){ $userinfo->load($data['virtuemart_userinfo_id']); if($userinfo->virtuemart_user_id!=$user->id){ vmError('Hacking attempt as admin?','Hacking attempt storeAddress'); return false; } } } else { if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); //Todo multi-x, also vendors should be allowed to change the user address. if(!Permissions::getInstance()->check('admin')){ $userId = $user->id; } else { $userId = (int)$data['virtuemart_user_id']; } $q = 'SELECT `virtuemart_userinfo_id` FROM #__virtuemart_userinfos WHERE `virtuemart_user_id` = '.$userId.' AND `address_type` = "BT"'; $this->_db->setQuery($q); $total = $this->_db->loadResultArray(); if (count($total) > 0) { $data['virtuemart_userinfo_id'] = (int)$total[0]; } else { $data['virtuemart_userinfo_id'] = 0;//md5(uniqid($this->virtuemart_user_id)); } $userinfo->load($data['virtuemart_userinfo_id']); //unset($data['virtuemart_userinfo_id']); } if(!$this->validateUserData((array)$data,'BT')){ return false; } $userInfoData = self::_prepareUserFields($data, 'BT',$userinfo); //vmdebug('model user storeAddress',$data); if (!$userinfo->bindChecknStore($userInfoData)) { vmError('storeAddress '.$userinfo->getError()); } } // Check for fields with the the 'shipto_' prefix; that means a (new) shipto address. if($data['address_type'] == 'ST' or isset($data['shipto_address_type_name'])){ $dataST = array(); $_pattern = '/^shipto_/'; foreach ($data as $_k => $_v) { if (preg_match($_pattern, $_k)) { $_new = preg_replace($_pattern, '', $_k); $dataST[$_new] = $_v; } } $userinfo = $this->getTable('userinfos'); if(isset($dataST['virtuemart_userinfo_id']) and $dataST['virtuemart_userinfo_id']!=0){ $dataST['virtuemart_userinfo_id'] = (int)$dataST['virtuemart_userinfo_id']; if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); if(!Permissions::getInstance()->check('admin')){ $userinfo->load($dataST['virtuemart_userinfo_id']); $user = JFactory::getUser(); if($userinfo->virtuemart_user_id!=$user->id){ vmError('Hacking attempt as admin?','Hacking attempt store address'); return false; } } } if(empty($userinfo->virtuemart_user_id)){ if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php'); if(!Permissions::getInstance()->check('admin')){ $dataST['virtuemart_user_id'] = $user->id; } else { if(isset($data['virtuemart_user_id'])){ $dataST['virtuemart_user_id'] = (int)$data['virtuemart_user_id']; } else { //Disadvantage is that admins should not change the ST address in the FE (what should never happen anyway.) $dataST['virtuemart_user_id'] = $user->id; } } } if(!$this->validateUserData((array)$dataST,'ST')){ return false; } $dataST['address_type'] = 'ST'; $userfielddata = self::_prepareUserFields($dataST, 'ST',$userinfo); if (!$userinfo->bindChecknStore($userfielddata)) { vmError($userinfo->getError()); } } return $userinfo->virtuemart_userinfo_id; } /** * Test userdata if valid * * @author Max Milbers * @param String if BT or ST * @param Object If given, an object with data address data that must be formatted to an array * @return redirectMsg, if there is a redirectMsg, the redirect should be executed after */ public function validateUserData($data,$type='BT') { if (!class_exists('VirtueMartModelUserfields')) require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'userfields.php'); $userFieldsModel = VmModel::getModel('userfields'); if ($type == 'BT') { $fieldtype = 'account'; }else { $fieldtype = 'shipment'; } $neededFields = $userFieldsModel->getUserFields( $fieldtype , array('required' => true, 'delimiters' => true, 'captcha' => true, 'system' => false) , array('delimiter_userinfo', 'name','username', 'password', 'password2', 'address_type_name', 'address_type', 'user_is_vendor', 'agreed')); $i = 0; $j = 0; $return = true; $required = 0; //$objSize = count($data); $missingFields = array(); foreach ($neededFields as $field) { //This is a special test for the virtuemart_state_id. There is the speciality that the virtuemart_state_id could be 0 but is valid. if ($field->name == 'virtuemart_state_id') { if (!class_exists('VirtueMartModelState')) require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'state.php'); if(!empty($data['virtuemart_country_id'])){ if(!isset($data['virtuemart_state_id'])) $data['virtuemart_state_id'] = 0; if (!$msg = VirtueMartModelState::testStateCountry($data['virtuemart_country_id'], $data['virtuemart_state_id'])) { //The state is invalid, so we set the state 0 here. $data['virtuemart_state_id'] = 0; vmdebug('State was not fitting to country, set to 0'); } else if(empty($data['virtuemart_state_id'])){ vmdebug('virtuemart_state_id is empty, but valid (country has not states, set to unrequired'); $field->required = false; } else { vmdebug('validateUserData my country '.$data['virtuemart_country_id'].' my state '.$data['virtuemart_state_id']); } } } if($field->required ){ $required++; if(empty($data[$field->name])){ $missingFields[] = JText::_($field->title); $i++; $return = false; } else if($data[$field->name] == $field->default){ $i++; } else { } } } if($i==$required) $return = -1; //vmdebug('my i '.$i.' my data size '.$required,$return,$data); if(!$return){ VmConfig::loadJLang('com_virtuemart_shoppers', true); foreach($missingFields as $fieldname){ vmInfo(JText::sprintf('COM_VIRTUEMART_MISSING_VALUE_FOR_FIELD',$fieldname) ); vmdebug(''); } } return $return; } function _prepareUserFields(&$data, $type,$userinfo = 0) { if(!class_exists('VirtueMartModelUserfields')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'userfields.php' ); $userFieldsModel = VmModel::getModel('userfields'); if ($type == 'ST') { $prepareUserFields = $userFieldsModel->getUserFields( 'shipment' , array() // Default toggles ); } else { // BT // The user is not logged in (anonymous), so we need tome extra fields $prepareUserFields = $userFieldsModel->getUserFields( 'account' , array() // Default toggles , array('delimiter_userinfo', 'name', 'username', 'password', 'password2', 'user_is_vendor') // Skips ); } $admin = false; if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if(Permissions::getInstance()->check('admin','storeadmin')){ $admin = true; } // Format the data foreach ($prepareUserFields as $fld) { if(empty($data[$fld->name])) $data[$fld->name] = ''; if(!$admin and $fld->readonly){ $fldName = $fld->name; unset($data[$fldName]); if($userinfo!==0){ if(property_exists($userinfo,$fldName)){ //vmdebug('property_exists userinfo->$fldName '.$fldName,$userinfo); $data[$fldName] = $userinfo->$fldName; } else { vmError('Your tables seem to be broken, you have fields in your form which have no corresponding field in the db'); } } } else { $data[$fld->name] = $userFieldsModel->prepareFieldDataSave($fld, $data); } } return $data; } function getBTuserinfo_id($id = 0){ if(empty($this->_db)) $this->_db = JFactory::getDBO(); if($id == 0){ $id = $this->_id; //vmdebug('getBTuserinfo_id is '.$this->_id); } $q = 'SELECT `virtuemart_userinfo_id` FROM `#__virtuemart_userinfos` WHERE `virtuemart_user_id` = "' .(int)$id .'" AND `address_type`="BT" '; $this->_db->setQuery($q); return $this->_db->loadResult(); } /** * * @author Max Milbers */ function getUserInfoInUserFields($layoutName, $type,$uid,$cart=true,$isVendor=false ){ // if(!class_exists('VirtueMartModelUserfields')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'userfields.php' ); // $userFieldsModel = new VirtuemartModelUserfields(); $userFieldsModel = VmModel::getModel('userfields'); $prepareUserFields = $userFieldsModel->getUserFieldsFor( $layoutName, $type, $uid ); if($type=='ST'){ $preFix = 'shipto_'; } else { $preFix = ''; } /* * JUser or $this->_id is the logged user */ if(!empty($this->_data->JUser)){ $JUser = $this->_data->JUser; } else { $JUser = JUser::getInstance($this->_id); } $userFields = array(); if(!empty($uid)){ $data = $this->getTable('userinfos'); $data->load($uid); //vmdebug('$data',$data); if($data->virtuemart_user_id!==0 and !$isVendor){ if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if(!Permissions::getInstance()->check("admin")) { if($data->virtuemart_user_id!=$this->_id){ vmError('Hacking attempt loading userinfo, you got logged'); echo 'Hacking attempt loading userinfo, you got logged'; return false; } } } if ($data->address_type != 'ST' ) { $BTuid = $uid; $data->name = $JUser->name; $data->email = $JUser->email; $data->username = $JUser->username; $data->address_type = 'BT'; } // vmdebug('getUserInfoInUserFields ',$data); } else { //New Address is filled here with the data of the cart (we are in the userview) if($cart){ if (!class_exists('VirtueMartCart')) require(JPATH_VM_SITE . DS . 'helpers' . DS . 'cart.php'); $cart = VirtueMartCart::getCart(); $adType = $type.'address'; if(empty($cart->$adType)){ $data = $cart->$type; if(empty($data)) $data = array(); if($JUser){ if(empty($data['name'])){ $data['name'] = $JUser->name; } if(empty($data['email'])){ $data['email'] = $JUser->email; } if(empty($data['username'])){ $data['username'] = $JUser->username; } if(empty($data['virtuemart_user_id'])){ $data['virtuemart_user_id'] = $JUser->id; } } } $data = (object)$data; } else { if($JUser){ if(empty($data['name'])){ $data['name'] = $JUser->name; } if(empty($data['email'])){ $data['email'] = $JUser->email; } if(empty($data['username'])){ $data['username'] = $JUser->username; } if(empty($data['virtuemart_user_id'])){ $data['virtuemart_user_id'] = $JUser->id; } $data = (object)$data; } else { $data = null; } } } $userFields[$uid] = $userFieldsModel->getUserFieldsFilled( $prepareUserFields ,$data ,$preFix ); return $userFields; } /** * This should store the userdata given in userfields * * @author Max Milbers */ function storeUserDataByFields($data,$type, $toggles, $skips){ if(!class_exists('VirtueMartModelUserfields')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'userfields.php' ); $userFieldsModel = VmModel::getModel('userfields'); $prepareUserFields = $userFieldsModel->getUserFields( $type, $toggles, $skips ); // Format the data foreach ($prepareUserFields as $_fld) { if(empty($data[$_fld->name])) $data[$_fld->name] = ''; $data[$_fld->name] = $userFieldsModel->prepareFieldDataSave($_fld,$data); } $this->store($data); return true; } /** * This uses the shopFunctionsF::renderAndSendVmMail function, which uses a controller and task to render the content * and sents it then. * * * @author Oscar van Eijk * @author Max Milbers * @author Christopher Roussel * @author Valérie Isaksen */ private function sendRegistrationEmail($user, $password, $doUserActivation){ if(!class_exists('shopFunctionsF')) require(JPATH_VM_SITE.DS.'helpers'.DS.'shopfunctionsf.php'); $vars = array('user' => $user); // Send registration confirmation mail $password = preg_replace('/[\x00-\x1F\x7F]/', '', $password); //Disallow control chars in the email $vars['password'] = $password; if ($doUserActivation) { jimport('joomla.user.helper'); if(JVM_VERSION === 2) { $com_users = 'com_users'; $activationLink = 'index.php?option='.$com_users.'&task=registration.activate&token='.$user->get('activation'); } else { $com_users = 'com_user'; $activationLink = 'index.php?option='.$com_users.'&task=activate&activation='.$user->get('activation'); } $vars['activationLink'] = $activationLink; } $vars['doVendor']=true; // public function renderMail ($viewName, $recipient, $vars=array(),$controllerName = null) shopFunctionsF::renderMail('user', $user->get('email'), $vars); } /** * Delete all record ids selected * * @return boolean True is the remove was successful, false otherwise. */ function remove($userIds) { if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php'); if(Permissions::getInstance()->check('admin','storeadmin')) { $userInfo = $this->getTable('userinfos'); $vm_shoppergroup_xref = $this->getTable('vmuser_shoppergroups'); $vmusers = $this->getTable('vmusers'); $_status = true; foreach($userIds as $userId) { $_JUser = JUser::getInstance($userId); if ($this->getSuperAdminCount() <= 1) { // Prevent deletion of the only Super Admin //$_u = JUser::getInstance($userId); if ($_JUser->get('gid') == __SUPER_ADMIN_GID) { vmError(JText::_('COM_VIRTUEMART_USER_ERR_LASTSUPERADMIN')); $_status = false; continue; } } if(Permissions::getInstance()->check('storeadmin')) { if ($_JUser->get('gid') == __SUPER_ADMIN_GID) { vmError(JText::_('COM_VIRTUEMART_USER_ERR_LASTSUPERADMIN')); $_status = false; continue; } } if (!$userInfo->delete($userId)) { vmError($userInfo->getError()); return false; } if (!$vm_shoppergroup_xref->delete($userId)) { vmError($vm_shoppergroup_xref->getError()); // Signal but continue $_status = false; continue; } if (!$vmusers->delete($userId)) { vmError($vmusers->getError()); // Signal but continue $_status = false; continue; } if (!$_JUser->delete()) { vmError($_JUser->getError()); $_status = false; continue; } } } return $_status; } function removeAddress($virtuemart_userinfo_id){ $db = JFactory::getDBO(); if ( isset($virtuemart_userinfo_id) and $this->_id != 0 ) { //$userModel -> deleteAddressST(); $q = 'DELETE FROM #__virtuemart_userinfos WHERE virtuemart_user_id="'. $this->_id .'" AND virtuemart_userinfo_id="'. (int)$virtuemart_userinfo_id .'"'; $db->setQuery($q); if($db->query()){ vmInfo('Address has been successfully deleted.'); return true; } } return false; } /** * Retrieve a list of users from the database. * * @author Max Milbers * @return object List of user objects */ function getUserList() { //$select = ' * '; //$joinedTables = ' FROM #__users AS ju LEFT JOIN #__virtuemart_vmusers AS vmu ON ju.id = vmu.virtuemart_user_id'; $search = JRequest::getString('search', false); $tableToUse = JRequest::getString('searchTable','juser'); $where = ''; if ($search) { $where = ' WHERE '; $searchArray = array('ju.name','username','email','perms','usertype','shopper_group_name'); if($tableToUse!='juser'){ if(!class_exists('TableUserinfos'))require(JPATH_VM_ADMINISTRATOR.DS.'tables'.DS.'userinfos.php'); $db = JFactory::getDbo(); $userfieldTable = new TableUserinfos($db); $userfieldFields = get_object_vars($userfieldTable); $userFieldSearchArray = array('company','first_name','last_name'); //We must validate if the userfields actually exists, they could be removed $userFieldsValid = array(); foreach($userFieldSearchArray as $ufield){ if(array_key_exists($ufield,$userfieldFields)){ $userFieldsValid[] = $ufield; } } $searchArray = array_merge($userFieldsValid,$searchArray); } $search = str_replace(' ','%',$this->_db->getEscaped( $search, true )); foreach($searchArray as $field){ $where.= ' '.$field.' LIKE "%'.$search.'%" OR '; } $where = substr($where,0,-3); } $select = ' ju.id AS id , ju.name AS name , ju.username AS username , ju.email AS email , IFNULL(vmu.user_is_vendor,"0") AS is_vendor , IFNULL(sg.shopper_group_name, "") AS shopper_group_name '; if ($search) { if($tableToUse!='juser'){ $select .= ' , ui.name as uiname '; } foreach($searchArray as $ufield){ $select .= ' , '.$ufield; } } $joinedTables = ' FROM #__users AS ju LEFT JOIN #__virtuemart_vmusers AS vmu ON ju.id = vmu.virtuemart_user_id LEFT JOIN #__virtuemart_vmuser_shoppergroups AS vx ON ju.id = vx.virtuemart_user_id LEFT JOIN #__virtuemart_shoppergroups AS sg ON vx.virtuemart_shoppergroup_id = sg.virtuemart_shoppergroup_id '; if ($search and $tableToUse!='juser') { $joinedTables .= ' LEFT JOIN #__virtuemart_userinfos AS ui ON ui.virtuemart_user_id = vmu.virtuemart_user_id'; } return $this->_data = $this->exeSortSearchListQuery(0,$select,$joinedTables,$where,' GROUP BY ju.id',$this->_getOrdering()); } /** * If a filter was set, get the SQL WHERE clase * * @return string text to add to the SQL statement */ function _getFilter() { if ($search = JRequest::getString('search', false)) { $search = '"%' . $this->_db->getEscaped( $search, true ) . '%"' ; //$search = $this->_db->Quote($search, false); $searchArray = array('name','username','email','perms','usertype','shopper_group_name'); $where = ' WHERE '; foreach($searchArray as $field){ $where.= ' `'.$field.'` LIKE '.$search.' OR '; } $where = substr($where,0,-3); //$where = ' WHERE `name` LIKE '.$search.' OR `username` LIKE ' .$search.' OR `email` LIKE ' .$search.' OR `perms` LIKE ' .$search.' OR `usertype` LIKE ' .$search.' OR `shopper_group_name` LIKE ' .$search; return ($where); } return (''); } /** * Retrieve a single address for a user * * @param $_uid int User ID * @param $_virtuemart_userinfo_id string Optional User Info ID * @param $_type string, addess- type, ST (ShipTo, default) or BT (BillTo). Empty string to ignore */ function getUserAddressList($_uid = 0, $_type = 'ST',$_virtuemart_userinfo_id = -1){ //Todo, add perms, allow admin to see 0 entries. if($_uid==0 and $this->_id==0){ return array(); } $_q = 'SELECT * FROM #__virtuemart_userinfos WHERE virtuemart_user_id="' . (($_uid==0)?$this->_id:(int)$_uid) .'"'; if ($_virtuemart_userinfo_id !== -1) { $_q .= ' AND virtuemart_userinfo_id="'.(int)$_virtuemart_userinfo_id.'"'; } else { if ($_type !== '') { $_q .= ' AND address_type="'.$_type.'"'; } } // vmdebug('getUserAddressList query '.$_q); return ($this->_getList($_q)); } /** * Retrieves the Customer Number of the user specified by ID * * @param int $_id User ID * @return string Customer Number */ private $customer_number = 0; public function getCustomerNumberById() { if($this->customer_number===0){ $_q = "SELECT `customer_number` FROM `#__virtuemart_vmusers` " ."WHERE `virtuemart_user_id`='" . $this->_id . "' "; $_r = $this->_getList($_q); if(!empty($_r[0])){ $this->customer_number = $_r[0]->customer_number; }else { $this->customer_number = false; } } return $this->customer_number; } /** * Get the number of active Super Admins * * @return integer */ function getSuperAdminCount() { $this->_db->setQuery('SELECT COUNT(id) FROM #__users' . ' WHERE usertype = ' . __SUPER_ADMIN_GID . ' AND block = 0'); return ($this->_db->loadResult()); } /** * Return a list of Joomla ACL groups. * * The returned object list includes a group anme and a group name with spaces * prepended to the name for displaying an indented tree. * * @author RickG * @return ObjectList List of acl group objects. */ function getAclGroupIndentedTree() { //TODO check this out if (JVM_VERSION===1) { $name = 'name'; $as = '` AS `title`'; $table = '#__core_acl_aro_groups'; $and = 'AND `parent`.`lft` > 2 '; } else { $name = 'title'; $as = '`'; $table = '#__usergroups'; $and = ''; } //Ugly thing, produces Select_full_join $query = 'SELECT `node`.`' . $name . $as . ', CONCAT(REPEAT("   ", (COUNT(`parent`.`' . $name . '`) - 1)), `node`.`' . $name . '`) AS `text` '; $query .= 'FROM `' . $table . '` AS node, `' . $table . '` AS parent '; $query .= 'WHERE `node`.`lft` BETWEEN `parent`.`lft` AND `parent`.`rgt` '; $query .= $and; $query .= 'GROUP BY `node`.`' . $name . '` '; $query .= ' ORDER BY `node`.`lft`'; $this->_db->setQuery($query); //$app = JFactory::getApplication(); //$app -> enqueueMessage($this->_db->getQuery()); $objlist = $this->_db->loadObjectList(); // vmdebug('getAclGroupIndentedTree',$objlist); return $objlist; } } //No Closing tag assets/images/icone16-more.png000066600000140272151374526160012251 0ustar00PNG  IHDR0܋ IDATx}xUǺӞz{zPhA[wĉQBH J_Y3߷3k<-No'">}ʇ~~u{]Ց?2c@[NqZHFR}Qzɤԇ>m߼2)7 !Z];\\N,yydmGg5a :j9Xt6s}ՌR+@} 5 y;#-Zw/?+^ _(r—_Wb ɯu;)} 47>S_N\lO8=Do^a-?х/VYEP(TTF\ƞϞ V>TqP v\ ? s[툘қP;s_WXWxe]}y,t:!?RI~*(¾Ox㎲eF M+E=gVPCpWݍ]=[ᄸ gDCodm Me!dМP9ZN".@J(vypZzᦶf>2sŨ q-Hr(j2hPh&;#Sea ŅKPU@^~]i]_[*=1֓gh|ԑ. MHj'w $@]Pv<"4K?}۪KPBY] e+΅K' o0yW\O7vb0Hu?vW!mh &qf7Jp|gX9N)$\7C>ښں,`54Oh<](OB@)b4x{\[fFE~2mue]܊TGIO2tJ"^F6Qia31%~cb; "Nȑ#8Αѣc~HV 3Mk  s$ͮ3w:v c,c-Csa xayos~~3" m+gz "NjAv%EB 8pꆹFvзrsEy>c:Z89[X;o:^R7Ƚ^3G_: <O_p9CFD^}<%n‚+hcy]sHL8ۇ8 8`5F_' [xo=t-] 9+OKIV6uWa`=#D Xno 8,vv,.ZBw󶃅/OK!6X֞ftaT cGG1+U_ ' s,%8 %/|~g-{ZS=@Us*kQ_:oB/AMs9W7=F7\wd:c``!iU%&㽨"ŕiF4OˊS!5|TOH)E@)=R`cZ4(~ϻcj㉖j C+yZF >:G$x4Oh㎺7uÇ5uewUH&Ny)K_y( <;/2<-uԆڎ;O O )ο1LN ykik;(/5cyZF eZ܍kcH+i*msGv|^YT` ZFW? M= HZ$byZF }Gt-q75Iy-RFids vs yZCKwcp76t XHQj;9WWڸ9 Heh BAI9BCK:F8%&S!" 2ZGmT lfNqGq8p8p/2M€P[IP_t69{(3)J>7NIC A MzC=T}}uENS>WA"1xCYKc;w' -LX.+JeX!2vQYV X"BrU|,>:EFXZ)uJUk4:<%V"$3[F3{ ,DU7%eť$-%bѕ 6߁wԺ,v7KEte[\of> a'*B,#-q2;( u(Aye5+*QAa Sihi6V6."-R X [Ry&4ஸν& h:{^>;H oZe5]mDuMz 4@:4& %Ä:\[+~6Gs-*3p]L@1"Ex:E )K7_^e EFĘoE :0XTCuy.xg`3TG("(b~x5οdd| E $) ~硹s-BZ8_ ?ň0q]wWbo8X9{c5L#vK@퉟$GIc=N2-~B[0:$1́N}@CJ#b3D)@^x(- ~{8<qgy]껇^tvv-bByq\C 8,azzce`|f,%>^qF_O[e ;z(%YC ]]=$e$(k?"1~$Km ^? )t"FF;6<ƒ ~W#,7HgyCx 5ak6"і,ϣ x%^ƫxM†6x:E1a ctt k򶒳a)[hܑ#~R"L찫?Qqg~bY}azpįoH6!v6\䯍{nՈ"hO<[IKofQ1 ~1J<[f" F^cAN{]4б,zT8p8p0.#"\Xp۝BRT ?TQ{N̝;wPDO%;"c`QWQꋪxtբ(EdB C3y1Ș܅QND*3}c8%)4pJ' xBbDU> CM-5Ġ 6@q Zjs'.?g5KpgDt5pFA.錗%#+WCB̥q4/0|>]DUqYD[<;]ouQ'pM)>bz8)C5O<%y ᘣ$drшcCH}t~cwG.hayBNܑqvz)K ^JcV.(ɜ?o?,E^~ W.D_8p#_v΂teCZP uR nO|"0ݡRcg F<$^/_oJ<wrt^?dR G0 3J4g 5)[Cx RjKA}',_ W++ZZfY"t%p#pʟP)HzfFoE_B_zRʿK36 [K=hvC;$u D{h[4Gau> +@Nʽ)1gKby% h=s&ۃ$BG貜nhg PV/CHhwcFjZ#jEoK'-u|c9:d)܉;ȕ 5bq]?By&2>REPqz@=3$VOL򑕒@_MfB\,ar`%rR CJF!RXꯃ(,oa#AyƴL58~8}1BTy 3qٯ)]*f~^ #pYuKwL Ϯwv3V "024¢q {aJDWvf)+W_  'a7ꮳtC2o3O5Pjju_P …HxA-e0$w*>.uj7s}%~Ƴfh$#<#cdChM8f D@&ðH#Fqw+4:\fk #23 (˂I̘t]LDGv݁DJD?dV X#_ eLzq{!9N^{%pA$^ ,ADe*)1ջQں>( iAw[,H:\_8p8:ط;5oP[#k5~9'>vԆRaO->Nvp!qQI >0+'"*sN5%ˏ 6ԖS %8AIQpʌrPPQQjK}Ҳr>)ܼiz[:Շ.tuvie+G(`cc[[J[oEpcSK+r3YP ]cJH" / f.&  գM-MMmhiB[3iq6/@nTna)j_^ e(+$JVGHmZZ'`s{&cqE1Goaٸ$%1dpzUU-#%?MTP ܻhkkC'8n5iH;{b8r}dl#(9Ɔ&ҥ hk\WKX*fK}-ebNb֋/ a}DPh0]ݨoh>Nm p;ZqVcKC-:~ZrrpT`ttwڍnl 6쵫AWk#{z@})Ғ Zndw ,! #GY/>}x5 rF 3vޮ6Q{ 16Z!51 qx?z}8iwce=z<2 2G>VXw!233Vw6dPҡ#wt?F?W൹8p8p7 "| v<\'{@RgσX&%˷>wtLD#Oí ?A sȺxfmhRG[ ZU Tee*/SZ,2l,"\jSN> tB^p=>p {[(9Yި[*eIY&KpLzaɖT8Sx[mSmTPO^~t7/HmOMCIzmܺJx^E_%4^yݧۼ8Ȋ,6⭳Lǻ Oma E@P<9pޙ)G||=Pd)zⴓpZwI/ΘkFX` ު lǔ& vPHHwns,AMPi>?ހӌ=~0&@- V2 R=eX ފqlLBZMӨ2%xDT菸t^4ڽmrW$h G`4I]@%P$w!f 2<7(Z 68A҄,6k\*a1Ɇ=i}4ETLbp*[5|0 s ?'-;#42ť.YBI=';""2 w̹> GZaLDFDZhJ{Oq,m&wfx{㕘sn޺GIAb/WQX釆!$7".B{+j7l%?q;!OwQ\\twwEow][)ƋAxA1p 9ې0sa{΁K0>/8p8[Q&z>n.$)eýe콓@wBy )uԆRqi9({آkdO:jCmGFp-.QĒjd*MnPH(>l-',JXXp(=SAy28w,(ٴ | EDHTI|HQ~_F0C/ j)l2 C IDATRiH,f#XnPl2W½ơpE*a T=(g=@K)¡>4rj3(@}+yF=w!l;xAxlmج>"p' xtI+B:8F8/srسs'{6O|wxvLx>=HJUI6W@}%7JAS>#E fK}ap8p\Ĭ*Ǵ7M!HZ?Vv HO3xCc۷12;^i픎V6v^V60b~Òl +HHH`?cJIlL- kSS14 h߭f"+2%䴔?,5I(FڊHƀZ1LFFG-2MT}};tla܂AdNi&@*D/:#s!#{GW73<-En^>i lmfp-SZP9:|y7nvZF;䢛q3͍tQqI㲊Եt>{|p'(ͮ]GdTs==mhj.o.AiT|HyzaH .:&LN[i@ vk;iVF'LzIaènh-5>tLX)hbyZF"Jz x[^A)5uŤNhfBh]7![d & 2:~0%wuM-1Jİ evt+!/+deeL4VٙA^\."4*5=h* Gk=k}p;$7`a}i K0a `"DN$+K2|^U캦7`a([qC&/ۚ:eJ @^4&MWP!Do?')ps:gz,/v3ܔ_ف㵅 8p8xߛ.3RB1FF+ rhP@o{TuM}HJlllm``=]]>!-@[q!`&Plc#䖅)8ҏm8܏6"sЏB .R+ _DzQ|xKsy5%QS#K^O"&u= 5u ۔7>ԆRP_a $yp>*4^ݟaan$<>lwd;3g~fz, >W(b*x, _k?T+XK4&bvxx L3fz< >W\N$,"s/mQ@w`0RoG_Idozzsd+{!LX{OQ`[nC'< "-=mJGOw'3iiiLjZԴTr܎A20Dp# z5o#g ,?Ef6+ U~ieK& !\ێJ]Lu;P,&,xr\Vް򄁹("!^];A(dXuԵY8 <;ҧ E{zz`LMTMAS]Y;QI$dH<3e!?0JZqLrjPq~W+0|75怊 o`dCC.}}=6(&Pw"ut3ԇ CW1OhcPvF?+FIFFk?bk1П8pUpqq]>ׅ[)mMՕw`XMiT'Pm H{{eҶ'$>ԗGL'@S},rRQQ,te2>vw3;]5[ZZ )A)&'$-1.>P_m鎖XuHG׽ Ar CkހHz gv 7 I@cS3RR!))!lZz̛̬71=#@{S(~G s|NnБY]8<%Ek]P_ahhhdAb``Iɩ,`EE%E~7|\3.VC _⑹px6j]X#ޅrh^ R_|=ɼWWճH,B,X9Ν>hNi;8/PSU܁ 'ǞBFdċ!3A,$!'Sϡ My)g JgP pe_kˇ.;=#+Erw/*Bn~؄,&1 #mj%iҢOctGf$r`wgD4Y"NAQq _9s|Qq1v;{;%^Cl#5&w ?$݆ijsNZZ9(JȉsG@Rh2#s@8[[hh}騐􈾁wxϸut{](LfQz܍K03S'%]@sT :|v(.)e45kCM_*_ލj'<Һbe iZ_rUT06WFW***}cvw]RZƾDvchRWM1+.<775('UTV~?g:>ԗO}>@{H}t/ 'ˁ8pGnu{H)O@bGߟ; M@=aB ߎS?vk/>ǃxJhWLxϛ뺋vW,E[rx4i=ԏrT&iam@!œ$I^:jCmsT5`5ߎ؏ E$FF[(H:?Bd*?hQ' 9-#0!dEτku&v~|iކ`4(` z(+h !'sC8́̍@n}4Y=k4/jԇ)fWڏGW$cyZF >wR̀@̚w D֢ q0/!y$DFeP[C}+ p)*HpŇ#@IASp/`<,fϽCf3"o=i6ԖP H7>D&(u9A9Iqu\;?B'I@D~r': >ws9B" Z~XDHxK^׈op!kh5Gs)GY6ԖP H3=Q!| d^H$FDNf>VR2{`h@^ m+~by %>w PtŮe"hO$jI/ן,$ '?H3$^&D$gé{;*ne"P!OL =WCmL_"=AtbӲԱwώ} tF8p8p___-FeOZ>~~޸y^^ }]V5%Gܼy/2ZGm@Vx9<щWc#4OhUո'F[@{ƛ<%cO$oNbus?@75euVXYc̄f,=};0Ǒ0*H(kj8I'dhb|păxX2%9^2,ZP[a 섣7{bv"&{Vm8wX#7ĦM[ q{5u,HLJAmYѣ'q^RPL|'ɓ8v@1&`boR7iWWDt8EA|y@m-`ddNFsK Z픒曚;~Zl+'GƼn:2wSj+4 hcyIDM( e1ɬ՛E }yj#)ա1M܉3%pFӜs>~p B /\=%@$lB@/0pZ CPH~L2@n۶yۊ1yxӠ(Zm I#cB@AwCzclr?tᄒ^)k8y8Eԯ"jf8Mꩭa|haBFL-y5 n$8p8LF7#AW||yEOZo𷉔{tJmD$>y*8h wʓF|==fcHYS@[ₒ*.h@FU TQHd4XzAI 999EdṘNyȯfe0UA·v^W *AxK6S9zFŠ{"hmz{l"e@9ɗ V='Y:&*hu1】gA=Pd"-@?.iBsӳ/)BVA}LYڠr x Z[f4TDҼ7q*qubE៤'%T[x} ոk.N/'B]u'˛rh߹q@Da4K1~ ̩yzᦶf>2s\ȒQ_[b$?|^$j6"n#j zgS@Uz|I#X`]EVn'sA6 :Z"_x5 ªR ?x哊zfwxڋٳ0#0PQ,s *(tI%/[a Hu?v f"k7:92:6bK}'Ep%; "Nȑ#8I_"2ѣ8~N{puZBDg_©2'O^1s8,v$KธN:%N@"fAsTDzG%:Ng':wtnE)I3i XZdh 48Ku`[ ۼ+Bi8|5rl]·$PE )٩pqll`{6^6pbU6vYd`yNe)K&': 7[P%07))y@C>,kU҅#6dOy(S6Eئf K1v yWB'1].u\#+'&e݄]8eX)8}fл`cZOE-7\ue\":P؏B5 z!XkUVKZNWZe)wpǸd7k2i=~cx{͖jA,i2q(>l켑fhƉXg_dRҞ=]/cCH_3r[y "q6 ']p69mMqI6vƗǍxBZ5ޠlxϿ/8k?̍+%E]L3 #օ*.AnBs@7D?ƅ#CwgF>7 @SB3krPɾ" 19V.t.j To(¢0noOL2XY<^/P.N,>z~ċ sN:F'yJ wgEQ }5(Y?_ryx&00n)x5.-g<X@' ~Rd]=ctPq~|u"4X_Uѯ[6؞B_xs |qzD ># 'ޝņ"Ԧr<^k.?@_ouۯ<"qA/;1@Beѿ,׊. / |F@P!?+) ڶ Pyv3`:^Zh:?iҡD+a0J"'+l#TՀw`WކyJIɟR3݂ IDATT<GZdѳ-6L%tr"Bo"69~N:_4r%~0 *Pp\͕p,SI:  }L`OX .s :xSxN4<#c0}zoYT\vS@V &k` ibL{a,ۈ8p2tӟiIIl]>'ZoңPt ؃^> 0b=l;SI'Su@k+rvft74w!$.BqjVl#g"Ee(lAyU3j+Q_QRbfK}N~,[.o^5MGœP]Yɂ~ ?'7}[{()-GIE-Jʑt<$ ws hBey9JK˘ϖ|2+e7Cpg;&,#Cec/b_@;@>Lm!Xv m ">ÓYvtf<\^</ ॔>H>gb=4#J*QOs;TGLy{<,6-E5%{Iè..F}asQ,d w67#8B}KHD,^#ir;^HݤgdH vGVTUe' ;ae?.F0 dW@-,[A8j "8}FDe'9|v_ֈ s8e˨BOO/? I,5Jnl/ (lfynׯ-Ũ>\kŻvPR_ޑ#GIH@IYQgQQ3HMEl0tV!VmЏ8 ݈ Caـ¡B 0ԗw x ۄHZZ .ݻaaرs'@U֟< Ma 1a5]kIϑ"Sg=~g~d:={V67q;REӲG'y((,}xGWjhK hi)nAC\ @Bxqwww7 $$4=sٙwggf7;Ww/8zUz%gSHP;^:RPnK <~Py CDDǟ8KXΝ73rjGi=^ 癢ٖ6$o&?Uv^qqwV"Zn)D2r~A a.׬]D?[Oi9p: in']",$\L쓫R!X@dKM!hhj#$4!m7D-,vԞin#-WWR P%nDgr]qQ1qrgtrjyd']ⓢt!d2E^ĬnWytyϨ󑷖T8ȕ7MELl|>ͧ嗯^'X"ݤ.On^P\BE, GPDzxw^.kJI.Ȁ sHHJA\B4S;boݧ7D@4 ;Gɵ 'ЁGZE8 {.\1Z:8¥˸%,fK/_iS;KRד]Eh\.ɪkZ  v}3.9{ޛ9uq`WU YR/:<{Ҽ^gǡNuaI_'wW=?_Bor,X` ,X ލ]X-6PFy,$$Hr~]|H/AĽu\@YG˨M?jxo:ASM| nWP"X9T("(|?PBqF|D^dlm`ox'АLwiya\B4? <5N0Il+!gqg*XBd<*T7|="7-/6?/cv2c䔐a pDZq} WTy( TH1?xٍ(Hمߛ'(@2@0)GHI*#wnQg4>K#MKE0) ,~NO{l0O$?2qFX'"1 6[ >(!W"3(>L}yt/]RZl #6HsHK FoʼtS@rdۜBnʯwq.#Ak Rw L~Bef(&]\H &b,Xzt"}&$Kk(GI8AcbC~0* 56Ic{m*мu)Lgi^Hۃ+/:KykCJ$hoE^s3B@_J-ʨ$Háv;0s:veTFN.Q|yGIڄ`Ű%x%6,Aq8KlK,cxyou Z$ &&Pzq\~9c4ƹ~Oo@mgbl| ,X` %V;9/6߆"Qn%jM3 +cSs<56Kk+܎h,bA4A~}SO.bZ=m/= E'@W HȄ22t3҂\pvj0z,Yl4Vּ;hvkH 7uO\ 2<%Ņ(,,@HH0-!5xgJhz=w*!*Qjo&@MCq("< 5xodBl4a cHU ci^M4gB @41y?35U}yVitzOW%2ǡgv=($-i*[ѐ[2;{HK5"@{>:T$%ġ =8-O@kZs>_緆th˿ d!6:j➢WSL/2ߊ6.MH^ 3ўGt#_3 2r N446 W@GcMθZ^uldP%]e#c^-ഝgb!倠GbJtɫj#T2{܉E%;Z ,)ޙ7!^ -S"NeglOG఺+]1O˹7ě/4_ ,X` 8ࣘ*اi>)%vk'Ϝo{T>}njQ 5NO˩_K˔hk4z]ex`KE8Uo.:i>-vԞ㡀QUahЁ]rGaQ>T˺*g[9,9orjgWBx)Ғ`lƦF043fhJhko"w^ B#zy<t xe$% R\J}Uy | ŝo._; /YQG/l\EV蕤,EiGa≈υ;9qBG2퍫W]"ܼ$9qQ8f rχҥF7w^ݵCYdd)M&g={%(H@@@7_i"V̙(>yKbؾ["3x\ֽ˯h24!,rJ W0=++rx 2WUUQq!agA8zX Y'7~!jj^@1rKGw*z gQon&P8ћYXVx->v&0y >xpVDgzYpVeme* d`H0k_?fCBJC!hh m--}X%j퐄)'wXHͳsx6`{o'jbn^SFnRU岶 hjjdbSί^lvZ)LuvRuH}_zw? wjr!fF5._- >}8?e_yiķ#G o} ,X`;FW+싫߃WH2b~m=..F*R<`]Pܓ$U)F_:l'}3Jo4j,% N7*9:?iFb[l :v\_; G׏.mq@Ph@%@ٯ RIp f.꼩"?ᓿfUJMV@% 3p0 ko'bb+cly*8sT=ݩ>Hre+%-P Ժ0 IH9Z (6" 5bpX5g":W͡\Q|= Y1g~H B`YJ9pHIGLf 4W8VuPޅb{ g~v2r[~tQԬ_Vf\݊K r"1a]o[o x}u8qrkGV~tֹd-eH4Va1kxGel@? q'tj5.X'i6V >0AP Bۇ0ig*9tpVZkhygUM>w׷ W10ŐilC@g`nd[9 gŏ Cfci5c}j` 0&` ,X`q%/M0\6"Nc#9[חs ݶN3Ұ@_|Uo,++5_.D"J87%ο p,|\Z%$o@(ݽ :ps8p}H!] +<| )z8.#8mQюMLc"E( Mx))T )=t p8*Bb5*+P^Vv%[_)Scлb XĖ~ %B|HH<@ahZ?3*ܜy[+y8gb\22tȑzskXv_JXzߎp:fF 5mؾg?׎?0Ӵ65ꏖm`'Qz ppu+.սm8z׍KA2jWͣempx.'[oW}Q6S` ,X`oRp, R/QʁоcKP꒡cnpkw8 ?Y~in_^_>;*uyn kI>-O#3a*?/Jx\Tp!<uٺrGm@݃p[sX?f~'gAo@_!HDґxȻ 2&ECa*0 D` BdP:-kG]8˯Sᛋ#:-XGЉ; dah]CP o?FH +U~ ̄ʟpzG462}$ۂ.?. .RYwX.2`I5OO1*QDɁѵL<]3'В o$8\á 3K:0a r4<~$9.B%, R Kkc}ѱUOzy0 k "qx"Ƨh%w)M5ɈᇷA,.S1(r bK6^Bj / 3>Sar2ҽks VF*nYtfLg:H|)Q](Zh$qYKI h?6c 8vt=vYa1|\vپy~?ڍpH:NHc݆Lez}R@70ʆc,zZPVZ8w<_ᇴU,adbNZ&.Di'.#U#ǞK][lŁ$f곉X'bN]2}DJ IDAT 6K%̃ixjhZ<X o8 CBx9h[{#y$GOd?!kVƍw>{<IDnfPz3wh@Cbqѱ]DӻXsD+v_"etPbÆLZv x"9Evvrs PPX{w"#n :qBr/?nkbk4Ԧ ⱘm髏֭%!O gggt 4x"g93 *o}ǤiY^w냠 x2`ʒn9 IM]ޟȧFW@5Wy,X` ,XxI`,2K< 1ijGÏeqWQwU[ިbtL}t$_bΡk7*7uSj͡ǁkrlTn93իgj(Z>#u@C@{)g~BBT9Cr.'kQj!gMd2]!Xd.W}DdQ@ cgўx+BIҮay'1 u0Jm"t8\KDGeQ4+@tpY:BYrJN7 H8(I<0Y0NB.q:r͈K.Kq>}!l#vWq\_q>6l.1g Zdn3D~OB_ D LRxJvh}bB`?qlLìA9$-9^'rX.2Xu )R%V7Z$}ڎ!M `Ƌ!>3p[sЂoޓ{MZ%ߺ5gDMwGzuH]i7q@%4MhcCliZcyya\$ILqU?4xkN3]f `U̸Bx AE)=n34ͣe e,pUJt'!xWsvi&C_.yb<]ɯPx}.54ͣeԆ2݇K̓p7aփ X:޽S.] ^<A3ni"2w"kr;Mr4ͣeԆ:h }ߨ ybčiw(R sҺϷ#} YƐi-6Ԗy@KF9" Xt0f^qBz]$oGjrj׵ i2jCm*K@*yO(ֆ<2OIJ'cCyP[Z-gHE,rR)>I˗.k·.}7xpusE2SӤ4͆ԩx]W7o+Ý ouX` ,X`3tl-vk Ni8! : xQP]4S;j?>5R 'NO˩h{v3 /I3_K/58>QF-yOrҎF-r᫞QJfp BV֡ UlhAUC+.dz"[ \svŮD7a]r g_x۠eu?xHQN>pohT F|:1?%edŻ eH4OXTg<7+>+p*G"2;6Yb|0]]a*+Z4!466.~r[ dAS2S4@WGl J90,< 0)FE'~ @Ьh A%^ axWԒ>O? zOs$HKW7,ICGW7Dx nK rA%iRq>e͉)ٿ۷j*.\QٻXA xĦp2㤧/%_݊:&Mux6ڽ9|PM -P_٘P&MD{D w5f*AD.tF$18E3\ncD$CyvRp֟s߰_ՐM c"y\$#0dHƻ.d*Sױ4rW iN -@46n i]ǐpfo~ և5~ cǷ#}#ی I2#O{;H(zw['P\|W % j W\uѲ~t8)O? Yw?p~" 1].8pזpw@,X` ,X`aG&k0{'0 y }%M9&Yq/\Eť'٭C+@NMMٳgqe"gƤ/_8:><4=I> Y,[An뀍@9d ߏ+x|a~EhjjBKKKיOKKC\\<|PAGiiⓒV? k>EA=`NW "6sh+*x1;}knv9F+ДX[\ \My&°a# Gh@:̍ѬMHUJ([џ!lȧ/Vӯ5g0yOoϿhʟ<Kfz$T~Bߠׯ:r?ڴÏ6r?jtU!_Kع@F30roitO>SˢA?"e> 4O!wMm9zIe,X` ,X`:zw\޾VV0AKfkim +>=6=FuPTTDzWcL Nv}xXSgdf!#3}Ã̶֯ >堠#6=.;d '7y̖S3l)Kad(rkrcȭi@^m6X rF.X20O P@ϝa$,"OM`db "6 AGA;wPAq)ʫj׊ȶ4>_T\rPK=$)3!\E%c嵨o1 J ;RprCupna +*+l2L4y?w\:t{E9hq)MqQdv?<@L@BL2c_T7 @(O|QD;sT:7/SNel[(LT71g ԝngG1/ 02 ̀ -F!FouN_HJ2cJ˙F׭[a1I] ΀7#hfߡCa;7>#H{.>[M8[S@SS.;ຎb؎& 쳯"O5 Q_ ?I8|IB^&XFwCp|R hiiӛYg9/XYe3J ~rgЛKh㌼9t̝r|_zNJ:iyi!qo+qx.v?_ƋPp ǎE? d0X/X[e1.ߵqI1e4Ks2W{'gF/ l?' ]'DdVtXռ]hr: /EkA"dm݂ҩS3f ׮Ö[^n滦0~%27@I=p{"Mۛ/kt;zs&5u,(9Alu&{@?Lp;'r‚ ,X` 0̎ F3t<3+q#v<߂Z3xjZ*+Q\Rlxxx3S2F6F(s~%C&}S20T4 X:Pҁ'(@0ET}9~41W,vÊ[;"+;.psCW'( :BKEGO!(+.?'N3eJX&rإ ҭlAƏM U̬,!4, wzq3T҂Z MtLvbkm:lR tvHfmlkJHפ>c+ DXh8ddeoq/H?-c?4-A(,Z]"8X\a3 a1046M]nUXqJz&g\ 4M砖@K= ;aJ&ߴ綀-Ηj2=rr 5Ð.;ORL98qѣ|6olik\O#U= |,ͧy4D/cp+v?1O IDATAGӡ;t瘲&+(Q 9 .Y;$dH&#*FPB$m%JߣHw/oA=6F} ,X` ,zౖ<1 M,`dn#KG[9Aߘ 4  %D6]Ajӧf$T\"(";'Q`0F'/av'-"\[.,zFCYrR .^I,"ggr`|w8+lSm4GsW uMPE:60 G'pa|I(tOlAe} U5(#s?ENv.9&CAq%(Ge={!ކ Ëhܹw 05D^^\= wB/[! }k} *aa)i/pW } 98#:&^>~O!)*lhڇ!%1wyF[mqo_-`ee=ckl 1rDY_ t@^*ܪqH32Y% }K @xd4s)bDx""ōv*l߳z, x2UԡH H`%Vs%*\VB ^՘p#pLٰqk`z sLUb5,isyio1Ɯs(^ =꩸l~Be\HŷGo o\ti';y4ilKap_֧wذ` ,X`8gisR/up ImiR7pPGD t7$uh݁s\7 퀼W>r,L>'i-6Ԗ֡uUcV;Qxs}ZFm-CRo!`Z9tG4ͣeԆ:F@1.:Z 脗@bkt4QjK ę ^.ݞwK4Qj[841LבK3]c4MhΠP2NiP AJ JV%Mp\'2OEoܹ-@w|883LYrx _?w׍={s<Y72Y#vd5 ^/8N?:KAmp:=:?< ,X` ,a "OGlq8FB% 'tKI@`þ>\Qk%F‰}O˩@NDJrJ[xAzj+trjG%.֏+]:y#ު_BA(hdt?Q{Rw}gpB7Y<6X)fBi'$\ptrjGi}G-> *fy7f>чBCfKi>-v~P7(#S, !YL F:trjGf,!"C/(ǃ\Oi9+,?PtFhh(밬k:1!AEg&.H;?s$H:>}O˩ݠz@儊0.a"4jP}O˩]`PRPGJș G@n=^Կ$ۧ(4S# LYgt-ؑG˩_oPSy5BQ{Zo}]?'f ,X` ހ  5X%5RN mr.?>Ixw6 LA g]n$4]=eYڂZapVH821_@n4>E) d+w|`mtݦhлF{!ی#M <>'tZ P5g6>0`,X` ,X`7:Rf(iz]/Jh$f]HVT2i7~¤~.=ȳCzCylKR% b i *1ko&3iG˨@'B@oظ Cy t|@%:>K6`HL)6vP+dBыP䱁!M3yP[ZgB4g>!.Vj i%`HLSuosUr]gہDr7 ou4G˨ uh݁)en. vqבYaO5!,:"$b\r:E;S:ɂ ,X` ,1UW/:x《o@'6. :y@.M2r}m4о zsdV4 hrf^|5/"@d6c{R,wK_4\\}{"vA31* NQ&jI-OdAԾރqJgh:inɾmא4bG%шi`E ޯЋ 1㙐4!e>IKr)a2)v~}a0#MP U-d#JRN@z3g: UUٕY` ,X`1x0K7{fyBgΟrj i$?P s ě>kIQZ~ ntoݙj6aSp8:AE8Qj1']N+ZCTa8CGd}:c#!wIo`.TOwP=nZ3 [P[*s4Y^$[~*jhĵzx0 3VyϘx=%zgG}чomyhPTEÜ%hP]ʩc:&L M48 дhDUbr5&]_`R`F`j`Mi3[Ϸg1-"q4oϟ `0 ׇۘ*)& "黎EI/DGh""[+;Y[6=l6t\ t27Be hksZuЏ{S(GBRI_K8!Cp%=J]sT#z[?y%@Z+b"3vw^|թxQq $:Ux C^p$ メ87g}/ߏHDLFX ɐ; !c"QTRo8Ϸg1KRSeO4slob`0 ! Fa:ADxnpɀS"ON 8!м9?0X` -O%=?ZeK b1:0D@$+h6Yp̚+/1R7DX4pbz49<EcqL">@9$h>19|{c$1dނᇢ0 z(ӡ&F4 07`1`4tp'q-8^EOΠCX:`I`w)n%Bc[9 yZ6lzGpq4ob&T{;n ,ৣOč^!Xr ?әG \KBw^<`ɽ7|{CR̨ S^!3I 1et2|ҫ: ?)mnwK>08% )^ꘆv)3X{?Ni\۳^1b6G305 #ܲzG,ƨwC)i=huNwL[x=`0 `0_'tXe ":5Orxql.Q>Q Qײ?1m\b6 Vh(bg_jvah!ÆDq4 0O w+؟ށ4π`E* Iw1T"I@F` YRzt2Q M7qe\87`_(}Z'" \m4/ F!X%ޓJZMbZ)4\B Yԓͣ5yg1VP,I^G"wG~c,OȠV Nƀۏ&iRtw޸$:%wY=R(6:%u_2(>ыIYv7NUuwc4^_h<ߞȴB~ @>h=|{#bh 5yrgj|{?1`0 :a|K)@v=p䫛8f_d@H2Y_\8# -^@CXy 1>F\;e_W4ԭ's l~@|iR^g0qcRyzGPv!O* $EZot $+n?Ii|iHc8\\0.Y KcឨJKOp,a`x=qxx$s^EzG,1TCM:6?`0 `0א2 +Qzn~X!>588=7y ?.܏PmKlD (Ns'Z>M& n]1;5$$\cIraš $iO1H> e ъF mm6H{aGVsrHHb ̉8RōbB!m:WX{9 - cD 2FX'aE">eHZ'c\=\ĐZ`dΤ`s|ۅOiXc30>]̼EK]8L 2 Kp4o]nyGwi {F/טz1C$ZOD^(|_cg!^)Ď _/g&\(ZOh<ߞŐTWx LDI n]wQSh<ߞ?O`0 `0>$=x;rFlpN [pүoq-9p^ޭšHw0b/LaV$!Zs^ee*l/h+BU7\lAI#Fi` C}rFQ\}ȝMobv{W`@Sk`9(3yeۯc׍Y l#-=t_(]NOlE>FtvbО`hzvFCI7O{K+ d"$C{0lZQBK`41t]>ES_)fK/:J-xtEYh~OBL` 8(c q$+98% I r+࣢L0紤zN$k!FL1@i[ db]6fuNi۳_$ɿHGR~E:q4oϟ`0 `0_/Y,=2Y=/q*yETv{x/#YޯS2\/"۞rpL$Yf\NN?AσP0r ⮧tlt։&(ٚ ڡP _Ux=k.^* DXۂY n XXxhA i n$K(4#ƐcQ2T|{KFE ITͺ-('qK~TLBx9THG]4BRSEI=|{K@G'*d%3 I]x-3odzT`hBLzӨ7?ܓ4^7A,FF/x0 磭M.nh?svZn6n#h<ߞXVgD-k0k,AhPYz"h 1jwsy",W`R bp Xk ,ZϷg1-"q4oϟþ`0 `0_^oB3F\W kq~@j^͗/[Ee)Qqh/93VXo;] l 4>`-y'ͪI@ah'ЋnިN}w; @.ii'58&10xFz 6c@;C%cobQ0w?8h $4 %Mob҉9r'OOH-#$1r 4Z>֩@xI@()*$qqBL =p!5d;H/*9Ni#2+Yy㷇se@\i8đtD IDAT} ~yIRPɕ7H=|{CIdp*UAAJ>[M%Dn|{C"q`yo!LVGYzNɫP< {H=|{c?\~I~ЖDR\,8Ϸg1T=u? Ƒ7~c@|{`0 z ѻ8=8|7W|a^ȷ/BZgw_}C@<=saݾޯSh&h|zQ۳Ct?FIp ٢rڬ66UvID?PSs; k_;p;7 QBfB~F@(D_&W+z>?>"`CwG֡۲8{=q60X m@R"ҕҷK봞x-C #w`[jBȓgGsz8&p k,7"O?4-#*9Ni۲3ù @qk(mƄoQdԋ+9Ni۳¥z-N-%|b\IuZOh<ߞŐ? .U%'?5B\IuZOh<ߞŠ.Tm)wƷouRO^p}3v;\vQ[:WOh<ߞP0띩`ދkYNxک0ժWRGh<ߞ?g#ɏM`0 ?M=һF>wpq`|EǴoF; tai L])߽F_k"YkZEeGw}۫rH"̿~l߉$ڙ; .=:Fɠ!2b+Wt0X۳i4-Q2jGm8yȒ[<! j=A a:4 O()/8u!:.E5/ ?,Voddn =ĥ )D/^3nЖT 6OР8Sԅ@X]_k 4OUDEuo -HH莖5X7 u]QF)ǿޯSh+_׆űui|ռ6f$+{Dh_ҩ=ܓ\=7Iš ҝ5[#O{.>uJ-Fqp{/p۳ԐkN9iߒ"纷sKsv 1^8oNysyg*tH4Y j\&t*bǭqM7FvtO\ pH=?VM^3x8qK:]F`n0ԺOCE)1 Po0d`:* ѩݏ8+#<dkp rqX90 crL`cW7Di۳r{DMqh `0 G巏m`H鑍<YDO+ j%n@+E; !9!hˣ HkᩉȎJiM=3)s@ SA)p41* MUD[i; ,;ȡypc),8 Z3OY23-2 Ѯs(ϙ/xT%hJ;NdTRsobӎᩛ*b.%ǹrID9l90 f|{>#c/CE%|Iĸ*q/'sK`:jxuݧ,^4/)qג-i۳Puo,B|$xL|.G-KHb.N g{zk1Rn' +殥,Dh<ߞŠ*yg)o2Ae]̻˹8%pz^FnAJ_;3=r88Ϸg1QEEzJ\׉h۳>'BH `0 ׋wW/Őz/._AR*5YkǪ%r~'P&g"`+gq]dIP 5jopܩSP-Y{ќEv4n#DkQ@tV utW`Dh'HҮO'R/BLpa:K$;"h7PmOdBSrn!u>?APmTyCQc"8Ρ.ӊt)|{xB"y{ x%[=v=9fлD~* hOJB>H_ËS`0 _y;]J~2HS*)*,{;= ,oPӒP%o,O4h7 Ӑ4EoaFD@nCuB2FR$҅IIԚ g'v:^t{(Iqg/܄sYwػ )]pg/;.;,?v14i@c>0q k|@ns ZZZH`g-ԯ7་+w܇ †{q-t\ NJOCkc: Ge\Mm4SH+(Bda+'z|eTUUY|;MtXX 996ָކ_p!֧N 6@wt2 YNrؼƇr q jZNZp1dfgƎcG[>tnm8m{^N~8Sc[['$ɷ%nCB(062D鵠0Xq·.45̝8ɂ<,9#k  `0 9?@s=m;Z3C];Hx0 7M;?9:@^h7*g!~"a,r&  k~Cb'xbI(0 GB@c:o.AğE+vU^;Z;:2/QH_"Hp뮿@տjᨙ)Ѡk/wq=L@CUh ,C?ơ%pr0Y=G<2.Ιȷwn~Rss͙h5CkP~ 5݁?/cESm9Es.MKr&*WxC4^clp7丩 |(j#(9~X+)kې⬐t~/Q>?!MM**=6y|{Pp˩Oh<8'Sjⵐ!ymYB'25ñ/>?Pm%Pj *Csx_E6\?4Wb7nq|8?e q'M0ch_ȻwӀہi0?Ӏz;fU_O~M7wΤoےAmfxހVT6}mRJ"DcґK$9w!G+ >P8Gia\Q5 !8R?$[lZݥշY4 !ѣk݊*9ל*1hg tfcu>h_'.rϫ뜳w=$ЅvW˷ˮᛥz˿8/ ka0 `0 ~`~ [\[YY|P[N|k emZ#,nm~rЖoP {we!8$vg]T t~V`DA}ÐDXXiGX;\|@(?:tȸBb>P /_{{dh"<4F#x#60>j'ӧNS\ȷ.ieh*EHq]pSd#i`0 `0>R~ٺw&xbz[Pl#ߞ5{6Yī͋Q2WSкB}ʗl2݋~o];!ef#c$z!Se"fOC̘x0^ޫp# 72&AXd4i$t?jM Ʒg1\Xh2'E4RFK#~(D8RfȌCTZW!X=w`7ƛ 5 s'E (ۋQ:`Wt/>D[oՐ`71o RuM!JsF}=lj\Y_puzRVD  lh Z㷢-s;zË)CHI@&i@ln;E }o#K<gVq qxP;+Щ^x\I`LFAGŨ ^U(q^͕ëG0,)H҇K6se s;ЖwaQM(3UgQtV }&Z4)%j%!o3ȱAhݎ(~ jAO0Aqb+'B@HOtwceHLEEwa/;b>>&gCD3<I!E 'Jg ,BCr-9yH&;ݥJx#->I}U `0 HmMYATsdf6WzdUR'&2.Sy_s`sT7 潬4Do}*co:e\w' '}sG6tSX٤Y&$A/88_K8v9=6(]yTUFvN.Tw}wBLv&B5:pa0ŸFǷNVRZQmWDNĞ q'p;w_y 9%+wo%QsmC9{/cK{8թ*_Uqh4n}3T+A?z96ڄ`˙(l GrJZgT1 IبgEe/X%&TCړ|/3it?y 6CNs5 3U9oLPRֲoГΖ=nPʺ>]:{ 5 9IɓoߝHO``۰. 8'lqƕoBn8ɱ6#3/m25p%`;J:h#o}wtheʨeں JO6 mjĂhryah!ƷoYiRL2B“ۈp%i8yf1o om9ܞ3i|2 Q95HxqzV#jx(9f 1 ԇα':ᄌqPFɊtx|UCD{p>-Oջ7BZ9IDAT1L>.mႚVC`0 `0 `0 =WhIENDB`assets/images/indicator.gif000066600000003021151374526160011770 0ustar00GIF89aݻwwwfffUUUDDD333"""! NETSCAPE2.0!,w $B$B##( R!!,c $PxB +*-[dඁ+i@ )`L ?'I`JGb Ph XB)0׸XQ# } No "tI+ZI!!,\ $P`8* 1h0rx8BQaV  !MDl!4%BBe PDY00!!,] $$I>Q] d"28 GqH9 A2ȀB", DH('4C \0`UL"r(!! ,d $dI`ìkBB m A72, (PX鲪 8@R%a K*D2E {$ft5C%!;assets/images/hide.gif000066600000000212151374526160010724 0ustar00GIF89aDDD᧧!,7p9#cJp6&)A 310^S\@D*0OAF;assets/images/icone16.png000066600000311360151374526160011307 0ustar00PNG  IHDR/bKGD X pHYsHHFk>IDATxw|?ϔlz#$j@@A&ѫ^EwQ^,bAAJ.=@ ٙ9?e|y}fvʞq_OsBMtq`m>m';2kZuu*GT3S_wQ-.O֘>s?r8pm:g|}[^g88U|?ӑrg>ixUc9i*+ |YM_f_f k*;?jwsucfeFi~{ʪ{ݯޱ˫h1%qN'лwbb0< deedQ:WCOLRUTّ+(c֤\k8.(>G>rwX<_+Q它 c23SrpƎ⢴Pg"n/O]e{Kzg؎ͯT__I=ߵ +:Eˋݵ\6ϮWUv~v`cO<^m}ɟbڵ;w26i+<dg|]rk6}s UU&ՑLpŃQ:׬fK٠=\a-}P´I_P!C ܓw HЌD\` uW'9V9sWGk?:OǟBlvCm;V}9)oi.)bbO^RSǔLmZ3a覺ƂʇDs}:[2=;799_7>_(0]r гgRV+\tQVet455E >Nm]?rv\"i2m1t%LN] (DyXҔťd2d6'-|N%LbůltjyO PUK3'Gߡkn˱$m5]~gj`S}L8]-k"cɆxw)!ݣsz? ؂Mg9=ˆBܓOΟqᅀF#8~?^/Ԕ9r|Y[[S.&dq%͟[Gy}qQ3:]X p U3zϊ:l=2@,xO> 4s%w=2Yٴ-VImV7+,@K^@p{/0q+Vuek_멋n NQ=]i0h4_TNw[ܤ\_C݋RR݊uK,x>>M@gLVOIkiu2\PdsHK;}[0@#W}H>35n|w=nl֞UlH?J_9}(:\K,Z3995־U]\҇cK [ߗݵkǎXTB莛ŢןX>XM2,|yH>h5-D~nK/]X49 >@PP#鯧ٿr0>iPIlY c 3o% !. h{g'أ?ޤ+h~JxG4(͏n_=ݾq.h~ٸ{6QTzth؛~T*`ۜDtۇ>.:7LZ;TŽ0bhMϏ e8%S˹_cA:TPw Ǿ,sWܔsٝO4̰x럶ڲ"9X|ݡWX^3 y`h_W~qUsk> uu7(9xt?q@Q߁֋k66ζA38nm+fxpEi~?Py{[n?wlRStV`ٲ_-,':̩ ޲?|wo`ʷn:?Qă篸-U 5_rWrs{Gwޗ>>9)zr>В%sE4 }=j@svZ_♵rL^kX'gs>m˵wW+y*/|`~§hTPAK?šy1m-wJw||TL aL겪]xY$2UCVl:btw~'Cqw 66OnhXNn7ѧψ;r\^cGy9c@Yف6sx @sotxkwe)fokSv6kH({Z_)+܅) @h2k~E?;|ћv/푗8NoDϕs\ǚwyO4~ --b2@ߨ/ γܔI]7~_ĥ|%PD.qnխ֭m04k1F.ȏiܥ,V*r[_p甔0;~w/tC<(l,;I٪ ̘1uj@N:uD\ޢjP a NyWHyvp|ȧ+~hR5࡚l.*7(c;/%sCuصʿ n%ݰ7xqq7qE܂d:~\:^ܧAFDy!pԁ n0G՚kK4axSy ]5/(ϰv1N-@ ZZHjt:N `8zl6W{6-]HH(1!(4(kdoW-)70\" wo+낮C55>&O={[.4 Bw<)O&++D1Ql}Ʊ 2'l,7ʼluX~oBkRkRkҨ5[|nY7666Qg=x6Eȹ,<{?ʾӾӾs^f/XVU hn\sqӀ`vW'q8rxociiyOxG㝍/UW?]ssܱ1ϣDwmq\ru{/l8qصGZ|P"\V8pvqJS}S}S+tӽ0-~E_%_porz>ˌRQh5#G֏3000OUV+i7TY=.s'~Od|9u]u15|Tю78nwrn-ѷ!!!wu*&UL9?[l*U=ŞbO%LK_b|:_N n~1nv1JRB$$1;bv`i Mf_w惪)pSEP@)9$%% ljjjcccc#`hht2u2u2~a h>(BEO'e7lfؒlI$ t >|4(`yvK@xOB? m_d6i@\ . /\ pfx'&St/^ԽX_j}" 5n }}}dl09yyyo7{FucA'=wݘİݰݰjgg(.ťKOKOKO >>N@aci_YʳPU+WŜ%gƭɉuAe ~7G[=fc}}}||| .y󀡣#H $NNN_ͯWrmɶd[2EȹȯkZ@3]3]3 *.RbP 檹iu-YMojwj/^jmM H0@ @fdc#%%%i ~?I~@~@~hټy'```i]Ӻ`x6b|1@ݰu#*F9ϯ^EȹPd(2yz?ս{zPW@jP\ W^; w8|P7!ww,|Y0c1cݢ<< ԼVZk@]E]y]9pC=}3sI¾} Y[[o~___l1[Nsbg1 bž|jfu;n>(qLJx~fMeCͷ|#&똅3G{e;;+T)S<<<ey Vb5u[ԭQ]ʺTw-Ə4ӕ>}4i>ּCAҞi::謣;;;}ZKܞ{p.s.s.8܏FQj:u>r VCk^kأGO3>0Z]{{쿣w`be)ۚn \3[3[x0Z[hݣu~n:uְ_udȐ#M9||| :):):I3fL7g9YS Mˍ0#`N['ԿY_^<VK7@JrpfmuݸEܰ/{{{7v )S_45;5I{8!< Uy#SHhտ"] ~/vpaA|S|S|Si1cӎ@Mu7nf=KKK$_/X3֌N"Xˋ8;;K%sv#|9l 6o1Bvc!q1Ǽj:VTrSx' :W>s\2\e;;;zi+c<,Э/8!O!B`*cxLSq9.P ' gplc15!c@ƀ0r\ `a dϸa0J5a~? 62ݿjUt+*pU*B~E%%%[+J Ԃ@n s\:rXX1+fŀQ(vĽ^q/.d [7}q}[דB!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!?k/@ wo۶jc.WccQ I^oK (,Igc,ܽ&{?dGGr970&>йs~^ h< *$W0nws3e˪U~ ^HR0@zzÆuH{E)۷u뗔r&F T...:lASEIHֆ@C4FkڑS]?,˒ϋ^zEQu:djZ9+47kݺEz$ @Ar<0\mɹ] ltc.ch'^o0--@Zfsj*`6/YNU%_DșP"n޽G0V\"ןBZjȲy044{j.h4O$E$,h**Ahnޱp8t,+JJQ.lp !Aw8y;wO(c^GJYVj8q!C(hm*.m[~۶ݻ?3QENK   A5k~PUONXlٲe"o/+VLܡC)<@vPEN+%l@$,h ξ±cb}ǀ2x睷z5}嗁Z㋢Vk4=z?C(rph1 3S].@Qnݲn "s.]t뮻ڵ{^8mn.,&O3gO z@ 23 Hf * DOСCbt:Nnꆆf=`ܹgSNz5l6̀\F`P l U$~uz/NV^^^^^ )sc1&ܼgWz%Zϵ6 mEi*]>i+y[sS[_BH_P>A} aͮ.e?7JvO kWTtȡCرj70^k}&]š֗'qQ~zƏVOFZ깣cv8Im} !^~޽۶1VWwȎrݺ ~5^E|>xϞu ou+'Ծ@+z1/;S& +ߴ#)@i?491fnn Lm@}}IɁ@\V7y2Э[F _P^0ƍ;x0PY{?G'~1mG*!/1gE骭^ 3{ޯy}z^R;{(9} 5<Bu11>0qQ:99={yeQ^w81cMK:vLLoߞ=|qGr^@#U0E;[6qs%~ ~q? -?o;eH[H"h'We_oN_śx/.!?d].ۍ?lXL 3 Ȳ :]\\N@ݻn8bcځn6NQGMoJgm/ܭ\J{S1[?Q8(*jn+++- ;bIM=uc*xs~uᕏ֦Gjr].MfbjOBBsv*(ع w[ZN(˲(N׽{l,m[yʬ/ (XϞ={ɝ):{:jIU]Pvĵpu6 4fJt`A2>Oޒ2BnuYܭ*V9d4/("wz^oqI$I:@ ^tlVj8p`$.q{nQ>>kR[ŞQJ'%?03]7zpo+~?.Hag^3EکmоWN3vv>.{.׫B]UQرZ|Nk{/{RgeB [$UwgJg\T*wѬP1/ y}o<$MT 7{H"ބ?Lӎ@꣬Dl 5񇔚MM/?*ElW`@`L+X:pF{kk]E,wX7o\7gk\#CƼP)ҔÄ3? eʆ MTZR\Wʥ¶4mm)3d3.m @N;>+W;>wh8! k @icMp`ZWp]ᔪ}7u_JKw&7ܚò{w;|PP޻wy]eX2dxֆ]I~Y|囸y`Gsϟ bu~[חrhY^8atkXp팩ƟCx>û8N{|;{V<3/Zbrb.{z%wL|26Cf4rN:+n+Eu<ז- /8|tcš|Y5jgހZ6wjyʛlG#B!a% Z+uz`=|P?H{m~ZPSSl|||5 6qr:H|6XN+)}p6.[iU4wsvmm3en\0+J9nt{\u7{UVw)Ua.S6;տgW}ƽ+=hnlpdߑ-6;a%/~}kK o*aщ;g*@髌Wbӫ6ݦN&;rC EN$_x룝6w75n+qmnݎ.K+lf |Rڢ^OjzB]+Q ԃvC'_{5wŧLudjTrݥ:K y!+h>gA^m|/y4B\}A|@KsH~¸O:ʱ~hB5ԧU+~Μ;au[I=BK>Hz$URd%AIƱG1Y' /hʴKŸ3 +B¥{-Ŷ8!;*P7պXg}S<S7mŷ`Al$L?ot/0=ٺѰL71j0!B!B!B!B!B!B!B!B!B!B!B!B?_{}G23oW&pu11<p\Ν:SNx< .\pVFW_}5裗\r@I޽(qU7t護 Ng ¨Q ݫGKWQQZ-0cFnрj0h,,ZV+QUI$OƂꚚzO0z0cbh/TU &FTPUAT1/rNfb$ztM4ؘʠHeP&ג%;wE @s3PZoyͪ =*:ݹ347rgu:i_~;[7_j n@BG xZZN\$ V@$YT5hF6!%%@]χqv(JeeI ux<cֵ' ~0(56\k'/VŢG(ʊj:@_QT)y@=L&PnWޝ:IeP$<$$4446إKNO.]Dؼyڽ{#74dg6[Rx;v?ԭ ddX@0xhQ(Z^u' (rIold9?KKC TVeeQQ ?**!lt: p:nw8lRSO>͛>66:kOJ FZmRR\\sY>|6yL Lz `u5PWpqq$'͢8_f4#!A I^[/0fhD1.hj۳ʦ@8S' 66* \.Kb5kM+ P`yye%r-\בVk@^^׮]7 /11 IIȑS45\!(,"e4j4j4" I~I m]{B!B!BzGy뮻8x>tTUU܅e1U}aȑ#fSN:: !(!!!!!hܰ4fϮ xP0$Ue ((hm=~ht`2|[(bccccc?05(BYzG @  # El&d2f0y ,޿O>}͛7o޼9ECZV|$XV0 ,˲,v~Mh[xȌc!HEQ|H .@QB3TUUU59Ҁг+Nit:NybX"&xe'gNFl6MEC@"p.11111&ߙ*,9(B e@<@Bs҇S8s Á)dprw]8Sl6- F l/IM(œɝ(>|qD14^J1UUp ' ptrSZ$ =cz&**D QQ"lΝ;wtS"!7ޑ>U84BS0 c,2\sΝ;7p (B =g-Rr(,(2(,˒zNIRhBC÷~.Y/"cN' :8NQB ,KR ~bII80քz{!08rd&z"%K":]x|pL&!PRY۷M9a֣Gl>HWv$@N:>5I ߩ ~;$?r֝䥥. r\^HRK  r&g Pvr1lG.cF) %&EEZR  e9%?rGlN0QjxF =v$ H!';`C3 z}=+d ?/LM)0BS2(=t`0 z&1 z<55l X`BM;I А-"S$2`@ qhzz'ޓknvBoue`'=lB#KJJJJJʒA;}V 8fsB~Y際 =`Ю]u: P*4r6#'@(-DQ>rTjZmTTBEG]v9p)Ay(4r6N$eTVtf^V zVaVj ʲxp_!c!&>H8ExΝ}֯{ .xbIJ/.^ BMc#M;fKKbbY* NLْ{15ظq˖={hj\ЛH=hB;c(//++)a1Yv(Ibcvp?EijڹHHuhlX(0B!B!B!B!B!B!B!B!B!B!B!'3px<70VZZZ2333kn 8d:("Ms֚֓5kn|j`Z:pZ/^HH0a@#r}}}=аbŊ1y)c?lXE p:]|1(r"?_$I$}ݣй3 ˀ_~ $%]h4_$'_s5DKHp:[Z=ںENKBOHHH8Y. UQ[oVhnnn!ljӡEΊ<ʐ%hdoE7 P䴴ZFvngLAHr-X`q:N)9sTuʕ+Uݲe |12(rfi8N~((((P eL@ZUMKKKtGڑAFsbfبQ_ HR(@1gϞ=@ [g_wuEzAer< FNkܣGڵs4@Q4i8 1jZ0dY#{_ owKFәCANx`POl >>P @ط/VۧO~ Z'/|BNRjrZ%%5555.W8OQTuv!ttꔑLM_.Pc '3C z`8~YNrr&)K'N$h430f(S"B!B!B!B!B!B!B!B!B!B!/۾}CFF0(48E NҀ.>|pҕ/^l laƏnФTj@zzQSOݻt@E׉!~m-`uu@k+cZ-t@@U@ T?hUQ<`ɒ]f[71gϞ={E9{^;z;:F٢tzeh,k&ӉA(.nn֯߹s^tz6Ԕ8o^(pBNu,@EGGGGGv;`ulNONE9 n;(&$C%DZ-]DG24B9c%"p~١Cs{ЌF`L~@UEQ SOcu !ٱ~cl܁+6ge:N+I33C;vԉv3;RRRRRR8n˖-[la,AE֟cYّ#2ʵ"FtSX8y^Xh{ TS P555555prsssssO}յ׫< 82w(aB"R8 ) p0\pKZV5tr#vp{ϋBX/999999Y~rFuiQ8V?ӝBNvS: C:: !w%!B!B!B!B!B!B!B!B!B!B!B!B!^D~/l߾y3cZ-LV VW~ddtٯ1` 766.8p@hiimcÁ1czޝ^?FN$ b+.zر_?nmiv޵.+(n~%jaEQ?h]p΢"'%kK+ Ph4v&$qӉ( r`2@N>ߞ=(^3`c:*Zm[׎W|[Ҿ"ϫ*rjUiiZ-l4< c@ccKlZR ɤ<e%&6l p4iI(JdY8p)6IObo_!;znj5xo9媪<_p:[7,C-i(@bLUEI Yہ+Uzv쨨ش pu0[Za\@UzULcbZZ\.:kK+j2|lnj|>QـDAy@vP/x4W4@dY7E4%i(">HR0 h6w$$ :y2t~?v_x!бc}G~~Aqp $umI{E9-bIJ*+`߾Ν!)W/de[^քiʔE1d3( cрՅ@={qʰdHIIIII8{$@IH#t84@zZ3&9h j32P jjjllh`O^/˂`6tw],hKBp /ֵ& =Z@N(???1 HIԩWHTSSSSS L>EØNg2Y hFQB!B!B!B!B!B!B!B!B!B!B0V ឭdCj[^tW}K{t|eϾDV:2VpO[_Bȹs@3c\+˞[7ܴQ7{7 u§|]?5n]W6겎7?nA׭7][ qDZ0!qJ &uF'nRUU#(ܝ.s'aM^L]T.k: @u'oATaLfݕkw|>nBڿSދhuu߿,s;sl<5aMv 2R.NʄMƚpH쐼>;$@4in1΄5XicsXVz8+L9w P4}_J-?n6aZӻ]SSFy<뻍O4n;G{ͭ.#zOW)eIOnI5L[\ݻLۺℐXѼz?Ż0jF':L];|ױ)@qCVg`xw[;Kp}gOz(M{}% aqZ Q37-(o[W{pmcLYEA0F/W?>2о9Yk)0X e{< R;goC+rby#+ݓw .۟ X'c|`:hڮiZmG{w'">aO+=*@Zl0ɹ0%Ouۚ_>!=;ċw[RlJ)Gf1"rv [ʞBi/'7ɹ@%.;};'Z&F/D>&έ[%mhյ!ż?9{< x^qݗn釆Aoj3ks~13D[\D~&Pg/+NiI?taYzlY &7.u]e˜!ߪ1l4,BV }0yzخ]iV {sW[-j4d2Ll AiD4 CSԏԏԏ{88A`szos}YdgJڀ+-0Ȑ 6]XW@(^4˵5 6Ѥ3vis5j{֫i괥YxaO׶snSWizFyFyFֶfff.n 6MZ>Ѻ=Ynu:R揚<7ֵk[צ.vppHJK|O%H}>RA)!wz=zPsLsLsLԲ_~-Ub6fc6aͰfX)~hjl5m]ABȹʨ֚[ǚJJJ.. /x߄>RT(ZW4N3vIY(eϞ:ں„s)M|P{wUs {pZg5qM@{q|#+qL?z:i>(B:%@RJ+㔦ҦҦ9Wӽ{/aZ @ݣQ_~ŰŰ0Ӎ@cƮ]4llذqM 7yvS[כr86NS={*L[5X5 bo1FO'bv1`W+ٕG!@,d! ܂[pE+aZB[g럥!X~(?5v Q dAT2?,u)۔m7&_V@|S\#XGZo5ÓI|P?vvng ߛZ-&+Dy +$>xO@sܼ?44`l6gr7ǵX0L512=vȉ"ٱ~-yI%@٥l4j &%>:+_G ?x#KbyrphgO@ 2\Z@^"/fm[Sh>(B;-[X=}L'O`C!tctctc#GT[-gπoooW0u}EcTx>'Q+lJH$xp;7p ++ hXZhqCb=y_P`h8Nں.\EcaobŽDG[р x.Wk+(M(Q"ǏWju:>N' I'5*dT5$@dP :ݩAEiڒF:^/cO<`޽@Ϟ11~?$TlZVP^G^hxoɡD ~|QQJx;{.W)&˒$?4jEQB}X:]n`iHP"'g2v{cc}=ch4FNs`D1 3 0FxB!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!?; 9j@UUW<&%]wuݻ?0$0@[g6'lf[11wy]@(0Oeee%ܼ}텅vt>Qn۽|y[Wr9cڴd2z(55;;;7n8L&dz>3ƪydpy0!!bl/oyx>xh4zEQ8t, njj߸$Iۺℐ?y?o?~%b <[N*P^55h499v{}}[WqҧO(Z`8KO 5B"Pj|1VQa0 Lطt8&;x1cƌC3Q `EUU5)1bbB%cq&t-}wM7TYcǎ;vгy͜9s̙_|:p8C(j00cz}l6 Gq\hЦZxy^((|fl6{ƍ7n'|'!:w(R93 PwyhnnmCem-HPSr:Ù{>BM~4*v_=z]u{^4 r3o88Uu !ST(0ᎢAox|Ô*shj&1Tt} .3@|2qF;20[{9W>nB?m]m]b7n*h´ifGMРqmm*V>5| p8hW#zCi~'fDM٩g'ĝX"X&`2e]qjXsccWf[4ϗ/-/f tnn5C^ҥ(o[W//Y;ϼԼԪK;\;`ݼ\E^@mLELOh?6m4mcyķo7/{[$ Ք iiYW_͉uy[ןҎˠk[fď|;686Ly~}{$ޓôW?\?6r읳9>xA@K/mjBnhfbf7647x[ԗom1hmfa%ͪE\Sۧ}:*G)Ô,yIt~tYXXƸ&L0ቆ']A<ۺℐX44]|ZxAxn\~@ X_>O|K|9s0]gY}_.c6Ŵ1]y7WV׊zQ#/kmO5n W99쒶8!;v/4ɴ2XceWZ-Jq]f>9ÜqAso4{z\1S{U]]z™)ۅT!Y׵\ג_Ksnhc5KdȅK.嵬W+SB[hDe;_(9cp&mhʯg*Ѵu !P&%t)8Rpۑ?>0?ߟgl&&zc1MclYqǖX)v$|ܶ!S)k%u:Y[  ,县*4piJz6-/Xv#j.f>4`YzAu!Ϋ[5 5 k^ߠR1Ws9!Ӑi|2/!O')c;CC +ÒW$pi+>UZY+ ^ Vq8>iIy56M WT[eYa<~ Pu!ccc"RRRv0l60z:B4bo7g&c2&Or|!Ob/؋\/G#o lEn @U*{Pr{%rP9_?ʨo}}|>}SH RDn7zޫTSO9/_ZU~+L9w'ۿۿu[魜snnntBUkZ!P\{\{\{ƣֲ[n=oLCn :i>(B:%@{qSp Na?XHfc6fc_/=a $@HHooo;>v|Wk^s?#tںOfȑ#Gz^t:NFh,6fqܿ =Rfo7bӋkhh$LXR,)-gf***k'''5r7mP[|h%5n:tx뫯4+Np`JNNNNNRSӁH` @ R{2 cBZ!U)˔efjcZ@T{wg>Q塽h.?????1zh:\@p`~ZVhi;pv1ʨ8Afff,ѿIYQkggg]Nk/EiQZ|yA; 555w]]]oooe(GQ]???۬۬lz7777gI[Wp g@ȲHry<p8f#$)+gO`޼9WD>D}žb_qؔ udeed|u׮=W?73gl:u).....pfH-- Ցp)< tfsXFQ͍'iߎ(5z=m6izzz0 qnVar222rp).ť7Mfr\ =,=,= FIAw(,"˭&]RRRRR F0wA-[).nZX0Q(L\v >G%'O8HReU*k1ݾվվc 3%f}ӹ\Gi?gI/%~e˚y¼e`6fc6~m @N/&Fx5M&hLKKK;DWX._ HI).޾hjc,..)))ȉ.t=üq8o܆i־Z굝<6h6k/ sݹ<Jz de]H}>z/_?~wfvU]'C{ݰa& 5uȐDQS ;Ad:u;' 6j}CUUm][^]tgMȫȫ|`>yBP(r۵j ;| Lf2KKKlH]0ïrt0u0u0/j늓Ͽmc11Z-Zр( Vd5H&uru2xO.>2(rSjLi NWUL\7V7V75KY999PmM3q&x`0  ՒjIlN;<6">V|&ΐ!twFȑ]<EQ3jFUM&kΝ;wЁ9=Χrr^^(/Zb-vݖ:"48Eha/ qcijjr.@@@???E/JR3-o AN^ܹf1|\ɜw.+ہ7^ 6FU~8_nnnnIz@dȐE&MlƦu`#H6@rb@/c(F W>i @[wܿ1/TU%u$0 2$='  ?ΐGKttL̩t(g~8|/9A?NB!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!BȹWw,++.>|c|.r*˒H K@ZZff^ܿ|~B>68|xfbh@0dySx|>E,L ~?;u !? P&NɗYnomuGS"K,ue !? Pʇ~IRS?^Xdժݻ!CEP/hjWA3VVvm z<&}\\ZZv60pС_NMza ~(.GeYvR>Q =#^oKKd8-9Wu PD$I(J8:,$I NQN9hR[  z=G ՚YV@ioKU$IAtM3d }O`("5ꉽ!^teeG2ѵ+5vp9xeP7TUUU545ɹe׮]v`1j(`LU%hjd eXȿ,߯(&^0xj|P'I  [**Nfx^Zb4).X32B9wÇ3fv;r֮Y IIR v$IqNsj;rslY1Nˁ={xZ jx A8 EAq?l˻bL1A⥗("'RMMMMM pѣG~U_dgQ[{K͛lٵ ߿WVQKX,IV>98dVE23Ed E*`MdhŅ^ݜϊ=zѣǭ]vڵ)Pxd^!@EQ9-'%@UU]{$I#TSouuUUtz<s 8AjB CKt:N$sرs})"':P<(g<(@/5}SwᾧpJKKKKKEqkj"rs~" TT462m6b x(`0?s  Džb;ǽ^_!qq=zu)))..)OLLMOQv&c<dȘ4447\^q`etm][^ P\p\q~~X^޽[յuu H룢9.S'lMHCK|t=sK[_>DiiK=ܦM.t;~m@ݻSjov&Jq`w_RVuoƿ$Fp~%jm`D `? .t73ƑO_x_s&Tׁ *1SS\{>Js-W|B)/5Eik%׿h֦ޘ7gG7O!0߂nx&eqkn. 8-˥[u!45 UuQ̀qkS?>Qrؽrjƪoh۶%K⊅ Fdxsjݹ225 Gٺ_]`Λjo}h#&cPpoš2j'Q'^X6w/_oz'Wu|Oڗcvx-[&MJJjj9s@q8>x׮g쭷 @ju:{ *dZ)sjl5mN|}SޤIy]ZY}u{֔[Vcx=PZRr;UԔt [݀EDwAGY^ =' Sm?i_5rr.Çw`ݻ^xaÆɓhpe1cGA?\s@ɃQ`:WEX.|-̸:8򝝳Ź|[MnƥW@Fib+r/luztRGwG#r3WNGkݛV8WTL՚q9hc_]Q@xRQǭ[w FDEb|<LܷS`:U< eqD@4L2=gw}3d *Il{W?^ ߦSP{~//8:89.wx%Mćڗ_uI{u 9{zen?xPG(-Z >j wu.a/|;4j_\ `jm|GяٮЋ_ 0TA+׿nֵ'ͱ nv~|>狔UUee@ϞFр$Çw t:pСC1f0 .z^l6fL}S$Q}jဖ]xLWrMW c۹1P~JSe cԁ 4;iMj OK@oťLH%IU DQyfp*$}-)3-,.ȵ]{/6rF>;@"X78X~#_pY6/d6)_nose뙶}AN?:pas9밃D 7?;>ouff{$CJQ ]A6bA"R Ҥ^B'Hlo3s~Ę<-sv>ٳgH'=g`4:2dMq ,\"XgC [с O =<4uB!B! "W^nz)65PСbxC{9kKK:3:kD 9B2elX<փ"U/XGn.R Q6ޑQ_hd! dMFԼ/CjTSBHAv?vHE@=Sqy .|| m%>G(?ЧP*r',P~DC7PpJ4_eyTml7 u؆ _B\v֑ub{(kH논 ZaQhƣ9銕c:͟!փ"W"W+ +[ײCr*757ƅ^]N1N;rXAD8bټZ \yYE^rx|IΆueO5 m乐S+\@%ΰ6../Z%k,gfwW٣f :_Og/{e]\EocT|~SqG3_:䭎AnCqiܪITyIDATU'),[de1 tvR#4jiFǍZB %;⠥G|sAoR_y3jŘIxqmi(_!]/Я师bA OX[ =zx7έ;$wu98&{xS8w}z 3Ɏ/84r.vngӹ+Y̖7p vܣzT¹9kW8]˙[;$څ.U455Vap+soO'WaeEH"D#313|!ml oM TR-72kImCE“x<7R'pu? dt@z۲9s suW~e{k~j \gf Z})UXlx>@7DZ9ՓچƠUl0`uX {T@7E?:{Sd]up ~"?R74-kХ׀ J NRvQFaImCE"nDS> ` ,qХ^݌}܎G,RV(+jaYwB&{+4f`!^]J-r ,9o.C; 3ұ]m38[X `.4T*O)[٭`^PRʛ[m}_܄V$MhAA*P|y_6ޮ>$cBvxރ/H+Ph4bY,|C$"i}_qP\Po&B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!rb_]n$ ,݀  \@zM4mڼy/?B}҅ \ti2U$>ݞl HNWӎ(j~?VkTT%LnP^͖ DF|>_A.:]H{j5ANY.) t hr "A-kgLw)[3[7%I# f$QqʹrXTPPzK& nPKaaf&v_|._?ds@=h2.W@MPYYYYYYWTf .r\W^"˲\_ht z%KD&eBnbX,@iiyye%)Zm wU1:-k$y<5Es?N3]6!f{tFn bUcU~b%[Pꞗ(jFcuK.r3=*RSSSSSjCUpPC[` Vχ2Mઠ:B{h *+mg 㫦a\V,W) 祝NJ|U=/e*(!5U^z'Oaaf3 In1~z^rsip9,fxp=gu?;]9?}9Gxְ;8㮨BAo'|||z츭e1 t]vM`£K'V]y7X c3͏no5nl~b~.]zs}Jrr_>J9멦U._T:ID#jYs)Z\nsٝ2Gȗ4?[.⌘ezCqL}- mgڂF2S\v4 '#Eo9[9gwn,_iР\ו=+0?}UP!ÓHp$<+yuQ\/! M1K6$ǹ 4h F;PmƭrsXi|%i?feucNJ{k@ `vT< I!+nEd=/<λ<6_樯UWBkWo4r;)?]/h \WaKkԕe{*CG.,}w1]Xui~A5aƉ/I!8e4PEŞlVР7yj)ﴸ{/z~EiEV한u.2P*7ϔ 2M'@ri7b,Nzd'ƨ 9ִw،(C#g~iu|;X߫`c(֎hImDE+j^W)g r9=o.low[4VG<1KnuܻK@jau7 s4&/-EyS5l#t=l @Mj"ŗy5ϯ q-Zm囟_6umC~V۽9մdi}gǵIݢA]xiJ9}!"48 k5E(;-{rg1zIDx亪&P:xmɫ~"|z~O}Wj6灠ۃ;F!~N淆kw[['K!Cl_vYեAﰟ cYC~BTՌo)(e̪_dzSYy;" [=c$#Vl,6N?k#{?,Y iqxU]'(Uu:\B=s/q|rvhi>pffAޯ&rOԣ@'fgwur5jm" :kD3_z^r_JG,̐lH6$@j#WA]ZoL N |^߷cW%2%]' !yC4LgY9_œWp.4L>HٰêUֵ^\){ʻ Щ7V'U*GQ0`~{p1,E k&t!bBτ =`1c1___T8Sqf0*fV̬١{Tփփ"zPOeɘ1gRV\V\Vٝҗҗҗ[f͊zީX0 f66d3 m)))+$&1Eo)Sܧgwf8qփ"\WiLsZi=nߌnĻ a0ߗߗ/m>4lhR*rfa#H9ҸUSE\3NNN;),#,#,`w;(--[٭Vv<== m#[ֲ@QޫNr~փ"GEQ(u]mH7M 6`|sNrNrNwww,0^/C٬lV6:N,[ʁY)UJ.YYYE"4ơqhڮtvArr]GူNX'raN~ZioMzRԎ;*޽޽L1Sdor%.C!Ӑla}uٽٽG壽}/{i!vl6~~~|Y>,MˋŽrG077wci=(r#ץlS)P[-E݉Dw"vW{qX؛S!B8̧|j0!EIQRd9xxxZZ_/Vy> (r]2Zennbnbnsccc ҤRK%M&kaW+BeaYb8t^:/ x}>мyU*aAÂbTQ-FzPxO B/y$I۴i׮RرS Bf3 KK+*bΝNc,'H8dr,30W=6l8|X.u:%i-/_2gR.%%n |de+:$z HR:;6m(II~Ν v{yMWׯrXa4vh۷hWTTV֩SXdɗ_q-,]IBEr+v;pCԭkl~.˥(~(OrrpնwKFye%vjllD6jѠP\ ,[f0o׿ZrŋK^gOff3t^u ?@j 'WaLAe3gEU;wNDQ5\.@##[ΜÇ (*4t{-F"]=mEb4 (Vw^_ VJ,t&^(^ٳr ]|ԫݧOU}-@s8 +*|>ttJ͜O6s%%!!MffxxhxNx~Nc99&SQQBĉ:ɲܾGyál,s0eg+ʅ ?(۶ Bv6|M3 WyPO/{=_ΞC͛'&&%]xŋCIɅ wl)I>˕t`fñn]͚EGl)^UYY?GF&&&'_|˗/lFOan|'BM$B!B!B!B!B!B!B!B!B!B!~nw88x<v!˲`0ݴrCOQE~QPy^ AA@yN2p X,._Վ t$(U7"?_/^r9v;PQpx<@bbDDp0PXXQp:$&̀(~?ЪU\ȲelB; (j4ZmMt:NWf2y<.gϙ3o_v6`:P^^TTPr !7ǀ,b]~Yh.n$,,,,,Ơ!7vMn}TS`Lt:bZАI8`0 @I]3U(U=@AqK].U^t: $$&&6(,X\.f.]+.DQotYB^Ǐ_ h4zX߯(͚5jx>YYYY@LBTSaaE|@AAqqYٍ$IEb@Iݰn4۶8q 2@Dl0!!FV ]믻v qq@YYEK`4 z=Ѐ8!䟹U[С=zhEF̀V V WV.P^^ZZTT3j6uDFLB=(F²2 ӧW݁]<~1gT@3kd4V!{(YAYq_Ӫ0dTo !}\ffo;ߩz>::::*ƥ!7v^5#Ix[:(V=6t sBvO]gO='B!B!B!B!B!B!B!B!B!B!B!B!B!7g/\ʪo"!?끃OLOuڵm[ &&%Q# <<8`:vLI1>}ڵkؐn+FwsΝ;w#&Lx-@SeK@ƈh4fd2  8j۪Uݺ!!ѝ;GG))))))X#ϛ F%'7k֡РABBd$,I>20dH5|?[K.]D䟡?ճgu_?wѫPZj2РAL^t޺ur2P^n9Μ9kv;@EEEEEE!7 (r]$$DEsZ̜9y@bb||l,plFFV4n\.o߾}߰lݺu֭ׯ_~t)HFO1j^ENN&_T@UR tL;Xs/cǃ>‡l0n"D0H`g1,P'y2Dvʍwra{C/b=[ t2ǻ]>!6 R,k0vp  /8R8̶B[ ԯԕY "^Q3>ax=B9<tL6Fy!yѳ٣t-t-89)lO|ܳ޻cx<΀!@I%,$qJa\ <^^ k'fgwlq; leZ[*;(*J,;#osESh:@.N?06} 0}L`nV>ԻsQ~P#ʬ@O}c4HmT.Ʋv( kivJ5^m>(h> g*:vYngؽa>v2Wqf b"kHU_D$# ؈hN"_< }L{UފgA T}pK؈BBjkAy~[~a܆X@xV0U :-/@6ff=qk0 `@Fm']>!6l:{E(ż "¯ rne סl8$9nOե" PrxQ ! ^%TyA]q0<8}VUIfz?Ipc9x_0jU & tL@.i]xo[aws37s{X!-a{voUK TehYN+5_ٮb q+b~p"Bj3?( gU^4U}].sa3rl5Zf1FTn]^f= AyXe(~u.A7Q{Ot(PBʛs-IX_O!6b!!!5442Ωs/;q_[yp垷? t]o/mʞ22b^iwuܽtPRc154]VtDxâ2+S}!(>2v#;Qv8p ݘYYxDyVy*O3+AQ4itͱ{ +B!B!p9 .̻^bBepGo}qC_g!}o4RH,DWҶmp%O/.ᲆX*'l|wgߝ~?)u˯_XrFNxNev>z0rF6Jx>O$'s{{w.$$ }mڲ=v f# x_h렯<"W9ٿpgѓsONz!66p!oKGM2b7OxlCܿ:p/xy =gh|eGw.#NtGgvޏ带iͭ}bV:ߤdN]j%^+|o= ״suh9|os_u5v50}~p?1\b w<ځ\:ذ+=bc7)ÖsnSwiif!D{Fo4/:XYt5*X:bm! ҽ+YT/:s3'rzyKG&taLàO}M~C~]Nmԡ( i JjN利w?RWT͸OlDjњzlyq/Yf_/ߗOABxVz.zufgX½ s844 =p;#y$ۺjbqvv<ۗv%M<}t@EnN-̕h7'pϨ}\a.; ֞<'C;'qu \g\8UBUGnrr8upn8^ܚf=nzזù+7l,S3 /Us.o/{d:\ryNde.WoZ ,Uh"Dt 1a;|y(* >-$6G+ABS|Q˅3 _3^~ ,tkr3փփ"U(U3)n[S>z6VH#• 1+zALV)>B 'M3i 6y DC.Hɭxށw~ʹ@R;P@B{%MG>+X’"s5 ?#og>fS5t Hm;Q偮B!B!B!B!B!B!B!B!B!B!fgϞ?"@!/oyNq?|4nL-53Th(,Ǝ-ڶmْ B ! cUnw7m-:w8HH e  ;WY9p7r pÇGAE _ݱc~ΟxbbԩK=ƍccZANp}>U.^,-Ee8}sСvfh0O])!wʕW ={Vtz<ЦMB@~M0 ڲ(6n(PYyn21VNuwPcM'OzFX%t떒90hPfh @ddxxh(o5T[9.RP.dez}dd5o0Zݻaÿ+4n9tZ,5W[9WPLl6GBd B~&MOH\L@.fizvۭB+zR߾O=x1繹K.@ǎu˅V+`V.]_vvaHRU+7bm+W>ghn8AQΝvHN |Rܿ^`Ef@r /^(@m_51dүz¡CٜYYǏo|aH5 !_G8ܹrysfpO]*+4p2$5ܹC6m(!Nn x^[X*+mBCf@t`0 53L`YM7"j!B!B!B!B!B!B!B!B!B!B!B!NWY`?{.|z::(WE_O,T5JQ?hXMb=Vm!N m;VutvMJ:&U>/S_cK'Z֢R{vf؇i@$N< 0|"]\mΧr3]>e(Ul_$nV{+ %da[HC«:{e]sQ̟aX+wHU%h ;`:x'{;g*6t]=m(UX2+ ›Zطe{{| fVl W-/`[0@>$yoyUbZoIBE"!v!17O$Q d6n| >PX$! 9$" ssӞw&kUEMA?zRP@H?KaUqi_>'> |ƣ= nG{N& :vA)gFwf;{u\# m3h@Mj' (r@ Ӽ-)@nyސn6X~pφVxdYp鞙V,ҕu`i<)u@@WOj (r]+@:hF|._<_?OŬ1@v/g'ZW*Wz @Wl/3 e Iu.(UNR{Na\8yLooR蠽,:!> 8M^޲7^ĝ =iTxѯ 1Tfg9{0Ƙf#6P*_zN|0؈,`cY\żJ(@Ը '33: HثcPm׬)PɈ̪V> "W>jt5<2b0{/lfԃP`)2`K5PRsx%[EKhg Jot]?].*Y,-qA]-`3pxHAIІuF\qw5̣t+Ȑf޲i)l[K~׷gV>' '|Y|77[/EM~Czhď_ j +`l;sMKXg;m7#L×{p7=ˬϛ_naAs@BȿXšL+z#oyD_ULڮ}.u`ZK'Z,nZnkU >nB!Bnn4ERܴxI: Dalփiy /ێqnav/|PC8"M}DNt溊\EMIC& -IB UqQ@1<וw幀wgsޣj'Z\\ŻܻB_=T5b>ڴ8荠o;={OvC{7?8\Ӏ>v?h*4zF` bD# yyе ˥ !^ftfTf)_x[oT?9۪ uromTmtjBlvڶ볊MSK=? =|=uBn,}Vfd(s[UK\nse܋^>nM\E+hž頉A?=}AnvN(z/㣆߶zPb 4$}IkyQvz·f:b _chImCE"f|`vwb#6ہAŢ(ppp,>fS,9Q̧1"yl IBE"Jcf ]8@߿w  ^ x.&TTZ ;*؃}<`2"hi4M];}y߄y 3IS@ބs~rŹ1u5k\O''~RP\Ex=FB;nA]5g_llǁA]1bƬ4^ 3L5Líփ"U(U@J{qXe\9  @ϖ[ae,qxpt}8O;r:@?g_W(A1bc/Z\~BbofQ UEn{ק Tw2p/(B|Sm<'s-ߙ_bOqE49ypv9ֆom;mZZ'D'Ύ3ޥ+sǙklQ[ܿVZO:wCe틆s}bɷ 4 .f|:@TK5uַ~RP?*rs/l|M:ܕ݀(e@Mx7xzCS4h :Y3.LA}X.򵟩^bgLap?C ?x`V(n[c':rv{(WL"JYs@;F,~ڢʃԗY9ɼ 5z]H e;Kkơ2S> ډUlXyA١*[ lI=h򁚪>yl:3WvƸ:/@$o/?)T?kqJ~nJY.-TP,Q.=a"Щw u>i wIQ ðI7)2Bj3a BLr׹%[E}jO @KȬ.}nPzPӞm=e@ڳ@ahi;OG?[bVom.r3  /|`]}#N; 䏷Yhz}sNi8|o%MmO~`m{O*?.r3TW|Wa]ONegnچ63xe؊e3TS_ld2{P*tk9p]F-?q.r3dޜ& PSy || /knOwln \.vJ\ gi&Q}u@9@MH$2V AՎ dv?08j;~u}󵴽 -?x>W E A蝀vW[/O-Bj3 31`,:aXm tI()-WvJE@mmqa`Qx2=8Y|Lx3˪p?a##́.RIC!O$VAgR>k4M? Y}u[@݌[@D4%'n[qoQ E_ ]Yxx~.r3|#6c}Z|db֨/gyyCG=uB L b B :5H!E وذ3{y xBHrlRwH4k^H˟{7#S3  |rЧfcx-aq6sj.N oe:/ kV@xE<,I1qqCqWu8@ 4tmTON6 `ro xzkfH-Y3Ƹġ(JqJD @ 66cl[;tA~W+Qoe- ^hX8\()[ʖ5i8!Az@_&p;ڊo`TZXfX}vnW;lͲ#9ۑ.o}z:ސBj/^YB9["I$PuM%-rg@@~[D XYZ̾־ֱGȹ.yG5q2לW|~ſ)}r'm΋*SZι˃[XN[p^[[y+*]x^]7!}nn J4D$"QȰ/gvPbf y Q( z<[0|p~(uZ:T98o>o? puuPIH%> Pۨm䓁.r3u/D@WR;ה=\~{^w`h74t]u]u݀^%=KzﹼIc v؅|,xo !7x6=W[J҃a~,xlia |vWaxcqy& b d#op Bۇtڬ|OW-|E~G |OD4_=hoWܯt5{{рaaa)NJ{] ` с.r3W|# `M$5 wgGKtgH ]1 @ȳCRtPϪgT.r3=ck|ҏ@qcrzXrTI'|Ĩ+ w(4! "2*`5jom tلA%^A"*V 83V#AgMO'mŇ}D @CcBG!CvlKW?mxK0 !7E\E@  D YR$O>LHxmY7#@LK}W>A 8μgnāCbNV^p'P !7 q#ay/;uڧ"#@>*S3ԉdžw!U q?1Q'jZLy$ir5\EE9= :FxOCYP e8@밖ԙ=&SiUr@O!B!B!B!B!B!B!B!B!B!B!PwOK~U{lmo}OkmIuㆬU,.>%7' 79%ܦS> u SJ#Ϣ [ǪZ@)GC5یv@\Y;16L+(zxKr%.ʼnxXZ\pf '*v s 9z} @{*rU{|_% _Vl XoE%.Yv?]ݭNkR~*ݏ` ԽMgt'[thNF@xq)6 ^?ҭk^R;<(r]UL}wo& uU~Eg~7{O[żwgyNJ7Yq.? @@~@>gŃn^?nOԦ ۞A|Rx6{6{6RSթ<;vEFӺ;pE-e2rVNb%](|)y O]pG%a|!7AMůxߘdlll#vKݰ Ɇ}H@E&l"P ֚ua};<#[O@'n-? 7|gـ0D+:fXן2TNO"fW٫=4Y,M.tGPMY[r$ 7#[{f>nrsozPRRR5l6mJKJvj=KѕE o^ZtI݆TWN! TulM=4~o{-珝?vtw2p~/r~R 9Sfߒ3Hqqf;iP zCp }.Hj /اl+Xm6^^^X>QYRWWRyS6LRK%.KҼV`vKg  5 jjb5 cbŎ666!!tO=WSv~*Koh=(r}P亜K;w/sN/9LxX< '''|c1077`aNƇeZW$=N#E\[R/4M#@RFB,$z: <i4GR22daLx!D09sCA룀"ץV(GVȕr\ He)033HD[[[:_wjE>.}،جK@௃QP+'@WKj+ (r]~۝-{xss h 3B7俒Jrg=Wrl.+P:mlxqqE&jʉ̉ɉmVҼjuzwz4ɚ@Ȃ}!^kX&Il|,zg蝡ww *k㵽ԍU7*@Mj (r]Aӟ33WxM{b,Xh,»wQ(1[-͖}njr\w>L3>#U:Ωs>nnn"9T6˧O-ʛ7KKKO7O7O7@NDOcƪjˋt1]̳S0?C=(]vtewv\p\p\Re2ޔ7M;N;wӈ_b6rCgjUHF3UYL].z^.OwSuB]aZaa@Eݞ=wHG:}>[ MMMUCp VΫW9Ovvv# [-VUoH (r>_a<.(ţw? ge2iYgOG>4bc1wa0F3 a:cz>WޤDބ7MU$59P8(% ަަަ⓬Wx!/Bߓ'}Ob_u c; IH:^O<J &JR|?r/;;;|: !B?~/^xb}<zTAAAAAr\.Wc *B:C:Xvڵk]!T~~~~~>@l6]!w4 %I$ l6 v'@bbbbbkV6&UӳjZ B]vڵc4́rC۷o> ,,,,, HJJJJJjIeYk+%%%%%SN:uh4z뭷ުiB {0.\pG9rХK.](RTu@UA͞={O>OM4iҤ !/zL*`#NE-Zx{!A?KuJUUUU B͖ˀ|>sQEQ=.^xŚ=+d2]!fU]qN:usΝ;wׯ_>  6lذ!M$rG[nݺu^x^xKݻw޽ 5cROӧO>͹Fh453{R^LGfƢ!?"8 bbbbbb(!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!@9qر?Ԯ眫jկ3Ƙ 94hpǎ1ֵ_s&7 (y!!Cz<6GҡCÆj0$%cǓrPF^o6;='I>j[:́-^_͓'{<ڬ̙Բ2ƘVk4x?ν^O?sAϟynxm֬@Ej7 (o rohڴyQA`ASUY3UTUe N Th *(Wy u׮@Ij')@j7fzKiڴo_Av1A` <4{w:uzv̙~td z~=~ުzW^NBN^_DFFF&S||z}t$ɲZs|ee7nGڵ>:Zjs.Ue?9YBC#"1EUxno۶'%_(FDԯb6S~á( B^R;Q@\Q1ΝN@U  kݺjA;}>l,XΝ=A >6] tv1(rZmXŋ[yy6cd6jvII%%rWy%`EXll\x1~%lNV9PtԠoȟr8>lK!!!<|8Aj5@Qq{Qk⼨h^ ƲW1۝WQWAA?o>d$]?Źj4Ӧyŕ)  ZXXϯr.˪ BnUTu1W\lp(4mZ#bNֲ$nNn0$% BDMQ~0Iv^oE˕#.$ k˩Snb,:v8$.f;{v|v~UXn3<\QNxV;#n/-ҥ2qƌ=xyQ\套^z饗[hѢEt:jZ FUUUU58sza45?z)/w + nwV$I`C:t֮]vZE y S<3<#G9r vݢ(˲,˂((5(yU^(Zjժ~~mc!B!lq~¯ΙC}<(JKOBC_~B *B:xj &f=s??BMq@)Ji#+vFCԓ"fכiZ(:,;:U?q8OHHLO}> QhA ijBC˗++RRRRuc4́rC*+}`ɩSOdn]UMLTUQl/>XrrT h&ҥ_~KrL.r3a$/Emg}o&!ޤ:Y<`ɒEJK=G\HHHHHL!ePT))JvUYhEضmEuBB""(!_1X8WU[AD1>ˀ)˒t h.rs:}zرc+*ZdɒvUUk!pLlQF;֢_5>nrs"AAAAC}Qxx:4lT^z@U0Ngnnn.P^~f=\߾ñn] 7 (m2L'שӬYf3gFF>3Ƙd2x?]. (+?|O>}{t:Y]@v +&&)))iѢGyA`T@ 0cz}jjj*c@FFFFwxRQ@ڷ/44442hLHHH`!U=#YfISNh{ƻߧU 1111јԽ{^R;Q@eYNN6ԩSGbXA?jz[6eʔ)(Vc/՟jI$HTD^ 8NgMTSժK1?sU-...r`@~s]/!&rxRRRNc:ݺuyy!Cpy<{<9999|㒒;vlڴiSӣ tбcAAAA_~i$$$$pn׭[.˂ PYYΝ;l+*~8ۓ8n@Gj7Eɓaaaa11Ǐ׭z}%Uplp@<UUU ;x h4m۴X,@B-iifۭܲ(ncIIUcPUj\U(ssr QšC[lS]h&[BC'M4$6ٳgϗ$+*TUUccKK9<")Gj|xC˖@Md9 >p\轶Y)|nY6&NZچ{ٳy%cT`˝c;ycl%c=\۹06N5Վ g<@Ki.fp883ój3p󀧴B}xx1 PpWpЈ;܇%,{#Zڨ5ɾ<Od3ЁB]Ӯ\i֩ZS;:n#`rKCk5$@XtJa:*~^67缧S\@KSBrHZ. !k,`/;@௮P¹0&G 1K@ <9B.ȸr3Zlt)(bır*~>ViN^79 f]@J@]!>,Zht6h& .'OO4'T9=K;:9tϋm NqoП8(y8 @QD}aU荶/GۀiI{/Vݲ87*E{JnrSŻ9ZAS@_BHã@ZsCreص\@M> g⣭Xpos(z`5|[VQRm/&)& 3,1EaxYt e D7ջhuK=iq9;]؂:>BݱkkiotiVm^ӱ*ߌ][Pm[bvTl3Y%1BOw!`Z+uȉuu}~?]QҒKK.-Jl_i_>Q?>v}!uhQ#p7v5Q5U65N(gL1~t%KYKn9پ'fj|yUR]W-V}ZxbG#ɞr]z 3oۂϓze{A@NiZRA+Rlw)zޠ?q4t4xV㭀2YA  (1q m+To7PBV*XEB&n7D |59ޤGyV ZؔABZ~f-=bŮk^WmgY1-W,,,l/^VTHHJRK2K5xYn\e 3 t~bj֝-.u^;H΋+.x5暧oy=L,f`fjڨQQݣAミ {ex8}ʏ5ypeb&op&њ2MCABGu_B 8#L9Ew?󜢛k; f\%*`lܩ<,K;^ga>ŏR<`IDAT{ tk]p/^`٬iy"z =- |9:QWe'B!B!B!B!B!B!B!B!B!B!B!Ro翚ݺzM^o ;.v7ş[.qK,i'7'7Ac1ΜÙ|zʰ951D슷 Xn/*Z ]e_rteE.xSAգՏo}##|yP#77A KOxʽvco+2-<}-mc|Hm(}GhBȻqB“Ѡ@En.5 joŹ{b^1ØpLAɽ3["\M˛&0B}P}@}ro^ \yt4ۧl3񑛃"'@>l͖EmXՙ͊JJ"W'8[thzbg\5E/gIu6]p# *:H )#ώ},y4pTAkjZMGmt?Wqwݶ=;!ud00&fͰ6yc͠5_Ӗ-9v.V ԤJY5%GwM1JP88α0:141BSoեyXKaNN֌Y{W5[VX}/P\9@7}F/p셟QFM <w:2~{6r@I6E_щ'N?YNIB'#1s.<0xvڶjF yͮ/ݿ4Kk|Yr2>}fVP% UPUIK8&ׅV;9>T<7C} ӫO@paΠ7Eڢ žf80 ꬕiΝ_ l8IDKw=;eJOO^1 c@ڈ_JG\- m_8J/m;užTM}M&4[7@Is9!?q3\ 6Lzs}nb;'x\>gc{`lԝwNd\sʳg*V;o/lc{@I78q|!CjWm;8 I Id#>+c+++mn_}K I J m:sWRֶ؝^8kxIDcP䚸///X kڰ6C;7{Ř* ~~g=za?n"11k3؏߅ΈcA&/iYȍQ"פXz,X豯 U;T;T;󼛽35gjt2~ %Kj^iWM6`qnpnAţGN虩Teh=(rc %I 6o^#rGdcAS>4S``]5?_%_4mtTv: O-lSԧ &6q"#"#"#.ԆjCyo7)S0/~hV,Y `xZ"E(`ajhѭEﮋ#<{}}:ɍFp#,oooc4;Νx 7ط)-o**UM\rpS6{C6c4٤@KJPox=^sA1 0 AW```{U/^P`/Kn.Tn!9ã \_* `]X"ڲ/,$UTo>>0NC8&??-y@~sp_v-dM!(h͇x|د:0+||Xf@M [&%!1>Ec/y̫^U|x6kBa[ׄ;X[pL)&X<`aNJ4'XO9pjk\TN|]CỎ}tr ʀyjP(̇ @>!DZɵx]tͧ/eaU{SB 5 pFn0q'4lpp9s < y'q#F=g](r]rmqZ !1/oL& AɵܰܓJ. pWp}m Q_'\{cW ayKI魠gC~F1 l [ !7.&40S { g(26_5Pl-3hx_=Su?Zh+M H*e=(P.Mw~ ! ݏp'bka+~>2n/$)(xh74˗B}h7>ط4>*ef\> @#< !7 ʷw `#0ps (Vx`<-pH}*c/ò cY?^|rxP@ =`C+.w88ϩp@x\0d}:`xـxր]';T~ųD|`CQ 3@NiǠfy(ٷjۧ0=Ѳ0U~gX BTp\.`/N`8 Owo/] ! Ζy?;ݙ~c@/vz3\ Sip\&s܇WntV,cO>6 !7EmiO[_x( ڟ{40kl,sh9*̃  @#@9 !7^T_(Ol=b*4jYnRS׀|ZUGU򣀼D~C ȥr\ HF)Az'{x'Ju+y7p9:pBHçhou';;Rܝ r+voE>[ Y8MX h>  < d03$ϓʎ`Bx*h*NQZNV<-ЁBw茚Pq`.Jq&!@{<> 9 )hHA+h]\|' ƝVC? O{~MkI@_BHuyG-mWB =q^b"q8&GԏAyFr(L.;ɥҭ̍\4kkk5 @i'jdcph%TNW `8< l?TƦOa޹:_6!fP0CS\S/= ( \ךk͵0b|qʹ٭/ G+-*P~ !7 |@5j ^.\/7S@ʥ@-9exp}@SG3{s塁r3+F{5{wr| !Cd"DHJP?u) ;Kˀ%anϜ.]]fkLL?PBXP qt؄U&sr{6e" I[KL˦I@Iztu6Mdag.#~5,'1Sowۂ.bW~8^ l†ҫd~`x$Խ'V0 !7 *=-p0궺c,KVL pIajQ' p외P qBıJZGؔ?]w6!fP_AuA<;8k\9~\ !=asc@LuLd#ߝw,8{yQ R, t؄%r61Yw`J`jKkÁ=/"DF[ gOL7^—TJ Ӳm'4l|#%3Jh0۷v6I9=bz+R٨Cqsӻl/(ݟ)t??+;{< +p߲@MpO>{jNة\*"\Sl^ հZ;maB(9D! z$om@-gAG+ڣZ@(靠Hox@YϿ7p)Itn"eޠA3)!E5~..Kov"5y!< P/* gGB_Ӛ8K/ >~#^z]^tueKkl~lY[l ۶9Օ&KAƚWIkjsmΩ ك jgs.a1^ۡ-Pːmr_EهV !{4UB!B!B!B!B!B!B!B!B!B!B!7@9M>}p8رz^?tvvvvv`0ڵk׮]t|͉KƏ?~x*<<<<<:tСC瞫lBt:`5k֬^Qw ޿yOX~9P"t=s=z?L6a„ &̞ݩSN:ѣG9BP߿?p]wu]ݻvU[ pqݻw޽o_$  $JihZVsr88㏝N錋Az^ """""p8N>aYAAAAvnF$7JP >ee(bXr\u֭[UNǎ;v`'| pѣGEEv֭[l6j۽{nݺxIF]XNNNNNcYYYYYY2VRRRRRƍ'Nlk2iZ-cW^z5cQQZ8IDcP AJ '" $_AFXex 5o>h0eԩӦ6f}?&&:^ҰP"7o=ʘ,o۷o߾}Ǐ?(JR {ݻw/ 2dȐ!@TTTTTЪURRRk2L&Ӓ%JBP큎r!999Ol6y?qĉv{6mڴiXQQQQQcUUUUUU1vz믿xq׮]vH&͡}"<&YDQs:wz$I$?[xŋ7n'S؏?&%%%%%UV3HD 5o޼y*"2Ft?q8ORVt* BQYٲe˖-[>}ӒxIBɓ'Osl9j?Q#ƺtilfqX<_Pǎedh4M8g/^ܮŲqc%||Ҥ>8q8Fߠ:Νyy}ǘs3C>6G:`B5i&SPP{m%$Lz}HJl@i)ТNקUA.YjuT`UW{<֭2иqi߳պwo'4|Wn/)^ҥqyhl `LxN"":w:Կ!(nfqݻu:`Br͛BCU>}L&bB.,NꆬV(..++,JJ** Ff 4Tӧ{8!SuDiӘFyJ hJ2HNG~C3ft7?8v-P[+qq<t^^QQӦ*+}! sGJxNexZ.\ @Ni.WP cfKKAQQ&ٳϒ%_N!MnZЂiiCjF#,3 @ERXh}Ґ]V"'77'槟l605ƀA 2yjƍ52IEƀ쬬~@NiФI>͉%%v{E}5mڨQxI8 P\l]Xw4b4j8{>]\\[[X(ge8]wft'&rƍ;vӸqӦр٬R qOHSSSRh |q%L˗/_\X,EEQENeYZcLT(Z@ks~<ϻ\u BP\Fh4:#F1b_P1!jWu?~q//////yr|>$I$ ?ɲFh4&IɲOHB!B!B!B!B!B!B!B!B!B!B!!~-zK_1 AA_&eQvvv&>_&?aG⣞}C沊*-{&/彼׽M c!}y['4qϟ(Ak:gG[3*x^ imڔږږᒈ"F:]rAa!hߒ}_Ց/ p1w'nl&zntIc';ykk~^!7'x~½Ƚ%+].H̾sǸ.;ʓc"$/$7{m? 21/ZN#ÏvdTД@EnN' lz5׳vKwgww"| N׀X`HtNJhhA3KG{GGW |kR@EnN5zR[X2dz|QfV=#Gk{p8]hh + f:o_B0k\TDE9<(rMixhׁ]Y{xbCW)~t>2v.s}g3D=a|;|kΊ)ÿ3ykq@Gn4E_[Zr{roq/d&T+t4:_mOEwXgt3O>۳u֍}~~^~:NҰQEOAQ0= i Uwڝݷ!DEnƠL38kwzӨ{}{ @7i"O.+mZԫS-JKTT̹&~mϓ4,4EhJ g't)^SS,r.oo4E"|sy 6-0m6rn [_U6??p ]uM59s[ؾLh@l5oϡw}}ĢF!^czy <KC,{{{P>(Q> ((KTAzW7C!KcY{5Ś'v׾}L#O{?ׁ4 TA+)rOY1.E6SP$ ?(I]*JNJJiK5l ̽p}:n>!\4J*S?*ݪKjX;Sw U Tw-ތhwtя>}kǹ "ڹyȵ@'g.|sK{yq9wr3`H ՋWVwQg٭p+܊[%.K\V( #W^eMKj>FotE}ip!M>'@B/F"  P[lyΥs\@GEG9]V[w sAl+lcn˘unlA9AJzjK&eaWRx+9lʼnjȚ#^7~h|9[ȍY<pe:7J|s0^4eɯ$wo?nƐ %(rMuA]sٱ Z3YrJV%^6ve2P)VSK*g{B\joҩV[g߼ɥ&}iEn_/elֽQ= w c]ڞx=:cAxREJ}'|LX߰̑-ZNXG5v.ec +寖~1 N@c>6[ΡDEnE]귪RZ1 ⻈#O惏73Ķ^÷>oBmm5ۛ>1qcǍ饦C:~e#v6G&ERI>cY) Tܯv5RQEdcl>'lǶ!vAb0-I-/~ 6 /a?W\%(rփ`k!O':(yOgO]&&IJK|yi|/z@UBi;Y7@ਐ^7ڙZm=_@_@P"W Q ?!Z^=.A^&?*c-4rGY W*ŹU1K4]^i;Ukt]G}P:~BHvU2>l1Y8grY %{%E4P9.oó=n3⛩@i~ @NiJP":(BztPАbd0oS9p1T빉bV@1S%%Jm1@t)G ~9B$H5Q ! U ʷZ|T*J+`:jp=l\ >"h%վo`93[g.W/^Bt,1qK__FCPXKm,]Q'T* y:2/M0Es1[MO& 9@po6_w^iĝ ())y@Dߥr3,Xf׬ ,?,a9L$q;p9,-ڶNWrv)~ ,ҪO$ \t6 xyw,Uqi[S/PBȟs8^sV.)2W] v,x'ZT{keR] (8Ve^ |-U@=̥U-M [E;qĹ :i !Wl.[M?SdAisܧr r\]\܇I8pf%=2n9+4쯣`l[<%wFM /F? ΰcԟiua֪&\[Oz-}tkQ>,a[ODqo6 *{e HR HK^@Va `o0'{~L>:@GG3{:,+8*'wHѽEy}!! B^^֚g ˄KC ^;4 h~ J?H)F) ؓ^z ?0r t4.qv'^M',]z?_YҭҨb.io.UuqD9[uy +gf60_˄BV9TlzX~֭.З]wl/ F+b_fOr1ztɘoa`Sba>TF*e~'݆ /bьVYߌlSlC٢eUeUeU1(;PvHLǚj(#xϸ> !7VPdB+==.  U@5{ʜi ~&0}c9CR-SX쯭60~) :pBHwգ.5yUYH~@kHn/{d R1irYY 7čl>bJcuskcҤVdyʲE!lzD/@_BHuX_ `}YeK(atrM_8j9p79xdc.qe˟eqsB[.`Zb:ar_>5 nb: H:lB ӱ%h0~-X-o}s:#=+[soM? % C:нo=/.臎d;{Y\ Es'j,uX8=+zx7=Ngiҳ@L_+OT5R(6ӻIjzj$n> \W731^;@_BHsrpvs؇^>QY֕ 8~q v{NQt: i"JJ@$Z$y۩ۏ G 7ڟu$c2%*r=TAR(s=,ת=n!B Wd]8?$>ߍT~%(_qYOtUWQՍ=%8YUm4En… .\`СCbjx^EϺS7$UU2cT~^GRqqqqq1 >\^~.( ԩcNzԩW/n<@GM*9vnڷ j]+?A@{<<_?T PMMMMM p|`0Fc}g_Ю}?EIjZbX,$IW@}piЦMV-iqrC??ءC@v#6:]p0ЪUddV@VZjuL pԑ#N鉉Ri+ݻ?4кu[*KN8q ƜNƜN@3zKΝ`;qBSRAU!B!B!B!B!B!B!B!B!BG>X vOl'*So{۟|\&ojmPl5τ>_B+2c\9IC&Ot€{O{f]gį(@CRI%qM mR+|PW98:`BOL2>o_8sj3;gi| Cz}@Qc[hUn6&4S{z8’@Niz/޶ۥs|hka"vi+~'涨g? TE׆i}k/ +BF8r*NL|6n7B *EG忽3kZᔸXjۚw@~Mڽ<ө'溔.4?]<3y hqOBa__=bzSw67]r\h'4|Tт0\1_cb~4Mb(#U<lj*>Tذ ]םldy@}8 x1$W3v]NP^oPauDj:Ri-iˋ?|ky@s K{}Fd+p:w=S1VSC9BT]h9Dߠ3㫇 IԬ̔ŬM=)j' '3½ Lj]\%:q*[JEC>ΤD3kw٧7ݷBZY;! 0wR>Ho歯/bqbr;"˔uůڜ޻h+<,q?6 7!Np=gq@_BHã@9Q;F^,/Nr^yvK)I|#-ܘ[aw QxL~PnTSK_ T T?wN(ڶ ٘H  Dx?~bzgygyg=[R__RUzbPbh_%&WE1]kw9ĵݵݵ=.򺼮K)!䟎;:e2\UHUHUH=rTS o7Kް_~ g]VW+ tן_@)JQ pssۓR:A\h.4BBBw;1=k,{MZ.'(BBNw w;qSæsҮJq>@BBB]<cunxyzᬐ : =fyS!:DZ.wVnN@vV֧ѯj03-ݧ$<'<'T %B6{}& .wLmQG׽};D.٘!֙ufԒK@ʖ3dþ_/ hhhzP?wvI]Ƚr>7s{wKUbbbpttt;(Yܳ'P\S\S\pc\@^'?#H:yD^a}}! *9#9#9)єhJ3999mmm^^^nvXi4Yg-ʺu)ϪϪkkkN6m{Ϝvۍo7O'4|Wz$H葹3...`e2qC8C`X, L OOOOOOR*%IUUզNAB1cVǶJ,}Ʌڴڴڴ>`i0 l6TB^!,>v}|Ԝ9Qs5$X, Z)܂[p ".x\4222yzHPHPHP+cRo,d!!!@TnQm̷%[`Lo:McVwA3B{^h 5HlvQykf|^  YA t<!Gzb_ə=xvَiXُfd,33̹Ϥ2v,T#cg_lNe{"vW$_]X՟ t\&?}{~7{=oTҵJF7?gVl?,6K;K`;ik}z"*Ʋa .t8%(rMK3T:(,9r|\dCi`a3PRuj'PMUevvf탵Jbr4 |>ܝBDj.T|^񴸪;2 taӑ+<zj[ק\ }*U 87YXJ{g{]8;R{&fF0׸Пս?pQ&n<ɡm xVRF9#dz_,V4?iX"Wp>R;CuU8 UNd '_kFn-2Eo1,<f ܣo*eg/&M[I{UҊe tܤa \!xK\y3 ۑ'¸q*B .?#? *||[az1'&Is(iÀ0U3_] D|YqjYB򉙓>?*(r r.ZYUSJUT:ںE e@Ni4Siq;`hj/ 8"ep!xc#p˱j8g|j pbbq+a=񓆅¿ƂN-n^KL~]`W\D/5xzbq~)'}j>ͭI 6a|3uhfm74ȭjnz`6O4,5mz|nwׅb9|};a zɪӪӀlG3žļ-==6oP4<36O)B^֘_6FFIBcP-ѾikL?WGY F΋i#r {{?,ms@P W{7)7NA,G'3Bix.?to>ӽh*5.M) n_܋܋܋4* ) + 91h=(r=\C\wN^Fwj.O߽3spvvݍ%x\@t ;9< # an*>S|  akG@kcZ*[IB \!|B >$eIP> 3hJ9%al@2JR CE`zVSM@ͱV:5¸x/gȵBӊ ??r%ַo s\)t)J'r(eڴk'rkš0 n {E`}NlWٙ@ɩQ5yz%EDBzPƍVl)Wmcmώ!oc^ͻJ ZJU@mQ>*4/kk7B~hT3(BK6T?-aRWI>*7w[W|'rfT<~P!T KK f߰oss 7@ҡ#Im&Zcp8sN| ZXZ +u]:q@M~((|ž1go|@yr?ɟOr"rX@^*Q&?kBcz*%2 ~.xy9ђx䆢Q_Et̻Ko~99y`UP`~wp5s p hUYeK(zOWnJw{ jS3%<_/5cYlOA+Q\===SLfrNw;|6[%#J,޴N~QYܠ,4ojh>LM^Jϝ;1ر從4T2o @rv)Aߡ~ȕ(A+-n5R'}Y w{25evC7UV+( rr2vpv7o.PոJQf[MKʫd@LO71"ⓓ)ܷ{ƈ]o:9sqqqoof@3Jq/V]{3N9 iYxKg]=]@շ¨曊#0ˡ.NAOx0pʽB!B!B!B!B!B!B!B!B!B'?_@!?^>t)5u>q:}>k {l''N8q>quҥK.-1Lk~7_>1ӭ[.߳mۀ >8Ir!f W_~+(HO?qh۶eVZ]Сu6mgSS|>3f{ tu,,gfv,+@DDRRfOrUR(xý=jҤE-]@6>I'uS0b0oШ@C'*wE|Wбc:;:v,%8~Ŋ֭۶m.B!B!B!B!B!B!B!B!B!B!B!?KOTWWWWW3P0fzIv>E0bcu ),8MD/"cLa~JUQn]jp$~^  $Ɂ4T뭭MOFA뷋PSS]m( иqhh=Wc;%(zd1QJW  ?fV>rdfW֭J !vD뻂\ %(i:)k痔0տ|>ϟ<i(An߷;w6p\I$z }ѨՂPgƞv\4TTAREQcMAn۝N]< g䆶o߾}vܷo.iHc`0𸸤$ 4466) >&8tȑT[[E )[0CCccirm%u0VTF^щO0|m#@DDbA !B!B!B!B!B!B!B!B!B!7N2;VP]8@UZT*z $D[5P(X@X x!A 2%5_݌UUk{2gc,4s~c,+_g"YZc̙K<a̟osbanOQz%_}n P"\Pr{kJ$5kmR$"R&`6Z @ƀHJ%0&m6 ryB6^jdظSY3e8NE$jR ˀM$`1 $DP{ !7WULzBQU55mOp0l 0T:ͦTS(J?;Jx1jCXv6h4:|BHCƫՒT[@\\hhPPXxRq1 FZ xTUUV:ZPQ"T[2`2iz}v?RT_BT*Wown~O@ \^R@LLttxxvBy@yBT*5ŸL&A8K tEIAjjjj, (l通ZQ]&M6WTO\ fv /Ǐ=~<ё DP(Fh4`2 TC}Ee2L ZꊫZ_i&5.^]:^o4nY] N媯FQh4qqiTt4TTA czLpqTry<ªy<2Ri4&z(ICE \JVk@qqqqETF^%%ŀh0~j--ZF]F`LEJG Pƍ7jT_9 $%mۦ+fzp{wc^zNx<(ICE \RT jkvw }gݴNS@$jZ++N_!$'פT ,99DO/,',ן8Fj3.cYctгxO3y6iDu:>^z@TZm0 8'!B!B!B!B!B!B!B!B!B!B!}ԪQXXXȘϷ~U*Jq>>*+Ϝ9s1I4Ej4~Dq>fT7]vnw;fx3͕F5Pi6zgBȿ*A\/a}%&B!B!B!B!B!B!B!B!B!B!B!B!7x/t]&͚Řx<@iiAAf&t6[uNh4fxrtL`68`2 !!jWW* T@hh||6oYt)T OR^‚M65` xvƀjd[8h޼Y><\P*u:A\.ƬVqۃ?7AIMy@SF --5q$9@PPiix8l46o8%%UU@Mͮ]{$IDE&BNgxx^`2$:zP"W :{`LU*eqcr>$$4ib0qq P|y?ɀ))VRDb#.`Ⱦ}oYv`*2222Np0B! mYuu?5--99;;^iD"Hc ߰X `0 4qlʀP0PtDݻv,)ٵ HJJJJJRDGL͛ ܢ"k|x?嗟px߾}-D WPk 'W> |Oː,{z޽XoJʏ?ŋ+yW,-]j  aG^=:QR{ ~e8RѨaXPTԿ1c ݚ޽{VU(>ХK^͡P]P\ukI Iu"""""""""""""""""""""""""""""""""""""""""+D0 Ve̊]8v 2yuN,MgV9C)(mX'@ x'R@ X{e57^rpOYߜ@D|N]*uut 2sx` a<O``ͱgVs505֞lPoROuHoJ \'5@xuG7}:[rҋB!DD"jC{4`Ӏ$t(cϠ ?Q&€uku'6[loO|7JꙀoxW/C='/y\< Q,[Y )T:eNRBŒr@f9GYP>dbK.lL@Ҫ >D~i€`"ND-l@+U ûb?zu fG?yj_ }lp. Yc8#FBLkZ@D 6mw `h9xEC>^_}`ڿVV/~eSW@#V!<.a@qVxQ5@T}YlvW9@$榿yXljfIM;\ 2&`?乷gT"nΜ bX 5Y8Gj<<ЍS`}nÏ<h^KG3WoIUR 8o;M#Vyn&Á@;lj@qiM}W;n?bՀA)@lQMׯXX=MfW#w㭀wA6@iw':|"j4 lDh݀  Nj6y_y|' BO`L;m|;싁%w[ԫQiJK}t9]nBdc-1nwz=:P>;2~ΐӁlmJ`$4O߾@h:\HzBGJ_8)a@CȥKWwrN<), ])*34 iro J$TqY` yCVNLWVc?2DOD([^ly3SI&UGx]^ի̔dy`W89iQ1v s9p^s~tz#Hzޭuu},wfIF4fޓ9;CeIOc@TW}ꚛk-cmtp5vѥtytpu(\3ztp5kjѨZ_=zUښ5%55n@RV(Pfu:ߓx!f4͈\f9/[RԹ1q48;|;9ӱ 1Wfc+F/Xӓ;n>LxK1MΥY 6) *HϻO>D~i//j7LHHP3L;~T4a 6N""ODc>Xau*3>8l0feؚ=1[n0CUL̑98ŸqQl]ĻT\,@vsدjJ=gb. x.tp-H)OO K NI 7t%(AXO\$sG;Hpm8Tz*VnjvmӪ7Vʏ// "y4&Q9+v/@P~e( wo܄q`o'^MV $ue2d>~Εb.wEr.snomOtDԞ)Nk+# ^4W4lT}Uun@G)U@Q^[Tn\^q,P9s `m̑~}逷={}CԤ-ᾉ?YBw.hH,-^;JL"#h . 3~ Kɍ/[S6mO O O HMjr pXʼn?yQY;>qPO p 6J7e@ͻ|W!!#WJ/,bOc!>9>+sDMDqF\@5N׀To%G[J m2ge<*[1r,Pj_{D YeR_|7v?"_ZAu@24nov2`\fn4poqtm zWHOкȺ---\5Z pr>q>@X.4SKqG10n>l x0?7C@a||| PUU @+Fk'fDMDM, BB}umf-Oa뀭9_;;ə0`bwt;6b#6/_?N*4eɘ~܏ac:+C".r|D'8Fjn)/?rR bFv"ƈSÞ˼Y;ʳJ2\ٷٷPSn1<DDDDDDwDtx۷o߾}tݲZ_z=M~?) H/(lIDATOo/ F)/X֬kk۶mTUUHJJNnIL@>} zI' ʄEFϻ:wy?~z}> nسg2  BDGC &(:$II~ߺEϷ^k}%qehpEK=5멧͛7m*.m۶DZ,l_Q4:t ;w%>7r%::\0A!4E `ܸsϽB@cX hhhllh CuD"pnqDGC ?\.v3˲,lq'>߳&(:$.˥u a`i-qDz ,_E4MӶܦԒt0t0D Ao8!]KbjZ^Я!^K:kʵbXe-|>3P1Ao8<1TNռh48 (G ~U˽v-sP-&Iqx3M Ϟolnu&QEDTն[Z&m[֫v Ñȁ 9g萴TRwjwS(Hz54ull:~A7סY}}CC0Zi.&$"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""FO|Y&MݻO>}wOKKJҴRN4M%?߲,K@Gʬ,799;{ܣ:D"jnݒ%>x99眣i(={z۝877G" | G"i9sf' *)U ~[>}qDZX ~55uu`-Э[AA H)ia7M;сQl˲,6M0 L0t=|PSS4ڶ)㒓8ql;kIH-hMXmۖm۶US|?@Q ItD4AٶeYVmY-C<) qsOXkeYeLPDtp8ēRQ})SR, D"xT_9(lj=Lv%"g5vرc*JffffffJJNݺif\SH(RU4ZAP8R)VNWLWPe˖-[WP( z3fc=<N4EilL3zHDj&MˊWLVYn`z_+(q8J}}}}}}$_PGfdt}}~iڶ `ZMM@^^v:'29ZAŷsSs'B"eebaAax<;65@ZZU[_a2eOPI!cA'版YTL]7 LM5Mr@JjnoOOﯬ ZrR8΁ZZMxSS:uZ сQJ&~+KiiFϛ6%:p":y^ۡK/=嗏~%ȑsЭۿ;nڵp˖+ydٲ{㍮]% 6vqJs l9$y2Z1r VB5:vtx\G979C±PR(#tˏ6':~j_`ڨYnͱw*{G >}k6X Ё@16abtr<)4>wa6B5OPZ{VՃΝLH6/t XZK`qz;nq^T[&u;W)ATcBX~^bB詽a6F@ S>{Q\uf| ЁwG[s< X <Gb]bk;L;?/LPԆz6JXeA?Ub9Fv>yA, !*o*8P'ሀ܂܄؏ ۰뾻{wwWO7M &@DNڑrN۝1 4T +</c:$l"-b+eX <(J %[pMr5퉎'&(jCʫ@Nt.C {At<,$[y ~AÕOD P 0@]…ݿSW=7LPԆK jbrR 9:,\rl_:^t_ k|44p.p n`kZ`EwR. L+o0@A Pjbyr|HP \ TNl?| FʄzU [;2ʮ\K*}[!w̞lޗy;ݘ@v]Q! 6P_l=!"oT,F ZUQN,5hRM7PfWwdH@.ֈe@llsf~_+Am:zn]s5Ӷg\^o^@9Fc+ݿҁ%VG6KAu;w&㽣6M-]0>eϩ׽qE=&;9S{ zLd֯e>dJ%m2HA\ߚ.b L=qmdbC0@L4tnto9sd8w8gI_BX!"%<aMwEOV`Lc wS6U+Iuͯlۥe%&"""":qڨ>fPJG\yg<G/00Z|) 0~y%Ad YX\Ltn TF*#կ'-[8DO QѺ~̓εw.[$N=br:(4 Mґ؊LXT!2j?hbcOa<(j ПoK3Ϋ׫}%|OrfO<{ɠ,F168? \' X)ó7 cT@ C?suU9{%JK2moץRʔPt]oǺx{[N2N}*׬޻uuۆ;5qaiwΒO'3۟ v/y`Ksk"$:xԆ2Qq%IoL~m7Eh4OC:Qo}?_p=ԚoWX,Nt0AQ2_NTROa)>ƒgp2Ɯuǯݔo[8Q(N01?|H1|dB/':~j_ u6Q hƨC=:%S 1B CqoZqR5~h?hϸT5T֭Lt(}0 >pb wOY *S@tOtOGʲ,/8?>qї[7O .q(uk+#0G%zBa>&O(>Z)%R`!P'>0Lۚo 4gLO,AQȨ\ `ϰ3`+1&d\d ~vl|bEߎ^ X-a5m' P{[] ҝdNp:P Hzi+0QLFZ!RTuv};cecMC?z; {z^ozσ6 01P'3seQJS9V\ځlj ʹz`j &6TdTc`qQdx-yțٷBkB>☠WiWYl4&t}}s|yZ^/>FeX‰s>`ԤIENDB`assets/images/donate.gif000066600000001076151374526160011276 0ustar00GIF89anOOO}}}ddd⊊٥;;;Ƅ!,n'dihlI-ex|m00($hШtJZجV`&f!zn[90~"{"eggikr" h}~zƹfξ²Ǖ֤ͳL@5 @t tϠ<}ch9r߹H\IͻyHk㳆</fG3,Η tDL044  <0xׯ`ÊKٳh@ÅGT(x˷߿ @AA"tPxǐ#KL˘3G%:# t0РӨS^ͺװcVM0$Lƻ N|ڄ/+_μ9;assets/images/vm_menulogo.png000066600000035345151374526160012400 0ustar00PNG  IHDR@| pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F0IDATxymGY'{ߪZ|̳7 asAƆƖlAE|ږǶmlfPFDA%Ф3qCƛy8L{\SUk}CA{^{ڵ~G~8f) GkSƟczkEdgxܴ%u"S ((|88_A>.79q(Z!/, @1H 0'uyatm40%hAP(@<LC33)D4G{i)~?/,?Z :jp\gų)igmk O;ۏOo O!l6`c@L 虶/̒3ׁ˒WXmZaQ"2>o9Z۶XE"p/Kӆk ][F>d [P\Flf`MtCQ0 K(9lE@!{`6șZIhO@"3=:& |ֻKfs MLAA:~H\{}JV`)@)9<~?qmD  ,al(`(| Nx.̌ި(ĐOzzUw?@7X>’00"^RC)fД5ESX @fu0J 2lo|00c^ =cQfT&0 &^|iS 3]X7$);( ǣP]wQbjva}-8E~HBo_MS#ی_U Wǝ"&ffZZBL,wg䙃vF潬P{\eI0iv Εߩ Rc05o-ҷ߬LM_V@ ZQka#Nr"7晇/Rd𿅱y; w'`:ƨ k1:M"B- 9)C@*ysk \CvphS>]nQأx+{QHq׉1#Sy4g0aX8e{{CVz)hTMDC4fPkO Il0@$pZ m48Fom Ik-7tf4MphSK{u5yGXI6kHEA9Q F/`Bфx"ː(}f7,qSȒ 503 "8@'&fom%ym9xݣ D܈_?*QZs T{u& 4 DXNnX2?qHLMk受;?')6ק[?KO&33̂@%Om(Y'_o*RyONR$f.=xcĦ@L?cJ%C9RD:Va$Sǀ^O1[=WZAmw2 8[H kh͢j!r=ez{"OD t yԏ/Z%/n헲  !(ޠddLC!lQ@x<=|gu8C ţl*sY!B~ hE@ڮ+GeY֜n1pyCV#b4OF!qP@i2Q.Tkm?`>- (Hex"wFDi--/ڴ?|61%q l"7+YANxn=a+.а@3IsZ#'&%HYX{ J]e"OovD#Y-iF pۤV$ S B xPڎKj R"8 dLЬNt_v/ Wz+ L ԣj4@L[ힳsC GA'e+)Vz^ܠ:Қm Ko]{תyliW5f2!BhX*gOC6Oz%CDI/ȭms f~. m|7 <'@ C@ kli*ynC?Lyh@SюXܗy֯}53ƑLً~BkpZ@술I:_2pC2՘iCG7<<h3>A^E>/j݉r"Ee2ML1DQ R7n̑< _ `Uo]t_޳tTN3Dړ<kt wg x(̻<X -Bٚjr}բ_hQ41:CuŚ2Y!őOHfP'"¡3/)B@0%Qz> _,(sbC0NNնg}*:fc*.GHHQT4 ?wd/ҨF (jX@"I;l=e]f_ J5L)OӬchxݽF$kKZ8Qey,zg~/WI(u;xWճU x{qE3 5" f*xC#@^I3uOTb̝N#kA3aOd2Iv"iӅ[K74A.߿~h߾gj >gl1v uU=$J8kҁJ4fֳgG݋= }7Alf5Y?E+{6x;l V"> ,-H)2ci(@`VCF @}vc(:2O0HI (X<-22AOY.w2LG 2Ê8r Cſ=7RT oA(wHi@iLK9ם ^fʙ15G*imm}m;&8O65=;ˌeR [M3KW3R@k(E |=+q@#S @pxZ@cc3zB3>dq%x6+B FH w!VX(x @':Qj@;J_cU%c*Ks"ti֢HG(r/)-*"kӤ Ljwĭ0/#i4漐M2Q0~n[ݿ)&@`pYjIºDOnFtX0KҷHm 7V^n.mj1_mJD62z@8ouL; "py6Omm .Yϭp!GXK~sK$uS٨*B,C[jo[+v#:+"ß ƨYTFnʉC{x] Hs\]Ro1`XLuL?;"V05#T뼐}h孅# 4fS5*9TH㦢TyHknr3i"QDu JfN>h;"/L ;pfgP(`Vn~9lg5C/%uRpƌH``sSݸ(([)iB;Vu is^Ea. @^vu:{~ ϨwuL cd"$~Ү+.J3.+w5 N77Aigx(68tU:S ĂPΣ]gv1b`e5AAw ۶@X ]"jmVtJ!Pv*I@%^ՅAdfklmѾu~涂RSܷB♿Xf"8k7-h5P߳_*,{gj|B+6Jؿܽѻ ͐qڔ#͈qV7%>b۽\w3"lR]!9"t-h z@O4CDyz>k",4xs`E~ggIU zTIZڨ/iUk6'dka{5}TS tCB5),b r`ޚTG?eftCW0D횢+a(fZXՊafvMTe9 *Pm:P3fx' h^Rm=KԷjQR\ hbtD8_PHWζ)bY:Aǩv}SkRU~Gعopϑvmg ńQO7?TtIfqg ZfYW< aLp^^Ig|O&A`-h.NM@e(#mZ#dBa3H~fRЧFFX@%{Jbi[Z_yF<XQeT(KA#4U㱱n0;] 0Юk ЊZw~V@  Pʉr#ɜd/{&LE =#)|Q|8M-B[ld=8Ri׾:GXܴgO- ´fŃAqCbXO|c3Y)σˉ}`@3EPXWrp$0sꌥ!@$2d0U0]C ,}K5B.v).Y7qcYV rx)ʉC@KQ=Ppo>yD@MćK={+3u]i2@dxt5&8ѪPXB!D.uZ(()oQaW3(|*•w~0MMy"*_<ŨB,44(;D/R[L('p3xR {4L#D,w Ѣ(nhg6÷FF]h4A?̾vjEp 5 @) _fkcSus(#Wᵇ:\+quc4  rnN)oK b,8ԂbB߿ VHؽTأ=;6)2%D;3ur溾Vn"̈́3fE5gֶD8jB$hB3P@!ik(Nu7~i崸Ou Rް@!pa-,!%AbK% EYHb1RdY#_j2MĄ\3 ?!HG5?yNe)";8:(SYu]~&Bͫ\; ZyH9zIIU]GnwybbB+ PcSusuxod{/3w8Dt3ڢUfk*(Bd=&H$ )C+{M(/y?)J 840xw>֠\be>cBd 5}H~EgC󵥞`T&H@(j7tVz9rXN rZK $*( x/X^1{^R4$ le ^Ssu }w ]N"JW @Ȇ -7DBUZmt;GK(!dWX3oF'+O!.+uoe}uaƋDXgpժ44'{Q D@-ЗteZS=7R#/q7=J H)sJswKjRιJVBs46ȝǩ9_ !aLkjme_A%k&8ɰs$q<#VzKV"`hIiq`6RKC)Ů#:{cBY%bvh.ISm|AB.WY;Ŭӡ2E^@iT+H"yZ oSE`;ߵUٷl +AoZ?jL5^op2z*r'Zwf;m3@P\%uHsw{U`nzEKZ?E7)Ǝ,CiẊDLf;֏qV@+@֊7=$YFE ^JRtP?iiV 7|$q뤁G8H1ȪEf^JZ/Ԛ; fHSJe"x1 $1T ޮ8dTK.]YefxP/g[a%ta=v4ˑuOӷN7=,瘰<"afw2bk"4 O>-=Ofh@+~wR_"\ a,ŦZH ,Fj b8/սzpz=2ljM׃ X-w/=Zrɛ5Ko*@8qў\*'m0l֣ )?']Fɂޮb68zk'$-Er8Pkoʆ+_ce@Dڪ^-Es!m7py~)"[y1GmamE1DW֍KGth)ŵgmj=K?eX<;_UH"4J_M26z@3b1iw{M {UozֶFAz -bɻl 4~}Xf 1;V;!|(B`nM_Eq=[FtS{kk ˀ~[gϸ"}8 dDxA?b9:eDKHCW"WɭLF. -%Js{Ǘ7h@ݻw_T#ш +&֣3zauK+z{B;Xg-Wd=K(]JkT)/Z2p(CBhѓG?Hƃ_#se=+1KD.NUD0K}[EHQҕvf-x7"Α0ړ8kXʽ{>p^C@ÌYê58%=w{Jޠ+`6꣓Ƚ^JcF!sf Om~\ތN0R" Nm ܡ xWWAP 2iBÑ#6Q| $<ꃊ9Blpe4*nNT10<,k, _Dm|.qP*<,j*ה?w^@N&6)(dR}-4 x(\ at\&= Uhe9XcD 'wXODDtJA1aB#*˸dnu\ѰRnL-wi+6C^-=.^8ٺiMG6%mlVpxX #zO۶xn݄~, <8܂ m=h 6GΕXXO1_pa$V`:V#%;p.=nj[FӯA"OG spuyhXX pyq+u8 8([a%ud SXK. 8A(B.}==;~A&O"qމZ 6#5vQ m0#e> tHU2TV49B1,GW y \؏+a&K"|l] y  p(A`= C"/ 2`5)dzQ$3Jl!|C( e.J&#V*KyRpQ}4oIJ@̓i*+<e cA]'@u_ T\$`ΐE 27ê'՗Tk麙Bo-_0vcEb.;?ES zx̽8'>I9Wep-؆|3~n"Q}JDps=q;M@snp-K(B4{dN ^7a|=_2 \Y%8q1kop:eY]3 >N5/z(!?N^[FҘt݂ZVK؇Rj-͵JRmR_/Qu0_3wÐE Ƅ=혘|ZdTa8܉,M5j~\&z8VubSpRnq_X-,ojjoP%:0]y;1[\2V+՘zWa άƙcS e]UX ϡ!F /][@V}JPc=W%tV`}cEGe*r/]nY99391YǶ;QꑸV-lTmzцϫ1MYVGVoNº"~wzOu{bg|j&;aX%?3]FTꚬb}/򜨝^ߘ$g_QnpdUD^,Ԋ}wgVy.x{𘱟V@['}_ (J9!R/~t3ͭ'g1+\dDF5ѝU8@ x1=fl#qb1玞`J|~l}}pN<|̹`<8|'*~A}oԃXNd;SOSTRtt` Qd̲mEBa/FJb;h~xNL\ɽ}˽97TUU1NkqeeU,-R]GLss֭#):i&޹}'zfCsg}G C[t:`PE{?ScNj ;w7ea(C$D"×.'N|Yb o.|qMd@ߦ B{ TTMŒ~e99bMW rJ U m@YujB$QU[ERf5o%[P TȲL(Gn7F%@icSooiadǎSX2?z1pĔad(Wu8Pv8I!# @A$Kw@nK) kkkX 6<-kAfeBvɒ|bhhHDL'pt N"qo&d`yy~i.Pty>YXX(qGG i-d2/0߿weYv"fd 2|2c,-- >JUc{h6e1#**]Xb^d麪@{a \SB(BX%lu$8婓Ir3[ZZN8mU)I|! sTbW91wj\'h2*0ȁs[rV`,S- !>2|T,Wgf09YWd}ՕeZ__ߏX* ΃X ߮GKNӸa34IENDB`assets/images/delete.gif000066600000002217151374526160011264 0ustar00GIF89aʶ¹ݗXlོ󾾾lyyyur|ئMnr򀁁}߹m{͕ެ|}|]±ͪԞٲrϩꤤֽcy~^}Ouʍ㕟tģݒn~篰ڃLpÎ;XYeƋ˷Mj΋_u~ÿῼ`s]}ϖǐsp꠱ٷwww񷸷םKsͰKtͻUqۻכLrɾ"HәiE_i~eRmڽpé㔙bp󄋗郃ȷBatֽPuVy쩯ـQus֑Ύ׏اcڢսд! ,@ ("D 0`{HHXr)~3A%}"HN6Qn,:lj mLhX7BO "pQR&8 ʽ4 6\zhm[r#$%\cU91n:W `PpMYC;(PCB1 p O6PXO,#VxcbU\|GӌP2@E(Cq`'*(Ћ%qlD KmI HH ;IH,p߬]& 9,ȓH%cя` r@ Ow!@)VhKZH)P8Ex !.mwo& Jsl6W̙3guPc>}a5gi9dfFESw֯X6ahlpjPOC*)QNyʽh`8b@mRxVmךnHYH#ERc84] LKƚiFβz55Xdeb'4([)%e5aY, 9^'Gy,"IrS.DB_R,|Na[ĉ9:C$d<V٢T`9sEnjn [ܚ?~o%9ٟ O J#@P^f2DFʤR,dZ%(z)m&6lS]Ye謹?-}Bzh4`{3BH<*BMd[l#u<EvO[Q'4MĀr{b>"DFJt:mN~E'ו'hta*|ʭ[YO+a5 &@- dnb me[~~sv1]Xb +Ym&my_Ղ[8}t]q&6"';ؿ>Wc4rKNf @BJ~°J*a6;ϡb>[s{/)nXB^ 8-!$&mW;Qnayԭ ӵ5,otҞ(ϐ^yHvsƼo4ԕ1'RRVCOZKg5x%9dPYQ!}y^ꯄd fD.>Q\TWͫ3-**@,in+VХcGnwϋ4ya]iI=i(8#9WJhf7حi*Lq4QyiFDx 8Z;/R Y&]@4h&XMCd>8SU^!T*+ЌR7԰fc@.K۩c[ܻKJsE5괴^SzO1v4.:7Yќ[g:^Q'3 *9ŠQ[kIjpwy_Ou>wF[Ȩ@]XJDh)*?c 8R\_ei Bӕcnjdv+qţnwλ;,:.,%H8H_0d˿ Fݫg/kx[>Ii3a%u *=߯_O{j彧j8GX˫wNSkקR!nDE~OUNR 0遉LUH V~]7n㬌d,SI&k2.j1dWTfq;s.:zi S%?_ؓxԁE'iʲۡU4<=wB}jP&Y_]/Ń9ý{yNX @* GY'*CayOVܶMOލk8~oEkU}hC=&'*anS b(O9*||Ug]2}|i7oiK%r~emo$wtߠ)9vvWtͯאg#ڔ]MlWPpܘq詯 $'ԥ/_$?$gUsOKs̾wxnh_η1ޠA3 K,zБϝXvƝ {tr/Ww )o鈖^ ^ֶe PlqSmixHu)8lfv1N'Yw0q }SX,v@P+6_\m:apKb|?_KЙs7}G ue5ze/o_sǂ^QQ>lڤ;n A.W?ާyNݴ{;#`Dب%%áaEiRtwZԥ (&m8zP eslSȐ{zltPHdOל plvͭn\i۴|wwN֨/>{i~'≮S;'1c]v`HEF%e ޏ*d ;##6Ps$&.42֤I9,8+W;+R! L߹eЛW/45M^BSLH*2Gj'EgfxPh'~/6i'&XvY*[NWR=m\,%uzj<-=8:(G%MӥYy[=vqyQVѫS=qdd3 ^Wy'2T<߽eV 76~s'K[V`z)N* ֮~;;ύl_;g[}hGbq{)s+-)?ܒ.Zd v,=6}cqN| !LvٓZ)fee.Zɫ2p!L}Z Ae~*Ԕ滪{[}|>KB \Ʀ]ܺ|K]&OAwWHU56P[&q {:8"@ie}riXC<#] uTX護R?.^~H9ebH]'qcezɨ'۽9n}v4O?H޼KS<|5ܱny1&:.g)ۗ}V{^yL}HA M^ٖ ={]n<\=%Jr<Q ' $DND>:zg ]$ACRCbc6]]^^~=00dSQe{/5j?T?bXb>I쬈Ug]ʺ6b"R5AC_1OzK7Ax*;yo/wozNJg/Mķ55 !D0WMy?y!1 &CҪ"z_s|vq}s"/z௤On&O' 7G݇Օhq=bpfpLX\#/hF_֟R6c1[ڬG@_s2fE^kjE0McB*", fZc1iۄzD&@ɳ\K)?03 a`Tz@0i\`X̛ŕG y<pdfIݪG WiF<=R;zG2P&d2O&/DH/ T_Ymi]yT:s,:W^;ꇓC.:򜇀"vޫ]@ܨ'v别 ,;CM\3:g1$?gE ɝ y"V9vEq{$NЊߊ^0fxLׅb_c[3;b!qfB$ .9u_ш xDzs#P;DY- xܲZt\s[^DN;q&b2L7@vj,PYkF%u [ƁR)"C?T$ ,xqi[>{]tRzOQG'2̤3[z{/[-a*PsƊ}7/ hhapqL9ԏ8)8Dݼf& nɐ/e)DO08E' jA E Eך:/LEZ2j)KzcC %MR]!k8+h`?B$8!#HF/4C1Z7"kgB=p7DDI  >^sm?ܹN@|933 oa'+$Bie¤g& xx(L;/(6 ]'^~%QBd9(0DDN$…pស8FmE#I`ܰ  uBY|_wS`Ygӛ{E|. FA:1ooݝ5Z+`\̨!jS6}6|wdGq26&aeɲ<~\'+Cf"1o1|BD.V}s+3ȏ-A{ 9PQ<~ʈi "5pѷʈ @UCaB/B UcaA{n* Z\c8$Jq-0 PΏr(QHD| d L͘絹- R VdkawYex0 Q[E48Luh I9!@AE mZ3WʔDap <<5w&c1 |n3 NlbjE.a\EqW_L7vX$~.ҊE,Xfl6Qtq՗AQ6δwY3pΞPWs!pBlS>^"xqj8⫅dV H/@iV+ѝ%v_.84@/ɘ(ٚS6l/f5:vԜh:a;i֎@'gh=QYaz,Ru=dܧ:E $'z(gkᄏ鞉^ jCzBA+om_tyo}GMʉn32z}@U+n_߫I{se h8eiy (\e 6O8.*Hz.c-_eWti`i,Ƒ"#W- vƦ.BϚFvr A,̟:yL$U#rW×7R=RUq[d:a@;oM, I<Ѩc խn5Ab.(|1 3!=KuYaRdE#!$PBUV\f:;ckTV~MQBs:OcD><]G'">UF|CE0 ҫvc6![9h^ ;9;dqzf.4PW/R0܁`$J%Zp.Ϛ\,P㙱1 ?vvڪK7 5J49=`s nw`sOKR@Tpe m"T,]Cu%]HlA ו^WQPB: ?gñn׌3iER IDAT!=}`@4zƱ/y93yG W6!*s|HlS+!+/lbc?`"U&p3-EG~Q)&k.3 +>9CCA49s5J+[lf֎=3&?1~NƫnBt< jJljԄۺ™gNP[/d+@YmurxEӦ:HheA2hۭP[z%  c}uNl \ jpB B6赎fidUٽf0&ƹd:(⎫Cd#= Y.z8 lTz l]Dq5+<߮3SY j  0j5b/|iZ4Z5hͥ 9}ȨD@Ï34rN6e_$<\4uuȔvqb/6Ç+qYWƆ[m, Y V=0y.m a/߀(pG9IJ6X2Uws euG*[}C{vֶ^*7>=&E92?.2uh.-V^3GEYQ,Ξ:榮:k/>"؟2ԛqUW |l1]fý}A^wP'm~AQB TP u.T5tXhrvunP󢙑|T4-*=\zQ㕦#khfs%աoɷ_v ,@=˵yT(9cHO-vGI 0M0!01 z·ʌ n #F'8Д tb.!Aǟ>S7تJu'4c_upۢiNg l~f֤],6MNK8Xb]Ǽѷn2/)cwOIRMS P'b4M@083-6-6jp.*QМ2cJ~8[qD FpotN7 O#$ $K˜w %%1oWQɋ-\,qHnm:jcrGm5<LWoUvi-r9\k-ۅrTt}uZɵws(\:wIRQZҥKBEpxXjnt 8q.ٵE 򻨔?_М.̵4؂ y>>>!/Rlxo\A$>9%"-V5\ۼy={UVVQ7r]ǚ7'\'&ӧb#GvY`Pz/lcn:;v ]p4I4uH=$TMq# ~j8o9ԛ%)/p{' w6}ӦMcF5Vu'A3Leo$˘9U}Y @ ?{\3I.rsß.I}׬Y/5B{;n*H/;*/B(kȇ2k X6?h!DyK :tHIJ;;Vz3,]QQqbo޸q1t8qŸ\ '7dp4y_}{)?TJ,ˆ6Tq| g OAwzsU@m赙r)ԸTO+ ùןݻ7oy39*6!5sjy֭<ql__ +2 F'J $U3R+"&"(m MFgzc|JDH}62GJ~zРA 1"qF#"X|2eJM_mp<Ƞ9By:pjܨ B ch1d#Z UWBނI q7A0'yT)M*t^K/9J|┸8. }IUjNo B@aoݺ211cX$64<6 rAb eo`7%9*L Jz= O6 aU(V2;߱M{jc&LLޙ1M6Pr7ΝB$r|.$av$=*E.T\GuY9aMv0cKb0=l@2[MiW/ݯ)O|_J&0y$A 7V]BkFڞ+O[Vu~Μ9V^?B9 mڴ~&4u"4sVH5n ̨1(ØD$jՊ=qD6WOڻ~wuDJ8c玳vHM3 oڲZS{T^Qώ^祈7EEEMvO^#bD (B?OB2bП\^=*f\%Yx  O4X#9Ms]I_m:$54?|HKbGaUNWkIhKC+ڣ[A۠wp,gQty-^bq6=!%&wޚ-Zez'X iQi"P`S,ZvKjH8 ڿG}s7np6D6b^~sMc5ռ7URPLo_]/sGbwp^ Q>lbKFHL6mZ sB\]yz[^^ 蛠(*-/P]9$K~cO& i`4z:.!_]j㴫{"䠙 vwދ_%e˖ao&P# =w!lLr  #P+4ȁa!nQMVYZ%v*KUpi4)s. ՠ5Rb7#EMN_ n; jAizF~j38\߈'~*PB貫?\(>"uf|W{Eh{}k \I>>O-VjAQdkZwNҡ@eG0`fqpM_fU*GуEt"bCr49[+XsesGPD vZ_lEkO78s?GO @ ⶁ[ѩl5ŵ*h0R8LyD鉼!o۽mUmujuq߆z [Q#E[b-D V> %/ =ܿ_$_T.cG))#(H8?,,"TWT b,Fv6dMRJ6}ڞa2*i^`m .1`͈_ciM2`J4g"##5)+(X眙Ge : :'UP,O6T)qGBHy< 02ke11*Z] .5swKz*BGl4~Z,d6:>@ DIcZQ<FbEټJ^ʆܒB?G&8z.wy)mL3[Rї‘:, M##%#AuZtf()C̪+H8drebykcv"_M+;]ڬ@5~(gzk#!(B⤐M% ԑV|duhgF_B }.D@Vq%lk>o:!‡g\3ihC>1/uްR70-PP\'ʚ rF \*^_Ix\\r Fh:HS>">6X2CJ$fBJНv.Uu U, jACS<ـN; rXZ-!0UV c=bQNt'WĿ8``hPX5k, \vwC v߳2fAƏ4YMCfoypݱ ?]Df4$?)oP|h^R}.GwEt2&7smKGa3E a Ga37P/^D{wSgTtgB>.4vE1ǘq13&ql(ٮę}0M \m]E!Uόq]oV8r6'3s7&fb:%fANr=jXE\i72{%[k"!35R+D}?x{yAe):K}}u8 kZ1m7?߷A#V=3pݵ+"f΁K3pQm P CF H >Qa|}~?8L9Ͼh !$,VqXꪲr:E?f?NIE"Gw<&I,i:XCo(+R.e 2~hШpi/\ zBYǏ?8' mԹ3(1oxjedrcƵ{3̞Tr̆fWxQ 'H#5m;cW2 }PsWD"o0a>V̒՛T]A.9^zYzܨ>Bw y*/&"#*Fpm&̫RwRrd/k R >ߛV^u썃oPVGvsү[3c";:7G!Cb):~:7"AOϘ>;~t'n|P҄A[|)#g*\;R\j% ProV̩I~>wt+ʽ%/U(5UJ5TDt7&~Fě@3d/RFrɄ׮^%ȾWM]#Ί }0(x A`|#1i,|#T*԰&n>ĥʡOv2nWּWy,V~c`P=n Ɔ- *٪3N_E6̚ b2r]=d#JK?TL W!/]v7!pôEY޾r[W-a+"#Wi)sZ:6r&IYeix*u3mlLtVa-VCV)z*JBH!0,G=[)jWɑĵX K@EXq1^] \yWx^6?_s~ک[c-](`.mRwwE 1/@52=ٺ|`y'QG9ۢū &ۗS]_IԣtI6ŠKjM5.QGyW# {"Vy.v Ho޸xl7N7T|tWĠ/kMJq!<+=ؽtye)5b`h~Y~?˻L:cU>o尛OK:J!Ц~t/nȅŸA;pH<[WGO{ 9|vq;7h$e9#^A31P]eA6Ò8Bp>]뚑KG|`>A'%'>KjL/H!㈈SWSa9,dwwWvS9 GϬ_.^޺C tnRA_#eJ4y}Gfͦd_J=ZG{\߁uІo/kUYWKI4Cq歓k%>KcrnRGݽ8 gjPI0R;,cBi5] L? qtKúwWh/]eeqZ@ܯ2VozQe}dWDR[T@ؤ6Q!VvXȶ˿ʥf1Ar^p`K# :ZT;zAb|hw;_{vq{=%"s@i)F\ tpM ; ,Z!,)0{߲%>AiI%R;WQmVrzGJgh$l_ٱ>f1݁QOt8Sҷ4GUeΕ/?>,'yR}EۦN { w`9l,{p{蹥~I! 0(6m霪#'BTT},0T,ϩ]jCP/,}},P}q+<?V{O% Ι<#nw-E̠zj4O!3`WD)HwM}[D`39xŽѫ0UFD7ӷʛ!m= iO8}2j[aA}#aQ)|z|5f":E ~<4+6.`ٮ+eacq-pSDx"yԸmnBB^R)%F#|5 xzxMe)/JSy,-]yNA[TSo8,[?vb_Bb(іY`d6T nNw&@;KTݝ1 _{w~_ت%/6%%✘oݫ?Lj (Qba7/iT*ԣG'`o~п=3qan< J{>tzseY Yedx3"a[b+yZc#xU3-jeY]˹NZn= kg8w* ?̽gIOH%{PiZXݵkcm`WE"P{L{ϹZ@͏yyO{}Otɗ˿>Z =Y6ffw{}^۷!PM/xO?]]NTh.s+BlA(--+;ᆏK*iqݡh 55EUGt(P\8 c^o/xϤ;/rt k.ԁkӋU+?zrΡ#Ƽyuli9sFH'tyڴ?4,Ze˖dž:0C~w#}~yÆ_>6g"iPsOK{ &?n'n[,l3O4駟o5O{kEiBs땝+K _~6 F/x-K0ϯ(|*k@\^n+yE,|hx xQ#T6Uv\~aw>6e?z {i}Ejv&#"ZEWcP5 t  #hD,>כ)*"D3kHQo+퐖7Եsz!*mQa>#=G] RLϦϠE O#i%.4-AeEXm]]店 .e$gÀY7#Å~c_c~s#]ֱ\[Sp~=y"WKK5e#GNcs%4?HQK2KՀ lOm15uw7Ӆ hײ=πֽ-ӹ 8We{jm@lOY!x8? dk:f'9j'exf{N!\z% '7=6 ma{Rh6Ul?sZEсr( bU$'Aaǔ΀ ƍo"Q?5e=ޔ"kYlO [/g,(=D ?`lGITd+ UK;@X0(C"ϧ00|F LgNQ~lO- 4lOUz6-JЛO1dW@}5{绶Ulq냞 \0W]&", ,"~2d\SĀa{t3e{${*M[I32]1orAGEK -_-[G7@%7@:\f9{O3/\ b F%dI(%7`^i'PU ŹYuJX/wQ)XcU6b^&% 35ސ 3ʚ1 v sb4ZBuSUQoT%/_\pS@ȌvrvGg>?=*6#8|W)/BODZ.tW(4)s0D 竑Kb\9n$z)=kSlO-}?Y)[FSV&DghbMY(,nD=/'儔>IqP~c`P( *P+Z3$'X!d%*o@A_Q' Jw|'tb@ #^AhN1<GT "%G{4o`7Jpߡ[0^Qݻ7_~궈lO6xǼ;zr糖藈=Ѐ@)!:CE^#Ӥ[wB{0a3a UUDjHH&ԴB{>WW,uǧw^v%"H2>IƆɬT4Uq`d2QVM*ߒ=a-K d0C2TOOb eN z>JTJV"3A&9 sH C|idAu}hpynhQk׮`Yڼ*ɐȨrrrR92#j*7k`EUYnp*&wnla4"z;H::Il$εUة >$~7K^K4 g ɍH}Ǒe$Y+;Whmdw-9`{\C(bRXrn(6*IW?TXB4G៖ԦE\BB*<`{ـSh$ BW"41ĕ3U{8_X~>r3ʾn ϒ\gCdTB̒H^%qHN㋠ cyb<4 ?)ţϒ ܭ$T_RQYgf@ʗBx#Ge[eK~pmopjӼYo>'00\Q‘W]jUa$WIT %es4~䆈˒q^2{d"c.zd\du'9?fb3l8By 1y]X\ P2-BJ!%%E7fbU؞OXy>XbIO|'60c=ZSCR'.f k{ l۶-ʮb3rņKܳ/w4'u*s9F@}G);f'A"e T#GLj_M'%NoqK>bl,$&GȰ/N*C`ˆ۷/ٳgSfdj(Z& `|2KoFۊbNk!P[7C;Mb$ : l\ y7Cts]qv$@l|`]$fnjäGݸ~;cƌÅX0?#!% Fٕ̙3mRa@ƛovt7D` vkĖ!VaP+SdGV~0m?ŷB2i&*LhX0!"z֐gI1]+cTN&:.yUS5=# %k`I|7xc+.آm=5"E!+|Z)yns8=k wYg+0G}M*ϲ=jH[ o(lT6Y_&J6R'Ps. VzwؔqSBiӦӯSq7+LNc6ȩS?~Ӧ 6boR]'K b,:1߰han-Ut@C1p؁xLf':뭷/LJb\,~(*5.Wd̆\)A.Nz.0`vI TAݣ[l{MrVXaDٝMk l.T5xd>NySX笰 IDAT!r.NYNͣUav1qS'wճyTB6hPWF/.:OCS?ϥ7o/-!`H'@D#nIKROYV䑑9R5i4_f'T1 wʁ˦zP>h +! iVSbu[w֬zuɷ:KT UFN~0;E鱇{N5$Ne'qsC@58UP.DE$=͆F C}+(+P }ycң[$Vu$ZO3;ўg&f`vz^d@CP.RT ? 7*j H|@:eHj;-Ѡps \°uuTQ 'f^!:"H0@ (Bko#5#tbӒzN&͘ynw6P#sO;N(R#3&-iïudnDJ_@(bJ qdH5$Y3HN):2vxܻE1 `0ݏsQԩ$V{@@W|t)9b>S3 J`v*'%dYhOT%z,zB\JmFR6{Bs8%Sǧf4oBRPűQ?=剽VPKWg&5ҊF f')fcZMo=5F/$h_RGYLVKzCJF#z.AjkF$ >_%foN`x._Uit^Os} /n1B1%p[0;g_Hlih4JIAQ0H8;5RߨNO p ,e$`VCbˡq>ޠ> )dL ]xtvGǵ3 T$ DW4uxNi>9ze P[5q$IPU1F5Vܠk{TAkW:\ hz(*yr|!pr*ܛosj ә*(#>VkTRfyxASN ɊK`J t4Br:#]N3f&[vQyAѩ8p%h2iӂV5M:Ih0e^I:7`1y{GzR L!>׮ֆAAf'0i&"~#L}CovWH2h\ФUfi4DTeOUY-Aᇋay6+pIT{?9\v|K2^mH>h m!M͠"lu'~ւ |W-c>ө(fS͜uNdUkJ/e NIRSI> l BYU6RnjOh6yA΀-kO} d!'$dT95$T=3HL] INO.m=aS_LΈeh3Tb}3n= IO4/U(/=dԭ!%2[L~ND(W gJ˶:'Y\";!JDRovh/v%xX"bUUq_FaB%h\*t*M&72 xMϮ[4e0CրVsىdo?8#!ȠV [*i?/!6]uTn)eCf2>@CLlMalU1d.a@pN+E)+$=zo6>ၚW'߈ņ]}mDFCe&Jř( {Dkq=.!|K||opxH=@~!w#Ԋ\ %ʺ+1_-M. jQЂцc=voGI?|ѓ7ܱЋI.)獘u]Ͳ|`/~ )*xn/XF*J?S""-I]1/]*ZE?WBBX6;9\V,_YkLt?NAQ KL|2;͸osNXR?}2;A;}=ݸ/2l.|z)}UQjFUwxm&FHk $E#@5sVi-Y])Fs;`vf'2;m?[|>NA,_w-.:~ͺ\vw@_EY\v1keMV)=~JlSd#bUh u<{j9..)7z!a IىYUHf'G>z 0;)2o뺢i~t(cc⚍GCJU9zjVh>,9T RQ)n6$yZ994NdK|7 U4 .^K m48aj2SݚMBh*l-tgMd/%p?L -3?a]Ȥ78GZKռ/J>r wnbN 0N{E;P\\ycjtNI_k ɣӫrC{5U 6b:Rw;<2 yid pK2Yv5䛞: gff?11٩SkMeע>;eF\_6,P[Ufh0p` <F}Ag=:ԾUD0DY[?!Mwrм{Ow9Wc2 ؋..[Q;y23;22B`vjt}nWNqB Ҽ5kV*>5@qzAKƔx!Jӹ<^\RWʫԘ)j$_W@,+Ͼk;km_۽f;sqz8[w?ږ/1}?ZyyVTXq!ut{yucL]nPa!-nר46ie⧋TN* :<_:{Iqc_>oeeM EM&ZoOi6C 7l\{6Sdn6 e˦SvadjjR55?Xm,hLV\۠5t~Y3jĀA rPWiE+"j8ٚ_Gv)'9Tj &r8Ζ OvBX?r࿶ _S" Y&8!zx|hji0043nfGexSJÈA0RӋ&Qu{|r~a}_ٿi;põ2<+tjC_GO4Q=cҶnl$2wcɧZT]oWC6lz\  < UT۾ǵG=PVgQ~IC\ᴡ2$`\E,ƛV3[VIk习vQ~oxժ{ԖUX#=eȋ"Zl~j@&^,G51^8x<}5WR7PJ{h +R.rj v`Ϲdhl]|{o~:ٱYUDΛ-{ED#St$"=qD{ќ@T"F+\(RR<pv*%Zpu?Z6"PU#]BBmT5$l/a֕?F2;w?Fw|#p#Ъ+!=&u-w"`(ceH?Sl)*y?b\xiua}z&a,V,c5E g@VkEmHsRlPCE.dD[ 8D􄣷s?gTfYU3L%z&z&J6{@P=k5 Bf`פL큏K)5V,@g3g Q@l5]6B 49 гh@ԗ= ^SzeU Y;@j. zv zFz9gu+.js<=;g7 zFa|Ж:)W.=km@m$*x6DH T(,V"$Dx-z&N:$G|3'g]zʀг JLa гFrW?2@pAe[H+oO3ل)pa#3;g=x=a5A:FNU5`"Cxī ,$h:3"fF(􌴀5zt^Y]LLkT+*7YYa99~Y>vT0?x!%o~EhfuINz(г剣=GCTBG}>Qc\ Q:;C1T\c/6=D!Ka u6<6cO R䐣׆`[g'tdlNAϖz6c"g#=;zl@Q!*XY vf7Eo2p.mp>}z2RܓvBwh}bZIrQǷ%۠c҈"6:KӯO#(Ec2W (+ݬh$N*H\f@5(l`M/9b^ Xh &&3RAǗ ~U Bq{zkFƵmzv@q @v+f8=#D_9$ƒNlvJ*. t""/wHL쫬{ ch)?mWXj(t;vЕhˎƚәYг〞[w)zzƾQ:t-d RfBL+yՍ!g4x>bYTפFu='%ƆDcHE-7^֗J%йTTu:ߖWwthRqE]3 Z@FbP_U<hnkC5`^))us>",CQ+`>޵Vwᑻ2 ){~,QAcM1}{F%J()UhyVHx^MuVRA-ujvG(X@$Fw!(8#`MVW`UEgzvz.pϓw6&`ؽs]lanJ~E &"S@ `&h$ =5xdhn. 'HdfBL8r,~4wt<1@) y 43oeU@ˮҫJ]T3Ńpe$'&bNq]ſlzE.B.ib@#y g"*'X҈R0X|v+3Oym/(}>&PYmo9r;5kVޅ:\8LӘ<"݂Ό IDAT ?Wu@`ij7F,[qV]C:SrK4FKpȉ.R[ˋ^0Bv'YuFFc3(jK.ـC#`fos>ۡ!"{<'S|Rz2@FB EJ|ĴkwVFFig uͶz\ eN냛{.rx1~zg7C~.K͟aw?F-|#ݶ<hK/7F2uT 7_QK7% ^͋x 2>p/N.om8C3Iёm9>9cZ j38pٯUy|UmxMu5H"^)G!E{ vmQQdm\2Wp9+\&VZ9U[.F([9LG"`@y"DӻKrƝ7fOoD 脓4ţ( xD1@t>EqUT,\t|%*3WRGѸ,fڅSbhs!TSW>+ݎS' (,nV(%PAK!ͧ?T6DZJj7oyf ;MjoT#(8 TQ%FV ">톜7MiOJ'Fb¬5ᕉcz \0+z݌)bRT\1)*2q(_tt\Vܵ웢7~}O"XNq8NpDm w]9/  _uL#">}Blh`zVt֓ϢabD)H tcjojr7" Q7AJȜW۶+]y#6##}.*jƣi1wߒswvy/oeȼ37j(5A8@L(6:(xU+ꍾb{HXyX QR}Orw$\Bj9rkɺF) |ޜ #h|)9, 4܀RGCE+p)!%ּ4"Gr5w j`F2~t!oMM?^0Ł49ysJ3S0Cn$ek56u:'58 SPIDG>4`0* bNo>N:!u/]|HfMMH(%mYƟ_.[Ep?‰0W1'jm3>GBur: \S{f(c`]FRp#Dt:Y`FVb 0H 0KxM(+LG # 7phK0c44T+jܹ陡׻#ʣ&[M?|!=޾]uNbhtЉd12}: 5B x ~#dWFJ1",J(rV,T p1y (6Wˏ'Ĩ1W 2 GGCޏ]>mt0BwN|1t>(`RaR B!bjj :(zyO;QȇG`툕ogLCI4a$X.]Y\Kp 2OvW4?<4ɵ6U&kL Qx}Fm, ,:xx͡jFϚ AL^:~pgܻ59DIEouAB ^4NjZdvꢢ\:s[QL~$ٜVQ *1ȅs5:Ҍi_rSqs+8p5Y0OBn\N 5؇0q Zѫ3톸:SBj)Cow _S& XIM ! z&Ӟ&i/ BHVG,{ h14$Pk9 q1vs|R6.ҮՔP IулF-/*s.8A45>Mbsmλ*sfULFjsjVΒ`Ǧ:x^OUpTl]zJB>uQYٳT{NֹX^%7 `#5ui[kk%Wv3ћ?g]rC/u:6wQ(xUlDjb?Oc# A9[[rI|T…=~. ga{Փ?Fr{?F}F@nvơC#F/`7kg4,aM5Gfm0fB;Zn]ȀS~1v'gvXM/AMfa߇<\,DCRO~mlӕH"%y#HI\SA6@,pE%d+ag7;f767gƵc3CBRp"O(fh9ӟ UJ5zjoXj)@".ݬa#we?Ñ`6 thOq)zB, (6#XO!#WVZ ȉ'zp_Xmf 0Sq\.O 66TVYϾjj!zAǦH6slhCt Q&Gޱ)wN[Z<7٬Yy8jSZ~O߸y|G S uʗ _i\.F w$fM;olTl J] |Dҗwf- F)Skvgtˀ]fFc|U+5\UEP LfcA!]'=xSdImQ>|{7O" $v4c,$7_M[杕hOBm2Ɋ+{3 z,)ge7Џ%Qi(%p8y[FBrnQƉl;? `w} 0鉊QP!<#I$1'W΄H5b}993,;0v+ϳHQaM!N:AtTL:a4 ӑ8@Yտsw+{6l=]1.!V行vT`I7ask aMiLaͷnVe+gS=#f1-$;!8 Y*ԤX 6;א>2DtH*`)tD$jVVeO}žaԱMCNP<#Ofg@5{f[RK5tbc_#PTR'SnA˵k; )ѶL  UL*2#_MˀO!|cpS{{'Lafgq=zO֔MdvZAg&WYYA].ǧu-(,]QG qD:RNz[p<$_stŢ|`!lҸe{H/x%/ogvN kd7;crH6[bҢ@X33s+ XԊ|zrsOX^vٺ0 %> ţ%t9Y wjdIҨ(@fQe&!> r9"hĉg;nߑ35`],a08m>@&,/>*d$I][,m?`vr GBM5],,qX}[BD^.99DCTq=b9LDh%ʀSš8+fУgpee2I=CU\aA,&ƇAe]#?LF =$nc(B޵.39Fb+6}8b(58Dh$>gyÓ-Zr.v.,aͥf엝up!T\s"С?zҸl/ B `*kvN&-(؉J{ȅJ7- oq`ўxbk2rܨNk'jo0L_=GF(qZX#t!?,*r//ݣG6 2{ܼjòuFR9jY QquW8`*F?E4ى? 3V&8ܲvsd&W޻tx`W7<Z3 W(T-+Y~'`AHX~in& rnOt`ߟO_XkG(dRT.\VUkbĝ@ ؅J ydHA a[,+MA.7@4 ~1eÇtaͦJH IDAT#HXs_~[=Ө=[% zzVw4].zmf I'ז=Q ®=nf>2JrmQru\nv褰)1'aM&Ŭ?罒OZ`wb r:e{ŗ'-x2 x? G  j"w}޵͝?g(r_3%B IpG2X,2;wiPf?02valuxy+8p.)x}s>*jBϰ9#k@ؐp (JA#dЅv,?AHTX9]@4D s9}Cێ# <;-9pn3{x@T!eZ]YA#) ,m &@ ">Bb|.z%7%+Eb*p?xxdk|ۚڵ@" ݵx~~ePD96zORY ^- "[Xʴ?JI{pB%.Z_58F<^žETuXwo[wukgkZɛg=abP{$V_[Q퓙l.R 2utE+t/j-S+ιS$R9"f9tRn2 PKXg<=uà!Sߴ" aЍB y!uXA%++(`>>7V ˂OGXh~#!<!8AhrxB Lo2.s*,Mrh?"DLj)pMKBljadf#+OM\ ŋ)#d}^91'Z$&rn,0@BG9;2\v c` :r LiZb ~B<aƃf5Lk|<^w?\ѿ_ᕴiނ}Q $,=Kʠvn9A)Z$nnTD <kĄ Q` 3EY&6 mj$Lc%MM] VTj~o\9+5u6j GܕLesBڵ˕ !; vN dG"0C+R.F !aLPW" d퓇1u=K)~ \6`4V &[;*>yW/WV8SRbE]=AB i-i3` jv#nIqs*hqKifWD#@:$D$LL#3kX2y;.`.ࢹ!_Ĝ(GtDjw0 qq>F-_{ݻ9vNh2 8'vNmm@}n]:mZ3z#\$)+J}~7;X} 7〆yR,Kϗb}ꛖ5Tt놵j\ވH}|ESCɠ Zxʠvn^)h7Us fɒu0] Nc BXj3#?Vr-C _6J5jU>nhsǻqrp6 _uZ-`^kY.$luV*YB& <Y*GNMScmq}n#"#Zn2(}qo;Q"3|]ȏޘpON#nGЅj$ `If_&ǐuXA!-~d=3hb[ B(O pGwPʫ_k\]Dl-3+2(!%XbAa ]pAY>`dNƚF%Vmv$ORm :Mߥl,&2>xfy܀Qyݾ~_Zm\W2׌L!ePʠA+ϡ CCع3*fu@R;;s8GFn{Ѩ. ܠQ24RKP+4Xk@̞lM,N ёt|7ͨ~͞~[}u5mYM·mʠa\qq1(\n2" ou[YlD|B`Wߴj,U,uHq]!Ӡ\dQXk=ln;nEv6zmccKAOq7WHu0.Z<]m+ɀot8m*Tpr.ܕI)gIwyk2{[o0d+vsUsϔ郪>|iРAtR ;wNt3PhPNVh׷؝VPcGC'VBV 2z=k),RVW{FtO>{EhفCTW4Bqw7V u:'uh*/8pRY 8r\q}-j2?sY>h3ɀ6~o䛦A<<l% ԽX=˘+2e"P\:o(b 544}<`rȃ%Y;zx(7@[^ 5 ".z=طo_~ ;w{^h III/b?sO*TCK T'&˧~z`˖-'")>гB a(E R] ǨTC;'b7%c}&L #x.z/A%CF-Ї/ƀ3w_-*i K.iw./r ./n 2_O7wPD'o0s"7ׂ8E*D'5m`>Щ![@,M*s}Agcz&f.-bzp)zze O񚜮]U#@`2 9P!zƁNLdu-:l.+j-op))gG]&l9+8u8;fi+%>9Ov:7s#'I*KGĕp9YWL$g57mq?V{8| 43qΆ<(:jOjscsE(cy "AUpGp)E'ŹN7 8˜3K%62UTpU  $/OPz#'.hwH`0qp-MGeuHbWtT"? .wQ]g7{͝f1sρof3,6|b!bR1h/LB{%OYc¯`^7z=Ze;ơ"4 qf3婭;- $sj113 ] ;>::1Ue<]w/`\R #LG pq]ىRʬ;TPkJU{N|_czɳf̝o(Wgn=jT lU옹&9X/))mT49*_QgDUcFB~4+&]c Fk }Nh\5f5f&Q9 볠D}'z]uc>T`3j "3֦V 0sܺMF PI,[DaNș@- z"e)|D3(Z\mNIfbv*fBZf+Iaԇݘˊ}_~yP'h֕.3WT`ooNʹ:L: *:sT8FÌ?$LWG ^ɸ€.HUJƢ|2r1!E̚v9-6l{XƝ JB|$22^ ) 췏I6$djt.xz, d9΂; \-E67 >qB΅% @E%h )K}Y2 -^boKg34 8f.7w|sғw^*!IPuhϟn5q5+J+op NiaZ͏WYϚ@R_?2{N9s`7W-NKc'O*WCwT+kbMcܿa-c_`2O>%cj eFv0@-p,r~W(48vzO=I1|sM39bme&SVռY_˲rNfH=HlOsW1i\g{;},j,u̸s!sEV5;jS_+i}f6 f.7G^etn7WHc?~K$@SFl,NF25B&DMIC_BOq97a=fɠfNibwk*8ef?`̙/3w*ߜGTR|H&K^a:"7~>)HD +qʙH ҸHVwг8|F3CǁhĦΊm\62Wv8?3#BfN8oi/DLgfo6⮯2e4P^A8~pzhF8WpEn"kt6#aYٽ=. 3w.ÇJ;(փ#-w#X 3>;MRkacF*NqRޱN>5n=b33'3+"Co.T AR4j+s~Ŀ,EbqX&V`4DK@3hauGXdX\߱aMOZJ+35)xh֟y|۲raX3W"ܴ䳧uԝqі d]:EbW[%ZqL.fAՎ߀yW{8i;̢^?? 3,*=r\Mm|3n76÷t 9c]x>]}rx&VI> + ō-GWeYq~ yLuSWb41iꊕk+6͘6{-=q3aDsWvo4D-/?>WD|ss~.oU[\ ar rDugr=&Xvf X̺ o]_ɩ?^yh+'G^X9sprFJ `7Ǐ.ZM"{bi/́ IDATr 0ᦁ=!Йt)}7Κ5q zC P\¦t={V*qh))#RjPT+$!$"]5ʽ; / y F?f+&\g(;& c=WG\4^ 9 Nך/,g) u/z_ءo^S-z7]?eeq.߬]oVU7o@0Pr=ٱioBPPa EQhKilb 2`cP9A0 7 8Yp*4 #JRW}$srwRI$9.4{|d A1aH 85__Aa ~ %F ]E]lL"(p;TEr1s$^efbHSEiddd4RĂ)FOQj[K*46B';0{JJ%IHjq>0 huyF{͵ۏZJ.w|0'-GP9g1`~A0 10NtPTïNQ@+T!ӹJD}κ)Ub :BvVycVmk'g0`hc^$ &Aְ9)J87:Q2]8+ i>K?f#$GawͿ?n[i{Ò'{j#wP_QH!\PrsۊF 0"h5(Ή 4 H8 &8UWaS\^^D<6GWWG+n;_J6ͿzL*to巕 +%%IFFGQHHra+|.)VȌ`xD^?p$pma_6Ϙޯ .lD1+gS[f S/`Lt݃.tPi>t׿^+-kݮ'߳H^apEa{e"S#e"ށ _/"řr]ta7|=ϼwO*cu `7ur=i)PK\]@Čg~P-\3>>}/b. ٳSӗ^t_5!9 O ܵ|]5B RF`/>yA$w&F/2Z[]yBs`@?X6]c' I:~ܟ: kE|D; 'Lyǹݺ'CH!Tp`݂;X+2   /2$TbN֎%mY_'H+KUWqѩV}l "D9-Y=2YF1չZ-޸׸{"#8]) GBߧWuZtW34yrA{CE 0R2PS\Km2ڲBE/0u 9SS)l/e,91n;ORϥowEbO] [_HڗZpQ]?wQJd(2UY!D2)4XJLbOz,?=+NU[r D0<-^ޝM%(X\XPxy܃X d`7oEoS#1Qvk@u)?{wpGK쓏_4(jw0D%a _<J-Et=֮cWP5F/#@(=1@x9ܜ 5Su>Gb#py]aqAh:TCM?F2pX48^E1?{4z`rGm_g)ݳw6tkIXj 7FF ˢVѡ'{tG;&^\! L%gٌH.oJJO@|6&-:PEخJ1ֹlZ?mM}ms640v a 똣%uP$w'l"7T~=;mUIerLX5k1X=E'ص 1,!6}ja_j-۟`RizvMv#EcX]O@lD/߳qp ;laREohVذnr70}+H'sRfX]2d"ت?63w,a{dG`eRc2=GeYQCV@Ё=枍ӪEbCSiN'WHV~),HX0T_-)"ٸ ԏlVG'$UlHUv8Jwnv`Z_f+8|}xeAW9h2bPf[*y\g zc>)à+dZ@d P1|]F`EAxmR7Bt_tϻC%#M<0'm\-ndo~~n6YlӖ|E]֪u[AkNJJ*X>p8B f!9M,b}&EGB -c}s9#vxlgN* ޚlʡ;-&I3Vn*:`/~ԙ}-tciq.׈1ęjI%#??n)LᕘH 1c6 EMF5ީ W\9-)^ݛga|o>~۟k} U‘Vm]qӨ83@buXH#,du#Z~ZI_Z?]T5Xܼ$*u׍AZUe≩wK]E-b¢3W1 F^W >R9uORWaq27G*-#fnT8%ק#&p.aU^ L=So(gҵE3IcÆ͟J6X@ϾWmHOD-8dzbbI;< xUzKmC-@_ja[ԪEoMBl6Ak`Oƍ;AC@ʬg{jӞ8Bu,+ꓕ{< ^qR#fhӋP -lw<% |Ĥuoo?j4$'qdi S{%G[Vu`~s7m~Sy_^P&aEgbi;畾Q=:}c;|܍qޗ`c4IhSbkCϤXIF/ZH dOTziJ-5WB7dDȐ|kՖ*bb?SsoWɹvrPm; %rlho{ңTy +̑:;}ppu#i{-.#RSSL;W"y`19 ಣqf;4 vzF?E@ #R` ͍8[ ~C/(un)1Ð 5 p¥,g1@ޡ{Od)d2I"0*ݏ=~K>g_?[]._6  ~*^n [*mi7M/l~99~{i@Ov4/`# =)Z7od|sL6f^j 2^pNBL!\p 朦ߛ^ZdHK -sA']SN8JHt&b p[*իOМל8yW;!2ySeT` >kJ6mZ}OKKKY0@!aҐl(|Cmmm|ɒ%š֢{ӑ2…?+l^tpCpjر#9t(X-pqj#CH\V[lOPX믿Upw3q&Tp@QA 8mZ8P/P 383!i/I'?/C݉ܕq,Z`>s^dQ&T :qMm */VIyh(_DNr@:V+J8<Јj5@޻b+CN0E?<M<4^FAA+9O,aiuy"`ZH xQC)->^*ꜵ# G:vx(D"zСOALt:c+<5O9wYx7= pR0gyǪsy;l YzR 3DGZԊbe~G)@D#VsI{?mf{+9RP.>%X1׌5ݻw[xp7_;NBfz,"8qby*|4MF>qB5yEm߉sg-L޺dHvu"v4TL)Du4gP|qgYׇiX*=up)K 5Å#9p{:t9 u[CǨ8X8T%:$jU~lEy Z`3DYYxkj|RӷGx0{H,~T j7X/5#>vu_pYɞY`^, !(+طSEu3ZUhoܳcCϮk{3`hPzA)5€0dWͻRXUJ'|-8P7E}F(sI7Jc'u4[7 dž2BPe5V\ϳXdJVTZ #JWvl^S #k̞`8panξ#Tp|@OB?"':l^rWsDmoT8kV]m@s|2Aͱ϶Xg bLGu;UFv7I4Q"ȯP("Ǹc>**4 } yqM ĆijRFљ@jPndj,*JzP*"H^"֝m-AǢ 1G*oTHX6RŖ Nŝc`<*BN w_z[>盁 S091jGcn} .Ztibn%Lz`,Z+f" ][*Jۨ%ί`{e$*4%ًW¦},^>}<MЅ«.>JlT*ثWݾv낮SKxS G" LfyRUƅ Pׄ100[$e,&;&"ɬͳN,-ZZ% I Jw62WsʯjwA!XB 쓑%|"`z7z o˱1WYeʢTȁ(;}ظMj߁܅HZvU}],GJ:F쁻M*9>V;R۷o_a'ZNi%I-(( [$=n*֖wJYN+P0D5-6T2@RZZjƩBDiTҭ[]v wTrd[["m Z4uKlF‹)Gpx. \[â@nv/B5ˢ mܼQaU@qn+܈^ ,dӺ=&P^^nSQj q0BS<-?A;3 G>"!2 w'bc1X`p2)WL߼ql8ƻw^/?]Sl^ң+ IDATv>RBd]0؏Q,6SNwb VL‘B&H}aaaW|ol畜X4z|m&|t#;&uNw!Y#2 Â#3'nI++tF,_ =;w.`SrdJΠ0׳T㚼a q 3#̷b;7b -Ze(u-rR#Y K5Oj:;wvר$}V!*thAro7^}c{:ZK2ux%/o| ;)stLd  ],dXȂйy 5c3gΌ1c;A Kʟ0omi>lx8ZT,O'*g᤬VOuR(# cڰdŒtՕvl 5g>H;R2XԦMbh#:@# >LT`xH#uϰW0nfcqnpKO&}'9gCC'%2bޗL}be|{EwǖƭtO0]U͏B?CVXtX89Ft-C>JΎ{3~ ZϘ/ 00i6o߼ecαn};d}@βvIWϵ[%<wh I}}#^g zХpN2(c>]m]-ߧߢEF~sv޴Ǧ_xגՇW߶Z9,sX?{HuFJr Ɛl$ GKVx-cG|g'MA)pߘ}`ӊoԛ0]n tV7)/i4@>p(姟~" UNʕ+)LN!  ĵ R@/p?C(͛c)+rǼÇ/|7 -)V1h'Bw; /ڳ '-)ˀprxbr _ aÆ.1 fhp9Žc* -Fj%`~qA52WSWZ2Ӝ+[%sـ K-p *ny../% 8ZZ!-.9Zs9sr.CZR]0_B8D ȃFxJ[D!Q0u8 rMP > A.܌B <8!gr6>K@#\JWc~WB/_#O9A9 fda,.@FКX@(=y) I0>?|Lx]uI{Oa;XUXY X>Ҧ;Ԏ N̺'b d]j:FK(6g9Qn+b7xL.!ފ@x0P +>rPdM\5n_}LbR<an Ɍ3b('qi!b!1g4UuT=b<˯;itWx;ܛC B΂8rqS-ǾWT9Y$B~:Nz$@D DlNTڀydSvrf"~!ƧWCMȯA>rfk׮Tkr5rk4$G|P$8%^(5Lf!8`=mf0yEWͻRބV~ol"x^ AN ed>=2< O% +1Hkh/@% ]GrD6*')Rec% pbJi^ Mś'Mp;?/u\cc~M= Ry9)"H ؄) 9 iBwylƙMM~m`C }S*3x*D}pcC*wTl<8w}v7Zxt*Nou<Ĭ79ǯm7ğڪ ^9tM?jpx5 3k޼y!gnz:zwgBi DLjsÒhWPpjtЈA U_sؘ1YA=A,QBq]~b)OP5ضr  7N>}\r&ߨ9;cv6h5¢aAm}*w @ ˄P*^sg`?ﳠUcJ0e2aqS J{}i)Qw J}h؀rڵEl;FJ_9kZݑjE)voLr~ĕ-.>O-c]lmbzSx<x6'0A`vr2[/HA扯[2G>(a1X!"o m}M3MxSZ-q,ƷFDD$PSۻތo{E)r[.z xyL0!P+IS-|v!f9da(7SYb&"Ef=dR?3[Άaymz4'EZy2@n ɿNeCgsFj~\`ɒe@%M>D}{LUiE  Ɲ@cPw3nAӲ0θl/W)q9RK! O@/ и0ldzg^" hy @5,OGuB)iy7AJLc w:bbsR]*A꨷TUbfl:( 1 tH<(72gxF{'Ĩ*TQ&wdV(aB屹 O` +L p̚ga5H"cA] ZŴc7sܭ/ԳQwcxXѸ,:6Y 8a$ IDs`qɄ{{w[4ەzkqNc'diHƑw};BK2ޏ1=KI#ӕc#Fٍِۡw1q VcA|rPu4TjB> C1 b߆Ľ<99c6X:6D6 FZHWT{ pZ i QrwYEWX5K~D6jmhѰ|c"vq}1U-.њ Ʌ1„ҳ!(0Ip?у(˶8UKJ"QWvG p2 TBWFh>Ҧ@{=>''q1$Qk*oTY8$:<0{\mUym_LJJ1Wb|?ksw!]0Br,ۑuZ4c{ Lr/~-胂G"ufi, lVƹ̜^!\+/P wiGcK˔:Cnߺk0snx_9/4y1 ߆;xёtZ-]+1/ dÄA =).܏$ (Cxi`<J9Sҵ}uBfc3 \t~j ^pnFmNqr&̔xǎrK EԤ]z;.!> BѴɃw]*=.e˜vk|=Juѱλ9ge%e,^y^ `4xj[d`d—!3 ,r;Ña ftl|2ClfZW-޹TT2HP5"!+?/]D˄sBq> B3oI"z{\sI&3'{>k}]k0<.*^'Y2Y- hphn8Fl*a+Ȁj؉LE!b]3c(`m-t((.8 \tCxTwjס97^^VlqYNzW*I*?9sc_;ZTRG@1Psd1D 1="W%}baJeI\uWwI_' &#Z> wx"U#1W1EBЍ#g^>LMRPM%&.$J&2"(}DVm:m_\#23wL4wFsfa@6ި[SyZ $F2«'*}MFsnk4)t(FපBaA &mkG7$bKܴBTiU7BH#26&IZ%xT)F(_ .NVr%wo]/0BMp5yLa>="r uϯI&5Ifs9%+j}eZMZLM*9]T>CUq?ru˖XF*^F(#GIZjx-"\]ʉʃaʓSUuHwpI2VhhM"BF#amWySe)) Yb;$ɰ:n=.1#+tx~/.̀h '4<\|m = b*7r>>b "uB?W3z B4L?T3ZVnⱪV6u?<9:ec-R!iU)v%ݗPϠ*1KSkUSRb6Z AS[΄_\7;S?r`c a:M$t |,֕GE͔0pYG G_k>WHm?:oü+?srY%$ cKok)$[{\|d<#(XiБг=7 @x50u7L!$mMH>HVC^^=#ŦpŧL9Pd b3=z :gG%gSƷa% 1cRS]0f+<2keC8L!߱4@_U]Zʤ[Ve€Gx//X;wY+[[}G'#9mP 㯝Μ1sxUqRݼLG`A@">l"7?>?}H%u>r@'BlpM#t-t`VQ3#K }j XS72J}7?䜎ÇVr妟ңJU.D&Q]16x7TCsqլ3Ȇ(B$#S'W&3r4.ɧ/X f礰F: IDATMyAq]*mȓ:rq؈>SZ^ NVߨcLJQIX wԕ:=]-B]juSlJB\,4j&ApbuɋG*Qީ&s}%恨+,~>ЦKʺW|U@$:EA_On]Y/(oݸ.H i|rjy9Nz px3_OǓqVCǍd%$JWRSDJs( g-|׀}WHsA[wuQ«X8f/ 7n\UU>`IE:  Pr`.2|8`$L2q yW2´<"t C Җ1_mr]oJVÅM(x{teJZoI=H9… y. 97bĘS%]@Aiy,<,aF2,ɐcBg~SȍE" l-+**lӛ%vde_$777oQddĉد\(y=Me?nbɱG}/ćZXRRm>}FnҥK>^^&0iI}SVxjAQfǎmǏx|@??n IB%F r AیɁN /h}AAv:w sˮA=oOnnb4m_DΝ;o^O"O* ,#2*n.\۱`Љ.\81Vx®rdrUB/}96} 2ʨ sx bZդIL2tZb*+.jݺzY9/& ILO_Ē2f|?)ݻwoE&cmY.%] VjGA~'jO>452"|2d-|qa d3gΘWf:ej?<]Ne*+#"#kg̘E  4k53gc..]8LQ1|ǽ}hmyb9T8<>\60d^bĉ5]\Rڰ㛭ZW5px! p+Ww-&1>Ah"BoJikY2hĀ٣cj+˫||1m(bZmgu+xLjH 8 j)J43յ5R0rԻhTg`..@gN~˗9Y(F\rWxey.ڭ}ɡ脠4BP&3u:R(,*RA%˓wY ذ;L[kkke*WWNodDC) W|Oh^w=zP)0i@;>>AqYߗ_}9ߌ,dҜwy7]vlo:5{Zg?Kŗ s䨑o];mII<>2˶{KC(%aFTmbs+b7X kv-ЅL!b_uưa:Yz>,׵h6 jkkģGWBr5ų 7O9rԨs |!PtHܳg_pQAUnn|s,ʪw ;jISJxёQ(1: DT#5[K1`A}<]oB5'&&)nݺzN~7l©S_x!D 0jH>>&ԝ>e ˒xMxѾּ&/G/xauo3r6:Z۫G>XhQ1j*g63qʚ5kFb3X(*lr={hHMKSƟF 4j:0`5 fh#mᒭ'O{,GhP>}PuɈ#`x-Ǿ1Fb-ScXT>YM$XԔAY԰AmۡlЇ,B~e/X TFG" XD4^A*B0SQ- hDT7KyC3f3?]o?{Ny;?sݳ%~0<ٳWDaxo >0Fdo,DB . (_ex2#Xa&JO \zC)kZ;)TL?iÓ:tgxBTDAU(^1ZH b}]DXDxG2Oi\ĸo>y:O<V6?$2pa.|cE2x ,2fz3UFlo*QDʑH̪dr DaxXHZ%${2ʧ4"P9RR6)Ā "dT;Ϙ2h"VLL "4A|Hp Y|I]WDܜrvՀ5:tSFգȓf^.?VhH#clzC5V-<Q~m'(wZf_D{ddIZt8,\PT KhJ2[$A Q!VO1'\y̟~bGTFdr {GEg9%jΰi-N¢̇W>dV&$  &m{u z\LFI,2W., 86ͤ:Bbi᭤l"ɅZKGv,;cf2;G|M H;y`TL.*0 I%viXxʛkk! zY);r7ZiQ-FM9PoRc%^pԀ#H390qv["|;eGO4H%`oD%>@ G3?TT0A7@ѢEsكWȎ8(9[~sbNaw0jRؤ<L T]Ƣr d4X)_H#o X֥vvwg~J?Rq% m-`Ek^C*,kWٞu#{jK̵fݧ z{JVbhvDЕ.5ӿq)02hptA̾!/&dV2 sr| SO*}R_bx}ugP#}z568 V|C_B70h,-v.E 0$,Ͳ|u _/7H. x( orvqKWٝv79ߗulax|솋8t +Cqg*sJ=3=X˚*m,SZ~ugVDImj$Uf!I}Ь,J6Y `{F@3:W]-+eK.L׫Xaw2(_0+3뽨FZ0b}K|Auݩhtڗ+\S( ߌAT7V-gEes\>ΓLk79fN9=6pDu P'+;7,:e-#&Wk0_lZQn((ֻXm`Pi Iaѣ,%8뉀C[ݻgDM׎nr*,q׍o$q݁wN7ZJQW\P%U$M|n]\(t%j<3 eE$pKګEqѣ hBlft1S䗙һ]@1ߦJ*8N xsdKXTpn Z{-^{q]wl'v3d +6պa"CĀR!,8m,nrr6Gh1\D_$  '%W~wv︈Z1+sw8BZPZB- OHiE.aXjeHw=pVzth<"(+` >|z2zdd乵 FFN*o"'Ow]8:,)q\\u:1ZFMP6:;;ϥ¯ ~oM$[jdOh;kɌrp8Z +ғJvX6D #6̼Nd>Bb<(e0x% jշOϸFE.@oo6k^H &v Ii19#.z L=e*&X[/Dvk$醚$l =sF/̖/'I? =B&a dLLXov n,CV mD}љmILD޹ |s0n%5>SٙuX7W_Y/:7X}ˀ=h  PiMoc"݂,,7=G+HeQOCv2iR̮Wq@ n2w@x6Dpәt! aPtRћɑ_s|`T*cRx_! .o;G }3 C; ݢ sr # 'ٳ QO#҈{G6{8Ő3gNrmVșkLC z,.:̣˶oD@_& )S&⦠Zcye4Fyyܣ\im3O ˉ5'I( |w"mk>qa^7pOc4>%#q]-͚r`'2cŭ}|qR+A_x&[`ebZ ANdfȻ/v֙_4"_9e$7a[Lqv,(>GT4OuE) .0?#cȞ]?8Ϙn_=/vf/:7tx1= SRA`'(Dp z^A|\ɏ?]q؈)_GE{ⓈtoC<=[wg)粉##1le(;'Xɭ.nmaBj:"xm@S۟d444  !bn3Cb/Yş"~}. r>B&':A'o`<=w$Z#⦐];wZfΜDʿz g8>x6}kQoבR⩴xD}.bd*ynTlE^1{:u$$GE8̅l><>;u(~ĽHrcrGXy 9]n"`*&!p(b.\IDAT)gܵkHRbAhyjՕ_}C xs5@ n r^V;zF:jil/%G$߮z\Dc FZ[$ ȏrtINvvrN[C &GnT lJ{CHd"OvZf=>LO 9=xԍd7*_9 td:ywVʵI`dLXBVpXw|#UøR;Sي=|9@3)y "*'_UN<3%c Uf7wh>@M"Vtu9Sɵ't5O^ e2 yq E&?;yN{?pX=$sAw6 =I@]pr0B<ShWxK K㫝 ąlRnx ffJKF1k +͕{z_Z~pC*P 4JxB"dbN7zY * ddo,~ +S@* [0onبrZ^CvHK.cȀ:Zeg̛/|_ ?Y4äR`p@RCBdZV%?*r^:|C]>A""+?ܽ1 SCG^cmV!4+G#e$pƄ8'X8Q%+bW -2n"PQ/khyH%_xDbA҈J29]*|u0p$?bv, _?27QOIv2qHtJ~DŽǴzY*"I@s!DkQ=0-Ҁ~"[8{DrLoRȬQ1v`*(OXS*i [R.\q+c3,)CW?bϏ3!"OnY+͋ bkpԣʴT\4k91t $V@`{+>Zݝg7{żZ^^>/3i/a=}QVZZ%rÃ;ŅuYoo=qU?iω^dMo0Vgĩ.9DmDs3g=7ݣI2%+I(D і('/e>'Ϻ|khtT;s?qhXπ֯X[~u~Y ӰBƇ'֬%\a#EfoJv0P7DqWa5j|ܚ[%\Vn|vr3xAIsdۏ M10RÉvqi#p^у9ݱ Q_&k^_z? QAïv;vpiol=~TGs ބ 5"=ZI;q=@FET<XCOY NEƑ1Osܱ3/Q p.Α=" 6_ b {@h@6.I`'Ȟ.10ԁ`N|dGu$XD}^aȖ^VWO3gl<s4zy4N%{(#wݼygV}9>XSc*QyX PvGvѻ(2Avv푲qsx- }.ހիWGꪯok}_ÇW '?@].+TfcwEl .S^~Cj*3FaVn|}觟7oZ24 Uq96Ȥd,zKvuqIFN™uNjC*UsJe%wnԿfC hFo5dQ&iL(EhX:tuvB;@8X%-B_ PrQh[:dTsrvRAZy@6b mU}bZeP9;QOQ4xг?#gwfjoN*C `Qa*sh}tp'*m݉SN?C=0lc7RDbW^Ȏ XȾag U({&gb}=P9;'B9 gM(o- v1^bp"dfª!}#[غ[-rv99; Ŭ$oIϸFݚu{nBȠk嚮:R 9;1c.9 P l4c &fƞ/m~X482ũۺtɄ8SrvMP}rv^^ތ{~MkH^'̱3ULu_BaoMvmЖja#?+)w_ ׇ*krv4{ǯY/h;H? 4'x9|M8 )i,uz'4 # e vQ*2yl UCxxrv/@nBKVmZɮJHj# A1t$cpJF /DS,vX`A܁N#MPZ)ǫ PZvB "m#\a,qntL?*; PJlZ>^@-v/*6z }(/6yCQ@J!IOt(8Rr>i C CsbU?F9k#gwWPedNrrv r'ЋBN0*:u),}e*3)Ćn Lby#uYe}ZB҈?Яq`t[+ fD@:!0?osTR`[=k-̉j,` גm(ʎ - `A2RB(Dg$81J&?{`7EJ#0 AsRsp2/p8o.?oҎdz>՛§|WH. lXzj[VTקÈ:d g>.Uft HE\xwa4n]M-W6R2tCBω$ސЃ-4>Թ'LW Gtz0 4T+T.Jj LjluwH^67A%H N91ԻԀUb $)3Ɲn?hMKqRM4]^unsc F>g!cް5?$rvn^o*>hY:A֎l r\\6v0 H)ˆX9ES É68aJ6E[K qܺ@j^̔H`i$KAt 4Cso߸5/gw1^=ދ8hOv8{RL7 ƭ9$y}*d zaFgrFKʀ3O) \#FD&^^y9ܿr8D RARI˃<]J r?2]ˍsT sS~7,t'u'vUT'[sZlVRy*cc=EQ`-I1NF!% HXbk,bEpkq,zƳYJNIbA-9ܺ*T!u)L39EEHM{ܧ7jSC4xzVpj@F|nh8 (o ΏQׂxدfD #kt)\Fwy%fȍpɐH(.ظ2d˪*Ih!Xnv niC]#y #Ӄ5A nsBziɃ0! x"$Hox{M!Gwl` 4_LI4e3oڒjRỲ(;og,X``U#їQm_%+楠qv*#BcI9%ۧ@Lت}f`]рգV3Pr IǛ]j\ڃ[tN+X.r&^%tv7C͋'gBzc|oJ o#KFg{X-VHS66D.=- x՛$"YOw➙p-J8u+9Baz{+"z|@x!ZCHF=n ?Ot* H K2:#bOJ Ջݻ֍MsS f쉤ﲒq79,g.[0-Xq,g.߬}%N m x~JQSMEDkMVJ荓V0Ց]:aNrQCn t$WOJ5Xkh/xC0Ӭ>=|E R ]?/Ub˓'%+{1M yu0Qt_H1 㼽)%%Ź[;9USww{Mw Gj՟5?O58'DSRIENDB`assets/images/vm_witharrow.png000066600000000453151374526160012571 0ustar00PNG  IHDROWsRGBbKGDH& pHYs  tIME 0bIDAT8A @ E_@=7Pj-B+vUf$QUg#32Tm&BេۅLT՟g6MUCĦ j> ? qf5ȗ*kL]W:% OޥSJηȜk3IENDB`assets/images/show.gif000066600000000156151374526160011002 0ustar00GIF89aDDD᧧!,38CCPH j jV{Y@$#0(aL;assets/images/icon_32/invoice.png000066600000011364151374526160012734 0ustar00PNG  IHDR {X pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxD  Vf4 888 sbܽ{nuuu1ٳa^|O | \ /_d C ,,,, \  L,L *E,;N@C4647Dܚ%1$lĂG@Aƙ3y>ɲ Y%HQ4M0 "۶E3#⽧*Q=4ufycf8!+ꜣm[s Ás5MSʲdL3N7$c(cDl(-[f(\[rn 8T;gH ς[޹g\Y,lu󆈠8X.l6x8~Ag2 F*1<ϋjQ5U595ZD~OdY p$kaE{TT%{q$ zNUUaHQ|}y˃ $vvJQf9iI9 ZP.%pDj=2U4KCh3?~j6na7,[egUMmC(ǐۏBA(s*%PrIIvӮCXVK<7$Fzψ|>_2i2EY} ReY+ГREs)%j:j5NOOy`b[LU$d2m:j[< H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FiIDATxD  JJ@Vf4 sbؽ{ӧO>_f7 C1|ϟ >>> 0G>0˗ xm `ĠWjڱ4̱mP觠D] RVimL@k#Y QIA"`. pNӶC4aE@u,˒"B>MDZz g],80 tZ UYFUQUT$w`iBDC$}.^qcu0 PP qa a au0^WAUx$,$p'LRi{~"q7yb CV9ZRQ\.M&q<Zzjnքwxx6,0ưlcHpq 8$u]&a]ަv b} @DNKqﯘˑWTzhq-燨TeYEaҨtFg{.[~ІUTE*p8SZ!RlPdըw_*ʟ'({߽<.fP5&4ƎKG@>RYnʒ60myKp׷}ޱXxifI̜9j8 ~+++iR*I튵Y`4h4ݣ^Gs||)iB)EXdiiZ֚(pQ(4܄FDj7! @<*h$'''9hqqr @WWy_ۇ"Zk$e*{ 5jDj/{֚]krcE):9WZfQql6QJˏ("t: .D/Ay‰-zA+x_^XO3~1Eh(H]fo T2u3sE?j1$IXXX uff:B.SaH ;n?%_0 T*P ?Neue{*Y ±J>Z44˧sCh>lZ۸0ܙ|ӝAԕp?pC]@Wn_MꢋBq](Ԇ-$Tn#ْ,Y3;v!`Y=gF)I)]/}t]:A,M>}HWtCDI) p)%\eX[[~y'B@^G)EXh0}m籵h4Ҹs'Ǐm9 \۶sod Pl7~#2MsJk%Yœ|B!<j 3qa4MY\\d~~(4g3 55:g!`<׶a ǰ@Ldee%a&_<,-vBJɈ$M,ao.ަX+~u_|le>|!~XZZb80 Pi^0xǫ%q)[:tӐnU8׍GV62ŕJ%*J>ZK84I8{} 4Qѯ|^.)utttjW1)0\G/N{Bg SkhB[F*7b| \_~4urV.YIENDB`assets/images/icon_32/information.png000066600000004100151374526160013613 0ustar00PNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxڜWmpT~&lB1| VacGRpTP~(R3gv:SeZ ũN @DA&!&ٻٽ=ݸ,rgN=9=9 S+ES(ϛֲ=! d{'k?kLwU]yRh aEs.UaX0MiaVP#jZt;/NyC3. x=-k! 1k" Fr8yq?׍Ъ 5 *3q8.Ob"Î{Jڛpok-, =CqTF"'P+v|-@CIo_@|:U ɂ[hXU膉 {:Q_ž>O#o>R Bןzl}=o׏}ǯV."CO>Ys) t(6EW$$tKu1Kw;;aYXGp(*V dOgt ZDc,9@Ƨ1LY-ZNuw'f˭jO? ,oPp>ca yӎطg5~H3^{쀊Lx0 ʿjdR>RΧ;wchLÿΏRVw|7^ qĦhk }erN9잎z6~ 5|>Ewm^TY?{&#GOcy JHG6dO۶=6Ł$n{x3/Z/yuqk'8ÑHK6E]mea qYj*}2N]"zQH%Ja 0E%Z~-Gkc>1˿~ cn֭#C: o02h<%~,I "%H^,$Tz1L!P9i}l4Bbt h NYIbZ4%n߄yI1̥6H|6pj9ͦAIO|Qe.^u1}n-83ng|>F/$5 6w!I*dΞTzI8oYgH$4L?C6ٶ#8ٚK\|F+ڙR}~G.ŨBl|rο{%f^ƠS*sRX,~ u"^I䯦sx;|/.vg8! lb*e֖J4iN/; PGw׏<5&$QjO*$OkJ4*wFѰ~߬n?]C=?Fy Id|r|1=l ;O |#ЂQL5`~6ҩgg#=3z?('|6Y U|:(oױR,<hP>>2pяr \ 5VuĪs6@rHN˱(3 z C)aEdr7$%8ޭrȒ\**uzb`/!~[K55_94}?"ZO|P+ӪyZQ)!Y }_JbY3}Wpf*E5Q8 ~utxm^pacEV '}Q]pGt S,E~W蠢+࿍isյkU{>"::j/}* 2 T 9QNQY4۫wq̘8|xT_| t[<Iz Er~K;8i_q2֎~h@E}u3KC$D z!4sys{Z$\0J.]FX7RNBTpSw ,M3E6?GY1dt"6TYc sr%%fhs{U7I, N4(ZUA4)Z]jU"C=Lzle<jQc;pjزyζ^shX@P=Co1!u?Bs_:Hջe[ ULE=N)cJr%Lcz[(')hߕȾ68E1@KP<)T gDb?#dU7-H-܂1/LnPx⅕y)o'w4 =S}3ocv;Cw)TW S(*~<J7rBN":GlWqpJ$R/I#y^Ѓ7lrf4gղ9T4Q3ڪ>;,)sյzU4_' 9;rjdݵL-rcnQqn6[fvSH?LFz> v՗̬XkїXG2W uvq'br:aɀilf寓[ ۷a!1&ɓ>G3$= <>:w# n+=Oz̶o*+)=[bÐHU+v;!YkRn.)P\3SPyՍYuW]r56VnJzQ¯'%Hn!F^v,/?T 9a c{G~<ĝ 7E[ol8 pL2發5ӋsOycmYrx_fo:qruGZNz:_c s杅_LO' ߹iV9@ȹJ6.uRiyyAwZ?N %ҎLᚽx-IENDB`assets/images/icon_32/icon-32-lock.png000066600000001163151374526160013374 0ustar00PNG  IHDR @LPHPLTEŻkkkuts{{{fff~ȴtRNS@fIDATx^n0CCM,i;#Ox@*Mģ$( )~ iey}k9-U3*:!R񎾤E&l~u'b+&`TGP=-wd/ݖ:.DHB=bmM%.Za@к欓Iv$m&Irt$FiF'% $x)rz^WM64,kN{^\.o/WNQ1AM`0?h%`Z ?c=R`OMӸ"G/.>LyHPTO>88q0 >-L,N( F|a I9Q:eDX=kJ)uƈ[Ot‍q{l>&IENDB`assets/images/icon_32/cancel.png000066600000003261151374526160012522 0ustar00PNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<SIDATxڔWklU>>iKZI*a|'Mc"'5!j5JH0P^ DYM`R`۲3ٝ}ingvy|{F@˿ﶎ0̔?[s/SeN|5Z.n4?:# `y0440u t|8轡L@W72W -Ӻt|n3PCNZ W$0N&6Pe m0:7l:l 0L]r/\>~"Q)-ϬIõ /`V?DWuCA\=_D)ϭ9O=7,r֐,ȱmZ)XC*!/rU:>{.hUï䁌cBAh :%Nԝ; t{fWiLztė: ӊSˬ<<ϗaRrO.Rr0|a|2L 5%ʑ ޥ}<kJc/yT85zw9J$b ؘNﻳk|0ͷDKaXa0&op$ ΣqMA9!]A(@4]%i$&◮ 1B 0rZݵ3=\)|<ޕ^آ!PE1@,0v5(֠cI$ӕןܡe@̄-ҋtHl- 6a Cw' \4pR1Ⱦ=^fɒ2 m{@&]NUHP=5 !Y!]M9Ho}SJpnCNJidHtt#gܵDJw,/UIaY>ge"RQf]'%Lb.c"#eҕӓ -KQïA5ɐ,.(JVV@6'1~7m1[@m磙m@p4}@b6 ;*6|Vֹ~-` zȭ_?UAD7=`Zu3@Aݸdbz&@kj)&v\7MK pE&Q wxK&Z*5.(?0zi$ꔣB@ΞgyXXi?PxX( u>T)Fqg b Ƚ Y vN"w~3mM"ǿcg\1rEa7I-v~ h2a]$lFN*ݪ]x)8rD0$uJN1ry#NCbΝYsx:A(idMڝѓgWP&ܖ\ nM5&ñ,lHC9##`:7=6ndAt55ZjSrNuC'`|my%hw{לnk:a^3'"(& $'GԭƔ?HJ9gU4+TG]$*kF3a_?P`~zq@50E"]0V?,,`IENDB`assets/images/icon_32/disk.png000066600000003023151374526160012223 0ustar00PNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxW]hE>3{֒> *BA! dQ4V#ƿO>|B#"y)K hQ i4x37$anvwo9sVyz ~R87Wk9o"P5$*ax{fv| ?䥨Ͻ39u o"w>d;OE>Ribi>\qfxSts^2T~{60?n籬%(ʖRg'}KN3]+uϚSrV,`6[ZOm&`!xxZ`#h`, PYz|x!`i t]t{*oOg !571IM |8yB(Y`͘PԄ*6ZՒ:Zr|oHP$^NF2[T$WQ4g {^'x YWOxƞ[&[}%V XaAёcpjȱɗ@Ot&AE**WCDc c`S0`F%x&($g?@E-&u-,*o<_\ )iUT$%ct+0} z>UcSC?x~<;%(/koERxjtDX`*BX P+k`kv~@\/tZXԴmU0Dߊs_F5bgtiK- V h (% `G[vF% Qihy 5Zbxl0I%:{jU;DSW4tpHEAz`H~y>=K%~nn E^гa (TBucU%hVr3܊we//|NNra|CS$[CU%NUG3Lg[ؕfUZkfdy Q2 utPVf—W®)9Rqnj,Vc!]<@m߃yYN@T-\ƳHnv'Ei5JsIENDB`assets/images/icon_32/deliverynotenew.png000066600000003175151374526160014524 0ustar00PNG  IHDR szzbKGDC pHYs^tIME %- IDATXíOl\W7olOlb;vNJLꢕ 6K*6 ZH,+lHE"H]F $$PB"XmPvɌt=xoƓq\+]͝+{|;i'z.9sxSx=ì>h鱍7{=̌QǏs1sfC{FqyU(p5_=>Q{È yшhpU{%H(=wqinLx/+#33,]=81H&'˕r|qglK /' FáqNa}_oAEUTh&1ic^IZI&Iegf SS8> p(u Iz U%" $HJ@5 qR_A͊UCsQ$!eAYjz#0 g]`e:1VƨNoT@^lNQp5#3s,-NZ*xnπ*@뜯ͧ iswm׏OWn'<=3vm2H0TʊLA2J,Jdz3,K,_Vs )>r#G#4'J( MU7^}W^i@sٜyֶFB\!nG;^YYym0CՄq|*C(#EN^ I .Jǟ`\]i]ee|Uq0jxqYY3o4-Gvx=VzʧVDLdIENDB`assets/images/icon_32/deliverynote.png000066600000003242151374526160014005 0ustar00PNG  IHDR szzsRGBbKGD pHYs^tIME  D "IDATXýM\YW{IO&36ܙYJTAuDݹԵ{G,DD!CPIH:XN'U{9.ޫJ';^/.;\G3<8w5nv}pz'h~ 8w=fy3`j<ٍ{ s51)j )۱cB !LJ,kZm>yFh>'xuLs5ff!G҈8àw{)ƒd sg^!#s8<*%#B/G{2/pN1Dix^9tٙ)<rEy_/q?\xnBEޞe07aif@UIhoA*DT M2^Y\z !kaj1F UEUjSİFjZ3%.zJ HjUa*595LIE >. wZ4o*>0BuҐǾ0LMt$RGC&% mRUnMM48: 4`!vKM MJ;e(޷H`MqMAS $!)=%)Sdlt|1Ur$J&*V:HRT"VTF/b$J榕{*haL SLUv1RU%*C-,);ztZ]]ʽN,&vc>1U{|G~ޖo7k}q~awN^UE4>`Qȃú-Ǩ#h`0-p;33t:U1iBeEIXjRAI,. }ܹ~ڗsM)u6/TV,)Rg~ʕ+ ziF9C=`7pdhO{b{{T}uҥH/ŨUe-HUUTUp4;{Gl/] rqTe7}.ܙOaYm(˲gȦ)%s$B=v[o}wkknw_%0ނG1""vjmͭ:uݻw 4`fvvߋcUQFO~zcc {'8SkxkssS13'IENDB`assets/images/icon_32/drive_disk.png000066600000002530151374526160013416 0ustar00PNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxWklTE(VATCFfEhDc46l50%GDJJD+}Dm-4 n rwsfnwKlIn33|;gJ`!n @O'1$Is4'̠|;?G"a4mض3+c_cyk ;wu|>N xL&(Ć躁 Zu3 ;v184Sij1٥KG#-;? ˍ2xo/Cʺ:F vkn^QJT, n .kGQDQ\/֮@W׷Ծq4}˻b?ԂgƦ *iIzi6W˯_Ͽ84{o֧ladPI™Oji*:?K/n~b*KQԖP(,˼HE$q!6_w/TZ$ i&JJ\PHL00,EkȎůl2HPa@,vS@s_9-nYtǜR h&}p0\rdk6v.  C ˧<>rm_mZPUOC>.E_Z6B; ωS0pǫ_/ uM hj!G̢!CN]зyb 2(XpӠ~@I3<2Qo6TUU `2jTD2=u{8ҤxD7s}41q$`d/ep)@R6UKtw@8`Cs9WR9^!%}@C/QKbGX/|Bq+#B}7NU;Irং(',bMw64)e2> RV?C鴜cӼEE#gW)"J+!O b J'+ܐ rS[\ O b2e%2`bp^!)6-iK*!@2bX˸9%cuR9Ym)ø@ޟ/`_IߢBd (8a-?KwPW*&Q1W8LS4qq+\HuIKhGGe TxUq_M:0hJ%|T!(ƽ-MPyMPTqc+mr٠؉:-#[2/-Ftl4>R I]L# i\14>&XIENDB`assets/images/icon_32/bin.png000066600000003564151374526160012053 0ustar00PNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxڬW]lTkڻ[XPl.Dۄ8$EiW*QE>DKU*G/Uۗ%C{Mzm]߽3LǍ4:{37s̅i'oq4#GSZ(zl(Gmt8͛Q_ͳOOy O7ڒ÷nllRw?(A9DB`^E6&6Zo} ~<=-OG45L$u]:xo`VӀā_t_3+0 .;l¢id~C(鋨vᅗ_շoB)ECu=o܈$qC'y*2 ;b}2?V@? /ߏv,.޾ǘz=[Zw`{#x/7~g>.|qF 0#L%y?55!$Dy`dWЎ?:t)f:>`PC۶e ܵbO6w#6wֶW]{*(ΩK8O]W+!xӗEa'1E'''e/xL1gMxBt~#G^p?Q-8vS,]2g%kkkPGхR3P( Á|>ttvum6ͺXR;/R)*VDC2F ǹQAg<cyl#[**+e04 f)$ K:0'%d,nY hgUBIyagn .:xBe@^\Vشc#wdP բ!@5E*3L ~pNmn:(0; E#Flĕ=O$(|4 ABhԖE6x3S+I1!"cYq%]hkE,Z w+++ uQihhfs0u jP?d|_ D>F’l\u╦)N@ll.Cwc2d=_ŅńnHo?="i&Jq2y[֘[ +so% hg7 suC%Y Bvʫ;[RpJ`fo4,\t6m,kuS(^yjD# O]?skXSvm/5Y j===|{Hdm} Ζ iN LJsjt:E{>EAO3樖l`?S*;cZ/wC|MeH[*JoCXp<@ZU)fFPVdQY@>N\YJ78t3IENDB`assets/images/icon_32/elements.png000066600000003210151374526160013103 0ustar00PNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<*IDATxڬWYlTUΝ.(AC-t AiP+7 7%hb41Ay3ԀI,$ t@Nۙ;әnNgr;D[ᘯ=#<k9ug:(>(*|[(-.dl qo n~g!i k͛h\_{p(@);欜Éڻtu?CU#0O9*VyZMK.*XTF&p}`c*06mGW½:d>pu+H"AVRn!*_yGRVH~4$t֥AZTp(g$~z HЖ.-}plXد0w"@gC)`?lIENDB`assets/images/icon_32/.htaccess000066600000000177151374526160012370 0ustar00 Order allow,deny Deny from all assets/images/icon_32/server_go.png000066600000002473151374526160013274 0ustar00PNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxڬW]LUR ZJ#*A%*FcM4I`ZDbL_JhBtZ5iX*44imeݙsw݅`orgvf9νw܄pu5,s֍?J&ؿHQkV iK-&02zϴ1zeꇻmhMw~3< 4>'4]^x /+|a*d%xc{3Ee!?b :=>6b۶z(v ΎK${~FټIXbEimpN" H\W,dɅҦqwRNx>1Z {3JYeJ Bz)&nƌ- Nvk ]=A\"s5+&S*pUQU_vK +T$ZCp3S3gmL0- g2udےDͲdbeǡb\gt\(,įgZQ_ ћ" iR%;h-翴r l]KFBYNh$cgwih>-tfZ p Ta3*FJCV݊@hRQ]x(sl9?7шܴ"MS=5Bso\ x8%wo$8s,؞ ~Bb9^@<諻{G?~[1:1Ar 4Da'1u-D1k7B4uѨ{(TZD$z"=< US/205yL+ }P9nY Dz9y<4}|?'*Hd?(Q_R.g5HU5Ӂ8l4YSH 'px@oEDV,7_j^msoR}DIENDB`assets/images/icon_32/elements_16.png000066600000001511151374526160013413 0ustar00PNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATxtoU3s=c 6EJ&j+(R-EjXa+X&5  5RS5}$M 츶u9'H39|kyF~̻E/13 PJnwVAD1u:$f aCد*_f;zVkHPc>)nZg,~0u\jd&YPRׅz@vWՠ{utsW]e=ϛH2bn?8lh851𻇸N۟Z[=Y~ p*DQHJHYg?*Ga%t$%{;wtVQ'Н0`B:y> ŗ-5k&G*0OG7=O9SȾeo*z5 QD '럐.M L3G{vNqb*CK?i$4< ++=v5xbbLtSX p_ خFGʲGfil ><ޠ+PqoJSDC&io>c$cFY~!b φt:{{fK"Kt]Ip"-J@/Si݌n+{3~JFP,TV$زm Xia[dƁ6^ '8Y_LQk 0C*YmIENDB`assets/images/icon_32/exclamation.png000066600000003731151374526160013603 0ustar00PNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<{IDATxڜW]lWk{7kg؉cC(NR&E @KR"*x/< # ⣃ga@ש[yboٰ4I@1q+Y,~:BW&~D^>:M *LDn.Rb2=LJK+ A9B[HFz@t:=N'(a/D9 .5Q.=?q׋\!׮, 06]d@R5ChdBK!$1)&ӫ*gY7p9$` @#{z3UKsUܖ!+-g PSmKTetpRؓy3hJB 8Ybuʣ:tDS)lvr}aי$UM bN%Sb-?BL_E6u"u{X0obrQݵd[y^9bƈ6-@mqe 4U%ip5l ",(J5Q #k XX<ÿҝ(7?B ~ Z˾wx̪hz{yE)+%cqP蚰꺁9z[a=< (>ɏn-tn5@:$_iRsH3/z%4d uDIЈ0 Wo9Ǻ@F2֊9J18^B'zʩ6Hm3nB݃kא ˷o$3ˬ[XZˋ3HF(`%jWvVQɪz6+#og:Y]|v*CβAH\lŦduZ|m <׎o"EH+So2.*u4`@#"xru0~Z,B[Fdo+҂(hHzNi4B\nڒ#9cCcA[JH]X;mfS/ izwԻaNXE)  oyhjhp}}T w R*..g#k|`4d=(e{1=a\$W?f+aBBDs'lEW2\L(Dh޺Ep:BS3ROL>1+4zӊ۹LJ\S&UŽdQ|\Mxal!W{}OqBe*k*j6uϳ֩u".$}-+3u@LIENDB`assets/images/icon_32/printer.png000066600000002167151374526160012764 0ustar00PNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxڬWkW͝;dM֏Vni m.E|i|,@Ŷ?`A|h!Ԣ%}ҠƆJ%YS|~9wLݸff=p3skȓ_pZa l!jڙ'IQQ `]]$CzlEQr;xL 6 4k+ORs@Ś/=PVlҷy;ب#DnItt[=)ekhX`]3KWWkaDy"'5F955u=<)hiA:مʹZF1CvO0Vm O%y ~ Bv?[(zKA m{]T&h6xU(nyށ^FwG^R&rj4bp"V X?`[WVV&U -9Mn ]okؽm|\N/!ctS#-+TQ79;$7SPsS Aw %Pk#R!Qpr;''n;yo~lfpӁû{w9&Kt8---QMM iἯIx<1??OCۋyϧ&2__;NE^u||_1Raa!ҏa872pTT2nRSSXܤU]UHm6hll>JJJ"ժZ,NNNRnn.Ai0 #81 SDuvv2X.WH*ҁ%Fr)ȩR<'OtT#PVVQhG (9Ju8 twwwtp%}yy9G-+Iyo$3_)B&2W { nL8QCrVQQA Y,[-*I+S y򽶶3sV XNc+Q8==}V${J9h#bdʢϞ'Ovr,r6=WA^G{{IK.lCh8PДftL7L>\Qqf3E*=\S } G"ZWlҮn Kͦ!n.K wNNI uttX.P <"^=A5X7͛rk*%/6.p8TEPPUiׯ^<|L&Qvv6effEFFzd\\RďW pBJ|&PH- A&&&G4&K"⌃ʒWV`j@JMB(J mhH`Nᕡo60Q 5Ss&TIENDB`assets/images/icon_32/index.html000066600000000000151374526160012550 0ustar00assets/images/icon_32/arrow_undo.png000066600000003053151374526160013453 0ustar00PNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxWkLW."h<`В6Հ|࣍Mbk4-IQimRMI|D%Z7]VXD]N"責͞{ι9 #I^珗/ ÌxV5墌- |)wNcc8ZxqqWbd"ǮTFYM,Wq^/ t 2RJ{mhlۄ+&DW $iIp 6 F<$'PHxI@=X8rXp+P)M) >2d@dHe;P'%1/ayw-(.3X2.gKZBhJb0|qy8iHDW_=Gz  эjWRE9Xzרki"-ێ}.x ֗~~j cMp{qlAS5h7{U >!jip+LȑYo41 H6 ;*'A6 Z0gJ>pd(W{NG`F9zv98+0W*eq>^߂]g-z@Ca3;S:)6CLIjoOˠ>Ely- ߂XJ٩f晾1ˍL--o@6y[qJb4=9ϥLAnT1 aY_q\lL2Mo^oʸn\lcBcaAbhNi5$6UEWfKfaBbE.G2"4.1cP_俲M2MP2RĵnYiwbtR7RλH2H+/VFXƷ|k{nUlG.KbKbr|<&=89xA-A_A^I1J6%7˾_A_t_rW;Wu_r_@`7'3D/DX:Y_A`{dz4479rgrB-C59@,@C/CH0J22vftF.FЊx%&7!8cCdS9SrZoM5O9!;Z=[G2HF-FQ6T[?^V:WŸ;&=䨕67%&F1FdCdƶqUrx`suXuZ;[bDcF-C:&=D.@]@]ġ.09%9I5JO4P##P:RL4N.2K \IDATxY$W}^{]f2b; a ɀ18@) "yJ䍇o8qŋo}4 <&XX&|T9azLUVѓ^~24:\jYIVŅϚ=?xLÏDxNq\ޫ;:v<>7ǻ 8 ˪~yxNU~|$|ԁׯC!$킒L9n';3wHRt:Lv^ˡOy!> x-1'^Vm5jyxC"܌AVZ G'~Wsug=VRjw:X|b+vQ-mǢo9$<d|BV(@1'YVҹ Mռ %+<#WXރ'Ar=n֪zgL Ebhܮ5 x<9}lQ pnAx^5sGb{=hoI瓩|" ~@ /rɱ9deZf:aFL6t=<Dg ˚뱲|@&[;yxީV3c$K!agxw$%'!=eOfrEs C7t6i^PڱHlZ%׫z/~DdmBh"pݶ@(V{Dm~"iLPZu{pdb+y6x^s=D!(@7{C|B/ލZH$鳥m =x.Vd&~yF*k kM:[ރ'x0.E /h!-h2xU6i?76p# f 6Muj3Lj3,lj3Lj3lj3,&X]m4aP`6:[F+d @^j3Y$i9D. kuj3fV0, r摕>vky/KGQrPmkO`^ѓG_}EA $9(^_Pޫ(ȳUQ<΅оtݬMd]>2/ r аv{-j3  cAnCo"^?^7@cڌU|7O?jW^BQhRSmfxXd%(GtWA^ƺj3DTlG*XQmvQ<@uf =@SPmQj3 X6MX6ͮBh]@3 QmPmPmɠj3TX6Z6V6X6Y6buf `ֺj3V(sf=66ۛt_OKG!a>|S1pjwD57ڌsD~>jYMv^Vu1iFcjZkvmczH$"qа nfn{q[jM}}RSWI>rE6uj3S&#I?|_bL܆Bj3 ZM?Py.?[7~Dao I~H85uEܟKuGҳt)4cTNyw-E,Hn7\97m꪿Wp6)12Eȝ뛿~.GK|Eg6Co|aPpr5F}N9s,]Ch]@3c 49@S7@PmEj3̆BTfN|:n4ux`/hz3 ̀oAStfҍx hi,[tc4:Dz-e{ Ƃi,Bˬ2+ :uƂb,L,SxmhHn5wz\nZt? E"CWΝ;Jel- G XMK<߽{w{kO&<=j6C!PE $ _y>S4U]]]B0n%cctzIzx)MG($IZtN*BϛƆ€ }{{'Ϟ9#tO@opN;'².]v/_g.\|NeI u/5ΦFSָS0i{]P"N<f" Pa(Wq;JQ>ЌBhVƂi fY f f f f fY= 4+c 4+ 4U 4_ j3 /n_KV>YDP=]m毯Gx30f]/6j f kS]m_^Vio$@~O6CڛLgFDc%)j3 j3_eN>}*j3С&v?y|̓}"Ǣ c 45 0yGhS,bR0 !C!PA Qm/lE=}A\y9g `( D>;{,^1 CT:'^ KE>;{2dYI$G׎6$JR* S~>9z T^GB^aWw" AxA GSd|2Cz˞[J [XRhCiO:|&[XY;Wp"bs‘X8%η 5}TGDu 4uh4f֓aP(/.M7s&@0T{v$mfʙyF\ދ3-ZN3$OUq'އ{kwo u3D%yx~q|>ORӹnyx^x[#)Y <ώ$Ig>AI#޹)J +rs9^>WTuz<(hEOzZT}TGD ) ;aEUm}yNd: !ua:W#J >wn&+ ]tO0-I>&[qa'N$/{7ANf2@ Tٌ2>ց,w^VrB42 C~I^.{u]'C>y oƻo!Y׳moc1[VX,h4"b>ȢVEF&L2~ eYsu\שVQ,P($sZHHpHv[уpP9R&'V-MR9P*ކJ(`.z=et:Hǥ*丢anO!,D9pUg'9߭$ǒFsa˲P'<`V?*-~u:T*&u4Dw׷[Lo([DJS?22qt- xxĎkqpP9}bq#Z:*') /LV&g\(>~ )wYs5`3IENDB`assets/images/cart.gif000066600000013114151374526160010751 0ustar00GIF89abO"%!*%"''(1-*51."+3'.6'1:642:63=;::99 B>$5D&8J%>V8>F9CJ&B]6HV&Ec&Jk(Hi)Mt'Os)S|(Rv6RkJFDGGHQMKTQNFNSJRXTRRZVTZZZa^\GUdW^cYciZkwRj{fcbifdlkkhhiqnlspoutsyvu{{zyxwgqxeb_~}*V.X+\*Z/\-].^/\2^6Y.`,a*b.b-f,e,h=f4b/e,j,m+l+o+s.t5w*w+y7}:nDlStezJvVy9{FQWVlfxqx 57.JYeXSNkixwhykFQfw}₂śĔʜĔnjڄוاƵ»Εݛޝ׿¸̴ҽӻҽԬڇ! ,bO HSwӥE]]‹3jܨ) ```DqI&zRpYcɂ M! !ͧP1`F@c:psjUdPѻp!QV39z×o=yѣ(C r{@X ` &l=hBɛg7W{`AK,.ACAgopa{;iB@b ,TXlرrFR<3'!-SƿcDB(U $"*wC>3|I Ѝ?鰣:cb:먣N<2 #`Cn  `}Ϗgΐs)6P %"pB 0p!10 5p,QkPK!8 +H0 M5( oQGc10ma<*T,gœ1jH~6ڮp#A$cISS %Kش0+B9l^\`:0#\BuAGXB(]9  +圃ŀEآUB $0'` 'х e CebU?=B8H`J a/r{ 4xA$3an(`7p5[ !8C*tB5`sF9QbH?t4Bч;1 N`BQ7`aF0ݘ'qLXc '=I-T TB,*@zʸ[80ai ɜF Ol`lbS ̰Q#{7>adxFzx !l$A5`0E|bQL|b @pfs PQ#87)"}<uۀ6b@LcA5nc2J T <-(6@(5Avw20$'KUAm6 DdΨ%jFxz+ȕBK7X-N1b(P}ã Dl"Ӱ6Fm`ܸ'"5hj:)|a)3"v-1t=(÷*Utb4j7gth( Yv(,xIy@YЁؓ0'.?(QoO<(Ee@ R5K݄%Axm\Քu?ׅlX?Aj4X, nd#=Lj>=) 0 5ayp Px 8 ~J0 ip&wHDi׆PɜʗNp 0=@ʐ 8 zp QPS:0 :mK̨}HC zIZE0 Κ 050 P `u  B;۱l ";  P ӐZ0K8Pp`7г>[5(@9*`D`ڱL۴NP2p5p={8`B7  y 0y ! N t[u xz|۷p ijp{ !pe{Pxe͐ O`v뷞y k7x fpw gg ۷ `{; КP r@۽z+ $ 0 Kȋmpw\pӺ i \ $ ఻zx ֐!zpwjw CP ` ny o  J`yj o@wZG` G y \ P RE Ѐ g k on߀h0 @  l0~\{` V @xzL`yz)y E`М\ A iʻpEEpgl ʵz rPǯʂ`F|7e|G C0ɚh PN A ph  œv0 \n0ρ @̉5ոP\J@G wzՠ Ӱ _Nqoϰm@0˂˃pD̪`;` 6Pi J@laO ÆɘLo`l ,op 8E\` 0:P J  P pΥ Φ2 l vv, l  Ȁpiͪê_h_P|Op+ OҪ l } lF% `1 0 M}NAO͙N <о=˃0 P=uq٥ ~]Rpא i x piҐg  ")-n00<qm\ xj `ֆ NT@ ʕD JΛ Qyz K@S~h~-b t^<lnn|煻4QQ 0^~舞芾苾xy P~阞难и;assets/images/vm_logo.png000066600000013432151374526160011504 0ustar00PNG  IHDR 3$ pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F EIDATxYil\u>޷̾/6]VR%َdٮlp$qM"5m*@@aI$E'qjUepH޼7{qlśXu=g;އ~TQT=*> u:Y)57frbWS٩ѩ؈M.Mm%[쁨1B5UչʥJm]:jΪ{Q,%Cɯq_X5U6CJ_ϻ ΝvVunPVz-9챍>`O5=Upts}/K)D<>eF׵ѱ֦:1 *0/^]^>~nz֒>Y.$O<{F '!oL?y9669>1f#:@0`] RQ+_Z~ɧ^-}BO{=̿gAV<6B'a3MohZefbi+h#xKmN0BU{Tcu/ T ^|e|fs)e,!pL3YwMLuN!ggf^YÄ;D.̆})pRJ1~Cx{ O(/ǵщo?&(6UQ̓x^)p-F󫉶HchJ%IXk G;=kmKQ wv)Yĩ'>\R}Aq;Ƕ3Kɟzi kltt;pMA ^]F٢ڌp < 4խQbC`pKaytZyW߸Ӽ#P t-jamDbrnxVR"v䱒߼AB<`dDD" >g@b>#M%jtwTD3G뭬щ0>xEahS?E̅C/=E{wYD%h[!x]V4)mokX_-s6i+K] R;\I[ji]m\799uϝ=N|Lῼ5zy$ @W %T": eL@0n:3[.r-+Ith Cx܀ [rt5iI09 `+0R`B `~BlUB>̊HY -s#XQJ%[~J]bs@[QqxE<>[D[(Gk௿~h 3ZP&tIN @,%&'Mj]d:m݈cs&~oyw&Ǿ"0xokj>g6[wD]8|l]Qd%F8bE*:`D02^eɵ/:s]ݑx 5};Я u$҇{O/L8ͱ47 Q4{|BA- Lm`f144p3+pL^"ov:8ST`8d G`ifȩЗ&{N5vRǁ˃HJkQmwkbwNL&JYZ(D0(HtT$6 Q \.c^ 72ʲvBdl.`^7(+t*e%Ul6jw83)IPvN^U-vFa+0# /c'\VMfɜ3ɢ颚.͌"fR1fyQj3mӍx H8QS$í٢iHuArYMb9j ʙ$8ZyJz U|&FIIENDB`assets/images/admin_ui/content_bg_grey.png000066600000000270151374526160014773 0ustar00PNG  IHDR 2ϽtEXtSoftwareAdobe ImageReadyqe<ZIDATxbyA&&&fff^2|61 ee3H0TRp|/_6<\KIENDB`assets/images/admin_ui/icon_external_link.gif000066600000000076151374526160015457 0ustar00GIF89a fff!,  ǡoVjnaeѣ;assets/images/admin_ui/icon_info.png000066600000002630151374526160013570 0ustar00PNG  IHDRatEXtSoftwareAdobe ImageReadyqe<"iTXtXML:com.adobe.xmp VD IDATx|SkAy3{w{Yo/%"`%6F!X[iBNP HHaP[;& 6Bb.ۻݽݙ7KN6;޾7}.Tr3Z]Sdӟf~X>/ :bXD5d?G< hqhr' j{^ojP]_Hыȶ|Rt:%-MTF=4ZO(`#۾]þ/F& Iz VFW'+d/~5p/;ڱ]MjG:;ha2@5Jʍ3DhVJ]kr-S8uכ%d>,ݐNP?))T NAlP u8I41,"w.V>Ӧd,< ϗ]]w-KwL ȗ_CQhg!_*riHnd+j#9M5:A`0.xBFo9үIENDB`assets/images/admin_ui/saved_background.png000066600000002004151374526160015121 0ustar00PNG  IHDRbtEXtSoftwareAdobe ImageReadyqe<diTXtXML:com.adobe.xmp dN6IDATxb9tL10`2.e`*Vb:IENDB`assets/images/admin_ui/saved_icon_background.png000066600000002536151374526160016143 0ustar00PNG  IHDR:tEXtSoftwareAdobe ImageReadyqe<diTXtXML:com.adobe.xmp IDATxVN0n;dљpmWFW1Bހ… zT+FЯ_{c ,sCM/40oߨ7tX5 nt"a>n6q#nt]u\~t'k4,Zض=c :Tz5(>^Ju r.LAv 8fYfRJyoI>M"h L<R=7qQ"C8 Sai8),p,1Dvf-*B+J5*LSEU;jJDz0mm)*Å=,JR.Ř^%pWG|^5JĢZo>M`%J xIENDB`assets/images/admin_ui/content_wraper_bg_grey.png000066600000000172151374526160016354 0ustar00PNG  IHDR tEXtSoftwareAdobe ImageReadyqe<IDATxblooiii&T@* 4PIENDB`assets/images/admin_ui/admin_menu_background.png000066600000002007151374526160016136 0ustar00PNG  IHDR{tEXtSoftwareAdobe ImageReadyqe<fiTXtXML:com.adobe.xmp UUGI7IDATxbg&`?L?^u2!%a݇i0`x<دWIENDB`assets/images/admin_ui/index.html000066600000000000151374526160013101 0ustar00assets/images/admin_ui/admin_table_th_header_background.png000066600000002012151374526160020260 0ustar00PNG  IHDR;5wtEXtSoftwareAdobe ImageReadyqe<fiTXtXML:com.adobe.xmp Wn!+:IDATxbgb```?ad ?N6*] fhTف11uSA IENDB`assets/images/admin_ui/page_bg_blue.png000066600000005453151374526160014226 0ustar00PNG  IHDRh L pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FVIDATxڌ 0Vt BlH XS:?6os9Z˿w8ͿcB eIENDB`assets/images/admin_ui/tabs-li-background.png000066600000007037151374526160015303 0ustar00PNG  IHDR'>Ґ pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FPLTE$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~@L>IDATxB*;;BX)^JW FbrJT͒;IENDB`assets/images/admin_ui/container_bg_blue.png000066600000000305151374526160015263 0ustar00PNG  IHDRj pHYs  tIME %'dIDAT(ύ C7ݠ߃U,F^y"# ' "p U $iw 92&t6& !ZxcG ޅ=gFnQ IENDB`assets/images/admin_ui/tabs-ul-background.png000066600000000362151374526160015311 0ustar00PNG  IHDR;*piPLTEfgkghlhimijmijnjknjkokloklplmplmqmnqmnrnornosopspqtqrursvstwtuwtuxuvxuvyvwyvwzwxzwx{xy{xy|yz|yz}z{}{|~|}/DIDAT-… 0+33Ⱦ`z┃Ef&F饳ZiX"B ->AdIENDB`assets/images/admin_ui/save_bg.png000066600000005435151374526160013241 0ustar00PNG  IHDR2& pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FHIDATxڌ 0 STbǣP#;EcNU@D,f?9kO{u3IC#<IENDB`assets/images/admin_ui/admin_table_tr_hover_background.png000066600000002013151374526160020166 0ustar00PNG  IHDR{tEXtSoftwareAdobe ImageReadyqe<fiTXtXML:com.adobe.xmp Y G;IDATxbܰ&!SB?L1H<$$ۋp"J5eIENDB`assets/images/admin_ui/admin_menu_current_background.png000066600000002013151374526160017675 0ustar00PNG  IHDR{tEXtSoftwareAdobe ImageReadyqe<fiTXtXML:com.adobe.xmp Y G;IDATxbܰ&!SB?L1H<$$ۋp"J5eIENDB`assets/images/admin_ui/.htaccess000066600000000177151374526160012721 0ustar00 Order allow,deny Deny from all assets/images/admin_ui/header_bg.png000066600000005451151374526160013531 0ustar00PNG  IHDR'A pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FTIDATxڌ9 @ǿQA#JH1RJ/h1`91FRJED(PkF1sNZ9p㽟FNڎ}IENDB`assets/images/admin_ui/toolbar_background.png000066600000001766151374526160015477 0ustar00PNG  IHDR;5wtEXtSoftwareAdobe ImageReadyqe<fiTXtXML:com.adobe.xmp _Q&IDATxb?Fb|RشRKȍHb @ `X<7lxIENDB`assets/images/admin_ui/menu_bg_blue.png000066600000005503151374526160014252 0ustar00PNG  IHDR4 pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FnIDATxT PDL3*ئҏ fŻ83p,re+/ןnH21Zs ` &pnEp\iOIENDB`assets/images/admin_ui/update_notice_background.png000066600000002010151374526160016637 0ustar00PNG  IHDRvsRtEXtSoftwareAdobe ImageReadyqe<fiTXtXML:com.adobe.xmp GO,8IDATxb<~3`9q' ڧ( Q&O H3R<* S?I"%IENDB`assets/images/admin_ui/head_bg.png000066600000005545151374526160013206 0ustar00PNG  IHDRh L pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxڌ @3AϢ(R۝C)'vFY6#L,ucPLTE¹~~~yyyrrrlllfffftRNS@fbKGDH pHYs  ~tIME&UԤIDATxN"1P>0_kD\etc[󋄤;w$Ւ+2^;Gh o<Vqxp77U^H\n ܭtTE$yr6]Kv'y!:/J~[6/ʙ0oP6/Ғ2y!\˥zxxxxxxxxxxxxxx?z{-xGW1^g:s|m<xx<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<zr>f{ϼj4]4CQYtT=ZvlJ\ýUgxϾh24ݖȢn0<*cn^]&JFmnp+ҶgvCZzX/ӮD Dc[^/`ů} {p:*Hw>-LNr_FNB-Ϡx%s/GikębAyn0QDƶlI6I5]m_ ΂4Szh mbюQ[K7#}n2慵wJ2džh!gӢZB^S7\ĖLۺ%`s+3kŤw/) GZ箶wdM34I Ayw~/u/O].N˥ϩ4\qð/dZ]6_KܱlŌw#SX%b۶[yU1[pGÊG!<C11QNzCLJ * `c+ !10"2Aq$3@Q?bd=ny~j;ar˚KIӣyړljƔyH?Rr-)jjhȊXl©,5̀iB `2"OeeU-3ifM0ZBQ /!SeqEZui ܊570mw^K7ʼZak_e|.BMK<|F?3-17!օހ[thыWĴ@z@!Q"1Aaq 023BR#Cr$@bSc?"ʼ7!"bF6bI$DVl,lƝ0= wEf).ҏՁ!f|Ch .h.n nn=]r X )$NY 28 ,giҒhߊg75;j ٨ Uv~"XkP0 j"m$&̋uWԨnF,PBi7yV}+ fß(!/ȱKy]B* 6H_v(XOBQta{*J&t>OѶ9PLЄCqt!ADϵ"K 3aPhaePtL5,MZ0F(L: @;iDxWщSґDC.m%@ƲaewZ+dzeԈ6B^dmveϽAg>Q?imqpVu_4'YgR0 ӳic ˭)0Q&!bىЛF|z,iJμ' A$9+1po2ԣ ҇bl[QBvjwN,f W^'\^χtz6CjcPP>!)Ǒ\dBbE"uIc ti<5qC8 Ap4@;cӺba e~ϯ\LR%TfмըcTIr1Y-=[pI֖~ (7Ipg9ek5d8]'tyB*7(6,c|\Z2 nƬDxgL3o8LDLsr;\-&ʝd pG.=҅jc4l3 -0+,"f6tx@ *a$ ]*#IjX䢰|ۍctDŽ#VPbRWaԣaFTFI[4j9v)!1AQaq 0@?!rc Hp <} `$J޺J+nq3Ci#c(nr RV H}~Hd MʖBAiKH5McDԛ D Ƽ8SBR SH5M &Kp{ Xa,ǔx%+i`} uX5K<6%B$ %fX$8ƺ``om/?sgfGt}#6#еUM{D)\a;0CȈ8JYvl^q̜7:8uH_mی EzrW`L֢A{1a1"ߙۊ o!l=$u2LD`pوHja`<{] sxV G@ߟ" yK6(1UѮvY?NL;s,Μ"J3⾼} \;Q]}mb=[pBn 0ǀd- l\q& ^ jÄ*y@y0"Pj{ûh  p{&jxDXoJQ'>>0 B( "s+PAeNId'tQ_t~> BBf)BZ 2ռŠ U :f"`c,ϊ{ֶ2 *̃f\K\L̑L̚܌|\̀L^#* E\S̫"'!1A Qaq0@?XqE:Y:pnn7~/[S"0|r_{ iMCNJ˜-ۆ_ Rq"5Uc9Ei|6q4b)%_e[({a< mȵԷի8,}a2}SS.!ӆpv"txl=w~!GLu 4}"5nOh˔̮^G=[@ 8dW_bɕ%! 1Aq0Qa@?ZD1$Y5a ,]T;FGiP(50r]|LPNnsAEafUSos3G)8ήSO2O~beK`Q '$ֵo WA|D VU/eEΣ'!1AaQq 0@?\.ɜPtL3T(ɴC͏]c:DX RTj (n` 0ʈhطD8`{ó%< 1+aJa&A bHdxsx@ed:ȁg>D@Rɤ"jΘhY42)D '21lvոBն#y=Uɜam0ۧ^4 G@QXx2peezdggK=Õo@? oD;#IH @8$WzG3?t??q̐G"1~9!)P-"i#{y<L>${~]шeU & p z>l?.Gļi!Ců):6.5 H:9)\}XHAp2X7~\,p=S]3}2Q@ D Q]A$F[L_#"'$eD:D̃)ob"f/!7&>u-/t4Bb>E!hi}WCJumΒFÏ=5mx8P,|P>0BюpSf'O>܈RBF^iAw0DE 1}8d!B7+ a#iR._1MTuqcM/!l^o4zzTePLS m^jsZ]'Ը儺{IV;OFucs 2FDSp. 0assets/images/vmsampleimages/manufacturer/.htaccess000066600000000177151374526160016642 0ustar00 Order allow,deny Deny from all assets/images/vmsampleimages/manufacturer/resized/.htaccess000066600000000177151374526160020307 0ustar00 Order allow,deny Deny from all assets/images/vmsampleimages/manufacturer/resized/index.html000066600000000057151374526160020503 0ustar00 assets/images/vmsampleimages/manufacturer/index.html000066600000000057151374526160017036 0ustar00 assets/images/vmsampleimages/manufacturer/manufacturer.jpg000066600000007252151374526160020243 0ustar00JFIFHHCreated with GIMPC     C    Tyxqp4[?~Ѣ3x]@S '4MkИEuL^Euך5g$ } ^9Pڝ_=e=3hKS]fzf<"Bc=e*zsmg̺鶞4eʋn } ^9P_-܎=e,&~y}S{ld􋦼} ^9P _ ^9Pkɚom9d>t׏12S4glx]Bկ'>0\I6}"Bc=e*zsmg̺^NeN}tWI6}"Bc=e*zsmg̺^N2MHkИEu d(>\ӛ5 tqeӗ1‹s᫶`?&54 `pfA "r W"6.rV+)4uA "r W"r W"r U3WR_l}gw)W?Y5<挴S `aߐkkeY*fgnc>,US)UCb3J E6 h1ς+ςڔ*4hAj!Zkd n\e {*hl^k&Z?V F.4bF((SCbcBGuYq6E7FZ?VYUkq$-[r-Sm~*ؿ]ˌAO⭵mg)xM7R i֐u;^8# 12!A"`p? t+ t+*Юt+] aY>>s f8TX,9m%/ ^@wͭx1ӘfɛGCD4P@5t6Юf5C̜6ͥ\g>dy ]=I4Ǚ9mqNaO&nfǙ9m{B cNj/WOWOB Bk!3!13 2s4ABr"q#`p?f]pԁIC!`-&Bㆤ:Lb&1 ZzT+.j@C!c1t:Lb&CgIoȦ Ȋ87ZJ?lm'ߝxoȅn1\rEpQci=.7P5}F/oT^ިPA@'mr$z%m]i-JH{-3o:3z\+pARy9®:o7c0R'lQT81XsBOJm1{-I췝'J#'G퍤[̸5ZcѪ=ѪS5)5Xd[Ώ텶nP!W&fEU1:?lm'ks=dBI j*7 {-3o:?'G퍤[}gR*<;Lxwta**„X&<; 0 JT,x1aa)( !a1AQq`p?!ΞXw a&WMøF5)@upøXw Ԡ:ƲG#4MV5z Qg(`]؄/!ji /u ^'DZ5펇#9͡ԋQ%a65cn)}v("TGl4njDb^D8" GSsQMC޿#P E P2$4DɞICȤ}RrzJKsQ%lF с2[/2bI[-1 !A`p?*,Xŋdbŋ-cp8XmcGYebnd*&(Tv2yCD2`ؑ"@AXU 62`x/!fc+x`^:͌^zh AѠ*! 1QAaq0@`p?nZ@}S#F9,܍4~0pe7-DXF4#(J`1gS.KXrp;? %?>!`$%JBST=2p;2ȅs|$,{2EX=a`^my0!=.tck?40@ަ3Y}kHw<̧5hCrM4O(OR5wan K-nC(?v<)1kZt/ 4R[ DZCZ{{h[GrqTُeB`Iǁ Ŋo\꘿OYDaǁC g>8]q/_UTY>"&X+}T<]:8^W%O agOassets/images/vmsampleimages/product/baseballcap.jpg000066600000014506151374526160016764 0ustar00JFIFHHC   %# , #&')*)-0-(0%()( QWm72kw/@"!S{ d^ u_Ӎ!쇔\1۔ k!^ AP{U tN rV,9^[QUNՔ͜onRznyCvۑ񾿷9"c/V,uCbNLF埘קǖ'1agֺe̽_U׫9#ٞhm 뜰aќLntԸ"`jXU}@)9ayök)Vd8+qѺ, 0#$%@P!"2453ܱ`Bw&BLͳ pkPaƕEtH11a$ \XA@\ "$AA.A>>?5^I@YfҹH!E_+++y_4 MZYEߖn/*ȳYp+GBNWz>~:X;zkoh?gU->LJ@۫ΡWY 2XSX E귗fH׈?ML) K[ExjC2-L-͋󹰏>b6d6͍{\˸Owha{YkbV}Z/fm=n6ʅn6GL2nb#-,=P=RK3s3ϕs.\9 Ȧ+S9-ܳ3VllvV2ô2O1qeV:~Eؾ\alƯLEjdQ&xOZgQ'S=Sc2)%v:bS(LC\걓y }:\F9y8A jrR'lZfآ< A֑$qee=wg-GY:㚎IjB~ωLA D孥k;oi"@K{ ,r+_ #bZml3-{ke\Z8_W!?G !1"AQq #02Ra$BSbr3Cc4@PsD?b#:ցpm!ÂT1(fc:aVFQ^#',u vU*i*rȯ3%_wvT:_02aߒ$$NmcE'Q ?LɶÉZ{9ƃ 鬵/` zє82+[JBhHG`4& u*C/@1X!OIғh֘k?[蝢6tOA|ڝ]fDG)t(Ŧ4Tp 5dm6ꏙ6 "&(/0& ɷQT+E H48pwZ]lҔzOa޽'wE= P1J]pmgTLR*7WTl:5.\U[RA?2\:U&@Jj2LZ߿;$ʹGe~uvԋvCRB.׶29M\&g/w0Ti|ei<ԹRu=iۨFOEc bbf#,'iY$ K0ygA4CM !?Sĕ_^ӏ#+',7fE'$7 ''.?<6 wq=*Q;azo7*k_-Z<Xe*i[NYUlOלsCHK4PE̹'v`_v%ONJ-8aMiOd4y5-:*#dG]k[u(u+ocfnj@n{=w)Zjd-TH=7:HL ;u/h˭sk#m|K9(go-״*uܴv'$J,' f*9"sqp7] {M*gQLrS Wf˞)˲e~ )TpRHۊEzͨG(|re{-*&g-3Pb B:n1beoYwPmۃmv&ׄ^\ZTrh}~F9 %'yT@4 pi݉ɶ:(ʌNquWÈTDɃ>a'Q$KتqqZ@)趜$FB6qMM<;sLr򯧵"}şݑb3m3&{;'4ũ4o+gruSbUaX>NXJ(TTԁ6{fՈjBa pzvEZRXETݭ'aŋIrX=K%j&.DZf_v}D=8S*lYX6&FJ1=Axxy.#,З98#딘'*klD^L'W)6M|cfG|c2}_~{-Egc,nLSP[T4܏P\7)6E:`ne_5G #W ,獇LXm-qޢ#*XH>of?4w;2ԧLUtWYFZmW]`0K:9>W08X1(2AwBix@=!|@@41GoYx(ASyy8W<'|$10V)ԃ;<«Έ!7aCpC×̹rI #O)@"Z Y5Ky Fq63dlJV %d/U 4PpYIqdpA|F; Jyd`8A"¡( p aP'Pa e9b-vʃًH@U'  vr0kvD>&Q\uJeYC6 Bbw1oJ<0\\alF5e=} 04%D  f#Χ@%BQH !4Q/;nw`<'>h4:(b@ bGgT|́^ńT^A(p\HL@^j~b%nD[('ZL;\k8X2mq9w;wM"]!&O(!:]EH&uEx eo3;R D`@(9I$\Oglm4q`E`p%Xx |VLd"L'^h .,-vt 9jwP,"˾fx쏻I w7*_6w'G V+/ :*!1AQaq 0P@?:P1_ Q 2A-* /8%BT Y9COz0'{OΔfnbevK(N`mً,w:'7sreE<)FSFc~L=VAa%/lӕ$:+x;SW\٩"ثmzTC0cѤ|"`dLj9R&L ;1,asg}T1-G tH?#hjb 3ut`t,R]ruj}L%B8~X S#*)E q?nA@B:pj4J2!/% Pf[jx/4G(JipѭJ u•Va̶TF='C/NgJ9(Jb*"u#ܩ^`5{C  %mVfEUqADL-=MXI'#2ƁWz()I&=рA†7td'[/VPAZހ1aɉ assets/images/vmsampleimages/product/resized/.htaccess000066600000000177151374526160017273 0ustar00 Order allow,deny Deny from all assets/images/vmsampleimages/product/santa_cap.jpg000066600000006272151374526160016465 0ustar00JFIFHHC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((" @0e>>U֞ûXWA>jfԨQ菍v^#n(6TZHixwf1EU]AuM4zL@"whZnJj%_^|f]Esz b6O&+VXWϗ"<2]+!mG\Y l_G+/uȞS/=8jA} UdX 6Uth8p`_!3:st #3p?p?-! "Q#01Aa2@BqR`p?GEZb[6?C.Tyji Q]@0egƆG@|s0Q6Xc6m.*xig7T=;xUG҄u;*q?L5gVWG\5R*aȲRj;T]׹XHue\ }h9Xfk+bo@97^VKʬwnF-ܬ*܋6t e uT١e񖲺үv(2jPsܒꥴ%W?&!1AQaq 0`@?!(7m= ojؚ Xy̵\~߀_1>ODx#*,= nR)4gLR&pR*hMtC|AIͮ 2ϭA\l tE*啈v錙%BY,"P G1Vacbs3K˟]*v6g 䃢iha}(q$!x%~\ m\Sf|U1d*O%_1s&9ħ(9y_1m@+K, "$t^a-0Rʓ{!wLN97L 1Q)W`ߡ-ޗHghn,!DžpTC=`ܢ-ވӜsd x,>~tF T^ a7ЁbJpuKNIRb.@2ŸSh@enޠUa46؏B/W4J_Jyh`ez M5~ 'V+ <<<4<<N<<,O<<,0F(p  B< P4<!B<0<<<<<<<<<p?p?)!1AQaq 0@`?J D^PБLjT1fNx4Ӗ?἟)oA\=O"c)`5+ʺX'1yĎUy* S=9^!jsR'*.:a> ]Ag%IdZi%T_}PQ f+\h p ՗2 btb^jwİߧ;1yyǙRYb908[w T5l0T_1ƇVϯDF+X3ud\Ѿ.=N̡(I USt6A"<b:A$AeoP)G?2^" p8Hq1Yz  ޛk_hneXC۸%0%@oPبK *Q|~~xOr_Ap??assets/images/vmsampleimages/product/dress.jpg000066600000004544151374526160015654 0ustar00JFIFHHC   %# , #&')*)-0-(0%()(C   ((((((((((((((((((((((((((((((((((((((((((((((((((("  ͂&lBR+3T E^D팀MPP=w@RwePUY(=@gѓ`d\YU@hSWz: ]UfF\v=MlNePPc<z[3`9F2500WH/c>;֖-ZZl \CBtc2҈ r@Rabp?p?1 01 !2AQRaq"#3brBc?`R% `W "HmCFNr ;MU %Mw%c`ӢǖxrV<Va8LAhUC_ya,P̹M鰉i>. .;/9,K/.3+bc}UDzJ+<`x,+:x5`ҋvYVojڙIuZM=uHjey%ٕZ.^-涝.#y8 kK CY9r)~tF8@C[':4NIsTvP&@Ôe`W˞y`jd،r'>g S>gp,WA=s %6XZ܍!7-"kDKr "4'qFbg ($s<$K< (s<,<<<<<(,<0(S<((jPN{4Fl,A5D&1[&JCun:@&41mhlAQ'ҀFp4 U(Ƶygȗ :?5f⶝21x C|Q [Sm>]{ɭ`f1F((((((((((?k(k:$ɤ|~.7(͎E[Hgmơ%iB)jh8mޏ?-Gk{=cJ~0TE2@=.՘Zh.Jpw|m6L1xuϤ|?|eL zKG_|X7썠kHw}.+MWZax%Ldv k JW37 j_gƛM[R毧|=,4XvDq1~vA|C{~/xYz|]sqdT8h;$9 6X_^-`ѩUܟH~m/33?e׎^p˜gyC5>V,-uԯB!-8NJ0rj'CW/m D⷏b>,x{u j(<ᨮXaΗ(֮B)4Io:/7ŏm%eơo i~0Vү&I)CGKGK4e9rOPJnQѴM?WjM/|V}<"2U*ԩa^*Q}^YT,77h 1|(<__nզfMfyRsJcVUgX wW_O|ya|[gmKxGNyx^'Վy&KQhV{aKR47YY g`7nKR7)堑벿N_4۟>/i9x+BO:D:=i\(3^Mw3^L^iƛ yj;xQt_ k4d5[*x!띌ԒNǞo1ż"^UWwm+s=IoB}8-?r덱Ν,rX^3ǵ:iu5heݒ쯊>4 gm7HuϊmKvY-ϛw=17B3|O 4شYAupBd‚$wf$ q:&]jm-(!7*Wdܦ?wO n[L3 h87X裣?`ۆy~Yf{8DBwSVmflˌ?OcƖʂCR>!)sjd7^(7C`g:WαRH~*;_xUֆ&5#k'{+וm[?d|18_1`iSUUZTaRi59h{z>_Y8Ό*z;  Ŷ zaϦ7}kFlH%d!Hx~p~վ4?=Q X4/My <ȐZ2'~|;|3gk–\~|賃_˹*}[~|_ng%%5Ν,I6-nTpJ)?rwSMɗd͗%mD6Y )yG'Mv&(M Vo'{6'G FQ7oRZ dHSp7^i֟>+!YNG*iMJUh2PT+y2,|(֝>f!#sܬ{Bnx}E}Q?% Y~xl ]Owi-ͭlo2[dc'̖4I!(S̎|+? EDh?'Nii?L=K {q"yS2ƁXB|Bn?▛Q_x uh<_+|<װt#_NDռFͿ߃uO _íFA`|7{ $'ʖmwrF6fg(扱9PI`d:^^g~ RUpENWvzk+%ɩ]=Lf/x dRuN4J2aGNIJ*]7F>%Ţ|5ioޗ:(rmͧoLꁖD|2|O=SU%b_nN%H<>Ii k{hz D#t0w.Tnsy slm,-fKK9OW>p`LwJet?\9&Yf# Kc Ni7PiA-*mUPE ~Nc -&s^Es{=0KA|-nχ9jmHS+"ٝ嘓ɮ*M(((((((((((((((((((((((((((((((((((((((((((((((((((((((assets/images/vmsampleimages/product/power_drill.jpg000066600000006353151374526160017056 0ustar00JFIF,,CCQd" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?(((n.- xmmi.n%X`DU@$p ~~/oxWěk|*ws-ܷYh\s;oAu!N<Q'xP%}]vM]744_x/YMIx/3^1{KEKaVR!2?_ȴxG<[{{t o_&XFm'Xa"峮EӒKK̜TŴ;9.xfcL;W3%UBu%Մ%hbFSjE9/֊2MKo|u@2goxx= ,om5_7?|;~td9n!;?ko/$<'sgCh=FFxbFI53Űq\M"WMᢹJmNo + jZp+mN5=Q?xZKKnk(KE{c8*x5Mb_?ZWXk+Yi.1(\gO'|[,|s 7}e:K#UGm"Oe @hw?y+]Ѵfgy}_IE^"e{w۞ڰs|bg)BMK}'_*56K]TQy~558^('jO_-pE9;t'˅/c//i3Z%Iwl]^`67Tv5Eco w!Ӿ$|G? 𷈵AWO[|Ǧ UoU>-5;ZLͧ4z syL[\tiaNUS.)Vq9ZQtk'VOB,߲oX\|5dz"=h4? xv+ K,m;8=Ķd&+ل\`# ,n#W(((((+ <|A~ǟ>I=[jq꺧u+Xc*?N2#<$+ħ|idv^Ԁ+hVtkx3rN 󬡯aӺsJSkn)?&}VYqKg)&'Vϕujœ}Rmy+kw׀5ςTNL ?v+CB jlE lD~(7ꝘQEQEQEQEQEWs?[[j,m^[;MAf昀O+N8Z08l_-+ѭ S\d;r8|.Zg {P]٤y ^U>"ּ7ivm>+Etg+W-Az5Up8JX=8RJݖF7[0-*JSKM--QErQ@Q@Q@Q@Q@Q@Q@assets/images/vmsampleimages/product/cart_logo.jpg000066600000011060151374526160016474 0ustar00JFIFHHC    #%$""!&+7/&)4)!"0A149;>>>%.DIC;C  ;("(;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" ٤&0#4|ͼML52}^tk f\d|qVeI wVwc~n|Zil2\iHkhgv9ѱXi ʰ^U:zv>~\):nJsq &ύ!n1&~~[@*(y N͇7! o`u8'I!.Dxy$V={@[ 0KF3}V=U6wL8eXe=Ʃ$uJ=X\ZHL^y}J$'!" #13$249c紞۬r2hTFiѐj#Sh+T9,jH*rȊXjOkϝ]GUT,uSF/]s a0F ꓹǸ͑>v+eu=vcb`^,CONٶ_f>~ʾ_9|ѕ!L>xgJ,qw(?\|_?oGOVs:"ړBxO|t5x64n.Ls`爯h6ء9VӼRI#O"/`_-^ 9r%1-JUUN~@3h7LÏm˝4M%1L+CF/& I"&Z쪥Wu r zYq3 rל3{ vX|Fp0)V$g@/ :x+{ !!1 2"A?-^e3$ D\&,ir|\F7zG*biHђ;PZK]ERPѽl?3x!!1 "2A?Ҋ)?PВ6ߚE+FFͳ 2FAtI~?8S1‰bhiDQ27JwcCnޑ[Y͌Pv%D_ m(޿; !"1AQ2a Rq#3br04BCSs?c}j #x(M tvGK'/M׷2dFbrzU\M`U1UCۤ@"7+.&@.M]\낕\fy.e}+5fo: \ ,WW՚p7ʻ~ r3\f)lk FfzO{S%Z.oRCvsKv !_k=WkBq]T9ns\`Yg$,}dK5 kbJj)Ґ-\<(L]}AwPp9O~ġ0[D&ct9LTHHɳ\$6ލQp:n5ebι "q6Kf jA,a*pǾ7 x*ͷ1/+cJAn$i}ܑi3n=[v XBݗI;$6pAtԃ"`ohõnXˆ Wp`V(XnѺÚ3/,1 #:', g'!1AQaq ?!b8i=E`{Vnj{fW n-Q7h'FE* w=tZgQzap|2,@'"@n&AZ~e-l>gD&;4<` _ UvƖp(1FtVCjaF/60c2- Z]gN=tz¯K*8EX6۷K&}k!nAPVyO1<:kLtN&𺰁bַMb3ަ o ݪJ/.G`2Pŝlzh)rcH" cOԾٕuYMgX ~=(G y?%`̳T>F0*5.eL]wGz%X+]ܰFb{) Vnl~!#5WQN BG7C6&9WS4=ƭ/Hg9uW0&x)+*ۉGj1hS.sbLu=e1C0"EBc=0߼y{\%zi#dcP; i~H(KT+38ők<3T(U/ 2!1A Qa?EZJ(QNb]Dۊ ؙF fŐ|dZ`1^%J%  ,hrz˄FQoݚ!1A Qaq?t7asjْ0ENk Z⻲6νuC,BIh)\3 RqYT[[wm hxa&2ƕ8OܳbA {;ւ^ÁV%Ia,)P Y|:-H4ebQ0Ỹs M&,ٌH%ye΂4 qvZ/g&oRcV߷2:3e[OaU^p*j]m5`aRL#g!\f΅~![N[D gxh'8fC(2P'r5R~%}Czu.q^fDyENXa?h`b(2+喀&ZqLYP)׬:-eL(% B}5b=|e z:/b,>x`D,_7u削N r/,4ږ|V"|jlG9>pFSE9cYdX&4FkDC\@_0Zpm.} ko3'K2{\^jWɫlevjZ`{,#GK|3|HaDzy:kՂ/ʁ⫦ 9GuߤF)ס.<@5Xn=y_.ݿe>0R>߸F,d*ѯajbm}~*!VA_hcpW":B?`ָ %#F^×b(4* Order allow,deny Deny from all assets/images/vmsampleimages/product/hand_shovel.jpg000066600000010610151374526160017015 0ustar00JFIF,,CCKd  *  !"1q%B 7 !1AQaq"#2BRb ?"p'"p'"[ꕮ+ro1WIj^ DYr{ȴ >KN1AQSOI *!x@ -;3 "^]deB6QpFAkBDg)RW9xR5snpN8DN8DN`o|ucܽfS`7p__V62ڑL2Q9FwN1(r)UMc|kBfG.[ŵ섑v|?PwnEZ."ײY[RZʼkM/XmifmX1RqÞJRDʖfvm#S,.cfP俣\X2xZH. nIc$x((Z4Mr_@F7L,#6Cv5R "1 )B481rN8DX#/#kBZwŊr9N%_7a[a&Zg_GZ%d2tf59Z5B@Ԫ_N*b:_+]lMtI]Y-QVZ*$1Jt2"~3v]n7,X.G6k]Llkspk62}jC!`Ƚ{*\v` /)'"p9^l?"NxiMvmwuAxѴd$2  pMH*$kwͤEy^n4u=-ox" 2pU6_;xHxضz73|khF "kiwsRFRHR:_|G,7a;>Mm]Xx}hs[bIFY,ZۢbgT.v综̪73͂n}.[h(ͺI22”o!Gd9W̛7S2^k>C, OUՅ/nr8o\'ms6D̵cs=aHbry-÷]J)r!-k"g9xE^+msi=\͢>Z0]8+k!v$ !d/O~yXNӈMcժYZWiUEl]GLی30>'j̵ZR~~RFrzrDss'/0Tw.9"BZȲYRԵ+9s#ouNnJvzOM]Oen} If =.2BY6YV%IJ\RapNjukD TE*:N:gfЃciJn7٬MGtԸx]ޛ 2R"m}n57]1 }i~i *)aTPv|Y, -Ձ:^%ulP$$lД'(<ȅ@;Z,heϊPb{ݽQxn[}{>0vɝg:>usJU7xO46@H;] LkvwSitCf餆=" w"+A8k "S4 jLl ; E9u:-e\.#3IYll fl_ʴN8D=߱ol:BǸ(ltcŦsj)w}1 Dy&(\B^w$q}lkg|ۜXG5iZ!f5*e)rctgKb l%t/G⎆j=7'a਒F.W@nꯏ#0;EX[Yk$g?0%1MNa-xunMe;6ۭdwm\LE|̔UV0q iygih""[~-Ȇ팼{yy%tp<~ |;Tm66&o[XM_z "ydF] -n}Hbȑq:-HE5In@3_anh~FIUnYNJ}l{e8b(flݾ͠Ʉc"l-{͙Xs< x xYWQ8DN8D]7?,VbPv5;ٛ6vU[sgg rҊf:=g|T)f߷smOM$1ޤwe![>q1!v!i˔+֮Z[ޢ'MH A(I{cC ݈7b :qBfvr$ֈa$FT%d=ӻ[M>movGljh~>H♰[`GU a(_Lv%rv!TI4 Iԑkyyod nqzgKj ΰf$aVcQ 3fcçN]Gi Tyе1> 2ԯ#~vS;EiT'CVbկ@"m}?4N)ej'֪ܖ7:x)Hn\g@SC; ~W\9)-}/&g;ն}H^hA8xJ9\dE+M g@YIYIbRn{϶$~~ vg2t0:R-+tr>}bV$~#|XCھоw>SܱLKf:rC=c> q^{,T<|}R͹= cb9H9gÍRukT,"bFUS<2gk{a(1Xk\P q fm- 13!"2#4A$0CB)0G9K)SX(.UqAzM^SU 3]Qh8E.y}rc]?W%TR(\P@=A /\f fw"94 JlJ+2DJ w^&(("ˡiY`\evPv[%daVnG~hT廩چYfnޢZn;*Wx&ē v"s&yԊjo='nTpfEEY>xQMͻyI[朲iS>o|oTOzE%a[F{Bm0aҠIw jmLѳsl͸6ަ'~FteU;aȊwL D;Mgee-7M9{|Y~:a(#s'x>nkQPl)tKȩ[0j)q/L ~#L`b2ɗKN=Q}x&RF?I1XBw| -SqQ9~PW.]h T?2l$B$b,-cqzǛ 9biZׅM*n4}4tܶ0nY,qMdrEEjuT,lX2i]ZV&7]ZjfdwRdu(-(^5.b?%Ivm2_8D<.gaWg '㺼G2vN/DƑXRhcΟr*ڣl7ȹXk_TQ/åmSG^R8VE:@c*>u1jBzY,:2"f}=Aiu`2`RMs\^4ў0W>U͍ l&gQVf,T83 6wἦ*1/^k7]D"u Τ"C{B^'ILahv~ X>~44ߴSisIs.9IB +#DMAEKm ]C񟺻 VfV Vt7aӀɴ\&&~,6kg['+CI8f5 ׅ0\ Bv^p.p+^76<эv[ 1||PM{Z\ܻhmr7G@/n:YBhkr(!1 AQaq0?!¯h.3iD61_{ba@Az?r˖H@4Tx7Fp9Uʛt 8ơY^\]Yyz6Ƞ: KD=Bat |%4SМV]˔͛Gx@%%APؖFn ) @iQ y8kWצ0&5lfY.ZغԻyӯ*TBT:?f]hǿ9Bk5 Lq$ p(uC: t@}0[YE{\qm3%OaRC1&B+[oQj>)7S򉻭#1nڂ.OLR=<~ر2PRETJ(I4`I݂ysj&5˕X}~~w%}HHQaF1QR_`;N-*~WPcFѿfm4ng1.ZEa`ilupW(kTA%fD~y=@'Èr\ URŧyiQd9=c~%6\gƟHv!̅ut2GQ oR}8C@'XC!OGUy47@ .ހ=/G7ꚦWⴾ H|qx{&%E,#hg :y!#X, a{y}v3xUӂָːxb -z_ @ CPx[b{o?N]݂k܏N~s~SuI})]~i{5+멙OPoĠJaY'>i`z? ,J0<0@$qO<l=ٲͅ{C'KlVvwIth\ (5`v!S݇Գ碌8(u50'Rtw+uP=15s|jxtJ[8v\\V?J8ҫǐr,8Vڠ{fp6xN>p_ ?A#Qa^sueK egCu*Ž) ['Ru3h+F>M")pOQW0 5W{Y. wqIt*6f30oM)xkҼо fi?ta|A6>'&;ks3:wUxb`~%z {#: vq.)$!0Kw2|2tv2B#6gMsJ3N&hLf*d\]KOd_<b5` 45mo 0݃l3I At}0:EwϤ.Cwf!\9GRwH~EC)\MK!- Oq&6Jx*ʕw}Gr{Tˤhb%1vWA ּ ~̾ lcQ\BXOlhtQzPcW)U&A}ߢ1qa}W*!PD#hXZJ>F\!gyQ `3(RC$hYw16J$̊ܥnٔsڢhL)2h`assets/images/vmsampleimages/product/marinecap.jpg000066600000020405151374526160016465 0ustar00JFIFHHC     C    P$j2kk,TɋeScsc$vx5"Ȭ6D^SlM|I윟[ 1H%1_L > y*TM 1%PLQ:gZoXz3r^Fr7$y 5M.\ "_{G%@<~]N%lڒbK5&_1dMDż+na3g46zuE2LjnEL>W:tP ys]LUMH"]N_;vfiP Syܘ5r5z~a鉀Xc03 r. "!#103$%2@`A%:fM{Iʨ)<ɋPqLr٬:lG"/t`-Vhb H曐So%CP%ou^Ą.aB_0|QE^tHںw'lW?MնpWjE.H*/Mmǚ;_N6Z}&SA?IPX95Nos6wnL8 )Є@X Nz?TdN|:lXXNEY|yeR)]0)X%2%)jGA>6ͫ(>I2OϡL1B+/U \O2&_LlXX{)碽7R(Ȳؐ/~͟[SWe"BqsKj~^EF".!˲ŻQ YV_.63CE%VԜU3-*e2i>˗aE hO=wXm˳<̿B ކv96l櫿 :N/e\e2 C(YfBͽ^.8hsF-_3\њ<h2ݗĚb=rħ~- tIZ;RN$Ԗij|7^JpsfoN=GGWԓoY#kɟS/O5VB..QW|w4e^c+05tjCVq<&SFx2g'Yawʍ9VّԫĞ2ɞ.fRޥR)kq)QyYl$h+Tѕv}Z|ק2;hiЊ(lYFTN\ͦZ6 R?*a( !102aAQq`@?+zefk3=Ǖ= O\"9VDrDb7D|RrC[Gr;h;w#nvj5W/E^eSזW1Z^1וZ+JEVgrוdt_Z1~o^WPW|O^U.77-ZY-uPEHQEQׅ\YeYeYeYfe ?%KE#eHܶY}whbdӅЪ*R11ׇ{_FoOb⹽xsPG;͍͍ͺYk eS̵#:lorJj s iDb2->t'KRr(Q3%u<|??; !"1 2AQaq03BRbr#4@`c?3k)2|-%YiOp_oIS l*#0g(H~mުYrS 1mcwN*GQpM™5_DkDJvP_Z?)xJ{HvN?=<`vvJ= oM3w8%;|aFQk⵷)^M:+EZKHt6%"DcrlE3hhÂ887K~+]cZoRh &[k(vvo)ԥ8]YÁW.* ͪ-YKJG^Nf D4NZ8w^9-PU* GGb3Ri"'bLLgu%-!u#.|mVm5PA/M ӗ8L&J*VզߩG>- ʨvB#(i5;;G*êJcո_X`Tǫ8-*T{ZCfU }%U]B gE]R XaLVT䴃ug&Ê!Vd=bM5UQh^F]rZi=NUP0@CjVYWhw/%ږnqB-RjP%r+*!1AQaq 0`@?!FX5J*{0 {!E6?+[[uj'WV}>P34z׋.*ir#\ ܮ"VB GWƭ7 ֹtd8b- m>ujW}N!M]+>,wm!Ok$p9b듽O81R_BD )`xd3)L_Xtn#A4 `q~\BT)ƎM vxg())M,]T QuJ ue֡Qt(PZ,ɉC:w)!{sM/ҭ<,=`x78ԲZ3HTԔ<#]G2&oF]c=]!tCJD ,c[%k[GX>G .COV +;"_7Uu7dTQp|R.VR☘(/dh} ޠ [jq VbAYBh]αPnj(]ucDyJ>揁-(gπ=cqKo*6d[Uo\ݟ;j\З5~6+9c |\ű *'\P2z (8^vT`_aF85VPq=+BX˿*O-Mn=l-6m [4SHj3{aP`ZQǏ/=)JSΗؾʷy#z{)"҈meMp0 0wӦi JQq (5H凞(7bN{{:9;}>+W~`UO12wuF;QÇH|N;& g(8(L~ ִ;Q(76- -iNP:1zC]k@5 nTɋp.M9 ʿ I$I$I$I$I$I$I$I$I$I$JnĒI$0 艛$y $|H2L+JN|H HETI>BI$>`,I$UJ눙tI$[7v$yT̀$Bo\ $ 6#i$3a{8$c}3$@$s$I$F,$I$IA$I$I$I$I$I$I$I$I$I$I$* !1AQaq 0`@?P-"15Oüa !(" Uo5 a80[NZ4YyjRRRRRlFzw:SD*v熧-EG?g=aYwcUyԿ'PH'y$WODNm&bW >;їUhe8Py\P. FL3c<ya`K%d%3CTjR)P d=,K҉X,Y(`OI2pn>tt{sAi&XB#8/?B=.R M-K, [zdՍg毊1Ł4OxIo{;\ӸoМB8 8NG#dg M_v(5ޛK b@h:~i7|ϟ3q̵)~L e"Wg\(-mwř̼:KWˋ+q􎤴= %vP VG۳Œݮ~v°0^|]ay"YtwNut(ĔiJ\yȀSwt+OՔûړ>ݝv f7сDQ~tA-p"s2Z|M}JY5¨woyHin, Ŭjj~By:#O?CODo0~\냃5kǔTbßd\q>#g~N=q9Ey;= 6M_ fO\7W~u>k(&}珂ẍl{!@ףN, 0k(0Yǟ췍W{!㜶F|uy1c)|<\<3?L]iOه^]VC۽|ʿ_:9;ٙ@|jnuX}U׏*!1Aa Qq0`@?)q;?cy%^RH3,hrAfa2""PBC =pSJMa[E7w';1OQ@:-` PJeNVA ' Ӑ.,\N7hb>5JIûh;=8](A1)@`+ jj8TqDAI2 8( 98@sưn;g)V"[! ",@ @٩Y@ 8{i4O )FDr PI"H# 9?S+өuF"Ѐ8 x& 94p,q* Ba!A> 1Ht(aq@2eHXD2 D$ō@,Z>F!l]]c"^@@p1萗msL P D!A8*P]< _hI{>H\gC8z6$D:P?" x&Q'Bپ1dy g5^@h A#0&|j"@,S Rδ u93'hT.: @d־3 AA@qAYBA?e&@'2Ag  1Sn@@FCdp~VBA͑8<) b$  .2Z:E"f:D$wP\@HA(5 7Aassets/images/vmsampleimages/product/hand_saw.jpg000066600000016411151374526160016314 0ustar00JFIF,,CC" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?(((((((((((((((((((((k^3tu~_]NH4O}_77=uZdg?Lp۰{幎;ʄ29pw FmoWFq>>Y~~?{>zao&jioAm$OD3_`x3SciJJ./i3"N b= BQŠ(c ( ( ( ( ( ( ( ( +>+d[7w~8C뷢)aogns;JnH8C_ϧ?ߍ[S<R>"|爪Խγ^ߑ;i q=,TZ&nZIXO5?u~>Կ?f=u Z]#@ ڟ|BW#mk) h-o/h_G-~x@~ ^z Koh, ]T<3LCZ><ŗ&cP|ʌ,D%G?Oľ#wkɡٝ1wG-^kjxlen?RJʶ"Pjݦ}7oIaS!O.Y_x˖IwQi{<4}JhHsvx2-]Z2X:[*糿\Z)KFQ8:v+߻~ѽ^8.)(c-Ww"B;)F2^!m eo)!V^'3hO~7:)u%Oߣ>WW޺-:7TuڭisTOhvxo v?C-W7:Vn\([mgyےM~Fߊڇ[E sksS% a1ğ왥>x:9WC玖iT|9Qz޽i5W+ wj]#;05ANs\tj:n놞Fhhzؚޭ~דּ+r\,'†:p!a (;((zO٪/ |gMxTEӾ&{9jXH6r.RLߙߋ^C)/7IW>*n1|q󨸶$Ӟ%y Ư?'_#|diiI&$^5S3ZXDy#:f BWNN+.OAOÍCL׌5YkM[T e1I 㱙l2t$=95pGG'Y¼1Ƹ8 Jԋ"P%;ErӚ7a|x371q7aՒԷ"cvYWkOWWŸhuޝxOD zu[ۛ{R9Xk|O>Y_._%(jyЙl¾] mWͮ+7YwI^Ȣ+ ( ( ( (࡟6~>!xf>Q-OXm3H7 Z( fX:JQ^vWx|_(Oz//|X5&FxfdZp"3 ?Qw*o~|'eo:n5F|2ݵ )ibMd?ٿfK+;uj_Kx.׾.ƒ,-@XS4DGyci-)ONio~X'+8;Jo~5d|)N7] 2aR"_T};Ҿ(>9K}$iއT-4'IэB[y;zw|m? B|E㋍;P^ZxjZv]݈o.a6 b4 .xi)jG=?%/44N^ueY)nVޗ~d?'[eMVid4_ .z<StE,HE 7znm >CmM((((+ n迱Ɛȭ/"V`FzaGscO~G"qJog[gv(8{Wpb`o^ Ջ~ Ox4溻(d HHe9(A][EJVWm$GO_% >7)SB$Rg"x8|_J ьhI;[cS?gBD?or|~~.ӵ-k@e;s:Mos=PLuރy,$kSż0*̷})`G}'֤+~y\Vi^yoUKJ0Sfoz.i4V?೿R_*f⟁_M߄^9SfWSGhח4ѼvOl.4K+ܴ +J7~|nu|Pxc ֯(մOh^%ҵ[_Mc]5YLˬsOOfؿ᷂ a}:M&]ڄvcY{[R+-6fc.~Q%ynGIP_+l+^FSsuy;7F6I$I(QM#_hx{<%uq}Bңy.Oa5>ۚ(OU?Z7`W(=}+?G)x 8D;T|Zh6ͮil~nۯ A#wnx1C *?659p=10WcW]MA^l\@-࠿ W#CJV?<2_IxVe@&(ﴄMt mx-^?q7Vz|;V >mHC;?^j=&7WI_\E[HVXc Mh("(d<o|5kG=h,}BK :2Y]ٞG;331'=az=_".߯1k? N=w{ݦK&a?!Axo>A⿋zZwhaVu JtKK%X|^HCG,qơ#""ju^'Usv.,6aMtI~EW9QEQEQEQEQEQEQEl͢|DH&ǯj+<;o؇薺/_Ğ6kU~{-B 1$eTpn..)ך?+%8{FS?έl;"Q7yFjFϊ~x?ƾ|3M_ou4K5@VTګ|E++<6_ |-v0kyWF1^k#V)2@ioG4cOGJ֞='׆,olujw8gLἷjkx_ a%a;ůxGq*&q,$w5Tim-Ķh2LxH>9c*'\RwkOdvч |/Y7 Rh*V.iIVR$*/uIFV~j?_/mzͷ)?Ow/n\$IyZkE)5k+.썅̱J~_Gπt#S|3io}ĺ7`65,I%Zv WԔWٷfYĒZE/EaMô큥M&mދՅQ^!EPEPEPEPEPEPEPEPEP^g/>:|5GŸE/<]o]55<3mm[Bܩn צQWNJU#VjQiiS^h`_*P$$(=dM=v<߅?ׁ>|f ع{]=[VႬ¨iw}UUETRIU')vۻmzJY~]J4S!c%I$((((((((((((((((((((((assets/images/vmsampleimages/product/cap.jpg000066600000020405151374526160015271 0ustar00JFIFHHC     C    P$j2kk,TɋeScsc$vx5"Ȭ6D^SlM|I윟[ 1H%1_L > y*TM 1%PLQ:gZoXz3r^Fr7$y 5M.\ "_{G%@<~]N%lڒbK5&_1dMDż+na3g46zuE2LjnEL>W:tP ys]LUMH"]N_;vfiP Syܘ5r5z~a鉀Xc03 r. "!#103$%2@`A%:fM{Iʨ)<ɋPqLr٬:lG"/t`-Vhb H曐So%CP%ou^Ą.aB_0|QE^tHںw'lW?MնpWjE.H*/Mmǚ;_N6Z}&SA?IPX95Nos6wnL8 )Є@X Nz?TdN|:lXXNEY|yeR)]0)X%2%)jGA>6ͫ(>I2OϡL1B+/U \O2&_LlXX{)碽7R(Ȳؐ/~͟[SWe"BqsKj~^EF".!˲ŻQ YV_.63CE%VԜU3-*e2i>˗aE hO=wXm˳<̿B ކv96l櫿 :N/e\e2 C(YfBͽ^.8hsF-_3\њ<h2ݗĚb=rħ~- tIZ;RN$Ԗij|7^JpsfoN=GGWԓoY#kɟS/O5VB..QW|w4e^c+05tjCVq<&SFx2g'Yawʍ9VّԫĞ2ɞ.fRޥR)kq)QyYl$h+Tѕv}Z|ק2;hiЊ(lYFTN\ͦZ6 R?*a( !102aAQq`@?+zefk3=Ǖ= O\"9VDrDb7D|RrC[Gr;h;w#nvj5W/E^eSזW1Z^1וZ+JEVgrוdt_Z1~o^WPW|O^U.77-ZY-uPEHQEQׅ\YeYeYeYfe ?%KE#eHܶY}whbdӅЪ*R11ׇ{_FoOb⹽xsPG;͍͍ͺYk eS̵#:lorJj s iDb2->t'KRr(Q3%u<|??; !"1 2AQaq03BRbr#4@`c?3k)2|-%YiOp_oIS l*#0g(H~mުYrS 1mcwN*GQpM™5_DkDJvP_Z?)xJ{HvN?=<`vvJ= oM3w8%;|aFQk⵷)^M:+EZKHt6%"DcrlE3hhÂ887K~+]cZoRh &[k(vvo)ԥ8]YÁW.* ͪ-YKJG^Nf D4NZ8w^9-PU* GGb3Ri"'bLLgu%-!u#.|mVm5PA/M ӗ8L&J*VզߩG>- ʨvB#(i5;;G*êJcո_X`Tǫ8-*T{ZCfU }%U]B gE]R XaLVT䴃ug&Ê!Vd=bM5UQh^F]rZi=NUP0@CjVYWhw/%ږnqB-RjP%r+*!1AQaq 0`@?!FX5J*{0 {!E6?+[[uj'WV}>P34z׋.*ir#\ ܮ"VB GWƭ7 ֹtd8b- m>ujW}N!M]+>,wm!Ok$p9b듽O81R_BD )`xd3)L_Xtn#A4 `q~\BT)ƎM vxg())M,]T QuJ ue֡Qt(PZ,ɉC:w)!{sM/ҭ<,=`x78ԲZ3HTԔ<#]G2&oF]c=]!tCJD ,c[%k[GX>G .COV +;"_7Uu7dTQp|R.VR☘(/dh} ޠ [jq VbAYBh]αPnj(]ucDyJ>揁-(gπ=cqKo*6d[Uo\ݟ;j\З5~6+9c |\ű *'\P2z (8^vT`_aF85VPq=+BX˿*O-Mn=l-6m [4SHj3{aP`ZQǏ/=)JSΗؾʷy#z{)"҈meMp0 0wӦi JQq (5H凞(7bN{{:9;}>+W~`UO12wuF;QÇH|N;& g(8(L~ ִ;Q(76- -iNP:1zC]k@5 nTɋp.M9 ʿ I$I$I$I$I$I$I$I$I$I$JnĒI$0 艛$y $|H2L+JN|H HETI>BI$>`,I$UJ눙tI$[7v$yT̀$Bo\ $ 6#i$3a{8$c}3$@$s$I$F,$I$IA$I$I$I$I$I$I$I$I$I$I$* !1AQaq 0`@?P-"15Oüa !(" Uo5 a80[NZ4YyjRRRRRlFzw:SD*v熧-EG?g=aYwcUyԿ'PH'y$WODNm&bW >;їUhe8Py\P. FL3c<ya`K%d%3CTjR)P d=,K҉X,Y(`OI2pn>tt{sAi&XB#8/?B=.R M-K, [zdՍg毊1Ł4OxIo{;\ӸoМB8 8NG#dg M_v(5ޛK b@h:~i7|ϟ3q̵)~L e"Wg\(-mwř̼:KWˋ+q􎤴= %vP VG۳Œݮ~v°0^|]ay"YtwNut(ĔiJ\yȀSwt+OՔûړ>ݝv f7сDQ~tA-p"s2Z|M}JY5¨woyHin, Ŭjj~By:#O?CODo0~\냃5kǔTbßd\q>#g~N=q9Ey;= 6M_ fO\7W~u>k(&}珂ẍl{!@ףN, 0k(0Yǟ췍W{!㜶F|uy1c)|<\<3?L]iOه^]VC۽|ʿ_:9;ٙ@|jnuX}U׏*!1Aa Qq0`@?)q;?cy%^RH3,hrAfa2""PBC =pSJMa[E7w';1OQ@:-` PJeNVA ' Ӑ.,\N7hb>5JIûh;=8](A1)@`+ jj8TqDAI2 8( 98@sưn;g)V"[! ",@ @٩Y@ 8{i4O )FDr PI"H# 9?S+өuF"Ѐ8 x& 94p,q* Ba!A> 1Ht(aq@2eHXD2 D$ō@,Z>F!l]]c"^@@p1萗msL P D!A8*P]< _hI{>H\gC8z6$D:P?" x&Q'Bپ1dy g5^@h A#0&|j"@,S Rδ u93'hT.: @d־3 AA@qAYBA?e&@'2Ag  1Sn@@FCdp~VBA͑8<) b$  .2Z:E"f:D$wP\@HA(5 7Aassets/images/vmsampleimages/product/wide_dress_2.jpg000066600000007632151374526160017106 0ustar00JFIFHHC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((" xIOū 7p>Ǡ\lk,f!8#B9gU>f;|O]4L$*\ZI0DkL{<WD1q `b10k Nݧr~Kk}]?0yM#TČZU/Ɲ ե>FF7i.I6D "?3ݧ53wd$!( dc,?4k<9_]~v 2);}!*q}7&hjz$>=?) !01@#$2Bj.AZc*$=?rߌƘx1.L!~鴵Jc;!1, :~+[G|`=_WSar^m$ɟ9~9 KM*Z2LIQC{^q-7i=S7RBťZk^CQ\X+؟=vQ黱(8v )U%dæqqZw2Mb9$u(O+x'gH8٨78,|pF>Fg.UT ,[޴x|F@8sLtJqp³ %'O؉Cad]ܠݥ+6;SkĂS7[YW1$p9Ti*4OMNXUFiAf@k%jcj\dwz/\V :b 4qTxEBcރ8]5C "t CKԖD6ͫH azp?p?1!1 "02AQ#@aBRbq3C?Iti 2`IϺzSхS"\fby}̳K3f%cYS2c;V4 e dO ;<_Ea,McпݕQ嫤fI-zC(}r[A$R%'e2 MfYfvc 4DPe(h#MYT񋹢)CA P!g40RN!fݸu9I={'psASB I36yG|VqMz_G%s ]=Tt 890t5VhinK?ҵDas&<ф4[\3hUp)(QpQ4/qE;_h3CnK1hPtRպBI]phs~ƸKSt/ܿ nL$ OxX )B˜X}DP(.V?&!1AQaq 0@?!+{'*>` P|+5^̺sً@*3RoybCMh`#<4JoWoᆧ~1Z~ L5De-@#ƃQk,}Ug Qcˬ^+8,EXcU FAbݒOUUpL<3-c()YmYcu4,ӐhrB`xeՔ1c"Ŏ kc`YwU1c:1q;>ҵUtϘF1c1RFe D;1gMy.⎙q*iR}gUJ3К"ŏcHt7 }4oc \VU1*zc/5s3Qg8OF`"j1<~%SBؕ^Rml&z\IFE%G{('d-s1d"o. h <҈<<,4<(L<,# < < <<8(sO<4!G8!H̤(;|>|_t1.xw cz_W B[סSUu oBSx; 9դ0ri&B?S-U[HճVQLU:5`o)3(]hE`𕠶V`3( ٙCf#XxbXYm^]^ peڸx 覌O@=+Y³H="׺eLmr~pXcOvRG(₮D0:^ɯՙǵC"=љJ$)tt*|IBp=]W td쟔( }/assets/images/vmsampleimages/product/power_sander.jpg000066600000014471151374526160017224 0ustar00JFIF,,CC" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?((((((((((((((((((((((((((((+h eς?]E{Ò_n5 2Ckce e]Kokoe5jYA${E-u-#%|oI⯁_5VR:w ~;̟\dqۈs ~YxY ?eMjto[.^e' Cixcc"$x ^2݂EI ';**$ YK5xxg0>#/a;TbN>Ut˴mw*4:~5o|AT^C"=$P.T{;ʟB9f#>| Ե4c͌U u'ɸ ujOH#XYmQMmȌAf,1lW'uNEf@X(ɒķX&RwrN *KbxbS˰tcIƴRJ|]7voKC8)QC>Ni`=Y<0Xp<#wXH}ݞ叶?'wqג܅H߈1Ϗ+it}oxM:ix-^Ahd23ؙ-ϙ?ÿQ]L8oV.}szG  k̬X--QG^Ra-_گǗѨDV'ς;O-‚s׽}7K )Չg=s > |fώ-(,?@}(> ZoL߫x=:l&z{z -q[] d?j-#Y Of6ln!co+-eu~6*|<Y8>Sx+! A? 40cw7*-B𶏧{:.I^i>$U4OP?i,#k'Vxþ"_Y>l4:H4  OUhLy?M9ce-~׿~.GbgeD>s4z'"+ FnZw^&]FM_n<oιt;ҿ9fhCtwEFxzi6WI}WpŭմJIHepA ֭~qOxs cnG3Ok3B]m>P246Z y{Hq_QEQEQEQEQE"dh%hA"79+|`ڷ?u,0F 50D\2}Xvp4fz }?>Q^,nar1|Ȋl-gKe=}Y]K" :? dJeTr2y#ڽ{>>_-Ry,KU!@0q^aܴ+/|QYAm%χu=r "WMd:+?(Ư˨| Ō- Ca-Ι $%$ 3snA[ ߳ꈱ81hݬx@𞉫x: 66|emmß l-ſ,Rc ିsg h1zLJWXCxVy)+榊]L鰿""osƟSOov1I_CNAx>\򲾫p̌-ŨWPo[?<7OƟs-VŝΟ{فwS+ cY+q|$e'τ~|/~2< *=@ЭP $6^Y$wvgvbii6KhR8@ @ ( ( ( ( {y~^)7#~<>6/ߏum2[Hg$d+z.{ >aO4/nK_M9u9o,NJ;xoOf"m鰵v=\+4"YA.u~\x?xMO^fvJsѾk~ն$MMimuSg>\Ybp a֔^KOqSibaMRMF~I&~:DWqx٧[cLo?WC>+v6FqZ֩s؋dUxbP$(G"oSڷcHko|dHmGx߽O0#JJ !xůj)c<w_:K*R泒{k`Ai{7з90Ti֓17s1\]Ĺ*Xn9&NkÕTUyrIO{x E_~?<_xs|AiF-,kYX$xK!zuUxwK߁?Nͬq~ПyUHf&Nx/~¥ o»> ֎L;kn:7{ٛ1cZ״a$aƄęmmxfUr9# b8C< ?tE{C~=_H 9cnO}W3Qo+Lٖϗ1(֊є-}l{~-Ŭ^*\meŜ6WKmq,R%e&ۭeal4gY5i\^M a1WQl|;|YqP|񅠼Ҵ xG!gE QZEMIw\?No{>"C|?^|sצ豑I-n)I):7JXltj'w˄6T'*Qʴ9WV]?5~_o{ck4b߭k qk , eIbW ? xzb-֩??#$n* (:eTIRaZ/uxvem!AreuABImL8&\v+!UUUT* pQ]fEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPassets/images/vmsampleimages/product/cowboy_hat.jpg000066600000005717151374526160016675 0ustar00JFIFHHC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((" ktcs||75[xgKi~5 Xni<);-$~2&#Fz?]Ԭ'@q"[:w w':2i{ŔT.8*K?` Hc9`8e()WLCAvQt Ǥ;] W2=) 0!"3p124kp2屷<~*:VbuhcPMTAE/8\ɫHתbo]U5$Xw7/k|WM;"0eLjVPp?p?6 !"# 12AQaq03bBRp@r?!ZY^#VWUVGU6{?pS\x㲪JZnSk̓CWXwv2evݪh1K)zyɶ7AU:6꧐5!,Q3U&T3 Xb7j+z+s"8Yf3>6VJr*GEHBU_&PaB85M2Or #Be!:a=\PJ^a%o s+;T $PMX_'f& ݱj u*O`T,g8UW Tq4)!1QAaq 0p?!k3ʶS@#2ٿ* +O˧Zى8]8\Kݟ ,WYicJ:Lp\W&wD &fvvYO7%ɞJy%%ެ-ŸtZ(׻g`Pj.̱P9b0±ejgD5v2/I:e fMIjKuR9 zO9hh a]~ WKRT0| 1߈-u9p @]EIVhKj;o3"yџy˼UQ}yTtՔk:{}U3CH1 Ѫo:A =ـO57+6 8yz9~NN3=1mtR[~o5, c$^K0nK'zWE]eͱqcxKMv#8KǴc{a`wQEQEQEQEQEQEQ5M3D5kZltHTյmN; 7Kw!#4GwUU$4zjڶzjZ~j^GizUm5ĄGQ";B$ }o [xƚ?eٟ?źE!w? |#,⽺!{ΣakV]/LK{ٷ׊nFskP:' [+y2tmKΆMK=  Ԯ_Lsv 9o2TG]YgUhПo_ Qk.?i{E5DI& "A dAtdH>2I\᭼O]SiLIsmmT\8ᶑca[F K͍|Ig~֟ ';*GǿjO[w <쬢MP[9UM⿉]< px\>t]Lkim]9!MElᕒ7I8?+0׿dY9z÷?|7u[t-oT u;]Gi h=[!^g<35}ul|˴g߱=*J< >[1~<93IwI"÷iȤ+++~ߴV_z h_xWOnFJOu;[nMvNh^=Nc-m7n~QE((((+X(/}RC/ͭZ[ގqQ?2*?<ha9x+.4Ilm* j;\Rkn-aѵQnI/qH{yЋ+txڧ IU|P<d'n?^_&Ž IoHķ7RYgLo;~7f!}&+h:m_.{5moEYdȺ=OqsKWaHSzQe ]W_^/έxZo~9V IEqiySxn5+ I`i-co 2~Zв'+ ٝ5+=Muɲx-oK1qr'T-x߈ߵx[ef<7d4lnU'yEݭy7~߲t>o"f 8>.x-[GwFQi N@:&TӢ Džqsv_.xX0'Ě`ҒM/}VGgHV'Q%HakoasoV=bS)5RQqJQrVKWm$uuחz[=h30 ؃=['ӿg>-ëO,O x/t`2Nuu':*0yW/>$hk2˱YV2x,dm8t}b֩ ((((((((|k |GxúGxKjz4FKKw$xe7F2f/O$}~>#:ƽ1|Hu U}~g͔jqy}y<7VKPBVI4dOZ6)yov^P_| ].7{)dWuÅgms eb,~MG2LMUUi|N<@|6cn!WFC2!B]@ah XIo*4uJܿi', fsOqavQZeV=N@7[?S-R k$c7|FU\xScDDg[yJ,sB %ռo|Ak*Un|a\]_]siDŽDSmKdLס[4ks\;xG3x;TInYnٟ+¢Wefi&l%?Q;o_S#=B4Y!߷"`g[sIwmq[K1_u\O594k帹qf&T֩ӸQErQ@Q@Q@Q@Q@Q@Q@ŏžS 9xGPK-+{?KpV_--I+x5ud{k{IG/?\xGZZ8ݚM)7qZ4mi"$t3]-[Ӭ5XJR=CL-n#hn-`)cwGVV nV&sg?Zֵ> -[3Ě}G—W<Țd!s 0fi?/g4okT|mo'm,ɳIz7e~,{9CXɩ*ƗnkP^/#H{{߶75WfY-?4md]XyGCs?畤^ Gu/-r k*<-敨1 VH-nݧk/[^.|lM> eL :ʟhO9CO+#l-mjH'ȱ%Me}}UM6Oۂa+P~m]wz3'o|]~'|9| ĞQ@FH\UdDtєv*RgN-JQLAEPEPEPEPEPEP^;@|ER|?wN?/xSYhU"H.mH-ex"7IX{^߶]7 MB$|5hN|aᔙ&䮿Xцׅ0EmuWA+s-?[7ve6>f{9nrBO |^8~?o{DW"E I?K0& 7 x%Wico_IAx  too˖<g]n'ȐAnbiwP#2j߅T)zKoz]]N߼xsP<5)%'ѯ+.iKsmz6/ t}r7߲z'te'`;{;q6$_/|G.| k_iLWOW:[O&Z-}a<%Yg5j ?m!oUKO} /,|?uUD :mZdcq 0ùݨM-қowz{Uo?ĞkS;Aօ}ꤺؤx+'EW'EPEPEPEPEPEPEP_?]%Ef;_| m?ن{Gֿq,ol+Yk[*;C֧*Ubdiz4fRFN3M5Mj}{]KKmZҮt fҼG^ū׭Z]?Tki|V1̡#d"'5|VM":OFկo䵻H.#2\O<^m#~ ~.??n}kqN-wS]wW ^x0hť2meKך`'Ưg&oZ,jP4r%7QIDl̍yg?)Eqj6kIoIRRWgy63)J4$>Eh)ZҒi;J0KKED+oOZ_'ǍwTφ_?gk>&д [M5O;3mlՄww[Cݾ-" VM7_k_ +W[;A㯆_RVR `HR&;1ջ?_Q@Q@Q@Q@Q@Q@Q@Q@8~?Gp| wN|;~&|'mKBIZ[w6w [Ȏ:"7ogw-ǭhz|;ys4f8,1|`?(kk{;{{;;xmm-aKk[[h {hBqTQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@assets/images/vmsampleimages/product/shovel.jpg000066600000004460151374526160016031 0ustar00JFIF,,CC~d :   !"1AQ#8w$'XYa ?`xC[ F^S-yk5^ɪUv]\ZƿdH7tb۪R0v>!v\!^I.F}%&^n[();\$eSQ0v`0 #z!9O_D4i=n=9/bW߅|*hfOsۅcuM͋@GJ*ִvֺ;rJ!mb d+rm=#)T*eY@`0 3 T{/B_U%7evм=(ٶ6m78BDz;p>ԺDnȬOT DCgjZܻ(jVJ@S04o%5"$dѨ7tں9J-y}Ϟ=ۉJUIfhmrqٸy`0 `0!ׇ7훁7 `0 7yXyWyf7= vDz2P3;"9)TU"a `0 `0?wl )^n 'gV;9ܸ;ʞYUHrͥ&X`0 G^%K<^Υ}ͯXO6jUXҮ5YrARn19)\ eQ_`0 ;Õ\W >I.=R뺜-%~hx܃a~|ސ@ "^臯ZPȪMIv$Kݚ@XvQ7~`ߡ?/8e®\-6뚿j*lv<Gvm5rXb *a9Փ2Ypm 4=vz?o^-Cdb|~N=VͭIF*{O)~_Ta[<;k j]Bnb`9fLdWn*&K$cB(S0 SS~<8Si Y@QByawX ];tC8Q bKv`0 pcpGvQߠ :{%ML`"! ?L`0 x*Jtؽ60Q)`i~]n`` cpD; :-UVtPsBa1S@Y0aI`0 x8sgJɽB)!Z5j4-);o*qʊ57p qdGC=,iQk7Z]eN*84QcvJ~ χ, 68Vx2//_Ǿ|Ş^o ڌZij[]]DJhEQEQEQEp},w__7w}KN`EI#ťUY;+~5"ִ/^qu :: +rf|*| /b>Rs +h?U\~&F]Ėi]uk;5K[k$yU#S,ʓ~~ڿ]Ru߇?uڳ$7 j`7udj67X`U+kYWuO5n%w|LoլSYB7mkHٓM𝧄cs+l?oD`ers7uFT|Mm}eeX:ṊA,r:OTD*q#if*2WӜ&S$P|k6_2^_Ys⮏#Ŀ|%޻[&E?f?v]࿃-uV)u[]A7ҵ14غ4wTjysꗷZswy{;\#yؒI$I&W/<wx;¾0x=;Oaggvt@X`f8q[RO蠶 {g)]VP&PFhMkWF3Z\Tȱ#r c88k\w Z%h/Pn--T䀭# +H s_rⲱ F^\\~i%v%ؓSx[N{xmmeLlnm&vF2KpKx#,2:OwXL ɯh ""mGMnV?vinsX=~ڟ%iv>⇇Bxv#h&W1x\蟍|&|) qHi$ɲ8Qq+3X"m|1[#ho#5ǟl 6v{HQՖ3Q!Y"?m/>y'lz9m%z3QDo:In$GXiMk>7Q[캑%2_-™"\c kx5L:~xZQcx!ׂg6n-wb)MBIC*Gď;1YeIiğ焿%5A1h%C',KWwOZ(ЬuOk Yn7\qa%5w1ۚεsJ5j~i6jz~A-$""If OW~+|Z7jlz`V 4lљ$ϼPIH^r<,m#ßu/ɭxkzO?o>^$5S" |ӘȚɂ8o %jԼ]5 /Kxr9t: iFmLIdTKu"(@L052hluQl$+`2Ydom1w?z惬e TO1Om+FUЌF0k: 4%P{$ɍ,|esBZRH]<[LT}#XH|00-h>^ #¯,񆗩hkfm,%\s$ TXoBpƿO~-M$q3K,K4+<+;3{7wÏ_<:%5?57]JMOyk]/ nvXh|Ik_?l<7z/̿ Znookikiuj1*- IXת( ( (?5ि $ռzuG4J_؂Jw@2gsk]1o;tsM|'|~/&X%𭯀5KwM:35qK{;X?߂?goP ]j]W~_+um[TY`$ָMg_&OS mW?d-Gƿ/Ik]A I"C=ƹi$Eҧ_)x5xgEʟ43: &G?.lb6La߂Aڀ>>~տG~ֿMCa&|)PdK4I5WsGp0+k((((~"~ĿWĝF]Ծ[xg5׉~귟[\]-Au!/wWMRm36PPmI3>GE|K'᫨/(I?%ձ1~ϰҬ4.MӬ-OK;+(PH(PU((((assets/images/vmsampleimages/product/poncho.jpg000066600000004345151374526160016021 0ustar00JFIFHHC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((" P8v:~N o.CIN)آVASBUMwFÕL 73]`Fzq{r/cϣ6 %IPFІHg<{깱,VKA8/>NgP9zc*ޡxx tMN3; u;h q钀 dV7@s)120"! B#3@AP`>L9ؓd lřdn\o*\{^{Jȏ~$>;CwLl^Z-/ot;5UMw^')飏џ`j*} azor6 )0ʪTLj_̜IU(둷?t*͢meE7o'~s;  Tg;QUVo 8R`eF T;0c*c}hܘ@cF+p?p?' !0@aq1"2AQP`?pF0,A ,.6pp88h>XI 4bAP Os009t muw =JWAwf/_YoH(!10AQaq @P`?!L5-{$BYСĒαCPOqkxY:Y"ȨK?g 0͏FI"*5 ʽnv$WU& B6rrY(X,Ӱ,%hfK,ozRD~1mRR%F+nQq^KƳC:,EEjEĬh^Yݒ.~AL2ZI$?v <<<80<(a,<,@ < S<8,< @S<8YVq,2plh9y*nKzC?!;X8Zg}UOn&̼SD,43SL0i,VδiE /$ф@d*;q6-#ы'JcjڧHF7ywP%.\z>"MٯOs.O|.\;wP˷96F} ܏6t666sږO6?^??fm?yWfLcȍڞOD*9w;;"96}M09U]jȎqPdV$%\FpΉ D1)J1I ԌMN;gS9GmvBW5ȳj5mF=}+#33GTu3G\~d,BGZGڲ>ՐפDv+0UUu/p?p?2 !012 "#3AQqaB`br@R?:h\f{DiOIؓۈWb+Ǖш=E(νl:\ͬ^dV7:,.v{xO'a~ jί@˺{O IU*,!r\.W H̕ڈl:3<Pk5eBB漪9r=ٯUrkw5azvrq7V{C!̜&O&E]56%ʼV"KME8۶֌6RQ=B˱X\<HR/q .2eXU\U!{}A)1!AQa0q `?!#Ewr 5N;>d\Y =b{Htr2S옜ޑv-;z> XaғO  JL]Eү: $F'|9Y,עI$hf3Zw1.<8 I$Id}d I$I4]=Oat5oACą{~CJ-z຦AF6ѐcq~Ǚr$;P"j̑AnˀaĜ3F<"T@Č >`6$Ž`?'"(RA+1.aSe9!- b]VhF+ ZY7$"=76 =,ݰNx4?i+#+>/eB= <<<84<<4J<3O<0<8C<4B0s<, $R qL<<<2<<<<<<<<p?p?(!1AaQq0 `?d:Da?yHw*zV4 ;+N,Vl|"JUU]Uκ*AjRil i=`W#3gh!M_./R"= ɬ,q̻pTFFc 9`w,wy>t4,-1_1.C[34=jiJ/2eˋ`H#FmkQ~&oh/&"h ȿ?ݔ)@FV3q8?d0I|Ŀ1[KW4Dmd)VY8Z,kRڲŅ ֩wܤ-X(XKh;+bⷬVQtb/%9/5s/x:,cP&x֑kh rl+i{C_+bEw2Jz#M7D. WX* pNߤ'bQkhT;frU:{_0eRꥣCzassets/images/vmsampleimages/product/jumper.jpg000066600000007102151374526160016027 0ustar00JFIFHHC   %# , #&')*)-0-(0%()(  4qtpO 1.׮[؀#.C](j!({ DC䡓"u)j{=Pɣd P4!(MIWY/C9ɻ[9r9Pne:GlKD _S ղFkO6Y`^dA@Y/DE`!z&f,8}}J]:e W 4=∔ l?v O(Ovb;<ͪ>*~`bQ?$51G֧ȉ&5EcE Z8 C4<%ph)hP- 9GtZm!OSM1/2 !01Q"2ABa3@Rbq#rc?Òc xse߆+V|F'>KYDѥْ|FGtͪr`wr y|e@|- >ِS^H6m,*%5}B+ :b+a]ҳS>V9g`zw}$"WDIq9rP  G`yٞ4^*9[Bv ܺ7P&q*(عtLC #g!Niy:yj`TP*6!-E`9*E3@A-6#g1cGVQE ˆC UAE :~:\ [ePB4_ ӔXK/RDD鳎~+Su )#^F:P&z5?Ǥ2cT#Gr hhY=/]JR]'Ha<ʊ_g'mΟZdE;Tl^gqF -_^h$OZH ~# P_U /gMA@Bp ;\idnOјw*d.3H8CksC 䫊`3cm4a)[g'Gp(?X9uU w@t8 آ|RE9T/Ot #}e-IPAfҳb;[;̩s+MKu [+]L5IiG-(FFN}6rԐ:h9Ep7@C4ڸ4H'b&{חtHp~idZ۷umތBdO=hy-2lx Ѡ -\ԍp1"Ql <2q](:|A@=\G=-=շF.=ׁ8Q;th9#jl"}Fl g~3.Th05udGԐXr⃊,  z(b l/:\xah>q(}И,C0¢Tl}W T݅N5G" oFUQN{$0d4Vm)dUd-]<#*f-޺R 0@E\\Hl| 'X_蔀QIK(&/X|c/tTiܐR8ɕ%tb{쾟/)0<hC46JsTAkTX>J M}AϦ @{rޚzkhI8)z!9w2=j$y xysn>2 B<QDs­zKhy \aw=a}J`s:;LG=H²,*^ 'nU*G,t[;T.Cj2ixJ4V[Q/,m{ ղ`ruӅI[x]-UdF72z'Uyla{(;h5`* 0!"1#2@P`p̞h4yCf*4WޟNo$̨+ l#e\ |d )Ԅ:j~>4[R.2x?Kdd:ٚ#^PFB$EmkjI,KXnv SY_8/+ yHEمcq:4om4.$Ι0'2`]qabⸯg7_.kӮ.* Jp[լ=Y=#)0ELqx;U!B,-Kp?p?6!01 "AQa#23RbqB4@P`r?b*gR#O}#~3QUfk[E. 3AsIctp{)y!:#kw>{83@E)!3oJilfG,YzI*s̚PxbP!Z4&<oꍾxTU[3 BfQ<#,MMy6[an u7ؖpBXêff(-{[mE Q6G-r%6*%8fk{WjAg9`,N V.ji눅eY=+jK2~6R|Y[xu^qI.=,hYًwWXTJz; hjDoW=5Q:!;Q\ܻ7*0,#,ڡ0big*g$T)֖~DVVr`q 3Q0bvglUjkb&g_H+XB]bXlt bs=Q] ~ [_i0Fv`G?d ~0cG2rcJe_/]m@pǠ0Qw/$װLѠ&_3^H@JЭJ2a;k\hu At^dCM=Enkk3 {:u`ߟhc E}Kq #_a`%g:9e?.K?assets/images/vmsampleimages/product/ladder.jpg000066600000011676151374526160015773 0ustar00JFIF,,CCld :   !A$"(1QBSUWX: !1"AQ#2BCSaqӡ3Rr ?Db#F"1D)./R"br3'xpթ%@I^P9ci>uNQDb#F"1Db#3[Xft*m`GԕЇXuz1v=Jq 78{=O¬ㆌ ܆J&#F"1Db#T|xBVbnʥ,UBLNCJlDIV ;o?:MN#[V@%iR,;=T  ̺St}jfAÒ?X${Db#F"1%E^ڪ53x{MgN.pܱ r?čuNmRllZ1π-*0X`BIn&4s$~/MZ[?9B/׷$>`댌u2{v5Zt-'!t꾢q}ZyqDž͖1*YYN\1U$=}.ʫw풎j4FZJ**  [ Ƀ8*Zط{cp*2h+[^fkk~< &x wuQRY|vɭt k1JeR&Mbдю1VgNzkܵ}MM]+ٰ2%9@p<|cpF~۴XՕ 6e|{qb{yDb#F"1'!;JcnyɌ!:=k4i3 !Fqn U9QFsl2phGy܎Uۑt2֠KUU^lGEWm}&}۾F2O ز2WRF3]'Ktt|o_sn>y#QF\!1-Bba:z؄n6MOORjujZ;m5)ʌ#Uk w5zVXM@'|I!)* cpigd; o,L(T=t|l4F*姤U g\a O\UhtMnE`-aQpvԟK-~ٸvܾԖkf[fZ8Ǐ욁 F"1Db#[zї[ۧaj!2 btff9D4̪uSu>eY(GF3}Seێբ1<|(>~[suӺlO_9]X#a5@b5c=vx _Amgle3CVMݽ.w$WU|ȱk Lȕ2s T]j#%-fuEy?sp<%0<|ρħw5E>:x$v KoA{k+YCN^RA頀U/:^ַý$Q~@r9ԹV>~&^S릠+h>e!*F"1Db#<RgY+D2z{W[Z q$Lעn$3b(F/bݫv#Kґr_`Js=b,N]~G˕jvɪ d={w+(=T2RɂaiRJ%)1R~Ѣ6çm6EJ ]b0{^].ğK7-7VuΦ,TED{QEnj('_@p7MzpUcSӒ u5`"flup p0@E Y%eNkz0;ַS_+J4W?zcMQ3cfSXf3>iy,%8/J+!~IuI R69W ~]\.N%\hROU'k'n6OF"1Db#"\lO){V+x⯖4sd.s8 w"%noLi$4A-=- tߧġ:reOPUNt :ĶBZsZ4Hx$) dna.'{)|߯ݸi͏L~ZM?5)?Q5?lS}McM=ɼ"1Db# =Jżo S܇p#qr\PDhF8=Aކ鯯kإjX*㓐<"ɏ¹ d y o}rnG1@,q%rOrPZsUܜs%V ^htLͱe)rXB?auc{0yՊiN^zaUIX"k,΢k9Trsw^U{=9jEx5Xrt*Ģ_X?Ǘ=,Ӗot{?Rs|z_oݕ%r2JBkg )Jhl;[ p?&r<)?#l5jUg(,P>OyL3^ +aNTՠ{-5oz/OO=J%F>yr>Xb#F"1>"cL7Õr}W >z"ժn$)/9>V}ͱCtv3[t) on{n/sP0B@$c+'Nʌ짾zqMv )Kr<'U۬,F"b`xMz磬 a9` U//1VZ1$MЫ^Ħn~])CVU> dic/v+r˕e Pgϐ9GmvH yb#F"1Db#F"1Db'assets/images/vmsampleimages/.htaccess000066600000000177151374526160014146 0ustar00 Order allow,deny Deny from all assets/images/vmsampleimages/vendor/washupito.gif000066600000003361151374526160016355 0ustar00GIF89a(аƠwwyspp{n}jfffbPPu]iY@@]U00QQFL:H y .Dp"@;f 73!#,(@p(0Ȥ2ِ, GI*lhzX:Jc^60 H xBDISB!HB!wH ~!xC JI|B eIUNCDC!BҖDq! ޅTBB! sK ʨǛC"%m:T @ZUT.KȮ8"VP8Krq} 1T0$ /4GJP84y[. YL*^B"svMIDb.0xK"ע z*< [ٻ)G (n_ UXx d<+Zq*QZTc Y(ص I%C0P/A=A(67Ed_LY`Rhlw!p-tmx|߀.n7G.Wng砇.褗.S[knA ^SPk:\쐣G/=K < @O=kߓ=S p>@;W}K=g̕Tg9zW9v{\w\ PEr =p}Ӏ.}@q)!~p3r9F~s(D_.zO9A9P٫ 㴸 1iP1[&Bh p?tEJ v=%*أxOs%б0<%%OR`\, q撒f.'WN2 .Y;R_/Ոdғژ>>z=4f,lb,6>rԜp}`D/ -s|*9B8&1iJ 3@PWnsc3%u& )AY4(MJWĹ0LgJӚ ;assets/images/vmsampleimages/vendor/resized/index.html000066600000000057151374526160017304 0ustar00 assets/images/vmsampleimages/vendor/resized/.htaccess000066600000000177151374526160017110 0ustar00 Order allow,deny Deny from all assets/images/vmsampleimages/vendor/.htaccess000066600000000177151374526160015443 0ustar00 Order allow,deny Deny from all assets/images/vmsampleimages/vendor/vendor.gif000066600000005330151374526160015625 0ustar00GIF89a&  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666999;;;===???@@@BBBCCCDDDEEEFFFHHHIIIJJJKKKLLLNNNOOOPPPQQQRRRSSSTTTUUUWWWXXXYYY\\\]]]^^^___```aaabbbcccdddgggiiijjjkkklllmmmnnnpppqqqrrrssstttuuuwwwzzz{{{|||}}}~~~!Created with GIMP! ,&WlH*\ȰÇ#JH1k3jȱǏ CIɓ(Sz˗0cʜ %͛8sI&ϟ@ 5sѣHwMʴS[QFU5ժJv͚ViXN,QP{rW>,iU]5lUj~:#^"^|-Zxr]%"r>jQEHm  i&$xͱ% 9XH.j17jH<I2G}F\6'w%MD#3eR GH}Q-I"@hDM !x9xm]#{td ՗,2$_Q~tEe]*  ^s9Qъi1h_k$ R+T^#Mm`4LrC@~S|A!0bG$A馛.Q5^Ay&q #Er[\ulơIF4&ƤOFZH>1"&2(HF5xdmlHh Htd[k~(C7`F(l=m P[YǑO @5FFAy yH˺IF5'6B 1:Fk)ښpUN.|moT]+pkWd|Q4ݡk&{0aM"EZ$Z`qZGFpC7{4G,-X  W#_U#9m52s ^#q[$#_0Ys:\ alk P6!`/ qkD_c4HcmA(8ls%b4_k4dDmZ#א,5-4[#!)\〼jz3 / X]5Hns bG0\ elk -g6(4,#m$TAF&qZ$y+R0C a6$L9lv) Km:X\@rֈ$|" DK!F!G` kq#T&7$"אk$pi^Hm%#,Fpu@hܮq H1G2pBDWjy5؊F*qO 5P% Ctd$ȹ%UB K=h+%ؓ 5"ډ(q  96unăQRьD1r ,B!Glp2DaFh$%km8P(B^$"^ g<%HWؚtadOȀFйep6H'B--m)4~fת)$v_;67=VME2tcS)r \3b\n@ @:VFJku3#5I0V 6XFAT6"A"<R)YSv7@φ1hDmkN\ŃmJ]eHZ ^a(X2l#m 0܏, k$51TpQ?Bެ~yJYVFY{0Dצ@?2)JO1PGsc@#_!7;R?` #R4xIdt7v< ܘPЈn,^HFrp3Pd#@eytdh$`061/xA ØhRu}. k(Ͼiэ3` k=?ָnʌs^e׾ga')6(fMaoA ɶn{ YA@;assets/images/vmsampleimages/vendor/index.html000066600000000057151374526160015637 0ustar00 assets/images/vmsampleimages/category/hat_category8.jpg000066600000006532151374526160017431 0ustar00JFIFHHC   %# , #&')*)-0-(0%()(C   ((((((((((((((((((((((((((((((((((((((((((((((((((("  SB;-> @{rޚzkhI8)z!9w2=j$y xysn>2 B<QDs­zKhy \aw=a}J`s:;LG=H²,*^ 'nU*G,t[;T.Cj2ixJ4V[Q/,m{ ղ`ruӅI[x]-UdF72z'Uyla{(;h5`* 0!"1#2@P`p̞h4yCf*4WޟNo$̨+ l#e\ |d )Ԅ:j~>4[R.2x?Kdd:ٚ#^PFB$EmkjI,KXnv SY_8/+ yHEمcq:4om4.$Ι0'2`]qabⸯg7_.kӮ.* Jp[լ=Y=#)0ELqx;U!B,-Kp?p?6!01 "AQa#23RbqB4@P`r?b*gR#O}#~3QUfk[E. 3AsIctp{)y!:#kw>{83@E)!3oJilfG,YzI*s̚PxbP!Z4&<oꍾxTU[3 BfQ<#,MMy6[an u7ؖpBXêff(-{[mE Q6G-r%6*%8fk{WjAg9`,N V.ji눅eY=+jK2~6R|Y[xu^qI.=,hYًwWXTJz; hjDoW=5Q:!;Q\ܻ7*0,#,ڡ0big*g$T)֖~DVVr`q 3Q0bvglUjkb&g_H+XB]bXlt bs=Q] ~ [_i0Fv`G?d ~0cG2rcJe_/]m@pǠ0Qw/$װLѠ&_3^H@JЭJ2a;k\hu At^dCM=Enkk3 {:u`ߟhc E}Kq #_a`%g:9e?.K?assets/images/vmsampleimages/category/index.html000066600000000000151374526160016143 0ustar00assets/images/vmsampleimages/category/cap6.jpg000066600000020405151374526160015514 0ustar00JFIFHHC     C    P$j2kk,TɋeScsc$vx5"Ȭ6D^SlM|I윟[ 1H%1_L > y*TM 1%PLQ:gZoXz3r^Fr7$y 5M.\ "_{G%@<~]N%lڒbK5&_1dMDż+na3g46zuE2LjnEL>W:tP ys]LUMH"]N_;vfiP Syܘ5r5z~a鉀Xc03 r. "!#103$%2@`A%:fM{Iʨ)<ɋPqLr٬:lG"/t`-Vhb H曐So%CP%ou^Ą.aB_0|QE^tHںw'lW?MնpWjE.H*/Mmǚ;_N6Z}&SA?IPX95Nos6wnL8 )Є@X Nz?TdN|:lXXNEY|yeR)]0)X%2%)jGA>6ͫ(>I2OϡL1B+/U \O2&_LlXX{)碽7R(Ȳؐ/~͟[SWe"BqsKj~^EF".!˲ŻQ YV_.63CE%VԜU3-*e2i>˗aE hO=wXm˳<̿B ކv96l櫿 :N/e\e2 C(YfBͽ^.8hsF-_3\њ<h2ݗĚb=rħ~- tIZ;RN$Ԗij|7^JpsfoN=GGWԓoY#kɟS/O5VB..QW|w4e^c+05tjCVq<&SFx2g'Yawʍ9VّԫĞ2ɞ.fRޥR)kq)QyYl$h+Tѕv}Z|ק2;hiЊ(lYFTN\ͦZ6 R?*a( !102aAQq`@?+zefk3=Ǖ= O\"9VDrDb7D|RrC[Gr;h;w#nvj5W/E^eSזW1Z^1וZ+JEVgrוdt_Z1~o^WPW|O^U.77-ZY-uPEHQEQׅ\YeYeYeYfe ?%KE#eHܶY}whbdӅЪ*R11ׇ{_FoOb⹽xsPG;͍͍ͺYk eS̵#:lorJj s iDb2->t'KRr(Q3%u<|??; !"1 2AQaq03BRbr#4@`c?3k)2|-%YiOp_oIS l*#0g(H~mުYrS 1mcwN*GQpM™5_DkDJvP_Z?)xJ{HvN?=<`vvJ= oM3w8%;|aFQk⵷)^M:+EZKHt6%"DcrlE3hhÂ887K~+]cZoRh &[k(vvo)ԥ8]YÁW.* ͪ-YKJG^Nf D4NZ8w^9-PU* GGb3Ri"'bLLgu%-!u#.|mVm5PA/M ӗ8L&J*VզߩG>- ʨvB#(i5;;G*êJcո_X`Tǫ8-*T{ZCfU }%U]B gE]R XaLVT䴃ug&Ê!Vd=bM5UQh^F]rZi=NUP0@CjVYWhw/%ږnqB-RjP%r+*!1AQaq 0`@?!FX5J*{0 {!E6?+[[uj'WV}>P34z׋.*ir#\ ܮ"VB GWƭ7 ֹtd8b- m>ujW}N!M]+>,wm!Ok$p9b듽O81R_BD )`xd3)L_Xtn#A4 `q~\BT)ƎM vxg())M,]T QuJ ue֡Qt(PZ,ɉC:w)!{sM/ҭ<,=`x78ԲZ3HTԔ<#]G2&oF]c=]!tCJD ,c[%k[GX>G .COV +;"_7Uu7dTQp|R.VR☘(/dh} ޠ [jq VbAYBh]αPnj(]ucDyJ>揁-(gπ=cqKo*6d[Uo\ݟ;j\З5~6+9c |\ű *'\P2z (8^vT`_aF85VPq=+BX˿*O-Mn=l-6m [4SHj3{aP`ZQǏ/=)JSΗؾʷy#z{)"҈meMp0 0wӦi JQq (5H凞(7bN{{:9;}>+W~`UO12wuF;QÇH|N;& g(8(L~ ִ;Q(76- -iNP:1zC]k@5 nTɋp.M9 ʿ I$I$I$I$I$I$I$I$I$I$JnĒI$0 艛$y $|H2L+JN|H HETI>BI$>`,I$UJ눙tI$[7v$yT̀$Bo\ $ 6#i$3a{8$c}3$@$s$I$F,$I$IA$I$I$I$I$I$I$I$I$I$I$* !1AQaq 0`@?P-"15Oüa !(" Uo5 a80[NZ4YyjRRRRRlFzw:SD*v熧-EG?g=aYwcUyԿ'PH'y$WODNm&bW >;їUhe8Py\P. FL3c<ya`K%d%3CTjR)P d=,K҉X,Y(`OI2pn>tt{sAi&XB#8/?B=.R M-K, [zdՍg毊1Ł4OxIo{;\ӸoМB8 8NG#dg M_v(5ޛK b@h:~i7|ϟ3q̵)~L e"Wg\(-mwř̼:KWˋ+q􎤴= %vP VG۳Œݮ~v°0^|]ay"YtwNut(ĔiJ\yȀSwt+OՔûړ>ݝv f7сDQ~tA-p"s2Z|M}JY5¨woyHin, Ŭjj~By:#O?CODo0~\냃5kǔTbßd\q>#g~N=q9Ey;= 6M_ fO\7W~u>k(&}珂ẍl{!@ףN, 0k(0Yǟ췍W{!㜶F|uy1c)|<\<3?L]iOه^]VC۽|ʿ_:9;ٙ@|jnuX}U׏*!1Aa Qq0`@?)q;?cy%^RH3,hrAfa2""PBC =pSJMa[E7w';1OQ@:-` PJeNVA ' Ӑ.,\N7hb>5JIûh;=8](A1)@`+ jj8TqDAI2 8( 98@sưn;g)V"[! ",@ @٩Y@ 8{i4O )FDr PI"H# 9?S+өuF"Ѐ8 x& 94p,q* Ba!A> 1Ht(aq@2eHXD2 D$ō@,Z>F!l]]c"^@@p1萗msL P D!A8*P]< _hI{>H\gC8z6$D:P?" x&Q'Bپ1dy g5^@h A#0&|j"@,S Rδ u93'hT.: @d־3 AA@qAYBA?e&@'2Ag  1Sn@@FCdp~VBA͑8<) b$  .2Z:E"f:D$wP\@HA(5 7Aassets/images/vmsampleimages/category/garden_tools.jpg000066600000010610151374526160017340 0ustar00JFIF,,CCKd  *  !"1q%B 7 !1AQaq"#2BRb ?"p'"p'"[ꕮ+ro1WIj^ DYr{ȴ >KN1AQSOI *!x@ -;3 "^]deB6QpFAkBDg)RW9xR5snpN8DN8DN`o|ucܽfS`7p__V62ڑL2Q9FwN1(r)UMc|kBfG.[ŵ섑v|?PwnEZ."ײY[RZʼkM/XmifmX1RqÞJRDʖfvm#S,.cfP俣\X2xZH. nIc$x((Z4Mr_@F7L,#6Cv5R "1 )B481rN8DX#/#kBZwŊr9N%_7a[a&Zg_GZ%d2tf59Z5B@Ԫ_N*b:_+]lMtI]Y-QVZ*$1Jt2"~3v]n7,X.G6k]Llkspk62}jC!`Ƚ{*\v` /)'"p9^l?"NxiMvmwuAxѴd$2  pMH*$kwͤEy^n4u=-ox" 2pU6_;xHxضz73|khF "kiwsRFRHR:_|G,7a;>Mm]Xx}hs[bIFY,ZۢbgT.v综̪73͂n}.[h(ͺI22”o!Gd9W̛7S2^k>C, OUՅ/nr8o\'ms6D̵cs=aHbry-÷]J)r!-k"g9xE^+msi=\͢>Z0]8+k!v$ !d/O~yXNӈMcժYZWiUEl]GLی30>'j̵ZR~~RFrzrDss'/0Tw.9"BZȲYRԵ+9s#ouNnJvzOM]Oen} If =.2BY6YV%IJ\RapNjukD TE*:N:gfЃciJn7٬MGtԸx]ޛ 2R"m}n57]1 }i~i *)aTPv|Y, -Ձ:^%ulP$$lД'(<ȅ@;Z,heϊPb{ݽQxn[}{>0vɝg:>usJU7xO46@H;] LkvwSitCf餆=" w"+A8k "S4 jLl ; E9u:-e\.#3IYll fl_ʴN8D=߱ol:BǸ(ltcŦsj)w}1 Dy&(\B^w$q}lkg|ۜXG5iZ!f5*e)rctgKb l%t/G⎆j=7'a਒F.W@nꯏ#0;EX[Yk$g?0%1MNa-xunMe;6ۭdwm\LE|̔UV0q iygih""[~-Ȇ팼{yy%tp<~ |;Tm66&o[XM_z "ydF] -n}Hbȑq:-HE5In@3_anh~FIUnYNJ}l{e8b(flݾ͠Ʉc"l-{͙Xs< x xYWQ8DN8D]7?,VbPv5;ٛ6vU[sgg rҊf:=g|T)f߷smOM$1ޤwe![>q1!v!i˔+֮Z[ޢ'MH A(I{cC ݈7b :qBfvr$ֈa$FT%d=ӻ[M>movGljh~>H♰[`GU a(_Lv%rv!TI4 Iԑkyyod nqzgKj ΰf$aVcQ 3fcçN] Order allow,deny Deny from all assets/images/vmsampleimages/category/power_tools.jpg000066600000011447151374526160017245 0ustar00JFIF,,CC`d" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?(((9# (_|gg/1x#-Ѽg7g\.GKen?ql2ߑ<H۲( p>84QcvJ~ χ, 68Vx2//_Ǿ|Ş^o ڌZij[]]DJhEQEQEQEp},w__7w}KN`EI#ťUY;+~5"ִ/^qu :: +rf|*| /b>Rs +h?U\~&F]Ėi]uk;5K[k$yU#S,ʓ~~ڿ]Ru߇?uڳ$7 j`7udj67X`U+kYWuO5n%w|LoլSYB7mkHٓM𝧄cs+l?oD`ers7uFT|Mm}eeX:ṊA,r:OTD*q#if*2WӜ&S$P|k6_2^_Ys⮏#Ŀ|%޻[&E?f?v]࿃-uV)u[]A7ҵ14غ4wTjysꗷZswy{;\#yؒI$I&W/<wx;¾0x=;Oaggvt@X`f8q[RO蠶 {g)]VP&PFhMkWF3Z\Tȱ#r c88k\w Z%h/Pn--T䀭# +H s_rⲱ F^\\~i%v%ؓSx[N{xmmeLlnm&vF2KpKx#,2:OwXL ɯh ""mGMnV?vinsX=~ڟ%iv>⇇Bxv#h&W1x\蟍|&|) qHi$ɲ8Qq+3X"m|1[#ho#5ǟl 6v{HQՖ3Q!Y"?m/>y'lz9m%z3QDo:In$GXiMk>7Q[캑%2_-™"\c kx5L:~xZQcx!ׂg6n-wb)MBIC*Gď;1YeIiğ焿%5A1h%C',KWwOZ(ЬuOk Yn7\qa%5w1ۚεsJ5j~i6jz~A-$""If OW~+|Z7jlz`V 4lљ$ϼPIH^r<,m#ßu/ɭxkzO?o>^$5S" |ӘȚɂ8o %jԼ]5 /Kxr9t: iFmLIdTKu"(@L052hluQl$+`2Ydom1w?z惬e TO1Om+FUЌF0k: 4%P{$ɍ,|esBZRH]<[LT}#XH|00-h>^ #¯,񆗩hkfm,%\s$ TXoBpƿO~-M$q3K,K4+<+;3{7wÏ_<:%5?57]JMOyk]/ nvXh|Ik_?l<7z/̿ Znookikiuj1*- IXת( ( (?5ि $ռzuG4J_؂Jw@2gsk]1o;tsM|'|~/&X%𭯀5KwM:35qK{;X?߂?goP ]j]W~_+um[TY`$ָMg_&OS mW?d-Gƿ/Ik]A I"C=ƹi$Eҧ_)x5xgEʟ43: &G?.lb6La߂Aڀ>>~տG~ֿMCa&|)PdK4I5WsGp0+k((((~"~ĿWĝF]Ծ[xg5׉~귟[\]-Au!/wWMRm36PPmI3>GE|K'᫨/(I?%ձ1~ϰҬ4.MӬ-OK;+(PH(PU((((assets/images/vmsampleimages/category/power_outdoor_tool.jpg000066600000012776151374526160020643 0ustar00JFIF,,CC" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?(((((((((((((((((((((((((((((((Gٓ=χ4%Xm2Էu̶OʦmͅV ۨ?U?kL6zOۣY]|:;nɅ2 \e_D|~ tO_|t/v?bxOiv喯QFAjvgYkWwHꢊ ?Z_ρ_>21x C|Q [Sm>]{ɭ`f1F((((((((((?k(k:$ɤ|~.7(͎E[Hgmơ%iB)jh8mޏ?-Gk{=cJ~0TE2@=.՘Zh.Jpw|m6L1xuϤ|?|eL zKG_|X7썠kHw}.+MWZax%Ldv k JW37 j_gƛM[R毧|=,4XvDq1~vA|C{~/xYz|]sqdT8h;$9 6X_^-`ѩUܟH~m/33?e׎^p˜gyC5>V,-uԯB!-8NJ0rj'CW/m D⷏b>,x{u j(<ᨮXaΗ(֮B)4Io:/7ŏm%eơo i~0Vү&I)CGKGK4e9rOPJnQѴM?WjM/|V}<"2U*ԩa^*Q}^YT,77h 1|(<__nզfMfyRsJcVUgX wW_O|ya|[gmKxGNyx^'Վy&KQhV{aKR47YY g`7nKR7)堑벿N_4۟>/i9x+BO:D:=i\(3^Mw3^L^iƛ yj;xQt_ k4d5[*x!띌ԒNǞo1ż"^UWwm+s=IoB}8-?r덱Ν,rX^3ǵ:iu5heݒ쯊>4 gm7HuϊmKvY-ϛw=17B3|O 4شYAupBd‚$wf$ q:&]jm-(!7*Wdܦ?wO n[L3 h87X裣?`ۆy~Yf{8DBwSVmflˌ?OcƖʂCR>!)sjd7^(7C`g:WαRH~*;_xUֆ&5#k'{+וm[?d|18_1`iSUUZTaRi59h{z>_Y8Ό*z;  Ŷ zaϦ7}kFlH%d!Hx~p~վ4?=Q X4/My <ȐZ2'~|;|3gk–\~|賃_˹*}[~|_ng%%5Ν,I6-nTpJ)?rwSMɗd͗%mD6Y )yG'Mv&(M Vo'{6'G FQ7oRZ dHSp7^i֟>+!YNG*iMJUh2PT+y2,|(֝>f!#sܬ{Bnx}E}Q?% Y~xl ]Owi-ͭlo2[dc'̖4I!(S̎|+? EDh?'Nii?L=K {q"yS2ƁXB|Bn?▛Q_x uh<_+|<װt#_NDռFͿ߃uO _íFA`|7{ $'ʖmwrF6fg(扱9PI`d:^^g~ RUpENWvzk+%ɩ]=Lf/x dRuN4J2aGNIJ*]7F>%Ţ|5ioޗ:(rmͧoLꁖD|2|O=SU%b_nN%H<>Ii k{hz D#t0w.Tnsy slm,-fKK9OW>p`LwJet?\9&Yf# Kc Ni7PiA-*mUPE ~Nc -&s^Es{=0KA|-nχ9jmHS+"ٝ嘓ɮ*M(((((((((((((((((((((((((((((((((((((((((((((((((((((((assets/images/vmsampleimages/category/.htaccess000066600000000177151374526160015763 0ustar00 Order allow,deny Deny from all assets/images/vmsampleimages/category/jacket_classic7.jpg000066600000012014151374526160017711 0ustar00JFIFHHC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((" 5KeqN\>Gi Tyе1> 2ԯ#~vS;EiT'CVbկ@"m}?4N)ej'֪ܖ7:x)Hn\g@SC; ~W\9)-}/&g;ն}H^hA8xJ9\dE+M g@YIYIbRn{϶$~~ vg2t0:R-+tr>}bV$~#|XCھоw>SܱLKf:rC=c> q^{,T<|}R͹= cb9H9gÍRukT,"bFUS<2gk{a(1Xk\P q fm- 13!"2#4A$0CB)0G9K)SX(.UqAzM^SU 3]Qh8E.y}rc]?W%TR(\P@=A /\f fw"94 JlJ+2DJ w^&(("ˡiY`\evPv[%daVnG~hT廩چYfnޢZn;*Wx&ē v"s&yԊjo='nTpfEEY>xQMͻyI[朲iS>o|oTOzE%a[F{Bm0aҠIw jmLѳsl͸6ަ'~FteU;aȊwL D;Mgee-7M9{|Y~:a(#s'x>nkQPl)tKȩ[0j)q/L ~#L`b2ɗKN=Q}x&RF?I1XBw| -SqQ9~PW.]h T?2l$B$b,-cqzǛ 9biZׅM*n4}4tܶ0nY,qMdrEEjuT,lX2i]ZV&7]ZjfdwRdu(-(^5.b?%Ivm2_8D<.gaWg '㺼G2vN/DƑXRhcΟr*ڣl7ȹXk_TQ/åmSG^R8VE:@c*>u1jBzY,:2"f}=Aiu`2`RMs\^4ў0W>U͍ l&gQVf,T83 6wἦ*1/^k7]D"u Τ"C{B^'ILahv~ X>~44ߴSisIs.9IB +#DMAEKm ]C񟺻 VfV Vt7aӀɴ\&&~,6kg['+CI8f5 ׅ0\ Bv^p.p+^76<эv[ 1||PM{Z\ܻhmr7G@/n:YBhkr(!1 AQaq0?!¯h.3iD61_{ba@Az?r˖H@4Tx7Fp9Uʛt 8ơY^\]Yyz6Ƞ: KD=Bat |%4SМV]˔͛Gx@%%APؖFn ) @iQ y8kWצ0&5lfY.ZغԻyӯ*TBT:?f]hǿ9Bk5 Lq$ p(uC: t@}0[YE{\qm3%OaRC1&B+[oQj>)7S򉻭#1nڂ.OLR=<~ر2PRETJ(I4`I݂ysj&5˕X}~~w%}HHQaF1QR_`;N-*~WPcFѿfm4ng1.ZEa`ilupW(kTA%fD~y=@'Èr\ URŧyiQd9=c~%6\gƟHv!̅ut2GQ oR}8C@'XC!OGUy47@ .ހ=/G7ꚦWⴾ H|qx{&%E,#hg :y!#X, a{y}v3xUӂָːxb -z_ @ CPx[b{o?N]݂k܏N~s~SuI})]~i{5+멙OPoĠJaY'>i`z? ,J0<0@$qO<l=ٲͅ{C'KlVvwIth\ (5`v!S݇Գ碌8(u50'Rtw+uP=15s|jxtJ[8v\\V?J8ҫǐr,8Vڠ{fp6xN>p_ ?A#Qa^sueK egCu*Ž) ['Ru3h+F>M")pOQW0 5W{Y. wqIt*6f30oM)xkҼо fi?ta|A6>'&;ks3:wUxb`~%z {#: vq.)$!0Kw2|2tv2B#6gMsJ3N&hLf*d\]KOd_<b5` 45mo 0݃l3I At}0:EwϤ.Cwf!\9GRwH~EC)\MK!- Oq&6Jx*ʕw}Gr{Tˤhb%1vWA ּ ~̾ lcQ\BXOlhtQzPcW)U&A}ߢ1qa}W*!PD#hXZJ>F\!gyQ `3(RC$hYw16J$̊ܥnٔsڢhL)2h`assets/images/vmsampleimages/category/student_hat_16.jpg000066600000006264151374526160017522 0ustar00JFIFHHC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((" Mӡ9mUsukRdnι .7}v1֢1yOu$ᴕoܧ%8.t{-kz_Xü4x thhh]eJowF< niqAF\%ueY7r=%^RL%ǩ B,U8F'dDV>DEf9>:,h5wvB"~2uC{EE2'uommE]=?U㱱ƟLhtc*BOp?p?3!"01Qq#2a A3`b$@R?5+{@pU:+O%Yy zpZjwV7W ᵭVebUX*Rey,UwT=Wr7R3FV\c %uċ +0ԫ,c{lUf+ᢔnv:U~&w伧?ÚexG" {Rb)ɍ^J*W Lq1!C E5I0K͊d%z/y0b5]]b6PrcٶlV_`;]L3ID2!9`^@(K <<<<<<8D<<1aM< Q<,#$c< <,0$<<,<<<<<<<<p?p?(!1AQq0a `?#ݨ}nSe<̻S} ܾS_.c-K : ( 6Ot>qZXjPa _ZTJ83 0;",qNUfQw̵,XB]?XŝMYl&p)i`g,:f=~ BhoUZ}ʁU -}O,gڽ=xzGs4d U( 颾X=4>-rʡm Vv&,FVO8"R=S쀼)ʲwсqΙߛBm 9 ,{M-d"JKJX|KωU!FDUXzJ+чO$aH'k=mmց}xzcb%ۻ@ؠi:#:eK4QUu ҃WҮ rMDҖբX8%f7M+3H}XE̡ z&`82UrǠ\lk,f!8#B9gU>f;|O]4L$*\ZI0DkL{<WD1q `b10k Nݧr~Kk}]?0yM#TČZU/Ɲ ե>FF7i.I6D "?3ݧ53wd$!( dc,?4k<9_]~v 2);}!*q}7&hjz$>=?) !01@#$2Bj.AZc*$=?rߌƘx1.L!~鴵Jc;!1, :~+[G|`=_WSar^m$ɟ9~9 KM*Z2LIQC{^q-7i=S7RBťZk^CQ\X+؟=vQ黱(8v )U%dæqqZw2Mb9$u(O+x'gH8٨78,|pF>Fg.UT ,[޴x|F@8sLtJqp³ %'O؉Cad]ܠݥ+6;SkĂS7[YW1$p9Ti*4OMNXUFiAf@k%jcj\dwz/\V :b 4qTxEBcރ8]5C "t CKԖD6ͫH azp?p?1!1 "02AQ#@aBRbq3C?Iti 2`IϺzSхS"\fby}̳K3f%cYS2c;V4 e dO ;<_Ea,McпݕQ嫤fI-zC(}r[A$R%'e2 MfYfvc 4DPe(h#MYT񋹢)CA P!g40RN!fݸu9I={'psASB I36yG|VqMz_G%s ]=Tt 890t5VhinK?ҵDas&<ф4[\3hUp)(QpQ4/qE;_h3CnK1hPtRպBI]phs~ƸKSt/ܿ nL$ OxX )B˜X}DP(.V?&!1AQaq 0@?!+{'*>` P|+5^̺sً@*3RoybCMh`#<4JoWoᆧ~1Z~ L5De-@#ƃQk,}Ug Qcˬ^+8,EXcU FAbݒOUUpL<3-c()YmYcu4,ӐhrB`xeՔ1c"Ŏ kc`YwU1c:1q;>ҵUtϘF1c1RFe D;1gMy.⎙q*iR}gUJ3К"ŏcHt7 }4oc \VU1*zc/5s3Qg8OF`"j1<~%SBؕ^Rml&z\IFE%G{('d-s1d"o. h <҈<<,4<(L<,# < < <<8(sO<4!G8!H̤(;|>|_t1.xw cz_W B[סSUu oBSx; 9դ0ri&B?S-U[HճVQLU:5`o)3(]hE`𕠶V`3( ٙCf#XxbXYm^]^ peڸx 覌O@=+Y³H="׺eLmr~pXcOvRG(₮D0:^ɯՙǵC"=љJ$)tt*|IBp=]W td쟔( }/assets/images/vmsampleimages/category/hand_tools.jpg000066600000003612151374526160017016 0ustar00JFIF>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222w" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( (W<|a{x2@| 8kм߆ uQ_?|M孆|,ܶђn2xӉm2ГaBOPZ(((h((>Q|[ap$b$ees־~-?tO]KO=gq^W}뗏ⷎ-,TgMD$c_ǃAJV08 *۹]):=z$׀ k007|4Y$zǃž Y `c .td9n!;?ko/$<'sgCh=FFxbFI53Űq\M"WMᢹJmNo + jZp+mN5=Q?xZKKnk(KE{c8*x5Mb_?ZWXk+Yi.1(\gO'|[,|s 7}e:K#UGm"Oe @hw?y+]Ѵfgy}_IE^"e{w۞ڰs|bg)BMK}'_*56K]TQy~558^('jO_-pE9;t'˅/c//i3Z%Iwl]^`67Tv5Eco w!Ӿ$|G? 𷈵AWO[|Ǧ UoU>-5;ZLͧ4z syL[\tiaNUS.)Vq9ZQtk'VOB,߲oX\|5dz"=h4? xv+ K,m;8=Ķd&+ل\`# ,n#W(((((+ <|A~ǟ>I=[jq꺧u+Xc*?N2#<$+ħ|idv^Ԁ+hVtkx3rN 󬡯aӺsJSkn)?&}VYqKg)&'Vϕujœ}Rmy+kw׀5ςTNL ?v+CB jlE lD~(7ꝘQEQEQEQEQEWs?[[j,m^[;MAf昀O+N8Z08l_-+ѭ S\d;r8|.Zg {P]٤y ^U>"ּ7ivm>+Etg+W-Az5Up8JX=8RJݖF7[0-*JSKM--QErQ@Q@Q@Q@Q@Q@Q@assets/images/vmsampleimages/index.html000066600000000057151374526160014342 0ustar00 assets/images/vmsampleimages/payment/systempay.jpg000066600000023317151374526160016566 0ustar00JFIF`` XICC_PROFILE HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)KmExifMM*JR(iZ%d%dȠ8C      C  8" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?'=x7~jbcbガ˖@z XߵT މvھ 2ʍB.0Wɟj+ Z ]2Hc"^Tc+r>5g0 AƥDo'ƺ1>2ֿ1 xfYU1 mG2Xȯ zY2ŽM s#װ)kπ-˩_'F~M>T?Ds`8V8'&pե]:CG/SPII^?'R+K_(!`:@\Bwc=$j -ƞ=|;Լ<.UnX;Uœ'(aWJ''dWkG[E,R* ah(h0= `zhŢo.-RXg@7mŢќ0@1yyz|H KMvaRI?wės+H'V; ~!.M<E? F>ZF>3ßVec+k3+2c3SIY{n}Gh~7;XտEΏ=:0( *g,8瓟owK}Cvb5 I'Una[?࡚ [Mڥqy 3 M "ITak#pYAܬygk)PeM^rrm&7\KWTTn1vIhW7VrF1qIǽSfI mrpA {GWŝ _UxGTWbRpry|r6E}F$1J<[F!psW:%;4~$'"w^*Q%iZ mKH2#t  O 5˨=,S;^OԬt:XX˼y88\c5taK8&IY_]NjY(#R#rM4kǟoP֞M-cy$@2Rp2ךߴMo[y%OS3A% S5yI[uۆr\LW7_PO'!l&xc3ia1e^7ЦM'N'(Ӻ]#( ^Y|E'Fҧ[V՜i&i⏌'~>giZ!v\<`Ҋ?_/p kQa;$qE|{؅|OG\ 8J+tR~;if<7nYFvQsHDgwU!nu xJCAwf CPGPG G",l/'gNQŭKCy eNnFF?>NJ :5)C{5z|2G,-NzE6-ldo _i+Lzu,DWGC~~_ umw7;IQʭ"E X rЬPTFBe 4Vsk$C xk>Jg|߇\CS5CҔ9C^'n~<`uۘ#[!ܶN3XI><%8ђFy`SS__ 혼BQ? iE,m#.OS_ 7M_Owݻ2ʘʔ˕PN۶˲H}ee5I,Dqu#^9iIs<~'M6噤y5J 1\|]\+nsas_B襁_WmLuE s,;nw {=W!kP'xR= %ޛ?F}@|{Ko^ 5uek=&K@(X;=11Sz7s,VSXzײ[ZUFOl./uE}JO>IÒX1#oѬ? xz.;O 2AɯOŰ\ik IwC$nVd8P[z}֟sZEuSm [<*aĖ1] N:Iݽ;dSx&I^ٴo~u[iͼ 3G0 i_<弚&y\y71T ~/aύ4Im`.CDswMCzu=/L,.;)NԴkdYp?G"&{h|K~Is `z/=twıhz4ym`{Kerw` ]![~5|eyc_s_]SܘhCFA`Ak۞upF<ݻ>;)̣ NuyezŻ= '9+#Z1iڱƠm jGBog@axƚ߅"֠~x <׻ Bct&XV@$ä8,) σ㇃|<ڴ)LY] (R n޸^^0a*t[>b)Ew٤C?~o=#SMuytu 㵳9 m~`z_?~:пlψ~_n]QnY0=:_.W'GS_ND|.čg×^׈eZ;)Voo(9w~G]'[Ew/Lw.˷z K[U^ֻ{sX5<;s5R@ׇ'Yi,1X@ă "U((IɽY*j8-u2HE"@֊)[I&;6)V/db=Yd>Е,}jc Lz,($vQ]o08n{]!]: -5?QWz=:eCapD UQɢ{q(aEP/#DWvtK[;{ᜑ]?)QE8gQsEx^9xDԡ4-?Au[/ c#G)¬{T;zƓdΙA<1HlcXAW]4Q^s*5| YJ;^CWX'CO]m5;},bH٬/$q$18l<t.> x+mJ=>k .öTxثm a *>KjCX]zeO̺5Tk5{y-Г i?Tf%P[I'h߆|Kxjz},w2U@#8% **bN{S0qz5m} ~WMi}La}{bwqmb?|]Z{? @,/Kf+)fD T89(OV2Vo]5<8Tͻ~,ξ#׉5j6viwupY5;%0فN; ~ >+]O jɯXjƩ6)X-eI" ϽՔ1)U&ȇa\iݯп| 7.:~sF"}Թ#I%VvO֫io_36Ĺ]ȗfjCW0X,[§?1j( N6ՏwJ&;zBIrO._z̯"q`3-`&5I1e~roi}[a4@4{D]' S_ Sk7W]&*qi ?uK*X2~Fwv acƼi"5hr_c9q a,y1#%+ G_wK95q8qm+hH4rS2Ȱ=7#T첼<;lu$1cq:<&lDaYcMt01ܮk.nu0P#O,sYgo-z^1δSH1&I$5P>ُxqa1p~9JP`~Q$}5hwЏ]#F$ꥯu g/xoč U/ ;@O.1 ֗1\ #՟v<%. __ ~CGU>`3CNEw9 >cHV~yIuUX纊Xfղ7~ջgVϧj437 md5gNӱǷsC=nȥvC"'iDUhFn.4bX?\o4bӕvױLo/ĸEUa.se,/E=C 3mg@ Q:M2!ğ)14~[sj5@h2NՕX?7U9A߼Q1@ V :k'`#80Z!6/%CYrk6+K$}OًY#kZ9Q7֢  t ZG=QOғw$lߢԾjI%?M$eI%?M$eI%?M$eI%?M$eI%?M(W$?I|ؒJPhotoshop 3.08BIM8BIM%\/{gdպ8BIM++8BIM&?8BIM x8BIM8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM 8BIM08BIM-8BIM@@8BIM8BIMnullbaseNameTEXT UtilisateurboundsObjcRct1Top longLeftlongBtomlong1RghtlongdslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlong1RghtlongdurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM d1,9lJFIFHH Adobe_CMAdobed            1d"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?\:SѪ|sZU/@sr}T~R^۬mͰx}<4=kAh=&ݹV121|^b9̑Ǣk;.:~sF"}Թ#I%VvO֫io_36Ĺ]ȗfjCW0X,[§?1j( N6ՏwJ&;zBIrO._z̯"q`3-`&5I1e~roi}[a4@4{D]' S_ Sk7W]&*qi ?uK*X2~Fwv acƼi"5hr_c9q a,y1#%+ G_wK95q8qm+hH4rS2Ȱ=7#T첼<;lu$1cq:<&lDaYcMt01ܮk.nu0P#O,sYgo-z^1δSH1&I$5P>ُxqa1p~9JP`~Q$}5hwЏ]#F$ꥯu g/xoč U/ ;@O.1 ֗1\ #՟v<%. __ ~CGU>`3CNEw9 >cHV~yIuUX纊Xfղ7~ջgVϧj437 md5gNӱǷsC=nȥvC"'iDUhFn.4bX?\o4bӕvױLo/ĸEUa.se,/E=C 3mg@ Q:M2!ğ)14~[sj5@h2NՕX?7U9A߼Q1@ V :k'`#80Z!6/%CYrk6+K$}OًY#kZ9Q7֢  t ZG=QOғw$lߢԾjI%?M$eI%?M$eI%?M$eI%?M$eI%?M(W$?I|ؒJ8BIM!UAdobe PhotoshopAdobe Photoshop CS48BIMmoptdTargetSettings MttCObjc NativeQuadBl longGrn longRd longOptmboolQltylongd blurAmountdoubembedICCProfilebool fileFormatenum FileFormatJPEG noMatteColorbool progressivebool zonedQualityObjc ZonedInfo channelIDlong emphasizeTextboolemphasizeVectorsboolfloorlong8BIM-msetnullVersionlong8BIMms4w8BIMmaniIRFR8BIMAnDsnullAFStlongFrInVlLsObjcnullFrIDlong!3FrDllongFStsVlLsObjcnullFsIDlongAFrmlongFsFrVlLslong!3LCntlong8BIMRoll8BIMmfri8BIM0http://ns.adobe.com/xap/1.0/ XICC_PROFILE HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)KmAdobed@1d      u!"1A2# QBa$3Rqb%C&4r 5'S6DTsEF7Gc(UVWdte)8fu*9:HIJXYZghijvwxyzm!1"AQ2aqB#Rb3 $Cr4%ScD&5T6Ed' sFtUeuV7)(GWf8vgwHXhx9IYiy*:JZjz ?ﶻYgp ݛ(R*rSMj%Uw֢Ií%.=};w&m3&x%0Mys,*VK{[u#f[|Hㄉ5v#U3nsUOOStּ귭pLjIY:aڵAwlpUE4z$~z*(`nڳ,OyFk0qj Tkoe3sp o9m0=LjP/Sδ꺠еlٰOa""i'Y\U,Nb NV6}`۶ͮZֆUXєYMX`#D2GL3/wfjo\y.+(d(i֔\ fӬe2ɲVV7;:vdu,emLi#%dqcZ{#5m:>Ρ樠C$*rI&#5m: ag7%&^9\Q#E2C*Z$zs2Ѿ;o<7&YȎDdIL0 æ"L~` %5BouYأnyoռ4׿-><Lշ?zg?~[Gj ?uhw˾Sd6jmR3{k$2=-F>v#PMH] Oo( $m,XJjO=ѢHI -*d`hLh7B2sI?}zVV?o~jo]'}>|)qп?>=mA6b7/>=Y(Q)TM&O$ UEz /MSAVhIX)j?k7 y.vctkf>~JZ HEAnڵ[l쟐5;sKCCOA'xY\o!-,"Z)#)jy-6$q>qy?lwc{{]22|=bV-VBƥlDO6K3]_EX]OKtF(z\QDj+)i9SQ,$Uۭa zyGty夑FBAJ7?iB[Ջ<$X:vi:Rg7;_))Zr[rhdH yJx#77sac2C)2.VGuDǴ;nq ;"rZ_8_*Y6'\${/iqXm\Jul5~A[fX{A%2sB^鷸PM%X1]D6T P}r-Yr)UͬzK $PASF&"Cr잰:NN&Ӣs#K'[m=nڪ9\C<Ӆ$SU"Sz$hP]q 7mϸFHU0|Tעmv˙".Eڞ92+"h4N"p^.& Vޱ=mq58Dz-׵UT4uE>xD r~bmFD;!uzGH#YFDk+P-[rMzڷ9mcq:4zY%2)V%H$ ݊/wO:t_ֵ=_WOUw^6QsϏщ&ZLs*1\58wY/MLz?fƧ]>B]MvcUչ$z\d20IE̚X%W%QM97ӓߛ;O\(nV-qTVDvV!N A*Y^xކ~gᒾm_xbM]5TR=^.UDAW枞)F "H JҾ`P*= =ӽ7{{7[zR)3U %>ءC/̕C -liYi#.llun`愂v[XH࢛FD(TIJ -wVl3K?y|GJYL\&[7*2؜ Td*\e@g3ƳEnkض}6dڮna T+Du[Ooq J0R7"jQсWC13GǽU4&߆%hřf) Qu5"H{}uK{-=ù\Z97Ι,ںۢ4w[BVY:lbVqub;f`& H f 5Md@k,< B l-#ۭX5ƀ*"*U@@O #wGwoz[v%bis;73Ƀ_]i4cZ⮪aQ ,5|q]Ɨ2-#Hc1~#a CݒM/9J#Ye $ 5p4UA'C;WǨ+l ~4 IPQ-[]6Јe2uB0K&z@knvۭ6m+(( rH]DZ$zssf.7+`V,KZ |"()T򛏣Ol;OvMݷjCxb7&[_hK>PQd~4*wX0katC0 eW53O*-po}=-~K+M?RZtbuu|]. 6Ya6)ۓÝF̵8((+cgMPc mn) wlhxs_ (tPԜmٶ.#hZ<ıs[b+u8.M(t29[jͱAڻ+uMÛT7wmMWN753(+2eG Сyn}kH{eC YRvs",k6vFMrSg*/JXO=Awno֘7=Y-MV:TB^3w2RX7nmvLZ>f9&DWy[xEɗԛSucTb&%|E#7F#P-2jGj?б_O}OUYEp1ufOcU\hcTxy*'C#).zv+T"@B~Rx>|:nvnʉ!,N0zO&z;oZWv͋E[K#]C#]W$P,5G7K,OIO, RJbGX[pܬf *jI'T}'(o2/%[JPTv( H_F;J+Yjsc/.{'y %u&-UZhLʆ:oz=n0m̞+JBh* Ijh_6ϻܻka_ ,,O8*Uq CR3gY-uS' SV@%7*b|?&ͻnv>H $r*eIZI4497U[3.ʲUt,g?}z;.ymi95t[s;̑K%U),VUӴr3oIX-X F]zvnm,m7NݛqSUHT%zk I{hik5GC/}?[pYcWkD%F2SIٮV.:elܞNtnstnkzzJ$;(2[{%5<8䆖4lؓVv}D!XmLRb>&@J}{g2]n3ƬGp\EXđz( z"gm:u&y*w6E'J_$`%*/d![ry̜l<"x:'svID(J;p̛;n<+8<Q(@bZT ԅ9%E3d >Dz6l_< 쑤c*yiB2rF}g;.:ŷK$3z@ԀN4 G\߹c~gNYa!I6OxZ6IhUnrqɂT~&::j:$E^t._ОPiJiE l޶b=}&msba*gSI4~rw D נO0_.x>'|zyoxC@~UF?”kJg1Yu[\v94*zh'E-dUV[9S7^b彰;.%GSdx׵9b)2Xu)U >݋/žҕ[+iƕ hl2>Α?%ϡ${p{Pmsn]v2^ԎnAqZڹac] pMKTjhffx&C MJU gH Ozqe(05T}GL 6%8ج6׵8yX4\\TeeKel7vn*v銟JPΔK^O?Ms33k>@u,1.~ m 0ă(󕅼I $*(v@:Nҳw\&Ϥgc|zUTWWJکަV-,aY٘'}SNXJsÊtⷕKlޥA?upCVcm[6doM@u_DxFOh vm<)`0ͥŤQȱOY<J u8{K,yy휣76IE aJkKbSs* E$AxT(Hҿe:/h?t>:k;uy<vٟeP<_%?܏JmO.ᮏʝ I{u{{^׺u{{^׺u o {?assets/images/vmsampleimages/payment/.htaccess000066600000000177151374526160015623 0ustar00 Order allow,deny Deny from all assets/images/vm_pblogo.png000066600000017235151374526160012033 0ustar00PNG  IHDR~"omdIDATx[TTWl5@[b,16T@z`h0C/{C#475v~Ht5Qog9̻}o~_ $мy@ޝZ9$/=Bv%5˺5]STSsi_K)IƔn#'W +|lC5gxg9}J6l$n|^=ߐH$zsώ+UnVۓsDw߮Kc={vl ts_|~Kj7dʰ.,7נ{sz"uue79 X*CRv!Q8B" %3C=!a?|ڞ_ڤc^ellesz"I$Z3L(ñ-{Wo|wt]."%$A$.L nnnOWXELΒ^xJ.߅(N]\ C4;cէ.ȲƤŇ y\pi6|}fM}ۃg0/e>q~521ݥx]9=&&_3ͮKei(=y|} 8uւ!?II {^ WB`eθ/t52)m*Jr}] M[M{NKWĴ_O.@v޸pNvc m#8} 5 W LC4QFƃ^^60~wu=2bWTi 3#Ԭu_)F?r7GAaG"Chn}'װ@+Lu"^ =H& q1nlXẒTѼHp}C9GEvYe!s\x!طcE*(鉰\ pTQsMmXc"E$njgMAoe=oI鯤ւ_N;6UgMicB7gpɵ L-f X) {vC{ N#Lc]oו[DtRvU00"۸̅ƾ(]6X]S /A3#;d蕕BfqŒa5#\SyjL鍕Bl,7҉ĵ 0ţ)T߇-WgݗUrsQ\\zTWa͓!l19:w( -XI: DXIuFE8F1ǂ3f}sB3̃YLr- +dl f 2<3+;\&kk3ϯ O?dꗗj\Rգ4Y(pHhZ D:=/,*u=D?:w}nφ7cxU~}}{^'VـƃWO2+mNbwA1jLƙi%=[ + :Xt*tUL}#-sms*7 Vr >|[+Zx\yM8 Ld`l>2axxh8\Rl iE(/+CQ]U TUWJKMMDM%/ob5b"B@Ĺ[qXh(wVܓl( H r2.\,K Xjt*bt)$ai2uP '-K$Xf*gѷo$pM +Ku"[2'Jm䤬6P0]b*\du_-2hPI(}] 4/}N|ŝ{s^b[Nj)R&HF@\a(tn;GOmH*&$ ? xm_-s1.I~p-[6u J^ ;7b_d\"q-`hh}8s jkkQSCZu j2zQq1 [yy%74 =587@$8`B b" 5%Xj籝G^*' 5tOJ||L/ZyVĘҁ,҉CR#RVXJXqGE祤abH׳H7̐GH'BMY; k/ZfK>5閪s" K 7Ss;q &Zz\px{Fi%-JGN{e.ښ׭5--E^ ^¶>SWf|$nJhwmMFg-x"ozu?km"@'.lOq|j: l vk?t֭[~̙38z(7!TTV+:s7ۘ$9> Xѕ d̄ʏX F5uY]y'P@4[+Ȍ*,;X Pv-<\;c aQ1u ~6t_@gG;z02-vI($j [11eAƶ<ѣJedihaP}Dӻ|˹?I$KW>EPvRYP$-r,L'zNk-0pr*Niu$\}!Bvjjf_cQ7İ1f N,YkCB&p, g-a$SGjK\|16!G(i~3~$+ip-Q&_XZwo ~u;֟^jufZoRJ 0qmj%};LڼҶ D]y-OXSHOGӀ˘2eeBC@gC& TH: H;qmvv?ٻ1_r.S]X΂mG;]'7/(vNg(|c;$p.BqA=01T,0{zvvIy)VAI9_)CY++D=\kG:u.o`!YMuTO%2gX(R%?}#i QpzþJ]^GL?QZc}cRm=|,nR y4Yr5~Gw^HUu=G[[ۏ,M+&Lpk:>p!3UA [wkɟ`F]ݠYk`ڲo˸&H_RP\r_BQ-"Ws?_J78DX$C" k",gH@`7[xOqcxz>)HpP#3h9po8xGLY[%"8`YL e]3Cr"-Uvql1-hA,KI=a(eZ  P9; #{6,{q=~+AwbZFh1xW+=nDPZl^,Ϳ>=xP[8Ĵ30 7߼DmژSo`]P\h#|}GWO5ߠݮeҨEx912]I{niStI>X~{v{9Gg6SmSu#&X!wwHt21h߮5LKx.܅_`Nl ά#՜262b;T>omtOϊHYmԮAyYoae.=chzQڿo\ѻIQszH:;_]~Gֳ<+ռv>= V~k2;RIcM?^%@2y!ٓxy 9$ުf<4N4YQVz%/7i(+-?2,CN#f_~N=Ǒ,ڳSeu;B0jKĔN%mwHO~S)a]<|Gζ ϝq|ZWJRkPkxOpx9o>F|˦zta|ynn\.wEdx#ָv&3/ax8;=8֔ U9|O?Jx@c,D"ㅌ =z{bB_]B(흵 {P=o+SaCW lI `X:}Ċ_,ڇ˄zF6gNrUmm @Ft SZG{5ɍ㰬Ţi6V"w'\̶Nrup0u`[q`!nNe ̺%N8{>,,p|Amr2?o3k $e06^Xm}<qpw ⺹DdO+FN! ,t#=oW(8:17Ǻ9EᅅturD􁵹Yn:4Tp`Y!ʬq@!>7@s@&| ث"X؈Jx8\W߻˝l)U~GxJkwgY[`r]l@FVK ,V\2c]Ō556Ͷ1d>'ebhڜ!675"kCۆʴ2ϷeZj8[jkhlسYdx}Jz2LW2-|l6p01J^J4HּdJ7湚 FMbmf@=z /$j;: Ԝq!2,#s`GIՓ/z::Kh% p|]cnn7n>1x1cmemxm@2|< }#((h%K&LvfX RSS?຅zQf:ߢl|hEO?m#&*">a=NML3LJdEIENDB`assets/images/jtransform/textarea/textarea_br.gif000066600000000165151374526160016324 0ustar00GIF89a!,"0Ʉ&U͙*X~q/\`;assets/images/jtransform/textarea/textarea_tl.gif000066600000000276151374526160016343 0ustar00GIF89a!,;y%]!y |QTL C!P&E" >0,"ˢR X"]% B;assets/images/jtransform/textarea/textarea_ml.gif000066600000000253151374526160016327 0ustar00GIF89a!,(`D%G% H"Y- . Order allow,deny Deny from all assets/images/jtransform/textarea/notneeded/textarea-ml.gif000066600000000104151374526160020205 0ustar00GIF89a!, bN'H;assets/images/jtransform/textarea/notneeded/textarea-tl-focus.gif000066600000000230151374526160021331 0ustar00GIF89a!,`d$ТH@ 0A ;assets/images/jtransform/textarea/notneeded/textarea-tl.gif000066600000000144151374526160020220 0ustar00GIF89a!,0 @P!3` Q ;assets/images/jtransform/textarea/notneeded/textarea-tm-focus.gif000066600000000145151374526160021337 0ustar00GIF89a!,HBI]q1!`@;assets/images/jtransform/textarea/textarea-mm-hover.gif000066600000000065151374526160017370 0ustar00GIF89a!, U@3Z;assets/images/jtransform/textarea/.htaccess000066600000000177151374526160015136 0ustar00 Order allow,deny Deny from all assets/images/jtransform/textarea/textarea_tm.gif000066600000000261151374526160016336 0ustar00GIF89a!,.`%WYFh44M&$b/3RS@d8TQxPBX!;assets/images/jtransform/textarea/textarea_tr.gif000066600000000274151374526160016347 0ustar00GIF89aҪ!,9%zfz^%G͏EM\t֤W˞M۸sͻ Na+7{̠ڱ>}v!@"ӷF˟OϿ(h& 6 >Hy`W ($h(,(Ƞ%`@b'#.)DiH&$L6P:Bbx#@^YR`)di1I8(d)tix)&Y`|]霠zj衈&`;2X㕢9%l2馜v駠yi}fih꫰*a {j{J+ĺy⮤gNF+Qr#ɫ[V+kn\.-5i%k;&/Eb' CWlkeLrl(:@<)l8HQ*ZDmd|ƶ GWm$1 ]cmh1o tMR0싅]nI:n G._6ijg#gyۚS.q}\y~,wnڥ= yo|SʓG/Wogw/o觯/o篿!;assets/images/jtransform/input/input_text_left.gif000066600000006324151374526160016566 0ustar00GIF89a]ꨨ!,]Gdihlp,tmx|pH,Ȥrl:O"@ZجvzxL.zn|N~TS ɸе H%L4j #.WC]hݢGAqdȐKRȔ/?4%͛8sϟ@{JhѠA"jӧPJJիXjʵׯ`Êm,SfyRL.ٲ;7.ݷ/ w%4LÈ+^̸ǐ#KL˘3k̹ϠCMZ1 J^ͺװc˞M۸s|z Nȓ+_μrͣKNسk~9ËOѽ_Ͼ׮~Ͽ@߀h&*F(Hf.W_ ($؇&, .(4ȝ6)DF&LֈdPF)IXf~Vn`I_`ihۓjpZfti@͉|f~*W&`&B~`裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸 +k&6F+Vkfv+kk @+on;o;{0 7G,Wlgw ,k(,0,438s{p 3כosHPG-TWmXg\w`-dmhlp-tmxhnc xnxG.WNSno.褃n験뭻n/w'7G/o_^yosOyk7L0߾ρ?><:Ё 'HA= +z GH(L W0a5H 4ؿp۟ Ѐw n/EV5.z` H2hL6pH:eȁ=ⱆMBяL"F:򑐌$'IJZrb&2}]dCML*WV򕰌fIZ򖵌.]1abL2f:SДc/Jbb̦6nzɴ&#F-S8D'8v1izOh$g)}^S @JЂsb 51hb?JъZ(2L.TDђ(MJ8rqD[K\t8ͩNwE5eP'&OԦ:ISS{l0 ծz` +JIQ!*jKp\I'j`d\׾^kZiTKBtdd+-YdIIW d7zVe>+ǑMjW{H7$bΫ>&kwJִ m)_@ꖎhlcs:k";?>Wuݮf"eeA`brz^RQZ6ͯ~NRa;_b寂`LnxV\n7nf<zMWӚI @8αw@L"HN&;PL*[Xβ.{`ǜ0`hN6pL:xγ>πMBЈNF;ѐ'f< (7N{ӠGMRԨNWVհgMZָεw^Mb f;ЎMj[ζn{MrNvMz o}7-p; Ox~pS7g yGc(7Q0gN8Ϲw[\@ЇNHO?9.S GxoxNhOpNxϻOO7~?W>Ǽ7{GOқO=+yOPz؟vǽwO7^mG>Ov^g/{Ͼ{ǿytO?<~8(yGyeg}w8Xv|dy8vg$X&x(*~'{w +X6x8:yǁ~ǷDXFxHH!8xKhv@8zMX|ٕVxXgS8y'͗lϧ~YxhjS8"vׄSlz|Xf}pwnr\}hx؈Xxg8xX{7X(Xxq׉}8XG38gѣ $:AMJ괁ӪWJj׭ZBXeϪ]K۷pʝKݷtݛW޿ LÈ+^̸ǐL˘3k̹V,ylTO5بrD() ֽoܹ;8pƍ.|rđCNسk߮<ӫ_Ͼ˟OϿ|uÍwx%`a݃E` L1@ a#(`!,0(4h8<@)D9(@F  442)Xf\v`)dfiegv"p)%)gx|矀j衅w!.j饘f馜vh dW0 ꪬ꫰*fpbR9+ 뮾]6>fsbǬkfvfv:̖kcަ뮰N{f7mA襾lrK6G, W(v"xN:$lɲRdr%I0l8笳/u= s=h;'L7/iTWmXXtؑJCk} Mvh*5ǜxwvxk,-m'N4Aak8=gʬْ_ҝ٠o#c7z;ʷ;#9B 7%b޾7"}SW[g)'Svԏo=s쯛01/㇣^V)6 r ^.g0~YU^k{>͋ ~si`ne|P PS !;assets/images/jtransform/input/.htaccess000066600000000177151374526160014460 0ustar00 Order allow,deny Deny from all assets/images/jtransform/input/index.html000066600000000000151374526160014640 0ustar00assets/images/jtransform/input/input_right-hover.gif000066600000000354151374526160017023 0ustar00GIF89aӿ!,i`AX#QC;nV)6 r^g0~"YU^k{>͋~si`ne|PPS !;assets/images/jtransform/input/input_left-focus.gif000066600000002571151374526160016637 0ustar00GIF89a!,u0Mihz: ۪¦3]u׶pHю$T:hIZجvzyҰxL.zn7v2Pwu.  ̿ռ  Hߺ,HOC #JHË3jȱǏ CBHɓ(S\ɲ˗/E:I͆g/@>G38gѣ$`€MJtӪWJj׭ZBXeϪ]K۷pʝKݷtݛW޿ LÈ+^̸ǐL˘3k̹V,ylTO5بr-@PPֽoܹ;8pƍ.|rđCNسk߮<ӫ_Ͼ˟OϿ|uÍwx%`a݃E` L P@ a#(`!,0(4h8<@)D9(h@F 442)Xf\v`)dfiegvV0p)%)gx|矀Zj衅Jw!.j饘f馜vh dW0 ꪬ꫰*fpbR9+ 뮾]6>fsbǬkfvfvZ̖kcަ뮰N{f7mA襾lrhK6G, W(v"xN:$lɲRdr%I0l8笳/u= s=h;'L7/iTWmXXtؑJCk} Mvh*5,ǜxwvxk,-m'N4Aak8=gʬْ_ҝ٠o#c7z;ʷ;#9> 7%b޾7"}SW[g)'Svԏo=s쯛01/㇣^NQSdKwؽk;ukxWOs'   Ǹβļӹո׽ٶ߳* H  (\Ȑ#\81 2ja CqI%OIL2$˖^K7qƬi'2U=9dѕ#}"yҙͦ! J*K,B;assets/images/jtransform/select_right.gif000066600000000474151374526160014666 0ustar00GIF89a\\\!, di"l1DmxǁL&3I)Slh2QT/E o|)&0/ ~0 BA EEIHE{,**EE ŸEʸͧ+!;assets/images/jtransform/select_left.gif000066600000002675151374526160014510 0ustar00GIF89a!,dihlp,tmx|pH,ȤrltJZجvzxL.zn|N~N~ǭ~ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXʵׯ`ÊKٳhӪ]vpʝKݻx˷߿ LÈ+^̸ǐ#KL˘3kN'ϠCMӨS^ͺװc˞M۸sͻ No!УKNسkνËOӫ_Ͼ˟OϿ(h&`~HF(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dif;lp)tixg~矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨ^g꫰*무j뭸뮼+k&6F+Vkfv+k覫n~+k,l' 7G,Wlnw ,$l(,G0,4l8<@-DmH'L7PG-TWmXgu~L`-dmhlp-tmx|߀.n7G.Wngw砇.褗n騧ꬷ.n{߮/o'|~ IBL"H>;assets/images/jtransform/btn_right.gif000066600000000655151374526160014173 0ustar00GIF89a c㧧!, cPd) , M . ȤRX:NeAZvq9 ,-p@b'~} )6*E: EQJH]VTlalxqo}{ +Xj%aF5QׁcH.bx3*?|vP*RS@7._ w ݞ6q;x?t`FkU;assets/images/jtransform/radio.gif000066600000001020151374526160013274 0ustar00GIF89a&􀀀Ѽſû!,&@pH,EFH@ACjJKIW+ 1b< d`X5($a#";w*/"()0fh 4uw+ '&   6 "RB C#&HBJLNPBTVXZ\^B`blJ͛8sN2D@@)ѢF 4K@hd FCTb&QuKR- HW* dZ1dҦ1sM5qشqrЩGH;assets/images/jtransform/.htaccess000066600000000177151374526160013321 0ustar00 Order allow,deny Deny from all assets/images/jtransform/checkbox.gif000066600000000251151374526160013771 0ustar00GIF89a&!,&nkIg$.`(Qh幮 5//̄Ȥ2 i:Phe*ph+dweƩ2 p&vA beqq^n ?h?GKQ ;assets/images/jtransform/btn_left.gif000066600000002357151374526160014011 0ustar00GIF89ac⦦!,c`B0I)tmx|˺Ȥr\h/dJZجvzxL.g)zn\^~l  Ϻ HA*\ȰÇ 8Hŋ3jȱǏ CIɓ'%\ɲ˗0cʔr͛8sϟ@ ڒH*]ʴӧPJJիXjݺׯ`ÊKٳ^Ϫ]˶۷d $Kݻx˷߿ LÇ"^̸ǐ#Kx˘3kϠCMӨS^ͺװc˞=3۸sͻo~ N㽃#_μ 0NسkνËO _Ͼ˟~?€ ((` .F(aUhNf ($(( :8@(4h8<@)Di$!H&PF)%NNiX*Ye\v"d9KflNfp)oixr9|矀Vgj 袌61@$餔Vji@^馜v Q*ꨤsQ?꫰*Gj뭸ZkkL%klX6 WF+Jugf6vm+}K覫_@ƻ\kFo+v' wpG,=Lgw ,$l(,0,l8<@- mHCPtL7NG-iX[Ru\w^-`mfl}n-Mx獌ߝ ~'G.Wn_f砳j@lnz꬟z.;Uk[{d.f@'k/7 ,}g/ws?槯h/o!;assets/images/icon_16/menu-icon16-report.png000066600000001335151374526160014651 0ustar00PNG  IHDRabKGD pHYs  tIME 0 WjIDAT8ˍKHQs"DGL+-hZIh)A w2P"h""E%JK/ddI&d6C+_qP/8|W557O.bY%B+Rjd^lhittT6"n nϠNj3*v;9YYu fl4PJ@f|bd;7J^`)R01 mF$%&g5DGE`x~mz1C&J쬟tt(:'M$jr em3= yG񎱿,bj))!%Df"7+4I#Wf5^KeZ E2 =.RO^Tٳ +--SzSH>lUXty>k }dqB!„[)|K`=] 0m=19בU`-PjieXZǘZ!33s~ՆYMO76]CV Z,gJVDB?|7Z㐍IENDB`assets/images/icon_16/menu-icon16-media.png000066600000001342151374526160014413 0ustar00PNG  IHDRabKGD pHYs  tIME 88MQoIDAT8uAHTQ{}.lL4% j"3IhDAD1EGm׀MDm tHMS|3nfu.?sqos64B`sء~#A ijAMbi ^T|FX%ORnb1P-9zKlFv>ffo;~eK# J ,Ւ5 w懇)QPej!Je&Pd*̅+@q)W ^9(l%CJCHP-p~#xh=X& @`h9z^$ +K$웮fUܛx6Lg1&iu4Fw ]yeIGX>̅sGkRsůo=vJk0 GC x$ ]~0ʱ֦GD/;%H[;?j>r @L :8x+g_g)Xkq|8vŰ]?R߂)MC@%#]]UM;5)qܯ%D7M9c;oߌR*!w%n%eڂ}-"r3 ZGNDܪjZ.V\ބ̖IENDB`assets/images/icon_16/menu-icon16-products.png000066600000001360151374526160015177 0ustar00PNG  IHDRabKGD pHYs  tIME  &1M}IDAT8˥kaHg&M[ӈL_QW>A n] *"XEDn|Ҧ QۈM 6I{g=p˄cziZ/_-p;kZx"@[[۶lkJx7ibYn߹+#cQQ(ժTʓre@ʀH<)FDq$""7o=22}NΜ>IuBuox@%ŮNz2Y~F~f(´,#8ǙhT(Iw!cC.G+e֨0DkmCv! c&&JlZT;K:V4g89DBkEСiIf+b={w'T!C[&QCq|P-]޻o@\ {0+ :hNΡāl%g9`bؘER (u $CQۨDS6OF S,?z#vp9CbF#˼$ C"X@28pVq _ \tUQ5 ބItRǣ'ϋt4hi`x (Px<`;5~G_Tcj]]gfk!0§tvF\-ՈRֶL-Ն8ږ2o}|`Gqfhq<7_B,6/O?~`{KIENDB`assets/images/icon_16/.htaccess000066600000000177151374526160012372 0ustar00 Order allow,deny Deny from all assets/images/icon_16/menu-icon16-orders.png000066600000001051151374526160014627 0ustar00PNG  IHDRabKGD pHYs  tIME 1(@8s|IDAT8}MkQs`Bp.p]l>JPicVvQbqъ3E&)… w9?fٚ9A";nϷW4M|>:brzJe fwAۉ "f  * :{{NӴߴ Qa,,Wj'[[5@58xBU1bfP5`9WE c6ff@n.'0l%M"՟+._p}P(r4vKkg΅kyv$k$w͌p)ZRkO?x5uc'sH{b7Wo  {~T*̌sQ?$=:ƥl.j"ƫsi5 bͲS8$1nٳ?#Mg[W`+agMiPM^P.U\Ѕjy{lfҵIĞwnX [ނ#FsW!$MwxX(JgH&7t\|g"wƀ.>壭L M`x|U[o]GN:JK)llW*߾4!{ c9A|1Xpd2-Xx" <͵kr, J3↣\4eď?p~Ν@K{c$v!k#h$!mIrcOHRA p a9H@n8`%$ o}U7JD({ ZP.KUSD{uDEk`hT"/&77V(fY2FQʞQZy =+ G:&IENDB`assets/images/icon_16/menu-icon16-categories.png000066600000001477151374526160015472 0ustar00PNG  IHDRabKGD pHYs  tIME 2,@IDAT8ˍOhgf&\ ƚRD4Fi-=PEsPP(R "VE/XB(fWKLwmM}{ۃa摩(8 J#̉wAҀ M~JFIFknz[ JLD/qB kR/}SŚ8yM.\3e0hV Jd8Q] uI&V/rE#IZ_[s >-e YգY{p1@Q:n7t!tǼوq%Dp+.U)-(KЈR43كgf1us賃Q6oi><@kFD ˶aK%}oMS]Z xƿ 1P̱&;p5 & CIvl{Y5./YbQD m IENDB`assets/images/icon_16/menu-icon16-manufacturers.png000066600000001200151374526160016204 0ustar00PNG  IHDRabKGD pHYs  tIME 4 vKS~ IDAT8ˍKa?3ꮻ EdAK: tJ*:DtJ S((ҐdhG-B+WWY7_;] /WbzҔb K}$? IN; z^.>*-,w=?s5~1166F(DUU ]@Nt)Õ`-뿋:xy5 A24K(WF7$1U9 {C,*M[i;q/zU+T^M8eژǬGLnm 5EQ`0ͥR"}R(RV0_=:++_d6oO0wsIENDB`assets/images/icon_16/menu-icon16-shoppers.png000066600000001077151374526160015204 0ustar00PNG  IHDRabKGD pHYs  tIME 3#IDAT8͒=op7JhJ^$ IAj#L2 : 1'`bꂄ@| KP"@4UhbD!R;q*E2-tNuHd'3Kf¿7nk:.`zGw)D*3)iP*.T<"/\^5N 31>.>akƕscd#si(`R'ih$Y2l7qȉȀAOm>#[0: /g>8j Q v+A;:v*o_^X/8Bebf`zBnIX6/a' ޕފǥ; 9v{c*Kt]0 i$!\<|Q,( Xl6+zeԅ5M\o)NIENDB`assets/images/icon_16/menu-icon16-paymentmethods.png000066600000001221151374526160016371 0ustar00PNG  IHDRabKGD pHYs  tIME 9; _IDAT8ˍOHA~\\[6)?{EzRnE7d! kuCQPbSfQmԭvf:| }f}FMҁwބ>AX(AY.T>L6S7;0nz e1~P滊:y^> G7GӐBK(梹@ ` uF/瑚ZH|].R-⪰@@ i uZr;?AV#uU0P/ִm/|\j>X-Xܴ9xR1;遱(N,#<8oUotfrOGp,ŷ{12vl70p_(d_߾!f) y tڝz ,0SZ~b 1Rsc2 C Kv)tmPA,@ЩMmX@u].56ոoijL1`qV[U}BIENDB`assets/images/admin_menu/.htaccess000066600000000177151374526160013250 0ustar00 Order allow,deny Deny from all assets/images/admin_menu/vm_border.png000066600000000135151374526160014131 0ustar00PNG  IHDRdpRPLTERD'IDATx#nIENDB`assets/images/admin_menu/vm_arrow.gif000066600000000250151374526160013765 0ustar00GIF89a ppp!, % QYA 00+ (7%A 5 ;assets/images/admin_menu/vm_arrow_down.gif000066600000000302151374526160015012 0ustar00GIF89a ppp!Created with The GIMP!, & y6rM 2!$)C;assets/images/admin_menu/index.html000066600000000062151374526160013440 0ustar00 assets/images/backgrounds.png000066600000002331151374526160012340 0ustar00PNG  IHDR YbtEXtSoftwareAdobe ImageReadyqe<fiTXtXML:com.adobe.xmp ` IDATxˍ0 DINz-$5t~^! ii@Q{3_}.Pj2/UZj~Ԭ 6. fʨ1nfu;o9U;Q6LKǶw'Vz"`Y5Q0ME_evMkkEuvIbѡɉ޸ڏ+H蹾~ፐm ihqoopfjKMݬܤw-u=iq>BHIDATx0Do% MJhDWdg᜙Yxƺ(`z?>V5#MCt&"M6ݎz=bYƫ,\+LyBBD1!erE$e\2TTbO<_2ױ/Pl=E>IENDB`assets/images/flag/lt.png000066600000000223151374526160011364 0ustar00PNG  IHDR І pHYs  tEXtCreation Time08/15/08)W#IDAT(ScS?1!e0AuQHT1IENDB`assets/images/flag/ar.png000066600000001652151374526160011356 0ustar00PNG  IHDR XPLTE3A"N3\DiUwfwɈϙ֪5r pHYs  PIDAT V % <y Rx2@oX@`w2;`gf0~xKSHIENDB`assets/images/flag/us.png000066600000000754151374526160011405 0ustar00PNG  IHDR nIDAT(SMQKTQP>X>ҋVj+S7ACh5\ Z|rPY|,",R,{5]1 |gfA`ƀQɿ|G(75PQTcJg*Z7إ I&7tZ?e6@ 5+ P*T+8~5t=Y&.uΝK6Kaά~um{YCَ2k+  r6 C&Wf)ΣSk3i.%Ni嫍yKk_7MF= ڞG ϱB!t]J('w]FSLO>cazE(ib#M/D >b;HK%,xp`_k0;< gTd-=:LHJIENDB`assets/images/flag/pt-pt.png000066600000000417151374526160012016 0ustar00PNG  IHDR XuPLTEb31#$12>>XFM b*U*` ic\lgIFg |YSMIDATc` 0B b`fbeCᒓDUPVTQFqJHIɋKryyxyAB^xi.IENDB`assets/images/flag/eu.png000066600000000627151374526160011366 0ustar00PNG  IHDR k= pHYs  7tEXtCommentCreated by Jose A. Reyero, freelance@reyero.netMIIDAT(c`Hcg@ct=`f[40HpBQG g)3ƔD6Y d5*,Va #+/?_R柌q/!bcKISD.f*h߸(rN$?lys?@0@a `@DWPg d€t K:_JƂjUaTIENDB`assets/images/flag/zh-hans.png000066600000000406151374526160012320 0ustar00PNG  IHDR k=sRGBIDAT(Sc)>v`6Hf)(u)[@T^ 4l0AnI bȅn2#O O "+D hn<⎲kuA`P@xG &"@*5@?!cgIENDB`assets/images/flag/tr.png000066600000000306151374526160011374 0ustar00PNG  IHDR X?PLTE !%$+*+EOpxy譨7gIFg |YS2IDATc`0r2q 30p! p f~&4!>A&t' WL6IENDB`assets/images/flag/zh-hant.png000066600000000256151374526160012324 0ustar00PNG  IHDR k=sRGBhIDAT(c``hP wx1Ƽ`0hL{0VVD V;$?Gm` bm3Cb@vE@IENDB`assets/images/flag/nl.png000066600000000171151374526160011360 0ustar00PNG  IHDR |/ PLTE!F(4 pHYs  IDAT[cLr,Bc-IENDB`assets/images/flag/da.png000066600000000202151374526160011326 0ustar00PNG  IHDR  PLTE 3`gIFg |YSIDATcd``Կ$a(102H QdIENDB`assets/images/flag/se.png000066600000000333151374526160011356 0ustar00PNG  IHDR \9ͳHPLTE86 76o*Uv)Oz)L|)K(F'@&:&8#&N"2>AI(Pw=x<x=dNgIFg |YS>IDATcq!*+&$%*. aiad -h0w))1{IENDB`assets/images/flag/sk.png000066600000000403151374526160011362 0ustar00PNG  IHDR X`PLTE8:5: 3!7-O(&*+'V 4%8,>Tfe>PU}bFWK^Sb]uskx犕狕럧ʒ! pHYs  IIDAT70##r%dU$Rfq(=)^=PvțPk fIENDB`assets/images/flag/tg.png000066600000000323151374526160011360 0ustar00PNG  IHDR OG>XFM b*U*` ic\l Order allow,deny Deny from all assets/images/flag/gl.png000066600000000614151374526160011353 0ustar00PNG  IHDR XPLTEc)h/m-qOoq;r3vJxr)|9xb3*R{j̢i5W>N q:Ƕu1sɩq*U:=%I`J6 "'ep⬲IENDB`assets/images/flag/is.png000066600000000235151374526160011363 0ustar00PNG  IHDR v K!PLTE855xxJ}rm_gIFg |YS&IDATc```Ls`L%% % P`Hd&U`$IENDB`assets/images/flag/ca.png000066600000000206151374526160011331 0ustar00PNG  IHDR  G pHYs  8IDAT(cD z>&]^N=wXIp#rCN?d?ЩIENDB`assets/images/flag/nn.png000066600000000200151374526160011353 0ustar00PNG  IHDR 䅪 pHYs  2IDAT(cx Gg" Y1 B Q\.QA"YNlb!2IENDB`assets/images/flag/tl.png000066600000000533151374526160011370 0ustar00PNG  IHDR x0}u pHYs   IDAT8c~͈m,V,_e--x̮3VR$y ;d߇-`uL]?(5@ ?ߺ5X}ީ/?'F2F fH w@EW`Hw?'A2G2E C{R`>]IENDB`assets/images/flag/cs.png000066600000000277151374526160011363 0ustar00PNG  IHDR <*PLTE#$;E~G8bS5]#Au$T&ULt` + pHYs  ;IDAT[cs XVga,n8x e2R+@ JTL,"P|- IENDB`assets/images/flag/ga.png000066600000000165151374526160011341 0ustar00PNG  IHDR ^ PLTEc=`Y pHYs  IDATc``X*4ܡ萭IENDB`assets/images/flag/index.html000066600000000000151374526160012225 0ustar00assets/images/flag/pl.png000066600000000161151374526160011361 0ustar00PNG  IHDR PLTE<5 pHYs  IDAT[c6lX5S eOIENDB`assets/images/flag/fi.png000066600000000221151374526160011341 0ustar00PNG  IHDR "PLTE5 =M-YUxd" pHYs  "IDATcHKKePKLg``. "IENDB`assets/images/flag/br.png000066600000000471151374526160011355 0ustar00PNG  IHDR PLTE(o2j0v3!x7"g5#z6$w5&w7%~;)C.rY?UaG][FSIRLSMSO^W^[? =;qq9@/*/P+_'AKΠΠ ּ =gIFg |YScIDATcA PZTNUDRCKCIDLI[QI &"&,)PҒRH2q0)@E@T8yա`&(#Lb;6" IENDB`assets/images/flag/lv.png000066600000000220151374526160011363 0ustar00PNG  IHDR І pHYs  tEXtCreation Time08/15/08)W IDAT(chO-0j"a7Faʬ(5,IENDB`assets/images/flag/fr.png000066600000000164151374526160011360 0ustar00PNG  IHDR |/ PLTE *AE pHYs  IDATc`Z@1 ;-^N$IENDB`assets/images/flag/ro.png000066600000000157151374526160011373 0ustar00PNG  IHDR |/ PLTE+&MͭgIFg |YSIDATc`Z@1 ;-^N$IENDB`assets/images/flag/el.png000066600000000275151374526160011354 0ustar00PNG  IHDR <'PLTE,9HT`jcldnhq|ͫ֯ؼH! pHYs  v`6Hf)(u)[@T^ 4l0AnI bȅn2#O O "+D hn<⎲kuA`P@xG &"@*5@?!cgIENDB`assets/images/flag/hant.png000066600000000256151374526160011705 0ustar00PNG  IHDR k=sRGBhIDAT(c``hP wx1Ƽ`0hL{0VVD V;$?Gm` bm3Cb@vE@IENDB`assets/images/flag/pt-br.png000066600000000471151374526160011776 0ustar00PNG  IHDR PLTE(o2j0v3!x7"g5#z6$w5&w7%~;)C.rY?UaG][FSIRLSMSO^W^[? =;qq9@/*/P+_'AKΠΠ ּ =gIFg |YScIDATcA PZTNUDRCKCIDLI[QI &"&,)PҒRH2q0)@E@T8yա`&(#Lb;6" IENDB`assets/images/flag/sco.png000066600000000274151374526160011537 0ustar00PNG  IHDR "!PLTEr w"L~ pHYs  AIDAT[cXUVX20Wtd`BB eYU V533 ڐ Ca1&kIENDB`assets/images/flag/he.png000066600000000245151374526160011345 0ustar00PNG  IHDR v KPLTE@"YDs[֛朵}g pHYs  -IDAT[c @@2`Y QR e7GbP0n(IIENDB`assets/images/flag/uk.png000066600000000154151374526160011367 0ustar00PNG  IHDR UPLTE:uͶgIFg |YSIDATc`? uHqIENDB`assets/images/flag/fa.png000066600000000504151374526160011335 0ustar00PNG  IHDR PLTEAACCDDEEGGHHIIJJKKLLLLMMQQ#@zz_t_uavbubwbwcydxezdxgzh{h|i}i}j~k`+ pHYs  ZIDATWcHPWPQbЇmu8.!"!˯g30rsp20s2pp3P y'},IENDB`assets/images/flag/vi.png000066600000000337151374526160011371 0ustar00PNG  IHDR XHPLTE&&%&%/#<#<#?"D"H"I"v gIFg |YSBIDATc` bpٹ898ّE13jDaebeAb<IENDB`assets/images/flag/ru.png000066600000000171151374526160011375 0ustar00PNG  IHDR |/ PLTE/.. pHYs  IDAT[cX 0I\ 0Ic-NIENDB`assets/images/flag/fo.png000066600000000266151374526160011360 0ustar00PNG  IHDR v K*PLTE,//63=>VHl#(KMXwሽb pHYs  2IDAT[c{] {@؈ XVL'DYIENDB`assets/images/flag/lb.png000066600000000167151374526160011351 0ustar00PNG  IHDR buh PLTE+-# pHYs  IDATcaLr6+=IENDB`assets/images/hide.png000066600000001325151374526160010751 0ustar00PNG  IHDR+jtEXtSoftwareAdobe ImageReadyqe<wIDATxϏPǧRv{ zHbօ38GģG\U$qLH)ḅe m].lM^̼73}|>^RPx(+ 3Iu6p{jxGTe-Xo$ CU/F6x