protected function ManageOrdersGrid(&$numOrders, &$numDeletedOrders = 0) { // Show a list of products in a table $page = 0; $start = 0; $GLOBALS['OrderGrid'] = ""; $catList = ""; $max = 0; // Is this a custom search? if(isset($_GET['searchId'])) { // Override custom search sort fields if we have a requested field if(isset($_GET['sortField'])) { $_REQUEST['sortField'] = $_GET['sortField']; } if(isset($_GET['sortOrder'])) { $_REQUEST['sortOrder'] = $_GET['sortOrder']; } } if(isset($_GET['searchQuery'])) { $GLOBALS['QueryEscaped'] = isc_html_escape($_GET['searchQuery']); } if(isset($_REQUEST['sortOrder']) && $_REQUEST['sortOrder'] == "asc") { $sortOrder = "asc"; } else { $sortOrder = "desc"; } $validSortFields = array('orderid', 'custname', 'orddate', 'ordstatus', 'newmessages', 'total_inc_tax'); if(isset($_REQUEST['sortField']) && in_array($_REQUEST['sortField'], $validSortFields)) { $sortField = $_REQUEST['sortField']; SaveDefaultSortField("ManageOrders", $_REQUEST['sortField'], $sortOrder); } else { list($sortField, $sortOrder) = GetDefaultSortField("ManageOrders", "orderid", $sortOrder); } if (isset($_GET['page'])) { $page = (int)$_GET['page']; } else { $page = 1; } if (isset($_GET['perpage'])) { $perPage = (int)$_GET['perpage']; SaveDefaultPerPage("ManageOrders", $perPage); } else { $perPage = GetDefaultPerPage("ManageOrders", ISC_ORDERS_PER_PAGE); } // Build the pagination and sort URL $searchURL = $_GET; unset($searchURL['sortField'], $searchURL['sortOrder'], $searchURL['page'], $searchURL['new'], $searchURL['ToDo'], $searchURL['SubmitButton1'], $searchURL['SearchButton_x'], $searchURL['SearchButton_y']); $searchURL['sortField'] = $sortField; $searchURL['sortOrder'] = $sortOrder; $this->template->assign('searchURL', $searchURL); $sortURL = $searchURL; unset($sortURL['sortField'], $sortURL['sortOrder']); // Limit the number of orders returned if ($page == 1) { $start = 1; } else { $start = ($page * $perPage) - ($perPage-1); } $start = $start-1; // Get the results for the query $orderResult = $this->_GetOrderList($start, $sortField, $sortOrder, $numOrders, $perPage, $numDeletedOrders); $GLOBALS['perPage'] = $perPage; $GLOBALS['numOrders'] = $numOrders; $GLOBALS['pageURL'] = "index.php?ToDo=viewOrders&" . http_build_query($searchURL); $GLOBALS['currentPage'] = $page; $this->template->assign('numDeletedOrders', $numDeletedOrders); if ($numOrders && $numDeletedOrders) { $searchGet = $_GET; if (isset($searchGet['searchId']) && $searchGet['searchId'] == 0) { unset($searchGet['searchId']); } if (count($searchGet) > 1) { $deletedUrl = $searchGet; $deletedUrl['searchDeletedOrders'] = 'only'; $deletedUrl = 'index.php?' . http_build_query($deletedUrl); $this->template->assign('viewDeletedOrdersUrl', $deletedUrl); unset($deletedUrl); } unset($searchGet); } if(isset($_GET['searchQuery'])) { $query = $_GET['searchQuery']; } else { $query = ""; } $GLOBALS['SearchQuery'] = $query; $GLOBALS['SortField'] = $sortField; $GLOBALS['SortOrder'] = $sortOrder; $sortLinks = array( "Id" => "orderid", "Cust" => "custname", "Date" => "orddate", "Status" => "ordstatus", "Message" => "newmessages", "Total" => "total_inc_tax" ); BuildAdminSortingLinks($sortLinks, "index.php?ToDo=viewOrders&".http_build_query($sortURL)."&page=".$page, $sortField, $sortOrder); // Workout the maximum size of the array $max = $start + $perPage; if ($max > count($orderResult)) { $max = count($orderResult); } if(!gzte11(ISC_LARGEPRINT)) { $GLOBALS['HideOrderMessages'] = "none"; $GLOBALS['CustomerNameSpan'] = 2; } // Display the orders while ($row = $GLOBALS['ISC_CLASS_DB']->Fetch($orderResult)) { $this->template->assign('order', $row); $GLOBALS['OrderId'] = $row['orderid']; $GLOBALS['CustomerId'] = $row['ordcustid']; $GLOBALS['OrderId1'] = $row['orderid']; $GLOBALS['Customer'] = isc_html_escape($row['custname']); $GLOBALS['Date'] = isc_date(GetConfig('DisplayDateFormat'), $row['orddate']); $GLOBALS['OrderStatusOptions'] = $this->GetOrderStatusOptions($row['ordstatus']); $GLOBALS['Total'] = FormatPriceInCurrency($row['total_inc_tax'], $row['orddefaultcurrencyid'], null, true); $GLOBALS['NotesIcon'] = ""; $GLOBALS['CommentsIcon'] = ""; // Look up the country for the IP address of this order if(gzte11(ISC_LARGEPRINT)) { $suspiciousOrder = false; $GLOBALS['FlagCellClass'] = $GLOBALS['FlagCellTitle'] = ''; if($row['ordgeoipcountrycode'] != '') { $flag = strtolower($row['ordgeoipcountrycode']); // If the GeoIP based country code and the billing country code don't match, we flag this order as a different colour if(strtolower($row['ordgeoipcountrycode']) != strtolower($row['ordbillcountrycode'])) { $GLOBALS['FlagCellClass'] = "Suspicious"; $suspiciousOrder = true; } $countryName = $row['ordgeoipcountry']; } else { $flag = strtolower($row['ordbillcountrycode']); $countryName = $row['ordbillcountry']; $GLOBALS['FlagCellTitle'] = $row['ordbillcountry']; } // Do we have a country flag to show? if(file_exists(ISC_BASE_PATH."/lib/flags/".$flag.".gif")) { $flag = GetConfig('AppPath')."/lib/flags/".$flag.".gif"; if($suspiciousOrder == true) { $title = sprintf(GetLang('OrderCountriesDontMatch'), $row['ordbillcountry'], $row['ordgeoipcountry']); $GLOBALS['OrderCountryFlag'] = "<span onmouseout=\"HideQuickHelp(this);\" onmouseover=\"ShowQuickHelp(this, '".GetLang('PossibleFraudulentOrder')."', '".$title."');\"><img src=\"".$flag."\" alt='' /></span>"; } else { $GLOBALS['OrderCountryFlag'] = "<img src=\"".$flag."\" alt='' title=\"".$countryName."\" />"; } } else { $GLOBALS['OrderCountryFlag'] = ''; } } else { $GLOBALS['HideCountry'] = "none"; } // If this is ebay item, we will have the icon as eBay icon $GLOBALS['OrderIcon'] = 'order.gif'; if ($row['ebay_order_id'] != '0') { $GLOBALS['OrderIcon'] = 'ebay.gif'; } // Workout the message link -- do they have permission to view order messages? $GLOBALS["HideMessages"] = "none"; if($GLOBALS['ISC_CLASS_ADMIN_AUTH']->HasPermission(AUTH_Order_Messages) && $row['ordcustid'] > 0) { $numMessages = GetLang('Messages'); if($row['nummessages'] == 1) { $numMessages = GetLang('OrderMessage'); } $newMessages = '0 '.GetLang('NewText'); if($row['newmessages'] > 0) { $newMessages = "<strong>" . $row['newmessages'] . " " . GetLang('NewText') . "</strong>"; } $GLOBALS['MessageLink'] = sprintf("<a title='%s' class='Action' href='index.php?ToDo=viewOrderMessages&ord erId=%d'>%s %s</a><br />(%s)", GetLang('MessageOrder'), $row['orderid'], $row['nummessages'], $numMessages, $newMessages ); if($row["numunreadmessages"] > 0 && gzte11(ISC_LARGEPRINT)) { $GLOBALS["HideMessages"] = ""; $GLOBALS["NumMessages"] = $row['numunreadmessages']; } } else { $GLOBALS['MessageLink'] = sprintf("<a class='Action' disabled>%s (0)</a>", GetLang('Messages')); } if(!gzte11(ISC_LARGEPRINT)) { $GLOBALS["HideMessages"] = "none"; } // If the customer still exists, link to the customer page if(trim($row['custname']) != '') { $GLOBALS['CustomerLink'] = "<a href='index.php?ToDo=viewCustomers&idFrom=".$GLOBALS['CustomerId']."&idTo=".$GLOBALS['CustomerId']."'>".$GLOBALS['Customer']."</a>"; } else { $GLOBALS['CustomerLink'] = $row['ordbillfirstname'].' '.$row['ordbilllastname']; } if($row['ordcustid'] == 0) { $GLOBALS['CustomerLink'] .= " <span style=\"color: gray;\">".GetLang('GuestCheckoutCustomer')."</span>"; } // If the order has any notes, flag it if($row['ordnotes'] != '') { $GLOBALS['NotesIcon'] = '<a href="#" onclick="Order.HandleAction(' . $row['orderid'] . ', \'orderNotes\');"><img src="images/note.png" alt="" title="' . GetLang('OrderHasNotes') . '" style="border-style: none;" /></a>'; $GLOBALS['HasNotesClass'] = 'HasNotes'; } else { $GLOBALS['HasNotesClass'] = ''; } // does the order have a customer message? if (!empty($row['ordcustmessage'])) { $GLOBALS['CommentsIcon'] = '<a href="#" onclick="Order.HandleAction(' . $row['orderid'] . ', \'orderNotes\');"><img src="images/user_comment.png" alt="" title="' . GetLang('OrderHasComments') . '" style="border-style: none;" /></a>'; } // If the order has any shipable items, show the link to ship items $GLOBALS['ShipItemsLink'] = ''; if (!$row['deleted'] && isset($row['ordtotalshipped']) && isset($row['ordtotalqty'])) { if($row['ordisdigital'] == 0 && ($row['ordtotalqty']-$row['ordtotalshipped']) > 0) { $addClass = ''; if($row['shipping_address_count'] > 1) { $addClass = 'MultipleAddresses'; } $GLOBALS['ShipItemsLink'] = '<option id="ShipItemsLink'.$row['orderid'].'" value="shipItems'.$addClass.'">'.GetLang('ShipItems').'</option>'; } } //Show payment status blow order status $GLOBALS['PaymentStatus'] = ''; $GLOBALS['HidePaymentStatus'] = 'display:none;'; $GLOBALS['PaymentStatusColor'] = ''; if($row['ordpaymentstatus'] != '') { $GLOBALS['HidePaymentStatus'] = ''; $GLOBALS['PaymentStatusColor'] = ''; switch($row['ordpaymentstatus']) { case 'authorized': $GLOBALS['PaymentStatusColor'] = 'PaymentAuthorized'; break; case 'captured': $GLOBALS['PaymentStatus'] = GetLang('Payment')." ".ucfirst($row['ordpaymentstatus']); $GLOBALS['PaymentStatusColor'] = 'PaymentCaptured'; break; case 'refunded': case 'partially refunded': case 'voided': $GLOBALS['PaymentStatus'] = GetLang('Payment')." ".ucwords($row['ordpaymentstatus']); $GLOBALS['PaymentStatusColor'] = 'PaymentRefunded'; break; } } // If the allow payment delayed capture, show the link to Delayed capture $GLOBALS['DelayedCaptureLink'] = ''; $GLOBALS['VoidLink'] = ''; $GLOBALS['RefundLink'] =''; $transactionId = trim($row['ordpayproviderid']); //if orginal transaction id exist and payment provider is currently enabled if($transactionId != '' && GetModuleById('checkout', $provider, $row['orderpaymentmodule']) && $provider->IsEnabled() && !gzte11(ISC_HUGEPRINT)) { //if the payment module allow delayed capture and the current payment status is authorized //display delay capture option if(method_exists($provider, "DelayedCapture") && $row['ordpaymentstatus'] == 'authorized') { $GLOBALS['DelayedCaptureLink'] = '<option value="delayedCapture">'.GetLang('CaptureFunds').'</option>'; $GLOBALS['PaymentStatus'] .= '<a onclick="Order.DelayedCapture('.$row['orderid'].'); return false;" href="#">'.GetLang('CaptureFunds').'</a>'; } //if the payment module allow void transaction and the current payment status is authorized //display void option if(method_exists($provider, "DoVoid") && $row['ordpaymentstatus'] == 'authorized') { $GLOBALS['VoidLink'] = '<option value="voidTransaction">'.GetLang('VoidTransaction').'</option>'; } //if the payment module allow refund and the current payment status is authorized //display refund option if(method_exists($provider, "DoRefund") && ($row['ordpaymentstatus'] == 'captured' || $row['ordpaymentstatus'] == 'partially refunded')) { $GLOBALS['RefundLink'] = '<option value="refundOrder">'.GetLang('Refund').'</option>'; } } $GLOBALS["OrderStatusText"] = GetOrderStatusById($row['ordstatus']); $GLOBALS['OrderStatusId'] = $row['ordstatus']; $GLOBALS['OrderGrid'] .= $this->template->render('order.manage.row.tpl'); } // Close the GeoIP database if we used it if(isset($gi)) { geoip_close($gi); } // Hide the message box in templates/iphone/MessageBox.html if we're not searching if(!isset($_REQUEST["searchQuery"]) && isset($_REQUEST["page"])) { $GLOBALS["HideYellowMessage"] = "none"; } $GLOBALS['CurrentPage'] = $page; return $this->template->render('orders.manage.grid.tpl'); }
private function ManageCustomersGrid(&$numCustomers) { // Show a list of customers in a table $page = 0; $start = 0; $numCustomers = 0; $numGroups = 0; $GLOBALS['CustomerGrid'] = ""; $max = 0; if (GetConfig('CurrencyLocation') == 'right') { $GLOBALS['CurrencyTokenLeft'] = ''; $GLOBALS['CurrencyTokenRight'] = GetConfig('CurrencyToken'); } else { $GLOBALS['CurrencyTokenLeft'] = GetConfig('CurrencyToken'); $GLOBALS['CurrencyTokenRight'] = ''; } $this->_customerGroups = &$this->_GetGroupList($numGroups); if (!gzte11(ISC_MEDIUMPRINT) || $numGroups == 0) { $GLOBALS[base64_decode('SGlkZUdyb3Vw')] = "none"; } // Is this a custom search? if (isset($_GET['searchId'])) { // Override custom search sort fields if we have a requested field if (isset($_GET['sortField'])) { $_REQUEST['sortField'] = $_GET['sortField']; } if (isset($_GET['sortOrder'])) { $_REQUEST['sortOrder'] = $_GET['sortOrder']; } } if (isset($_GET['searchQuery'])) { $GLOBALS['EscapedQuery'] = isc_html_escape($_GET['searchQuery']); } if (isset($_REQUEST['sortOrder']) && $_REQUEST['sortOrder'] == "asc") { $sortOrder = "asc"; } else { $sortOrder = "desc"; } $validSortFields = array('customerid', 'custconlastname', 'custconfirstname', 'custconemail', 'custconphone', 'custconcompany', 'custdatejoined', 'numorders', 'custstorecredit'); if (isset($_REQUEST['sortField']) && in_array($_REQUEST['sortField'], $validSortFields)) { $sortField = $_REQUEST['sortField']; SaveDefaultSortField("ManageCustomers", $_REQUEST['sortField'], $sortOrder); } else { list($sortField, $sortOrder) = GetDefaultSortField("ManageCustomers", "customerid", $sortOrder); } $searchURL = $this->buildSearchUrlData($_GET, $sortField, $sortOrder); $this->buildLetterSearchUrlData($searchURL); $sortURL = $searchURL; unset($sortURL['sortField'], $sortURL['sortOrder']); if (isset($_GET['page'])) { $page = (int)$_GET['page']; } else { $page = 1; } if (isset($_GET['perpage'])) { $perPage = (int)$_GET['perpage']; SaveDefaultPerPage("ManageCustomers", $perPage); } else { $perPage = GetDefaultPerPage("ManageCustomers", ISC_CUSTOMERS_PER_PAGE); } // Limit the number of customers returned if ($page == 1) { $start = 1; } else { $start = ($page * $perPage) - ($perPage-1); } $start = $start-1; // Get the results for the query $customerResult = $this->_GetCustomerList($start, $sortField, $sortOrder, $numCustomers, $perPage); $GLOBALS['perPage'] = $perPage; $GLOBALS['numCustomers'] = $numCustomers; $GLOBALS['pageURL'] = "index.php?ToDo=viewCustomers&" . http_build_query($searchURL); $GLOBALS['currentPage'] = $page; $GLOBALS['SortField'] = $sortField; $GLOBALS['SortOrder'] = $sortOrder; $sortLinks = array( "CustId" => "customerid", "Name" => "custconlastname", "Email" => "custconemail", "Phone" => "custconphone", "StoreCredit" => "custstorecredit", "Date" => "custdatejoined", "NumOrders" => "numorders" ); BuildAdminSortingLinks($sortLinks, "index.php?ToDo=viewCustomers&".http_build_query($sortURL)."&page=".$page, $sortField, $sortOrder); // Workout the maximum size of the array $max = $start + $perPage; if ($max > $GLOBALS["ISC_CLASS_DB"]->CountResult($customerResult)) { $max = $GLOBALS["ISC_CLASS_DB"]->CountResult($customerResult); } if (!empty($this->_customerGroups)) { $showGroups = true; } else { $showGroups = false; } if ($numCustomers > 0) { while ($row = $GLOBALS["ISC_CLASS_DB"]->Fetch($customerResult)) { $GLOBALS['CustomerId'] = (int) $row['customerid']; $GLOBALS['Name'] = isc_html_escape($row['custfullname']); $GLOBALS['Email'] = sprintf("<a href='mailto:%s'>%s</a>", urlencode($row['custconemail']), isc_html_escape($row['custconemail'])); if ($row['custconphone'] != "") { $GLOBALS['Phone'] = isc_html_escape($row['custconphone']); } else { $GLOBALS['Phone'] = GetLang('NA'); } $GLOBALS['Group'] = ""; if ($showGroups) { if ($GLOBALS["ISC_CLASS_ADMIN_AUTH"]->HasPermission(AUTH_Edit_Customers)) { $GLOBALS['Group'] = $this->_BuildGroupDropdown($row['customerid'], $row['custgroupid'], $row['custfullname']); } elseif ($row['custgroupid']) { $GLOBALS['Group'] = $this->_customerGroups[$row['custgroupid']]['groupname']; } } if ($row['custconcompany'] != "") { $GLOBALS['Company'] = isc_html_escape($row['custconcompany']); } else { $GLOBALS['Company'] = GetLang('NA'); } $GLOBALS['Date'] = CDate($row['custdatejoined']); $GLOBALS['NumOrders'] = (int) $row['numorders']; // Hide the plus symbol if the customer has no orders if ($row['numorders'] == 0) { $GLOBALS['HideExpand'] = "none"; } else { $GLOBALS['HideExpand'] = ""; } // If the customer has any notes, flag them $HasNotesClass = ''; if($row['custnotes'] != '') { $HasNotesClass = 'HasNotes'; } // Workout which links the user can have if ($GLOBALS["ISC_CLASS_ADMIN_AUTH"]->HasPermission(AUTH_Edit_Customers)) { $GLOBALS['StoreCreditAmount'] = FormatPrice($row['custstorecredit'], false, false, false); $GLOBALS['StoreCredit'] = $this->template->render('Snippets/CustomerRowStoreCredit.html'); $GLOBALS['LoginLink'] = "<a href='index.php?ToDo=loginCustomer&customerId=" . $row['customerid'] . "' class='Action' target='_blank'>" . GetLang('CustomerLoginAsThem') . "</a>"; $GLOBALS['ViewNotesLink'] = "<a href='#' class='" . $HasNotesClass . " ViewNotesLink' onclick='Customers.ViewNotes(".$row['customerid']."); return false;'>" . GetLang("CustomerNotesLink") . "</a>"; $GLOBALS['EditCustomerLink'] = sprintf("<a title='%s' class='Action' href='index.php?ToDo=editCustomer&customerId=%d'>%s</a>", GetLang('CustomerEdit'), $row['customerid'], GetLang('Edit')); } else { $GLOBALS['StoreCredit'] = FormatPrice($row['custstorecredit']); $GLOBALS['LoginLink'] = sprintf("<a class='Action' disabled>%s</a>", GetLang('CustomerLoginAsThem')); $GLOBALS['ViewNotesLink'] = sprintf("<a class='Action' disabled>%s</a>", GetLang('CustomerNotesLink')); $GLOBALS['EditCustomerLink'] = sprintf("<a class='Action' disabled>%s</a>", GetLang('Edit')); } $GLOBALS['CustomerGrid'] .= $this->template->render('customers.manage.row.tpl'); } } else { if (isset($_REQUEST['letter'])) { $GLOBALS['CustomerGrid'] = sprintf('<tr> <td colspan="11" style="padding:10px"><em>%s</em></td> </tr>', sprintf(GetLang('CustomerLetterSortNoResults'), isc_strtoupper($_REQUEST['letter']))); } } return $this->template->render('customers.manage.grid.tpl'); }
public function ManageProductsGrid(&$numProducts) { // Show a list of products in a table $page = 0; $start = 0; $numProducts = 0; $GLOBALS['ProductGrid'] = ""; $max = 0; // Is this a custom search? if(isset($_GET['searchId'])) { // Override custom search sort fields if we have a requested field if(isset($_GET['sortField'])) { $_REQUEST['sortField'] = $_GET['sortField']; } if(isset($_GET['sortOrder'])) { $_REQUEST['sortOrder'] = $_GET['sortOrder']; } } if($GLOBALS['ISC_CLASS_ADMIN_AUTH']->GetVendorId()) { $featuredColumn = 'prodvendorfeatured'; } else { $featuredColumn = 'prodfeatured'; } $validSortFields = array('productid', 'prodcode', 'currentinv', 'prodname', 'prodcalculatedprice', 'prodvisible', $featuredColumn, '_calc_prodstatus'); if(isset($_REQUEST['sortOrder']) && $_REQUEST['sortOrder'] == "asc") { $sortOrder = "asc"; } else { $sortOrder = "desc"; } if(isset($_REQUEST['sortField']) && in_array($_REQUEST['sortField'], $validSortFields)) { $sortField = $_REQUEST['sortField']; SaveDefaultSortField("ManageProducts", $_REQUEST['sortField'], $sortOrder); } else { list($sortField, $sortOrder) = GetDefaultSortField("ManageProducts", "productid", $sortOrder); } if(isset($_GET['page'])) { $page = (int)$_GET['page']; } else { $page = 1; } if (isset($_GET['perpage'])) { $perPage = (int)$_GET['perpage']; SaveDefaultPerPage("ManageProducts", $perPage); } else { $perPage = GetDefaultPerPage("ManageProducts", ISC_PRODUCTS_PER_PAGE); } if(isset($_GET['filterCategory']) && $_GET['filterCategory'] == "-1") { $GLOBALS['FilterLow'] = "selected=\"selected\""; } if(isset($_GET['filterCategory'])) { $filterCat = (int)$_GET['filterCategory']; } else { $filterCat = 0; } if(!gzte11(ISC_MEDIUMPRINT)) { $GLOBALS['ProductNameSpan'] = 3; $GLOBALS['HideInventoryOptions'] = 'none'; } else { $GLOBALS['HideInventoryOptions'] = ''; } // Build the search and sort URL $searchURL = $this->buildSearchUrlData($_GET, $sortField, $sortOrder); $this->buildLetterSearchUrlData($searchURL); $sortURL = $searchURL; unset($sortURL['sortField'], $sortURL['sortOrder']); // Limit the number of questions returned if($page == 1) { $start = 1; } else { $start = ($page * $perPage) - ($perPage-1); } $start = $start-1; // Get the results for the query $product_result = $this->_GetProductList($start, $sortField, $sortOrder, $numProducts, '', $perPage); $GLOBALS['perPage'] = $perPage; $GLOBALS['numProducts'] = $numProducts; $GLOBALS['pageURL'] = "index.php?ToDo=viewProducts&" . http_build_query($searchURL); $GLOBALS['currentPage'] = $page; if (isset($_REQUEST['searchQuery'])) { $query = $_REQUEST['searchQuery']; } else { $query = ''; } $GLOBALS['EscapedQuery'] = isc_html_escape($query); $GLOBALS['SearchQuery'] = isc_html_escape($query); $GLOBALS['SortField'] = $sortField; $GLOBALS['SortOrder'] = $sortOrder; if($GLOBALS['ISC_CLASS_ADMIN_AUTH']->GetVendorId()) { $featuredColumn = 'prodvendorfeatured'; } else { $featuredColumn = 'prodfeatured'; } $sortLinks = array( "Code" => "prodcode", "Stock" => "currentinv", "Name" => "prodname", "Price" => "prodcalculatedprice", "Status" => "_calc_prodstatus", "Visible" => "prodvisible", "Featured" => $featuredColumn ); BuildAdminSortingLinks($sortLinks, "index.php?ToDo=viewProducts&".http_build_query($sortURL)."&page=".$page, $sortField, $sortOrder); // Workout the maximum size of the array $max = $start + $perPage; if ($max > $numProducts) { $max = $numProducts; } if($numProducts > 0) { // Display the products while($row = $GLOBALS["ISC_CLASS_DB"]->Fetch($product_result)) { if ($row['prodcode'] == "") { $GLOBALS['SKU'] = GetLang('NA'); } else { $GLOBALS['SKU'] = isc_html_escape($row['prodcode']); } $GLOBALS['ProductId'] = (int)$row['productid']; $GLOBALS['Name'] = sprintf("<a title='%s' class='Action' href='%s' target='_blank'>%s</a>", GetLang('ProductView'), ProdLink($row['prodname']), isc_html_escape($row['prodname'])); // Do we need to show product thumbnails? if(GetConfig('ShowThumbsInControlPanel')) { if ($row['imageid'] !== null) { $image = new ISC_PRODUCT_IMAGE(); $image->populateFromDatabaseRow($row); try { $imageThumbnailUrl = $image->getResizedUrl(ISC_PRODUCT_IMAGE_SIZE_TINY, true); $imageDimensions = $image->getResizedFileDimensions(ISC_PRODUCT_IMAGE_SIZE_TINY); $GLOBALS['ProductImage'] = sprintf('<img src="%1$s" width="%2$d" height="%3$d" />', isc_html_escape($imageThumbnailUrl), $imageDimensions[0], $imageDimensions[1]); } catch (Exception $exception) { // source image is not readable, show the no image placeholder $GLOBALS['ProductImage'] = sprintf("<div class='NoThumb'>%s<br />%s<br />%s</div>", GetLang('NoImage1'), GetLang('NoImage2'), GetLang('NoImage3')); } } else { $GLOBALS['ProductImage'] = sprintf("<div class='NoThumb'>%s<br />%s<br />%s</div>", GetLang('NoImage1'), GetLang('NoImage2'), GetLang('NoImage3')); } } else { // Use JavaScript to hide the thumbnail field $GLOBALS['HideThumbnailField'] = "1"; } $GLOBALS['Price'] = FormatPrice($row['prodcalculatedprice']); $GLOBALS['StockExpand'] = " "; $GLOBALS['LowStockStyle'] = ""; if ($row['prodinvtrack'] == 0) { $GLOBALS['StockInfo'] = GetLang('NA'); } else if($row['prodinvtrack'] > 0) { $GLOBALS['StockExpand'] = sprintf("<a href=\"#\" onclick=\"ShowStock('%d', '%d', '%d'); return false;\"><img id=\"expand%d\" src=\"images/plus.gif\" align=\"left\" class=\"ExpandLink\" width=\"19\" height=\"16\" title=\"%s\" border=\"0\"></a>", $row['productid'], $row['prodinvtrack'], $row['prodvariationid'], $row['productid'], GetLang('ClickToViewStock')); $percent = 0; if($row['prodlowinv'] > 0) { $percent = ceil(($row['currentinv'] / ($row['prodlowinv'] * 2)) * 100); } elseif ($row['currentinv'] > 0) { $percent = 100; } if($percent > 100) { $percent = 100; } if($percent > 75) { $stockClass = 'InStock'; $orderMore = GetLang('SNo'); } else if($percent > 50) { $stockClass = 'StockWarning'; $orderMore = GetLang('Soon'); } else { $stockClass = 'LowStock'; $orderMore = GetLang('SYes'); } $width = ceil(($percent/100)*72); $stockInfo = sprintf(GetLang('CurrentStockLevel').': %s<br />'.GetLang('LowStockLevel1').': %s<br />'.GetLang('OrderMore').': '.$orderMore, $row['currentinv'], $row['prodlowinv'], $orderMore); $GLOBALS['StockInfo'] = sprintf("<div class=\"StockLevelIndicator\" onmouseover=\"ShowQuickHelp(this, '%s', '%s')\" onmouseout=\"HideQuickHelp(this)\"><span class=\"%s\" style=\"width: %spx\"></span></div>", GetLang('StockLevel'), $stockInfo, $stockClass, $width); } // If they have permission to edit products, they can change // the visibility status of a product by clicking on the icon if ($GLOBALS["ISC_CLASS_ADMIN_AUTH"]->HasPermission(AUTH_Edit_Products)) { if ($row['prodvisible'] == 1) { $GLOBALS['Visible'] = sprintf("<a title='%s' href='index.php?ToDo=editProductVisibility&prodId=%d&visible=0' onclick=\"quickToggle(this, 'visible'); return false;\"><img border='0' src='images/tick.gif' alt='tick'></a>", GetLang('ClickToHide'), $row['productid']); } else { $GLOBALS['Visible'] = sprintf("<a title='%s' href='index.php?ToDo=editProductVisibility&prodId=%d&visible=1' onclick=\"quickToggle(this, 'visible'); return false;\"><img border='0' src='images/cross.gif' alt='cross'></a>", GetLang('ClickToShow'), $row['productid']); } } else { if ($row['prodvisible'] == 1) { $GLOBALS['Visible'] = '<img border="0" src="images/tick.gif" alt="tick">'; } else { $GLOBALS['Visible'] = '<img border="0" src="images/cross.gif" alt="cross">'; } } // If they have permission to edit products, they can change // the featured status of a product by clicking on the icon if($GLOBALS['ISC_CLASS_ADMIN_AUTH']->GetVendorId()) { $featuredColumn = 'prodvendorfeatured'; } else { $featuredColumn = 'prodfeatured'; } if ($GLOBALS["ISC_CLASS_ADMIN_AUTH"]->HasPermission(AUTH_Edit_Products)) { if ($row[$featuredColumn] == 1) { $GLOBALS['Featured'] = sprintf("<a title='%s' href='index.php?ToDo=editProductFeatured&prodId=%d&featured=0' onclick=\"quickToggle(this, 'featured'); return false;\"><img border='0' src='images/tick.gif' alt='tick'></a>", GetLang('ClickToHide'), $row['productid']); } else { $GLOBALS['Featured'] = sprintf("<a title='%s' href='index.php?ToDo=editProductFeatured&prodId=%d&featured=1' onclick=\"quickToggle(this, 'featured'); return false;\"><img border='0' src='images/cross.gif' alt='cross'></a>", GetLang('ClickToShow'), $row['productid']); } } else { if ($row[$featuredColumn] == 1) { $GLOBALS['Featured'] = '<img border="0" src="images/tick.gif" alt="tick">'; } else { $GLOBALS['Featured'] = '<img border="0" src="images/cross.gif" alt="cross">'; } } // Workout the edit link -- do they have permission to do so? if ($GLOBALS["ISC_CLASS_ADMIN_AUTH"]->HasPermission(AUTH_Edit_Products)) { $GLOBALS['EditProductLink'] = sprintf("<a title='%s' class='Action' href='index.php?ToDo=editProduct&productId=%d'>%s</a>", GetLang('ProductEdit'), $row['productid'], GetLang('Edit')); } else { $GLOBALS['EditProductLink'] = sprintf("<a class='Action' disabled>%s</a>", GetLang('Edit')); } $allowpurchases = (int)$row['prodallowpurchases']; $prodpreorder = (int)$row['prodpreorder']; $status = GetLang('CatalogueOnly'); if ($allowpurchases) { if ($prodpreorder) { $status= GetLang('PreOrder'); } else { $status = GetLang('Selling'); } } $GLOBALS['Status'] = $status; $GLOBALS['CopyProductLink'] = "<a title='".GetLang('ProductCopy')."' class='Action' href='index.php?ToDo=copyProduct&productId=".$row['productid']."'>".GetLang('Copy')."</a>"; $GLOBALS['ProductGrid'] .= $this->template->render('product.manage.row.tpl'); } } if($GLOBALS['ProductGrid'] == '') { if(isset($_REQUEST['letter'])) { $GLOBALS['ProductGrid'] = sprintf('<tr> <td colspan="11" style="padding:10px"><em>%s</em></td> </tr>', sprintf(GetLang('LetterSortNoResults'), isc_strtoupper($_REQUEST['letter']))); } } return $this->template->render('products.manage.grid.tpl'); }