* if(!@is_object($GLOBALS['phpgw']->js))
* {
* $GLOBALS['phpgw']->js = CreateObject('phpgwapi.javascript');
* }
*
*
* This way a theme can see if this is a defined object and include the data,
* while the is_object() wrapper prevents whiping out existing data held in
* this instance variables, primarily the $files variable.
*
* Note: The package arguement is the subdirectory of js - all js should live in subdirectories
*
* @package phpgwapi
* @subpackage sessions
* @abstract
* @author Dave Hall
* @copyright © 2003 Free Software Foundation
* @license GPL
* @uses template
*/
class javascript
{
/**
* @var array elements to be used for the on(Un)Load attributes of the body tag
*/
var $body;
/**
* @var array list of validated files to be included in the head section of a page
*/
private $files = array( );
/**
* @var object used for holding an instance of the Template class
*/
var $t;
/**
* Constructor
*
* Initialize the instance variables
*/
function javascript()
{
//$this->t = CreateObject('phpgwapi.Template', ExecMethod('phpgwapi.phpgw.common.get_tpl_dir','phpgwapi'));
//not currently used, but will be soon - I hope :)
}
/**
* Returns the javascript required for displaying a popup message box
*
* @param string $msg the message to be displayed to user
* @returns string the javascript to be used for displaying the message
*/
function get_alert($msg)
{
return 'return alert("'.lang($msg).'");';
}
/**
* Adds on(Un)Load= attributes to the body tag of a page
*
* @returns string the attributes to be used
*/
function get_body_attribs()
{
$js = '';
foreach(array('onLoad','onUnload','onResize') as $what)
{
if (!empty($this->body[$what]))
{
$js .= ' '.$what.'="' . str_replace(array('"','\\'),array('\\"','\\\\'),$this->body[$what]) . '"';
}
}
return $js;
}
/**
* Returns the javascript required for displaying a confirmation message box
*
* @param string $msg the message to be displayed to user
* @returns string the javascript to be used for displaying the message
*/
function get_confirm($msg)
{
return 'return confirm("'.lang($msg).'");';
}
/**
* Used for generating the list of external js files to be included in the head of a page
*
* NOTE: This method should only be called by the template class.
* The validation is done when the file is added so we don't have to worry now
*
* @returns string the html needed for importing the js into a page
*/
function get_script_links()
{
$links = '';
if(!empty($this->files) && is_array($this->files))
{
$links = "\n\t\t";
foreach($this->files as $app => $packages)
{
if(!empty($packages) && is_array($packages))
{
foreach($packages as $pkg => $files)
{
$script = '';
if(!empty($files) && is_array($files))
{
foreach($files as $file => $ignored)
{
$jsFilePath=PHPGW_INCLUDE_ROOT.SEP.$app.SEP.'js'.SEP.$pkg.SEP.$file.'.js';
if ($GLOBALS['phpgw_info']['server']['jspacker'] == "True")
{
$packFilePath=PHPGW_INCLUDE_ROOT.SEP.$app.SEP.'js'.SEP.$pkg.SEP.$pkg.'.jspack.js';
if (!file_exists($packFilePath) || filemtime($jsFilePath) > filemtime($packFilePath)) // Is newer
{
$regeratePack = True;
}
$script .= file_get_contents($jsFilePath);
}
else
{
$_script = '';
$links .= "\n\t\t" . sprintf( $_script, $GLOBALS[ 'phpgw_info' ][ 'server' ][ 'webserver_url' ], $app, $pkg, $file, filemtime( $jsFilePath ), $file );
}
$this -> unset_script_link( $app, $pkg, $file );
}
}
if ( $script && $GLOBALS['phpgw_info']['server']['jspacker'] == "True")
{
if (!file_exists($packFilePath) || $regeratePack)
{
$fp = fopen($packFilePath, 'w');
require_once('class.JavaScriptPacker.php');
$packer = new JavaScriptPacker($script, 'High ASCII', true, true);
$packed = $packer->pack();
fwrite($fp, $packed);
fclose($fp);
}
$links .= '\n";
}
}
}
}
}
return $links;
}
/**
* Sets an onLoad action for a page
*
* @param string javascript to be used
*/
function set_onload($code)
{
$this->body['onLoad'] .= $code;
}
/**
* Sets an onUnload action for a page
*
* @param string javascript to be used
*/
function set_onunload($code)
{
$this->body['onUnload'] .= $code;
}
/**
* Sets an onResize action for a page
*
* @param string javascript to be used
*/
function set_onresize($code)
{
$this->body['onResize'] .= $code;
}
/**
* DO NOT USE - NOT SURE IF I AM GOING TO USE IT - ALSO IT NEEDS SOME CHANGES!!!!
* Used for removing a file or package of files to be included in the head section of a page
*
* @param string $app application to use
* @param string $package the name of the package to be removed
* @param string $file the name of a file in the package to be removed - if ommitted package is removed
*/
function unset_script_link($app, $package, $file=False)
{
if($file !== False)
{
unset($this->files[$app][$package][$file]);
}
else
{
unset($this->files[$app][$package]);
}
}
/**
* Checks to make sure a valid package and file name is provided
*
* @param string $package package to be included
* @param string $file file to be included - no ".js" on the end
* @param string $app application directory to search - default = phpgwapi
* @returns bool was the file found?
*/
function validate_file( $package, $file, $app = NULL, $stack = false )
{
if ( $app == NULL )
$app = 'phpgwapi';
$_file = PHPGW_INCLUDE_ROOT . SEP . $app . SEP . 'js' . SEP . $package . SEP. $file . '.js';
if ( is_readable( $_file ) )
{
unset( $_file );
if ( ! array_key_exists( $app, $this -> files ) )
if ( $stack )
$this -> files = array_merge( array( $app => array( ) ), $this -> files) ;
else
$this -> files[ $app ] = array( );
if ( ! array_key_exists( $package, $this -> files[ $app ] ) )
if ( $stack )
$this -> files[ $app ] = array_merge( array( $package => array( ) ), $this -> files[ $app ] );
else
$this -> files[ $app ][ $package ] = array( );
if ( $stack )
$this -> files[ $app ][ $package ] = array_merge( array( $file => $file ), $this -> files[ $app ][ $package ] );
else
$this -> files[ $app ][ $package ][ $file ] = $file;
return true;
}
return false;
}
function get_source( $param )
{
ob_start( );
$source = '';
foreach( explode( ';', $param[ 'source' ] ) as $script )
if ( strrpos( $script, '.php' ) != strlen( $script ) - 4 )
$source .= file_get_contents( realpath( dirname( __FILE__ ) . '/../..' ) . $script );
else
{
include_once realpath( dirname( __FILE__ ) . '/../..' ) . $script;
$source .= ob_get_contents( );
ob_clean( );
}
echo $source;
exit;
}
}
?>