-- /packages/photo-album/sql/postgresql/photo-album-create.sql
--
-- data model to support ACS photo ablum application
--
-- Copyright (C) 2000-2001 ArsDigita Corporation
-- @author Tom Baginski (bags@arsdigita.com)
-- @creation-date 12/11/2000
--
-- @cvs-id $Id: photo-album-create.sql,v 1.4 2004/04/29 15:23:05 jeffd Exp $
--
-- This is free software distributed under the terms of the GNU Public
-- License. Full text of the license is available from the GNU Project:
-- http://www.fsf.org/copyleft/gpl.html
-- ported by Walter McGinnis (wtem@olywa.net), 2001-06-10
-- the content repository has been changed to be similar
-- to the original photo-album's storage scheme
-- (i.e. not using blobs in the database)
-- replaced photo-album's non-standard storage with
-- content-repository's standard one
-- one the key's to it is the adjustment to the content_item__new constructor
create table pa_albums (
pa_album_id integer
constraint pa_albums_id_fk
references cr_revisions on delete cascade
constraint pa_albums_id_pk
primary key,
story text,
photographer varchar(200),
taken_start timestamp,
taken_end timestamp,
iconic integer
constraint pa_albums_iconic_fk
references cr_items on delete set null
);
comment on table pa_albums is '
Table for storing custom fields of albums within content repository.
A pa_album is used to group zero or more pa_photos.
';
comment on column pa_albums.story is '
Story behind the album. In postgresql we use the text datatype
and there is no limit on text length. This differs from the varchar2 with
Oracle.
';
comment on column pa_albums.iconic is '
The photo to use as the cover photo for this album. If it is null a
default icon is chosen
';
comment on column pa_albums.photographer is '
The photographer who took the pictures.
';
comment on column pa_albums.taken_start is '
The date the photos were taken (start of range)
';
comment on column pa_albums.taken_start is '
The date the photos were taken (end of range)
';
-- create the content type
select content_type__create_type (
'pa_album', -- content_type
'content_revision', -- supertype
'Photo album', -- pretty_name
'Photo albums', -- pretty_plural
'pa_albums', -- table_name
'pa_album_id', -- id_column
null -- name_method
);
-- create content type attributes
select content_type__create_attribute (
'pa_album', -- content_type
'story', -- attribute_name
'text', -- datatype
'Story', -- pretty_name
'Stories', -- pretty_plural
null, -- sort_order
null, -- default_value
'text' -- column_spec
);
select content_type__create_attribute (
'pa_album', -- content_type
'photographer', -- attribute_name
'text', -- datatype
'Photographer', -- pretty_name
'Photographers', -- pretty_plural
null, -- sort_order
null, -- default_value
'varchar(200)' -- column_spec
);
create table pa_photos (
pa_photo_id integer
constraint pa_photos_id_fk
references cr_revisions on delete cascade
constraint pa_photo_pk
primary key,
caption varchar(500),
story text,
user_filename varchar(250),
camera_model varchar(250),
date_taken timestamp,
flash boolean,
focal_length numeric,
exposure_time numeric,
aperture varchar(32),
focus_distance numeric,
metering varchar(100),
sha256 varchar(64),
photographer varchar(200)
);
comment on table pa_photos is '
Table for storing custom fields of photos within content repository.
A pa_photo stores descriptive attribute information about a user
uploaded photo. The actually binary image files are stored using
associated images.
';
--------------------------------------------------------------------------------
select content_type__create_type (
'pa_photo', -- content_type
'content_revision', -- supertype
'Album photo', -- pretty_name
'Album photos', -- pretty_plural
'pa_photos', -- table_name
'pa_photo_id', -- id_column
null -- name_method
);
select content_type__create_attribute (
'pa_photo', -- content_type
'story', -- attribute_name
'text', -- datatype
'Story', -- pretty_name
'Stories', -- pretty_plural
null, -- sort_order
null, -- default_value
'text' -- column_spec
);
select content_type__create_attribute (
'pa_photo', -- content_type
'caption', -- attribute_name
'text', -- datatype
'Short photo caption', -- pretty_name
'Short photo captions', -- pretty_plural
null, -- sort_order
null, -- default_value
'varchar(500)' -- column_spec
);
select content_type__create_attribute (
'pa_photo', -- content_type
'user_filename', -- attribute_name
'text', -- datatype
'User filename', -- pretty_name
'User filenames', -- pretty_plural
null, -- sort_order
null, -- default_value
'varchar(250)' -- column_spec
);
--
-- JCD Added for exif data 2002-07-01
--
select content_type__create_attribute (
'pa_photo', -- content_type
'camera_model', -- attribute_name
'text', -- datatype
'Camera', -- pretty_name
'Cameras', -- pretty_plural
null, -- sort_order
null, -- default_value
'text' -- column_spec
);
select content_type__create_attribute (
'pa_photo', -- content_type
'date_taken', -- attribute_name
'date', -- datatype
'Date taken', -- pretty_name
'Dates taken', -- pretty_plural
null, -- sort_order
null, -- default_value
'timestamp' -- column_spec
);
select content_type__create_attribute (
'pa_photo', -- content_type
'flash', -- attribute_name
'boolean', -- datatype
'Flash used', -- pretty_name
'Flash used', -- pretty_plural
null, -- sort_order
null, -- default_value
'boolean' -- column_spec
);
select content_type__create_attribute (
'pa_photo', -- content_type
'exposure_time', -- attribute_name
'number', -- datatype
'Exposure time', -- pretty_name
'Exposure times', -- pretty_plural
null, -- sort_order
null, -- default_value
'numeric' -- column_spec
);
select content_type__create_attribute (
'pa_photo', -- content_type
'aperture', -- attribute_name
'string', -- datatype
'Aperture', -- pretty_name
'Apertures', -- pretty_plural
null, -- sort_order
null, -- default_value
'varchar' -- column_spec
);
select content_type__create_attribute (
'pa_photo', -- content_type
'focus_distance', -- attribute_name
'number', -- datatype
'Focus distance', -- pretty_name
'Focus distances', -- pretty_plural
null, -- sort_order
null, -- default_value
'numeric' -- column_spec
);
select content_type__create_attribute (
'pa_photo', -- content_type
'metering', -- attribute_name
'string', -- datatype
'Metering', -- pretty_name
'Meterings', -- pretty_plural
null, -- sort_order
null, -- default_value
'varchar' -- column_spec
);
select content_type__create_attribute (
'pa_photo', -- content_type
'sha256', -- attribute_name
'string', -- datatype
'SHA256', -- pretty_name
'SHA256', -- pretty_plural
null, -- sort_order
null, -- default_value
'varchar' -- column_spec
);
select content_type__create_attribute (
'pa_photo', -- content_type
'photographer', -- attribute_name
'text', -- datatype
'Photographer', -- pretty_name
'Photographers', -- pretty_plural
null, -- sort_order
null, -- default_value
'varchar(200)' -- column_spec
);
-- wtem@olywa.net, 2001-08-3
-- now that we are going with the new content-repository
-- storage of binaries
-- we no longer need a specialized pa_image content_type
-- it is now replaced by cr_revisions.content (which holds file name)
-- file_size is now under cr_revisions.content_size
-- we use the standar image content_type instead
select content_type__register_child_type (
'pa_album', -- parent_type
'pa_photo', -- child_type
'generic', -- relation_tag
0, -- min_n
null -- max_n
);
select content_type__register_child_type (
'pa_photo', -- parent_type
'image', -- child_type
'generic', -- relation_tag
0, -- min_n
null -- max_n
);
create table pa_package_root_folder_map (
package_id integer
constraint pa_pack_fldr_map_pk
primary key
constraint pa_pack_fldr_map_pack_id_fk
references apm_packages on delete cascade,
folder_id integer
constraint pa_pack_fldr_map_fldr_id_fk
references cr_folders on delete cascade
constraint pa_pack_fldr_map_fldr_id_unq
unique
);
--There cannot be much if any benefit from this index.
--create index pa_package_folder_map_by_pack on pa_package_root_folder_map (package_id, folder_id);
comment on table pa_package_root_folder_map is '
Table to keep track of root folder for each instance of the photo-album
Used for sub-site support. Each instance of the photo album has a unique
root folder. All folders, pa_albums, pa_photos, and images within the
package instance are descendants of the root folder.
The one-to-one mapping is done using this table to avoid adding a column to the apm_packages
that pertains only to the photo-album.
';
-- wtem@olywa.net, 2001-09-27
-- replaced non-standard pa_files_to_delete with new cr_files_to_delete calls
-- check for the two default acceptable mime_types in cr_mime_types
-- add them if necessary
-- drop function inline_0 ();
create function inline_0 () returns integer as '
declare
v_count integer;
begin
select count(*) into v_count from cr_mime_types where mime_type = ''image/jpeg'';
if v_count = 0 then
insert into cr_mime_types values (''JPEG image'', ''image/jpeg'', ''jpeg'');
end if;
select count(*) into v_count from cr_mime_types where mime_type = ''image/gif'';
if v_count = 0 then
insert into cr_mime_types values (''GIF image'', ''image/gif'', ''gif'');
end if;
select count(*) into v_count from cr_mime_types where mime_type = ''image/png'';
if v_count = 0 then
insert into cr_mime_types values (''PNG image'', ''image/png'', ''png'');
end if;
select count(*) into v_count from cr_mime_types where mime_type = ''image/tiff'';
if v_count = 0 then
insert into cr_mime_types values (''TIFF image'', ''image/tiff'', ''tiff'');
end if;
return 1;
end; ' language 'plpgsql';
select inline_0 ();
drop function inline_0 ();
--
-- A view to make getting the photo info out less horrible...
--
create view all_photo_images as select i.item_id, ccr.relation_tag, im.*, p.*
from cr_items i,
cr_items i2,
pa_photos p,
cr_child_rels ccr,
images im
where i.item_id = ccr.parent_id
and p.pa_photo_id = i.live_revision
and ccr.child_id = i2.item_id
and i2.live_revision = im.image_id;
\i permissions.sql
\i pl-pgsql.sql
\i photo-album-clip.sql