Commit 19f261ca14bdf4fee94b2ee9e1e0ed11ab2ec280
1 parent
11d49c4e
KTS-3169
"Provide some actions for portlets that allow javascript to be called rather than requiring the action framework" Implemented. Committed By: Conrad Vermeulen Reviewed By: Kevin Fourie git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@8263 c91229c3-7414-0410-bfa2-8a42b809f60b
Showing
4 changed files
with
254 additions
and
19 deletions
lib/actions/documentaction.inc.php
| @@ -5,32 +5,32 @@ | @@ -5,32 +5,32 @@ | ||
| 5 | * KnowledgeTree Open Source Edition | 5 | * KnowledgeTree Open Source Edition |
| 6 | * Document Management Made Simple | 6 | * Document Management Made Simple |
| 7 | * Copyright (C) 2004 - 2008 The Jam Warehouse Software (Pty) Limited | 7 | * Copyright (C) 2004 - 2008 The Jam Warehouse Software (Pty) Limited |
| 8 | - * | 8 | + * |
| 9 | * This program is free software; you can redistribute it and/or modify it under | 9 | * This program is free software; you can redistribute it and/or modify it under |
| 10 | * the terms of the GNU General Public License version 3 as published by the | 10 | * the terms of the GNU General Public License version 3 as published by the |
| 11 | * Free Software Foundation. | 11 | * Free Software Foundation. |
| 12 | - * | 12 | + * |
| 13 | * This program is distributed in the hope that it will be useful, but WITHOUT | 13 | * This program is distributed in the hope that it will be useful, but WITHOUT |
| 14 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | 14 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| 15 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more | 15 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| 16 | * details. | 16 | * details. |
| 17 | - * | 17 | + * |
| 18 | * You should have received a copy of the GNU General Public License | 18 | * You should have received a copy of the GNU General Public License |
| 19 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | 19 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 20 | - * | 20 | + * |
| 21 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, | 21 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, |
| 22 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. | 22 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. |
| 23 | - * | 23 | + * |
| 24 | * The interactive user interfaces in modified source and object code versions | 24 | * The interactive user interfaces in modified source and object code versions |
| 25 | * of this program must display Appropriate Legal Notices, as required under | 25 | * of this program must display Appropriate Legal Notices, as required under |
| 26 | * Section 5 of the GNU General Public License version 3. | 26 | * Section 5 of the GNU General Public License version 3. |
| 27 | - * | 27 | + * |
| 28 | * In accordance with Section 7(b) of the GNU General Public License version 3, | 28 | * In accordance with Section 7(b) of the GNU General Public License version 3, |
| 29 | * these Appropriate Legal Notices must retain the display of the "Powered by | 29 | * these Appropriate Legal Notices must retain the display of the "Powered by |
| 30 | - * KnowledgeTree" logo and retain the original copyright notice. If the display of the | 30 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the |
| 31 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices | 31 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices |
| 32 | - * must display the words "Powered by KnowledgeTree" and retain the original | ||
| 33 | - * copyright notice. | 32 | + * must display the words "Powered by KnowledgeTree" and retain the original |
| 33 | + * copyright notice. | ||
| 34 | * Contributor( s): ______________________________________ | 34 | * Contributor( s): ______________________________________ |
| 35 | * | 35 | * |
| 36 | */ | 36 | */ |
| @@ -203,6 +203,121 @@ class KTDocumentAction extends KTStandardDispatcher { | @@ -203,6 +203,121 @@ class KTDocumentAction extends KTStandardDispatcher { | ||
| 203 | } | 203 | } |
| 204 | } | 204 | } |
| 205 | 205 | ||
| 206 | +class JavascriptDocumentAction extends KTDocumentAction | ||
| 207 | +{ | ||
| 208 | + /** | ||
| 209 | + * This is an array of js files to be included for this action | ||
| 210 | + * | ||
| 211 | + * @var array | ||
| 212 | + */ | ||
| 213 | + var $js_paths = array(); | ||
| 214 | + /** | ||
| 215 | + * This is custom javascript that should be included | ||
| 216 | + * | ||
| 217 | + * @var array | ||
| 218 | + */ | ||
| 219 | + var $js = array(); | ||
| 220 | + /** | ||
| 221 | + * Indicates if a custom function should be provided, or if the function is part of an existing js file. | ||
| 222 | + * If true | ||
| 223 | + * | ||
| 224 | + * @var boolean | ||
| 225 | + */ | ||
| 226 | + var $function_provided_by_action = true; | ||
| 227 | + | ||
| 228 | + /** | ||
| 229 | + * Set the function name if you have a custom name you want to provide. | ||
| 230 | + * | ||
| 231 | + * @var string | ||
| 232 | + */ | ||
| 233 | + var $function_name = null; | ||
| 234 | + | ||
| 235 | + function JavascriptDocumentAction($oDocument = null, $oUser = null, $oPlugin = null) | ||
| 236 | + { | ||
| 237 | + parent::KTDocumentAction($oDocument, $oUser, $oPlugin); | ||
| 238 | + $this->js_initialise(); | ||
| 239 | + } | ||
| 240 | + | ||
| 241 | + function js_initialise() | ||
| 242 | + { | ||
| 243 | + // this will be overridden | ||
| 244 | + } | ||
| 245 | + | ||
| 246 | + function js_include($js) | ||
| 247 | + { | ||
| 248 | + $this->js[] = $js; | ||
| 249 | + } | ||
| 250 | + | ||
| 251 | + function js_include_file($path) | ||
| 252 | + { | ||
| 253 | + global $AjaxDocumentJSPaths; | ||
| 254 | + | ||
| 255 | + if (!isset($AjaxDocumentJSPaths)) | ||
| 256 | + { | ||
| 257 | + $AjaxDocumentJSPaths = array(); | ||
| 258 | + } | ||
| 259 | + | ||
| 260 | + if (!in_array($AjaxDocumentJSPaths)) | ||
| 261 | + { | ||
| 262 | + $AjaxDocumentJSPaths[] = $path; | ||
| 263 | + $this->js_paths [] = $path; | ||
| 264 | + } | ||
| 265 | + } | ||
| 266 | + | ||
| 267 | + function customiseInfo($aInfo) | ||
| 268 | + { | ||
| 269 | + $js = ''; | ||
| 270 | + foreach($this->js_paths as $path) | ||
| 271 | + { | ||
| 272 | + $js .= "<script language=\"javascript\" src=\"$path\"></script>\n"; | ||
| 273 | + } | ||
| 274 | + | ||
| 275 | + $js .= '<script language="javascript">'. "\n"; | ||
| 276 | + foreach($this->js as $js2) | ||
| 277 | + { | ||
| 278 | + $js .= $js2 . "\n"; | ||
| 279 | + } | ||
| 280 | + | ||
| 281 | + $js .= $this->getScript() . '</script>'. "\n"; | ||
| 282 | + | ||
| 283 | + $js .= '<div onclick="' . $this->getScriptActivation() . '"><a>' . $this->getDisplayName() . '</a></div>'. "\n"; | ||
| 284 | + | ||
| 285 | + | ||
| 286 | + $aInfo['js'] = $js; | ||
| 287 | + | ||
| 288 | + return $aInfo; | ||
| 289 | + } | ||
| 290 | + | ||
| 291 | + function getScript() | ||
| 292 | + { | ||
| 293 | + if ($this->function_provided_by_action === false) | ||
| 294 | + { | ||
| 295 | + return ''; | ||
| 296 | + } | ||
| 297 | + return "function " . $this->getScriptActivation() . '{'.$this->getFunctionScript().'}'; | ||
| 298 | + } | ||
| 299 | + | ||
| 300 | + function getFunctionScript() | ||
| 301 | + { | ||
| 302 | + return 'alert(\''. $this->getDisplayName() .' not implemented!\');'; | ||
| 303 | + } | ||
| 304 | + | ||
| 305 | + function getScriptActivation() | ||
| 306 | + { | ||
| 307 | + if (!is_null($this->function_name)) | ||
| 308 | + { | ||
| 309 | + return $this->function_name; | ||
| 310 | + } | ||
| 311 | + | ||
| 312 | + global $AjaxDocumentActions; | ||
| 313 | + $class = get_class($this); | ||
| 314 | + return 'js' . $class. 'Dispatcher()'; | ||
| 315 | + } | ||
| 316 | + | ||
| 317 | + | ||
| 318 | + | ||
| 319 | +} | ||
| 320 | + | ||
| 206 | class KTDocumentActionUtil { | 321 | class KTDocumentActionUtil { |
| 207 | function getDocumentActionInfo($slot = 'documentaction') { | 322 | function getDocumentActionInfo($slot = 'documentaction') { |
| 208 | $oRegistry =& KTActionRegistry::getSingleton(); | 323 | $oRegistry =& KTActionRegistry::getSingleton(); |
lib/actions/folderaction.inc.php
| @@ -5,32 +5,32 @@ | @@ -5,32 +5,32 @@ | ||
| 5 | * KnowledgeTree Open Source Edition | 5 | * KnowledgeTree Open Source Edition |
| 6 | * Document Management Made Simple | 6 | * Document Management Made Simple |
| 7 | * Copyright (C) 2004 - 2008 The Jam Warehouse Software (Pty) Limited | 7 | * Copyright (C) 2004 - 2008 The Jam Warehouse Software (Pty) Limited |
| 8 | - * | 8 | + * |
| 9 | * This program is free software; you can redistribute it and/or modify it under | 9 | * This program is free software; you can redistribute it and/or modify it under |
| 10 | * the terms of the GNU General Public License version 3 as published by the | 10 | * the terms of the GNU General Public License version 3 as published by the |
| 11 | * Free Software Foundation. | 11 | * Free Software Foundation. |
| 12 | - * | 12 | + * |
| 13 | * This program is distributed in the hope that it will be useful, but WITHOUT | 13 | * This program is distributed in the hope that it will be useful, but WITHOUT |
| 14 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | 14 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| 15 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more | 15 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| 16 | * details. | 16 | * details. |
| 17 | - * | 17 | + * |
| 18 | * You should have received a copy of the GNU General Public License | 18 | * You should have received a copy of the GNU General Public License |
| 19 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | 19 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 20 | - * | 20 | + * |
| 21 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, | 21 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, |
| 22 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. | 22 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. |
| 23 | - * | 23 | + * |
| 24 | * The interactive user interfaces in modified source and object code versions | 24 | * The interactive user interfaces in modified source and object code versions |
| 25 | * of this program must display Appropriate Legal Notices, as required under | 25 | * of this program must display Appropriate Legal Notices, as required under |
| 26 | * Section 5 of the GNU General Public License version 3. | 26 | * Section 5 of the GNU General Public License version 3. |
| 27 | - * | 27 | + * |
| 28 | * In accordance with Section 7(b) of the GNU General Public License version 3, | 28 | * In accordance with Section 7(b) of the GNU General Public License version 3, |
| 29 | * these Appropriate Legal Notices must retain the display of the "Powered by | 29 | * these Appropriate Legal Notices must retain the display of the "Powered by |
| 30 | - * KnowledgeTree" logo and retain the original copyright notice. If the display of the | 30 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the |
| 31 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices | 31 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices |
| 32 | - * must display the words "Powered by KnowledgeTree" and retain the original | ||
| 33 | - * copyright notice. | 32 | + * must display the words "Powered by KnowledgeTree" and retain the original |
| 33 | + * copyright notice. | ||
| 34 | * Contributor( s): ______________________________________ | 34 | * Contributor( s): ______________________________________ |
| 35 | * | 35 | * |
| 36 | */ | 36 | */ |
| @@ -177,6 +177,122 @@ class KTFolderAction extends KTStandardDispatcher { | @@ -177,6 +177,122 @@ class KTFolderAction extends KTStandardDispatcher { | ||
| 177 | 177 | ||
| 178 | } | 178 | } |
| 179 | 179 | ||
| 180 | +class JavascriptFolderAction extends KTFolderAction | ||
| 181 | +{ | ||
| 182 | + /** | ||
| 183 | + * This is an array of js files to be included for this action | ||
| 184 | + * | ||
| 185 | + * @var array | ||
| 186 | + */ | ||
| 187 | + var $js_paths = array(); | ||
| 188 | + /** | ||
| 189 | + * This is custom javascript that should be included | ||
| 190 | + * | ||
| 191 | + * @var array | ||
| 192 | + */ | ||
| 193 | + var $js = array(); | ||
| 194 | + /** | ||
| 195 | + * Indicates if a custom function should be provided, or if the function is part of an existing js file. | ||
| 196 | + * If true | ||
| 197 | + * | ||
| 198 | + * @var boolean | ||
| 199 | + */ | ||
| 200 | + var $function_provided_by_action = true; | ||
| 201 | + | ||
| 202 | + /** | ||
| 203 | + * Set the function name if you have a custom name you want to provide. | ||
| 204 | + * | ||
| 205 | + * @var string | ||
| 206 | + */ | ||
| 207 | + var $function_name = null; | ||
| 208 | + | ||
| 209 | + function JavascriptFolderAction($oFolder = null, $oUser = null, $oPlugin = null) | ||
| 210 | + { | ||
| 211 | + parent::KTFolderAction($oFolder, $oUser, $oPlugin); | ||
| 212 | + $this->js_initialise(); | ||
| 213 | + } | ||
| 214 | + | ||
| 215 | + function js_initialise() | ||
| 216 | + { | ||
| 217 | + // this will be overridden | ||
| 218 | + } | ||
| 219 | + | ||
| 220 | + function js_include($js) | ||
| 221 | + { | ||
| 222 | + $this->js[] = $js; | ||
| 223 | + } | ||
| 224 | + | ||
| 225 | + function js_include_file($path) | ||
| 226 | + { | ||
| 227 | + global $AjaxDocumentJSPaths; | ||
| 228 | + | ||
| 229 | + if (!isset($AjaxDocumentJSPaths)) | ||
| 230 | + { | ||
| 231 | + $AjaxDocumentJSPaths = array(); | ||
| 232 | + } | ||
| 233 | + | ||
| 234 | + if (!in_array($AjaxDocumentJSPaths)) | ||
| 235 | + { | ||
| 236 | + $AjaxDocumentJSPaths[] = $path; | ||
| 237 | + $this->js_paths [] = $path; | ||
| 238 | + } | ||
| 239 | + } | ||
| 240 | + | ||
| 241 | + function customiseInfo($aInfo) | ||
| 242 | + { | ||
| 243 | + $js = ''; | ||
| 244 | + foreach($this->js_paths as $path) | ||
| 245 | + { | ||
| 246 | + $js .= "<script language=\"javascript\" src=\"$path\"></script>\n"; | ||
| 247 | + } | ||
| 248 | + | ||
| 249 | + $js .= '<script language="javascript">'. "\n"; | ||
| 250 | + foreach($this->js as $js2) | ||
| 251 | + { | ||
| 252 | + $js .= $js2 . "\n"; | ||
| 253 | + } | ||
| 254 | + | ||
| 255 | + $js .= $this->getScript() . '</script>'. "\n"; | ||
| 256 | + | ||
| 257 | + $js .= '<div onclick="' . $this->getScriptActivation() . '"><a>' . $this->getDisplayName() . '</a></div>'. "\n"; | ||
| 258 | + | ||
| 259 | + | ||
| 260 | + $aInfo['js'] = $js; | ||
| 261 | + | ||
| 262 | + return $aInfo; | ||
| 263 | + } | ||
| 264 | + | ||
| 265 | + function getScript() | ||
| 266 | + { | ||
| 267 | + if ($this->function_provided_by_action === false) | ||
| 268 | + { | ||
| 269 | + return ''; | ||
| 270 | + } | ||
| 271 | + return "function " . $this->getScriptActivation() . '{'.$this->getFunctionScript().'}'; | ||
| 272 | + } | ||
| 273 | + | ||
| 274 | + function getFunctionScript() | ||
| 275 | + { | ||
| 276 | + return 'alert(\''. $this->getDisplayName() .' not implemented!\');'; | ||
| 277 | + } | ||
| 278 | + | ||
| 279 | + function getScriptActivation() | ||
| 280 | + { | ||
| 281 | + if (!is_null($this->function_name)) | ||
| 282 | + { | ||
| 283 | + return $this->function_name; | ||
| 284 | + } | ||
| 285 | + | ||
| 286 | + global $AjaxDocumentActions; | ||
| 287 | + $class = get_class($this); | ||
| 288 | + return 'js' . $class. 'Dispatcher()'; | ||
| 289 | + } | ||
| 290 | + | ||
| 291 | + | ||
| 292 | + | ||
| 293 | +} | ||
| 294 | + | ||
| 295 | + | ||
| 180 | class KTFolderActionUtil { | 296 | class KTFolderActionUtil { |
| 181 | function getFolderActions() { | 297 | function getFolderActions() { |
| 182 | $oRegistry =& KTActionRegistry::getSingleton(); | 298 | $oRegistry =& KTActionRegistry::getSingleton(); |
templates/kt3/portlets/actions_portlet.smarty
| @@ -2,6 +2,9 @@ | @@ -2,6 +2,9 @@ | ||
| 2 | {foreach item=action from=$context->actions } | 2 | {foreach item=action from=$context->actions } |
| 3 | {if $action != null} | 3 | {if $action != null} |
| 4 | <li {if $action.active}class="active"{/if}> | 4 | <li {if $action.active}class="active"{/if}> |
| 5 | +{if $action.js} | ||
| 6 | + {$action.js} | ||
| 7 | +{else} | ||
| 5 | {if ($action.url)} | 8 | {if ($action.url)} |
| 6 | <a href="{$action.url}" {if $action.description}title="{$action.description}"{/if}> | 9 | <a href="{$action.url}" {if $action.description}title="{$action.description}"{/if}> |
| 7 | {$action.name} | 10 | {$action.name} |
| @@ -10,5 +13,6 @@ | @@ -10,5 +13,6 @@ | ||
| 10 | {$action.name} | 13 | {$action.name} |
| 11 | {/if}</li> | 14 | {/if}</li> |
| 12 | {/if} | 15 | {/if} |
| 16 | +{/if} | ||
| 13 | {/foreach} | 17 | {/foreach} |
| 14 | </ul> | 18 | </ul> |
templates/ktcore/forms/widgets/string.smarty
| 1 | - <input type="text" name="{$name}" {if $has_id}id="{$id}"{/if} {if $has_value}value="{$value|sanitize_input}"{/if}{if ($options.autocomplete === false)}autocomplete="off"{/if} {if $options.width}size="{$options.width}"{/if} /> | 1 | + <input type="text" name="{$name}" {if $has_id}id="{$id}"{/if} {if $has_value}value="{$value|sanitize_input}"{/if}{if ($options.autocomplete === false)}autocomplete="off"{/if} {if $options.width}size="{$options.width}"{/if} {if $options.onchange}onchange="{$options.onchange}" {/if}/> |