<?php
 
//
 
// +----------------------------------------------------------------------+
 
// | Ship Form - class to copy data between forms                         |
 
// +----------------------------------------------------------------------+
 
// | With this class you can copy all data between forms. This class      |
 
// | use JavaScript and was tested under IE and Netscape.                 |
 
// | I suggest you to use this class with Abstract.php class beacuase     |
 
// | data model and functions used here are similar with this in          |
 
// | Abstract, for more info see: http://www.phazer.dk/php/               |
 
// | If you have any suggestions or find some bug write: [email protected]   |
 
// +----------------------------------------------------------------------+
 
// | Authors: Radoslaw Maciaszek <[email protected]>                         |
 
// +----------------------------------------------------------------------+
 
//
 
// $Id: ShipForm.php v 1.0 2002/07/08 14:16:02 wodzu Exp $
 
//
 
 
if(!defined('SHIP_STANDARD')) define('SHIP_STANDARD', 0);
 
if(!defined('SHIP_SUM'))      define('SHIP_SUM',      1);
 
if(!defined('SHIP_ADD_ALL'))  define('SHIP_ADD_ALL',  2);
 
if(!defined('SHIP_ADD_SUM'))  define('SHIP_ADD_SUM',  3);
 
 
require( 'AbstractForm.php' );
 
 
/**
 
* Base class 
 
* 
 
* @access   public
 
*/
 
class ShipForm {
 
    
 
    var $form_name;
 
    var $text_fields;
 
    var $radio_buttons;
 
    var $checkbox_fields;
 
    
 
    var $shipData = array();
 
    var $Ids = array();
 
    var $descrArray = array();
 
    
 
    var $_shipForm_name = "shipForm";
 
    
 
    // contructor
 
    function ShipForm( 
 
            
 
            // name f the form
 
            $form_name,
 
            
 
            // array nclude names of text inputs
 
            $text_fields = array(),
 
            
 
            // array include names of radio buttons
 
            $radio_buttons = array(),
 
            
 
            // associative array
 
            // which contains key => val
 
            // key is name of the group
 
            // val is array of indexes for key
 
            // see example below
 
            $checkbox_fields = array(),
 
            
 
            $selected_fields = array(),
 
            
 
            $clear = true
 
            
 
            ) {
 
        
 
        $this->form_name = $form_name;
 
        $this->text_fields = $text_fields;
 
        $this->radio_buttons = $radio_buttons;
 
        $this->checkbox_fields = $checkbox_fields;
 
        $this->selected_fields = $selected_fields;
 
        
 
        $this->clear = $clear;
 
    }
 
    
 
    function AddData($id, $descr, $valFromArray = array() ) {
 
        // if data id already exist make new id
 
        if(in_array($id,$this->Ids)) {
 
            $id = max( $this->Ids ) + 1;
 
        }
 
        array_push($this->Ids, $id);
 
        array_push($this->descrArray, $descr);
 
        
 
        $textArray = array();
 
        // todo change line feed in other OS
 
        foreach($this->text_fields as $field_name) {
 
            if(isset($valFromArray[$field_name])) {
 
                $textArray[] = ereg_replace( "\r\n", "'\r\n + '", 
 
                                addslashes( $valFromArray[$field_name]) );
 
            } else {
 
                $textArray[] = "";
 
            }
 
        }
 
        $textJsArray = $this->makeArray( $textArray );
 
 
        $radioArray = array();
 
        foreach($this->radio_buttons as $field_name) {
 
            if(isset($valFromArray[$field_name])) {
 
                $radioArray[] = $valFromArray[$field_name];
 
            } else {
 
                $radioArray[] = "0";
 
            }
 
        }
 
        $radioJsArray = $this->makeArray( $radioArray );
 
 
        $selectedArray = array();
 
        foreach($this->selected_fields as $field_name) {
 
            if(isset($valFromArray[$field_name])) {
 
                $selectedArray[] = $valFromArray[$field_name];
 
            } else {
 
                $selectedArray[] = "-1";
 
            }
 
        }
 
        $selectedJsArray = $this->makeArray( $selectedArray );
 
 
        $checkboxArray = array();
 
        foreach($this->checkbox_fields as $field_name => $fieldArray) {
 
            if(isset($valFromArray[$field_name])) {
 
                $indexedArray = array();
 
                if(is_array($valFromArray[$field_name])) {
 
                        $checkboxArray[$field_name] = 
 
                            $this->setIndexes($valFromArray[$field_name]);
 
                }
 
            } else {
 
                $checkboxArray[$field_name] = array();
 
            }
 
        }
 
        $checkboxJsArray = array();
 
        foreach( $checkboxArray as $key => $val ) {
 
            $checkboxJsArray[$key] = $this->makeArray( $val );
 
        }
 
        $checkboxAllJsArray =& $this->makeArray( $checkboxJsArray );
 
        
 
        $this->shipData[$id]  = "data['".$id."'] = new DataContainer( ";
 
        $this->shipData[$id] .= $textJsArray.", ";
 
        $this->shipData[$id] .= $radioJsArray.", ";
 
        $this->shipData[$id] .= $checkboxAllJsArray.", ";
 
        $this->shipData[$id] .= $selectedJsArray." );\n\n";
 
    }
 
    
 
