drop package carrier;
/
create or replace package carrier is
/* procedure AddVisitor(host in char,address in char,user in char,name char);
procedure showvisitors;
procedure clearvisitors;
procedure clear_action(userid in char,passwd in char,clear in number);*/
--procedure bom_admin(userid in varchar2,passwd in varchar2);
procedure bom_admin_home(uid varchar2);
procedure bom_admin_index;
procedure bom_admin(uid in varchar2,passwd in varchar2);
function validation(uid in varchar2,passwd in varchar2,grp integer) return boolean;
function validation(uid in varchar2,grp integer) return boolean;
procedure insert_user_index(userid in varchar2);
procedure insert_user(userid in varchar2);
procedure insert_u(uid varchar2,email varchar2, passwd varchar2,name varchar2,grp integer,host varchar2,url varchar2,me varchar2);
procedure all_user(uid in varchar2);
procedure password_typein(url varchar2);
procedure passwd_action(me varchar2,passwd varchar2,uid varchar2);
procedure passwd(me varchar2,uid varchar2);
procedure passwd_action1(old varchar2,p1 varchar2,p2 varchar2,uid varchar2);
procedure passwd1(uid varchar2);
procedure demo_user;
procedure delete_user(me varchar2) ;
procedure delete_user_action(me varchar2,uid varchar2);
procedure insert_bom(me varchar2);
procedure insert_bom_action(me varchar2,p_no in varchar2,pca in varchar2,opca in varchar2,type in varchar2,family in varchar2,
pitem in char,cost in number,rlevel in char,mm in char,dd in char,yy in char,d in varchar2) ;
procedure all_bom(uid in varchar2,op integer);
procedure move_pending(uid in varchar2,p varchar2);
procedure move_pending(uid in varchar2);
procedure change(uid in varchar2,p varchar2,mm in char,dd in char,yy in char);
procedure move(uid in varchar2,p varchar2);
procedure notyet(uid varchar2);
procedure notyet;
procedure move_prod(uid varchar2) ;
procedure bom_search_index;
procedure bom_search;
procedure bom_search(op integer,fid varchar2);
procedure search(typein varchar2,op integer,fid varchar2);
procedure all_bom_prod;
procedure bom_list(p varchar2,pca varchar2,time varchar2,f varchar2,c number,t varchar2,i varchar2,r varchar2,
d varchar2,ctime date);
procedure by_pca(fid varchar2);
procedure search_button(op integer,fid varchar2);
procedure by_pca(fid varchar2,p varchar2) ;
procedure keyword(p varchar2,fid varchar2);
procedure day(str varchar2,result out date,tag in out char) ;
procedure date_search;
procedure parse_date(typein varchar2) ;
function tr(name varchar2) return varchar2;
function th(name varchar2) return varchar2;
function td(name varchar2) return varchar2;
cgi_bin constant varchar2(60) := '/cgi-bin/demo/wow/';
username constant varchar2(10) := 'carrier';
password constant varchar2(10) := 'demo';
client varchar2(30) := owa.remote_addr;
time_out number(8,5) := 5./1440.;
help_page constant varchar2(100) := htf.url('http://naos.npac.syr.edu:1963/demo/help.html','Help');
end;
/
create or replace package body carrier is
total_visitors number(7);
total number(8);
hh_time date;
h_host users.host%TYPE;
h_grp users.group_id%TYPE;
one users%ROWTYPE;
two bom%ROWTYPE;
h_time varchar2(50) := '
';
h_family bom.p_family%TYPE := '
';
h_cost bom.s_cost%TYPE;
h_desc varchar2(2000);
h_status varchar2(30):= 'Production (most recent)';
h_caption varchar2(600);
-- for date
TYPE wordstype IS TABLE OF varchar2(50) INDEX BY BINARY_INTEGER;
word_tab wordstype;
w_count BINARY_INTEGER;
date_tag char(1);
function td(name varchar2) return varchar2 is
begin
return ('
'||name||' | ');
end;
function th(name varchar2) return varchar2 is
begin
return (''||name||' | ');
end;
function tr(name varchar2) return varchar2 is
begin
return (''||name||'
');
end;
procedure bom_admin_home(uid varchar2) is
begin
select group_id into h_grp from users where userid=uid;
htp.p('BoM Document and User Management and Control');
htp.p('Operation | Description | Authorized User |
');
if (h_grp = 5) then
htp.p(tr(td(htf.url(cgi_bin||'carrier.insert_user_index?userid='||uid,
'Insert a BoM user'))||td('Insert a new BoM user into the system')||
td(htf.url('/carrier/users.html','BoM DB Administrator'))));
htp.p(tr(td(htf.url(cgi_bin||'carrier.delete_user?me='||uid,
'Delete a BoM user'))||td('Remove an existingBoM user from the system')||
td(htf.url('/carrier/users.html','BoM DB Administrator'))));
htp.p(''||td(htf.url(cgi_bin||'carrier.all_user?uid='||uid,
'List Users/Change Passwords')));
htp.p(td('Show all BoM users or change their passwords in the system')||
td(htf.url('/carrier/users.html','BoM DB Administrator'))||'
');
end if;
if (h_grp >= 1) then
htp.p(''||td(htf.url(cgi_bin||'carrier.all_bom?uid='||uid||'&op=1',
'List All BoM document in production')));
htp.p(td('Display all BoM production document, including most recent and all the previous revisions')||
td(htf.url('carrier/users.html','Produciton BoM User II and III'))||'
');
end if;
if (h_grp <= 2 or h_grp >= 5 ) then
htp.p(''||td(htf.url(cgi_bin||'carrier.move_prod?uid='||uid,
'Move Production BoM''s between Divisions')));
htp.p(td('Move BoM ducument owned by one division to another')||
td(htf.url('carrier/users.html','Produciton BoM User III'))||'
');
end if;
if (h_grp >= 3) then
htp.p(''||td(htf.url(cgi_bin||'carrier.all_bom?uid='||uid||'&op=0',
'List all pending BoM document')));
htp.p(td('Display all pending BoM''s and check their effective dates')||
td(htf.url('carrier/users.html','Pending BoM User II and III'))||'
');
htp.p(''||td(htf.url(cgi_bin||'carrier.insert_bom?me='||uid,
'Insert a BoM document')));
htp.p(td('Insert a new BoM document into the pending document database')||
td(htf.url('/carrier/users.html','Pending BoM User II and III'))||'
');
htp.p(''||td(htf.url(cgi_bin||'carrier.notyet?uid='||uid,
'Delete a pending BoM document')));
htp.p(td('Delete an existing BoM document from the pending database')||
td(htf.url('carrier/users.html','Pending BoM User II and III'))||'
');
htp.p(''||td(htf.url(cgi_bin||'carrier.notyet?uid='||uid,
'Move a pending BoM document to production status')));
htp.p(td('change a pending BoM status to production after the effective date is reached')||
td(htf.url('carrier/users.html','Pending BoM User II and III'))||'
');
end if;
if (h_grp >= 4) then
htp.p(''||td(htf.url(cgi_bin||'carrier.assign_pending?uid='||uid,
'change/assign an effective date to a pending BoM document')));
htp.p(td('assign or change the effective date for a pending BoM to be moved to production')||
td(htf.url('carrier/users.html','Pending BoM User III'))||'
');
end if;
htp.p(''||td(htf.url(cgi_bin||'carrier.passwd1?uid='||uid,
'Change your password'))||td('Create a new password for yourself'));
htp.p(td(htf.url('carrier/users.html','Any registered BoM user'))||'
');
htp.p('
');
wow.sig;
end;
procedure bom_admin_index is
begin
htp.p('');
htp.p('This page is for authorized user only.
');
htp.p('');
demo_user;
end;
procedure demo_user is
begin
htp.p('Demo Users');
htp.p(tr(th('Userid/Password')||th('Privilege')));
htp.p(tr(td(' root/demo')||td(' BoM DB Admin.')));
htp.p(tr(td(' user2/user2')||td(' BoM Production User II')));
htp.p(tr(td(' user3/user3')||td(' BoM Production User III')));
htp.p(tr(td(' user4/user4 ')||td(' BoM Pending User II')));
htp.p(tr(td(' user5/user5')||td(' BoM Pending User III')));
htp.p('
');
end;
procedure bom_admin(uid in varchar2,passwd in varchar2) is
begin
htp.p('');
if (validation(uid,passwd,1)) then
bom_admin_home(uid);
else
bom_admin_index;
end if;
end;
procedure password_typein(url varchar2) is
begin
htp.p('This operation is for authorized BoM DB admin. only.
');
htp.p('');
demo_user;
end;
procedure insert_user_index(userid in varchar2) is
begin
--htp.p('');
if (validation(userid,5)) then
insert_user(userid);
end if;
end;
function validation(uid in varchar2,passwd in varchar2,grp integer) return boolean is
cursor cuser(uid varchar2,pwd varchar2) is select group_id from users
where userid=uid and password=pwd;
h_grp integer;
begin
open cuser(uid,passwd);
fetch cuser into h_grp;
if (cuser%NOTFOUND) then
close cuser;
htp.p('');
htp.p('You have the wrong !');
htp.p('Try again.');
return false;
elsif ((h_grp=4) and (h_host!=client))) then
close cuser;
htp.p('');
htp.p('You to perform this operation.');
return false;
end if;
close cuser;
update users set time=sysdate where userid=uid;
update users set host=client where userid=uid and group_id >=4;
commit;
return true;
end;
function validation(uid in varchar2,grp integer) return boolean is
cursor cuser(u varchar2,g integer) is select time,host from users
where userid=u and group_id>=g;
begin
open cuser(uid,grp);
fetch cuser into hh_time,h_host;
if ((cuser%NOTFOUND) or (h_host != client)) then
close cuser;
htp.p('');
htp.p('You to perform this operation.');
htp.p('Go back.
');
return false;
elsif ((sysdate - hh_time) > time_out) then -- 10 minutes
close cuser;
htp.p('');
htp.p('Your login time is out. Last login: '||to_char(hh_time,'mm/dd/yy hh24:mi')||' EST.');
htp.p('Re-login again.
');
bom_admin_index;
return false;
end if;
close cuser;
update users set time=sysdate where userid=uid;
commit;
return true;
end;
procedure insert_user(userid in varchar2) is
begin
htp.p('');
htp.p('Insert a new BoM user
');
htp.p('
');
all_user(userid);
wow.sig;
end;
procedure all_user(uid varchar2) is
cursor cuser is select * from users order by userid;
h_time varchar2(20) := '
';
h_host users.host%TYPE := '
';
h_url users.url%TYPE;
h_grp varchar2(20) := 'Production User II';
begin
if (not validation(uid,5)) then
return;
end if;
htp.p('');
htp.p('
');
select count(*) into total from users;
if (total > 0 ) then
htp.p('There are total '||htf.bold(total)||' users.');
htp.p('');
htp.p('Current BoM users in the system');
htp.p(tr(th('User Id')||th('Name')||th('User Group')||th('Hostname')||th('URL')||th('Last login')));
open cuser;
loop
fetch cuser into one;
exit when cuser%NOTFOUND;
if (one.group_id = 2) then
h_grp := 'Production User III';
elsif (one.group_id = 3) then
h_grp := 'Pending User II';
elsif (one.group_id = 4) then
h_grp := 'Pending User III';
elsif (one.group_id = 5) then
h_grp := 'BoM DB Administrator';
end if;
if (one.url IS NULL or one.url like '%N/A%') then
h_url := '
';
else
h_url := htf.url(one.url,one.url);
end if;
if (one.time IS NOT NULL) then
h_time := to_char(one.time,'mm/dd/yy, hh24:mi')||' EST';
else
h_time := '
';
end if;
if (one.group_id >= 3 and one.host IS NOT NULL) then
h_host := one.host;
else
h_host := '
';
end if;
htp.p(tr(td(htf.url(cgi_bin||'carrier.passwd?me='||uid||'&uid='||one.userid,one.userid))||
td(one.name)||td(h_grp)||td(h_host)||td(h_url)||td(h_time)));
end loop;
close cuser;
htp.p('
');
else
htp.p('No user for BoM system yet.');
end if;
end;
procedure passwd(me varchar2,uid varchar2) is
begin
if (validation(me,5)) then
htp.p('
');
select * into one from users where userid = uid;
htp.p('');
wow.sig;
end if;
end;
procedure passwd1(uid varchar2) is
begin
if (validation(uid,1)) then
htp.p('
');
select * into one from users where userid = uid;
htp.p('');
wow.sig;
end if;
end;
procedure passwd_action1(old varchar2,p1 varchar2,p2 varchar2,uid varchar2) is
begin
if (validation(uid,1)) then
select * into one from users where userid = uid;
if (one.password != old or (p1!=p2)) then
htp.p('Wrong password. Try again.
');
passwd1(uid);
return;
end if;
htp.p('
');
update users set password=p1 where userid=uid;
commit;
htp.p('Your password has been changed.
');
bom_admin_home(uid);
end if;
end;
procedure passwd_action(me varchar2,passwd varchar2,uid varchar2) is
begin
if (validation(me,5)) then
htp.p('
');
update users set password=passwd where userid=uid;
commit;
htp.p(htf.bold(uid)||' password has been changed.
');
bom_admin_home(uid);
end if;
end;
procedure insert_u(uid varchar2,email varchar2, passwd varchar2,name varchar2,grp integer,host varchar2,url varchar2,me varchar2) is
cursor cuser(u varchar2) is select * from users where userid=u;
uu users%ROWTYPE;
begin
if ((uid||passwd||name) IS NULL) then
htp.p('The field '||htf.bold('User Id/Name/Password')||' must not be blank.');
htp.p('Go back and correct it. Try again.');
return;
end if;
if (grp >= 4 and host IS NULL) then
htp.p('The field '||htf.bold('Host')||' must not be blank.');
htp.p('
Go back and correct it. Try again.');
return;
end if;
open cuser(uid);
fetch cuser into uu;
if (cuser%FOUND) then
htp.p('There is already a user with the userid = '||htf.bold(uid)||' in the system.');
htp.p('
Go back and correct it. Try again.');
return;
else
insert into users values(uid,passwd,email,name,grp,host,sysdate,url,null,null);
COMMIT;
end if;
htp.p('
The new user '||htf.bold(uid)||' ('||name||') has been sucessfully added into the BoM user list.');
htp.p('
You may send an email to inform '||email||' of this new account.');
all_user(me);
wow.sig;
end;
procedure delete_user(me varchar2) is
cursor cuser is select * from users where group_id <= 5 order by userid;
begin
if (validation(me,5)) then
htp.p('
');
select count(*) into total from users;
htp.p('Total '||total||' BoM users. Which one to remove ?:
');
open cuser;
htp.p('');
htp.p('