[ Index ]
 

Code source de b2evolution 2.1.0-beta

Accédez au Source d'autres logiciels libres

Classes | Fonctions | Variables | Constantes | Tables

title

Body

[fermer]

/blogs/inc/widgets/ -> widgets.ctrl.php (source)

   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 &laquo;%s&raquo; has been added to container &laquo;%s&raquo;.'),
 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 &laquo;%s&raquo; 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&amp;blog=%d', T_('List'), '?ctrl=collections&amp;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  ?>


Généré le : Thu Nov 29 23:58:50 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics