diff --git a/phpgwapi/inc/class.egw.inc.php b/phpgwapi/inc/class.egw.inc.php index fc3287c01c..f1dfe6353f 100644 --- a/phpgwapi/inc/class.egw.inc.php +++ b/phpgwapi/inc/class.egw.inc.php @@ -575,7 +575,7 @@ class egw_minimal */ static $sub_objects = array( 'log' => 'errorlog', - 'js' => 'javascript', +// 'js' => 'javascript', 'link' => 'bolink', // depricated use static egw_link methods 'datetime' => 'egw_datetime', // 'session' => 'sessions', @@ -605,6 +605,8 @@ class egw_minimal function __get($name) { //error_log(__METHOD__."($name)".function_backtrace()); + + if ($name == 'js') $name = 'framework'; // javascript class is integrated now into framework if (isset($this->$name)) { diff --git a/phpgwapi/inc/class.egw_framework.inc.php b/phpgwapi/inc/class.egw_framework.inc.php index 7ddc508468..befbc91589 100644 --- a/phpgwapi/inc/class.egw_framework.inc.php +++ b/phpgwapi/inc/class.egw_framework.inc.php @@ -484,7 +484,7 @@ abstract class egw_framework * @param string $app * @return string */ - public function index($app) + public static function index($app) { $data =& $GLOBALS['egw_info']['user']['apps'][$app]; if (!isset($data)) @@ -693,36 +693,11 @@ abstract class egw_framework { $java_script = ''; - // allways load jquery (not -ui) and egw_json - $GLOBALS['egw']->js->validate_file('jquery','jquery'); - $GLOBALS['egw']->js->validate_file('.','egw_json'); - - // always include javascript helper functions - $GLOBALS['egw']->js->validate_file('jsapi','jsapi'); - // GLOBAL var to tell egroupware wether or not to enable the IE selectBox resize hack if($GLOBALS['egw_info']['user']['preferences']['common']['enable_ie_dropdownmenuhack']) { $java_script .= "\n"; } - //viniciuscb: in Concisus this condition is inexistent, and in all - //pages the javascript globals are inserted. Today, because - //filescenter needs these javascript globals, this - //include_jsbackend is a must to the javascript globals be - //included. - if ($GLOBALS['egw_info']['flags']['include_jsbackend']) - { - if (!$GLOBALS['egw_info']['flags']['nojsapi']) - { - $GLOBALS['egw']->js->validate_jsapi(); - } - - if(@is_object($GLOBALS['egw']->js)) - { - $java_script .= $GLOBALS['egw']->js->get_javascript_globals(); - } - } - if ($GLOBALS['egw']->acl->check('run',1,'notifications') && !$GLOBALS['egw_info']['user']['preferences']['notifications']['disable_ajaxpopup']) { $GLOBALS['egw_info']['flags']['include_xajax'] = true; @@ -749,10 +724,7 @@ abstract class egw_framework $java_script .= $GLOBALS['egw_info']['flags']['java_script_thirst'] . "\n"; } - if(@is_object($GLOBALS['egw']->js)) - { - $java_script .= $GLOBALS['egw']->js->get_script_links(); - } + $java_script .= self::get_script_links(); if(@isset($_GET['menuaction'])) { @@ -770,24 +742,6 @@ abstract class egw_framework return $java_script; } - /** - * Returns on(Un)Load attributes from js class - * - * @author Dave Hall - skwashd at egroupware.org - * @returns string body attributes - */ - protected static function _get_body_attribs() - { - if(@is_object($GLOBALS['egw']->js)) - { - return $GLOBALS['egw']->js->get_body_attribs(); - } - else - { - return ''; - } - } - /** * List available themes * @@ -971,6 +925,128 @@ abstract class egw_framework * @param string $url */ abstract function open_manual_js($url); + + /** + * Methods to add javascript to framework + */ + + /** + * Body tags for onLoad, onUnload and onResize + * + * @var array + */ + protected static $body_tags = array(); + + /** + * Sets an onLoad action for a page + * + * @param string javascript to be used + */ + static function set_onload($code) + { + self::$body_tags['onLoad'] .= $code; + } + + /** + * Sets an onUnload action for a page + * + * @param string javascript to be used + */ + static function set_onunload($code) + { + self::$body_tags['onUnload'] .= $code; + } + + /** + * Sets an onResize action for a page + * + * @param string javascript to be used + */ + static function set_onresize($code) + { + self::$body_tags['onResize'] .= $code; + } + + /** + * Adds on(Un)Load= attributes to the body tag of a page + * + * @returns string the attributes to be used + */ + static protected function _get_body_attribs() + { + $js = ''; + foreach(self::$body_tags as $what => $data) + { + if (!empty($data)) + { + $js .= ' '.$what.'="' . str_replace(array('\\\'','"','\\','''),array(''','\\"','\\\\','\\\''),$data) . '"'; + } + } + return $js; + } + + /** + * Content from validate_file calls plus preloaded files + * + * @var array + */ + protected static $js_include_files = array( + // allways load jquery (not -ui) and egw_json first + '/phpgwapi/js/jquery/jquery.js', + '/phpgwapi/js/./egw_json.js', + // always include javascript helper functions + '/phpgwapi/js/jsapi/jsapi.js', + ); + + /** + * 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 + * @param boolean $append=true should the file be added + * + * @discuss The browser specific option loads the file which is in the correct + * browser folder. Supported folder are those supported by class.browser.inc.php + * + * @returns bool was the file found? + */ + static function validate_file($package, $file, $app='phpgwapi') + { + //echo "

".__METHOD__."($package,$file,$app) --> ".EGW_INCLUDE_ROOT ."/$app/js/$package/$file.js

\n"; + if (is_readable(EGW_INCLUDE_ROOT.($path="/$app/js/$package/$file.js")) || + $app != 'phpgwapi' && is_readable(EGW_INCLUDE_ROOT.($path="/phpgwapi/js/$package/$file.js"))) + { + if (!self::$js_include_files || !in_array($path,self::$js_include_files)) + { + self::$js_include_files[] = $path; + } + return True; + } + return False; + } + + /** + * 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 + */ + static protected function get_script_links() + { + $links = "\n"; + if(!empty(self::$js_include_files) && is_array(self::$js_include_files)) + { + foreach(self::$js_include_files as $file) + { + $file .= '?'. filectime(EGW_INCLUDE_ROOT.$file); + $links .= '\n"; + } + } + return $links."\n"; + } } /** diff --git a/phpgwapi/inc/class.javascript.inc.php b/phpgwapi/inc/class.javascript.inc.php deleted file mode 100644 index 0a45999589..0000000000 --- a/phpgwapi/inc/class.javascript.inc.php +++ /dev/null @@ -1,419 +0,0 @@ - - * if(!@is_object($GLOBALS['egw']->js)) - * { - * $GLOBALS['egw']->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 argument 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 - */ - var $files; - - /** - * @var object used for holding an instance of the Template class - */ - var $t; - - /** - * @var boolean Load JS API ? - */ - var $js_api; - - /** - * Constructor - * - * Initialize the instance variables - */ - function javascript() - { - //$this->t =& CreateObject('phpgwapi.Template', ExecMethod('phpgwapi.phpgw.common.get_tpl_dir','phpgwapi')); - } - - - /** - * 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 = "\n"; - if(!empty($this->files) && is_array($this->files)) - { - foreach($this->files as $app => $packages) - { - if(!empty($packages) && is_array($packages)) - { - foreach($packages as $pkg => $files) - { - if(!empty($files) && is_array($files)) - { - foreach($files as $file => $browser) - { - $pkg = $pkg == '.' ? '' : $pkg.'/'; - $browser = $browser == '.' ? '' : $browser.'/'; - - $f = "/$app/js/$pkg$browser$file" . '.js?'. filectime(EGW_INCLUDE_ROOT."/$app/js/$pkg$browser$file.js") .'">'; - $links .= '\n";/**/ - - //FIXME: These files are temporary! They should be included inside DynAPI or substituted by - // other ones - $this->validate_file('jsapi', 'jsapi'); - $this->validate_file('wz_dragdrop', 'wz_dragdrop'); - $this->validate_file('dJSWin', 'dJSWin'); - $this->validate_file('dTabs', 'dTabs'); - $this->validate_file('connector', 'connector'); - $this->validate_file('xmlrpcMsgCreator','xmlrpc'); - $this->validate_file('jsolait','init'); - return true; - } - - function get_javascript_globals() - { - /* Default Global Messages */ - $GLOBALS['egw_info']['flags']['java_script_globals']['messages']['jsapi']['parseError'] = lang('Failed to Contact Server or Invalid Response from Server. Try to relogin. Contact Admin in case of faliure.'); - $GLOBALS['egw_info']['flags']['java_script_globals']['messages']['jsapi']['serverTimeout'] = lang('Could not contact server. Operation Timed Out!'); - $GLOBALS['egw_info']['flags']['java_script_globals']['messages']['jsapi']['dataSourceStartup'] = lang('Starting Up...'); - - $GLOBALS['egw_info']['flags']['java_script_globals']['messages']['jsapi']['connector_1'] = lang('Contacting Server...'); - $GLOBALS['egw_info']['flags']['java_script_globals']['messages']['jsapi']['connector_2'] = lang('Server Contacted. Waiting for response...'); - $GLOBALS['egw_info']['flags']['java_script_globals']['messages']['jsapi']['connector_3'] = lang('Server answered. Processing response...'); - $GLOBALS['egw_info']['flags']['java_script_globals']['preferences']['common'] =& $GLOBALS['egw_info']['user']['preferences']['common']; - - /* Default Global API Variables */ - $browser = strtolower(ExecMethod('phpgwapi.browser.get_agent')); - switch ($browser) - { - case 'ie': - case 'opera': - $thyapi_comp = 'thyapi_comp_'.$browser.'.js'; - break; - default: - $thyapi_comp = 'thyapi_comp_gecko.js'; - } - - $GLOBALS['egw_info']['flags']['java_script_globals']['jsapi']['imgDir'] = $GLOBALS['egw_info']['server']['webserver_url'].'/phpgwapi/images'; - if (EGW_UNCOMPRESSED_THYAPI) - { - $jsCode = "\n" . - ''."\n". - ''."\n". - ''."\n"; - - return $jsCode; - } - - function convert_phparray_jsarray($name, $array, $new=true) - { - if (!is_array($array)) - { - return ''; - } - - if ($new) - { - $jsCode = "$name = new Object();\n"; - } - else - { - $jsCode = ''; - } - - foreach ($array as $index => $value) - { - if (is_array($value)) - { - $jsCode .= $name."['".$index."'] = new Object();\n"; - $jsCode .= $this->convert_phparray_jsarray($name."['".$index."']", $value,false); - continue; - } - - switch(gettype($value)) - { - case 'string': - $value = "'".str_replace(array("\n","\r"),'\n',addslashes($value))."'"; - break; - - case 'boolean': - if ($value) - { - $value = 'true'; - } - else - { - $value = 'false'; - } - break; - - default: - $value = 'null'; - } - - $jsCode .= $name."['".$index."'] = ".$value.";\n"; - } - - return $jsCode; - } - } -?>