summaryrefslogtreecommitdiff
path: root/modules/g2_import/helpers/g2_import.php
diff options
context:
space:
mode:
Diffstat (limited to 'modules/g2_import/helpers/g2_import.php')
-rw-r--r--modules/g2_import/helpers/g2_import.php160
1 files changed, 124 insertions, 36 deletions
diff --git a/modules/g2_import/helpers/g2_import.php b/modules/g2_import/helpers/g2_import.php
index b0b91bfb..d0b11e25 100644
--- a/modules/g2_import/helpers/g2_import.php
+++ b/modules/g2_import/helpers/g2_import.php
@@ -32,6 +32,7 @@ function g2() {
class g2_import_Core {
public static $init = false;
+ public static $map = array();
static function is_configured() {
return module::get_var("g2_import", "embed_path");
@@ -96,9 +97,9 @@ class g2_import_Core {
return $stats;
}
- static function import_group(&$queue, &$map) {
+ static function import_group(&$queue) {
$g2_group_id = array_shift($queue);
- if (array_key_exists($g2_group_id, $map)) {
+ if (self::map($g2_group_id)) {
return;
}
@@ -120,20 +121,17 @@ class g2_import_Core {
break;
}
- $map[$g2_group->getId()] = $group->id;
- $g2_map = ORM::factory("g2_map");
- $g2_map->g3_id = $group->id;
- $g2_map->g2_id = $g2_group->getId();
- $g2_map->save();
+ self::set_map($g2_group->getId(), $group->id);
}
- static function import_user(&$queue, &$map) {
+ static function import_user(&$queue) {
$g2_user_id = array_shift($queue);
- if (array_key_exists($g2_user_id, $map)) {
+ if (self::map($g2_user_id)) {
return;
}
if (g2(GalleryCoreApi::isAnonymousUser($g2_user_id))) {
+ self::set_map($g2_user_id, user::guest()->id);
return;
}
@@ -156,19 +154,15 @@ class g2_import_Core {
if ($g2_group_id == $g2_admin_group_id) {
$user->admin = true;
} else {
- $user->add(ORM::factory("group", $map[$g2_group_id]));
+ $user->add(ORM::factory("group", self::map($g2_group_id)));
}
}
$user->save();
- $map[$g2_user->getId()] = $user->id;
- $g2_map = ORM::factory("g2_map");
- $g2_map->g3_id = $user->id;
- $g2_map->g2_id = $g2_user->getId();
- $g2_map->save();
+ self::set_map($g2_user->getId(), $user->id);
}
- static function import_album(&$queue, &$map) {
+ static function import_album(&$queue) {
// The queue is a set of nested associative arrays where the key is the album id and the
// value is an array of similar arrays. We'll do a breadth first tree traversal using the
// queue to keep our state. Doing it breadth first means that the parent will be created by
@@ -181,7 +175,7 @@ class g2_import_Core {
$queue[$key] = $value;
}
- if (array_key_exists($g2_album_id, $map)) {
+ if (self::map($g2_album_id)) {
return;
}
@@ -190,11 +184,90 @@ class g2_import_Core {
if ($g2_album->getParentId() == null) {
return;
}
- $parent_album = ORM::factory("item", $map[$g2_album->getParentId()]);
+ $parent_album = ORM::factory("item", self::map($g2_album->getParentId()));
+
+ $album = album::create(
+ $parent_album,
+ $g2_album->getPathComponent(),
+ $g2_album->getTitle(),
+ self::extract_description($g2_album),
+ self::map($g2_album->getOwnerId()));
+
+ $album->view_count = g2(GalleryCoreApi::fetchItemViewCount($g2_album_id));
+ $album->created = $g2_album->getCreationTimestamp();
+
+ // @todo supported "keywords", "originationTimestamp", and "random" sort orders.
+ $order_map = array(
+ "creationTimestamp" => "created",
+ "description" => "description",
+ "modificationTimestamp" => "updated",
+ "orderWeight" => "weight",
+ "pathComponent" => "name",
+ "summary" => "description",
+ "title" => "title",
+ "viewCount" => "view_count");
+ $direction_map = array(
+ ORDER_ASCENDING => "asc",
+ ORDER_DESCENDING => "desc");
+ if (array_key_exists($g2_order = $g2_album->getOrderBy(), $order_map)) {
+ $album->sort_column = $order_map[$g2_order];
+ $album->sort_order = $direction_map[$g2_album->getOrderDirection()];
+ }
+ $album->save();
+
+ self::set_map($g2_album_id, $album->id);
+
+ // @todo import origination timestamp
+ // @todo import keywords as tags
+ }
+
+ static function import_item(&$queue) {
+ $g2_item_id = array_shift($queue);
+
+ if (self::map($g2_item_id)) {
+ return;
+ }
+
+ $g2_item = g2(GalleryCoreApi::loadEntitiesById($g2_item_id));
+ $parent = ORM::factory("item", self::map($g2_item->getParentId()));
+ switch ($g2_item->getEntityType()) {
+ case "GalleryPhotoItem":
+ $item = photo::create(
+ $parent,
+ g2($g2_item->fetchPath()),
+ $g2_item->getPathComponent(),
+ $g2_item->getTitle(),
+ self::extract_description($g2_item),
+ self::map($g2_item->getOwnerId()));
+ break;
+ case "GalleryMovieItem":
+ // @todo we should transcode other types into FLV
+ if (in_array($g2_item->getMimeType(), array("video/mp4", "video/x-flv"))) {
+ $item = movie::create(
+ $parent,
+ g2($g2_item->fetchPath()),
+ $g2_item->getPathComponent(),
+ $g2_item->getTitle(),
+ self::extract_description($g2_item),
+ self::map($g2_item->getOwnerId()));
+ }
+ break;
+
+ default:
+ // Ignore
+ break;
+ }
+
+ if (isset($item)) {
+ self::set_map($g2_item_id, $item->id);
+ }
+ }
+
+ static function extract_description($g2_item) {
// If the summary is a subset of the description just import the description, else import both.
- $g2_summary = $g2_album->getSummary();
- $g2_description = $g2_album->getDescription();
+ $g2_summary = $g2_item->getSummary();
+ $g2_description = $g2_item->getDescription();
if (!$g2_summary ||
$g2_summary == $g2_description ||
strstr($g2_description, $g2_summary) !== false) {
@@ -202,26 +275,41 @@ class g2_import_Core {
} else {
$description = $g2_summary . " " . $g2_description;
}
+ return $description;
+ }
- $album = album::create(
- $parent_album,
- $g2_album->getPathComponent(),
- $g2_album->getTitle(),
- $description,
- $map[$g2_album->getOwnerId()]);
+ static function get_item_ids($min_id) {
+ global $gallery;
+
+ $ids = array();
+ $results = g2($gallery->search(
+ "SELECT [GalleryItem::id] " .
+ "FROM [GalleryEntity], [GalleryItem] " .
+ "WHERE [GalleryEntity::id] = [GalleryItem::id] " .
+ "AND [GalleryEntity::entityType] IN ('GalleryPhotoItem', 'GalleryMovieItem') " .
+ "AND [GalleryItem::id] > ? " .
+ "ORDER BY [GalleryItem::id] ASC",
+ array($min_id),
+ array("limit" => array("count" => 100))));
+ while ($result = $results->nextResult()) {
+ $ids[] = $result[0];
+ }
+ return $ids;
+ }
- $album->view_count = g2(GalleryCoreApi::fetchItemViewCount($g2_album_id));
- $album->created = $g2_album->getCreationTimestamp();
- $album->save();
+ static function map($g2_id) {
+ if (!array_key_exists($g2_id, self::$map)) {
+ $g2_map = ORM::factory("g2_map")->where("g2_id", $g2_id)->find();
+ self::$map[$g2_id] = $g2_map->loaded ? $g2_map->g3_id : null;
+ }
+
+ return self::$map[$g2_id];
+ }
- $map[$g2_album->getId()] = $album->id;
+ static function set_map($g2_id, $g3_id) {
$g2_map = ORM::factory("g2_map");
- $g2_map->g3_id = $album->id;
- $g2_map->g2_id = $g2_album->getId();
+ $g2_map->g3_id = $g3_id;
+ $g2_map->g2_id = $g2_id;
$g2_map->save();
-
- // @todo import origination timestamp
- // @todo import sort order
- // @todo import keywords as tags
}
}