<?php
/*
    File: registerObjectTest.php

    Script to test callable objects.
    
    Title: Call methods of registered objects.
    
    Please see <copyright.inc.php> for a detailed description, copyright
    and license information.
*/

/*
    @package xajax
    @version $Id: registerObjectTest.php 362 2007-05-29 15:32:24Z calltoconstruct $
    @copyright Copyright (c) 2005-2006 by Jared White & J. Max Wilson
    @license http://www.xajaxproject.org/bsd_license.txt BSD License
*/
require_once( "../xajax_core/xajax.inc.php" );

class myObjectTest
{
    var $myValue='default';

    function testInstanceMethod( $formData )
    {
        $objResponse=new xajaxResponse();
        $objResponse->alert( "My value is: {$this->myValue}" );
        $objResponse->alert( "formData: " . print_r( $formData, true ) );
        $objResponse->assign( "submittedDiv", "innerHTML", nl2br( print_r( $formData, true ) ) );
        return $objResponse;
    }

    function testClassMethod( $formData )
    {
        $objResponse=new xajaxResponse();
        $objResponse->alert( "This is a class method." );
        $objResponse->alert( "formData: " . print_r( $formData, true ) );
        $objResponse->assign( "submittedDiv", "innerHTML", nl2br( print_r( $formData, true ) ) );
        return $objResponse;
    }
}

class objectMethodsTest
{
    var $myValue='default';

    function firstMethod( )
    {
        $objResponse=new xajaxResponse();
        $objResponse->alert( "In firstMethod. My value is: {$this->myValue}" );
        return $objResponse;
    }

    function second_method( )
    {
        $objResponse=new xajaxResponse();
        $objResponse->alert( "In second_method. My value is: {$this->myValue}" );
        return $objResponse;
    }
}

class objectMethodsTest2
    extends objectMethodsTest
{
    function thirdMethod( $arg1 )
    {
        $objResponse=new xajaxResponse();
        $objResponse->alert( "In thirdMethod. My value is: {$this->myValue} and arg1: $arg1" );
        return $objResponse;
    }
}

$xajax=new xajax();

//$xajax->setFlag("debug", true);

$myObj2=new objectMethodsTest();

if ( 0 <= version_compare( '5.0', PHP_VERSION ) )
    // for PHP4
    eval( '$aMethodsTest =& $xajax->register(XAJAX_CALLABLE_OBJECT, &$myObj2);' );
else
    $aMethodsTest=&$xajax->register( XAJAX_CALLABLE_OBJECT, $myObj2 );
$myObj2->myValue='right:2';

$myObj3=new objectMethodsTest2();

if ( 0 <= version_compare( '5.0', PHP_VERSION ) )
    // for PHP4
    eval( '$aMethodsTest2 =& $xajax->register(XAJAX_CALLABLE_OBJECT, &$myObj3);' );
else
    $aMethodsTest2=&$xajax->register( XAJAX_CALLABLE_OBJECT, $myObj3 );
$aMethodsTest2['thirdmethod']->setParameter( 0, XAJAX_QUOTED_VALUE, 'howdy' );
$myObj3->myValue='right:3';

$myObj=new myObjectTest();
$myObj->myValue='wrong';
$requestInstanceMethod=&$xajax->registerFunction( array
    (
    "testForm",
    &$myObj,
    "testInstanceMethod"
    ));

$requestInstanceMethod->setParameter( 0, XAJAX_FORM_VALUES, 'testForm1' );
$requestClassMethod=&$xajax->registerFunction( array
    (
    "testForm2",
    "myObjectTest",
    "testClassMethod"
    ));

$requestClassMethod->setParameter( 0, XAJAX_FORM_VALUES, 'testForm1' );
$myObj->myValue='right';

$xajax->processRequest();
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns = "http://www.w3.org/1999/xhtml" xml:lang = "en" lang = "en">
    <head>
        <title>Register Object Test | xajax Tests</title>

        <?php $xajax->printJavascript( "../" ) ?>
    </head>

    <body>
        <h2><a href = "index.php">xajax Tests</a></h2>

        <h1>Register Object Test</h1>

        <p>
            <a href = '#' onclick = '<?php $aMethodsTest['firstmethod']->printScript(); ?>; return false;'>Test
            Callable Object:2</a>

            <br />

            <a href = '#' onclick = '<?php $aMethodsTest['second_method']->printScript(); ?>; return false;'>Test
            Callable Object:2</a>

            <br />

            <a href = '#' onclick = '<?php $aMethodsTest2['thirdmethod']->printScript(); ?>; return false;'>Test
            Callable Object:3</a>

            <br />

            <a href = '#' onclick = '<?php $aMethodsTest2['firstmethod']->printScript(); ?>; return false;'>Test
            Callable Object:3</a>
        </p>

        <form id = "testForm1" onsubmit = "return false;">
            <p>
                <input type = "text" id = "textBox1" name = "textBox1" value = "This is some text" />
            </p>

            <p>
                <input type = 'submit' value = 'Submit to Instance Method'
                    onclick = '<?php $requestInstanceMethod->printScript(); ?>; return false;' />
            </p>

            <p>
                <input type = 'submit' value = 'Submit to Class Method'
                    onclick = '<?php $requestClassMethod->printScript(); ?>; return false;' />
            </p>
        </form>

        <div id = "submittedDiv">
        </div>
    </body>
</html>

