| 
<?php
// Modify your own mysql connection parameters here
 $mysql_host    =  'localhost' ;
 $mysql_user    =  'root' ;
 $mysql_password =  '' ;
 $mysql_database =  'test' ;
 
 // Include the variable store class
 include ( 'DbVariableStore.class.php' ) ;
 
 // Helper functions
 function  toboolean ( $value )
 { return ( ( $value ) ?  '   yes' : '    no' ) ; } ;
 
 function  toverdict ( $value )
 { return ( ( $value ) ?  '    ok' : 'failed' ) ; } ;
 
 function  formatted_printr ( $value )
 {
 if  ( is_array ( $value ) )
 return ( str_replace ( [ "\r", "\n" ], [ '', "\n\t\t" ], print_r ( $value, true ) ) ) ;
 else
 return ( $value ) ;
 }
 
 // Variables specific for running the tests either in Apache or CLI mode
 if  ( php_sapi_name ( )  == 'cli' )
 {
 $nl    =  "\n" ;
 $tab    =  "\t" ;
 }
 else
 {
 $nl    =  "<br/>" ;
 $tab    =  "    " ;
 }
 
 
 
 // Step 1 : Create a variable store named 'testvariables'
 echo ( "****** Step 1 : Create the variable store :$nl" ) ;
 
 $connection    =  mysqli_connect ( $mysql_host, $mysql_user, $mysql_password, $mysql_database ) ;
 mysqli_query ( $connection, "DROP TABLE IF EXISTS testvariables" ) ;
 
 $store = new DbVariableStore ( 'testvariables', $connection ) ;
 echo ( $tab . toverdict ( $store ) ) ;
 echo ( $nl ) ;
 
 // Step 2 : Test variable definition/retrieval,with all the possible conversion cases.
 // Loop through the following definitions array to :
 // 2.1 - Create a variable (given by the 'name' element)  with a value of 'value' and a type of 'type'
 //     The result should always be 'ok', except if the variable already exists, which should not be the
 //     case in this run
 // 2.2 - Check if the variable is defined (true of false). The result should always be 'ok'.
 // 2.3 - Retrieve its value and compare it with the 'expected' value. For example, an initial value of
 //     " 3.14159" for a TYPE_INTEGER variable will be stored as "3".
 //     The result should always be 'ok'.
 // 2.4 - Undefine it and display the status. The result should always be 'ok'.
 // 2.5 - Check if it still defined. The result should always be 'no', since the variable has been deleted.
 $test_definitions    =
 [
 [
 'name'        =>  'string.null',
 'value'        =>  null,
 'type'        =>  DbVariableStore::TYPE_STRING,
 'expected'    =>  ''
 ],
 [
 'name'        =>  'string.value',
 'value'        =>  'Hello World',
 'type'        =>  DbVariableStore::TYPE_STRING,
 'expected'    =>  'Hello World'
 ],
 [
 'name'        =>  'integer.value',
 'value'        =>  1,
 'type'        =>  DbVariableStore::TYPE_INTEGER,
 'expected'    =>  1
 ],
 [
 'name'        =>  'integer.strvalue',
 'value'        =>  " 1",
 'type'        =>  DbVariableStore::TYPE_INTEGER,
 'expected'    =>  1
 ],
 [
 'name'        =>  'integer.dblvalue',
 'value'        =>  " 3.14159",
 'type'        =>  DbVariableStore::TYPE_INTEGER,
 'expected'    =>  3
 ],
 [
 'name'        =>  'integer.truevalue',
 'value'        =>  true,
 'type'        =>  DbVariableStore::TYPE_INTEGER,
 'expected'    =>  1
 ],
 [
 'name'        =>  'integer.falsevalue',
 'value'        =>  false,
 'type'        =>  DbVariableStore::TYPE_INTEGER,
 'expected'    =>  0
 ],
 [
 'name'        =>  'dblvalue',
 'value'        =>  " 3.14159",
 'type'        =>  DbVariableStore::TYPE_DOUBLE,
 'expected'    =>  3.14159
 ],
 [
 'name'        =>  'boolean.truevalue',
 'value'        =>  "1",
 'type'        =>  DbVariableStore::TYPE_BOOLEAN,
 'expected'    =>  true
 ],
 [
 'name'        =>  'boolean.falsevalue',
 'value'        =>  "0",
 'type'        =>  DbVariableStore::TYPE_BOOLEAN,
 'expected'    =>  false
 ],
 [
 'name'        =>  'datetime.1',
 'value'        =>  "2014/01/01 13:40:00",
 'type'        =>  DbVariableStore::TYPE_DATETIME,
 'expected'    =>  "2014/01/01 13:40:00"
 ],
 [
 'name'        =>  'datetime.2',
 'value'        =>  "now",
 'type'        =>  DbVariableStore::TYPE_DATETIME,
 'expected'    =>  strtotime ( "now" )            // Failure is ok here when checking the expected string
 ],
 [
 'name'        =>  'datetime.3',
 'value'        =>  0,
 'type'        =>  DbVariableStore::TYPE_DATETIME,
 'expected'    =>  "1970/01/01 00:00:00"        // Failure is ok here if different GMT offset
 ],
 [
 'name'        =>  'date.1',
 'value'        =>  "2014/01/01",
 'type'        =>  DbVariableStore::TYPE_DATE,
 'expected'    =>  "2014/01/01"
 ],
 [
 'name'        =>  'time.1',
 'value'        =>  "17:40:17",
 'type'        =>  DbVariableStore::TYPE_TIME,
 'expected'    =>  "17:40:17"
 ],
 [
 'name'        =>  'timestamp',
 'value'        =>  "1970/01/01 00:00:00",
 'type'        =>  DbVariableStore::TYPE_TIMESTAMP,
 'expected'    =>  0                    // Comparison will fail since the original timestamp is a date string
 ],
 [
 'name'        =>  'array',                // This test will generate a notice : "array to string conversion"
 'value'        =>  [ 1, 2 ],                // when displaying the results
 'type'        =>  DbVariableStore::TYPE_SERIALIZED,
 'expected'    =>  [ 1, 2 ]
 ],
 ] ;
 
 echo ( "****** Step 2 : Variable create/check/retrieve/undefine/check :$nl" ) ;
 echo ( "$tab" . sprintf ( "%-20s", 'Variable' ) . "  Created?  IsDefined?  IsExpected?  Deleted?  StillDefined?$nl" ) ;
 echo ( "$tab--------------------------------------------------------------------------------$nl" ) ;
 
 foreach  ( $test_definitions  as  $def )
 {
 $creation_status    =  $store -> Define ( $def [ 'name' ], $def [ 'value' ], $def [ 'type' ] ) ;
 $is_defined        =  $store -> IsDefined ( $def [ 'name' ] ) ;
 $value            =  $store -> ValueOf ( $def [ 'name' ] ) ;
 $is_expected        =  ( $value  ==  $def [ 'expected' ] ) ;
 $deletion_status    =  $store -> Undefine ( $def [ 'name' ] ) ;
 $is_still_defined    =  $store -> IsDefined ( $def [ 'name' ] ) ;
 
 echo ( "$tab" . sprintf ( "%-20s", $def [ 'name' ] ) . "  " .
 "  " . toverdict ( $creation_status ) . "  " .
 "    " . toboolean ( $is_defined ) . "  " .
 "     " . toverdict ( $is_expected ) . "  " .
 "  " . toverdict ( $deletion_status ) . "  " .
 "       " . toboolean ( $is_still_defined ) .
 $nl ) ;
 
 $dvalue = formatted_printr ( $def [ 'value' ] ) ;
 $rvalue = formatted_printr ( $value ) ;
 echo ( "$tab$tab Defined value   : [$dvalue]$nl" ) ;
 echo ( "$tab$tab Retrieved value : [$rvalue]$nl" ) ;
 }
 
 echo ( $nl ) ;
 
 
 // Now just recreate the variables that have been created then undefined during step 2),
 // just to have a data set for further testing
 foreach  ( $test_definitions  as  $def )
 $store -> Define ( $def [ 'name' ], $def [ 'value' ], $def [ 'type' ] ) ;
 
 // Step 3 -
 //    Display variable count and variable list
 echo ( "****** Step 3 : Display variable count and variable list :$nl" ) ;
 echo ( "{$tab}Number of variables defined in step 2) : " . count ( $store ) . $nl ) ;
 echo ( "{$tab}Variable list                          : " . implode ( ', ', $store -> GetNames ( ) ) . $nl ) ;
 echo ( $nl ) ;
 
 // Step 4 : display the list of defined variables together with their value.
 // You will see a warning because the variable named 'array' is... an array
 echo ( "****** Step 4 : Display variable names and values :$nl" ) ;
 
 foreach  ( $store  as  $name => $value )
 {
 $value    =  formatted_printr ( $value ) ;
 echo ( $tab . sprintf ( "%-20s", $name ) . " : $value$nl" ) ;
 }
 
 echo ( $nl ) ;
 
 // Step 5 -
 //    Loop through variables by their integer index.
 echo ( "****** Step 5 : Loop through variables using their integer index :$nl" ) ;
 $count    =  count ( $store ) ;
 $vnames =  $store -> GetNames ( ) ;
 
 for (  $i = 0 ; $i  <  $count ; $i ++ )
 {
 $value    =  formatted_printr ( $store [$i] ) ;
 echo ( $tab . sprintf ( "%-20s", $vnames [$i] ) . " : $value$nl" ) ;
 }
 
 echo ( $nl ) ;
 
 
 // Step 6 -
 //    Loop through variables by their variable name.
 echo ( "****** Step 6 : Loop through variables using their name :$nl" ) ;
 
 foreach  ( $vnames  as  $vname )
 {
 $value    =  formatted_printr ( $store [ $vname ] ) ;
 echo ( $tab . sprintf ( "%-20s", $vname ) . " : $value$nl" ) ;
 }
 
 echo ( $nl ) ;
 
 // Step 7 :
 //    Create the variable named 'zz' accessing it as a property
 echo ( "****** Step 7 : Create a variable named 'zz' by accessing it as a property :$nl" ) ;
 $store [ 'zz' ]        =  'the zz value' ;
 $vnames =  $store -> GetNames ( ) ;
 
 foreach  ( $vnames  as  $vname )
 {
 $value    =  formatted_printr ( $store [ $vname ] ) ;
 echo ( $tab . sprintf ( "%-20s", $vname ) . " : $value$nl" ) ;
 }
 |