Commit b37a3360 authored by Frank Bergmann's avatar Frank Bergmann

- OpenACS 5.9

parent 3ed8e526
......@@ -6,6 +6,7 @@
<msg key="Actions">Actions:</msg>
<msg key="Actions_1">Actions</msg>
<msg key="Add_Dup_As_New_File">If you upload a file with the same name as a file already in this folder, we will alter your new file's name by adding an incremental suffix (eg. &amp;quot;mydoc.doc&amp;quot; -&amp;gt; &amp;quot;mydoc-1.doc&amp;quot;) and making it a new, separate file. &lt;br&gt;&lt;br&gt;&lt;em&gt;Note that this is not the Title of the file, which you can specify as you like. This is the File Name, which must be unique in each folder.&lt;/em&gt;</msg>
<msg key="Add_Dup_As_Revision">If you upload a file with the same name as a file already in this folder, we will add this as a new revision of the existing file. </msg>
<msg key="Add_File">Add File</msg>
<msg key="Add_folder_from_fs">Add folder from file system</msg>
<msg key="Add_pretty_name">Add %pretty_name%</msg>
......@@ -149,6 +150,7 @@ delete, therefore you cannot delete it.</msg>
<msg key="No_such_type">No such type</msg>
<msg key="no_such_URL">no such URL</msg>
<msg key="No_valid_destination_folders_exist">No valid destination folder exists</msg>
<msg key="Not_Allowed">Not Allowed</msg>
<msg key="PDF">PDF</msg>
<msg key="Permissions">Permissions</msg>
<msg key="Please_select_at_least_one_item_to_copy.">Please select at least one item to copy.</msg>
......
This diff is collapsed.
......@@ -7,21 +7,23 @@
<initial-install-p>f</initial-install-p>
<singleton-p>f</singleton-p>
<version name="5.6.0" url="http://openacs.org/repository/download/apm/file-storage-5.6.0.apm">
<version name="5.9.0d2" url="http://openacs.org/repository/download/apm/file-storage-5.9.0d2.apm">
<owner url="http://openacs.org">OpenACS</owner>
<summary>Collaborative document storage</summary>
<release-date>2007-06-15</release-date>
<release-date>2013-09-08</release-date>
<vendor url="http://openacs.org">OpenACS</vendor>
<description format="text/plain">Provides a versioned document store with storage in the filesystem or database (depending on configuration). Documents and folders can be permissioned and folders downloaded.</description>
<maturity>0</maturity>
<license>GPL version 2</license>
<maturity>2</maturity>
<package_instance_name>#file-storage.file-storage#</package_instance_name>
<provides url="file-storage" version="5.6.0"/>
<requires url="acs-content-repository" version="5.6.0"/>
<requires url="acs-kernel" version="5.6.0"/>
<requires url="categories" version="1.1.2d4"/>
<requires url="notifications" version="5.6.0"/>
<requires url="oacs-dav" version="1.1"/>
<provides url="file-storage" version="5.9.0d2"/>
<requires url="acs-kernel" version="5.8.1"/>
<requires url="acs-content-repository" version="5.8.1"/>
<requires url="categories" version="1.1.2d3"/>
<requires url="notifications" version="5.8.1"/>
<requires url="oacs-dav" version="1.1b1"/>
<requires url="rss-support" version="0.3"/>
<callbacks>
......
<a class="button" href="@folder_url@">#acs-kernel.common_Add#</a>
<include src="/packages/file-storage/lib/folder-links" folder_id="@folder_id@" admin_p="@admin_p@" base_url="@base_url@">
\ No newline at end of file
<include src="/packages/file-storage/lib/folder-links" folder_id="@folder_id;literal@" admin_p="@admin_p;literal@" base_url="@base_url;literal@">
\ No newline at end of file
set admin_p [permission::permission_p -object_id $folder_id -party_id [ad_conn user_id] -privilege "admin"]
set return_url [ad_return_url]
foreach { package_id root_folder_id } [fs::get_folder_package_and_root $folder_id] break
lassign [fs::get_folder_package_and_root $folder_id] package_id root_folder_id
set fs_url [site_node::get_url_from_object_id -object_id $package_id]
set folder_url [export_vars -base $fs_url {folder_id return_url}]
\ No newline at end of file
......@@ -3,23 +3,23 @@
# @param base_url URL to prepend to the relative URL from file-storage
# used to deliver content from another index.vuh than
# file-storage/view/
if {![exists_and_not_null base_url]} {
if {(![info exists base_url] || $base_url eq "")} {
set base_url "/view/"
}
# @param object_list restrict results to object_ids in object_list
if {![exists_and_not_null object_list]} {
if {(![info exists object_list] || $object_list eq "")} {
set object_list {}
}
# @param show_all_p include subfolders and contents? default 0
if {![exists_and_not_null show_all_p]} {
if {(![info exists show_all_p] || $show_all_p eq "")} {
set show_all_p 0
}
# @param admin_p show links to properties page for a file? default 0
if {![exists_and_not_null admin_p]} {
if {(![info exists admin_p] || $admin_p eq "")} {
set admin_p 0
}
# @param return_url URL to add to admin links
if {![exists_and_not_null return_url]} {
if {(![info exists return_url] || $return_url eq "")} {
set return_url [ad_return_url]
}
......@@ -47,9 +47,9 @@ if {[info exists permission_check] && $permission_check eq 0 } {
set folder_name [lang::util::localize [fs::get_object_name -object_id $folder_id]]
foreach { package_id root_folder_id } [fs::get_folder_package_and_root $folder_id] break
lassign [fs::get_folder_package_and_root $folder_id] package_id root_folder_id
set fs_url [site_node::get_url_from_object_id -object_id $package_id]
if {![string equal $root_folder_id $folder_id] && [string equal "/view/" $base_url]} {
if {$root_folder_id ne $folder_id && "/view/" eq $base_url} {
set folder_path [db_exec_plsql get_folder_path {}]
} else {
set folder_path ""
......@@ -63,11 +63,11 @@ foreach { package_id root_folder_id } [fs::get_folder_package_and_root $folder_i
set last_modified_ansi [lc_time_system_to_conn $last_modified_ansi]
set last_modified_pretty [lc_time_fmt $last_modified_ansi "%x %X"]
# if {![empty_string_p $description]} {
# if {$description ne ""} {
# set description " - $description"
# }
if {[string equal $type "folder"]} {
if {$type eq "folder"} {
set content_size_pretty [lc_numeric $content_size]
append content_size_pretty " [_ file-storage.items]"
set pretty_type "Folder"
......@@ -75,7 +75,7 @@ foreach { package_id root_folder_id } [fs::get_folder_package_and_root $folder_i
if {$content_size < 1024} {
set content_size_pretty "[lc_numeric $content_size] [_ file-storage.bytes]"
} else {
set content_size_pretty "[lc_numeric [expr $content_size / 1024 ]] [_ file-storage.kb]"
set content_size_pretty "[lc_numeric [expr {$content_size / 1024 }]] [_ file-storage.kb]"
}
}
......@@ -97,7 +97,7 @@ foreach { package_id root_folder_id } [fs::get_folder_package_and_root $folder_i
}
url {
set properties_link "properties"
set properties_url "${fs_url}simple?[export_vars {object_id return_url}]"
set properties_url [export_vars -base ${fs_url}simple {object_id return_url}]
set icon "/resources/acs-subsite/url-button.gif"
set file_url ${url}
set download_url $file_url
......@@ -105,10 +105,10 @@ foreach { package_id root_folder_id } [fs::get_folder_package_and_root $folder_i
default {
set properties_link [_ file-storage.properties]
set properties_url "${fs_url}file?[export_vars {{file_id $object_id} return_url}]"
set properties_url [export_vars -base ${fs_url}file {{file_id $object_id} return_url}]
set icon "/resources/file-storage/file.gif"
set file_url "${base_url}${file_url}"
set download_url "${fs_url}download/?[export_vars {{file_id $object_id}}]"
set download_url [export_vars -base ${fs_url}download {{file_id $object_id}}]
}
}
......
<h2><a href="@url@/index?folder%5fid=@fs_folder@">Recent Files</a></h2>
<include src="../www/folder-chunk" folder_id="@fs_folder@" fs_url="@url@" n_past_days="5" allow_bulk_actions="0" format="list" >
<include src="../www/folder-chunk" folder_id="@fs_folder;literal@" fs_url="@url;literal@" n_past_days="5" allow_bulk_actions="0" format="list" >
......@@ -49,75 +49,6 @@ create table fs_root_folders (
unique
);
-- fraber 110228
-- There is an error in the old CR creation apparently...
create or replace function content_type__create_type (varchar,varchar,varchar,varchar,varchar,varchar,varchar)
returns integer as '
declare
create_type__content_type alias for $1;
create_type__supertype alias for $2; -- default ''content_revision''
create_type__pretty_name alias for $3;
create_type__pretty_plural alias for $4;
create_type__table_name alias for $5;
create_type__id_column alias for $6; -- default ''XXX''
create_type__name_method alias for $7; -- default null
v_temp_p boolean;
v_supertype_table acs_object_types.table_name%TYPE;
begin
if (create_type__supertype <> ''content_revision'')
and (create_type__content_type <> ''content_revision'') then
select count(*) > 0 into v_temp_p
from acs_object_type_supertype_map
where object_type = create_type__supertype
and ancestor_type = ''content_revision'';
if not v_temp_p then
raise EXCEPTION ''-20000: supertype % must be a subtype of content_revision'', create_type__supertype;
end if;
end if;
select count(*) > 0 into v_temp_p from pg_class
where relname = lower(create_type__table_name);
if NOT v_temp_p and create_type__table_name is not null then
select table_name into v_supertype_table from acs_object_types
where object_type = create_type__supertype;
raise NOTICE ''content_type__create_type: table_name=%, id_column=%, supertype_table=%'',
create_type__table_name, create_type__id_column, v_supertype_table;
execute ''create table '' || create_type__table_name || '' ('' ||
create_type__id_column || '' integer constraint '' || create_type__table_name || ''_pk primary key '' ||
'' constraint '' || create_type__table_name || ''_fk references '' || v_supertype_table || '')'';
end if;
PERFORM acs_object_type__create_type (
create_type__content_type,
create_type__pretty_name,
create_type__pretty_plural,
create_type__supertype,
create_type__table_name,
create_type__id_column,
null,
''f'',
null,
create_type__name_method
);
PERFORM content_type__refresh_view(create_type__content_type);
return 0;
end;' language 'plpgsql';
-- Create a subtype of content_revision so that site-wide-search can
-- distinguish file-storage items (v.s. generic content repository
-- items) in the search results
......@@ -135,35 +66,36 @@ select content_type__create_type (
'file_storage__get_title' -- name_method
);
create or replace function inline_0 ()
returns integer as'
declare
CREATE OR REPLACE FUNCTION inline_0 ()
RETURNS integer AS $$
DECLARE
template_id integer;
begin
BEGIN
-- Create the (default) file_storage_object content type template
template_id := content_template__new(
''file-storage-default'', -- name
''<master>
'file-storage-default', -- name
'<master>
<property name="title">@title;noquote@</property>
<property name="context">@context;noquote@</property>
<property name="displayed_object_id">@item_id;noquote@</property>
@text;noquote@'', -- text
@text;noquote@', -- text
true -- is_live
);
-- Register the template for the file_storage_object content type
perform content_type__register_template(
''file_storage_object'', -- content_type
'file_storage_object', -- content_type
template_id, -- template_id
''public'', -- use_context
''t'' -- is_default
'public', -- use_context
't' -- is_default
);
return null;
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
select inline_0();
drop function inline_0();
......
......@@ -15,12 +15,18 @@
-- content repository is set up to cascade, so we should just have to
-- delete the root folders
--
create function inline_0()
returns integer as '
declare
--
-- procedure inline_0/0
--
CREATE OR REPLACE FUNCTION inline_0(
) RETURNS integer AS $$
DECLARE
rec_root_folder record;
template_id integer;
begin
BEGIN
for rec_root_folder in
select package_id
......@@ -32,13 +38,14 @@ begin
end loop;
-- Unregister the content template
template_id := content_type__get_template(''file_storage_object'',''public'');
template_id := content_type__get_template('file_storage_object','public');
perform content_type__unregister_template (''file_storage_object'', template_id, ''public'');
perform content_type__unregister_template ('file_storage_object', template_id, 'public');
perform content_template__del(template_id);
return 0;
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
select inline_0();
drop function inline_0();
......
create function inline_0() returns integer as '
declare
--
-- procedure inline_0/0
--
CREATE OR REPLACE FUNCTION inline_0(
) RETURNS integer AS $$
DECLARE
impl_id integer;
v_foo integer;
begin
BEGIN
-- the notification type impl
impl_id := acs_sc_impl__new (
''NotificationType'',
''fs_fs_notif_type'',
''file_storage'',
''file_storage''
'NotificationType',
'fs_fs_notif_type',
'file_storage',
'file_storage'
);
v_foo := acs_sc_impl_alias__new (
''NotificationType'', -- impl_contract_name
''fs_fs_notif_type'', -- impl_name
''GetURL'', -- impl_operation_name
''fs::notification::get_url'', -- impl_alias
''TCL'' -- impl_pl
'NotificationType', -- impl_contract_name
'fs_fs_notif_type', -- impl_name
'GetURL', -- impl_operation_name
'fs::notification::get_url', -- impl_alias
'TCL' -- impl_pl
);
v_foo := acs_sc_impl_alias__new (
''NotificationType'',
''fs_fs_notif_type'',
''ProcessReply'',
'' fs::notification::process_reply'',
''TCL''
'NotificationType',
'fs_fs_notif_type',
'ProcessReply',
' fs::notification::process_reply',
'TCL'
);
PERFORM acs_sc_binding__new (
''NotificationType'',
''fs_fs_notif_type''
'NotificationType',
'fs_fs_notif_type'
);
v_foo:= notification_type__new (
NULL,
impl_id,
''fs_fs_notif'',
''File-Storage Notification'',
''Notifications for File Storage'',
'fs_fs_notif',
'File-Storage Notification',
'Notifications for File Storage',
now(),
NULL,
NULL,
......@@ -48,17 +54,18 @@ begin
insert into notification_types_intervals
(type_id, interval_id)
select v_foo, interval_id
from notification_intervals where name in (''instant'',''hourly'',''daily'');
from notification_intervals where name in ('instant','hourly','daily');
insert into notification_types_del_methods
(type_id, delivery_method_id)
select v_foo, delivery_method_id
from notification_delivery_methods where short_name in (''email'');
from notification_delivery_methods where short_name in ('email');
return (0);
end;
' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
select inline_0();
drop function inline_0();
create function inline_0 ()
returns integer as '
declare
--
-- procedure inline_0/0
--
CREATE OR REPLACE FUNCTION inline_0(
) RETURNS integer AS $$
DECLARE
row record;
begin
BEGIN
for row in select type_id
from notification_types
where short_name in (''fs_fs_notif'')
where short_name in ('fs_fs_notif')
loop
perform notification_type__delete(row.type_id);
end loop;
return null;
end;
' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
select inline_0();
drop function inline_0();
create function inline_0() returns integer as '
declare
--
-- procedure inline_0/0
--
CREATE OR REPLACE FUNCTION inline_0(
) RETURNS integer AS $$
DECLARE
impl_id integer;
v_foo integer;
begin
BEGIN
-- the notification type impl
impl_id := acs_sc_impl__get_id (
''NotificationType'', -- impl_contract_name
''fs_fs_notif_type'' -- impl_name
'NotificationType', -- impl_contract_name
'fs_fs_notif_type' -- impl_name
);
perform acs_sc_binding__delete (
''NotificationType'',
''fs_fs_notif_type''
'NotificationType',
'fs_fs_notif_type'
);
v_foo := acs_sc_impl_alias__delete (
''NotificationType'', -- impl_contract_name
''fs_fs_notif_type'', -- impl_name
''GetURL'' -- impl_operation_name
'NotificationType', -- impl_contract_name
'fs_fs_notif_type', -- impl_name
'GetURL' -- impl_operation_name
);
v_foo := acs_sc_impl_alias__delete (
''NotificationType'', -- impl_contract_name
''fs_fs_notif_type'', -- impl_name
''ProcessReply'' -- impl_operation_name
'NotificationType', -- impl_contract_name
'fs_fs_notif_type', -- impl_name
'ProcessReply' -- impl_operation_name
);
perform acs_sc_impl__delete(
''NotificationType'', -- impl_contract_name
''fs_fs_notif_type'' -- impl_name
'NotificationType', -- impl_contract_name
'fs_fs_notif_type' -- impl_name
);
select into v_foo type_id
from notification_types
where sc_impl_id = impl_id
and short_name = ''fs_fs_notif'';
and short_name = 'fs_fs_notif';
perform notification_type__delete (v_foo);
......@@ -63,7 +71,7 @@ begin
and interval_id in (
select interval_id
from notification_intervals
where name in (''instant'',''hourly'',''daily'')
where name in ('instant','hourly','daily')
);
delete from notification_types_del_methods
......@@ -71,12 +79,12 @@ begin
and delivery_method_id in (
select delivery_method_id
from notification_delivery_methods
where short_name in (''email'')
where short_name in ('email')
);
return (0);
end;
' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
select inline_0();
drop function inline_0();
This diff is collapsed.
-- Move old fs_simple_objects URLs to the content repository, where they
-- belong.
create or replace function inline_0() returns integer as '
declare
--
-- procedure inline_0/0
--
CREATE OR REPLACE FUNCTION inline_0(
) RETURNS integer AS $$
DECLARE
root record;
folder record;
fs_url record;
new_url_id cr_extlinks.extlink_id%TYPE;
begin
BEGIN
for root in select tree_sortkey
from fs_root_folders, cr_items
......@@ -19,11 +26,11 @@ begin
where cr_items.tree_sortkey between root.tree_sortkey and tree_right(root.tree_sortkey)
and cr_folders.folder_id = cr_items.item_id
loop
if not content_folder__is_registered(folder.folder_id, ''content_symlink'', ''t'') then
perform content_folder__register_content_type(folder.folder_id, ''content_symlink'', ''t'');
if not content_folder__is_registered(folder.folder_id, 'content_symlink', 't') then
perform content_folder__register_content_type(folder.folder_id, 'content_symlink', 't');
end if;
if not content_folder__is_registered(folder.folder_id, ''content_extlink'', ''t'') then
perform content_folder__register_content_type(folder.folder_id, ''content_extlink'', ''t'');
if not content_folder__is_registered(folder.folder_id, 'content_extlink', 't') then
perform content_folder__register_content_type(folder.folder_id, 'content_extlink', 't');
end if;
end loop;
......@@ -60,7 +67,8 @@ begin
return 0;
end' language 'plpgsql';
end
$$ LANGUAGE plpgsql;
begin;
select inline_0();
......@@ -123,11 +131,18 @@ as
-- JS: BEFORE DELETE TRIGGER to clean up CR entries (except root folder)
drop function fs_package_items_delete_trig ();
create function fs_package_items_delete_trig () returns opaque as '
declare
--
-- procedure fs_package_items_delete_trig/0
--
CREATE OR REPLACE FUNCTION fs_package_items_delete_trig(
) RETURNS trigger AS $$
DECLARE
v_rec record;
begin
BEGIN
for v_rec in
......@@ -141,35 +156,35 @@ begin
order by c1.tree_sortkey desc
loop
-- DRB: Why can''t we just use object delete here?
-- DRB: Why can't we just use object delete here?
-- We delete the item. On delete cascade should take care
-- of deletion of revisions.
if v_rec.content_type = ''file_storage_object''
if v_rec.content_type = 'file_storage_object'
then
raise notice ''Deleting item_id = %'',v_rec.item_id;
raise notice 'Deleting item_id = %',v_rec.item_id;
PERFORM content_item__delete(v_rec.item_id);
end if;
-- Instead of doing an if-else, we make sure we are deleting a folder.
if v_rec.content_type = ''content_folder''
if v_rec.content_type = 'content_folder'
then
raise notice ''Deleting folder_id = %'',v_rec.item_id;
raise notice 'Deleting folder_id = %',v_rec.item_id;
PERFORM content_folder__delete(v_rec.item_id);
end if;
-- Instead of doing an if-else, we make sure we are deleting a folder.
if v_rec.content_type = ''content_symlink''
if v_rec.content_type = 'content_symlink'
then
raise notice ''Deleting symlink_id = %'',v_rec.item_id;
raise notice 'Deleting symlink_id = %',v_rec.item_id;
PERFORM content_symlink__delete(v_rec.item_id);
end if;
-- Instead of doing an if-else, we make sure we are deleting a folder.
if v_rec.content_type = ''content_extlink''
if v_rec.content_type = 'content_extlink'
then
raise notice ''Deleting folder_id = %'',v_rec.item_id;
raise notice 'Deleting folder_id = %',v_rec.item_id;
PERFORM content_extlink__delete(v_rec.item_id);
end if;
......@@ -178,7 +193,8 @@ begin
-- We need to return something for the trigger to be activated
return old;
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
drop trigger fs_package_items_delete_trig on fs_root_folders;
create trigger fs_package_items_delete_trig before delete
......
-- Add user_id and IP to update_last_modified
-- $Id
create or replace function file_storage__new_file(
--
-- Create a file in CR in preparation for actual storage
-- Wrapper for content_item__new
--
-- DRB: I added this version to allow one to predefine item_id, among other things to
-- make it easier to use with ad_form
varchar, -- cr_items.name%TYPE,
integer, -- cr_items.parent_id%TYPE,
integer, -- acs_objects.creation_user%TYPE,
varchar, -- acs_objects.creation_ip%TYPE,
boolean, -- store in db?
integer -- cr_items.item_id%TYPE,
) returns integer as ' -- cr_items.item_id%TYPE
declare
new_file__title alias for $1;
new_file__folder_id alias for $2;
new_file__user_id alias for $3;
new_file__creation_ip alias for $4;
new_file__indb_p alias for $5;
new_file__item_id alias for $6;
-- added
select define_function_args('file_storage__new_file','title,folder_id,user_id,creation_ip,indb_p,item_id');
--
-- procedure file_storage__new_file/6
--
CREATE OR REPLACE FUNCTION file_storage__new_file(
new_file__title varchar,
new_file__folder_id integer,
new_file__user_id integer,
new_file__creation_ip varchar,
new_file__indb_p boolean,
new_file__item_id integer
) RETURNS integer AS $$
-- cr_items.item_id%TYPE
DECLARE
v_item_id integer;
begin
BEGIN
if new_file__indb_p
then
......@@ -36,11 +34,11 @@ begin
new_file__user_id, -- creation_user
new_file__folder_id, -- context_id
new_file__creation_ip, -- creation_ip
''content_item'', -- item_subtype (default)
''file_storage_object'', -- content_type (needed by site-wide search)
'content_item', -- item_subtype (default)
'file_storage_object', -- content_type (needed by site-wide search)
null, -- title (default)
null, -- description
''text/plain'', -- mime_type (default)
'text/plain', -- mime_type (default)
null, -- nls_language (default)
null -- data (default)
);
......@@ -54,14 +52,14 @@ begin
new_file__user_id, -- creation_user
new_file__folder_id, -- context_id
new_file__creation_ip, -- creation_ip
''content_item'', -- item_subtype (default)
''file_storage_object'', -- content_type (needed by site-wide search)
'content_item', -- item_subtype (default)
'file_storage_object', -- content_type (needed by site-wide search)
null, -- title (default)
null, -- description
''text/plain'', -- mime_type (default)
'text/plain', -- mime_type (default)
null, -- nls_language (default)
null, -- text (default)
''file'' -- storage_type
'file' -- storage_type
);
end if;
......@@ -70,23 +68,27 @@ begin
return v_item_id;
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
create or replace function file_storage__copy_file(
--
-- Copy a file, but only copy the live_revision
--
integer, -- cr_items.item_id%TYPE,
integer, -- cr_items.parent_id%TYPE,
integer, -- acs_objects.creation_user%TYPE,
varchar -- acs_objects.creation_ip%TYPE
) returns integer as ' -- cr_revisions.revision_id%TYPE
declare
copy_file__file_id alias for $1;
copy_file__target_folder_id alias for $2;
copy_file__creation_user alias for $3;
copy_file__creation_ip alias for $4;
-- added
select define_function_args('file_storage__copy_file','file_id,target_folder_id,creation_user,creation_ip');
--
-- procedure file_storage__copy_file/4
--
CREATE OR REPLACE FUNCTION file_storage__copy_file(
copy_file__file_id integer,
copy_file__target_folder_id integer,
copy_file__creation_user integer,
copy_file__creation_ip varchar
) RETURNS integer AS $$
-- cr_revisions.revision_id%TYPE
DECLARE
v_title cr_items.name%TYPE;
v_live_revision cr_items.live_revision%TYPE;
v_filename cr_revisions.title%TYPE;
......@@ -99,12 +101,12 @@ declare
v_new_file_id cr_items.item_id%TYPE;
v_new_version_id cr_revisions.revision_id%TYPE;
v_indb_p boolean;
begin
BEGIN
-- We copy only the title from the file being copied, and attributes of the
-- live revision
select i.name,i.live_revision,r.title,r.description,r.mime_type,r.content_length,
(case when i.storage_type = ''lob''
(case when i.storage_type = 'lob'
then true
else false
end)
......@@ -172,25 +174,28 @@ begin
return v_new_version_id;
end;' language 'plpgsql';
create or replace function file_storage__move_file (
--
-- Move a file (ans all its versions) to a different folder.
-- Wrapper for content_item__move
--
integer, -- cr_folders.folder_id%TYPE,
integer, -- cr_folders.folder_id%TYPE
integer,
varchar
) returns integer as ' -- 0 for success
declare
move_file__file_id alias for $1;
move_file__target_folder_id alias for $2;
move_file__creation_user alias for $3;
move_file__creation_ip alias for $4;
begin
END;
$$ LANGUAGE plpgsql;
-- added
select define_function_args('file_storage__move_file','file_id,target_folder_id,creation_user,creation_ip');
--
-- procedure file_storage__move_file/4
--
CREATE OR REPLACE FUNCTION file_storage__move_file(
move_file__file_id integer,
move_file__target_folder_id integer,
move_file__creation_user integer,
move_file__creation_ip varchar
) RETURNS integer AS $$
-- 0 for success
DECLARE
BEGIN
perform content_item__move(
move_file__file_id, -- item_id
......@@ -200,30 +205,31 @@ begin
perform acs_object__update_last_modified(move_file__target_folder_id,move_file__creation_user,move_file__creation_ip);
return 0;
end;' language 'plpgsql';
create or replace function file_storage__new_version (
--
-- Create a new version of a file
-- Wrapper for content_revision__new
--
varchar, -- cr_revisions.title%TYPE,
varchar, -- cr_revisions.description%TYPE,
varchar, -- cr_revisions.mime_type%TYPE,
integer, -- cr_items.item_id%TYPE,
integer, -- acs_objects.creation_user%TYPE,
varchar -- acs_objects.creation_ip%TYPE
) returns integer as ' -- cr_revisions.revision_id
declare
new_version__filename alias for $1;
new_version__description alias for $2;
new_version__mime_type alias for $3;
new_version__item_id alias for $4;
new_version__creation_user alias for $5;
new_version__creation_ip alias for $6;
END;
$$ LANGUAGE plpgsql;
-- added
select define_function_args('file_storage__new_version','filename,description,mime_type,item_id,creation_user,creation_ip');
--
-- procedure file_storage__new_version/6
--
CREATE OR REPLACE FUNCTION file_storage__new_version(
new_version__filename varchar,
new_version__description varchar,
new_version__mime_type varchar,
new_version__item_id integer,
new_version__creation_user integer,
new_version__creation_ip varchar
) RETURNS integer AS $$
-- cr_revisions.revision_id
DECLARE
v_revision_id cr_revisions.revision_id%TYPE;
v_folder_id cr_items.parent_id%TYPE;
begin
BEGIN
-- Create a revision
v_revision_id := content_revision__new (
new_version__filename, -- title
......@@ -251,5 +257,6 @@ begin
return v_revision_id;
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
......@@ -4,7 +4,7 @@
-- @author Ola Hansson <ola@polyxena.net>
create or replace function inline_0 ()
returns integer as'
returns integer as $$
declare
template_id integer;
begin
......@@ -12,51 +12,52 @@ begin
-- Create the (default) file_storage_object content type template
template_id := content_template__new(
''file-storage-default'', -- name
''<master>
'file-storage-default', -- name
'<master>
<property name="title">@title;noquote@</property>
<property name="context">@context;noquote@</property>
@text;noquote@'', -- text
@text;noquote@', -- text
true -- is_live
);
-- Register the template for the file_storage_object content type
perform content_type__register_template(
''file_storage_object'', -- content_type
'file_storage_object', -- content_type
template_id, -- template_id
''public'', -- use_context
''t'' -- is_default
'public', -- use_context
't' -- is_default
);
return null;
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
select inline_0();
drop function inline_0();
create or replace function file_storage__new_version (
--
-- Create a new version of a file
-- Wrapper for content_revision__new
--
varchar, -- cr_revisions.title%TYPE,
varchar, -- cr_revisions.description%TYPE,
varchar, -- cr_revisions.mime_type%TYPE,
integer, -- cr_items.item_id%TYPE,
integer, -- acs_objects.creation_user%TYPE,
varchar -- acs_objects.creation_ip%TYPE
) returns integer as ' -- cr_revisions.revision_id
declare
new_version__filename alias for $1;
new_version__description alias for $2;
new_version__mime_type alias for $3;
new_version__item_id alias for $4;
new_version__creation_user alias for $5;
new_version__creation_ip alias for $6;
-- added
select define_function_args('file_storage__new_version','filename,description,mime_type,item_id,creation_user,creation_ip');
--
-- procedure file_storage__new_version/6
--
CREATE OR REPLACE FUNCTION file_storage__new_version(
new_version__filename varchar,
new_version__description varchar,
new_version__mime_type varchar,
new_version__item_id integer,
new_version__creation_user integer,
new_version__creation_ip varchar
) RETURNS integer AS $$
-- cr_revisions.revision_id
DECLARE
v_revision_id cr_revisions.revision_id%TYPE;
v_folder_id cr_items.parent_id%TYPE;
begin
BEGIN
-- Create a revision
v_revision_id := content_revision__new (
new_version__filename, -- title
......@@ -85,4 +86,5 @@ begin
return v_revision_id;
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
......@@ -5,13 +5,21 @@
-- Utility function lifted from one of the notification upgrade scripts...
-- We might want to make this standard.
create or replace function safe_drop_constraint(name, name)
returns integer as '
declare
p_table_name alias for $1;
p_constraint_name alias for $2;
-- added
select define_function_args('safe_drop_constraint','table_name,constraint_name');
--
-- procedure safe_drop_constraint/2
--
CREATE OR REPLACE FUNCTION safe_drop_constraint(
p_table_name name,
p_constraint_name name
) RETURNS integer AS $$
DECLARE
v_constraint_p integer;
begin
BEGIN
select count(*)
into v_constraint_p
from pg_constraint con, pg_class c
......@@ -20,11 +28,12 @@ begin
and c.relname = p_table_name;
if v_constraint_p > 0 then
execute ''alter table '' || p_table_name || '' drop constraint '' || p_constraint_name;
execute 'alter table ' || p_table_name || ' drop constraint ' || p_constraint_name;
end if;
return 0;
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
-- Now drop the old constraint if defined (it might not be).
select safe_drop_constraint('fs_rss_subscrs', 'fs_rss_subscrs_fk');
......
create or replace function file_storage__rename_file (
--
-- Rename a file and all
-- Wrapper to content_item__edit_name
--
integer, -- cr_items.item_id%TYPE,
varchar -- cr_items.name%TYPE
) returns integer as '
declare
rename_file__file_id alias for $1;
rename_file__name alias for $2;
begin
-- added
select define_function_args('file_storage__rename_file','file_id,name');
--
-- procedure file_storage__rename_file/2
--
CREATE OR REPLACE FUNCTION file_storage__rename_file(
rename_file__file_id integer,
rename_file__name varchar
) RETURNS integer AS $$
DECLARE
BEGIN
return content_item__edit_name(
rename_file__file_id, -- item_id
rename_file__name -- name
);
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
create or replace function file_storage__move_file (
--
-- Move a file (ans all its versions) to a different folder.
-- Wrapper for content_item__move
--
integer, -- cr_folders.folder_id%TYPE,
integer, -- cr_folders.folder_id%TYPE
integer, -- ceration_user
varchar -- creation_ip
) returns integer as ' -- 0 for success
declare
move_file__file_id alias for $1;
move_file__target_folder_id alias for $2;
move_file__creation_user alias for $3;
move_file__creation_ip alias for $4;
begin
-- added
select define_function_args('file_storage__move_file','file_id,target_folder_id,creation_user,creation_ip');
--
-- procedure file_storage__move_file/4
--
CREATE OR REPLACE FUNCTION file_storage__move_file(
move_file__file_id integer,
move_file__target_folder_id integer,
move_file__creation_user integer,
move_file__creation_ip varchar
) RETURNS integer AS $$
DECLARE
BEGIN
perform content_item__move(
move_file__file_id, -- item_id
......@@ -24,4 +25,5 @@ begin
perform acs_object__update_last_modified(move_file__target_folder_id,move_file__creation_user,move_file__creation_ip);
return 0;
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
create function inline_0() returns integer as '
declare
--
-- procedure inline_0/0
--
CREATE OR REPLACE FUNCTION inline_0(
) RETURNS integer AS $$
DECLARE
impl_id integer;
v_foo integer;
begin
BEGIN
-- the notification type impl
impl_id := acs_sc_impl__new (
''NotificationType'',
''fs_fs_notif_type'',
''file_storage''
'NotificationType',
'fs_fs_notif_type',
'file_storage'
);
v_foo := acs_sc_impl_alias__new (
''NotificationType'', -- impl_contract_name
''fs_fs_notif_type'', -- impl_name
''GetURL'', -- impl_operation_name
''fs::notification::get_url'', -- impl_alias
''TCL'' -- impl_pl
'NotificationType', -- impl_contract_name
'fs_fs_notif_type', -- impl_name
'GetURL', -- impl_operation_name
'fs::notification::get_url', -- impl_alias
'TCL' -- impl_pl
);
v_foo := acs_sc_impl_alias__new (
''NotificationType'',
''fs_fs_notif_type'',
''ProcessReply'',
'' fs::notification::process_reply'',
''TCL''
'NotificationType',
'fs_fs_notif_type',
'ProcessReply',
' fs::notification::process_reply',
'TCL'
);
PERFORM acs_sc_binding__new (
''NotificationType'',
''fs_fs_notif_type''
'NotificationType',
'fs_fs_notif_type'
);
v_foo:= notification_type__new (
NULL,
impl_id,
''fs_fs_notif'',
''File-Storage Notification'',
''Notifications for File Storage'',
'fs_fs_notif',
'File-Storage Notification',
'Notifications for File Storage',
now(),
NULL,
NULL,
......@@ -47,17 +51,18 @@ begin
insert into notification_types_intervals
(type_id, interval_id)
select v_foo, interval_id
from notification_intervals where name in (''instant'',''hourly'',''daily'');
from notification_intervals where name in ('instant','hourly','daily');
insert into notification_types_del_methods
(type_id, delivery_method_id)
select v_foo, delivery_method_id
from notification_delivery_methods where short_name in (''email'');
from notification_delivery_methods where short_name in ('email');
return (0);
end;
' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
select inline_0();
drop function inline_0();
--set serveroutput on size 200000
create or replace function tmp_fs_name_duplicate (
varchar,
integer
) returns varchar
as '
CREATE OR REPLACE FUNCTION tmp_fs_name_duplicate (
v_name varchar,
v_count integer
) RETURNS varchar AS $$
declare
v_name alias for $1; --cr_items.name%TYPE
v_count alias for $2;
v_insert_pos integer;
begin
v_insert_pos := instr(v_name,''.'',-1)-1;
v_insert_pos := instr(v_name,'.',-1)-1;
if v_insert_pos = -1 then
return v_name || ''.'' || v_count;
return v_name || '.' || v_count;
else
return substr(v_name,1,v_insert_pos) || ''.'' || v_count || substr(v_name,v_insert_pos+1);
return substr(v_name,1,v_insert_pos) || '.' || v_count || substr(v_name,v_insert_pos+1);
end if;
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
--show errors
......@@ -24,18 +24,24 @@ end;' language 'plpgsql';
-- up into chunks. The order by clause plays a critical role in the
-- script logics attempt to avoid name collisions.
create or replace function inline_0 () returns integer as '
declare
--
-- procedure inline_0/0
--
CREATE OR REPLACE FUNCTION inline_0(
) RETURNS integer AS $$
DECLARE
v_count integer;
v_prev_parent_id integer;
v_prev_title cr_items.name%TYPE;
v_new_name cr_items.name%TYPE;
v_item_row RECORD;
begin
BEGIN
v_count := 1;
v_prev_parent_id := 0;
v_prev_title := '''';
v_prev_title := '';
for v_item_row in select
r.item_id, r.revision_id, r.title, i.name,
......@@ -43,7 +49,7 @@ begin
from cr_items i, cr_revisions r
where i.item_id=r.item_id
and i.live_revision=r.revision_id
and i.content_type=''file_storage_object''
and i.content_type='file_storage_object'
order by parent_id, title, revision_id
loop
......@@ -59,7 +65,7 @@ begin
update cr_items set name = v_new_name
where item_id=v_item_row.item_id;
raise notice ''%'',v_new_name;
raise notice '%',v_new_name;
else
......@@ -74,7 +80,8 @@ begin
end loop;
return null;
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
select inline_0();
drop function inline_0();
......
......@@ -5,38 +5,50 @@
-- @cvs-id $Id$
--
create or replace function file_storage__delete_folder(
--
-- Delete a folder
--
integer -- cr_folders.folder_id%TYPE
) returns integer as ' -- 0 for success
declare
delete_folder__folder_id alias for $1;
begin
-- added
--
-- procedure file_storage__delete_folder/1
--
CREATE OR REPLACE FUNCTION file_storage__delete_folder(
delete_folder__folder_id integer
) RETURNS integer AS $$
-- 0 for success
DECLARE
BEGIN
return file_storage__delete_folder(
delete_folder__folder_id, -- folder_id
''f''
'f'
);
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
-- added
select define_function_args('file_storage__delete_folder','folder_id,cascade_p');
--
-- procedure file_storage__delete_folder/2
--
CREATE OR REPLACE FUNCTION file_storage__delete_folder(
delete_folder__folder_id integer,
delete_folder__cascade_p boolean
create or replace function file_storage__delete_folder(
--
-- Delete a folder
--
integer, -- cr_folders.folder_id%TYPE
boolean
) returns integer as ' -- 0 for success
declare
delete_folder__folder_id alias for $1;
delete_folder__cascade_p alias for $2;
begin
) RETURNS integer AS $$
-- 0 for success
DECLARE
BEGIN
return content_folder__delete(
delete_folder__folder_id, -- folder_id
delete_folder__cascade_p
);
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
......@@ -52,27 +52,25 @@ as
-- dropped old version in d1-d2 upgrade script.
create or replace function file_storage__new_root_folder (
--
-- Creates a new root folder
--
--
-- A hackish function to get around the fact that we can not run
-- code automatically when a new package instance is created.
--
integer, -- apm_packages.package_id%TYPE
varchar, -- cr_folders.label%TYPE
varchar, -- cr_items.name%TYPE
varchar
)
returns integer as ' -- fs_root_folders.folder_id%TYPE
declare
new_root_folder__package_id alias for $1;
new_root_folder__folder_name alias for $2;
new_root_folder__url alias for $3;
new_root_folder__description alias for $4;
-- added
select define_function_args('file_storage__new_root_folder','package_id,folder_name,url,description');
--
-- procedure file_storage__new_root_folder/4
--
CREATE OR REPLACE FUNCTION file_storage__new_root_folder(
new_root_folder__package_id integer,
new_root_folder__folder_name varchar,
new_root_folder__url varchar,
new_root_folder__description varchar
) RETURNS integer AS $$
-- fs_root_folders.folder_id%TYPE
DECLARE
v_folder_id fs_root_folders.folder_id%TYPE;
begin
BEGIN
v_folder_id := content_folder__new (
......@@ -97,25 +95,26 @@ begin
-- JS: true since we created a new subtype.
PERFORM content_folder__register_content_type(
v_folder_id, -- folder_id
''content_revision'', -- content_types
''t'' -- include_subtypes
'content_revision', -- content_types
't' -- include_subtypes
);
PERFORM content_folder__register_content_type(
v_folder_id, -- folder_id
''content_folder'', -- content_types
''t'' -- include_subtypes
'content_folder', -- content_types
't' -- include_subtypes
);
PERFORM content_folder__register_content_type(
v_folder_id, -- folder_id
''content_symlink'', -- content_types
''t'' -- include_subtypes
'content_symlink', -- content_types
't' -- include_subtypes
);
PERFORM content_folder__register_content_type(
v_folder_id, -- folder_id
''content_extlink'', -- content_types
''t'' -- include_subtypes
'content_extlink', -- content_types
't' -- include_subtypes
);
return v_folder_id;
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
......@@ -8,27 +8,25 @@
-- add package_id to acs_objects for all objects in FS (see Tip 42)
create or replace function file_storage__new_root_folder (
--
-- Creates a new root folder
--
--
-- A hackish function to get around the fact that we can not run
-- code automatically when a new package instance is created.
--
integer, -- apm_packages.package_id%TYPE
varchar, -- cr_folders.label%TYPE
varchar, -- cr_items.name%TYPE
varchar
)
returns integer as ' -- fs_root_folders.folder_id%TYPE
declare
new_root_folder__package_id alias for $1;
new_root_folder__folder_name alias for $2;
new_root_folder__url alias for $3;
new_root_folder__description alias for $4;
-- added
select define_function_args('file_storage__new_root_folder','package_id,folder_name,url,description');
--
-- procedure file_storage__new_root_folder/4
--
CREATE OR REPLACE FUNCTION file_storage__new_root_folder(
new_root_folder__package_id integer,
new_root_folder__folder_name varchar,
new_root_folder__url varchar,
new_root_folder__description varchar
) RETURNS integer AS $$
-- fs_root_folders.folder_id%TYPE
DECLARE
v_folder_id fs_root_folders.folder_id%TYPE;
begin
BEGIN
v_folder_id := content_folder__new (
......@@ -54,54 +52,52 @@ begin
-- JS: true since we created a new subtype.
PERFORM content_folder__register_content_type(
v_folder_id, -- folder_id
''content_revision'', -- content_types
''t'' -- include_subtypes
'content_revision', -- content_types
't' -- include_subtypes
);
PERFORM content_folder__register_content_type(
v_folder_id, -- folder_id
''content_folder'', -- content_types
''t'' -- include_subtypes
'content_folder', -- content_types
't' -- include_subtypes
);
PERFORM content_folder__register_content_type(
v_folder_id, -- folder_id
''content_symlink'', -- content_types
''t'' -- include_subtypes
'content_symlink', -- content_types
't' -- include_subtypes
);
PERFORM content_folder__register_content_type(
v_folder_id, -- folder_id
''content_extlink'', -- content_types
''t'' -- include_subtypes
'content_extlink', -- content_types
't' -- include_subtypes
);
return v_folder_id;
end;' language 'plpgsql';
create or replace function file_storage__new_file(
--
-- Create a file in CR in preparation for actual storage
-- Wrapper for content_item__new
--
-- DRB: I added this version to allow one to predefine item_id, among other things to
-- make it easier to use with ad_form
varchar, -- cr_items.name%TYPE,
integer, -- cr_items.parent_id%TYPE,
integer, -- acs_objects.creation_user%TYPE,
varchar, -- acs_objects.creation_ip%TYPE,
boolean, -- store in db?
integer, -- cr_items.item_id%TYPE,
integer -- apm_packages.package_id%TYPE
) returns integer as ' -- cr_items.item_id%TYPE
declare
new_file__name alias for $1;
new_file__folder_id alias for $2;
new_file__user_id alias for $3;
new_file__creation_ip alias for $4;
new_file__indb_p alias for $5;
new_file__item_id alias for $6;
new_file__package_id alias for $7;
END;
$$ LANGUAGE plpgsql;
-- added
select define_function_args('file_storage__new_file','name,folder_id,user_id,creation_ip,indb_p,item_id,package_id');
--
-- procedure file_storage__new_file/7
--
CREATE OR REPLACE FUNCTION file_storage__new_file(
new_file__name varchar,
new_file__folder_id integer,
new_file__user_id integer,
new_file__creation_ip varchar,
new_file__indb_p boolean,
new_file__item_id integer,
new_file__package_id integer
) RETURNS integer AS $$
-- cr_items.item_id%TYPE
DECLARE
v_item_id integer;
begin
BEGIN
if new_file__indb_p
then
......@@ -114,11 +110,11 @@ begin
new_file__user_id, -- creation_user
new_file__folder_id, -- context_id
new_file__creation_ip, -- creation_ip
''content_item'', -- item_subtype (default)
''file_storage_object'', -- content_type (needed by site-wide search)
'content_item', -- item_subtype (default)
'file_storage_object', -- content_type (needed by site-wide search)
null, -- title (default)
null, -- description
''text/plain'', -- mime_type (default)
'text/plain', -- mime_type (default)
null, -- nls_language (default)
null, -- data (default)
new_file__package_id -- package_id
......@@ -133,14 +129,14 @@ begin
new_file__user_id, -- creation_user
new_file__folder_id, -- context_id
new_file__creation_ip, -- creation_ip
''content_item'', -- item_subtype (default)
''file_storage_object'', -- content_type (needed by site-wide search)
'content_item', -- item_subtype (default)
'file_storage_object', -- content_type (needed by site-wide search)
null, -- title (default)
null, -- description
''text/plain'', -- mime_type (default)
'text/plain', -- mime_type (default)
null, -- nls_language (default)
null, -- text (default)
''file'', -- storage_type
'file', -- storage_type
new_file__package_id -- package_id
);
......@@ -150,25 +146,26 @@ begin
return v_item_id;
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
create or replace function file_storage__new_file(
varchar, -- cr_items.name%TYPE,
integer, -- cr_items.parent_id%TYPE,
integer, -- acs_objects.creation_user%TYPE,
varchar, -- acs_objects.creation_ip%TYPE,
boolean, -- store in db?
integer -- apm_packages.package_id%TYPE
) returns integer as ' -- cr_items.item_id%TYPE
declare
new_file__name alias for $1;
new_file__folder_id alias for $2;
new_file__user_id alias for $3;
new_file__creation_ip alias for $4;
new_file__indb_p alias for $5;
new_file__package_id alias for $6;
begin
--
-- procedure file_storage__new_file/6
--
CREATE OR REPLACE FUNCTION file_storage__new_file(
new_file__name varchar,
new_file__folder_id integer,
new_file__user_id integer,
new_file__creation_ip varchar,
new_file__indb_p boolean,
new_file__package_id integer
) RETURNS integer AS $$
-- cr_items.item_id%TYPE
DECLARE
BEGIN
return file_storage__new_file(
new_file__name, -- name
new_file__folder_id, -- parent_id
......@@ -179,7 +176,8 @@ begin
new_file__package_id -- pacakge_id
);
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
-- upgrade existing data
-- do in transaction since we're bashing acs_objects in a major way
......
create or replace function file_storage__new_file(
--
-- Create a file in CR in preparation for actual storage
-- Wrapper for content_item__new
--
-- DRB: I added this version to allow one to predefine item_id, among other things to
-- make it easier to use with ad_form
varchar, -- cr_items.name%TYPE,
integer, -- cr_items.parent_id%TYPE,
integer, -- acs_objects.creation_user%TYPE,
varchar, -- acs_objects.creation_ip%TYPE,
boolean, -- store in db?
integer, -- cr_items.item_id%TYPE,
integer -- apm_packages.package_id%TYPE
) returns integer as ' -- cr_items.item_id%TYPE
declare
new_file__name alias for $1;
new_file__folder_id alias for $2;
new_file__user_id alias for $3;
new_file__creation_ip alias for $4;
new_file__indb_p alias for $5;
new_file__item_id alias for $6;
new_file__package_id alias for $7;
--
-- procedure file_storage__new_file/7
--
CREATE OR REPLACE FUNCTION file_storage__new_file(
new_file__name varchar,
new_file__folder_id integer,
new_file__user_id integer,
new_file__creation_ip varchar,
new_file__indb_p boolean,
new_file__item_id integer,
new_file__package_id integer
) RETURNS integer AS $$
-- cr_items.item_id%TYPE
DECLARE
v_item_id integer;
begin
BEGIN
if new_file__indb_p
then
......@@ -35,11 +27,11 @@ begin
new_file__user_id, -- creation_user
new_file__folder_id, -- context_id
new_file__creation_ip, -- creation_ip
''content_item'', -- item_subtype (default)
''file_storage_object'', -- content_type (needed by site-wide search)
'content_item', -- item_subtype (default)
'file_storage_object', -- content_type (needed by site-wide search)
null, -- title (default)
null, -- description
''text/plain'', -- mime_type (default)
'text/plain', -- mime_type (default)
null, -- nls_language (default)
null, -- data (default)
new_file__package_id -- package_id
......@@ -54,14 +46,14 @@ begin
new_file__user_id, -- creation_user
new_file__folder_id, -- context_id
new_file__creation_ip, -- creation_ip
''content_item'', -- item_subtype (default)
''file_storage_object'', -- content_type (needed by site-wide search)
'content_item', -- item_subtype (default)
'file_storage_object', -- content_type (needed by site-wide search)
null, -- title (default)
null, -- description
''text/plain'', -- mime_type (default)
'text/plain', -- mime_type (default)
null, -- nls_language (default)
null, -- text (default)
''file'', -- storage_type
'file', -- storage_type
new_file__package_id -- package_id
);
......@@ -71,25 +63,33 @@ begin
return v_item_id;
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
create or replace function file_storage__new_file(
varchar, -- cr_items.name%TYPE,
integer, -- cr_items.parent_id%TYPE,
integer, -- acs_objects.creation_user%TYPE,
varchar, -- acs_objects.creation_ip%TYPE,
boolean, -- store in db?
integer -- apm_packages.package_id%TYPE
) returns integer as ' -- cr_items.item_id%TYPE
declare
new_file__name alias for $1;
new_file__folder_id alias for $2;
new_file__user_id alias for $3;
new_file__creation_ip alias for $4;
new_file__indb_p alias for $5;
new_file__package_id alias for $6;
begin
-- added
-- old define_function_args('file_storage__new_file','name,folder_id,user_id,creation_ip,indb_p,package_id')
-- new
select define_function_args('file_storage__new_file','name,folder_id,user_id,creation_ip,indb_p,item_id,package_id');
--
-- procedure file_storage__new_file/6
--
CREATE OR REPLACE FUNCTION file_storage__new_file(
new_file__name varchar,
new_file__folder_id integer,
new_file__user_id integer,
new_file__creation_ip varchar,
new_file__indb_p boolean,
new_file__package_id integer
) RETURNS integer AS $$
-- cr_items.item_id%TYPE
DECLARE
BEGIN
return file_storage__new_file(
new_file__name, -- name
new_file__folder_id, -- parent_id
......@@ -100,4 +100,5 @@ begin
new_file__package_id -- pacakge_id
);
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
create or replace function file_storage__copy_file(
--
-- Copy a file, but only copy the live_revision
--
integer, -- cr_items.item_id%TYPE,
integer, -- cr_items.parent_id%TYPE,
integer, -- acs_objects.creation_user%TYPE,
varchar -- acs_objects.creation_ip%TYPE
) returns integer as ' -- cr_revisions.revision_id%TYPE
declare
copy_file__file_id alias for $1;
copy_file__target_folder_id alias for $2;
copy_file__creation_user alias for $3;
copy_file__creation_ip alias for $4;
-- added
select define_function_args('file_storage__copy_file','file_id,target_folder_id,creation_user,creation_ip');
--
-- procedure file_storage__copy_file/4
--
CREATE OR REPLACE FUNCTION file_storage__copy_file(
copy_file__file_id integer,
copy_file__target_folder_id integer,
copy_file__creation_user integer,
copy_file__creation_ip varchar
) RETURNS integer AS $$
-- cr_revisions.revision_id%TYPE
DECLARE
v_name cr_items.name%TYPE;
v_live_revision cr_items.live_revision%TYPE;
v_filename cr_revisions.title%TYPE;
......@@ -27,11 +29,11 @@ declare
v_isurl boolean;
v_content_type cr_items.content_type%TYPE;
v_package_id apm_packages.package_id%TYPE;
begin
BEGIN
v_isurl:= false;
select content_type into v_content_type from cr_items where item_id = copy_file__file_id;
if v_content_type = ''content_extlink''
if v_content_type = 'content_extlink'
then
v_isurl:= true;
end if;
......@@ -40,7 +42,7 @@ begin
if v_isurl = false
then
select i.name,i.live_revision,r.title,r.description,r.mime_type,r.content_length,
(case when i.storage_type = ''lob''
(case when i.storage_type = 'lob'
then true
else false
end)
......@@ -110,5 +112,6 @@ begin
return 0;
end if;
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
This diff is collapsed.
select define_function_args('file_storage__get_parent_id','item_id');
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
<master>
<property name="title">Add/Edit RSS for @folder_name@</property>
<property name="doc(title)">Add/Edit RSS for @folder_name@</property>
<property name="header">Add/Edit RSS for @folder_name@</property>
<property name="context">@context;noquote@</property>
<property name="context">@context;literal@</property>
<p>Back up to <a href="../?folder_id=@folder_id@">@folder_name@</a></p>
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment