• Publicity: Public Only All

richtext-procs.tcl

Utilities to attach files to an object in the context of richtext editors.

Location:
packages/attachments/tcl/richtext-procs.tcl
Created:
15 Aug 2017
Author:
Gustaf Neumann, Antonio Pisano.

Procedures in this file

Detailed information

attachments::richtext::file_attach (public)

 attachments::richtext::file_attach [ -import_file import_file ] \
    [ -title title ] [ -mime_type mime_type ] [ -object_id object_id ] \
    [ -privilege privilege ] [ -user_id user_id ] \
    [ -peeraddr peeraddr ] [ -package_id package_id ]

Insert the provided file to the content repository as a new item and attach it to the specified object_id via the attachment API. This makes sure that the file will be deleted from the content repository, when the provided object_id is deleted. The user must have at least "read" privileges on the object, but other stronger privileges can be supplied via parameter.

Switches:
-import_file (optional)
-title (optional)
-mime_type (optional)
-object_id (optional)
-privilege (optional, defaults to "read")
-user_id (optional)
-peeraddr (optional)
-package_id (optional)

Partial Call Graph (max 5 caller/called nodes):
%3 attachments::attach attachments::attach (public) attachments::richtext::require_root_folder attachments::richtext::require_root_folder (private) content::item::new content::item::new (public) permission::require_permission permission::require_permission (public) attachments::richtext::file_attach attachments::richtext::file_attach attachments::richtext::file_attach->attachments::attach attachments::richtext::file_attach->attachments::richtext::require_root_folder attachments::richtext::file_attach->content::item::new attachments::richtext::file_attach->permission::require_permission

Testcases:
No testcase defined.
[ hide source ] | [ make this the default ]

Content File Source

ad_library {

    Utilities to attach files to an object in the context of richtext
    editors.

    @author Gustaf Neumann, Antonio Pisano.
    @creation-date 15 Aug 2017

}

namespace eval attachments::richtext {

    d_proc -public file_attach {
        -import_file
        -title
        -mime_type
        -object_id
        {-privilege read}
        -user_id
        -peeraddr
        -package_id
    } {

        Insert the provided file to the content repository as a
        new item and attach it to the specified object_id via
        the attachment API. This makes sure that the file will be
        deleted from the content repository, when the provided
        object_id is deleted.

        The user must have at least "read" privileges on the object,
        but other stronger privileges can be supplied via parameter.

    } {
        permission::require_permission \
            -party_id $user_id \
            -object_id $object_id \
            -privilege $privilege

        set success 1

        #
        # Create a new item
        #
        set name $object_id-[clock clicks -microseconds]
        if {![info exists title]} {
            set title $name
        }
       set item_id [::content::item::new \
                         -name            $name \
                         -parent_id       [require_root_folder] \
                         -title           $title \
                         -context_id      $object_id \
                         -creation_user   $user_id \
                         -creation_ip     $peeraddr \
                         -storage_type    "file" \
                         -package_id      $package_id \
                         -tmp_filename    $import_file \
                         -is_live         t]

        #
        # Attach the file to the object via the attachments API
        #
        attachments::attach \
            -object_id $object_id \
            -attachment_id $item_id

        return [list \
                    success $success \
                    name $name \
                    item_id $item_id
                   ]
    }

    d_proc -private require_root_folder {
        {-parent_id -100}
        {-name attachments}
    } {

        Helper function to find the root folder for ckfinder
        attachments.

    } {
        set root_folder_id [content::item::get_id \
                                -root_folder_id $parent_id \
                                -item_path $name]
        if {$root_folder_id eq ""} {
            set root_folder_id [content::item::new \
                                    -name $name \
                                    -parent_id $parent_id]
        }
        return $root_folder_id
    }


}

#
# Local variables:
#    mode: tcl
#    tcl-indent-level: 4
#    indent-tabs-mode: nil
# End: