[ Index ] |
|
Code source de b2evolution 2.1.0-beta |
1 <?php 2 /** 3 * This file implements the UI for file browsing. 4 * 5 * This file is part of the evoCore framework - {@link http://evocore.net/} 6 * See also {@link http://sourceforge.net/projects/evocms/}. 7 * 8 * @copyright (c)2003-2007 by Francois PLANQUE - {@link http://fplanque.net/} 9 * Parts of this file are copyright (c)2004-2006 by Daniel HAHLER - {@link http://thequod.de/contact}. 10 * 11 * {@internal License choice 12 * - If you have received this file as part of a package, please find the license.txt file in 13 * the same folder or the closest folder above for complete license terms. 14 * - If you have received this file individually (e-g: from http://evocms.cvs.sourceforge.net/) 15 * then you must choose one of the following licenses before using the file: 16 * - GNU General Public License 2 (GPL) - http://www.opensource.org/licenses/gpl-license.php 17 * - Mozilla Public License 1.1 (MPL) - http://www.opensource.org/licenses/mozilla1.1.php 18 * }} 19 * 20 * {@internal Open Source relicensing agreement: 21 * Daniel HAHLER grants Francois PLANQUE the right to license 22 * Daniel HAHLER's contributions to this file and the b2evolution project 23 * under any OSI approved OSS license (http://www.opensource.org/licenses/). 24 * }} 25 * 26 * @package admin 27 * 28 * {@internal Below is a list of authors who have contributed to design/coding of this file: }} 29 * @author blueyed: Daniel HAHLER. 30 * @author fplanque: Francois PLANQUE. 31 * 32 * @version $Id: _file_list.inc.php,v 1.1 2007/06/25 11:00:02 fplanque Exp $ 33 */ 34 if( !defined('EVO_MAIN_INIT') ) die( 'Please, do not access this page directly.' ); 35 36 /** 37 * @var Filelist 38 */ 39 global $fm_Filelist; 40 /** 41 * fp> Temporary. I need this for NuSphere debugging. 42 * @var File 43 */ 44 global $lFile; 45 /** 46 * @var string 47 */ 48 global $fm_flatmode; 49 /** 50 * @var User 51 */ 52 global $current_User; 53 /** 54 * @var UserSettings 55 */ 56 global $UserSettings; 57 /** 58 * @var Log 59 */ 60 global $Messages; 61 /** 62 * @var Filelist 63 */ 64 global $selected_Filelist; 65 /** 66 * @var Item 67 */ 68 global $edited_Item; 69 70 global $Blog; 71 72 global $fm_hide_dirtree, $create_name, $ads_list_path; 73 74 75 $Form = & new Form( NULL, 'FilesForm', 'post', 'none' ); 76 $Form->begin_form(); 77 $Form->hidden_ctrl(); 78 79 $Form->hidden( 'confirmed', '0' ); 80 $Form->hidden( 'md5_filelist', $fm_Filelist->md5_checksum() ); 81 $Form->hidden( 'md5_cwd', md5($fm_Filelist->get_ads_list_path()) ); 82 $Form->hiddens_by_key( get_memorized('fm_selected') ); // 'fm_selected' gets provided by the form itself 83 ?> 84 <table class="filelist"> 85 <thead> 86 <?php 87 /***************** Col headers ****************/ 88 89 echo '<tr>'; 90 91 // "Go to parent" icon 92 echo '<th class="firstcol">'; 93 if( empty($fm_Filelist->_rds_list_path) ) 94 { // cannot go higher 95 echo ' '; // for IE 96 } 97 else 98 { 99 echo action_icon( T_('Go to parent folder'), 'folder_parent', regenerate_url( 'path', 'path='.$fm_Filelist->_rds_list_path.'..' ) ); 100 } 101 echo '</th>'; 102 103 echo '<th class="nowrap">'; 104 if( $UserSettings->get( 'fm_imglistpreview' ) ) 105 { // Image file preview: 106 $col_title = T_('Icon/Type'); 107 } 108 else 109 { 110 $col_title = /* TRANS: short for (file)Type */ T_(' T '); 111 } 112 echo $fm_Filelist->get_sort_link( 'type', $col_title ); 113 echo '</th>'; 114 115 if( $fm_flatmode ) 116 { 117 echo '<th>'.$fm_Filelist->get_sort_link( 'path', /* TRANS: file/directory path */ T_('Path') ).'</th>'; 118 } 119 120 echo '<th class="nowrap">'.$fm_Filelist->get_sort_link( 'name', /* TRANS: file name */ T_('Name') ).'</th>'; 121 122 if( $UserSettings->get('fm_showtypes') ) 123 { // Show file types column 124 echo '<th class="nowrap">'.$fm_Filelist->get_sort_link( 'type', /* TRANS: file type */ T_('Type') ).'</th>'; 125 } 126 127 echo '<th class="nowrap">'.$fm_Filelist->get_sort_link( 'size', /* TRANS: file size */ T_('Size') ).'</th>'; 128 129 if( $UserSettings->get('fm_showdate') != 'no' ) 130 { // Show last mod column 131 echo '<th class="nowrap">'.$fm_Filelist->get_sort_link( 'lastmod', /* TRANS: file's last change / timestamp */ T_('Last change') ).'</th>'; 132 } 133 134 if( $UserSettings->get('fm_showfsperms') ) 135 { // Show file perms column 136 echo '<th class="nowrap">'.$fm_Filelist->get_sort_link( 'perms', /* TRANS: file's permissions (short) */ T_('Perms') ).'</th>'; 137 } 138 139 if( $UserSettings->get('fm_showfsowner') ) 140 { // Show file owner column 141 echo '<th class="nowrap">'.$fm_Filelist->get_sort_link( 'fsowner', /* TRANS: file owner */ T_('Owner') ).'</th>'; 142 } 143 144 if( $UserSettings->get('fm_showfsgroup') ) 145 { // Show file group column 146 echo '<th class="nowrap">'.$fm_Filelist->get_sort_link( 'fsgroup', /* TRANS: file group */ T_('Group') ).'</th>'; 147 } 148 149 echo '<th class="lastcol nowrap">'. /* TRANS: file actions; edit, rename, copy, .. */ T_('Actions').'</th>'; 150 echo '</tr>'; 151 ?> 152 </thead> 153 154 <tbody> 155 <?php 156 param( 'checkall', 'integer', 0 ); // Non-Javascript-CheckAll 157 158 /***********************************************************/ 159 /* MAIN FILE LIST: */ 160 /***********************************************************/ 161 $countFiles = 0; 162 while( $lFile = & $fm_Filelist->get_next() ) 163 { // Loop through all Files: 164 echo '<tr class="'.( $countFiles%2 ? 'odd' : 'even' ).'">'; 165 166 167 /******************** Checkbox: *******************/ 168 169 echo '<td class="checkbox firstcol">'; 170 echo '<span name="surround_check" class="checkbox_surround_init">'; 171 echo '<input title="'.T_('Select this file').'" type="checkbox" class="checkbox" 172 name="fm_selected[]" value="'.rawurlencode($lFile->get_rdfp_rel_path()).'" id="cb_filename_'.$countFiles.'"'; 173 global $checkall; 174 if( $checkall || $selected_Filelist->contains( $lFile ) ) 175 { 176 echo ' checked="checked"'; 177 } 178 echo ' />'; 179 echo '</span>'; 180 181 /*********** Hidden info used by Javascript: ***********/ 182 183 global $mode; 184 if( $mode == 'upload' ) 185 { // This mode allows to insert img tags into the post... 186 // Hidden info used by Javascript: 187 echo '<input type="hidden" name="img_tag_'.$countFiles.'" id="img_tag_'.$countFiles 188 .'" value="'.format_to_output( $lFile->get_tag(), 'formvalue' ).'" />'; 189 } 190 191 echo '</td>'; 192 193 194 /******************** Icon / File type: *******************/ 195 196 echo '<td class="icon_type">'; 197 if( $UserSettings->get( 'fm_imglistpreview' ) ) 198 { // Image preview OR full type: 199 if( $lFile->is_dir() ) 200 { // Navigate into Directory 201 echo '<a href="'.$lFile->get_view_url().'" title="'.T_('Change into this directory').'">'.$lFile->get_icon().' '.T_('Directory').'</a>'; 202 } 203 else 204 { 205 echo $lFile->get_preview_thumb( 'fulltype' ); 206 } 207 } 208 else 209 { // No image preview, small type: 210 if( $lFile->is_dir() ) 211 { // Navigate into Directory 212 echo '<a href="'.$lFile->get_view_url().'" title="'.T_('Change into this directory').'">'.$lFile->get_icon().'</a>'; 213 } 214 else 215 { // File 216 echo $lFile->get_view_link( $lFile->get_icon(), NULL, $lFile->get_icon() ); 217 } 218 } 219 echo '</td>'; 220 221 /******************* Path (flatmode): ******************/ 222 223 if( $fm_flatmode ) 224 { 225 echo '<td class="filepath">'; 226 echo dirname($lFile->get_rdfs_rel_path()).'/'; 227 echo '</td>'; 228 } 229 230 231 echo '<td class="fm_filename">'; 232 233 /************* Invalid filename warning: *************/ 234 235 if( !$lFile->is_dir() ) 236 { 237 if( $error_filename = validate_filename( $lFile->get_name() ) ) 238 { // TODO: Warning icon with hint 239 echo get_icon( 'warning', 'imgtag', array( 'class' => 'filenameIcon', 'title' => $error_filename ) ); 240 } 241 } 242 elseif( $error_dirname = validate_dirname( $lFile->get_name() ) ) 243 { // TODO: Warning icon with hint 244 echo get_icon( 'warning', 'imgtag', array( 'class' => 'filenameIcon', 'title' => $error_dirname ) ); 245 } 246 247 /**** Open in a new window (only directories) ****/ 248 249 if( $lFile->is_dir() ) 250 { // Directory 251 $browse_dir_url = $lFile->get_view_url(); 252 $popup_url = url_add_param( $browse_dir_url, 'mode=popup' ); 253 $target = 'evo_fm_'.$lFile->get_md5_ID(); 254 255 echo '<a href="'.$browse_dir_url.'" target="'.$target.' " class="filenameIcon" 256 title="'.T_('Open in a new window').'" onclick="' 257 ."return pop_up_window( '$popup_url', '$target' )" 258 .'">'.get_icon( 'window_new' ).'</a>'; 259 } 260 261 /*************** Link ("chain") icon: **************/ 262 263 if( isset($edited_Item) && $current_User->check_perm( 'item', 'edit', false, $edited_Item ) ) 264 { // Offer option to link the file to an Item (or anything else): 265 echo action_icon( T_('Link this file!'), 'link', regenerate_url( 'fm_selected', 'action=link&fm_selected[]='.rawurlencode($lFile->get_rdfp_rel_path()) ) ); 266 echo ' '; 267 } 268 269 /******************** Filename ********************/ 270 271 if( $lFile->is_dir() ) 272 { // Directory 273 // Link to open the directory in the curent window 274 echo '<a href="'.$browse_dir_url.'">'.$lFile->dget('name').'</a>'; 275 } 276 else 277 { // File 278 if( $view_link = $lFile->get_view_link( $lFile->get_name(), NULL, NULL ) ) 279 { 280 echo $view_link; 281 } 282 else 283 { // File extension unrecognized 284 echo $lFile->dget('name'); 285 } 286 } 287 288 /*************** File meta data: **************/ 289 290 echo '<span class="filemeta">'; 291 // Optionally display IMAGE pixel size: 292 if( $UserSettings->get( 'fm_getimagesizes' ) ) 293 { 294 echo ' ('.$lFile->get_image_size( 'widthxheight' ).')'; 295 } 296 // Optionnaly display meta data title: 297 if( $lFile->meta == 'loaded' ) 298 { // We have loaded meta data for this file: 299 echo ' - '.$lFile->title; 300 } 301 echo '</span>'; 302 303 echo '</td>'; 304 305 /******************* File type ******************/ 306 307 if( $UserSettings->get('fm_showtypes') ) 308 { // Show file types 309 echo '<td class="type">'.$lFile->get_type().'</td>'; 310 } 311 312 /******************* File size ******************/ 313 314 echo '<td class="size">'.$lFile->get_size_formatted().'</td>'; 315 316 /**************** File time stamp ***************/ 317 318 if( $UserSettings->get('fm_showdate') != 'no' ) 319 { // Show file types 320 echo '<td class="timestamp">'; 321 if( $UserSettings->get('fm_showdate') == 'long' ) 322 { 323 echo '<span class="date">'.$lFile->get_lastmod_formatted( 'date' ).'</span> '; 324 echo '<span class="time">'.$lFile->get_lastmod_formatted( 'time' ).'</span>'; 325 } 326 else 327 { // Compact format 328 echo $lFile->get_lastmod_formatted( 'compact' ); 329 } 330 echo '</td>'; 331 } 332 333 /**************** File pemissions ***************/ 334 335 if( $UserSettings->get('fm_showfsperms') ) 336 { // Show file perms 337 echo '<td class="perms">'; 338 $fm_permlikelsl = $UserSettings->param_Request( 'fm_permlikelsl', 'fm_permlikelsl', 'integer', 0 ); 339 340 if( $current_User->check_perm( 'files', 'edit' ) ) 341 { // User can edit: 342 echo '<a title="'.T_('Edit permissions').'" href="'.regenerate_url( 'fm_selected,action', 'action=edit_perms&fm_selected[]='.rawurlencode($lFile->get_rdfp_rel_path()) ).'">' 343 .$lFile->get_perms( $fm_permlikelsl ? 'lsl' : '' ).'</a>'; 344 } 345 else 346 { 347 echo $lFile->get_perms( $fm_permlikelsl ? 'lsl' : '' ); 348 } 349 echo '</td>'; 350 } 351 352 /**************** File owner ********************/ 353 354 if( $UserSettings->get('fm_showfsowner') ) 355 { // Show file owner 356 echo '<td class="fsowner">'; 357 echo $lFile->get_fsowner_name(); 358 echo '</td>'; 359 } 360 361 /**************** File group *********************/ 362 363 if( $UserSettings->get('fm_showfsgroup') ) 364 { // Show file owner 365 echo '<td class="fsgroup">'; 366 echo $lFile->get_fsgroup_name(); 367 echo '</td>'; 368 } 369 370 /***************** Action icons ****************/ 371 372 echo '<td class="actions lastcol">'; 373 374 if( $current_User->check_perm( 'files', 'edit' ) ) 375 { // User can edit: 376 if( $lFile->is_editable( $current_User->check_perm( 'files', 'all' ) ) ) 377 { 378 echo action_icon( T_('Edit file...'), 'edit', regenerate_url( 'fm_selected', 'action=edit_file&fm_selected[]='.rawurlencode($lFile->get_rdfp_rel_path()) ) ); 379 } 380 else 381 { 382 echo get_icon( 'edit', 'noimg' ); 383 } 384 } 385 386 echo action_icon( T_('Edit properties...'), 'properties', regenerate_url( 'fm_selected', 'action=edit_properties&fm_selected[]='.rawurlencode($lFile->get_rdfp_rel_path()) ) ); 387 388 if( $current_User->check_perm( 'files', 'edit' ) ) 389 { // User can edit: 390 echo action_icon( T_('Rename'), 'file_rename', regenerate_url( 'fm_selected', 'action=rename&fm_selected[]='.rawurlencode($lFile->get_rdfp_rel_path()) ) ); 391 echo action_icon( T_('Move'), 'file_move', regenerate_url( 'fm_mode,fm_sources,fm_sources_root', 'fm_mode=file_move&fm_sources[]='.rawurlencode( $lFile->get_rdfp_rel_path() ).'&fm_sources_root='.$fm_Filelist->_FileRoot->ID ) ); 392 echo action_icon( T_('Copy'), 'file_copy', regenerate_url( 'fm_mode,fm_sources,fm_sources_root', 'fm_mode=file_copy&fm_sources[]='.rawurlencode( $lFile->get_rdfp_rel_path() ).'&fm_sources_root='.$fm_Filelist->_FileRoot->ID ) ); 393 echo action_icon( T_('Delete'), 'file_delete', regenerate_url( 'fm_selected', 'action=delete&fm_selected[]='.rawurlencode( $lFile->get_rdfp_rel_path() ) ) ); 394 } 395 echo '</td>'; 396 397 echo '</tr>'; 398 399 $countFiles++; 400 } 401 // / End of file list.. 402 403 404 /** 405 * @global integer Number of cols for the files table, 6 is minimum. 406 */ 407 $filetable_cols = 5 408 + (int)$fm_flatmode 409 + (int)$UserSettings->get('fm_showtypes') 410 + (int)($UserSettings->get('fm_showdate') != 'no') 411 + (int)$UserSettings->get('fm_showfsperms') 412 + (int)$UserSettings->get('fm_showfsowner') 413 + (int)$UserSettings->get('fm_showfsgroup') 414 + (int)$UserSettings->get('fm_imglistpreview'); 415 416 417 if( $countFiles == 0 ) 418 { // Filelist errors or "directory is empty" 419 ?> 420 421 <tr> 422 <td class="firstcol"> </td> <?php /* blueyed> This empty column is needed so that the defaut width:100% style of the main column below makes the column go over the whole screen */ ?> 423 <td class="lastcol" colspan="<?php echo $filetable_cols - 1 ?>" id="fileman_error"> 424 <?php 425 if( ! $Messages->count('fl_error') ) 426 { // no Filelist errors, the directory must be empty 427 $Messages->add( T_('No files found.') 428 .( $fm_Filelist->is_filtering() ? '<br />'.T_('Filter').': «'.$fm_Filelist->get_filter().'»' : '' ), 'fl_error' ); 429 } 430 $Messages->display( '', '', true, 'fl_error', 'log_error' ); 431 ?> 432 </td> 433 </tr> 434 435 <?php 436 } 437 else 438 { 439 // ------------- 440 // Footer with "check all", "with selected: ..": 441 // -------------- 442 ?> 443 <tr class="listfooter firstcol lastcol"> 444 <td colspan="<?php echo $filetable_cols ?>"> 445 446 <?php 447 echo $Form->check_all(); 448 449 echo ' — <strong>'.T_('With selected files:').'</strong> '; 450 451 if( $fm_Filelist->get_root_type() == 'collection' || !empty($Blog) ) 452 { // We are browsing files for a collection: 453 // fp> TODO: use current as default but let user choose into which blog he wants to post 454 echo '<input type="submit" name="actionArray[make_posts]" class="ActionButton" 455 value="'.T_('Make posts').'" 456 title="'.T_('Make posts with selected images').'" />'; 457 } 458 459 460 if( $mode == 'upload' ) 461 { // We are uploading in a popup opened by an edit screen 462 ?> 463 <input class="ActionButton" 464 title="<?php echo T_('Insert IMG tags for selected files'); ?>" 465 name="actionArray[img_tag]" 466 value="img" 467 type="submit" 468 onclick="insert_tag_for_selected_files(); return false;" /> 469 <?php 470 } 471 472 473 if( $current_User->check_perm( 'files', 'edit' ) ) 474 { // User can edit: 475 ?> 476 <input class="ActionButton" type="image" name="actionArray[rename]" 477 title="<?php echo T_('Rename the selected files...'); ?>" 478 src="<?php echo get_icon( 'file_rename', 'url' ); ?>" 479 onclick="return check_if_selected_files();" /> 480 481 <input class="DeleteButton" type="image" name="actionArray[delete]" 482 title="<?php echo T_('Delete the selected files...') ?>" 483 src="<?php echo get_icon( 'file_delete', 'url' ) ?>" 484 onclick="return check_if_selected_files();" /> 485 <?php 486 // NOTE: No delete confirmation by javascript, we need to check DB integrity! 487 488 } 489 490 491 /* BROKEN: 492 <input class="ActionButton" 493 title="<?php echo T_('Download the selected files as archive...') ?>" 494 name="actionArray[download]" 495 value="download" 496 type="image" 497 src="<?php echo get_icon( 'download', 'url' ) ?>" 498 onclick="return check_if_selected_files();" /> 499 */ 500 501 /* Not fully functional: 502 <input class="ActionButton" type="image" name="actionArray[file_copy]" 503 title="<?php echo T_('Copy the selected files'); ?>" 504 onclick="return check_if_selected_files();" 505 src="<?php echo get_icon( 'file_copy', 'url' ); ?>" /> 506 507 <input class="ActionButton" type="image" name="actionArray[file_move]" 508 title="<?php echo T_('Move the selected files'); ?>" 509 onclick="return check_if_selected_files();" 510 src="<?php echo get_icon( 'file_move', 'url' ); ?>" /> 511 512 // This is too geeky! Default perms radio options and unchecked radio groups! NO WAY! 513 // If you want this feature to be usable by average users you must only have one line per file OR one file for all. You can't mix both. 514 // The only way to have both is to have 2 spearate forms: 1 titled "change perms for all files simultaneously"-> submit and another 1 title "change perms for each file individually" -> another submit 515 // POST PHOENIX 516 // fplanque>> second thought: changing perms for multiple files at once is useful. BUT assigning different perms to several files with ONE form is trying to solve a problem that not even geeks can face once in a lifetime. 517 // This has to be simplified to ONE single set of permissions for all selected files. (If you need different perms, click again) 518 <input class="ActionButton" type="image" name="actionArray[edit_perms]" 519 onclick="return check_if_selected_files();" 520 title="<?php echo T_('Change permissions for the selected files'); ?>" 521 src="<?php echo get_icon( 'file_perms', 'url' ); ?>" /> 522 */ 523 ?> 524 525 </td> 526 </tr> 527 <?php 528 } 529 ?> 530 </tbody> 531 </table> 532 <?php 533 $Form->end_form(); 534 535 if( $countFiles ) 536 {{{ // include JS 537 // TODO: remove these javascript functions to an external .js file and include them through add_headline() 538 ?> 539 <script type="text/javascript"> 540 <!-- 541 /** 542 * Check if files are selected. 543 * 544 * This should be used as "onclick" handler for "With selected" actions (onclick="return check_if_selected_files();"). 545 * @return boolean true, if something is selected, false if not. 546 */ 547 function check_if_selected_files() 548 { 549 elems = document.getElementsByName( 'fm_selected[]' ); 550 var checked = 0; 551 for( i = 0; i < elems.length; i++ ) 552 { 553 if( elems[i].checked ) 554 { 555 checked++; 556 } 557 } 558 if( !checked ) 559 { 560 alert( '<?php echo TS_('Nothing selected.') ?>' ); 561 return false; 562 } 563 else 564 { 565 return true; 566 } 567 } 568 569 /** 570 * Insert IMG tags into parent window for selected files: 571 */ 572 function insert_tag_for_selected_files() 573 { 574 var elems = document.getElementsByName( 'fm_selected[]' ); 575 var snippet = ''; 576 for( i = 0; i < elems.length; i++ ) 577 { 578 if( elems[i].checked ) 579 { 580 id = elems[i].id.substring( elems[i].id.lastIndexOf('_')+1, elems[i].id.length ); 581 img_tag_info_field = document.getElementById( 'img_tag_'+id ); 582 snippet += img_tag_info_field.value + ' '; 583 } 584 } 585 if( ! snippet.length ) 586 { 587 alert( '<?php echo TS_('You must select at least one file!') ?>' ); 588 return false; 589 } 590 else 591 { 592 if (! (window.focus && window.opener)) 593 { 594 return true; 595 } 596 window.opener.focus(); 597 textarea_wrap_selection( window.opener.document.getElementById("itemform_post_content"), snippet, '', 1, window.opener.document ); 598 return true; 599 } 600 } 601 // --> 602 </script> 603 <?php 604 }}} 605 ?> 606 <!-- End of detailed file list --> 607 <?php 608 /* 609 * $Log: _file_list.inc.php,v $ 610 * Revision 1.1 2007/06/25 11:00:02 fplanque 611 * MODULES (refactored MVC) 612 * 613 * Revision 1.8 2007/06/24 22:35:57 fplanque 614 * cleanup 615 * 616 * Revision 1.7 2007/04/26 00:11:10 fplanque 617 * (c) 2007 618 * 619 * Revision 1.6 2007/04/20 01:42:32 fplanque 620 * removed excess javascript 621 * 622 * Revision 1.5 2007/01/26 02:12:06 fplanque 623 * cleaner popup windows 624 * 625 * Revision 1.4 2007/01/25 03:45:49 fplanque 626 * deactivated broken feature 627 * 628 * Revision 1.3 2007/01/25 03:17:00 fplanque 629 * visual cleanup for average users 630 * geeky stuff preserved as options 631 * 632 * Revision 1.2 2007/01/25 02:42:01 fplanque 633 * cleanup 634 * 635 * Revision 1.1 2007/01/24 07:18:22 fplanque 636 * file split 637 * 638 * Revision 1.42 2007/01/24 05:57:55 fplanque 639 * cleanup / settings 640 * 641 * Revision 1.41 2007/01/24 03:45:29 fplanque 642 * decrap / removed a lot of bloat... 643 * 644 * Revision 1.40 2007/01/24 02:35:42 fplanque 645 * refactoring 646 * 647 * Revision 1.39 2007/01/24 01:40:14 fplanque 648 * Upload tab now stays in context 649 * 650 * Revision 1.38 2007/01/23 22:30:14 fplanque 651 * empty icons cleanup 652 * 653 * Revision 1.37 2007/01/09 00:55:16 blueyed 654 * fixed typo(s) 655 * 656 * Revision 1.36 2007/01/07 18:42:35 fplanque 657 * cleaned up reload/refresh icons & links 658 * 659 * Revision 1.35 2006/12/24 00:52:57 fplanque 660 * Make posts with images - Proof of concept 661 * 662 * Revision 1.34 2006/12/23 22:53:10 fplanque 663 * extra security 664 * 665 * Revision 1.33 2006/12/22 00:17:05 fplanque 666 * got rid of dirty globals 667 * some refactoring 668 * 669 * Revision 1.32 2006/12/14 02:18:23 fplanque 670 * fixed navigation 671 * 672 * Revision 1.31 2006/12/14 01:46:29 fplanque 673 * refactoring / factorized image preview display 674 * 675 * Revision 1.30 2006/12/14 00:33:53 fplanque 676 * thumbnails & previews everywhere. 677 * this is getting good :D 678 * 679 * Revision 1.29 2006/12/13 18:10:22 fplanque 680 * thumbnail resampling proof of concept 681 * 682 * Revision 1.28 2006/12/13 03:08:28 fplanque 683 * thumbnail implementation design demo 684 * 685 * Revision 1.27 2006/12/12 19:39:07 fplanque 686 * enhanced file links / permissions 687 * 688 * Revision 1.26 2006/12/12 18:04:53 fplanque 689 * fixed item links 690 * 691 * Revision 1.25 2006/12/07 20:03:32 fplanque 692 * Woohoo! File editing... means all skin editing. 693 * 694 * Revision 1.24 2006/12/07 15:23:42 fplanque 695 * filemanager enhanced, refactored, extended to skins directory 696 * 697 * Revision 1.23 2006/11/24 18:27:25 blueyed 698 * Fixed link to b2evo CVS browsing interface in file docblocks 699 */ 700 ?>
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 |
![]() |