BUG 0000 - Javascript Registry for plugins was added

- using inside the plugin class:
       registerJavascript('core_folder/core_js', 'my_plugin/my_js');
This commit is contained in:
Erik Amaru Ortiz
2011-07-01 17:58:40 -04:00
parent a730018335
commit dbb3da02c0
3 changed files with 176 additions and 3 deletions

View File

@@ -572,7 +572,7 @@ class PMPlugin {
$oPluginRegistry =& PMPluginRegistry::getSingleton();
$oPluginRegistry->registerCaseSchedulerPlugin( $this->sNamespace, $sActionId, $sActionForm, $sActionSave, $sActionExecute, $sActionGetFields );
}
/**
/**
* With this function we can register a Dashboard Page for Cases Dashboard
* @param string $sPage
* @return void
@@ -581,4 +581,26 @@ class PMPlugin {
$oPluginRegistry =& PMPluginRegistry::getSingleton();
$oPluginRegistry->registerTaskExtendedProperty ( $this->sNamespace, $sPage, $sName, $sIcon );
}
/**
* Register a plugin javascript to run with core js script at same runtime
* @param string $coreJsFile
* @param array/string $pluginJsFile
* @return void
*/
function registerJavascript($sCoreJsFile, $pluginJsFile) {
$oPluginRegistry =& PMPluginRegistry::getSingleton();
$oPluginRegistry->registerJavascript($this->sNamespace, $sCoreJsFile, $pluginJsFile);
}
/**
* Unregister a plugin javascript
* @param string $coreJsFile
* @param array/string $pluginJsFile
* @return void
*/
function unregisterJavascript($sCoreJsFile, $pluginJsFile) {
$oPluginRegistry =& PMPluginRegistry::getSingleton();
$oPluginRegistry->unregisterJavascript($this->sNamespace, $sCoreJsFile, $pluginJsFile);
}
}

View File

@@ -90,6 +90,11 @@ class PMPluginRegistry {
private $_aCaseSchedulerPlugin = array();
private $_aTaskExtendedProperties = array();
/**
* Registry a plugin javascript to include with js core at same runtime
*/
private $_aJavascripts = array();
static private $instance = NULL;
/**
@@ -228,7 +233,7 @@ class PMPluginRegistry {
*
* @param unknown_type $sNamespace
*/
function disablePlugin($sNamespace )
function disablePlugin($sNamespace)
{
$found = false;
foreach ( $this->_aPluginDetails as $namespace=>$detail ) {
@@ -305,7 +310,8 @@ class PMPluginRegistry {
unset ( $this->_aTaskExtendedProperties[ $key ] );
}
//unregistering javascripts from this plugin
$this->unregisterJavascripts($sNamespace);
}
/**
@@ -537,6 +543,108 @@ class PMPluginRegistry {
return $this->_aCSSStyleSheets;
}
/**
* Register a plugin javascript to run with core js script at same runtime
*
* @param string $sNamespace
* @param string $coreJsFile
* @param array/string $pluginJsFile
*/
function registerJavascript($sNamespace, $sCoreJsFile, $pluginJsFile) {
foreach ($this->_aJavascripts as $i=>$js) {
if ($sCoreJsFile == $js->sCoreJsFile && $sNamespace == $js->sNamespace) {
if (is_string($pluginJsFile)) {
if (!in_array($pluginJsFile, $this->_aJavascripts[$i]->pluginJsFile)) {
$this->_aJavascripts[$i]->pluginJsFile[] = $pluginJsFile;
}
} else if (is_array($pluginJsFile)) {
$this->_aJavascripts[$i]->pluginJsFile = array_unique(array_merge($pluginJsFile, $this->_aJavascripts[$i]->pluginJsFile));
} else {
throw new Exception('Invalid third param, $pluginJsFile should be a string or array - '. gettype($pluginJsFile). ' given.');
}
return $this->_aJavascripts[$i];
}
}
$js = new StdClass();
$js->sNamespace = $sNamespace;
$js->sCoreJsFile = $sCoreJsFile;
$js->pluginJsFile = Array();
if (is_string($pluginJsFile)) {
$js->pluginJsFile[] = $pluginJsFile;
} else if (is_array($pluginJsFile)){
$js->pluginJsFile = array_merge($js->pluginJsFile, $pluginJsFile);
} else {
throw new Exception('Invalid third param, $pluginJsFile should be a string or array - '. gettype($pluginJsFile). ' given.');
}
$this->_aJavascripts[] = $js;
}
/**
* return all plugin javascripts
*
* @return array
*/
function getRegisteredJavascript() {
return $this->_aJavascripts;
}
/**
* return all plugin javascripts
* @param string $sCoreJsFile
* @param string $sNamespace
* @return array
*/
function getRegisteredJavascriptBy($sCoreJsFile, $sNamespace='') {
$scripts = array();
if ($sNamespace == '') {
foreach ($this->_aJavascripts as $i=>$js) {
if ($sCoreJsFile == $js->sCoreJsFile) {
$scripts = array_merge($scripts, $this->_aJavascripts[$i]->pluginJsFile);
}
}
} else {
foreach ($this->_aJavascripts as $i=>$js) {
if ($sCoreJsFile == $js->sCoreJsFile && $sNamespace == $js->sNamespace) {
$scripts = array_merge($scripts, $this->_aJavascripts[$i]->pluginJsFile);
}
}
}
return $scripts;
}
/**
* return all dashboard pages
* @param string $sNamespace
* @param string $sCoreJsFile
* @return array
*/
function unregisterJavascripts($sNamespace, $sCoreJsFile='') {
if ($sCoreJsFile == '') { // if $sCoreJsFile=='' unregister all js from this namespace
foreach ($this->_aJavascripts as $i=>$js) {
if ($sNamespace == $js->sNamespace) {
unset($this->_aJavascripts[$i]);
}
}
// Re-index when all js were unregistered
$this->_aJavascripts = array_values($this->_aJavascripts);
} else {
foreach ($this->_aJavascripts as $i=>$js) {
if ($sCoreJsFile == $js->sCoreJsFile && $sNamespace == $js->sNamespace) {
unset($this->_aJavascripts[$i]);
// Re-index for each js that was unregistered
$this->_aJavascripts = array_values($this->_aJavascripts);
}
}
}
}
/**
* Register a reports class in the singleton