<?php
    require_once('api-adodb/config.php');
    require_once(LIB_PATH.DS.'table.class.php');

    /**
    * Handles everything that should happen after the data has been validated and right before they are saved.
    */
    class AfterSave extends Table {

        static $errors = array();
        static $postValues;
        protected $columnInfo;

        protected $id = null ; //Id of the current entry

        protected $currentColumn;

        private $displayAllErrorsAtOnce = true; // Set to true if you want to display all errors at once.

        function __construct($tableName,&$postValues,$id){
            parent::__construct($tableName);
            self::$postValues = $postValues;


            $this->id = $id;


            $this->getColumnTypes();

            $this->afterSave();

        }



        public function afterSave(){
            $postValues = self::$postValues;

            foreach ($this->columnInfo as $column){
                $this->currentColumn = $column;


                /**
                *Check whether the field types are valid or not. Functions are named exactly as the field types are named in the system table
                */

                if(method_exists($this,$column['field_type'])){

                    //  if( isset($postValues[$column['field_name']]) && !empty($postValues[$column['field_name']]) ){
                    if( isset($postValues[$column['field_name']]) ){
                        $this->{$column['field_type']}($postValues[$column['field_name']]);
                    }

                }

            }
        }



        /**
        * Saves data into the HABTM table
        *
        * @param mixed $value
        */
        function habtm_foreign($value){

            $parameters = $this->getFieldParameters($this->currentColumn['field_name']);

            $habtmTable = new Table($parameters['habtm_table']);

            /**
            * Insert new data
            */
            if(!empty($this->id)){
                //HABTM unset the $_FILES while saving
                $files = $_FILES;
                unset($_FILES);
                //$ids = explode("|",$value);
                $ids = $value;

                foreach($ids as $id){
                    $habtmTable->save(array (
                            $parameters['foreignKey'] => $id,
                            $parameters['currentField'] => $this->id,
                        ));
                }
                //Set them again after the data is saved
                $_FILES = $files;
            }
        }

        /**
        * Creates a slug from a set field
        *
        * @param mixed $value
        */
        function slug ( $value ) {
            $parameters = $this->getFieldParameters($this->currentColumn['field_name']);
            //Create the slug from this field
            $fromField = $parameters['from_field'];
            $slug =  seoUrl ($_POST[$fromField]);

            if(  $this->findInTable(array ('slug ' => $slug , 'id !'=> $this->id) ) ){
                $slug =  $this->id.'-'. seoUrl ($_POST[$fromField]);
            }


            $toSave = array (
                'id' => $this->id,
                'slug' => $slug
            );

            $habtmTable = new Table( $this->getRawTableName());
            $habtmTable->update ( $toSave );
        }


}