summaryrefslogtreecommitdiff
path: root/modules/exif/helpers
diff options
context:
space:
mode:
authorBharat Mediratta <bharat@menalto.com>2009-05-20 06:10:14 +0000
committerBharat Mediratta <bharat@menalto.com>2009-05-20 06:10:14 +0000
commit774e0b3737d51b70bb141f4e13c6c111208847c0 (patch)
tree8f367c99a16c1d4d3419838aec420a29a320bc3b /modules/exif/helpers
parent54fe2c600e6930c2885f3f6048221710637a142f (diff)
Avoid complex inserts in available_tasks() to make admin/maintenance
run faster. This fixes ticket #235. Incidentally, refactor exif and search to use the same patterns overall so that if you understand one, you understand the other and they generally use the same strings for localization.
Diffstat (limited to 'modules/exif/helpers')
-rw-r--r--modules/exif/helpers/exif.php31
-rw-r--r--modules/exif/helpers/exif_installer.php2
-rw-r--r--modules/exif/helpers/exif_task.php47
3 files changed, 45 insertions, 35 deletions
diff --git a/modules/exif/helpers/exif.php b/modules/exif/helpers/exif.php
index ab5dff71..c488bbd4 100644
--- a/modules/exif/helpers/exif.php
+++ b/modules/exif/helpers/exif.php
@@ -133,4 +133,35 @@ class exif_Core {
}
return self::$exif_keys;
}
+
+ static function stats() {
+ $missing_exif = Database::instance()
+ ->select("items.id")
+ ->from("items")
+ ->join("exif_records", "items.id", "exif_records.item_id", "left")
+ ->where("type", "photo")
+ ->open_paren()
+ ->where("exif_records.item_id", null)
+ ->orwhere("exif_records.dirty", 1)
+ ->close_paren()
+ ->get()
+ ->count();
+
+ $total_items = ORM::factory("item")->where("type", "photo")->count_all();
+ if (!$total_items) {
+ return array(0, 0, 0);
+ }
+ return array($missing_exif, $total_items,
+ round(100 * (($total_items - $missing_exif) / $total_items)));
+ }
+
+ static function check_index() {
+ list ($remaining) = exif::stats();
+ if ($remaining) {
+ site_status::warning(
+ t('Your EXIF index needs to be updated. <a href="%url" class="gDialogLink">Fix this now</a>',
+ array("url" => url::site("admin/maintenance/start/exif_task::update_index?csrf=__CSRF__"))),
+ "exif_index_out_of_date");
+ }
+ }
}
diff --git a/modules/exif/helpers/exif_installer.php b/modules/exif/helpers/exif_installer.php
index 3088cdbb..5f37996a 100644
--- a/modules/exif/helpers/exif_installer.php
+++ b/modules/exif/helpers/exif_installer.php
@@ -33,12 +33,14 @@ class exif_installer {
KEY(`item_id`))
ENGINE=InnoDB DEFAULT CHARSET=utf8;");
module::set_version("exif", 1);
+ exif::check_index();
}
}
static function uninstall() {
$db = Database::instance();
$db->query("DROP TABLE IF EXISTS {exif_records};");
+ site_status::clear("exif_index_out_of_date");
module::delete("exif");
}
}
diff --git a/modules/exif/helpers/exif_task.php b/modules/exif/helpers/exif_task.php
index 620d0791..375503e3 100644
--- a/modules/exif/helpers/exif_task.php
+++ b/modules/exif/helpers/exif_task.php
@@ -25,9 +25,9 @@ class exif_task_Core {
"WHERE {exif_records}.`item_id` NOT IN " .
"(SELECT `id` FROM {items} WHERE {items}.`type` = 'photo')");
- list ($remaining, $total, $percent) = self::_get_stats();
+ list ($remaining, $total, $percent) = exif::stats();
return array(Task_Definition::factory()
- ->callback("exif_task::extract_exif")
+ ->callback("exif_task::update_index")
->name(t("Extract EXIF data"))
->description($remaining
? t2("1 photo needs to be scanned",
@@ -37,7 +37,7 @@ class exif_task_Core {
->severity($remaining ? log::WARNING : log::SUCCESS));
}
- static function extract_exif($task) {
+ static function update_index($task) {
$completed = $task->get("completed", 0);
$start = microtime(true);
@@ -57,41 +57,18 @@ class exif_task_Core {
exif::extract($item);
}
- list ($remaining, $total, $percent) = self::_get_stats();
- if ($remaining + $completed) {
- $task->percent_complete = round(100 * $completed / ($remaining + $completed));
- $task->status = t2("one record updated, index is %percent% up-to-date",
- "%count records updated, index is %percent% up-to-date",
- $completed, array("percent" => $percent));
- } else {
- $task->percent_complete = 100;
- }
-
+ list ($remaining, $total, $percent) = exif::stats();
$task->set("completed", $completed);
- if ($remaining == 0) {
+ if ($remaining == 0 || !($remaining + $completed)) {
$task->done = true;
$task->state = "success";
+ site_status::clear("exif_index_out_of_date");
+ $task->percent_complete = 100;
+ } else {
+ $task->percent_complete = round(100 * $completed / ($remaining + $completed));
}
- }
-
- private static function _get_stats() {
- $missing_exif = Database::instance()
- ->select("items.id")
- ->from("items")
- ->join("exif_records", "items.id", "exif_records.item_id", "left")
- ->where("type", "photo")
- ->open_paren()
- ->where("exif_records.item_id", null)
- ->orwhere("exif_records.dirty", 1)
- ->close_paren()
- ->get()
- ->count();
-
- $total_items = ORM::factory("item")->where("type", "photo")->count_all();
- if (!$total_items) {
- return array(0, 0, 0);
- }
- return array($missing_exif, $total_items,
- round(100 * (($total_items - $missing_exif) / $total_items)));
+ $task->status = t2("one record updated, index is %percent% up-to-date",
+ "%count records updated, index is %percent% up-to-date",
+ $completed, array("percent" => $percent));
}
}