Index: openacs-4/packages/views/views.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/views/views.info,v
diff -u -N -r1.4 -r1.5
--- openacs-4/packages/views/views.info 17 Oct 2008 10:58:15 -0000 1.4
+++ openacs-4/packages/views/views.info 2 Nov 2013 16:15:13 -0000 1.5
@@ -8,7 +8,7 @@
t
views
-
+
Jeff Davis
Track views of objects.
Xarg
@@ -17,7 +17,7 @@
http://www.gnu.org/copyleft/gpl.html
0
-
+
Index: openacs-4/packages/views/lib/views-chunk.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/views/lib/views-chunk.tcl,v
diff -u -N -r1.3 -r1.4
--- openacs-4/packages/views/lib/views-chunk.tcl 2 Aug 2007 08:32:10 -0000 1.3
+++ openacs-4/packages/views/lib/views-chunk.tcl 2 Nov 2013 16:15:13 -0000 1.4
@@ -32,7 +32,7 @@
set user_filter_label ""
} else {
if {[info exists viewer_id]} {
- if {![empty_string_p $viewer_id]} {
+ if {$viewer_id ne ""} {
set user_filter_label [acs_user::get_element -user_id $viewer_id -element name]
} else {
set user_filter_label All
Index: openacs-4/packages/views/sql/postgresql/views-procs.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/views/sql/postgresql/views-procs.sql,v
diff -u -N -r1.3 -r1.4
--- openacs-4/packages/views/sql/postgresql/views-procs.sql 1 Aug 2007 08:59:56 -0000 1.3
+++ openacs-4/packages/views/sql/postgresql/views-procs.sql 2 Nov 2013 16:15:13 -0000 1.4
@@ -12,12 +12,18 @@
-- License. Full text of the license is available from the GNU Project:
-- http://www.fsf.org/copyleft/gpl.html
-create or replace function views__record_view (integer, integer) returns integer as '
-declare
- p_object_id alias for $1;
- p_viewer_id alias for $2;
+
+
+--
+-- procedure views__record_view/2
+--
+CREATE OR REPLACE FUNCTION views__record_view(
+ p_object_id integer,
+ p_viewer_id integer
+) RETURNS integer AS $$
+DECLARE
v_views views_views.views_count%TYPE;
-begin
+BEGIN
select views_count into v_views from views_views where object_id = p_object_id and viewer_id = p_viewer_id;
if v_views is null then
@@ -32,19 +38,26 @@
end if;
return v_views + 1;
-end;' language 'plpgsql';
+END;
+$$ LANGUAGE plpgsql;
comment on function views__record_view(integer, integer) is 'update the view count of object_id for viewer viewer_id, returns view count';
select define_function_args('views__record_view','object_id,viewer_id');
-create or replace function views_by_type__record_view (integer, integer, varchar) returns integer as '
-declare
- p_object_id alias for $1;
- p_viewer_id alias for $2;
- p_view_type alias for $3;
+
+
+--
+-- procedure views_by_type__record_view/3
+--
+CREATE OR REPLACE FUNCTION views_by_type__record_view(
+ p_object_id integer,
+ p_viewer_id integer,
+ p_view_type varchar
+) RETURNS integer AS $$
+DECLARE
v_views views_views.views_count%TYPE;
-begin
+BEGIN
select views_count into v_views from views_by_type where object_id = p_object_id and viewer_id = p_viewer_id and view_type = p_view_type;
if v_views is null then
@@ -60,7 +73,8 @@
end if;
return v_views + 1;
-end;' language 'plpgsql';
+END;
+$$ LANGUAGE plpgsql;
comment on function views_by_type__record_view(integer, integer, varchar) is 'update the view by type count of object_id for viewer viewer_id, returns view count';
Index: openacs-4/packages/views/sql/postgresql/views-triggers.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/views/sql/postgresql/views-triggers.sql,v
diff -u -N -r1.3 -r1.4
--- openacs-4/packages/views/sql/postgresql/views-triggers.sql 1 Aug 2007 08:59:56 -0000 1.3
+++ openacs-4/packages/views/sql/postgresql/views-triggers.sql 2 Nov 2013 16:15:13 -0000 1.4
@@ -12,8 +12,8 @@
-- License. Full text of the license is available from the GNU Project:
-- http://www.fsf.org/copyleft/gpl.html
-create function views_views_ins_tr () returns opaque as '
-begin
+CREATE OR REPLACE FUNCTION views_views_ins_tr () RETURNS trigger AS $$
+BEGIN
if not exists (select 1 from view_aggregates where object_id = new.object_id) then
INSERT INTO view_aggregates (object_id,views_count,unique_views,last_viewed)
VALUES (new.object_id,1,1,now());
@@ -24,21 +24,23 @@
end if;
return new;
-end;' language 'plpgsql';
+END;
+$$ LANGUAGE plpgsql;
create trigger views_views_ins_tr
after insert on views_views
for each row
execute procedure views_views_ins_tr();
-create function views_views_upd_tr () returns opaque as '
-begin
+CREATE OR REPLACE FUNCTION views_views_upd_tr () RETURNS trigger AS $$
+BEGIN
UPDATE view_aggregates
SET views_count = views_count + 1, last_viewed = now()
WHERE object_id = new.object_id;
return new;
-end;' language 'plpgsql';
+END;
+$$ LANGUAGE plpgsql;
create trigger views_views_upd_tr
after update on views_views
@@ -47,8 +49,8 @@
-- XXXJCD: Should there be a delete trigger?
-create or replace function views_by_type_ins_tr () returns opaque as '
-begin
+CREATE OR REPLACE FUNCTION views_by_type_ins_tr () RETURNS trigger AS $$
+BEGIN
if not exists (select 1 from view_aggregates_by_type where object_id = new.object_id and view_type = new.view_type) then
INSERT INTO view_aggregates_by_type (object_id,view_type,views_count,unique_views,last_viewed)
VALUES (new.object_id,new.view_type,1,1,now());
@@ -60,22 +62,24 @@
end if;
return new;
-end;' language 'plpgsql';
+END;
+$$ LANGUAGE plpgsql;
create trigger views_by_type_ins_tr
after insert on views_by_type
for each row
execute procedure views_by_type_ins_tr();
-create or replace function views_by_type_upd_tr () returns opaque as '
-begin
+CREATE OR REPLACE FUNCTION views_by_type_upd_tr () RETURNS trigger AS $$
+BEGIN
UPDATE view_aggregates_by_type
SET views_count = views_count + 1, last_viewed = now()
WHERE object_id = new.object_id
AND view_type = new.view_type;
return new;
-end;' language 'plpgsql';
+END;
+$$ LANGUAGE plpgsql;
create trigger views_by_type_upd_tr
after update on views_by_type
Index: openacs-4/packages/views/sql/postgresql/upgrade/upgrade-0.1d-0.1d2.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/views/sql/postgresql/upgrade/upgrade-0.1d-0.1d2.sql,v
diff -u -N -r1.1 -r1.2
--- openacs-4/packages/views/sql/postgresql/upgrade/upgrade-0.1d-0.1d2.sql 23 Jul 2007 05:25:10 -0000 1.1
+++ openacs-4/packages/views/sql/postgresql/upgrade/upgrade-0.1d-0.1d2.sql 2 Nov 2013 16:15:13 -0000 1.2
@@ -44,13 +44,19 @@
';
-create or replace function views_by_type__record_view (integer, integer, varchar) returns integer as '
-declare
- p_object_id alias for $1;
- p_viewer_id alias for $2;
- p_type alias for $3;
+
+
+--
+-- procedure views_by_type__record_view/3
+--
+CREATE OR REPLACE FUNCTION views_by_type__record_view(
+ p_object_id integer,
+ p_viewer_id integer,
+ p_type varchar
+) RETURNS integer AS $$
+DECLARE
v_views views.views%TYPE;
-begin
+BEGIN
select views into v_views from views_by_type where object_id = p_object_id and viewer_id = p_viewer_id and type = p_type;
if v_views is null then
@@ -66,14 +72,15 @@
end if;
return v_views + 1;
-end;' language 'plpgsql';
+END;
+$$ LANGUAGE plpgsql;
comment on function views_by_type__record_view(integer, integer, varchar) is 'update the view by type count of object_id for viewer viewer_id, returns view count';
select define_function_args('views_by_type__record_view','object_id,viewer_id,type');
-create function views_by_type_ins_tr () returns opaque as '
-begin
+CREATE OR REPLACE FUNCTION views_by_type_ins_tr () RETURNS trigger AS $$
+BEGIN
if not exists (select 1 from view_aggregates_by_type where object_id = new.object_id and type = new.type) then
INSERT INTO view_aggregates_by_type (object_id,type,views,unique_views,last_viewed)
VALUES (new.object_id,new.type,1,1,now());
@@ -85,22 +92,24 @@
end if;
return new;
-end;' language 'plpgsql';
+END;
+$$ LANGUAGE plpgsql;
create trigger views_by_type_ins_tr
after insert on views_by_type
for each row
execute procedure views_by_type_ins_tr();
-create function views_by_type_upd_tr () returns opaque as '
-begin
+CREATE OR REPLACE FUNCTION views_by_type_upd_tr () RETURNS trigger AS $$
+BEGIN
UPDATE view_aggregates_by_type
SET views = views + 1, last_viewed = now()
WHERE object_id = new.object_id
AND type = new.type;
return new;
-end;' language 'plpgsql';
+END;
+$$ LANGUAGE plpgsql;
create trigger views_by_type_upd_tr
after update on views_by_type
Index: openacs-4/packages/views/sql/postgresql/upgrade/upgrade-0.1d2-0.1d3.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/views/sql/postgresql/upgrade/upgrade-0.1d2-0.1d3.sql,v
diff -u -N -r1.1 -r1.2
--- openacs-4/packages/views/sql/postgresql/upgrade/upgrade-0.1d2-0.1d3.sql 1 Aug 2007 08:59:57 -0000 1.1
+++ openacs-4/packages/views/sql/postgresql/upgrade/upgrade-0.1d2-0.1d3.sql 2 Nov 2013 16:15:13 -0000 1.2
@@ -34,12 +34,21 @@
--Modify function with new table and column names.
-create or replace function views__record_view (integer, integer) returns integer as '
-declare
- p_object_id alias for $1;
- p_viewer_id alias for $2;
+
+
+-- added
+select define_function_args('views__record_view','object_id,viewer_id');
+
+--
+-- procedure views__record_view/2
+--
+CREATE OR REPLACE FUNCTION views__record_view(
+ p_object_id integer,
+ p_viewer_id integer
+) RETURNS integer AS $$
+DECLARE
v_views views_views.views_count%TYPE;
-begin
+BEGIN
select views_count into v_views from views_views where object_id = p_object_id and viewer_id = p_viewer_id;
if v_views is null then
@@ -54,12 +63,13 @@
end if;
return v_views + 1;
-end;' language 'plpgsql';
+END;
+$$ LANGUAGE plpgsql;
--Create new triggers with new names
-create or replace function views_views_ins_tr () returns opaque as '
-begin
+CREATE OR REPLACE FUNCTION views_views_ins_tr () RETURNS trigger AS $$
+BEGIN
if not exists (select 1 from view_aggregates where object_id = new.object_id) then
INSERT INTO view_aggregates (object_id,views_count,unique_views,last_viewed)
VALUES (new.object_id,1,1,now());
@@ -70,35 +80,43 @@
end if;
return new;
-end;' language 'plpgsql';
+END;
+$$ LANGUAGE plpgsql;
create trigger views_views_ins_tr
after insert on views_views
for each row
execute procedure views_views_ins_tr();
-create or replace function views_views_upd_tr () returns opaque as '
-begin
+CREATE OR REPLACE FUNCTION views_views_upd_tr () RETURNS trigger AS $$
+BEGIN
UPDATE view_aggregates
SET views_count = views_count + 1, last_viewed = now()
WHERE object_id = new.object_id;
return new;
-end;' language 'plpgsql';
+END;
+$$ LANGUAGE plpgsql;
create trigger views_views_upd_tr
after update on views_views
for each row
execute procedure views_views_upd_tr();
-create or replace function views_by_type__record_view (integer, integer, varchar) returns integer as '
-declare
- p_object_id alias for $1;
- p_viewer_id alias for $2;
- p_view_type alias for $3;
+
+
+--
+-- procedure views_by_type__record_view/3
+--
+CREATE OR REPLACE FUNCTION views_by_type__record_view(
+ p_object_id integer,
+ p_viewer_id integer,
+ p_view_type varchar
+) RETURNS integer AS $$
+DECLARE
v_views views_views.views_count%TYPE;
-begin
+BEGIN
select views_count into v_views from views_by_type where object_id = p_object_id and viewer_id = p_viewer_id and view_type = p_view_type;
if v_views is null then
@@ -114,14 +132,15 @@
end if;
return v_views + 1;
-end;' language 'plpgsql';
+END;
+$$ LANGUAGE plpgsql;
comment on function views_by_type__record_view(integer, integer, varchar) is 'update the view by type count of object_id for viewer viewer_id, returns view count';
select define_function_args('views_by_type__record_view','object_id,viewer_id,view_type');
-create or replace function views_by_type_ins_tr () returns opaque as '
-begin
+CREATE OR REPLACE FUNCTION views_by_type_ins_tr () RETURNS trigger AS $$
+BEGIN
if not exists (select 1 from view_aggregates_by_type where object_id = new.object_id and view_type = new.view_type) then
INSERT INTO view_aggregates_by_type (object_id,view_type,views_count,unique_views,last_viewed)
VALUES (new.object_id,new.view_type,1,1,now());
@@ -133,22 +152,24 @@
end if;
return new;
-end;' language 'plpgsql';
+END;
+$$ LANGUAGE plpgsql;
create trigger views_by_type_ins_tr
after insert on views_by_type
for each row
execute procedure views_by_type_ins_tr();
-create or replace function views_by_type_upd_tr () returns opaque as '
-begin
+CREATE OR REPLACE FUNCTION views_by_type_upd_tr () RETURNS trigger AS $$
+BEGIN
UPDATE view_aggregates_by_type
SET views_count = views_count + 1, last_viewed = now()
WHERE object_id = new.object_id
AND view_type = new.view_type;
return new;
-end;' language 'plpgsql';
+END;
+$$ LANGUAGE plpgsql;
create trigger views_by_type_upd_tr
after update on views_by_type
Index: openacs-4/packages/views/tcl/test/views-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/views/tcl/test/views-procs.tcl,v
diff -u -N -r1.1 -r1.2
--- openacs-4/packages/views/tcl/test/views-procs.tcl 2 Aug 2007 08:33:39 -0000 1.1
+++ openacs-4/packages/views/tcl/test/views-procs.tcl 2 Nov 2013 16:15:13 -0000 1.2
@@ -18,32 +18,32 @@
set object_id_list [db_list get_object_id_list "select ao.object_id from acs_objects ao left outer join (select object_id from views_views where viewer_id != :viewer_id) vt on ao.object_id = vt.object_id"]
set object_id [lindex [util::randomize_list $object_id_list] 0]
- aa_false "User view object_id" [expr [views::viewed_p -object_id $object_id -user_id 0] > 0]
+ aa_false "User view object_id" [expr {[views::viewed_p -object_id $object_id -user_id 0] > 0}]
aa_log "User_id is $viewer_id, object is $object_id"
views::record_view -object_id $object_id -viewer_id $viewer_id
set count_record [db_string count_record "select count(*) from views_views where object_id = :object_id and viewer_id = :viewer_id" -default 0]
- aa_true "Record add" [expr $count_record > 0]
+ aa_true "Record add" [expr {$count_record > 0}]
set count_views [db_string count_views "select views_count from views_views where object_id = :object_id and viewer_id = :viewer_id" -default 0]
views::record_view -object_id $object_id -viewer_id $viewer_id
#Update count views
set count_record [db_string count_record "select count(*) from views_views where object_id = :object_id and viewer_id = :viewer_id" -default 0]
- aa_true "Update record but don't insert new row" [expr $count_record == 1]
+ aa_true "Update record but don't insert new row" [expr {$count_record == 1}]
set count_views2 [db_string count_views2 "select views_count from views_views where object_id = :object_id and viewer_id = :viewer_id" -default 0]
- aa_true "Count_view is updated" [expr $count_views2 > $count_views]
+ aa_true "Count_view is updated" [expr {$count_views2 > $count_views}]
set get [views::get -object_id $object_id]
aa_log "Return of function views::get $get"
- aa_true "User view object_id" [expr [views::viewed_p -object_id $object_id -user_id $viewer_id] > 0]
+ aa_true "User view object_id" [expr {[views::viewed_p -object_id $object_id -user_id $viewer_id] > 0}]
set all_views_count [db_string count_views_views "select sum(views_count) from views_views where object_id = :object_id"]
set view_count_aggregates [db_string get_views_count "select views_count from view_aggregates where object_id = :object_id"]
@@ -70,32 +70,32 @@
set type test
- aa_false "User has viewed object_id" [expr [views::viewed_p -object_id $object_id -user_id $viewer_id -type $type] > 0]
+ aa_false "User has viewed object_id" [expr {[views::viewed_p -object_id $object_id -user_id $viewer_id -type $type] > 0}]
aa_log "User_id is $viewer_id, object is $object_id and type $type"
views::record_view -object_id $object_id -viewer_id $viewer_id -type $type
set count_record [db_string count_record "select count(*) from views_by_type where object_id = :object_id and viewer_id = :viewer_id" -default 0]
- aa_true "Record add" [expr $count_record > 0]
+ aa_true "Record add" [expr {$count_record > 0}]
set count_views [db_string count_views "select views_count from views_by_type where object_id = :object_id and viewer_id = :viewer_id" -default 0]
views::record_view -object_id $object_id -viewer_id $viewer_id -type $type
#Update count views
set count_record [db_string count_record "select count(*) from views_by_type where object_id = :object_id and viewer_id = :viewer_id" -default 0]
- aa_true "Update record but don't insert new row" [expr $count_record == 1]
+ aa_true "Update record but don't insert new row" [expr {$count_record == 1}]
set count_views2 [db_string count_views2 "select views_count from views_by_type where object_id = :object_id and viewer_id = :viewer_id" -default 0]
- aa_true "Count_view is updated" [expr $count_views2 > $count_views]
+ aa_true "Count_view is updated" [expr {$count_views2 > $count_views}]
set get [views::get -object_id $object_id]
aa_log "Return of function views::get $get"
- aa_true "User has viewed object_id" [expr [views::viewed_p -object_id $object_id -user_id $viewer_id -type $type] > 0]
+ aa_true "User has viewed object_id" [expr {[views::viewed_p -object_id $object_id -user_id $viewer_id -type $type] > 0}]
set all_views_count [db_string count_views_views "select sum(views_count) from views_by_type where object_id = :object_id and view_type=:type"]
set view_count_aggregates [db_string get_views_count "select views_count from view_aggregates_by_type where object_id = :object_id and view_type=:type"]
aa_equals "views_count on view_aggregates is equal to sum views_count on views_views" $view_count_aggregates $all_views_count