This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
zencartmods [2011/03/30 22:16] daigo |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ===== Improving Coupon Reports ===== | ||
- | Want to know how much was 'saved' by your customers by using a discount coupon? Here is a mod for v1.38 that will add it in the Admin coupon report. Enjoy :) | ||
- | in **admin/coupon_admin.php** change lines 455+ to the following, adding the two statements marked "START MOD" and "END MOD" | ||
- | |||
- | <code php> | ||
- | <?php | ||
- | $heading = array(); | ||
- | $contents = array(); | ||
- | $coupon_desc = $db->Execute("select coupon_name | ||
- | from " . TABLE_COUPONS_DESCRIPTION . " | ||
- | where coupon_id = '" . $_GET['cid'] . "' | ||
- | and language_id = '" . $_SESSION['languages_id'] . "'"); | ||
- | $count_customers = $db->Execute("select * from " . TABLE_COUPON_REDEEM_TRACK . " | ||
- | where coupon_id = '" . $_GET['cid'] . "' | ||
- | and customer_id = '" . $cInfo->customer_id . "'"); | ||
- | // START MOD | ||
- | $coupon_saved = $db->Execute("SELECT sum(value) as saved FROM " . TABLE_COUPON_REDEEM_TRACK . ", " . TABLE_ORDERS_TOTAL . " WHERE coupon_id = " . $_GET['cid'] . " AND orders_id = order_id AND class = 'ot_coupon'"); | ||
- | // END MOD | ||
- | $heading[] = array('text' => '<b>[' . $_GET['cid'] . ']' . COUPON_NAME . ' ' . $coupon_desc->fields['coupon_name'] . '</b>'); | ||
- | $contents[] = array('text' => '<b>' . TEXT_REDEMPTIONS . '</b>'); | ||
- | // $contents[] = array('text' => TEXT_REDEMPTIONS_TOTAL . '=' . $cc_list->RecordCount()); | ||
- | $contents[] = array('text' => TEXT_REDEMPTIONS_TOTAL . '=' . $cc_query_numrows); | ||
- | $contents[] = array('text' => TEXT_REDEMPTIONS_CUSTOMER . '=' . $count_customers->RecordCount()); | ||
- | // START MOD | ||
- | $contents[] = array('text' => TEXT_REDEMPTIONS_SAVED . '=' . $coupon_saved->fields['saved']); | ||
- | // END MOD | ||
- | $contents[] = array('text' => ''); | ||
- | ?> | ||
- | </code> | ||
- | |||
- | ===== Allowing + in email ===== | ||
- | Line 548 of includes/functions/functions_email.php | ||
- | <code> | ||
- | $valid_email_pattern = '^[a-z0-9]+[a-z0-9_\.\'\-\+]*@[a-z0-9]+[a-z0-9\.\-]*\.(([a-z]{2,6})|([0-9]{1,3}))$'; | ||
- | </code> | ||
- | |||
- | |||
- | ===== Adding a barcode to invoices ===== | ||
- | |||
- | |||
- | upload barcode.php into /admin | ||
- | |||
- | <code php> | ||
- | <?php | ||
- | /*===========================================================================*/ | ||
- | /* PHP Barcode Image Generator v1.0 [9/28/2000] | ||
- | Copyright (C)2000 by Charles J. Scheffold - cs@sid6581.net | ||
- | |||
- | |||
- | --- | ||
- | UPDATE 5/10/2005 by C.Scheffold | ||
- | Changed FontHeight to -2 if no text is to be displayed (this eliminates | ||
- | the whitespace at the bottom of the image) | ||
- | --- | ||
- | UPDATE 03/12/2005 by C.Scheffold | ||
- | Added '-' character to translation table | ||
- | --- | ||
- | UPDATE 09/21/2002 by Laurent NAVARRO - ln@altidev.com - http://www.altidev.com | ||
- | Updated to be compatible with register_globals = off and on | ||
- | --- | ||
- | UPDATE 4/6/2001 - Important Note! This script was written with the assumption | ||
- | that "register_globals = On" is defined in your PHP.INI file! It will not | ||
- | work as-is and as described unless this is set. My PHP came with this | ||
- | enabled by default, but apparently many people have turned it off. Either | ||
- | turn it on or modify the startup code to pull the CGI variables in the old | ||
- | fashioned way (from the HTTP* arrays). If you just want to use the functions | ||
- | and pass the variables yourself, well then go on with your bad self. | ||
- | --- | ||
- | | ||
- | This code is hereby released into the public domain. | ||
- | Use it, abuse it, just don't get caught using it for something stupid. | ||
- | |||
- | |||
- | The only barcode type currently supported is Code 3 of 9. Don't ask about | ||
- | adding support for others! This is a script I wrote for my own use. I do | ||
- | plan to add more types as time permits but currently I only require | ||
- | Code 3 of 9 for my purposes. Just about every scanner on the market today | ||
- | can read it. | ||
- | |||
- | |||
- | PARAMETERS: | ||
- | ----------- | ||
- | $barcode = [required] The barcode you want to generate | ||
- | |||
- | |||
- | $type = (default=0) It's 0 for Code 3 of 9 (the only one supported) | ||
- | | ||
- | $width = (default=160) Width of image in pixels. The image MUST be wide | ||
- | enough to handle the length of the given value. The default | ||
- | value will probably be able to display about 6 digits. If you | ||
- | get an error message, make it wider! | ||
- | |||
- | |||
- | $height = (default=80) Height of image in pixels | ||
- | | ||
- | $format = (default=jpeg) Can be "jpeg", "png", or "gif" | ||
- | | ||
- | $quality = (default=100) For JPEG only: ranges from 0-100 | ||
- | |||
- | |||
- | $text = (default=1) 0 to disable text below barcode, >=1 to enable | ||
- | |||
- | |||
- | NOTE: You must have GD-1.8 or higher compiled into PHP | ||
- | in order to use PNG and JPEG. GIF images only work with | ||
- | GD-1.5 and lower. (http://www.boutell.com) | ||
- | |||
- | |||
- | ANOTHER NOTE: If you actually intend to print the barcodes | ||
- | and scan them with a scanner, I highly recommend choosing | ||
- | JPEG with a quality of 100. Most browsers can't seem to print | ||
- | a PNG without mangling it beyond recognition. | ||
- | |||
- | |||
- | USAGE EXAMPLES FOR ANY PLAIN OLD HTML DOCUMENT: | ||
- | ----------------------------------------------- | ||
- | |||
- | |||
- | <IMG SRC="barcode.php?barcode=HELLO&quality=75"> | ||
- | |||
- | |||
- | <IMG SRC="barcode.php?barcode=123456&width=320&height=200"> | ||
- | | ||
- | | ||
- | */ | ||
- | /*=============================================================================*/ | ||
- | |||
- | |||
- | //----------------------------------------------------------------------------- | ||
- | // Startup code | ||
- | //----------------------------------------------------------------------------- | ||
- | |||
- | |||
- | if(isset($_GET["text"])) $text=$_GET["text"]; | ||
- | if(isset($_GET["format"])) $format=$_GET["format"]; | ||
- | if(isset($_GET["quality"])) $quality=$_GET["quality"]; | ||
- | if(isset($_GET["width"])) $width=$_GET["width"]; | ||
- | if(isset($_GET["height"])) $height=$_GET["height"]; | ||
- | if(isset($_GET["type"])) $type=$_GET["type"]; | ||
- | if(isset($_GET["barcode"])) $barcode=$_GET["barcode"]; | ||
- | |||
- | |||
- | |||
- | |||
- | if (!isset ($text)) $text = 1; | ||
- | if (!isset ($type)) $type = 1; | ||
- | if (empty ($quality)) $quality = 100; | ||
- | if (empty ($width)) $width = 160; | ||
- | if (empty ($height)) $height = 80; | ||
- | if (!empty ($format)) $format = strtoupper ($format); | ||
- | else $format="PNG"; | ||
- | |||
- | |||
- | switch ($type) | ||
- | { | ||
- | default: | ||
- | $type = 1; | ||
- | case 1: | ||
- | Barcode39 ($barcode, $width, $height, $quality, $format, $text); | ||
- | break; | ||
- | } | ||
- | |||
- | |||
- | //----------------------------------------------------------------------------- | ||
- | // Generate a Code 3 of 9 barcode | ||
- | //----------------------------------------------------------------------------- | ||
- | function Barcode39 ($barcode, $width, $height, $quality, $format, $text) | ||
- | { | ||
- | switch ($format) | ||
- | { | ||
- | default: | ||
- | $format = "JPEG"; | ||
- | case "JPEG": | ||
- | header ("Content-type: image/jpeg"); | ||
- | break; | ||
- | case "PNG": | ||
- | header ("Content-type: image/png"); | ||
- | break; | ||
- | case "GIF": | ||
- | header ("Content-type: image/gif"); | ||
- | break; | ||
- | } | ||
- | |||
- | |||
- | $im = ImageCreate ($width, $height) | ||
- | or die ("Cannot Initialize new GD image stream"); | ||
- | $White = ImageColorAllocate ($im, 255, 255, 255); | ||
- | $Black = ImageColorAllocate ($im, 0, 0, 0); | ||
- | //ImageColorTransparent ($im, $White); | ||
- | ImageInterLace ($im, 1); | ||
- | |||
- | |||
- | |||
- | $NarrowRatio = 20; | ||
- | $WideRatio = 55; | ||
- | $QuietRatio = 35; | ||
- | |||
- | |||
- | $nChars = (strlen($barcode)+2) * ((6 * $NarrowRatio) + (3 * $WideRatio) + ($QuietRatio)); | ||
- | $Pixels = $width / $nChars; | ||
- | $NarrowBar = (int)(20 * $Pixels); | ||
- | $WideBar = (int)(55 * $Pixels); | ||
- | $QuietBar = (int)(35 * $Pixels); | ||
- | |||
- | |||
- | $ActualWidth = (($NarrowBar * 6) + ($WideBar*3) + $QuietBar) * (strlen ($barcode)+2); | ||
- | | ||
- | if (($NarrowBar == 0) || ($NarrowBar == $WideBar) || ($NarrowBar == $QuietBar) || ($WideBar == 0) || ($WideBar == $QuietBar) || ($QuietBar == 0)) | ||
- | { | ||
- | ImageString ($im, 1, 0, 0, "Image is too small!", $Black); | ||
- | OutputImage ($im, $format, $quality); | ||
- | exit; | ||
- | } | ||
- | | ||
- | $CurrentBarX = (int)(($width - $ActualWidth) / 2); | ||
- | $Color = $White; | ||
- | $BarcodeFull = "*".strtoupper ($barcode)."*"; | ||
- | settype ($BarcodeFull, "string"); | ||
- | | ||
- | $FontNum = 3; | ||
- | $FontHeight = ImageFontHeight ($FontNum); | ||
- | $FontWidth = ImageFontWidth ($FontNum); | ||
- | if ($text != 0) | ||
- | { | ||
- | $CenterLoc = (int)(($width-1) / 2) - (int)(($FontWidth * strlen($BarcodeFull)) / 2); | ||
- | ImageString ($im, $FontNum, $CenterLoc, $height-$FontHeight, "$BarcodeFull", $Black); | ||
- | } | ||
- | else | ||
- | { | ||
- | $FontHeight=-2; | ||
- | } | ||
- | |||
- | |||
- | for ($i=0; $i<strlen($BarcodeFull); $i++) | ||
- | { | ||
- | $StripeCode = Code39 ($BarcodeFull[$i]); | ||
- | |||
- | |||
- | for ($n=0; $n < 9; $n++) | ||
- | { | ||
- | if ($Color == $White) $Color = $Black; | ||
- | else $Color = $White; | ||
- | |||
- | |||
- | switch ($StripeCode[$n]) | ||
- | { | ||
- | case '0': | ||
- | ImageFilledRectangle ($im, $CurrentBarX, 0, $CurrentBarX+$NarrowBar, $height-1-$FontHeight-2, $Color); | ||
- | $CurrentBarX += $NarrowBar; | ||
- | break; | ||
- | |||
- | |||
- | case '1': | ||
- | ImageFilledRectangle ($im, $CurrentBarX, 0, $CurrentBarX+$WideBar, $height-1-$FontHeight-2, $Color); | ||
- | $CurrentBarX += $WideBar; | ||
- | break; | ||
- | } | ||
- | } | ||
- | |||
- | |||
- | $Color = $White; | ||
- | ImageFilledRectangle ($im, $CurrentBarX, 0, $CurrentBarX+$QuietBar, $height-1-$FontHeight-2, $Color); | ||
- | $CurrentBarX += $QuietBar; | ||
- | } | ||
- | |||
- | |||
- | OutputImage ($im, $format, $quality); | ||
- | } | ||
- | |||
- | |||
- | //----------------------------------------------------------------------------- | ||
- | // Output an image to the browser | ||
- | //----------------------------------------------------------------------------- | ||
- | function OutputImage ($im, $format, $quality) | ||
- | { | ||
- | switch ($format) | ||
- | { | ||
- | case "JPEG": | ||
- | ImageJPEG ($im, "", $quality); | ||
- | break; | ||
- | case "PNG": | ||
- | ImagePNG ($im); | ||
- | break; | ||
- | case "GIF": | ||
- | ImageGIF ($im); | ||
- | break; | ||
- | } | ||
- | } | ||
- | |||
- | |||
- | //----------------------------------------------------------------------------- | ||
- | // Returns the Code 3 of 9 value for a given ASCII character | ||
- | //----------------------------------------------------------------------------- | ||
- | function Code39 ($Asc) | ||
- | { | ||
- | switch ($Asc) | ||
- | { | ||
- | case ' ': | ||
- | return "011000100"; | ||
- | case '$': | ||
- | return "010101000"; | ||
- | case '%': | ||
- | return "000101010"; | ||
- | case '*': | ||
- | return "010010100"; // * Start/Stop | ||
- | case '+': | ||
- | return "010001010"; | ||
- | case '|': | ||
- | return "010000101"; | ||
- | case '.': | ||
- | return "110000100"; | ||
- | case '/': | ||
- | return "010100010"; | ||
- | case '-': | ||
- | return "010000101"; | ||
- | case '0': | ||
- | return "000110100"; | ||
- | case '1': | ||
- | return "100100001"; | ||
- | case '2': | ||
- | return "001100001"; | ||
- | case '3': | ||
- | return "101100000"; | ||
- | case '4': | ||
- | return "000110001"; | ||
- | case '5': | ||
- | return "100110000"; | ||
- | case '6': | ||
- | return "001110000"; | ||
- | case '7': | ||
- | return "000100101"; | ||
- | case '8': | ||
- | return "100100100"; | ||
- | case '9': | ||
- | return "001100100"; | ||
- | case 'A': | ||
- | return "100001001"; | ||
- | case 'B': | ||
- | return "001001001"; | ||
- | case 'C': | ||
- | return "101001000"; | ||
- | case 'D': | ||
- | return "000011001"; | ||
- | case 'E': | ||
- | return "100011000"; | ||
- | case 'F': | ||
- | return "001011000"; | ||
- | case 'G': | ||
- | return "000001101"; | ||
- | case 'H': | ||
- | return "100001100"; | ||
- | case 'I': | ||
- | return "001001100"; | ||
- | case 'J': | ||
- | return "000011100"; | ||
- | case 'K': | ||
- | return "100000011"; | ||
- | case 'L': | ||
- | return "001000011"; | ||
- | case 'M': | ||
- | return "101000010"; | ||
- | case 'N': | ||
- | return "000010011"; | ||
- | case 'O': | ||
- | return "100010010"; | ||
- | case 'P': | ||
- | return "001010010"; | ||
- | case 'Q': | ||
- | return "000000111"; | ||
- | case 'R': | ||
- | return "100000110"; | ||
- | case 'S': | ||
- | return "001000110"; | ||
- | case 'T': | ||
- | return "000010110"; | ||
- | case 'U': | ||
- | return "110000001"; | ||
- | case 'V': | ||
- | return "011000001"; | ||
- | case 'W': | ||
- | return "111000000"; | ||
- | case 'X': | ||
- | return "010010001"; | ||
- | case 'Y': | ||
- | return "110010000"; | ||
- | case 'Z': | ||
- | return "011010000"; | ||
- | default: | ||
- | return "011000100"; | ||
- | } | ||
- | } | ||
- | |||
- | |||
- | ?> | ||
- | </code> | ||
- | |||
- | |||
- | Copy this into admin/invoice.php whereever you want the barcode | ||
- | |||
- | <code php> | ||
- | <?php echo '<img src="barcode.php?barcode=' . $oID . '&width=250&height=50" />'; ?>; | ||
- | </code> |