This repository has been archived on 2024-09-05. You can view files and clone it, but cannot push or open issues or pull requests.
shimmie2/contrib/bulk_add/main.php

99 lines
2.7 KiB
PHP
Raw Normal View History

<?php
2009-08-20 22:37:17 +00:00
/*
* Name: Bulk Add
* Author: Shish <webmaster@shishnet.org>
* Link: http://code.shishnet.org/shimmie2/
* License: GPLv2
* Description: Bulk add server-side images
2009-01-16 08:18:41 +00:00
* Documentation:
2009-01-17 02:25:39 +00:00
* Upload the images into a new directory via ftp or similar, go to
* shimmie's admin page and put that directory in the bulk add box.
* If there are subdirectories, they get used as tags (eg if you
* upload into <code>/home/bob/uploads/holiday/2008/</code> and point
* shimmie at <code>/home/bob/uploads</code>, then images will be
2009-01-16 08:18:41 +00:00
* tagged "holiday 2008")
2010-05-28 10:39:10 +00:00
* <p><b>Note:</b> requires the "admin" extension to be enabled
*/
class BulkAdd extends Extension {
public function onPageRequest(PageRequestEvent $event) {
2009-05-11 21:09:24 +00:00
global $page, $user;
if($event->page_matches("bulk_add")) {
2010-05-28 13:26:46 +00:00
if($user->is_admin() && $user->check_auth_token() && isset($_POST['dir'])) {
set_time_limit(0);
$this->add_dir($_POST['dir']);
2009-05-11 21:09:24 +00:00
$this->theme->display_upload_results($page);
}
}
2009-05-11 21:09:24 +00:00
}
public function onAdminBuilding(AdminBuildingEvent $event) {
2010-05-28 13:26:46 +00:00
$this->theme->display_admin_block();
}
/**
* Generate the necessary DataUploadEvent for a given image and tags.
*/
private function add_image($tmpname, $filename, $tags) {
2009-08-03 09:19:33 +00:00
assert(file_exists($tmpname));
global $user;
$pathinfo = pathinfo($filename);
if(!array_key_exists('extension', $pathinfo)) {
throw new UploadException("File has no extension");
}
$metadata['filename'] = $pathinfo['basename'];
$metadata['extension'] = $pathinfo['extension'];
$metadata['tags'] = $tags;
$metadata['source'] = null;
$event = new DataUploadEvent($user, $tmpname, $metadata);
send_event($event);
if($event->image_id == -1) {
throw new UploadException("File type not recognised");
}
}
private function add_dir($base, $subdir="") {
global $page;
2009-01-04 19:18:37 +00:00
if(!is_dir($base)) {
$this->theme->add_status("Error", "$base is not a directory");
return;
}
$list = "";
2009-01-04 19:18:37 +00:00
2009-08-03 09:19:33 +00:00
foreach(glob("$base/$subdir/*") as $fullpath) {
$fullpath = str_replace("//", "/", $fullpath);
$shortpath = str_replace($base, "", $fullpath);
2009-01-04 19:18:37 +00:00
if(is_link($fullpath)) {
// ignore
}
else if(is_dir($fullpath)) {
2009-08-03 09:19:33 +00:00
$this->add_dir($base, str_replace($base, "", $fullpath));
}
else {
2009-08-03 09:19:33 +00:00
$pathinfo = pathinfo($fullpath);
$tags = $subdir;
$tags = str_replace("/", " ", $tags);
$tags = str_replace("__", " ", $tags);
2008-12-15 23:17:56 +00:00
$tags = trim($tags);
2009-08-03 09:19:33 +00:00
$list .= "<br>".html_escape("$shortpath (".str_replace(" ", ", ", $tags).")... ");
try{
$this->add_image($fullpath, $pathinfo["basename"], $tags);
$list .= "ok\n";
}
2009-08-03 09:19:33 +00:00
catch(Exception $ex) {
$list .= "failed:<br>". $ex->getMessage();
}
}
}
if(strlen($list) > 0) {
$this->theme->add_status("Adding $subdir", $list);
}
}
}
?>