Class ::xowiki::ArchiveFile

::xowiki::ArchiveFile[i] create ... \
           [ -file file ] \
           [ -name name ] \
           [ -parent_id parent_id ] \
           [ -use_photo_form (default "false") ]

Class Relations

  • class: ::xotcl::Class[i]
  • superclass: ::xotcl::Object[i]
::xotcl::Class create ::xowiki::ArchiveFile \
     -superclass ::xotcl::Object

Methods (to be applied on instances)

  • delete (scripted)

    file delete -force -- ${:tmpdir}
    next
  • file (setter)

  • import (scripted)

    set package_id [::$parent_id package_id]
    
    foreach tmpfile [glob -nocomplain -directory $dir *] {
      #:msg "work on $tmpfile [::file isdirectory $tmpfile]"
      set file_name [::file tail $tmpfile]
      if {[::file isdirectory $tmpfile]} {
        # ignore mac os x resource fork directories
        if {[string match "*__MACOSX" $tmpfile]} continue
        set folder_object [::$package_id get_page_from_name -assume_folder true  -name $file_name -parent_id $parent_id]
        if {$folder_object ne ""} {
          # if the folder exists already, we have nothing to do
        } else {
          # we create a new folder ...
          set folder_form_id [::$package_id instantiate_forms -forms en:folder.form]
          set folder_object [FormPage new  -title $file_name  -name $file_name  -package_id $package_id  -parent_id $parent_id  -nls_language en_US  -instance_attributes {}  -page_template $folder_form_id  -destroy_on_cleanup ]
          $folder_object save_new
          # ..... and refetch it under its canonical name
          ::xo::db::CrClass get_instance_from_db -item_id [$folder_object item_id]
        }
        :import -dir $tmpfile -parent_id [$folder_object item_id]
      } else {
        set mime_type [::xowiki::guesstype $file_name]
        if {[string match "image/*" $mime_type] && [:use_photo_form]} {
          set photo_object [::$package_id get_page_from_name -name en:$file_name -parent_id $parent_id]
          if {$photo_object ne ""} {
            # photo entry exists already, create a new revision
            :log "Photo $file_name exists already"
            $photo_object set title $file_name
            set f [::xowiki::formfield::file new -object $photo_object -name "image" -destroy_on_cleanup]
            $f set value $file_name
            $f content-type $mime_type
            $f set tmpfile $tmpfile
            $f convert_to_internal
            $photo_object save
          } else {
            # create a new photo entry
            :log "new Photo $file_name"
            set photoFormObj [::$package_id instantiate_forms  -parent_id $parent_id -forms en:photo.form]
            set photo_object [$photoFormObj create_form_page_instance  -name en:$file_name  -nls_language en_US  -creation_user [::xo::cc user_id]  -parent_id $parent_id  -package_id $package_id  -instance_attributes [list image [list name $file_name]]]
            $photo_object title $file_name
            $photo_object publish_status "ready"
            $photo_object save_new ;# to obtain item_id needed by the form-field
            set f [::xowiki::formfield::file new -object $photo_object -name "image" -destroy_on_cleanup]
            $f set value $file_name
            $f content-type $mime_type
            $f set tmpfile $tmpfile
            $f convert_to_internal
            #:log "after convert to internal $file_name"
          }
        } else {
          set file_object [::$package_id get_page_from_name -name file:$file_name -parent_id $parent_id]
          if {$file_object ne ""} {
            :msg "file $file_name exists already"
            # file entry exists already, create a new revision
            $file_object set import_file $tmpfile
            $file_object set mime_type $mime_type
            $file_object set title $file_name
            $file_object save
          } else {
            :msg "file $file_name created new"
            set file_object [::xowiki::File new  -title $file_name  -name file:$file_name  -parent_id $parent_id  -mime_type $mime_type  -package_id $package_id  -creation_user [::xo::cc user_id]  -destroy_on_cleanup ]
            $file_object set import_file $tmpfile
            $file_object save_new
          }
        }
      }
    }
  • init (scripted)

    :destroy_on_cleanup
    ::xo::db::CrClass get_instance_from_db -item_id ${:parent_id}
    set :tmpdir [ad_mktmpdir import]
  • name (setter)

  • parent_id (setter)

  • unpack (scripted)

    set success 0
    switch [::xowiki::guesstype ${:name}] {
      application/zip -
      application/x-zip -
      application/x-zip-compressed {
        set success [util::file_content_check -type zip -file ${:file}]
        if {!$success} {
          util_user_message -message "The uploaded file is apparently not a zip file."
        } else {
          ::util::unzip -source ${:file} -destination ${:tmpdir}
          :import -dir ${:tmpdir} -parent_id ${:parent_id}
        }
      }
      application/x-compressed {
        if {[string match "*tar.gz" ${:name}]} {
          set success [util::file_content_check -type gzip -file ${:file}]
          if {!$success} {
            util_user_message -message "The uploaded file is apparently not a gzip file."
          } else {
            set cmd [::util::which tar]
            exec $cmd -xzf ${:file} -C ${:tmpdir}
            :import -dir ${:tmpdir} -parent_id ${:parent_id}
          }
        } else {
          util_user_message -message "Unknown compressed file type ${:name}."
        }
      }
      default {
        util_user_message -message "Type '[::xowiki::guesstype ${:name}]' is not an supported archive format."
      }
    }
    #:msg success=$success
    return $success
  • use_photo_form (setter)