    function setIndexes( $array ) {
 
        foreach( $array as $key => $val ) {
 
            if( $val == "on" ) $array[$key] = $key;
 
        }
 
        return $array;
 
    }
 
    
 
    function makeArray( $array ) {
 
        if(is_array($array)) {
 
            $strArray = " new Array( ";
 
            $s = "";
 
            foreach( $array as $val ) {
 
                if(strpos($val, "new")===false) {
 
                    $strArray .= $s."'".$val."'";
 
                } else {
 
                    $strArray .= $s.$val;
 
                }
 
                $s = ", ";
 
            }
 
            $strArray .= ")";
 
            return $strArray;
 
        } else return null;
 
    }
 
    
 
    // require class Abstract.php
 
    function printForm( $mode = SHIP_STANDARD ) {
 
        if(!empty($this->Ids)) {
 
            $f = new Form("", $this->_shipForm_name);
 
            TextOut( "Kopiuj dane od:", "bold" );
 
            LineFeed();
 
            foreach($this->Ids as $k => $id) {
 
                $f->CheckBox("copy[".$id."]", "",
 
                        "onClick=\"javascript: shipToForm(this)\";", $id );
 
                Space(2);
 
                TextOut( $this->descrArray[$k] );
 
                LineFeed();
 
            }
 
            if(($mode & SHIP_ADD_SUM) && count($this->Ids) > 1) {
 
                LineFeed();
 
                $f->CheckBox("set_clear", "",
 
                        "onClick=\"javascript: addAll(this)\";", $id );
 
                echo "<nobr>";
 
                TextOut( "Kopiuj od wszystkich", "bold" );
 
                echo "</nobr>";
 
            }
 
            $f->done();
 
        }
 
    }
 
    
 
    function done( $display = true ) {
 
        $js = "<SCRIPT language=\"JavaScript\" SRC=\"/js/ShipForm.js\"></SCRIPT>\n\n";
 
        $js .= "<SCRIPT LANGUAGE=\"JavaScript\"> \n<!-- Begin\n// configuration\n";
 
        $js .= "var clear_fields = ";
 
        if($this->clear) {
 
            $js .= "true";
 
        } else {
 
            $js .= "false";
 
        }
 
        $js .= ";\n";
 
        
 
        $js .= "var ship_form_str = 'document." . $this->_shipForm_name."';\n";
 
        $js .= "var main_form_str = 'document." . $this->form_name."';\n\n";
 
        
 
        $js .= "var text_fields = " . $this->makeArray($this->text_fields).";\n";
 
        $js .= "var radio_buttons = " . $this->makeArray($this->radio_buttons).";\n";
 
        $js .= "var selected_fields = " . $this->makeArray($this->selected_fields).";\n";
 
        $name_of_checkboxes = array();
 
        $js_checkboxes = array();
 
        foreach($this->checkbox_fields as $key => $value) {
 
            $name_of_checkboxes[] = $key;
 
            $js_checkboxes[] = "checkbox_fields['" . $key
 
                    . "'] = " . $this->makeArray($value).";\n";
 
        }
 
        
 
        $js .= "var checkbox_fields = " . $this->makeArray($name_of_checkboxes).";\n";
 
        foreach($js_checkboxes as $js_checkbox) {
 
            $js .= $js_checkbox;
 
        }
 
        $js .= "\n";
 
        
 
        if(!empty($this->Ids)) {
 
            $js .= "var data = " . $this->makeArray($this->Ids).";\n";
 
        }
 
        foreach($this->shipData as $shipThis) {
 
            $js .= $shipThis;
 
        }
 
        
 
        $js .= "//  End --> \n</script>\n";
 
        
 
        if($display) {
 
            echo $js;
 
        } else {
 
            return $js;
 
        }
 
    }
 
}
 
 
?>
 
 |