| 1604 | raphael | 1 | <?php
 | 
        
           |  |  | 2 | /*
 | 
        
           |  |  | 3 | *  Module written by Herman Kuiper <herman@ozuzo.net>
 | 
        
           |  |  | 4 | *
 | 
        
           |  |  | 5 | *  License Information:
 | 
        
           |  |  | 6 | *
 | 
        
           |  |  | 7 | *    Spreadsheet_Excel_Writer:  A library for generating Excel Spreadsheets
 | 
        
           |  |  | 8 | *    Copyright (c) 2002-2003 Xavier Noguer xnoguer@rezebra.com
 | 
        
           |  |  | 9 | *
 | 
        
           |  |  | 10 | *    This library is free software; you can redistribute it and/or
 | 
        
           |  |  | 11 | *    modify it under the terms of the GNU Lesser General Public
 | 
        
           |  |  | 12 | *    License as published by the Free Software Foundation; either
 | 
        
           |  |  | 13 | *    version 2.1 of the License, or (at your option) any later version.
 | 
        
           |  |  | 14 | *
 | 
        
           |  |  | 15 | *    This library is distributed in the hope that it will be useful,
 | 
        
           |  |  | 16 | *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
        
           |  |  | 17 | *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
        
           |  |  | 18 | *    Lesser General Public License for more details.
 | 
        
           |  |  | 19 | *
 | 
        
           |  |  | 20 | *    You should have received a copy of the GNU Lesser General Public
 | 
        
           |  |  | 21 | *    License along with this library; if not, write to the Free Software
 | 
        
           |  |  | 22 | *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | 
        
           |  |  | 23 | */
 | 
        
           |  |  | 24 |   | 
        
           |  |  | 25 | //require_once('PEAR.php');
 | 
        
           |  |  | 26 |   | 
        
           |  |  | 27 | // Possible operator types
 | 
        
           |  |  | 28 |   | 
        
           |  |  | 29 | /*
 | 
        
           |  |  | 30 | FIXME: change prefixes
 | 
        
           |  |  | 31 | */
 | 
        
           |  |  | 32 | define("OP_BETWEEN",    0x00);
 | 
        
           |  |  | 33 | define("OP_NOTBETWEEN", 0x01);
 | 
        
           |  |  | 34 | define("OP_EQUAL",      0x02);
 | 
        
           |  |  | 35 | define("OP_NOTEQUAL",   0x03);
 | 
        
           |  |  | 36 | define("OP_GT",         0x04);
 | 
        
           |  |  | 37 | define("OP_LT",         0x05);
 | 
        
           |  |  | 38 | define("OP_GTE",        0x06);
 | 
        
           |  |  | 39 | define("OP_LTE",        0x07);
 | 
        
           |  |  | 40 |   | 
        
           |  |  | 41 | /**
 | 
        
           |  |  | 42 | * Baseclass for generating Excel DV records (validations)
 | 
        
           |  |  | 43 | *
 | 
        
           |  |  | 44 | * @author   Herman Kuiper
 | 
        
           |  |  | 45 | * @category FileFormats
 | 
        
           |  |  | 46 | * @package  Spreadsheet_Excel_Writer
 | 
        
           |  |  | 47 | */
 | 
        
           |  |  | 48 | class Spreadsheet_Excel_Writer_Validator
 | 
        
           |  |  | 49 | {
 | 
        
           |  |  | 50 |    var $_type;
 | 
        
           |  |  | 51 |    var $_style;
 | 
        
           |  |  | 52 |    var $_fixedList;
 | 
        
           |  |  | 53 |    var $_blank;
 | 
        
           |  |  | 54 |    var $_incell;
 | 
        
           |  |  | 55 |    var $_showprompt;
 | 
        
           |  |  | 56 |    var $_showerror;
 | 
        
           |  |  | 57 |    var $_title_prompt;
 | 
        
           |  |  | 58 |    var $_descr_prompt;
 | 
        
           |  |  | 59 |    var $_title_error;
 | 
        
           |  |  | 60 |    var $_descr_error;
 | 
        
           |  |  | 61 |    var $_operator;
 | 
        
           |  |  | 62 |    var $_formula1;
 | 
        
           |  |  | 63 |    var $_formula2;
 | 
        
           |  |  | 64 |     /**
 | 
        
           |  |  | 65 |     * The parser from the workbook. Used to parse validation formulas also
 | 
        
           |  |  | 66 |     * @var Spreadsheet_Excel_Writer_Parser
 | 
        
           |  |  | 67 |     */
 | 
        
           |  |  | 68 |     var $_parser;
 | 
        
           |  |  | 69 |   | 
        
           |  |  | 70 |     function Spreadsheet_Excel_Writer_Validator(&$parser)
 | 
        
           |  |  | 71 |     {
 | 
        
           |  |  | 72 |         $this->_parser       = $parser;
 | 
        
           |  |  | 73 |         $this->_type         = 0x01; // FIXME: add method for setting datatype
 | 
        
           |  |  | 74 |         $this->_style        = 0x00;
 | 
        
           |  |  | 75 |         $this->_fixedList    = false;
 | 
        
           |  |  | 76 |         $this->_blank        = false;
 | 
        
           |  |  | 77 |         $this->_incell       = false;
 | 
        
           |  |  | 78 |         $this->_showprompt   = false;
 | 
        
           |  |  | 79 |         $this->_showerror    = true;
 | 
        
           |  |  | 80 |         $this->_title_prompt = "\x00";
 | 
        
           |  |  | 81 |         $this->_descr_prompt = "\x00";
 | 
        
           |  |  | 82 |         $this->_title_error  = "\x00";
 | 
        
           |  |  | 83 |         $this->_descr_error  = "\x00";
 | 
        
           |  |  | 84 |         $this->_operator     = 0x00; // default is equal
 | 
        
           |  |  | 85 |         $this->_formula1    = '';
 | 
        
           |  |  | 86 |         $this->_formula2    = '';
 | 
        
           |  |  | 87 |     }
 | 
        
           |  |  | 88 |   | 
        
           |  |  | 89 |    function setPrompt($promptTitle = "\x00", $promptDescription = "\x00", $showPrompt = true)
 | 
        
           |  |  | 90 |    {
 | 
        
           |  |  | 91 |       $this->_showprompt = $showPrompt;
 | 
        
           |  |  | 92 |       $this->_title_prompt = $promptTitle;
 | 
        
           |  |  | 93 |       $this->_descr_prompt = $promptDescription;
 | 
        
           |  |  | 94 |    }
 | 
        
           |  |  | 95 |   | 
        
           |  |  | 96 |    function setError($errorTitle = "\x00", $errorDescription = "\x00", $showError = true)
 | 
        
           |  |  | 97 |    {
 | 
        
           |  |  | 98 |       $this->_showerror = $showError;
 | 
        
           |  |  | 99 |       $this->_title_error = $errorTitle;
 | 
        
           |  |  | 100 |       $this->_descr_error = $errorDescription;
 | 
        
           |  |  | 101 |    }
 | 
        
           |  |  | 102 |   | 
        
           |  |  | 103 |    function allowBlank()
 | 
        
           |  |  | 104 |    {
 | 
        
           |  |  | 105 |       $this->_blank = true;
 | 
        
           |  |  | 106 |    }
 | 
        
           |  |  | 107 |   | 
        
           |  |  | 108 |    function onInvalidStop()
 | 
        
           |  |  | 109 |    {
 | 
        
           |  |  | 110 |       $this->_style = 0x00;
 | 
        
           |  |  | 111 |    }
 | 
        
           |  |  | 112 |   | 
        
           |  |  | 113 |     function onInvalidWarn()
 | 
        
           |  |  | 114 |     {
 | 
        
           |  |  | 115 |         $this->_style = 0x01;
 | 
        
           |  |  | 116 |     }
 | 
        
           |  |  | 117 |   | 
        
           |  |  | 118 |     function onInvalidInfo()
 | 
        
           |  |  | 119 |     {
 | 
        
           |  |  | 120 |         $this->_style = 0x02;
 | 
        
           |  |  | 121 |     }
 | 
        
           |  |  | 122 |   | 
        
           |  |  | 123 |     function setFormula1($formula)
 | 
        
           |  |  | 124 |     {
 | 
        
           |  |  | 125 |         // Parse the formula using the parser in Parser.php
 | 
        
           |  |  | 126 |         $error = $this->_parser->parse($formula);
 | 
        
           |  |  | 127 |         if (PEAR::isError($error)) {
 | 
        
           |  |  | 128 |             return $this->_formula1;
 | 
        
           |  |  | 129 |         }
 | 
        
           |  |  | 130 |   | 
        
           |  |  | 131 |         $this->_formula1 = $this->_parser->toReversePolish();
 | 
        
           |  |  | 132 |         if (PEAR::isError($this->_formula1)) {
 | 
        
           |  |  | 133 |             return $this->_formula1;
 | 
        
           |  |  | 134 |         }
 | 
        
           |  |  | 135 |         return true;
 | 
        
           |  |  | 136 |     }
 | 
        
           |  |  | 137 |   | 
        
           |  |  | 138 |     function setFormula2($formula)
 | 
        
           |  |  | 139 |     {
 | 
        
           |  |  | 140 |         // Parse the formula using the parser in Parser.php
 | 
        
           |  |  | 141 |         $error = $this->_parser->parse($formula);
 | 
        
           |  |  | 142 |         if (PEAR::isError($error)) {
 | 
        
           |  |  | 143 |             return $this->_formula2;
 | 
        
           |  |  | 144 |         }
 | 
        
           |  |  | 145 |   | 
        
           |  |  | 146 |         $this->_formula2 = $this->_parser->toReversePolish();
 | 
        
           |  |  | 147 |         if (PEAR::isError($this->_formula2)) {
 | 
        
           |  |  | 148 |             return $this->_formula2;
 | 
        
           |  |  | 149 |         }
 | 
        
           |  |  | 150 |         return true;
 | 
        
           |  |  | 151 |     }
 | 
        
           |  |  | 152 |   | 
        
           |  |  | 153 |     function _getOptions()
 | 
        
           |  |  | 154 |     {
 | 
        
           |  |  | 155 |         $options = $this->_type;
 | 
        
           |  |  | 156 |         $options |= $this->_style << 3;
 | 
        
           |  |  | 157 |         if ($this->_fixedList) {
 | 
        
           |  |  | 158 |             $options |= 0x80;
 | 
        
           |  |  | 159 |         }
 | 
        
           |  |  | 160 |         if ($this->_blank) {
 | 
        
           |  |  | 161 |             $options |= 0x100;
 | 
        
           |  |  | 162 |         }
 | 
        
           |  |  | 163 |         if (!$this->_incell) {
 | 
        
           |  |  | 164 |             $options |= 0x200;
 | 
        
           |  |  | 165 |         }
 | 
        
           |  |  | 166 |         if ($this->_showprompt) {
 | 
        
           |  |  | 167 |             $options |= 0x40000;
 | 
        
           |  |  | 168 |         }
 | 
        
           |  |  | 169 |         if ($this->_showerror) {
 | 
        
           |  |  | 170 |             $options |= 0x80000;
 | 
        
           |  |  | 171 |         }
 | 
        
           |  |  | 172 |       $options |= $this->_operator << 20;
 | 
        
           |  |  | 173 |   | 
        
           |  |  | 174 |       return $options;
 | 
        
           |  |  | 175 |    }
 | 
        
           |  |  | 176 |   | 
        
           |  |  | 177 |    function _getData()
 | 
        
           |  |  | 178 |    {
 | 
        
           |  |  | 179 |       $title_prompt_len = strlen($this->_title_prompt);
 | 
        
           |  |  | 180 |       $descr_prompt_len = strlen($this->_descr_prompt);
 | 
        
           |  |  | 181 |       $title_error_len = strlen($this->_title_error);
 | 
        
           |  |  | 182 |       $descr_error_len = strlen($this->_descr_error);
 | 
        
           |  |  | 183 |   | 
        
           |  |  | 184 |       $formula1_size = strlen($this->_formula1);
 | 
        
           |  |  | 185 |       $formula2_size = strlen($this->_formula2);
 | 
        
           |  |  | 186 |   | 
        
           |  |  | 187 |       $data  = pack("V", $this->_getOptions());
 | 
        
           |  |  | 188 |       $data .= pack("vC", $title_prompt_len, 0x00) . $this->_title_prompt;
 | 
        
           |  |  | 189 |       $data .= pack("vC", $title_error_len, 0x00) . $this->_title_error;
 | 
        
           |  |  | 190 |       $data .= pack("vC", $descr_prompt_len, 0x00) . $this->_descr_prompt;
 | 
        
           |  |  | 191 |       $data .= pack("vC", $descr_error_len, 0x00) . $this->_descr_error;
 | 
        
           |  |  | 192 |   | 
        
           |  |  | 193 |       $data .= pack("vv", $formula1_size, 0x0000) . $this->_formula1;
 | 
        
           |  |  | 194 |       $data .= pack("vv", $formula2_size, 0x0000) . $this->_formula2;
 | 
        
           |  |  | 195 |   | 
        
           |  |  | 196 |       return $data;
 | 
        
           |  |  | 197 |    }
 | 
        
           |  |  | 198 | }
 | 
        
           |  |  | 199 |   | 
        
           |  |  | 200 | /*class Spreadsheet_Excel_Writer_Validation_List extends Spreadsheet_Excel_Writer_Validation
 | 
        
           |  |  | 201 | {
 | 
        
           |  |  | 202 |    function Spreadsheet_Excel_Writer_Validation_list()
 | 
        
           |  |  | 203 |    {
 | 
        
           |  |  | 204 |       parent::Spreadsheet_Excel_Writer_Validation();
 | 
        
           |  |  | 205 |       $this->_type = 0x03;
 | 
        
           |  |  | 206 |    }
 | 
        
           |  |  | 207 |   | 
        
           |  |  | 208 |    function setList($source, $incell = true)
 | 
        
           |  |  | 209 |    {
 | 
        
           |  |  | 210 |       $this->_incell = $incell;
 | 
        
           |  |  | 211 |       $this->_fixedList = true;
 | 
        
           |  |  | 212 |   | 
        
           |  |  | 213 |       $source = implode("\x00", $source);
 | 
        
           |  |  | 214 |       $this->_formula1 = pack("CCC", 0x17, strlen($source), 0x0c) . $source;
 | 
        
           |  |  | 215 |    }
 | 
        
           |  |  | 216 |   | 
        
           |  |  | 217 |    function setRow($row, $col1, $col2, $incell = true)
 | 
        
           |  |  | 218 |    {
 | 
        
           |  |  | 219 |       $this->_incell = $incell;
 | 
        
           |  |  | 220 |       //$this->_formula1 = ...;
 | 
        
           |  |  | 221 |    }
 | 
        
           |  |  | 222 |   | 
        
           |  |  | 223 |    function setCol($col, $row1, $row2, $incell = true)
 | 
        
           |  |  | 224 |    {
 | 
        
           |  |  | 225 |       $this->_incell = $incell;
 | 
        
           |  |  | 226 |       //$this->_formula1 = ...;
 | 
        
           |  |  | 227 |    }
 | 
        
           |  |  | 228 | }*/
 | 
        
           |  |  | 229 |   | 
        
           |  |  | 230 | ?>
 |