Changeset 3501:5d187fd7240d for admin/media.php
- Timestamp:
- 01/06/17 12:46:18 (9 years ago)
- Branch:
- default
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
admin/media.php
r3491 r3501 148 148 } 149 149 150 # Zip download 151 if (!empty($_GET['zipdl']) && $core->auth->check('media_admin',$core->blog->id)) 152 { 153 try 154 { 155 if (strpos(realpath($core->media->root.'/'.$d),realpath($core->media->root)) === 0) { 156 // Media folder or one of it's sub-folder(s) 157 @set_time_limit(300); 158 $fp = fopen('php://output','wb'); 159 $zip = new fileZip($fp); 160 $zip->addExclusion('#(^|/).(.*?)_(m|s|sq|t).jpg$#'); 161 $zip->addDirectory($core->media->root.'/'.$d,'',true); 162 163 header('Content-Disposition: attachment;filename='.date('Y-m-d').'-'.$core->blog->id.'-'.($d ?: 'media').'.zip'); 164 header('Content-Type: application/x-zip'); 165 $zip->write(); 166 unset($zip); 167 exit; 168 } else { 169 $d = null; 170 $core->media->chdir($d); 171 throw new Exception(__('Not a valid directory')); 172 } 173 } 174 catch (Exception $e) 175 { 176 $core->error->add($e->getMessage()); 177 } 178 } 179 180 # Cope with fav/unfav dir 181 $fav_dirs = null; 182 if (!empty($_GET['fav'])) { 183 if (!$q) { // Ignore search results 184 $fav_dir = rtrim($d,'/'); 185 $core->auth->user_prefs->addWorkspace('interface'); 186 $nb_last_dirs = (integer)($core->auth->user_prefs->interface->media_nb_last_dirs); 187 if ($nb_last_dirs > 0) { 188 $fav_dirs = $core->auth->user_prefs->interface->media_fav_dirs; 189 if (!is_array($fav_dirs)) { 190 $fav_dirs = array(); 191 } 192 if (!in_array($fav_dir,$fav_dirs) && $_GET['fav'] == 'y') { 193 // Add directory in favorites 194 array_unshift($fav_dirs,$fav_dir); 195 } elseif (in_array($fav_dir,$fav_dirs) && $_GET['fav'] == 'n') { 196 // Remove directory from favorites 197 unset($fav_dirs[array_search($fav_dir,$fav_dirs)]); 198 } 199 // Store new list 200 $core->auth->user_prefs->interface->put('media_fav_dirs',$fav_dirs,'array'); 201 $core->adminurl->redirect('admin.media',$page_url_params); 202 } 203 } 204 } 205 206 # Recent media dirs 207 $last_dirs = null; 208 if (!$q) { // Ignore search results 209 $recent_dir = rtrim($d,'/'); 210 $core->auth->user_prefs->addWorkspace('interface'); 211 $nb_last_dirs = (integer)($core->auth->user_prefs->interface->media_nb_last_dirs); 212 if ($nb_last_dirs > 0) { 213 $last_dirs = $core->auth->user_prefs->interface->media_last_dirs; 214 if (!is_array($last_dirs)) { 215 $last_dirs = array(); 216 } 217 if (!in_array($recent_dir,$last_dirs)) { 218 // Add new dir at the top of the list 219 array_unshift($last_dirs,$recent_dir); 220 // Remove oldest dir(s) 221 while (count($last_dirs) > $nb_last_dirs) { 222 array_pop($last_dirs); 223 } 224 } else { 225 // Move current dir at the top of list 226 unset($last_dirs[array_search($recent_dir,$last_dirs)]); 227 array_unshift($last_dirs,$recent_dir); 228 } 229 // Store new list 230 $core->auth->user_prefs->interface->put('media_last_dirs',$last_dirs,'array'); 231 } 232 } 233 234 # New directory 235 if ($dir && !empty($_POST['newdir'])) 236 { 237 try { 238 $core->media->makeDir($_POST['newdir']); 239 dcPage::addSuccessNotice(sprintf( 240 __('Directory "%s" has been successfully created.'), 241 html::escapeHTML($_POST['newdir'])) 242 ); 243 $core->adminurl->redirect('admin.media',$page_url_params); 244 } catch (Exception $e) { 245 $core->error->add($e->getMessage()); 246 } 247 } 248 249 # Adding a file 250 if ($dir && !empty($_FILES['upfile'])) { 251 // only one file per request : @see option singleFileUploads in admin/js/jsUpload/jquery.fileupload 252 $upfile = array('name' => $_FILES['upfile']['name'][0], 253 'type' => $_FILES['upfile']['type'][0], 254 'tmp_name' => $_FILES['upfile']['tmp_name'][0], 255 'error' => $_FILES['upfile']['error'][0], 256 'size' => $_FILES['upfile']['size'][0] 257 ); 258 259 if (!empty($_SERVER['HTTP_X_REQUESTED_WITH'])) { 260 header('Content-type: application/json'); 261 $message = array(); 262 263 try { 264 files::uploadStatus($upfile); 265 $new_file_id = $core->media->uploadFile($upfile['tmp_name'], $upfile['name']); 266 267 $message['files'][] = array( 268 'name' => $upfile['name'], 269 'size' => $upfile['size'], 270 'html' => mediaItemLine($core->media->getFile($new_file_id),1,$query) 271 ); 272 } catch (Exception $e) { 273 $message['files'][] = array('name' => $upfile['name'], 274 'size' => $upfile['size'], 275 'error' => $e->getMessage() 276 ); 277 } 278 echo json_encode($message); 279 exit(); 280 } else { 281 try { 282 files::uploadStatus($upfile); 283 284 $f_title = (isset($_POST['upfiletitle']) ? html::escapeHTML($_POST['upfiletitle']) : ''); 285 $f_private = (isset($_POST['upfilepriv']) ? $_POST['upfilepriv'] : false); 286 287 $core->media->uploadFile($upfile['tmp_name'],$upfile['name'],$f_title,$f_private); 288 289 dcPage::addSuccessNotice(__('Files have been successfully uploaded.')); 290 $core->adminurl->redirect('admin.media',$page_url_params); 291 } catch (Exception $e) { 292 $core->error->add($e->getMessage()); 293 } 294 } 295 } 296 297 # Removing items 298 if ($dir && !empty($_POST['medias']) && !empty($_POST['delete_medias'])) { 299 try { 300 foreach ($_POST['medias'] as $media) { 301 $core->media->removeItem(rawurldecode($media)); 302 } 303 dcPage::addSuccessNotice( 304 sprintf(__('Successfully delete one media.', 305 'Successfully delete %d medias.', 306 count($_POST['medias']) 307 ), 308 count($_POST['medias']) 309 ) 310 ); 311 $core->adminurl->redirect('admin.media',$page_url_params); 312 } catch (Exception $e) { 313 $core->error->add($e->getMessage()); 314 } 315 } 316 317 # Removing item from popup only 318 if ($dir && !empty($_POST['rmyes']) && !empty($_POST['remove'])) 319 { 320 $_POST['remove'] = rawurldecode($_POST['remove']); 321 322 try { 323 if (is_dir(path::real($core->media->getPwd().'/'.path::clean($_POST['remove'])))) { 324 $msg = __('Directory has been successfully removed.'); 325 } else { 326 $msg = __('File has been successfully removed.'); 327 } 328 $core->media->removeItem($_POST['remove']); 329 dcPage::addSuccessNotice($msg); 330 $core->adminurl->redirect('admin.media',$page_url_params); 331 } catch (Exception $e) { 332 $core->error->add($e->getMessage()); 333 } 334 } 335 336 # Rebuild directory 337 if ($dir && $core->auth->isSuperAdmin() && !empty($_POST['rebuild'])) 338 { 339 try { 340 $core->media->rebuild($d); 341 342 dcPage::success(sprintf( 343 __('Directory "%s" has been successfully rebuilt.'), 344 html::escapeHTML($d)) 345 ); 346 $core->adminurl->redirect('admin.media',$page_url_params); 347 } catch (Exception $e) { 348 $core->error->add($e->getMessage()); 349 } 350 } 351 352 # DISPLAY confirm page for rmdir & rmfile 353 if ($dir && !empty($_GET['remove']) && empty($_GET['noconfirm'])) 354 { 355 call_user_func($open_f,__('Media manager'),'', 356 dcPage::breadcrumb( 357 array( 358 html::escapeHTML($core->blog->name) => '', 359 __('Media manager') => '', 360 __('confirm removal') => '' 361 ), 362 array('home_link' => !$popup) 363 ) 364 ); 365 366 echo 367 '<form action="'.html::escapeURL($core->adminurl->get('admin.media')).'" method="post">'. 368 '<p>'.sprintf(__('Are you sure you want to remove %s?'), 369 html::escapeHTML($_GET['remove'])).'</p>'. 370 '<p><input type="submit" value="'.__('Cancel').'" /> '. 371 ' <input type="submit" name="rmyes" value="'.__('Yes').'" />'. 372 form::hidden('d',$d). 373 form::hidden('q',$q). 374 $core->adminurl->getHiddenFormFields('admin.media',$page_url_params). 375 $core->formNonce(). 376 form::hidden('remove',html::escapeHTML($_GET['remove'])).'</p>'. 377 '</form>'; 378 379 call_user_func($close_f); 380 exit; 381 } 382 383 /* DISPLAY Main page 384 -------------------------------------------------------- */ 385 $core->auth->user_prefs->addWorkspace('interface'); 386 $user_ui_enhanceduploader = $core->auth->user_prefs->interface->enhanceduploader; 150 // Local functions 387 151 388 152 $mediaItemLine = function($f,$i,$query,$table=false) … … 519 283 return $res; 520 284 }; 285 286 // Actions 287 288 # Zip download 289 if (!empty($_GET['zipdl']) && $core->auth->check('media_admin',$core->blog->id)) 290 { 291 try 292 { 293 if (strpos(realpath($core->media->root.'/'.$d),realpath($core->media->root)) === 0) { 294 // Media folder or one of it's sub-folder(s) 295 @set_time_limit(300); 296 $fp = fopen('php://output','wb'); 297 $zip = new fileZip($fp); 298 $zip->addExclusion('#(^|/).(.*?)_(m|s|sq|t).jpg$#'); 299 $zip->addDirectory($core->media->root.'/'.$d,'',true); 300 301 header('Content-Disposition: attachment;filename='.date('Y-m-d').'-'.$core->blog->id.'-'.($d ?: 'media').'.zip'); 302 header('Content-Type: application/x-zip'); 303 $zip->write(); 304 unset($zip); 305 exit; 306 } else { 307 $d = null; 308 $core->media->chdir($d); 309 throw new Exception(__('Not a valid directory')); 310 } 311 } 312 catch (Exception $e) 313 { 314 $core->error->add($e->getMessage()); 315 } 316 } 317 318 # Cope with fav/unfav dir 319 $fav_dirs = null; 320 if (!empty($_GET['fav'])) { 321 if (!$q) { // Ignore search results 322 $fav_dir = rtrim($d,'/'); 323 $core->auth->user_prefs->addWorkspace('interface'); 324 $nb_last_dirs = (integer)($core->auth->user_prefs->interface->media_nb_last_dirs); 325 if ($nb_last_dirs > 0) { 326 $fav_dirs = $core->auth->user_prefs->interface->media_fav_dirs; 327 if (!is_array($fav_dirs)) { 328 $fav_dirs = array(); 329 } 330 if (!in_array($fav_dir,$fav_dirs) && $_GET['fav'] == 'y') { 331 // Add directory in favorites 332 array_unshift($fav_dirs,$fav_dir); 333 } elseif (in_array($fav_dir,$fav_dirs) && $_GET['fav'] == 'n') { 334 // Remove directory from favorites 335 unset($fav_dirs[array_search($fav_dir,$fav_dirs)]); 336 } 337 // Store new list 338 $core->auth->user_prefs->interface->put('media_fav_dirs',$fav_dirs,'array'); 339 $core->adminurl->redirect('admin.media',$page_url_params); 340 } 341 } 342 } 343 344 # Recent media dirs 345 $last_dirs = null; 346 if (!$q) { // Ignore search results 347 $recent_dir = rtrim($d,'/'); 348 $core->auth->user_prefs->addWorkspace('interface'); 349 $nb_last_dirs = (integer)($core->auth->user_prefs->interface->media_nb_last_dirs); 350 if ($nb_last_dirs > 0) { 351 $last_dirs = $core->auth->user_prefs->interface->media_last_dirs; 352 if (!is_array($last_dirs)) { 353 $last_dirs = array(); 354 } 355 if (!in_array($recent_dir,$last_dirs)) { 356 // Add new dir at the top of the list 357 array_unshift($last_dirs,$recent_dir); 358 // Remove oldest dir(s) 359 while (count($last_dirs) > $nb_last_dirs) { 360 array_pop($last_dirs); 361 } 362 } else { 363 // Move current dir at the top of list 364 unset($last_dirs[array_search($recent_dir,$last_dirs)]); 365 array_unshift($last_dirs,$recent_dir); 366 } 367 // Store new list 368 $core->auth->user_prefs->interface->put('media_last_dirs',$last_dirs,'array'); 369 } 370 } 371 372 # New directory 373 if ($dir && !empty($_POST['newdir'])) 374 { 375 try { 376 $core->media->makeDir($_POST['newdir']); 377 dcPage::addSuccessNotice(sprintf( 378 __('Directory "%s" has been successfully created.'), 379 html::escapeHTML($_POST['newdir'])) 380 ); 381 $core->adminurl->redirect('admin.media',$page_url_params); 382 } catch (Exception $e) { 383 $core->error->add($e->getMessage()); 384 } 385 } 386 387 # Adding a file 388 if ($dir && !empty($_FILES['upfile'])) { 389 // only one file per request : @see option singleFileUploads in admin/js/jsUpload/jquery.fileupload 390 $upfile = array('name' => $_FILES['upfile']['name'][0], 391 'type' => $_FILES['upfile']['type'][0], 392 'tmp_name' => $_FILES['upfile']['tmp_name'][0], 393 'error' => $_FILES['upfile']['error'][0], 394 'size' => $_FILES['upfile']['size'][0] 395 ); 396 397 if (!empty($_SERVER['HTTP_X_REQUESTED_WITH'])) { 398 header('Content-type: application/json'); 399 $message = array(); 400 401 try { 402 files::uploadStatus($upfile); 403 $new_file_id = $core->media->uploadFile($upfile['tmp_name'], $upfile['name']); 404 405 $message['files'][] = array( 406 'name' => $upfile['name'], 407 'size' => $upfile['size'], 408 'html' => $mediaItemLine($core->media->getFile($new_file_id),1,$query) 409 ); 410 } catch (Exception $e) { 411 $message['files'][] = array('name' => $upfile['name'], 412 'size' => $upfile['size'], 413 'error' => $e->getMessage() 414 ); 415 } 416 echo json_encode($message); 417 exit(); 418 } else { 419 try { 420 files::uploadStatus($upfile); 421 422 $f_title = (isset($_POST['upfiletitle']) ? html::escapeHTML($_POST['upfiletitle']) : ''); 423 $f_private = (isset($_POST['upfilepriv']) ? $_POST['upfilepriv'] : false); 424 425 $core->media->uploadFile($upfile['tmp_name'],$upfile['name'],$f_title,$f_private); 426 427 dcPage::addSuccessNotice(__('Files have been successfully uploaded.')); 428 $core->adminurl->redirect('admin.media',$page_url_params); 429 } catch (Exception $e) { 430 $core->error->add($e->getMessage()); 431 } 432 } 433 } 434 435 # Removing items 436 if ($dir && !empty($_POST['medias']) && !empty($_POST['delete_medias'])) { 437 try { 438 foreach ($_POST['medias'] as $media) { 439 $core->media->removeItem(rawurldecode($media)); 440 } 441 dcPage::addSuccessNotice( 442 sprintf(__('Successfully delete one media.', 443 'Successfully delete %d medias.', 444 count($_POST['medias']) 445 ), 446 count($_POST['medias']) 447 ) 448 ); 449 $core->adminurl->redirect('admin.media',$page_url_params); 450 } catch (Exception $e) { 451 $core->error->add($e->getMessage()); 452 } 453 } 454 455 # Removing item from popup only 456 if ($dir && !empty($_POST['rmyes']) && !empty($_POST['remove'])) 457 { 458 $_POST['remove'] = rawurldecode($_POST['remove']); 459 460 try { 461 if (is_dir(path::real($core->media->getPwd().'/'.path::clean($_POST['remove'])))) { 462 $msg = __('Directory has been successfully removed.'); 463 } else { 464 $msg = __('File has been successfully removed.'); 465 } 466 $core->media->removeItem($_POST['remove']); 467 dcPage::addSuccessNotice($msg); 468 $core->adminurl->redirect('admin.media',$page_url_params); 469 } catch (Exception $e) { 470 $core->error->add($e->getMessage()); 471 } 472 } 473 474 # Rebuild directory 475 if ($dir && $core->auth->isSuperAdmin() && !empty($_POST['rebuild'])) 476 { 477 try { 478 $core->media->rebuild($d); 479 480 dcPage::success(sprintf( 481 __('Directory "%s" has been successfully rebuilt.'), 482 html::escapeHTML($d)) 483 ); 484 $core->adminurl->redirect('admin.media',$page_url_params); 485 } catch (Exception $e) { 486 $core->error->add($e->getMessage()); 487 } 488 } 489 490 # DISPLAY confirm page for rmdir & rmfile 491 if ($dir && !empty($_GET['remove']) && empty($_GET['noconfirm'])) 492 { 493 call_user_func($open_f,__('Media manager'),'', 494 dcPage::breadcrumb( 495 array( 496 html::escapeHTML($core->blog->name) => '', 497 __('Media manager') => '', 498 __('confirm removal') => '' 499 ), 500 array('home_link' => !$popup) 501 ) 502 ); 503 504 echo 505 '<form action="'.html::escapeURL($core->adminurl->get('admin.media')).'" method="post">'. 506 '<p>'.sprintf(__('Are you sure you want to remove %s?'), 507 html::escapeHTML($_GET['remove'])).'</p>'. 508 '<p><input type="submit" value="'.__('Cancel').'" /> '. 509 ' <input type="submit" name="rmyes" value="'.__('Yes').'" />'. 510 form::hidden('d',$d). 511 form::hidden('q',$q). 512 $core->adminurl->getHiddenFormFields('admin.media',$page_url_params). 513 $core->formNonce(). 514 form::hidden('remove',html::escapeHTML($_GET['remove'])).'</p>'. 515 '</form>'; 516 517 call_user_func($close_f); 518 exit; 519 } 520 521 /* DISPLAY Main page 522 -------------------------------------------------------- */ 523 $core->auth->user_prefs->addWorkspace('interface'); 524 $user_ui_enhanceduploader = $core->auth->user_prefs->interface->enhanceduploader; 521 525 522 526 if (!isset($core->media)) {
Note: See TracChangeset
for help on using the changeset viewer.