127
// Note: we need to *not* use $p in the cases above or it will conflict with the list display
100
// Note: we need to *not* use $p in the cases above or it will conflict with the list display
128
101
case 'edit_switchtab': // this gets set as action by JS, when we switch tabs
129
// Load post to edit:
130
param( 'post_ID', 'integer', true, true );
131
$ItemCache = & get_Cache( 'ItemCache' );
132
$edited_Item = & $ItemCache->get_by_ID( $post_ID );
134
// Load the blog we're in:
135
$Blog = & $edited_Item->get_Blog();
136
set_working_blog( $Blog->ID );
103
param( 'post_ID', 'integer', true, true );
104
$ItemCache = & get_Cache( 'ItemCache' );
105
$edited_Item = & $ItemCache->get_by_ID( $post_ID );
106
// Load the blog we're in
107
$Blog = & $edited_Item->get_Blog();
108
set_working_blog( $Blog->ID );
109
// Where are we going to redirect to?
110
param( 'redirect_to', 'string', url_add_param( $admin_url, 'ctrl=items&filter=restore&blog='.$Blog->ID.'&highlight='.$edited_Item->ID, '&' ) );
111
// What form button has been pressed?
112
param( 'save', 'string', '' );
113
$exit_after_save = ( $action != 'update_edit' );
117
case 'new_switchtab': // this gets set as action by JS, when we switch tabs
120
case 'create_publish':
122
if( $action == 'list' )
124
// We only need view permission
125
$selected = autoselect_blog( 'blog_ismember', 'view' );
129
// We need posting permission
130
$selected = autoselect_blog( 'blog_post_statuses', 'edit' );
134
// No blog could be selected
135
$Messages->add( T_('Sorry, you have no permission to post yet.'), 'error' );
140
if( set_working_blog( $selected ) ) // set $blog & memorize in user prefs
142
// Selected a new blog
143
$BlogCache = & get_Cache( 'BlogCache' );
144
$Blog = & $BlogCache->get_by_ID( $blog );
138
146
// Where are we going to redirect to?
139
param( 'redirect_to', 'string', url_add_param( $admin_url, 'ctrl=items&filter=restore&blog='.$Blog->ID.'&highlight='.$edited_Item->ID, '&' ) );
141
// What form button has been pressed?
147
param( 'redirect_to', 'string', url_add_param( $admin_url, 'ctrl=items&filter=restore&blog='.$Blog->ID, '&' ) );
148
// What form buttton has been pressed?
142
149
param( 'save', 'string', '' );
143
$exit_after_save = ( $action != 'update_edit' );
147
case 'new_switchtab': // this gets set as action by JS, when we switch tabs
150
case 'create_publish':
152
if( $action == 'list' )
153
{ // We only need view permission
154
$selected = autoselect_blog( 'blog_ismember', 'view' );
157
{ // We need posting permission
158
$selected = autoselect_blog( 'blog_post_statuses', 'edit' );
162
{ // No blog could be selected
163
$Messages->add( T_('Sorry, you have no permission to post yet.'), 'error' );
168
if( set_working_blog( $selected ) ) // set $blog & memorize in user prefs
169
{ // Selected a new blog:
170
$BlogCache = & get_Cache( 'BlogCache' );
171
$Blog = & $BlogCache->get_by_ID( $blog );
174
// Where are we going to redirect to?
175
param( 'redirect_to', 'string', url_add_param( $admin_url, 'ctrl=items&filter=restore&blog='.$Blog->ID, '&' ) );
177
// What form buttton has been pressed?
178
param( 'save', 'string', '' );
179
$exit_after_save = ( $action != 'create_edit' );
150
$exit_after_save = ( $action != 'create_edit' );
184
debug_die( 'unhandled action 1:'.htmlspecialchars($action) );
155
debug_die( 'unhandled action 1:'.htmlspecialchars( $action ) );
191
159
switch( $action )
198
$set_issue_date = 'now';
199
$item_issue_date = date_i18n( locale_datefmt(), $localtimenow );
200
$item_issue_time = date( 'H:i:s', $localtimenow );
166
$set_issue_date = 'now';
167
$item_issue_date = date_i18n( locale_datefmt(), $localtimenow );
168
$item_issue_time = date( 'H:i:s', $localtimenow );
202
170
case 'new_switchtab': // this gets set as action by JS, when we switch tabs
203
// New post form (can be a bookmarklet form if mode == bookmarklet )
205
load_class('items/model/_item.class.php');
206
$edited_Item = new Item();
208
$edited_Item->set('main_cat_ID', $Blog->get_default_cat_ID());
210
// We use the request variables to fill the edit form, because we need to be able to pass those values
211
// from tab to tab via javascript when the editor wants to switch views...
212
// Also used by bookmarklet
213
$edited_Item->load_from_Request( true ); // needs Blog set
215
$edited_Item->status = param( 'post_status', 'string', NULL ); // 'published' or 'draft' or ...
216
// We know we can use at least one status,
217
// but we need to make sure the requested/default one is ok:
218
$edited_Item->status = $Blog->get_allowed_item_status( $edited_Item->status );
221
param( 'post_extracats', 'array', array() );
223
$edited_Item->set('main_cat_ID', param( 'post_category', 'integer', $Blog->get_default_cat_ID() ));
224
if( $edited_Item->main_cat_ID && $allow_cross_posting < 3 && $edited_Item->get_blog_ID() != $blog )
225
{ // the main cat is not in the list of categories; this happens, if the user switches blogs during editing:
226
$edited_Item->set('main_cat_ID', $Blog->get_default_cat_ID());
228
$post_extracats = param( 'post_extracats', 'array', $post_extracats );
230
param( 'item_tags', 'string', '' );
232
// Trackback addresses (never saved into item)
233
param( 'trackback_url', 'string', '' );
236
$AdminUI->title = T_('New post:').' ';
237
if( param( 'item_typ_ID', 'integer', NULL ) !== NULL )
239
switch( $item_typ_ID )
242
$AdminUI->title = T_('New page:').' ';
246
$AdminUI->title = T_('New intro:').' ';
250
$AdminUI->title = T_('New podcast episode:').' ';
254
$AdminUI->title = T_('New link:').' ';
259
$AdminUI->title_titlearea = $AdminUI->title;
260
$js_doc_title_prefix = $AdminUI->title;
262
// Params we need for tab switching:
171
// New post form (can be a bookmarklet form if mode == bookmarklet )
172
$edited_Item = new Item();
173
$edited_Item->set('main_cat_ID', $Blog->get_default_cat_ID());
174
// We use the request variables to fill the edit form, because we need to be able to pass those values
175
// from tab to tab via javascript when the editor wants to switch views...
176
// Also used by bookmarklet
177
$edited_Item->load_from_Request( true ); // needs Blog set
178
$edited_Item->status = param( 'post_status', 'string', NULL ); // 'published' or 'draft' or ...
179
// We know we can use at least one status,
180
// but we need to make sure the requested/default one is ok:
181
$edited_Item->status = $Blog->get_allowed_item_status( $edited_Item->status );
182
param( 'post_extracats', 'array', array() );
183
$edited_Item->set('main_cat_ID', param( 'post_category', 'integer', $Blog->get_default_cat_ID() ));
184
if( $edited_Item->main_cat_ID && $allow_cross_posting < 3 && $edited_Item->get_blog_ID() != $blog )
186
// the main cat is not in the list of categories; this happens, if the user switches blogs during editing
187
$edited_Item->set('main_cat_ID', $Blog->get_default_cat_ID());
189
$post_extracats = param( 'post_extracats', 'array', $post_extracats );
190
param( 'item_tags', 'string', '' );
191
// Trackback addresses (never saved into item)
192
param( 'trackback_url', 'string', '' );
194
$AdminUI->title = T_('New post:').' ';
195
if( param( 'item_typ_ID', 'integer', NULL ) !== NULL )
197
switch( $item_typ_ID )
200
$AdminUI->title = T_('New page:').' ';
207
$AdminUI->title = T_('New intro:').' ';
211
$AdminUI->title = T_('New podcast episode:').' ';
215
$AdminUI->title = T_('New link:').' ';
219
$AdminUI->title_titlearea = $AdminUI->title;
220
$js_doc_title_prefix = $AdminUI->title;
221
// Params we need for tab switching
222
$tab_switch_params = 'blog='.$blog;
225
case 'edit_switchtab': // this gets set as action by JS, when we switch tabs
226
// This is somewhat in between new and edit...
227
// Check permission based on DB status
228
$current_User->check_perm( 'item_post!CURSTATUS', 'edit', true, $edited_Item );
229
$edited_Item->status = param( 'post_status', 'string', NULL ); // 'published' or 'draft' or ...
230
// We know we can use at least one status,
231
// but we need to make sure the requested/default one is ok
232
$edited_Item->status = $Blog->get_allowed_item_status( $edited_Item->status );
233
// We use the request variables to fill the edit form, because we need to be able to pass those values
234
// from tab to tab via javascript when the editor wants to switch views...
235
$edited_Item->load_from_Request( true ); // needs Blog set
236
param( 'post_extracats', 'array', array() );
237
$edited_Item->set('main_cat_ID', param( 'post_category', 'integer', $edited_Item->main_cat_ID ));
238
if( $edited_Item->main_cat_ID && $allow_cross_posting < 3 && $edited_Item->get_blog_ID() != $blog )
240
// the main cat is not in the list of categories; this happens, if the user switches blogs during editing
241
$edited_Item->set('main_cat_ID', $Blog->get_default_cat_ID());
243
$post_extracats = param( 'post_extracats', 'array', $post_extracats );
244
param( 'item_tags', 'string', '' );
245
// Trackback addresses (never saved into item)
246
param( 'trackback_url', 'string', '' );
248
$js_doc_title_prefix = T_('Editing post').': ';
249
$AdminUI->title = $js_doc_title_prefix.$edited_Item->dget( 'title', 'htmlhead' );
250
$AdminUI->title_titlearea = sprintf( T_('Editing post #%d: %s'), $edited_Item->ID, $Blog->get( 'name' ) );
251
// Params we need for tab switching
252
$tab_switch_params = 'p='.$edited_Item->ID;
257
$current_User->check_perm( 'item_post!CURSTATUS', 'edit', true, $edited_Item );
262
$current_User->check_perm( 'item_post!CURSTATUS', 'edit', true, $edited_Item );
263
$post_comment_status = $edited_Item->get( 'comment_status' );
264
$post_extracats = $edited_Item->get_Chapter_IDs();
265
$item_tags = implode( ', ', $edited_Item->get_tags() );
267
$set_issue_date = 'set';
269
$js_doc_title_prefix = T_('Editing post').': ';
270
$AdminUI->title = $js_doc_title_prefix.$edited_Item->dget( 'title', 'htmlhead' );
271
$AdminUI->title_titlearea = sprintf( T_('Editing post #%d: %s'), $edited_Item->ID, $Blog->get( 'name' ) );
272
// Params we need for tab switching
273
$tab_switch_params = 'p='.$edited_Item->ID;
278
case 'create_publish':
279
// We need early decoding of these in order to check permissions
280
param( 'post_category', 'integer', true );
281
param( 'post_extracats', 'array', array() );
282
param( 'post_status', 'string', 'published' );
283
// Only use "published" if something other than "private" or "protected" has been selected
284
if( $action == 'create_publish' )
286
if( ! in_array( $post_status, array( 'private', 'protected' ) ) )
288
$post_status = 'published';
289
$set_issue_date = 'now';
293
// Tblue> - Perhaps this should be an error (?). Message contents could be confusing.
294
$Messages->add( sprintf( T_( 'The post has been created but not published because it seems like you wanted to set its status to "%s" instead. If you really want to make it public, manually change its status to "Published" and click the "Save" button.' ),
295
$post_status == 'protected' ? T_( 'Protected' ) : T_( 'Private' ) ), 'error' );
298
// make sure main cat is in extracat list and there are no duplicates
299
$post_extracats[] = $post_category;
300
$post_extracats = array_unique( $post_extracats );
301
// Check permission on statuses
302
$current_User->check_perm( 'cats_post!'.$post_status, 'edit', true, $post_extracats );
304
$edited_Item = new Item();
305
// Set the params we already got
306
$edited_Item->set( 'status', $post_status );
307
$edited_Item->set( 'main_cat_ID', $post_category );
308
$edited_Item->set( 'extra_cat_IDs', $post_extracats );
310
$edited_Item->load_from_Request( /* editing? */ ( $action == 'create_edit' ) );
311
$Plugins->trigger_event( 'AdminBeforeItemEditCreate', array(
312
'Item' => & $edited_Item
314
if( $Messages->count('error') )
316
// There have been some validation errors
317
// Params we need for tab switching
263
318
$tab_switch_params = 'blog='.$blog;
267
case 'edit_switchtab': // this gets set as action by JS, when we switch tabs
268
// This is somewhat in between new and edit...
270
// Check permission based on DB status:
271
$current_User->check_perm( 'item_post!CURSTATUS', 'edit', true, $edited_Item );
273
$edited_Item->status = param( 'post_status', 'string', NULL ); // 'published' or 'draft' or ...
274
// We know we can use at least one status,
275
// but we need to make sure the requested/default one is ok:
276
$edited_Item->status = $Blog->get_allowed_item_status( $edited_Item->status );
278
// We use the request variables to fill the edit form, because we need to be able to pass those values
279
// from tab to tab via javascript when the editor wants to switch views...
280
$edited_Item->load_from_Request( true ); // needs Blog set
282
param( 'post_extracats', 'array', array() );
283
$edited_Item->set('main_cat_ID', param( 'post_category', 'integer', $edited_Item->main_cat_ID ));
284
if( $edited_Item->main_cat_ID && $allow_cross_posting < 3 && $edited_Item->get_blog_ID() != $blog )
285
{ // the main cat is not in the list of categories; this happens, if the user switches blogs during editing:
286
$edited_Item->set('main_cat_ID', $Blog->get_default_cat_ID());
288
$post_extracats = param( 'post_extracats', 'array', $post_extracats );
290
param( 'item_tags', 'string', '' );
292
// Trackback addresses (never saved into item)
293
param( 'trackback_url', 'string', '' );
296
$js_doc_title_prefix = T_('Editing post').': ';
297
$AdminUI->title = $js_doc_title_prefix.$edited_Item->dget( 'title', 'htmlhead' );
298
$AdminUI->title_titlearea = sprintf( T_('Editing post #%d: %s'), $edited_Item->ID, $Blog->get('name') );
300
// Params we need for tab switching:
301
$tab_switch_params = 'p='.$edited_Item->ID;
306
$current_User->check_perm( 'item_post!CURSTATUS', 'edit', true, $edited_Item );
311
$current_User->check_perm( 'item_post!CURSTATUS', 'edit', true, $edited_Item );
313
$post_comment_status = $edited_Item->get( 'comment_status' );
314
$post_extracats = $edited_Item->get_Chapter_IDs();
316
$item_tags = implode( ', ', $edited_Item->get_tags() );
319
$set_issue_date = 'set';
322
$js_doc_title_prefix = T_('Editing post').': ';
323
$AdminUI->title = $js_doc_title_prefix.$edited_Item->dget( 'title', 'htmlhead' );
324
$AdminUI->title_titlearea = sprintf( T_('Editing post #%d: %s'), $edited_Item->ID, $Blog->get('name') );
326
// Params we need for tab switching:
327
$tab_switch_params = 'p='.$edited_Item->ID;
333
case 'create_publish':
334
// We need early decoding of these in order to check permissions:
335
param( 'post_category', 'integer', true );
336
param( 'post_extracats', 'array', array() );
337
param( 'post_status', 'string', 'published' );
339
if( $action == 'create_publish' )
341
if( ! in_array( $post_status, array( 'private', 'protected' ) ) )
342
{ /* Only use "published" if something other than "private"
343
or "protected" has been selected: */
344
$post_status = 'published';
345
$set_issue_date = 'now';
349
// Tblue> - Perhaps this should be an error (?).
350
// - Message contents could be confusing.
351
$Messages->add( sprintf( T_( 'The post has been created but not published because it seems like you wanted to set its status to "%s" instead. If you really want to make it public, manually change its status to "Published" and click the "Save" button.' ),
352
$post_status == 'protected' ? T_( 'Protected' ) : T_( 'Private' ) ), 'error' );
357
// make sure main cat is in extracat list and there are no duplicates
358
$post_extracats[] = $post_category;
359
$post_extracats = array_unique( $post_extracats );
360
// Check permission on statuses:
361
$current_User->check_perm( 'cats_post!'.$post_status, 'edit', true, $post_extracats );
365
load_class('items/model/_item.class.php');
366
$edited_Item = new Item();
368
// Set the params we already got:
369
$edited_Item->set( 'status', $post_status );
370
$edited_Item->set( 'main_cat_ID', $post_category );
371
$edited_Item->set( 'extra_cat_IDs', $post_extracats );
373
// Set object params:
374
$edited_Item->load_from_Request( /* editing? */ ($action == 'create_edit') );
376
$Plugins->trigger_event( 'AdminBeforeItemEditCreate', array( 'Item' => & $edited_Item ) );
378
if( $Messages->count('error') )
379
{ // There have been some validation errors:
380
// Params we need for tab switching:
381
$tab_switch_params = 'blog='.$blog;
385
// INSERT NEW POST INTO DB:
386
$edited_Item->dbinsert();
388
// post post-publishing operations:
389
param( 'trackback_url', 'string' );
390
if( !empty( $trackback_url ) )
392
if( $edited_Item->status != 'published' )
394
$Messages->add( T_('Post not publicly published: skipping trackback...'), 'info' );
398
load_funcs('comments/_trackback.funcs.php');
399
trackbacks( $trackback_url, $edited_Item->content, $edited_Item->title, $edited_Item->ID);
403
// Execute or schedule notifications & pings:
404
$edited_Item->handle_post_processing( $exit_after_save );
406
$Messages->add( T_('Post has been created.'), 'success' );
408
if( ! $exit_after_save )
409
{ // We want to continue editing...
410
$tab_switch_params = 'p='.$edited_Item->ID;
411
$action = 'edit'; // It's basically as if we had updated
415
if( $edited_Item->status == 'published' )
416
{ // fp> I noticed that after publishing a new post, I always want to see how the blog looks like
417
// If anyone doesn't want that, we can make this optional...
418
$edited_Item->load_Blog();
419
$redirect_to = $edited_Item->Blog->gen_blogurl();
423
header_redirect( $redirect_to );
424
// Switch to list mode:
321
// INSERT NEW POST INTO DB
322
$edited_Item->dbinsert();
323
// post post-publishing operations
324
param( 'trackback_url', 'string' );
325
if( ! empty( $trackback_url ) )
327
if( $edited_Item->status != 'published' )
329
$Messages->add( T_('Post not publicly published: skipping trackback...'), 'info' );
334
load_funcs( 'comments/_trackback.funcs.php' );
335
trackbacks( $trackback_url, $edited_Item->content, $edited_Item->title, $edited_Item->ID);
338
// Execute or schedule notifications & pings
339
$edited_Item->handle_post_processing( $exit_after_save );
340
$Messages->add( T_('Post has been created.'), 'success' );
341
if( ! $exit_after_save )
343
// We want to continue editing...
344
$tab_switch_params = 'p='.$edited_Item->ID;
345
$action = 'edit'; // It's basically as if we had updated
348
if( $edited_Item->status == 'published' )
350
// fp> I noticed that after publishing a new post, I always want to see how the
351
// blog looks like. If anyone doesn't want that, we can make this optional...
352
$edited_Item->load_Blog();
353
$redirect_to = $edited_Item->Blog->gen_blogurl();
357
header_redirect( $redirect_to );
358
// Switch to list mode
430
363
case 'update_edit':
432
365
case 'update_publish':
433
// Check edit permission:
434
$current_User->check_perm( 'item_post!CURSTATUS', 'edit', true, $edited_Item );
436
// We need early decoding of these in order to check permissions:
437
param( 'post_category', 'integer', true );
438
param( 'post_extracats', 'array', array() );
439
param( 'post_status', 'string', 'published' );
441
if( $action == 'update_publish' )
443
if( ! in_array( $post_status, array( 'private', 'protected' ) ) )
444
{ /* Only use "published" if something other than "private"
445
or "protected" has been selected: */
446
$post_status = 'published';
447
$set_issue_date = 'now';
451
// Tblue> - Perhaps this should be an error (?).
452
// - Message contents could be confusing.
453
$Messages->add( sprintf( T_( 'The post has been updated but not published because it seems like you wanted to set its status to "%s" instead. If you really want to make it public, manually change its status to "Published" and click the "Save" button.' ),
454
$post_status == 'protected' ? T_( 'Protected' ) : T_( 'Private' ) ), 'error' );
459
// make sure main cat is in extracat list and there are no duplicates
460
$post_extracats[] = $post_category;
461
$post_extracats = array_unique( $post_extracats );
462
// Check permission on statuses:
463
$current_User->check_perm( 'cats_post!'.$post_status, 'edit', true, $post_extracats );
465
// Is this post already published?
466
$was_published = $edited_Item->status == 'published';
468
// Load tags and extra categories to allow the system to check
469
// whether they have been changed. While this could look like
470
// "yet another unnecessary SQL query", it prevents deleting all
471
// the tags/categories just to insert the same all over data again.
472
$edited_Item->get_tags();
473
$edited_Item->get_Chapter_IDs();
476
// Set the params we already got:
477
$edited_Item->set( 'status', $post_status );
478
$edited_Item->set( 'main_cat_ID', $post_category );
479
$edited_Item->set( 'extra_cat_IDs', $post_extracats );
481
// Set object params:
482
$edited_Item->load_from_Request( false );
484
$Plugins->trigger_event( 'AdminBeforeItemEditUpdate', array( 'Item' => & $edited_Item ) );
486
// Params we need for tab switching (in case of error or if we save&edit)
487
$tab_switch_params = 'p='.$edited_Item->ID;
489
if( $Messages->count('error') )
490
{ // There have been some validation errors:
494
// UPDATE POST IN DB:
495
$edited_Item->dbupdate();
497
// post post-publishing operations:
498
param( 'trackback_url', 'string' );
499
if( !empty( $trackback_url ) )
501
if( $edited_Item->status != 'published' )
503
$Messages->add( T_('Post not publicly published: skipping trackback...'), 'info' );
507
load_funcs('comments/_trackback.funcs.php');
508
trackbacks( $trackback_url, $edited_Item->content, $edited_Item->title, $edited_Item->ID );
512
// Execute or schedule notifications & pings:
513
$edited_Item->handle_post_processing( $exit_after_save );
515
$Messages->add( T_('Post has been updated.'), 'success' );
517
if( ! $exit_after_save )
518
{ // We want to continue editing...
522
/* fp> I noticed that after publishing a new post, I always want
523
* to see how the blog looks like. If anyone doesn't want that,
524
* we can make this optional...
526
if( ! $was_published && $edited_Item->status == 'published' )
527
{ /* The post's last status wasn't "published", but we're going
528
to publish it now. Redirect to the blog: */
529
$edited_Item->load_Blog();
530
$redirect_to = $edited_Item->Blog->gen_blogurl();
534
header_redirect( $redirect_to );
535
// Switch to list mode:
366
// Check edit permission
367
$current_User->check_perm( 'item_post!CURSTATUS', 'edit', true, $edited_Item );
369
// We need early decoding of these in order to check permissions
370
param( 'post_category', 'integer', true );
371
param( 'post_extracats', 'array', array() );
372
param( 'post_status', 'string', 'published' );
374
if( $action == 'update_publish' )
376
// Only use "published" if something other than "private" or "protected" has been selected
377
if( ! in_array( $post_status, array( 'private', 'protected' ) ) )
379
$post_status = 'published';
380
$set_issue_date = 'now';
384
// Tblue> - Perhaps this should be an error (?). Message contents could be confusing.
385
$Messages->add( sprintf( T_( 'The post has been updated but not published because it seems like you wanted to set its status to "%s" instead. If you really want to make it public, manually change its status to "Published" and click the "Save" button.' ),
386
$post_status == 'protected' ? T_( 'Protected' ) : T_( 'Private' ) ), 'error' );
390
// make sure main cat is in extracat list and there are no duplicates
391
$post_extracats[] = $post_category;
392
$post_extracats = array_unique( $post_extracats );
393
// Check permission on statuses
394
$current_User->check_perm( 'cats_post!'.$post_status, 'edit', true, $post_extracats );
396
// Is this post already published?
397
$was_published = $edited_Item->status == 'published';
399
// Load tags and extra categories to allow the system to check
400
// whether they have been changed. While this could look like
401
// "yet another unnecessary SQL query", it prevents deleting all
402
// the tags/categories just to insert the same all over data again.
403
$edited_Item->get_tags();
404
$edited_Item->get_Chapter_IDs();
407
// Set the params we already got
408
$edited_Item->set( 'status', $post_status );
409
$edited_Item->set( 'main_cat_ID', $post_category );
410
$edited_Item->set( 'extra_cat_IDs', $post_extracats );
412
$edited_Item->load_from_Request( false );
414
$Plugins->trigger_event( 'AdminBeforeItemEditUpdate', array(
415
'Item' => & $edited_Item
418
// Params we need for tab switching (in case of error or if we save&edit)
419
$tab_switch_params = 'p='.$edited_Item->ID;
421
if( $Messages->count('error') )
423
// There have been some validation errors
428
$edited_Item->dbupdate();
430
// post post-publishing operations
431
param( 'trackback_url', 'string' );
432
if( ! empty( $trackback_url ) )
434
if( $edited_Item->status != 'published' )
436
$Messages->add( T_('Post not publicly published: skipping trackback...'), 'info' );
441
load_funcs( 'comments/_trackback.funcs.php' );
442
trackbacks( $trackback_url, $edited_Item->content, $edited_Item->title, $edited_Item->ID );
446
// Execute or schedule notifications & pings
447
$edited_Item->handle_post_processing( $exit_after_save );
448
$Messages->add( T_('Post has been updated.'), 'success' );
450
if( ! $exit_after_save )
452
// We want to continue editing...
456
// fp> I noticed that after publishing a new post, I always want to see how the
457
// blog looks like. If anyone doesn't want that, we can make this optional...
458
// The post's last status wasn't "published", but we're going to publish it now. Redirect to the blog
459
if( ! $was_published && $edited_Item->status == 'published' )
461
$edited_Item->load_Blog();
462
$redirect_to = $edited_Item->Blog->gen_blogurl();
466
header_redirect( $redirect_to );
467
// Switch to list mode
544
$post_status = 'published';
545
// Check permissions:
546
/* TODO: Check extra categories!!! */
547
$current_User->check_perm( 'item_post!'.$post_status, 'edit', true, $edited_Item );
548
$current_User->check_perm( 'edit_timestamp', 'any', true ) ;
550
$edited_Item->set( 'status', $post_status );
552
$post_date = date('Y-m-d H:i:s', $localtimenow);
553
$edited_Item->set( 'datestart', $post_date );
554
$edited_Item->set( 'datemodified', $post_date );
556
// UPDATE POST IN DB:
557
$edited_Item->dbupdate();
559
// Execute or schedule notifications & pings:
560
$edited_Item->handle_post_processing();
562
$Messages->add( T_('Post has been published.'), 'success' );
564
// fp> I noticed that after publishing a new post, I always want to see how the blog looks like
565
// If anyone doesn't want that, we can make this optional...
566
$edited_Item->load_Blog();
567
$redirect_to = $edited_Item->Blog->gen_blogurl();
570
header_redirect( $redirect_to );
571
// Switch to list mode:
474
$post_status = 'published';
476
// @todo (0000) Check extra categories!!!
477
$current_User->check_perm( 'item_post!'.$post_status, 'edit', true, $edited_Item );
478
$current_User->check_perm( 'edit_timestamp', 'any', true ) ;
479
$edited_Item->set( 'status', $post_status );
480
$post_date = date( 'Y-m-d H:i:s', $localtimenow );
481
$edited_Item->set( 'datestart', $post_date );
482
$edited_Item->set( 'datemodified', $post_date );
485
$edited_Item->dbupdate();
487
// Execute or schedule notifications & pings
488
$edited_Item->handle_post_processing();
489
$Messages->add( T_('Post has been published.'), 'success' );
491
// fp> I noticed that after publishing a new post, I always want to see how the
492
// blog looks like. If anyone doesn't want that, we can make this optional...
493
$edited_Item->load_Blog();
494
$redirect_to = $edited_Item->Blog->gen_blogurl();
497
header_redirect( $redirect_to );
498
// Switch to list mode
577
503
case 'deprecate':
579
$post_status = 'deprecated';
580
// Check permissions:
581
/* TODO: Check extra categories!!! */
582
$current_User->check_perm( 'item_post!'.$post_status, 'edit', true, $edited_Item );
584
$edited_Item->set( 'status', $post_status );
585
$edited_Item->set( 'datemodified', date('Y-m-d H:i:s',$localtimenow) );
587
// UPDATE POST IN DB:
588
$edited_Item->dbupdate();
590
$Messages->add( T_('Post has been deprecated.'), 'success' );
593
header_redirect( $redirect_to );
594
// Switch to list mode:
504
$post_status = 'deprecated';
506
/* @todo (0000) Check extra categories!!! */
507
$current_User->check_perm( 'item_post!'.$post_status, 'edit', true, $edited_Item );
508
$edited_Item->set( 'status', $post_status );
509
$edited_Item->set( 'datemodified', date( 'Y-m-d H:i:s', $localtimenow ) );
512
$edited_Item->dbupdate();
513
$Messages->add( T_('Post has been deprecated.'), 'success' );
516
header_redirect( $redirect_to );
517
// Switch to list mode
604
$current_User->check_perm( 'blog_del_post', '', true, $blog );
606
// fp> TODO: non javascript confirmation
607
// $AdminUI->title = T_('Deleting post...');
609
$Plugins->trigger_event( 'AdminBeforeItemEditDelete', array( 'Item' => & $edited_Item ) );
611
if( ! $Messages->count('error') )
612
{ // There have been no validation errors:
613
// DELETE POST FROM DB:
614
$edited_Item->dbdelete();
616
$Messages->add( T_('Post has been deleted.'), 'success' );
620
header_redirect( $redirect_to );
621
// Switch to list mode:
525
$current_User->check_perm( 'blog_del_post', '', true, $blog );
527
// fp> TODO: non javascript confirmation
528
// $AdminUI->title = T_('Deleting post...');
530
$Plugins->trigger_event( 'AdminBeforeItemEditDelete',
531
array( 'Item' => & $edited_Item,
534
if( ! $Messages->count('error') )
536
// There have been no validation errors
537
// DELETE POST FROM DB
538
$edited_Item->dbdelete();
539
$Messages->add( T_('Post has been deleted.'), 'success' );
543
header_redirect( $redirect_to );
544
// Switch to list mode
630
if( $ItemList->single_post )
631
{ // We have requested to view a SINGLE specific post:
551
if( $ItemList->single_post )
553
// We have requested to view a SINGLE specific post
637
558
case 'edit_links':
638
// Display attachment list
641
$current_User->check_perm( 'item_post!CURSTATUS', 'edit', true, $edited_Item );
559
// Display attachment list
561
$current_User->check_perm( 'item_post!CURSTATUS', 'edit', true, $edited_Item );
649
$current_User->check_perm( 'item_post!CURSTATUS', 'edit', true, $edited_Item );
651
// Unlink File from Item:
652
$msg = sprintf( T_('Link has been deleted from «%s».'), $edited_Link->Item->dget('title') );
653
$edited_Link->dbdelete( true );
655
$Messages->add( $msg, 'success' );
658
//$p = $edited_Item->ID;
662
if( $mode == 'iframe' )
664
header_redirect( regenerate_url( '', 'action=edit_links&mode=iframe&item_ID='.$edited_Item->ID, '', '&' ) );
668
header_redirect( regenerate_url( '', 'p='.$edited_Item->ID, '', '&' ) );
567
$current_User->check_perm( 'item_post!CURSTATUS', 'edit', true, $edited_Item );
569
// Unlink File from Item
570
$msg = sprintf( T_('Link has been deleted from «%s».'), $edited_Link->Item->dget('title') );
571
$edited_Link->dbdelete( true );
572
unset( $edited_Link );
573
$Messages->add( $msg, 'success' );
576
// $p = $edited_Item->ID;
581
if( $mode == 'iframe' )
583
header_redirect( regenerate_url( '', 'action=edit_links&mode=iframe&item_ID='.$edited_Item->ID, '', '&' ) );
587
header_redirect( regenerate_url( '', 'p='.$edited_Item->ID, '', '&' ) );
674
debug_die( 'unhandled action 2' );
592
debug_die( 'unhandled action 2' );
862
772
$content_css = ''; // start this empty
863
773
$TemplateCache = & get_Cache( 'TemplateCache' );
864
774
$Template = $TemplateCache->get_by_ID( $Blog->template_ID );
865
if( is_file( $templates_path.$Template->folder.'/item.css' ) )
775
if( is_file( $templates_path.$Template->folder.'/tinymce.css' ) )
867
require_css( $templates_url.$Template->folder.'/item.css' );
777
require_css( $templates_url.$Template->folder.'/tinymce.css' );
871
// Display <html><head>...</head> section! (Note: should be done early if actions do not redirect)
781
// Display <html><head>...</head> section (should be done early if actions do not redirect)
872
782
$AdminUI->disp_html_head();
874
// Display title, menu, messages, etc. (Note: messages MUST be displayed AFTER the actions)
875
$AdminUI->disp_body_top( $mode != 'iframe' ); // do NOT display stupid messages in iframe (UGLY UGLY UGLY!!!!)
783
// Display title, menu, messages, etc... (messages MUST be displayed AFTER the actions)
784
$AdminUI->disp_body_top( $mode != 'iframe' ); // do NOT display messages in iframe
881
787
switch( $action )
887
case 'new_switchtab': // this gets set as action by JS, when we switch tabs
793
case 'new_switchtab': // this gets set as action by JS, when we switch tabs
888
794
case 'edit_switchtab': // this gets set as action by JS, when we switch tabs
889
$bozo_start_modified = true; // We want to start with a form being already modified
795
$bozo_start_modified = true; // We want to start with a form being already modified
891
797
case 'create_edit':
893
799
case 'create_publish':
895
801
case 'update_edit':
896
case 'update': // on error
897
case 'update_publish': // on error
898
// Begin payload block:
899
$AdminUI->disp_payload_begin();
901
$item_title = $edited_Item->title;
902
$item_content = $edited_Item->content;
904
// Format content for editing, if we were not already in editing...
905
$Plugins_admin = & get_Cache('Plugins_admin');
906
$Plugins_admin->unfilter_contents( $item_title /* by ref */, $item_content /* by ref */, $edited_Item->get_renderers_validated() );
909
$AdminUI->disp_view( 'items/views/_item_expert.form.php' );
911
// End payload block:
912
$AdminUI->disp_payload_end();
802
case 'update': // on error
803
case 'update_publish': // on error
804
// Begin payload block
805
$AdminUI->disp_payload_begin();
807
$item_title = $edited_Item->title;
808
$item_content = $edited_Item->content;
810
// Format content for editing, if we were not already in editing...
811
$Plugins_admin = & get_Cache('Plugins_admin');
812
$Plugins_admin->unfilter_contents( $item_title /* by ref */, $item_content /* by ref */, $edited_Item->get_renderers_validated() );
815
$AdminUI->disp_view( 'items/views/_item_expert.form.php' );
817
$AdminUI->disp_payload_end();
917
// View a single post:
919
// Memorize 'p' in case we reload while changing some display settings
920
memorize_param( 'p', 'integer', NULL );
922
// Begin payload block:
923
$AdminUI->disp_payload_begin();
925
// We use the "full" view for displaying single posts:
822
// View a single post
823
// Memorize 'p' in case we reload while changing some display settings
824
memorize_param( 'p', 'integer', NULL );
825
// Begin payload block
826
$AdminUI->disp_payload_begin();
827
// We use the "full" view for displaying single posts
828
$AdminUI->disp_view( 'items/views/_item_list_full.view.php' );
830
$AdminUI->disp_payload_end();
835
$AdminUI->disp_view( 'items/views/_item_links.view.php' );
839
memorize_param( 'action', 'string', NULL );
840
// Begin payload block
841
$AdminUI->disp_payload_begin();
843
$AdminUI->disp_view( 'items/views/_item_history.view.php' );
845
$AdminUI->disp_payload_end();
850
// Begin payload block
851
$AdminUI->disp_payload_begin();
852
// fplanque> Note: this is depressing, but I have to put a table back here
853
// just because IE supports standards really badly! :'(
854
echo '<table class="browse" cellspacing="0" cellpadding="0" border="0"><tr>';
855
echo '<td class="browse_left_col">';
860
$AdminUI->disp_view( 'items/views/_item_list_track.view.php' );
926
865
$AdminUI->disp_view( 'items/views/_item_list_full.view.php' );
928
// End payload block:
929
$AdminUI->disp_payload_end();
935
$AdminUI->disp_view( 'items/views/_item_links.view.php' );
939
memorize_param( 'action', 'string', NULL );
941
// Begin payload block:
942
$AdminUI->disp_payload_begin();
945
$AdminUI->disp_view( 'items/views/_item_history.view.php' );
947
// End payload block:
948
$AdminUI->disp_payload_end();
953
// Begin payload block:
954
$AdminUI->disp_payload_begin();
956
// fplanque> Note: this is depressing, but I have to put a table back here
957
// just because IE supports standards really badly! :'(
958
echo '<table class="browse" cellspacing="0" cellpadding="0" border="0"><tr>';
960
echo '<td class="browse_left_col">';
966
$AdminUI->disp_view( 'items/views/_item_list_track.view.php' );
971
$AdminUI->disp_view( 'items/views/_item_list_full.view.php' );
980
$AdminUI->disp_view( 'items/views/_item_list_table.view.php' );
984
// TODO: a specific field for the backoffice, at the bottom of the page
985
// would be used for moderation rules.
986
if( $Blog->get( 'notes' ) )
988
$block_item_Widget = new Widget( 'block_item' );
989
$block_item_Widget->title = T_('Notes');
990
// show a quicklink to edit if user has permission:
991
/* fp> TODO: use an action icon (will appear on the right)
992
if( $current_User->check_perm( 'blog_properties', 'edit', false, $blog ) )
993
$block_item_Widget->title .= ' <a href="?ctrl=coll_settings&tab=advanced&blog='.$Blog->ID.'#ffield_blog_notes">'.get_icon( 'edit' ).'</a>';
995
$block_item_Widget->disp_template_replaced( 'block_start' );
996
$Blog->disp( 'notes', 'htmlbody' );
997
$block_item_Widget->disp_template_replaced( 'block_end' );
1002
echo '<td class="browse_right_col">';
1004
$AdminUI->disp_view( 'items/views/_item_list_sidebar.view.php' );
1007
echo '</tr></table>';
1009
// End payload block:
1010
$AdminUI->disp_payload_end();
874
$AdminUI->disp_view( 'items/views/_item_list_table.view.php' );
878
// @todo (0000) a field for the backoffice, at the bottom of the page would be used for moderation rules
879
if( $Blog->get( 'notes' ) )
881
$block_item_Widget = new Widget( 'block_item' );
882
$block_item_Widget->title = T_('Notes');
883
// show a quicklink to edit if user has permission
884
/* fp> TODO: use an action icon (will appear on the right)
885
if( $current_User->check_perm( 'blog_properties', 'edit', false, $blog ) )
887
$block_item_Widget->title .= ' <a href="?ctrl=blog_settings&tab=advanced&blog='.$Blog->ID.'#ffield_blog_notes">'.get_icon( 'edit' ).'</a>';
890
$block_item_Widget->disp_template_replaced( 'block_start' );
891
$Blog->disp( 'notes', 'htmlbody' );
892
$block_item_Widget->disp_template_replaced( 'block_end' );
895
echo '<td class="browse_right_col">';
897
$AdminUI->disp_view( 'items/views/_item_list_sidebar.view.php' );
899
echo '</tr></table>';
901
$AdminUI->disp_payload_end();
1014
// Display body bottom, debug info and close </html>:
905
// Display body bottom, debug info, close </html>
1015
906
$AdminUI->disp_global_footer();