| [ Index ] |
|
Code source de b2evolution 2.1.0-beta |
1 <?php 2 /** 3 * This file implements the UI controller for managing widgets inside of a blog. 4 * 5 * b2evolution - {@link http://b2evolution.net/} 6 * Released under GNU GPL License - {@link http://b2evolution.net/about/license.html} 7 * @copyright (c)2003-2007 by Francois PLANQUE - {@link http://fplanque.net/} 8 * 9 * {@internal Open Source relicensing agreement: 10 * }} 11 * 12 * {@internal Below is a list of authors who have contributed to design/coding of this file: }} 13 * @author fplanque: Francois PLANQUE. 14 * 15 * @package admin 16 * 17 * @version $Id: widgets.ctrl.php,v 1.1 2007/06/25 11:01:54 fplanque Exp $ 18 */ 19 if( !defined('EVO_MAIN_INIT') ) die( 'Please, do not access this page directly.' ); 20 21 /** 22 * @var AdminUI 23 */ 24 global $AdminUI; 25 /** 26 * @var Plugins 27 */ 28 global $Plugins; 29 30 load_class( 'widgets/model/_widget.class.php' ); 31 32 param( 'action', 'string', 'list' ); 33 34 /* 35 * Init the objects we want to work on. 36 */ 37 switch( $action ) 38 { 39 case 'nil': 40 case 'list': 41 // Do nothing 42 break; 43 44 case 'create': 45 param( 'type', 'string', true ); 46 param( 'code', 'string', true ); 47 case 'new': 48 param( 'container', 'string', true, true ); // memorize 49 break; 50 51 case 'edit': 52 case 'update': 53 case 'delete': 54 case 'move_up': 55 case 'move_down': 56 param( 'wi_ID', 'integer', true ); 57 $WidgetCache = & get_Cache( 'WidgetCache' ); 58 $edited_ComponentWidget = & $WidgetCache->get_by_ID( $wi_ID ); 59 // Take blog from here! 60 // echo $edited_ComponentWidget->coll_ID; 61 set_working_blog( $edited_ComponentWidget->coll_ID ); 62 $BlogCache = & get_Cache( 'BlogCache' ); 63 $Blog = & $BlogCache->get_by_ID( $blog ); 64 65 break; 66 67 default: 68 debug_die( 'Init objects: unhandled action' ); 69 } 70 71 if( ! valid_blog_requested() ) 72 { 73 debug_die( 'Invalid blog requested' ); 74 } 75 $current_User->check_perm( 'blog_properties', 'edit', true, $blog ); 76 77 // Get Skin used by current Blog: 78 $SkinCache = & get_Cache( 'SkinCache' ); 79 $Skin = & $SkinCache->get_by_ID( $Blog->skin_ID ); 80 // Make sure containers are loaded for that skin: 81 $container_list = $Skin->get_containers(); 82 83 84 /** 85 * Perform action: 86 */ 87 switch( $action ) 88 { 89 case 'nil': 90 case 'new': 91 case 'edit': 92 // Do nothing 93 break; 94 95 case 'create': 96 // Add a Widget to container: 97 if( !in_array( $container, $container_list ) ) 98 { 99 $Messages->add( T_('WARNING: you are adding to a container that does not seem to be part of the current skin.'), 'error' ); 100 } 101 102 switch( $type ) 103 { 104 case 'core': 105 // Check the requested core widget is valid: 106 load_class( 'widgets/widgets/_'.$code.'.widget.php' ); 107 $objtype = $code.'_Widget'; 108 $edited_ComponentWidget = & new $objtype(); 109 break; 110 111 case 'plugin': 112 if( ! $Plugin = & $Plugins->get_by_code( $code ) ) 113 { 114 debug_die( 'Requested plugin not found' ); 115 } 116 if( ! $Plugins->has_event( $Plugin->ID, 'SkinTag' ) ) 117 { 118 debug_die( 'Requested plugin does not support SkinTag' ); 119 } 120 $edited_ComponentWidget = & new ComponentWidget( NULL, 'plugin', $code, array() ); 121 break; 122 123 default: 124 debug_die( 'Unhandled widget type' ); 125 } 126 127 $edited_ComponentWidget->set( 'coll_ID', $Blog->ID ); 128 $edited_ComponentWidget->set( 'sco_name', $container ); 129 130 // INSERT INTO DB: 131 $edited_ComponentWidget->dbinsert(); 132 133 $Messages->add( sprintf( T_('Widget «%s» has been added to container «%s».'), 134 $edited_ComponentWidget->get_name(), T_($container) ), 'success' ); 135 136 header_redirect( '?ctrl=widgets&blog='.$Blog->ID ); 137 break; 138 139 140 case 'update': 141 // Update Settings 142 143 load_funcs('plugins/_plugin.funcs.php'); 144 145 // Loop through all widget params: 146 foreach( $edited_ComponentWidget->get_param_definitions( array('for_editing'=>true) ) as $parname => $parmeta ) 147 { 148 autoform_set_param_from_request( $parname, $parmeta, $edited_ComponentWidget, 'Widget' ); 149 } 150 151 if( ! param_errors_detected() ) 152 { // Update settings: 153 $edited_ComponentWidget->dbupdate(); 154 $Messages->add( T_('Widget settings have been updated'), 'success' ); 155 $action = 'list'; 156 } 157 break; 158 159 160 case 'move_up': 161 // Move the widget up: 162 163 $order = $edited_ComponentWidget->order; 164 $DB->begin(); 165 166 // Get the previous element 167 $row = $DB->get_row( 'SELECT * 168 FROM T_widget 169 WHERE wi_coll_ID = '.$Blog->ID.' 170 AND wi_sco_name = '.$DB->quote($edited_ComponentWidget->sco_name).' 171 AND wi_order < '.$order.' 172 ORDER BY wi_order DESC 173 LIMIT 0,1' ); 174 if( !empty( $row) ) 175 { 176 $prev_ComponentWidget = & new ComponentWidget( $row ); 177 $prev_order = $prev_ComponentWidget->order; 178 179 $edited_ComponentWidget->set( 'order', 0 ); // Temporary 180 $edited_ComponentWidget->dbupdate(); 181 182 $prev_ComponentWidget->set( 'order', $order ); 183 $prev_ComponentWidget->dbupdate(); 184 185 $edited_ComponentWidget->set( 'order', $prev_order ); 186 $edited_ComponentWidget->dbupdate(); 187 188 } 189 $DB->commit(); 190 break; 191 192 case 'move_down': 193 // Move the widget down: 194 195 $order = $edited_ComponentWidget->order; 196 $DB->begin(); 197 198 // Get the next element 199 $row = $DB->get_row( 'SELECT * 200 FROM T_widget 201 WHERE wi_coll_ID = '.$Blog->ID.' 202 AND wi_sco_name = '.$DB->quote($edited_ComponentWidget->sco_name).' 203 AND wi_order > '.$order.' 204 ORDER BY wi_order ASC 205 LIMIT 0,1' ); 206 if( !empty( $row) ) 207 { 208 $next_ComponentWidget = & new ComponentWidget( $row ); 209 $next_order = $next_ComponentWidget->order; 210 211 $edited_ComponentWidget->set( 'order', 0 ); // Temporary 212 $edited_ComponentWidget->dbupdate(); 213 214 $next_ComponentWidget->set( 'order', $order ); 215 $next_ComponentWidget->dbupdate(); 216 217 $edited_ComponentWidget->set( 'order', $next_order ); 218 $edited_ComponentWidget->dbupdate(); 219 220 } 221 $DB->commit(); 222 break; 223 224 case 'delete': 225 // Remove a widget from container: 226 $msg = sprintf( T_('Widget «%s» removed.'), $edited_ComponentWidget->get_name() ); 227 $edited_ComponentWidget->dbdelete( true ); 228 unset( $edited_ComponentWidget ); 229 forget_param( 'wi_ID' ); 230 $Messages->add( $msg, 'success' ); 231 232 // PREVENT RELOAD & Switch to list mode: 233 header_redirect( '?ctrl=widgets&blog='.$blog ); 234 break; 235 236 case 'list': 237 break; 238 239 default: 240 debug_die( 'Action: unhandled action' ); 241 } 242 243 244 /** 245 * Display page header, menus & messages: 246 */ 247 $blogListButtons = $AdminUI->get_html_collection_list( 'blog_properties', 'edit', 248 '?ctrl=widgets&blog=%d', T_('List'), '?ctrl=collections&blog=0' ); 249 250 $AdminUI->set_path( 'blogs', 'widgets' ); 251 252 // Display <html><head>...</head> section! (Note: should be done early if actions do not redirect) 253 $AdminUI->disp_html_head(); 254 255 // Display title, menu, messages, etc. (Note: messages MUST be displayed AFTER the actions) 256 $AdminUI->disp_body_top(); 257 258 259 /** 260 * Display payload: 261 */ 262 switch( $action ) 263 { 264 case 'nil': 265 // Do nothing 266 break; 267 268 269 case 'new': 270 // Begin payload block: 271 $AdminUI->disp_payload_begin(); 272 273 // Display VIEW: 274 $AdminUI->disp_view( 'widgets/views/_widget_list_available.view.php' ); 275 276 // End payload block: 277 $AdminUI->disp_payload_end(); 278 break; 279 280 281 case 'edit': 282 case 'update': // on error 283 // Begin payload block: 284 $AdminUI->disp_payload_begin(); 285 286 // Display VIEW: 287 $AdminUI->disp_view( 'widgets/views/_widget.form.php' ); 288 289 290 // End payload block: 291 $AdminUI->disp_payload_end(); 292 break; 293 294 295 case 'list': 296 default: 297 // Begin payload block: 298 $AdminUI->disp_payload_begin(); 299 300 // Display VIEW: 301 $AdminUI->disp_view( 'widgets/views/_widget_list.view.php' ); 302 303 // End payload block: 304 $AdminUI->disp_payload_end(); 305 break; 306 } 307 308 // Display body bottom, debug info and close </html>: 309 $AdminUI->disp_global_footer(); 310 311 312 /* 313 * $Log: widgets.ctrl.php,v $ 314 * Revision 1.1 2007/06/25 11:01:54 fplanque 315 * MODULES (refactored MVC) 316 * 317 * Revision 1.14 2007/06/23 22:05:17 fplanque 318 * fixes 319 * 320 * Revision 1.13 2007/06/22 23:46:43 fplanque 321 * bug fixes 322 * 323 * Revision 1.12 2007/06/19 20:42:53 fplanque 324 * basic demo of widget params handled by autoform_* 325 * 326 * Revision 1.11 2007/06/19 00:03:27 fplanque 327 * doc / trying to make sense of automatic settings forms generation. 328 * 329 * Revision 1.10 2007/06/18 21:25:47 fplanque 330 * one class per core widget 331 * 332 * Revision 1.9 2007/04/26 00:11:07 fplanque 333 * (c) 2007 334 * 335 * Revision 1.8 2007/03/26 17:12:40 fplanque 336 * allow moving of widgets 337 * 338 * Revision 1.7 2007/01/14 01:32:11 fplanque 339 * more widgets supported! :) 340 * 341 * Revision 1.6 2007/01/13 04:10:44 fplanque 342 * implemented "add" support for plugin widgets 343 * 344 * Revision 1.5 2007/01/12 05:15:07 fplanque 345 * minor fix 346 * 347 * Revision 1.4 2007/01/12 02:40:26 fplanque 348 * widget default params proof of concept 349 * (param customization to be done) 350 * 351 * Revision 1.3 2007/01/11 02:57:25 fplanque 352 * implemented removing widgets from containers 353 * 354 * Revision 1.2 2007/01/08 23:45:48 fplanque 355 * A little less rough widget manager... 356 * (can handle multiple instances of same widget and remembers order) 357 * 358 * Revision 1.1 2007/01/08 21:55:42 fplanque 359 * very rough widget handling 360 * 361 */ 362 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
| Généré le : Thu Nov 29 23:58:50 2007 | par Balluche grâce à PHPXref 0.7 |
|