simple-add.tcl

page to add a new nonversioned object to the system

Location:
/packages/file-storage/www/simple-add.tcl
Authors:
Ben Adida <ben@openforce.net>
arjun <arjun@openforce.net>
Created:
01 April 2002
CVS ID:
$Id: simple-add.tcl,v 1.17.2.8 2023/10/22 16:30:01 gustafn Exp $

Related Files

[ hide source ] | [ make this the default ]

File Contents

ad_page_contract {
    page to add a new nonversioned object to the system

    @author Ben Adida (ben@openforce.net)
    @author arjun (arjun@openforce.net)
    @creation-date 01 April 2002
    @cvs-id $Id: simple-add.tcl,v 1.17.2.8 2023/10/22 16:30:01 gustafn Exp $
} {
    folder_id:naturalnum,notnull
    {type:token "fs_url"}
    {title:printable ""}
    {description:printable ""}
    {url:printable ""}
    {lock_title_p:boolean,notnull 0}
} -validate {
    valid_folder -requires {folder_id:integer} {
        if {![fs_folder_p $folder_id]} {
            ad_complain "[_ file-storage.lt_The_specified_parent_]"
        }
    }
} -properties {
    folder_id:onevalue
    context:onevalue
}

# check for write permission on the folder

permission::require_permission -object_id $folder_id -privilege write

# set templating datasources

set pretty_name "URL"
if {$pretty_name eq ""} {
    return -code error "[_ file-storage.No_such_type]"
}

set context [fs_context_bar_list -final \
                [_ file-storage.Add_pretty_name \
                    [list pretty_name $pretty_name]] $folder_id]

# Should probably generate the item_id and version_id now for
# double-click protection

# if title isn't passed in ignore lock_title_p
if {$title eq ""} {
    set lock_title_p 0
}

# Message lookup uses variable pretty_name
set page_title [_ file-storage.simple_add_page_title]


ad_form -export {folder_id type}

if {$lock_title_p} {
    ad_form -extend -form {
        {title_display:text(inform) {label \#file-storage.Title\#} {value $title}}
        {title:text(hidden) {value $title} {maxlength 1000}}
    }
} else {
    ad_form -extend -form {
        {title:text {label \#file-storage.Title\#} {html {size 30}} {maxlength 1000}}
    }
}

set submit_label [_ file-storage.Create]

ad_form -extend -form {
    {url:text(url)
        {label \#file-storage.URL\#}
        {value "https://"}
        {maxlength 1000}
    }
    {description:text(textarea),optional
        {html {rows 5 cols 50}}
        {label \#file-storage.Description\#}
    }
} -validate {
    {url
        {[string match "data:*" [string trim $url]] == 0}
        "\$url\" must not start with 'data:'"
    }
}


set package_id [ad_conn package_id]
set user_id [ad_conn user_id]
if { [parameter::get \
        -parameter CategoriesP \
        -package_id $package_id -default 0]
} {
    category::ad_form::add_widgets \
         -container_object_id $package_id \
         -categorized_object_id $folder_id \
         -form_name simple-add
}

ad_form -extend -form {
    {submit:text(submit) {label $submit_label}}
} -on_request {
} -on_submit {
    set item_id [content::extlink::new \
                    -url $url \
                    -label $title \
                    -description $description \
                    -parent_id $folder_id]
    #
    # Analogous as for files (see file-add-2) we know the user has write
    # permission to this folder,  but they may not have admin privileges.
    # They should always be able to admin their own url (item) by default, so
    # they can delete it, control who can read it, etc.
    #
    if { [string is false [permission::permission_p \
                                -party_id $user_id \
                                -object_id $folder_id \
                                -privilege admin]]
    } {
        permission::grant \
            -party_id $user_id \
            -object_id $item_id \
            -privilege admin
    }

    if { [parameter::get -parameter CategoriesP \
            -package_id $package_id \
            -default 0]
    } {
        category::map_object \
            -remove_old \
            -object_id $item_id \
            [category::ad_form::get_categories \
                -container_object_id $package_id \
                -element_name category_id]
    }

    fs::do_notifications \
        -folder_id $folder_id \
        -filename $url \
        -item_id $item_id \
        -action "new_url"

} -after_submit {

    ad_returnredirect "?folder_id=$folder_id"
    ad_script_abort
}

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