| 
<?php/*
 *  Module written by Herman Kuiper <[email protected]>
 *
 *  License Information:
 *
 *    Spreadsheet_Excel_Writer:  A library for generating Excel Spreadsheets
 *    Copyright (c) 2002-2003 Xavier Noguer [email protected]
 *
 *    This library is free software; you can redistribute it and/or
 *    modify it under the terms of the GNU Lesser General Public
 *    License as published by the Free Software Foundation; either
 *    version 2.1 of the License, or (at your option) any later version.
 *
 *    This library is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *    Lesser General Public License for more details.
 *
 *    You should have received a copy of the GNU Lesser General Public
 *    License along with this library; if not, write to the Free Software
 *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
 
 //require_once('PEAR.php');
 
 // Possible operator types
 
 /*
 FIXME: change prefixes
 */
 define("OP_BETWEEN",    0x00);
 define("OP_NOTBETWEEN", 0x01);
 define("OP_EQUAL",      0x02);
 define("OP_NOTEQUAL",   0x03);
 define("OP_GT",         0x04);
 define("OP_LT",         0x05);
 define("OP_GTE",        0x06);
 define("OP_LTE",        0x07);
 
 /**
 * Baseclass for generating Excel DV records (validations)
 *
 * @author   Herman Kuiper
 * @category FileFormats
 * @package  Spreadsheet_Excel_Writer
 */
 class Spreadsheet_Excel_Writer_Validator
 {
 var $_type;
 var $_style;
 var $_fixedList;
 var $_blank;
 var $_incell;
 var $_showprompt;
 var $_showerror;
 var $_title_prompt;
 var $_descr_prompt;
 var $_title_error;
 var $_descr_error;
 var $_operator;
 var $_formula1;
 var $_formula2;
 /**
 * The parser from the workbook. Used to parse validation formulas also
 * @var Spreadsheet_Excel_Writer_Parser
 */
 var $_parser;
 
 function Spreadsheet_Excel_Writer_Validator(&$parser)
 {
 $this->_parser       = $parser;
 $this->_type         = 0x01; // FIXME: add method for setting datatype
 $this->_style        = 0x00;
 $this->_fixedList    = false;
 $this->_blank        = false;
 $this->_incell       = false;
 $this->_showprompt   = false;
 $this->_showerror    = true;
 $this->_title_prompt = "\x00";
 $this->_descr_prompt = "\x00";
 $this->_title_error  = "\x00";
 $this->_descr_error  = "\x00";
 $this->_operator     = 0x00; // default is equal
 $this->_formula1    = '';
 $this->_formula2    = '';
 }
 
 function setPrompt($promptTitle = "\x00", $promptDescription = "\x00", $showPrompt = true)
 {
 $this->_showprompt = $showPrompt;
 $this->_title_prompt = $promptTitle;
 $this->_descr_prompt = $promptDescription;
 }
 
 function setError($errorTitle = "\x00", $errorDescription = "\x00", $showError = true)
 {
 $this->_showerror = $showError;
 $this->_title_error = $errorTitle;
 $this->_descr_error = $errorDescription;
 }
 
 function allowBlank()
 {
 $this->_blank = true;
 }
 
 function onInvalidStop()
 {
 $this->_style = 0x00;
 }
 
 function onInvalidWarn()
 {
 $this->_style = 0x01;
 }
 
 function onInvalidInfo()
 {
 $this->_style = 0x02;
 }
 
 function setFormula1($formula)
 {
 // Parse the formula using the parser in Parser.php
 $error = $this->_parser->parse($formula);
 if (PEAR::isError($error)) {
 return $this->_formula1;
 }
 
 $this->_formula1 = $this->_parser->toReversePolish();
 if (PEAR::isError($this->_formula1)) {
 return $this->_formula1;
 }
 return true;
 }
 
 function setFormula2($formula)
 {
 // Parse the formula using the parser in Parser.php
 $error = $this->_parser->parse($formula);
 if (PEAR::isError($error)) {
 return $this->_formula2;
 }
 
 $this->_formula2 = $this->_parser->toReversePolish();
 if (PEAR::isError($this->_formula2)) {
 return $this->_formula2;
 }
 return true;
 }
 
 function _getOptions()
 {
 $options = $this->_type;
 $options |= $this->_style << 3;
 if ($this->_fixedList) {
 $options |= 0x80;
 }
 if ($this->_blank) {
 $options |= 0x100;
 }
 if (!$this->_incell) {
 $options |= 0x200;
 }
 if ($this->_showprompt) {
 $options |= 0x40000;
 }
 if ($this->_showerror) {
 $options |= 0x80000;
 }
 $options |= $this->_operator << 20;
 
 return $options;
 }
 
 function _getData()
 {
 $title_prompt_len = strlen($this->_title_prompt);
 $descr_prompt_len = strlen($this->_descr_prompt);
 $title_error_len = strlen($this->_title_error);
 $descr_error_len = strlen($this->_descr_error);
 
 $formula1_size = strlen($this->_formula1);
 $formula2_size = strlen($this->_formula2);
 
 $data  = pack("V", $this->_getOptions());
 $data .= pack("vC", $title_prompt_len, 0x00) . $this->_title_prompt;
 $data .= pack("vC", $title_error_len, 0x00) . $this->_title_error;
 $data .= pack("vC", $descr_prompt_len, 0x00) . $this->_descr_prompt;
 $data .= pack("vC", $descr_error_len, 0x00) . $this->_descr_error;
 
 $data .= pack("vv", $formula1_size, 0x0000) . $this->_formula1;
 $data .= pack("vv", $formula2_size, 0x0000) . $this->_formula2;
 
 return $data;
 }
 }
 
 
 |