Date: 2005-11-30
Tags: plone

Plone2.1.1のフォルダで写真

aihatenaの猫を世話することに‥‥ってこれも9月の写真。ヨドバシ秋葉オープンの翌日だったかな。

ZPhotoSlidesを改良して使うよりもPlone2.1系のフォルダを使った方が問題が少なそうだったので乗り換えてみました。ZPhotoSlidesから乗り換えて良くなった点と悪くなった点があるけど、標準フォルダ機能だと考えると良くできていると思う。少なくとも、自分の使い方の範囲では乗り換えに耐えられる。

良くなった点

  • WebDAVやFTPで一気にアップロード出来る

  • メモリリークが起きない

  • Plone2.1の作法で作られているのでカスタマイズがしやすい

悪くなった点

  • ZODBの外に保存できない

  • 概要や名前の修正を一つ一つやるのがめんどくさい(フォルダViewからは出来ない)

  • 多くの機能が減った(スライドショーとか)が、もともと使わないので...

変わらない点

  • 写真の並び替えが大変

ZPhotoSlidesからATFolderへ変換

以下はPlone2.1.1上でZPhotoSlidesからATFolder/ATImageに変換した時に使ったスクリプト。 一応必要そうなデータは変換できるはず。でもプロパティーとかに値が設定してある場合はそれも変換するコードを追加しないといけない。使い方は省略する方向で。

## Script (Python) "folder_converter"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=src, dest
##title=

request = container.REQUEST

def convert_image(src_obj, dest_container):
    id = callable(src_obj.id) and src_obj.id() or src_obj.id
    dest_container.invokeFactory(type_name='Image', id=id)
    obj = dest_container[id]

    kwargs = {
        'title': src_obj.title,
        'content_type': src_obj.content_type,
        'precondition':'',
        'filedata':src_obj.data,
    }

    obj.manage_edit(**kwargs)
    obj.setDescription(src_obj.description)

    print id, 'converted.'
    return printed

def convert_atfolder(src_obj, dest_container):
    id = callable(src_obj.id) and src_obj.id() or src_obj.id
    dest_container.manage_addFolder(id, src_obj.title)
    obj = dest_container[id]
    print "'%s'" % src_obj.Description(),
    obj.setDescription( src_obj.Description() )
    obj.indexObject()
    print 'converted.'
    print convert_folder(src_obj, obj)
    return printed

def convert_folder(src_container, dest_container):

    for obj in src_container.objectValues():
        id = callable(obj.id) and obj.id() or obj.id
        print 'converting.. ', id, "(%s)" % obj.meta_type,

        if obj.meta_type in ('ATFolder',):
            print convert_atfolder(obj, dest_container)

        elif obj.meta_type in ('CMF ZPhoto','ZPhoto',):
            print convert_image(obj, dest_container),

        elif obj.meta_type in ('CMF ZPhotoSlides',
                               'CMF ZPhotoSlides Folder',
                               'ZPhotoSlides',
                               'ZPhotoSlides Folder',):
            dest_container.manage_addFolder(id, obj.title)
            sub_dest = dest_container[id]
            sub_dest.setDescription( obj.description )
            sub_dest.indexObject()
            print 'converted.'
            print convert_folder(obj, sub_dest)

        else: # copy for unknown
            o = src_container.manage_copyObjects(id)
            dest_container.manage_pasteObjects(o)
            dest_container[id].indexObject()
            print '%s copied.' % id

    return printed

print 'make "%s"' % dest
src_container =  container[src]
container.manage_addFolder(dest)
dest_container = container[dest]
dest_container.setDescription( src_container.Description() )
print convert_folder(src_container, dest_container),

print 'done'
return printed