From c413ca04ab09ac5c4c0dabef3b9cf91b207273db Mon Sep 17 00:00:00 2001 From: ojullien Date: Wed, 20 Feb 2019 18:59:56 +0100 Subject: [PATCH] 2010.08.26 Signed-off-by: ojullien --- doc/model/pbraiders.mwb | Bin 0 -> 14396 bytes doc/model/report/basic.css | 429 ++ doc/model/report/coated.css | 428 ++ doc/model/report/images/Logo.gif | Bin 0 -> 3850 bytes doc/model/report/images/back.png | Bin 0 -> 424 bytes doc/model/report/images/next.png | Bin 0 -> 453 bytes doc/model/report/images/preview_coated.png | Bin 0 -> 14726 bytes doc/model/report/images/preview_main.png | Bin 0 -> 14916 bytes doc/model/report/images/title-background.png | Bin 0 -> 6461 bytes doc/model/report/index.html | 1 + doc/model/report/overview.html | 87 + doc/model/report/overview_list.html | 52 + doc/model/report/routine_details.html | 16 + doc/model/report/table_details.html | 1564 ++++++ doc/model/report/table_details_list.html | 194 + doc/model/report/table_element_details.html | 4952 +++++++++++++++++ doc/model/report/top.html | 17 + doc/model/report/view_details.html | 16 + src/config-sample.php | 4 + src/contact.php | 305 +- src/contactdelete.php | 233 +- src/contactnew.php | 149 +- src/contacts.php | 259 +- src/css/mobile.css | 23 +- src/css/mobilize.css | 12 +- src/css/{print.css => printp.css} | 19 +- src/css/prints.css | 28 + src/css/style.css | 23 +- src/day.php | 372 +- src/dayprint.php | 167 +- src/fd.php | 92 + src/graphs.php | 116 + src/graphs/agesyearcount.php | 140 + src/graphs/arial.ttf | Bin 0 -> 311636 bytes src/graphs/arrhesyearcount.php | 140 + src/graphs/contactsmonthcount.php | 140 + src/graphs/contactsyearcount.php | 136 + src/graphs/rentsmonthcount.php | 140 + src/graphs/rentsmonthsum.php | 139 + src/graphs/rentsyearcount.php | 137 + src/graphs/rentsyearsum.php | 136 + src/images/pbrmid.png | Bin 2984 -> 8794 bytes src/images/pbrmin.jpg | Bin 2738 -> 0 bytes .../{initdb.php => authdb.php} | 25 +- src/includes-install/cnewuser.php | 269 - .../init.php => includes-install/context.php} | 56 +- src/includes-install/database/data-config.sql | 5 +- src/includes-install/database/schema.sql | 130 +- .../{installdb.php => install.php} | 30 +- .../{displayinstall.php => welcome.php} | 33 +- src/includes/class/caction.php | 124 + src/includes/class/cauth.php | 375 ++ src/includes/class/ccontact.php | 342 +- src/includes/class/ccookie.php | 126 +- src/includes/class/ccsv.php | 237 +- src/includes/class/cdate.php | 284 +- src/includes/class/cdfmgmt.php | 168 + src/includes/class/cerrorlist.php | 24 +- src/includes/class/cgbar.php | 287 + src/includes/class/cgline.php | 233 + src/includes/class/cgpie.php | 289 + src/includes/class/cgraph.php | 561 ++ src/includes/class/cheader.php | 165 +- src/includes/class/clog.php | 228 +- src/includes/class/cmaxrentpermonthlist.php | 248 + src/includes/class/cnewuser.php | 380 -- src/includes/class/coption.php | 190 + src/includes/class/cpaging.php | 196 +- .../class/{csession.php => cphpsession.php} | 140 +- src/includes/class/crent.php | 308 +- src/includes/class/csource.php | 181 + src/includes/class/cuser.php | 432 +- src/includes/db/class/cdb.php | 258 - src/includes/db/class/cdblayer.php | 392 ++ src/includes/db/function-nosp/contactadd.php | 122 - src/includes/db/function-nosp/contactdel.php | 148 - src/includes/db/function-nosp/contactsget.php | 136 - .../db/function-nosp/contactupdate.php | 122 - src/includes/db/function-nosp/rentadd.php | 130 - .../db/function-nosp/rentcontactadd.php | 194 - src/includes/db/function-nosp/rentmax.php | 147 - src/includes/db/function-nosp/rentupdate.php | 163 - src/includes/db/function-nosp/userupdate.php | 122 - .../db/function/agesdistinctcount.php | 112 + .../db/function/arrhesdistinctcount.php | 113 + .../contactadd.php} | 107 +- src/includes/db/function/contactdel.php | 128 + .../contactget.php | 110 +- .../contactrentsget.php | 94 +- .../db/function/contactrentsgetcount.php | 105 + src/includes/db/function/contactsget.php | 174 + .../contactsgetcount.php} | 103 +- .../db/function/contactsgetexport.php | 183 + .../db/function/contactsmonthcount.php | 137 + .../db/function/contactsyearcount.php | 138 + src/includes/db/function/contactupdate.php | 110 + .../dbstatus.php} | 133 +- .../{function-nosp => function}/logsdel.php | 72 +- .../{function-nosp => function}/logsget.php | 80 +- .../logsgetcount.php | 75 +- .../db/{function-nosp => function}/maxget.php | 81 +- .../{function-nosp => function}/maxupdate.php | 89 +- src/includes/db/function/rentadd.php | 127 + src/includes/db/function/rentcontactadd.php | 178 + .../{function-nosp => function}/rentdel.php | 88 +- .../{function-nosp => function}/rentget.php | 129 +- .../rentmax.php} | 114 +- .../{function-nosp => function}/rentsdel.php | 76 +- .../{function-nosp => function}/rentsget.php | 102 +- src/includes/db/function/rentsgetcount.php | 107 + src/includes/db/function/rentsmonthcount.php | 138 + src/includes/db/function/rentsmonthget.php | 109 + src/includes/db/function/rentsmonthsum.php | 140 + src/includes/db/function/rentsyearcount.php | 139 + src/includes/db/function/rentsyearsum.php | 141 + src/includes/db/function/rentupdate.php | 136 + .../sessiondelete.php | 38 +- .../sessionlogoff.php | 36 +- .../sessionset.php | 98 +- .../sessionvalid.php | 84 +- src/includes/db/function/useradd.php | 119 + .../{function-nosp => function}/userget.php | 105 +- .../{function-nosp => function}/usersget.php | 63 +- .../useradd.php => function/userupdate.php} | 87 +- .../{displaycalendar.php => calendar.php} | 209 +- src/includes/display/contact.php | 295 + ...laycontactdelete.php => contactdelete.php} | 66 +- src/includes/display/contactnew.php | 116 + src/includes/display/contacts.php | 287 + ...ycontactsexport.php => contactsexport.php} | 29 +- src/includes/display/day.php | 351 ++ .../{displaydayprint.php => dayprint.php} | 36 +- src/includes/display/displaycontact.php | 286 - src/includes/display/displaycontacts.php | 191 - src/includes/display/displayday.php | 337 -- src/includes/display/displayparameters.php | 153 - src/includes/display/displayrent.php | 227 - src/includes/display/displayrentdelete.php | 84 - src/includes/display/displayselect.php | 194 - src/includes/display/displayusers.php | 210 - .../display/{displayfooter.php => footer.php} | 31 +- src/includes/display/graphs.php | 118 + .../display/{displayheader.php => header.php} | 75 +- .../display/{displaylogin.php => login.php} | 63 +- .../display/{displaylogout.php => logout.php} | 30 +- .../display/{displaylogs.php => logs.php} | 163 +- .../{displaylogsdelete.php => logsdelete.php} | 63 +- src/includes/display/parameters.php | 182 + src/includes/display/rent.php | 226 + ...{displayrentsdelete.php => rentdelete.php} | 71 +- src/includes/display/rentsdelete.php | 67 + src/includes/display/select.php | 233 + src/includes/display/users.php | 219 + src/includes/function/errors.php | 25 +- src/includes/function/export.php | 166 + src/includes/function/functions.php | 192 +- src/includes/function/graphs.php | 340 ++ .../init/{initadmin.php => authadmin.php} | 53 +- .../init/{inituser.php => authuser.php} | 55 +- .../init/{initclean.php => clean.php} | 15 +- .../init.php => includes/init/context.php} | 79 +- src/includes/init/initexport.php | 96 - src/index.php | 198 +- src/install.php | 98 +- src/login.php | 197 +- src/logout.php | 72 +- src/logs.php | 171 +- src/logsdelete.php | 174 +- src/parameters.php | 250 +- src/rent.php | 222 +- src/rentdelete.php | 258 +- src/rentsdelete.php | 209 +- src/select.php | 206 +- src/users.php | 317 +- 174 files changed, 22461 insertions(+), 8708 deletions(-) create mode 100644 doc/model/pbraiders.mwb create mode 100644 doc/model/report/basic.css create mode 100644 doc/model/report/coated.css create mode 100644 doc/model/report/images/Logo.gif create mode 100644 doc/model/report/images/back.png create mode 100644 doc/model/report/images/next.png create mode 100644 doc/model/report/images/preview_coated.png create mode 100644 doc/model/report/images/preview_main.png create mode 100644 doc/model/report/images/title-background.png create mode 100644 doc/model/report/index.html create mode 100644 doc/model/report/overview.html create mode 100644 doc/model/report/overview_list.html create mode 100644 doc/model/report/routine_details.html create mode 100644 doc/model/report/table_details.html create mode 100644 doc/model/report/table_details_list.html create mode 100644 doc/model/report/table_element_details.html create mode 100644 doc/model/report/top.html create mode 100644 doc/model/report/view_details.html rename src/css/{print.css => printp.css} (50%) create mode 100644 src/css/prints.css create mode 100644 src/fd.php create mode 100644 src/graphs.php create mode 100644 src/graphs/agesyearcount.php create mode 100644 src/graphs/arial.ttf create mode 100644 src/graphs/arrhesyearcount.php create mode 100644 src/graphs/contactsmonthcount.php create mode 100644 src/graphs/contactsyearcount.php create mode 100644 src/graphs/rentsmonthcount.php create mode 100644 src/graphs/rentsmonthsum.php create mode 100644 src/graphs/rentsyearcount.php create mode 100644 src/graphs/rentsyearsum.php delete mode 100644 src/images/pbrmin.jpg rename src/includes-install/{initdb.php => authdb.php} (82%) delete mode 100644 src/includes-install/cnewuser.php rename src/{includes/init/init.php => includes-install/context.php} (81%) rename src/includes-install/{installdb.php => install.php} (86%) rename src/includes-install/{displayinstall.php => welcome.php} (80%) create mode 100644 src/includes/class/caction.php create mode 100644 src/includes/class/cauth.php create mode 100644 src/includes/class/cdfmgmt.php create mode 100644 src/includes/class/cgbar.php create mode 100644 src/includes/class/cgline.php create mode 100644 src/includes/class/cgpie.php create mode 100644 src/includes/class/cgraph.php create mode 100644 src/includes/class/cmaxrentpermonthlist.php delete mode 100644 src/includes/class/cnewuser.php create mode 100644 src/includes/class/coption.php rename src/includes/class/{csession.php => cphpsession.php} (56%) create mode 100644 src/includes/class/csource.php delete mode 100644 src/includes/db/class/cdb.php create mode 100644 src/includes/db/class/cdblayer.php delete mode 100644 src/includes/db/function-nosp/contactadd.php delete mode 100644 src/includes/db/function-nosp/contactdel.php delete mode 100644 src/includes/db/function-nosp/contactsget.php delete mode 100644 src/includes/db/function-nosp/contactupdate.php delete mode 100644 src/includes/db/function-nosp/rentadd.php delete mode 100644 src/includes/db/function-nosp/rentcontactadd.php delete mode 100644 src/includes/db/function-nosp/rentmax.php delete mode 100644 src/includes/db/function-nosp/rentupdate.php delete mode 100644 src/includes/db/function-nosp/userupdate.php create mode 100644 src/includes/db/function/agesdistinctcount.php create mode 100644 src/includes/db/function/arrhesdistinctcount.php rename src/includes/db/{function-nosp/rentsgetcount.php => function/contactadd.php} (55%) create mode 100644 src/includes/db/function/contactdel.php rename src/includes/db/{function-nosp => function}/contactget.php (52%) rename src/includes/db/{function-nosp => function}/contactrentsget.php (54%) create mode 100644 src/includes/db/function/contactrentsgetcount.php create mode 100644 src/includes/db/function/contactsget.php rename src/includes/db/{function-nosp/contactrentsgetcount.php => function/contactsgetcount.php} (59%) create mode 100644 src/includes/db/function/contactsgetexport.php create mode 100644 src/includes/db/function/contactsmonthcount.php create mode 100644 src/includes/db/function/contactsyearcount.php create mode 100644 src/includes/db/function/contactupdate.php rename src/includes/db/{function-nosp/rentsmonthget.php => function/dbstatus.php} (52%) rename src/includes/db/{function-nosp => function}/logsdel.php (68%) rename src/includes/db/{function-nosp => function}/logsget.php (61%) rename src/includes/db/{function-nosp => function}/logsgetcount.php (66%) rename src/includes/db/{function-nosp => function}/maxget.php (64%) rename src/includes/db/{function-nosp => function}/maxupdate.php (61%) create mode 100644 src/includes/db/function/rentadd.php create mode 100644 src/includes/db/function/rentcontactadd.php rename src/includes/db/{function-nosp => function}/rentdel.php (59%) rename src/includes/db/{function-nosp => function}/rentget.php (50%) rename src/includes/db/{function-nosp/contactsgetcount.php => function/rentmax.php} (53%) rename src/includes/db/{function-nosp => function}/rentsdel.php (67%) rename src/includes/db/{function-nosp => function}/rentsget.php (51%) create mode 100644 src/includes/db/function/rentsgetcount.php create mode 100644 src/includes/db/function/rentsmonthcount.php create mode 100644 src/includes/db/function/rentsmonthget.php create mode 100644 src/includes/db/function/rentsmonthsum.php create mode 100644 src/includes/db/function/rentsyearcount.php create mode 100644 src/includes/db/function/rentsyearsum.php create mode 100644 src/includes/db/function/rentupdate.php rename src/includes/db/{function-nosp => function}/sessiondelete.php (78%) rename src/includes/db/{function-nosp => function}/sessionlogoff.php (79%) rename src/includes/db/{function-nosp => function}/sessionset.php (61%) rename src/includes/db/{function-nosp => function}/sessionvalid.php (67%) create mode 100644 src/includes/db/function/useradd.php rename src/includes/db/{function-nosp => function}/userget.php (56%) rename src/includes/db/{function-nosp => function}/usersget.php (71%) rename src/includes/db/{function-nosp/useradd.php => function/userupdate.php} (64%) rename src/includes/display/{displaycalendar.php => calendar.php} (61%) create mode 100644 src/includes/display/contact.php rename src/includes/display/{displaycontactdelete.php => contactdelete.php} (62%) create mode 100644 src/includes/display/contactnew.php create mode 100644 src/includes/display/contacts.php rename src/includes/display/{displaycontactsexport.php => contactsexport.php} (73%) create mode 100644 src/includes/display/day.php rename src/includes/display/{displaydayprint.php => dayprint.php} (87%) delete mode 100644 src/includes/display/displaycontact.php delete mode 100644 src/includes/display/displaycontacts.php delete mode 100644 src/includes/display/displayday.php delete mode 100644 src/includes/display/displayparameters.php delete mode 100644 src/includes/display/displayrent.php delete mode 100644 src/includes/display/displayrentdelete.php delete mode 100644 src/includes/display/displayselect.php delete mode 100644 src/includes/display/displayusers.php rename src/includes/display/{displayfooter.php => footer.php} (77%) create mode 100644 src/includes/display/graphs.php rename src/includes/display/{displayheader.php => header.php} (58%) rename src/includes/display/{displaylogin.php => login.php} (65%) rename src/includes/display/{displaylogout.php => logout.php} (74%) rename src/includes/display/{displaylogs.php => logs.php} (54%) rename src/includes/display/{displaylogsdelete.php => logsdelete.php} (64%) create mode 100644 src/includes/display/parameters.php create mode 100644 src/includes/display/rent.php rename src/includes/display/{displayrentsdelete.php => rentdelete.php} (60%) create mode 100644 src/includes/display/rentsdelete.php create mode 100644 src/includes/display/select.php create mode 100644 src/includes/display/users.php create mode 100644 src/includes/function/export.php create mode 100644 src/includes/function/graphs.php rename src/includes/init/{initadmin.php => authadmin.php} (66%) rename src/includes/init/{inituser.php => authuser.php} (65%) rename src/includes/init/{initclean.php => clean.php} (83%) rename src/{includes-install/init.php => includes/init/context.php} (68%) delete mode 100644 src/includes/init/initexport.php diff --git a/doc/model/pbraiders.mwb b/doc/model/pbraiders.mwb new file mode 100644 index 0000000000000000000000000000000000000000..bc5fc80f4b4067f02fb0cc8333031e532cdd0294 GIT binary patch literal 14396 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 literal 0 HcmV?d00001 diff --git a/doc/model/report/images/back.png b/doc/model/report/images/back.png new file mode 100644 index 0000000000000000000000000000000000000000..182e45e0dfdfb3c2ead9e2d5a80380d61375572f GIT binary patch literal 424 zcmV;Z0ayNsP)JIKfX(PdA-Z13Zk3 zjLt4!zFghL#)jd=ix-xJ3}8WGm!_qqb>!sa01f@m@aNAT27P^fVJ0T#|Dc%q_wOGA zh=yPgn}Olr!GoVbfygN)CbqPtr8&^f&W_>l-@kASG6aTUd=L#X41|-Cl0SpIFkf0) zI#5$n6A~?qj9`q+M(3k@A?5t}^MC#Q1EP9*dKfG$%;AckJ$uIR?%g}EZGZlNT=fTT zJIE`)fB*iEoDR}}ctUDwDratP4p>n|MJ2skY#|5j!t@8TWcUcKmQpZSA}E) zUcP)`2?Pw&rcG7X)zv)<6!Jg`1ATpik3K#=e4yBX;eY@B0qK80`agq)h6aO&hdaaH zzkeBi|NhM|fBu4ht5&V50P5`q8(?qm@M-`4eY_w|AVo0z=g%KFhVel(NZrYkCmAM9 zn!NtqyLZtjUSMQo1Y=}2Iv)g-l$036#KZ!D%=s+8e*OA?_3Bly(_uFJ{R_en8+mwm z7(_)y;g*~~f1aVUvy0*5$B)Z^+;mVn_yA<^;|fGKH&=$5ni>Y6MGSN1%w<@yV#Rl$ zZ~+j{0?D%gu>&-*U{6KNEC*h{e#6ty(7<`OLR&!G&J0L|Neci4<9~k v0&?Sk_#>%FIRuF1fVdB9UKsG)2oPWZf~KWu;qq2E00000NkvXXu0mjff#<`I literal 0 HcmV?d00001 diff --git a/doc/model/report/images/preview_coated.png b/doc/model/report/images/preview_coated.png new file mode 100644 index 0000000000000000000000000000000000000000..27876efefbac1cb6dbb0cb42db2496cbe28a8c6b GIT binary patch literal 14726 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 literal 0 HcmV?d00001 diff --git a/doc/model/report/images/preview_main.png b/doc/model/report/images/preview_main.png new file mode 100644 index 0000000000000000000000000000000000000000..b20b251aaf5eb863f6198b0ae4083c5317219589 GIT binary patch literal 14916 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 literal 0 HcmV?d00001 diff --git a/doc/model/report/index.html b/doc/model/report/index.html new file mode 100644 index 0000000..6b03275 --- /dev/null +++ b/doc/model/report/index.html @@ -0,0 +1 @@ + Model Report <body> <p>This browser does not support frames. Please try Mozilla Firefox.</p> </body> \ No newline at end of file diff --git a/doc/model/report/overview.html b/doc/model/report/overview.html new file mode 100644 index 0000000..5aacd77 --- /dev/null +++ b/doc/model/report/overview.html @@ -0,0 +1,87 @@ + + + + + Model Report - Overview + + + + +

Overview

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Document Title: pbraiders
Project Name: pbraiders.com
Author: Olivier JULLIEN
Version: 1.1.0-CAMP
Description: PBRaiders release CAMP
Created: 30-01-2009
Last Updated: 2010-06-15 17:50
Schemata: 1
Tables: 6
Views: 0
Stored Routines: 0
Columns: 54
Indices: 19
Foreign Keys: 5
Triggers: 0
Events: not supported
Report Generated: 2010-06-15 17:50
+ + + diff --git a/doc/model/report/overview_list.html b/doc/model/report/overview_list.html new file mode 100644 index 0000000..21ecc00 --- /dev/null +++ b/doc/model/report/overview_list.html @@ -0,0 +1,52 @@ + + + + + Model Report - Overview + + + + +
+ + + + + + + + + + + + + +
+ + + diff --git a/doc/model/report/routine_details.html b/doc/model/report/routine_details.html new file mode 100644 index 0000000..1d89962 --- /dev/null +++ b/doc/model/report/routine_details.html @@ -0,0 +1,16 @@ + + + + + Model Report - Table Details + + + + + + + + + + + diff --git a/doc/model/report/table_details.html b/doc/model/report/table_details.html new file mode 100644 index 0000000..47ad4f9 --- /dev/null +++ b/doc/model/report/table_details.html @@ -0,0 +1,1564 @@ + + + + + Model Report - Table Details + + + + + + + +
Schema pbrcampdb
(1/1)
+
+ +
+
DDL script
+ + + + +
CREATE SCHEMA IF NOT EXISTS `pbrcampdb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci 
+
+ + + +
Table config
(1/6)
+
+
+ + +
Table Properties
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Average Row Lengthn/aUse Check Sumno
Connection Stringn/aDefault Character Setn/a
Default Collationn/aDelay Key Updatesno
Minimal Row Countn/aMaximum Row Countn/a
Union Tablesn/aMerge Methodn/a
Pack Keysn/aHas Passwordno
Data Directoryn/aIndex Directoryn/a
EngineInnoDBRow Formatn/a
+ + + + +
Columns
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KeyColumn NameDatatypeNot NullDefaultComment
PKnameVARCHAR(45)Yesname of the option
valueVARCHAR(255)Yesvalue of the option
roleTINYINT(1)Yes10minimun credential to modify the value
+ + +
Indices
+ + + + + + + + + + + + + + + + + + + + + + +
Index NameColumnsPrimaryUniqueTypeKindComment
PRIMARY + +
YesNoPRIMARY
+ + + + +
Table Comments
+ + + + +
Contains configuration options
+ + +
DDL script
+ + + + +
CREATE  TABLE IF NOT EXISTS `pbrcampdb`.`config` (
`name` VARCHAR(45) NOT NULL COMMENT 'name of the option' ,
`value` VARCHAR(255) NOT NULL COMMENT 'value of the option' ,
`role` TINYINT(1) UNSIGNED NOT NULL DEFAULT 10 COMMENT 'minimun credential to modify the value' ,
PRIMARY KEY (`name`) )
ENGINE = InnoDB
COMMENT = 'Contains configuration options'
+ +
+ + +
Table user
(2/6)
+
+
+ + +
Table Properties
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Average Row Lengthn/aUse Check Sumno
Connection Stringn/aDefault Character Setn/a
Default Collationn/aDelay Key Updatesno
Minimal Row Countn/aMaximum Row Countn/a
Union Tablesn/aMerge Methodn/a
Pack Keysn/aHas Passwordno
Data Directoryn/aIndex Directoryn/a
EngineInnoDBRow Formatn/a
+ + + + +
Columns
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KeyColumn NameDatatypeNot NullDefaultComment
PKiduserSMALLINTYesunique internal identifier
loginVARCHAR(45)Yesuser name
passwordVARCHAR(40)Yesencrypted user password
registeredDATETIMEYesdate of registration. In server timezone.
roleTINYINT(1)Yes00=user, 10=administrator
last_visitDATETIMENodate of the last visit. In server time zone.
stateTINYINT(1)Yes10:deleted, 1:activated
+ + +
Indices
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Index NameColumnsPrimaryUniqueTypeKindComment
PRIMARY + +
YesNoPRIMARY
ui_user_name + +
NoNoUNIQUE
ix_user_name + +
NoNoINDEX
+ + +
Relationships
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Relationship NameRelationship TypeParent TableChild TableCard.
fk_contact_user_createNon-Identifyingusercontact1:n
fk_contact_user_updateNon-Identifyingusercontact1:n
fk_reservation_user_createNon-Identifyinguserreservation1:n
fk_reservation_user_updateNon-Identifyinguserreservation1:n
+ + + +
Table Comments
+ + + + +
Contains users
+ + +
DDL script
+ + + + +
CREATE  TABLE IF NOT EXISTS `pbrcampdb`.`user` (
`iduser` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'unique internal identifier' ,
`login` VARCHAR(45) NOT NULL COMMENT 'user name' ,
`password` VARCHAR(40) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL COMMENT 'encrypted user password' ,
`registered` DATETIME NOT NULL COMMENT 'date of registration. In server timezone.' ,
`role` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '0=user, 10=administrator' ,
`last_visit` DATETIME NULL COMMENT 'date of the last visit. In server time zone.' ,
`state` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '0:deleted, 1:activated' ,
PRIMARY KEY (`iduser`) ,
UNIQUE INDEX `ui_user_name` (`login` ASC) ,
INDEX `ix_user_name` (`login` ASC) )
ENGINE = InnoDB
COMMENT = 'Contains users'
+ +
+ + +
Table log
(3/6)
+
+
+ + +
Table Properties
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Average Row Lengthn/aUse Check Sumno
Connection Stringn/aDefault Character Setn/a
Default Collationn/aDelay Key Updatesno
Minimal Row Countn/aMaximum Row Countn/a
Union Tablesn/aMerge Methodn/a
Pack Keysn/aHas Passwordno
Data Directoryn/aIndex Directoryn/a
EngineInnoDBRow Formatn/a
+ + + + +
Columns
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KeyColumn NameDatatypeNot NullDefaultComment
PKidlogBIGINTYesunique internal identifier
loggedDATETIMEYesdate when the error is raised
usernameVARCHAR(45)Yesuser name
typeVARCHAR(15)Yeslog type (warn, error,...)
titleTEXTYestitle
descriptionTEXTYesdescription
mysqluserVARCHAR(255)Nomysql user authentication
mysqlcurrentuserVARCHAR(255)Nomysql current user authentication
+ + +
Indices
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Index NameColumnsPrimaryUniqueTypeKindComment
PRIMARY + +
YesNoPRIMARY
in_log_date + +
NoNoINDEX
+ + + + +
Table Comments
+ + + + +
Errors and logs
+ + +
DDL script
+ + + + +
CREATE  TABLE IF NOT EXISTS `pbrcampdb`.`log` (
`idlog` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'unique internal identifier' ,
`logged` DATETIME NOT NULL COMMENT 'date when the error is raised' ,
`username` VARCHAR(45) NOT NULL COMMENT 'user name' ,
`type` VARCHAR(15) NOT NULL COMMENT 'log type (warn, error,...)' ,
`title` TEXT NOT NULL COMMENT 'title' ,
`description` TEXT NOT NULL COMMENT 'description' ,
`mysqluser` VARCHAR(255) NULL COMMENT 'mysql user authentication' ,
`mysqlcurrentuser` VARCHAR(255) NULL COMMENT 'mysql current user authentication' ,
PRIMARY KEY (`idlog`) ,
INDEX `in_log_date` (`logged` ASC) )
ENGINE = InnoDB
COMMENT = 'Errors and logs'
+ +
+ + +
Table session
(4/6)
+
+
+ + +
Table Properties
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Average Row Lengthn/aUse Check Sumno
Connection Stringn/aDefault Character Setn/a
Default Collationn/aDelay Key Updatesno
Minimal Row Countn/aMaximum Row Countn/a
Union Tablesn/aMerge Methodn/a
Pack Keysn/aHas Passwordno
Data Directoryn/aIndex Directoryn/a
EngineInnoDBRow Formatn/a
+ + + + +
Columns
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KeyColumn NameDatatypeNot NullDefaultComment
PKloginVARCHAR(45)Yesuser identifier
sessionVARCHAR(200)Yessession identifier
inetINTYesCRC32 checksum of the concatenation of IP and USER_AGENT
create_dateINTYesDate of creation
expire_dateINTYesDate of expiration
logoffTINYINT(1)Yes01: should be deleted. Updated when user ask for deconnection
+ + +
Indices
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Index NameColumnsPrimaryUniqueTypeKindComment
PRIMARY + +
YesNoPRIMARY
ix_session_session + +
NoNoINDEX
+ + + + +
Table Comments
+ + + + +
Session Table - store sessions in mysql so it matters not what server rpc request goes too
+ + +
DDL script
+ + + + +
CREATE  TABLE IF NOT EXISTS `pbrcampdb`.`session` (
`login` VARCHAR(45) NOT NULL COMMENT 'user identifier' ,
`session` VARCHAR(200) NOT NULL COMMENT 'session identifier' ,
`inet` INT UNSIGNED NOT NULL COMMENT 'CRC32 checksum of the concatenation of IP and USER_AGENT' ,
`create_date` INT UNSIGNED NOT NULL COMMENT 'Date of creation' ,
`expire_date` INT UNSIGNED NOT NULL COMMENT 'Date of expiration' ,
`logoff` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '1: should be deleted. Updated when user ask for deconnection' ,
PRIMARY KEY (`login`) ,
INDEX `ix_session_session` (`session` ASC) )
ENGINE = InnoDB
COMMENT = 'Session Table - store sessions in mysql so it matters not what server rpc request goes too'
+ +
+ + +
Table contact
(5/6)
+
+
+ + +
Table Properties
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Average Row Lengthn/aUse Check Sumno
Connection Stringn/aDefault Character Setn/a
Default Collationn/aDelay Key Updatesno
Minimal Row Countn/aMaximum Row Countn/a
Union Tablesn/aMerge Methodn/a
Pack Keysn/aHas Passwordno
Data Directoryn/aIndex Directoryn/a
EngineInnoDBRow Formatn/a
+ + + + +
Columns
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KeyColumn NameDatatypeNot NullDefaultComment
PKidcontactMEDIUMINTYesunique internal identifier
lastnameVARCHAR(40)Yescontact name
firstnameVARCHAR(40)Yescontact first name
telVARCHAR(40)Yestel numbers
emailVARCHAR(255)Noemails
addressVARCHAR(255)Noaddress
address_moreVARCHAR(255)Noaddress more
cityVARCHAR(255)Nocity
zipVARCHAR(8)Nozip
commentTEXTNocomment
create_dateDATETIMEYescreation date in server time zone
create_iduserSMALLINTYesuser who created the contact
update_dateDATETIMENolast update date in server time zone
update_iduserSMALLINTNouser who updated the contact
+ + +
Indices
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Index NameColumnsPrimaryUniqueTypeKindComment
PRIMARY + +
YesNoPRIMARY
fk_contact_user_create + +
NoNoFOREIGN
fk_contact_user_update + +
NoNoFOREIGN
ix_contact_lastname + +
NoNoINDEX
+ + +
Relationships
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Relationship NameRelationship TypeParent TableChild TableCard.
fk_contact_user_createNon-Identifyingusercontact1:n
fk_contact_user_updateNon-Identifyingusercontact1:n
fk_reservation_contactNon-Identifyingcontactreservation1:n
+ + + +
Table Comments
+ + + + +
Contains the contacts
+ + +
DDL script
+ + + + +
CREATE  TABLE IF NOT EXISTS `pbrcampdb`.`contact` (
`idcontact` MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'unique internal identifier' ,
`lastname` VARCHAR(40) NOT NULL COMMENT 'contact name' ,
`firstname` VARCHAR(40) NOT NULL COMMENT 'contact first name' ,
`tel` VARCHAR(40) NOT NULL COMMENT 'tel numbers' ,
`email` VARCHAR(255) NULL COMMENT 'emails' ,
`address` VARCHAR(255) NULL COMMENT 'address' ,
`address_more` VARCHAR(255) NULL COMMENT 'address more' ,
`city` VARCHAR(255) NULL COMMENT 'city' ,
`zip` VARCHAR(8) NULL COMMENT 'zip' ,
`comment` TEXT NULL COMMENT 'comment' ,
`create_date` DATETIME NOT NULL COMMENT 'creation date in server time zone' ,
`create_iduser` SMALLINT UNSIGNED NOT NULL COMMENT 'user who created the contact' ,
`update_date` DATETIME NULL COMMENT 'last update date in server time zone' ,
`update_iduser` SMALLINT UNSIGNED NULL COMMENT 'user who updated the contact' ,
PRIMARY KEY (`idcontact`) ,
INDEX `fk_contact_user_create` (`create_iduser` ASC) ,
INDEX `fk_contact_user_update` (`update_iduser` ASC) ,
INDEX `ix_contact_lastname` (`lastname` ASC) ,
CONSTRAINT `fk_contact_user_create`
FOREIGN KEY (`create_iduser` )
REFERENCES `pbrcampdb`.`user` (`iduser` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_contact_user_update`
FOREIGN KEY (`update_iduser` )
REFERENCES `pbrcampdb`.`user` (`iduser` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
COMMENT = 'Contains the contacts'
+ +
+ + +
Table reservation
(6/6)
+
+
+ + +
Table Properties
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Average Row Lengthn/aUse Check Sumno
Connection Stringn/aDefault Character Setn/a
Default Collationn/aDelay Key Updatesno
Minimal Row Countn/aMaximum Row Countn/a
Union Tablesn/aMerge Methodn/a
Pack Keysn/aHas Passwordno
Data Directoryn/aIndex Directoryn/a
EngineInnoDBRow Formatn/a
+ + + + +
Columns
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KeyColumn NameDatatypeNot NullDefaultComment
PKidreservationMEDIUMINTYesunique internal identifier
idcontactMEDIUMINTYescontact identifier
yearSMALLINTYesreservation date year
monthTINYINTYesreservation date month
dayTINYINTYesreservation date day
rent_realSMALLINTYes0real rent count
rent_plannedSMALLINTYes0planned rent count
rent_canceledSMALLINTYes0canceled rent count
rent_maxSMALLINTYesmax rent allowed
ageTINYINTNo1:16-25, 2:26-35, 3:35 and more.
arrheTINYINTNo1:cash, 2:check, 3:credit card
commentTEXTNocomment
create_dateDATETIMEYescreation date in server time zone
create_iduserSMALLINTYesuser who created the reservation
update_dateDATETIMENolast update date in server time zone
update_iduserSMALLINTNouser who updated the reservation
+ + +
Indices
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Index NameColumnsPrimaryUniqueTypeKindComment
PRIMARY + +
YesNoPRIMARY
fk_reservation_contact + +
NoNoFOREIGN
fk_reservation_user_create + +
NoNoFOREIGN
fk_reservation_user_update + +
NoNoFOREIGN
ix_reservation_year + +
NoNoINDEX
ix_reservation_month + +
NoNoINDEX
ix_reservation_day + +
NoNoINDEX
+ + +
Relationships
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Relationship NameRelationship TypeParent TableChild TableCard.
fk_reservation_contactNon-Identifyingcontactreservation1:n
fk_reservation_user_createNon-Identifyinguserreservation1:n
fk_reservation_user_updateNon-Identifyinguserreservation1:n
+ + + +
Table Comments
+ + + + +
Contains the reservations
+ + +
DDL script
+ + + + +
CREATE  TABLE IF NOT EXISTS `pbrcampdb`.`reservation` (
`idreservation` MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'unique internal identifier' ,
`idcontact` MEDIUMINT UNSIGNED NOT NULL COMMENT 'contact identifier' ,
`year` SMALLINT UNSIGNED NOT NULL COMMENT 'reservation date year' ,
`month` TINYINT UNSIGNED NOT NULL COMMENT 'reservation date month' ,
`day` TINYINT UNSIGNED NOT NULL COMMENT 'reservation date day' ,
`rent_real` SMALLINT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'real rent count' ,
`rent_planned` SMALLINT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'planned rent count' ,
`rent_canceled` SMALLINT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'canceled rent count' ,
`rent_max` SMALLINT UNSIGNED NOT NULL COMMENT 'max rent allowed' ,
`age` TINYINT UNSIGNED NULL COMMENT '1:16-25, 2:26-35, 3:35 and more.' ,
`arrhe` TINYINT UNSIGNED NULL COMMENT '1:cash, 2:check, 3:credit card' ,
`comment` TEXT NULL COMMENT 'comment' ,
`create_date` DATETIME NOT NULL COMMENT 'creation date in server time zone' ,
`create_iduser` SMALLINT UNSIGNED NOT NULL COMMENT 'user who created the reservation' ,
`update_date` DATETIME NULL COMMENT 'last update date in server time zone' ,
`update_iduser` SMALLINT UNSIGNED NULL COMMENT 'user who updated the reservation' ,
PRIMARY KEY (`idreservation`) ,
INDEX `fk_reservation_contact` (`idcontact` ASC) ,
INDEX `fk_reservation_user_create` (`create_iduser` ASC) ,
INDEX `fk_reservation_user_update` (`update_iduser` ASC) ,
INDEX `ix_reservation_year` (`year` ASC) ,
INDEX `ix_reservation_month` (`month` ASC) ,
INDEX `ix_reservation_day` (`day` ASC) ,
CONSTRAINT `fk_reservation_contact`
FOREIGN KEY (`idcontact` )
REFERENCES `pbrcampdb`.`contact` (`idcontact` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_reservation_user_create`
FOREIGN KEY (`create_iduser` )
REFERENCES `pbrcampdb`.`user` (`iduser` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_reservation_user_update`
FOREIGN KEY (`update_iduser` )
REFERENCES `pbrcampdb`.`user` (`iduser` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
COMMENT = 'Contains the reservations'
+ +
+ + + + + diff --git a/doc/model/report/table_details_list.html b/doc/model/report/table_details_list.html new file mode 100644 index 0000000..059c65f --- /dev/null +++ b/doc/model/report/table_details_list.html @@ -0,0 +1,194 @@ + + + + + Model Report - Overview + + + + +
+ + + + + + + +
+ + + diff --git a/doc/model/report/table_element_details.html b/doc/model/report/table_element_details.html new file mode 100644 index 0000000..f3f695f --- /dev/null +++ b/doc/model/report/table_element_details.html @@ -0,0 +1,4952 @@ + + + + + + + + + + + +
Column name
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Nameconfig
Key PartPrimary key
NullableNo
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentname of the option
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeVARCHAR(45)
Is User TypeNo
+
+
+ + +
Column value
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Nameconfig
Key Part
NullableNo
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentvalue of the option
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeVARCHAR(255)
Is User TypeNo
+
+
+ + +
Column role
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Nameconfig
Key Part
NullableNo
Default Value10
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentminimun credential to modify the value
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeTINYINT(1)
Is User TypeNo
+
+
+ + +
Column iduser
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Nameuser
Key PartPrimary key
NullableNo
Default Value
Auto IncrementYes
Character SetSchema Default
Collation NameSchema Default
Commentunique internal identifier
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeSMALLINT
Is User TypeNo
+
+
+ + +
Column login
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Nameuser
Key Part
NullableNo
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentuser name
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeVARCHAR(45)
Is User TypeNo
+
+
+ + +
Column password
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Nameuser
Key Part
NullableNo
Default Value
Auto IncrementNo
Character Setutf8
Collation Nameutf8_bin
Commentencrypted user password
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeVARCHAR(40)
Is User TypeNo
+
+
+ + +
Column registered
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Nameuser
Key Part
NullableNo
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentdate of registration. In server timezone.
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeDATETIME
Is User TypeNo
+
+
+ + +
Column role
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Nameuser
Key Part
NullableNo
Default Value0
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Comment0=user, 10=administrator
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeTINYINT(1)
Is User TypeNo
+
+
+ + +
Column last_visit
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Nameuser
Key Part
NullableYes
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentdate of the last visit. In server time zone.
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeDATETIME
Is User TypeNo
+
+
+ + +
Column state
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Nameuser
Key Part
NullableNo
Default Value1
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Comment0:deleted, 1:activated
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeTINYINT(1)
Is User TypeNo
+
+
+ + +
Column idlog
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namelog
Key PartPrimary key
NullableNo
Default Value
Auto IncrementYes
Character SetSchema Default
Collation NameSchema Default
Commentunique internal identifier
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeBIGINT
Is User TypeNo
+
+
+ + +
Column logged
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namelog
Key Part
NullableNo
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentdate when the error is raised
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeDATETIME
Is User TypeNo
+
+
+ + +
Column username
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namelog
Key Part
NullableNo
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentuser name
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeVARCHAR(45)
Is User TypeNo
+
+
+ + +
Column type
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namelog
Key Part
NullableNo
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentlog type (warn, error,...)
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeVARCHAR(15)
Is User TypeNo
+
+
+ + +
Column title
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namelog
Key Part
NullableNo
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commenttitle
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeTEXT
Is User TypeNo
+
+
+ + +
Column description
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namelog
Key Part
NullableNo
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentdescription
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeTEXT
Is User TypeNo
+
+
+ + +
Column mysqluser
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namelog
Key Part
NullableYes
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentmysql user authentication
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeVARCHAR(255)
Is User TypeNo
+
+
+ + +
Column mysqlcurrentuser
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namelog
Key Part
NullableYes
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentmysql current user authentication
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeVARCHAR(255)
Is User TypeNo
+
+
+ + +
Column login
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namesession
Key PartPrimary key
NullableNo
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentuser identifier
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeVARCHAR(45)
Is User TypeNo
+
+
+ + +
Column session
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namesession
Key Part
NullableNo
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentsession identifier
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeVARCHAR(200)
Is User TypeNo
+
+
+ + +
Column inet
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namesession
Key Part
NullableNo
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
CommentCRC32 checksum of the concatenation of IP and USER_AGENT
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeINT
Is User TypeNo
+
+
+ + +
Column create_date
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namesession
Key Part
NullableNo
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
CommentDate of creation
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeINT
Is User TypeNo
+
+
+ + +
Column expire_date
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namesession
Key Part
NullableNo
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
CommentDate of expiration
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeINT
Is User TypeNo
+
+
+ + +
Column logoff
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namesession
Key Part
NullableNo
Default Value0
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Comment1: should be deleted. Updated when user ask for deconnection
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeTINYINT(1)
Is User TypeNo
+
+
+ + +
Column idcontact
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namecontact
Key PartPrimary key
NullableNo
Default Value
Auto IncrementYes
Character SetSchema Default
Collation NameSchema Default
Commentunique internal identifier
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeMEDIUMINT
Is User TypeNo
+
+
+ + +
Column lastname
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namecontact
Key Part
NullableNo
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentcontact name
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeVARCHAR(40)
Is User TypeNo
+
+
+ + +
Column firstname
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namecontact
Key Part
NullableNo
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentcontact first name
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeVARCHAR(40)
Is User TypeNo
+
+
+ + +
Column tel
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namecontact
Key Part
NullableNo
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commenttel numbers
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeVARCHAR(40)
Is User TypeNo
+
+
+ + +
Column email
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namecontact
Key Part
NullableYes
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentemails
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeVARCHAR(255)
Is User TypeNo
+
+
+ + +
Column address
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namecontact
Key Part
NullableYes
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentaddress
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeVARCHAR(255)
Is User TypeNo
+
+
+ + +
Column address_more
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namecontact
Key Part
NullableYes
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentaddress more
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeVARCHAR(255)
Is User TypeNo
+
+
+ + +
Column city
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namecontact
Key Part
NullableYes
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentcity
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeVARCHAR(255)
Is User TypeNo
+
+
+ + +
Column zip
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namecontact
Key Part
NullableYes
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentzip
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeVARCHAR(8)
Is User TypeNo
+
+
+ + +
Column comment
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namecontact
Key Part
NullableYes
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentcomment
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeTEXT
Is User TypeNo
+
+
+ + +
Column create_date
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namecontact
Key Part
NullableNo
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentcreation date in server time zone
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeDATETIME
Is User TypeNo
+
+
+ + +
Column create_iduser
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namecontact
Key PartForeign key
NullableNo
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentuser who created the contact
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeSMALLINT
Is User TypeNo
+
+
+ + +
Column update_date
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namecontact
Key Part
NullableYes
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentlast update date in server time zone
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeDATETIME
Is User TypeNo
+
+
+ + +
Column update_iduser
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namecontact
Key PartForeign key
NullableYes
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentuser who updated the contact
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeSMALLINT
Is User TypeNo
+
+
+ + +
Column idreservation
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namereservation
Key PartPrimary key
NullableNo
Default Value
Auto IncrementYes
Character SetSchema Default
Collation NameSchema Default
Commentunique internal identifier
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeMEDIUMINT
Is User TypeNo
+
+
+ + +
Column idcontact
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namereservation
Key PartForeign key
NullableNo
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentcontact identifier
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeMEDIUMINT
Is User TypeNo
+
+
+ + +
Column year
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namereservation
Key Part
NullableNo
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentreservation date year
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeSMALLINT
Is User TypeNo
+
+
+ + +
Column month
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namereservation
Key Part
NullableNo
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentreservation date month
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeTINYINT
Is User TypeNo
+
+
+ + +
Column day
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namereservation
Key Part
NullableNo
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentreservation date day
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeTINYINT
Is User TypeNo
+
+
+ + +
Column rent_real
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namereservation
Key Part
NullableNo
Default Value0
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentreal rent count
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeSMALLINT
Is User TypeNo
+
+
+ + +
Column rent_planned
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namereservation
Key Part
NullableNo
Default Value0
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentplanned rent count
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeSMALLINT
Is User TypeNo
+
+
+ + +
Column rent_canceled
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namereservation
Key Part
NullableNo
Default Value0
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentcanceled rent count
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeSMALLINT
Is User TypeNo
+
+
+ + +
Column rent_max
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namereservation
Key Part
NullableNo
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentmax rent allowed
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeSMALLINT
Is User TypeNo
+
+
+ + +
Column age
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namereservation
Key Part
NullableYes
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Comment1:16-25, 2:26-35, 3:35 and more.
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeTINYINT
Is User TypeNo
+
+
+ + +
Column arrhe
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namereservation
Key Part
NullableYes
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Comment1:cash, 2:check, 3:credit card
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeTINYINT
Is User TypeNo
+
+
+ + +
Column comment
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namereservation
Key Part
NullableYes
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentcomment
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeTEXT
Is User TypeNo
+
+
+ + +
Column create_date
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namereservation
Key Part
NullableNo
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentcreation date in server time zone
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeDATETIME
Is User TypeNo
+
+
+ + +
Column create_iduser
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namereservation
Key PartForeign key
NullableNo
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentuser who created the reservation
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeSMALLINT
Is User TypeNo
+
+
+ + +
Column update_date
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namereservation
Key Part
NullableYes
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentlast update date in server time zone
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeDATETIME
Is User TypeNo
+
+
+ + +
Column update_iduser
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namereservation
Key PartForeign key
NullableYes
Default Value
Auto IncrementNo
Character SetSchema Default
Collation NameSchema Default
Commentuser who updated the reservation
+ +
Data Type Details
+ + + + + + + + + + + + + +
DatatypeSMALLINT
Is User TypeNo
+
+
+ + + + +
Index PRIMARY
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Nameconfig
Is Primary KeyYes
Is UniqueNo
TypePRIMARY
Kind
Key Block Size0
Comment
+ +
Columns
+ + + + + + + + + + + + + +
Column NameColumn OrderComment
nameAscendingno comment
+
+
+ + +
Index PRIMARY
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Nameuser
Is Primary KeyYes
Is UniqueNo
TypePRIMARY
Kind
Key Block Size0
Comment
+ +
Columns
+ + + + + + + + + + + + + +
Column NameColumn OrderComment
iduserAscendingno comment
+
+
+ + +
Index ui_user_name
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Nameuser
Is Primary KeyNo
Is UniqueNo
TypeUNIQUE
Kind
Key Block Size0
Comment
+ +
Columns
+ + + + + + + + + + + + + +
Column NameColumn OrderComment
loginAscendingno comment
+
+
+ + +
Index ix_user_name
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Nameuser
Is Primary KeyNo
Is UniqueNo
TypeINDEX
Kind
Key Block Size0
Comment
+ +
Columns
+ + + + + + + + + + + + + +
Column NameColumn OrderComment
loginAscendingno comment
+
+
+ + +
Index PRIMARY
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namelog
Is Primary KeyYes
Is UniqueNo
TypePRIMARY
Kind
Key Block Size0
Comment
+ +
Columns
+ + + + + + + + + + + + + +
Column NameColumn OrderComment
idlogAscendingno comment
+
+
+ + +
Index in_log_date
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namelog
Is Primary KeyNo
Is UniqueNo
TypeINDEX
Kind
Key Block Size0
Comment
+ +
Columns
+ + + + + + + + + + + + + +
Column NameColumn OrderComment
loggedAscendingno comment
+
+
+ + +
Index PRIMARY
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namesession
Is Primary KeyYes
Is UniqueNo
TypePRIMARY
Kind
Key Block Size0
Comment
+ +
Columns
+ + + + + + + + + + + + + +
Column NameColumn OrderComment
loginAscendingno comment
+
+
+ + +
Index ix_session_session
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namesession
Is Primary KeyNo
Is UniqueNo
TypeINDEX
Kind
Key Block Size0
Comment
+ +
Columns
+ + + + + + + + + + + + + +
Column NameColumn OrderComment
sessionAscendingno comment
+
+
+ + +
Index PRIMARY
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namecontact
Is Primary KeyYes
Is UniqueNo
TypePRIMARY
Kind
Key Block Size0
Comment
+ +
Columns
+ + + + + + + + + + + + + +
Column NameColumn OrderComment
idcontactAscendingno comment
+
+
+ + +
Index fk_contact_user_create
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namecontact
Is Primary KeyNo
Is UniqueNo
TypeFOREIGN
Kind
Key Block Size0
Comment
+ +
Columns
+ + + + + + + + + + + + + +
Column NameColumn OrderComment
create_iduserAscendingno comment
+
+
+ + +
Index fk_contact_user_update
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namecontact
Is Primary KeyNo
Is UniqueNo
TypeFOREIGN
Kind
Key Block Size0
Comment
+ +
Columns
+ + + + + + + + + + + + + +
Column NameColumn OrderComment
update_iduserAscendingno comment
+
+
+ + +
Index ix_contact_lastname
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namecontact
Is Primary KeyNo
Is UniqueNo
TypeINDEX
Kind
Key Block Size0
Comment
+ +
Columns
+ + + + + + + + + + + + + +
Column NameColumn OrderComment
lastnameAscendingno comment
+
+
+ + +
Index PRIMARY
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namereservation
Is Primary KeyYes
Is UniqueNo
TypePRIMARY
Kind
Key Block Size0
Comment
+ +
Columns
+ + + + + + + + + + + + + +
Column NameColumn OrderComment
idreservationAscendingno comment
+
+
+ + +
Index fk_reservation_contact
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namereservation
Is Primary KeyNo
Is UniqueNo
TypeFOREIGN
Kind
Key Block Size0
Comment
+ +
Columns
+ + + + + + + + + + + + + +
Column NameColumn OrderComment
idcontactAscendingno comment
+
+
+ + +
Index fk_reservation_user_create
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namereservation
Is Primary KeyNo
Is UniqueNo
TypeFOREIGN
Kind
Key Block Size0
Comment
+ +
Columns
+ + + + + + + + + + + + + +
Column NameColumn OrderComment
create_iduserAscendingno comment
+
+
+ + +
Index fk_reservation_user_update
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namereservation
Is Primary KeyNo
Is UniqueNo
TypeFOREIGN
Kind
Key Block Size0
Comment
+ +
Columns
+ + + + + + + + + + + + + +
Column NameColumn OrderComment
update_iduserAscendingno comment
+
+
+ + +
Index ix_reservation_year
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namereservation
Is Primary KeyNo
Is UniqueNo
TypeINDEX
Kind
Key Block Size0
Comment
+ +
Columns
+ + + + + + + + + + + + + +
Column NameColumn OrderComment
yearAscendingno comment
+
+
+ + +
Index ix_reservation_month
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namereservation
Is Primary KeyNo
Is UniqueNo
TypeINDEX
Kind
Key Block Size0
Comment
+ +
Columns
+ + + + + + + + + + + + + +
Column NameColumn OrderComment
monthAscendingno comment
+
+
+ + +
Index ix_reservation_day
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Schema Namepbrcampdb
Table Namereservation
Is Primary KeyNo
Is UniqueNo
TypeINDEX
Kind
Key Block Size0
Comment
+ +
Columns
+ + + + + + + + + + + + + +
Column NameColumn OrderComment
dayAscendingno comment
+
+
+ + + + +
Foreign Key fk_contact_user_create
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Parent Tableuser
Child Tablecontact
Cardinality1:n
Delete RuleNO ACTION
Update RuleNO ACTION
Is MandatoryNo
+
+
+ + +
Foreign Key fk_contact_user_update
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Parent Tableuser
Child Tablecontact
Cardinality1:n
Delete RuleNO ACTION
Update RuleNO ACTION
Is MandatoryNo
+
+
+ + +
Foreign Key fk_reservation_contact
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Parent Tablecontact
Child Tablereservation
Cardinality1:n
Delete RuleNO ACTION
Update RuleNO ACTION
Is MandatoryNo
+
+
+ + +
Foreign Key fk_reservation_user_create
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Parent Tableuser
Child Tablereservation
Cardinality1:n
Delete RuleNO ACTION
Update RuleNO ACTION
Is MandatoryNo
+
+
+ + +
Foreign Key fk_reservation_user_update
+
+
+
General Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Parent Tableuser
Child Tablereservation
Cardinality1:n
Delete RuleNO ACTION
Update RuleNO ACTION
Is MandatoryNo
+
+
+ + + + + + + diff --git a/doc/model/report/top.html b/doc/model/report/top.html new file mode 100644 index 0000000..00504ab --- /dev/null +++ b/doc/model/report/top.html @@ -0,0 +1,17 @@ + + + + + + + + + + +
+ MySQL Homepage + + MySQL Workbench Detailed Model Report +
+ + \ No newline at end of file diff --git a/doc/model/report/view_details.html b/doc/model/report/view_details.html new file mode 100644 index 0000000..1d89962 --- /dev/null +++ b/doc/model/report/view_details.html @@ -0,0 +1,16 @@ + + + + + Model Report - Table Details + + + + + + + + + + + diff --git a/src/config-sample.php b/src/config-sample.php index 353e602..3c3a2c1 100644 --- a/src/config-sample.php +++ b/src/config-sample.php @@ -64,6 +64,10 @@ * Réglages application ***************************/ +// LIFETIME +define('PBR_LIFETIME_COOKIE',36000); +define('PBR_LIFETIME_SESSION',36000); + // PAGING - Number of contacts and rents to display per page. define('PBR_PAGE_CONTACTS',50); define('PBR_PAGE_RENTS',50); diff --git a/src/contact.php b/src/contact.php index adaaecb..a5b43fa 100644 --- a/src/contact.php +++ b/src/contact.php @@ -31,13 +31,16 @@ /************************************************************************* * file encoding: UTF-8 * description: build and display the contact page. - * GET: act=update|show, cti=, pag=, del= + * GET: cti=contact identifier, pag= + * POST: update=update case, ctX= + * delete=delete case, cti=contact identifier * author: Olivier JULLIEN - 2010-02-04 + * update: Olivier JULLIEN - 2010-06-15 - improvement *************************************************************************/ /** Defines **********/ - define('PBR_VERSION','1.1.0'); + define('PBR_VERSION','1.2.0'); define('PBR_PATH',dirname(__FILE__)); /** Include config @@ -48,182 +51,168 @@ ********************/ require(PBR_PATH.'/includes/function/functions.php'); - /** Initialize - *************/ - require(PBR_PATH.'/includes/init/init.php'); - $sAction=NULL; - $iMessageCode=0; + /** Initialize context + *********************/ + require(PBR_PATH.'/includes/init/context.php'); /** Authenticate ***************/ - require(PBR_PATH.'/includes/init/inituser.php'); + require(PBR_PATH.'/includes/init/authuser.php'); - /** Include main object(s) - *************************/ + /** Initialize + *************/ require(PBR_PATH.'/includes/class/ccontact.php'); require(PBR_PATH.'/includes/class/cdate.php'); + require(PBR_PATH.'/includes/class/crent.php'); require(PBR_PATH.'/includes/class/cpaging.php'); + $pContact = new CContact(); + $pPaging = new CPaging(); + $iMessageCode = 0; /** Read input parameters ************************/ - if( CUser::GetInstance()->IsAuthenticated() && filter_has_var(INPUT_GET, 'act') - && filter_has_var(INPUT_GET, 'cti') ) - { - // Get action - $sAction = trim(filter_input( INPUT_GET, 'act', FILTER_SANITIZE_SPECIAL_CHARS)); - // Get the page - CPaging::GetInstance()->ReadInput(); - // Get identifier - CContact::GetInstance()->SetIdentifier( filter_input( INPUT_GET,'cti',FILTER_VALIDATE_INT)); - // Verify readed values - if( (CContact::GetInstance()->GetIdentifier()<1) || (($sAction!='update') && ($sAction!='show')) ) - { - // Parameters are not valid - CUser::GetInstance()->Invalidate(); - }//if( (CContact::GetInstance()->GetIdentifier()<1) || (($sAction!='update') && ($sAction!='show')) ) - }//if( filter_has_var(... - /** Build the page - ******************/ - if( CUser::GetInstance()->IsAuthenticated() && !is_null($sAction) ) + // Delete + if( filter_has_var( INPUT_POST, 'del') ) { - /** Delete - **********/ - if( ($sAction=='update') && filter_has_var(INPUT_POST, 'del') ) - { - // Create session - require(PBR_PATH.'/includes/class/csession.php'); - CSession::CreateSession(); - // Build token - $sToken = md5(uniqid(rand(), TRUE)); - CSession::GetInstance()->SetToken($sToken); - // Send - $sBuffer=PBR_URL.'contactdelete.php?act=confirm&cti='.CContact::GetInstance()->GetIdentifier().'&tok='.$sToken; - include(PBR_PATH.'/includes/init/initclean.php'); - header('Location: '.$sBuffer); - exit; - }//delete - - /** Update - **********/ - if( $sAction=='update' ) - { - // Get the value - CContact::GetInstance()->ReadInput(); - // Update database - if( CContact::GetInstance()->MandatoriesAreFilled()===TRUE ) - { - require(PBR_PATH.'/includes/db/'.PBR_DB_DIR.'/contactupdate.php'); - $iReturn=ContactUpdate( CUser::GetInstance()->GetUsername() - , CUser::GetInstance()->GetSession() - , GetIP().GetUserAgent() - , CContact::GetInstance()); - if( $iReturn>0 ) - { - // Succeeded - $iMessageCode=2; - $sAction='show'; - } - else - { - // Failed - RedirectError( $iReturn, __FILE__, __LINE__ ); - exit; - }//if( $iReturn>0 ) - } - else - { - // Missing values - $iMessageCode=1; - $sAction='show'; - }//if{ CContact::GetInstance()->MandatoriesAreFilled()===TRUE ) - }//update - - /** Show - ********/ - if( $sAction=='show' ) + // Read contact identifier + $pContact->ReadInputIdentifier(INPUT_POST); + + // Redirect + $sBuffer = CContact::IDENTIFIERTAG.'='.$pContact->GetIdentifier(); + unset( $pPaging, $pContact ); + include(PBR_PATH.'/includes/init/clean.php'); + header('Location: '.PBR_URL.'contactdelete.php?'.$sBuffer); + exit; + } + // Update + elseif( filter_has_var( INPUT_POST, 'upd') ) + { + // Read contact data + $pContact->ReadInput(INPUT_POST); + + // Update database + if( $pContact->IsValid()===TRUE ) { - // Clean the old data (if update case) - $iBuffer=CContact::GetInstance()->GetIdentifier(); - CContact::DeleteInstance(); - - // Get contact - require(PBR_PATH.'/includes/db/'.PBR_DB_DIR.'/contactget.php'); - $iReturn=ContactGet( CUser::GetInstance()->GetUsername() - , CUser::GetInstance()->GetSession() - , GetIP().GetUserAgent() - , $iBuffer - , CContact::GetInstance()); - if( $iReturn<1 ) + require(PBR_PATH.'/includes/db/function/contactupdate.php'); + $iReturn = ContactUpdate( CAuth::GetInstance()->GetUsername() + , CAuth::GetInstance()->GetSession() + , GetIP().GetUserAgent() + , $pContact ); + + // Error + if( ($iReturn===FALSE) || ($iReturn<0) ) { - // Failed - RedirectError( $iReturn, __FILE__, __LINE__ ); + unset( $pPaging, $pContact ); + RedirectError( $iReturn, __FILE__, __LINE__ ); exit; - }//if( $iReturn<1 ) - - // Get the reservations count - require(PBR_PATH.'/includes/db/'.PBR_DB_DIR.'/contactrentsgetcount.php'); - $iReturn=ContactRentsGetCount( CUser::GetInstance()->GetUsername() - , CUser::GetInstance()->GetSession() - , GetIP().GetUserAgent() - , CContact::GetInstance()->GetIdentifier()); - if( $iReturn>=0 ) - { - // Succeeded - CPaging::GetInstance()->Compute( (integer)PBR_PAGE_RENTS, (integer)$iReturn ); - } - else - { - // Failed - RedirectError( $iReturn, __FILE__, __LINE__ ); - exit; - }//if( $iReturn>0 ) - - // Get rent - require(PBR_PATH.'/includes/db/'.PBR_DB_DIR.'/contactrentsget.php'); - $tRecordset=ContactRentsGet( CUser::GetInstance()->GetUsername() - , CUser::GetInstance()->GetSession() - , GetIP().GetUserAgent() - , CContact::GetInstance()->GetIdentifier() - , CPaging::GetInstance()->GetOffset() - , CPaging::GetInstance()->GetLimit()); - if( !is_array($tRecordset) ) - { - // Failed - RedirectError( $tRecordset, __FILE__, __LINE__ ); - exit; - }//if( !is_array($tRecordset) ) - - }//if( $sAction=='show' ) - - /** Build header - ***************/ - require(PBR_PATH.'/includes/class/cheader.php'); - $sBuffer=CContact::GetInstance()->GetLastName().' '.CContact::GetInstance()->GetFirstName(); - CHeader::GetInstance()->SetNoCache(); - CHeader::GetInstance()->SetTitle($sBuffer); - CHeader::GetInstance()->SetDescription($sBuffer); - CHeader::GetInstance()->SetKeywords($sBuffer); - - /** Display - **********/ - require(PBR_PATH.'/includes/display/displayheader.php'); - require(PBR_PATH.'/includes/display/displaycontact.php'); - require(PBR_PATH.'/includes/display/displayfooter.php'); - - /** Clean - ********/ - CHeader::DeleteInstance(); + }//if( ($iReturn===FALSE) || ($iReturn<0) ) + + // Succeeded + $iMessageCode = 2; + } + else + { + // Missing values + $iMessageCode = 1; + }//if( $pContact->IsValid()===TRUE ) + + // Clean the old data + $iReturn = $pContact->GetIdentifier(); + $pContact->ResetMe(); + $pContact->SetIdentifier($iReturn); } else { - //Error - RedirectError( -2, __FILE__, __LINE__ ); - exit; - }//if( CUser::GetInstance()->IsAuthenticated() ) + // Read contact identifier + $pContact->ReadInputIdentifier(INPUT_GET); + + // Read the message code + $iMessageCode = GetMessageCode(); + + // Read the page + $pPaging->ReadInput(); + + }//Read action + + /** Build the page + *****************/ + + // Get contact + require(PBR_PATH.'/includes/db/function/contactget.php'); + $iReturn = ContactGet( CAuth::GetInstance()->GetUsername() + , CAuth::GetInstance()->GetSession() + , GetIP().GetUserAgent() + , $pContact ); + + // Error + if( ($iReturn===FALSE) || ($iReturn<=0) ) + { + unset( $pPaging, $pContact ); + if( $iReturn===0 ) + { + $sTitle='fichier: '.basename(__FILE__).', ligne:'.__LINE__; + ErrorLog( CAuth::GetInstance()->GetUsername(), $sTitle, 'identifiant inconnu', E_USER_ERROR, TRUE); + $iReturn=-2; + }//if( $iReturn==0 ) + RedirectError( $iReturn, __FILE__, __LINE__ ); + exit; + }//if( ($iReturn===FALSE) || ($iReturn<=0) ) + + // Get the reservations count + require(PBR_PATH.'/includes/db/function/contactrentsgetcount.php'); + $iReturn = ContactRentsGetCount( CAuth::GetInstance()->GetUsername() + , CAuth::GetInstance()->GetSession() + , GetIP().GetUserAgent() + , $pContact ); + + // Error + if( ($iReturn===FALSE) || ($iReturn<0) ) + { + unset( $pPaging, $pContact ); + RedirectError( $iReturn, __FILE__, __LINE__ ); + exit; + }//if( ($iReturn===FALSE) || ($iReturn<0) ) + + // Succeeded + $pPaging->Compute( PBR_PAGE_RENTS, $iReturn ); + + // Get rents + require(PBR_PATH.'/includes/db/function/contactrentsget.php'); + $tRecordset = ContactRentsGet( CAuth::GetInstance()->GetUsername() + , CAuth::GetInstance()->GetSession() + , GetIP().GetUserAgent() + , $pContact + , $pPaging ); + + // Error + if( !is_array($tRecordset) ) + { + unset( $pPaging, $pContact ); + RedirectError( $tRecordset, __FILE__, __LINE__ ); + exit; + }//if( !is_array($tRecordset) ) + + /** Build header + ***************/ + require(PBR_PATH.'/includes/class/cheader.php'); + $pDate = new CDate(); + $pHeader = new CHeader(); + $sBuffer = $pContact->GetLastName().' '.$pContact->GetFirstName(); + $pHeader->SetNoCache(); + $pHeader->SetTitle($sBuffer); + $pHeader->SetDescription($sBuffer); + $pHeader->SetKeywords($sBuffer); + + /** Display + **********/ + require(PBR_PATH.'/includes/display/header.php'); + require(PBR_PATH.'/includes/display/contact.php'); + require(PBR_PATH.'/includes/display/footer.php'); /** Delete objects *****************/ - include(PBR_PATH.'/includes/init/initclean.php'); + unset( $pPaging, $pContact, $pHeader, $pDate ); + include(PBR_PATH.'/includes/init/clean.php'); ?> diff --git a/src/contactdelete.php b/src/contactdelete.php index ceb5596..6534c4a 100644 --- a/src/contactdelete.php +++ b/src/contactdelete.php @@ -31,158 +31,155 @@ /************************************************************************* * file encoding: UTF-8 * description: build and display the contact delete page. - * GET: act=confirm|delete, tok=, cti - * cancel= + * GET: cti=contact identifier + * POST: can=cancel case + * con=confirm case, tok=token, cti=contact identifier * author: Olivier JULLIEN - 2010-02-04 + * update: Olivier JULLIEN - 2010-06-15 - improvement *************************************************************************/ /** Defines **********/ - define('PBR_VERSION','1.1.0'); + define('PBR_VERSION','1.2.0'); define('PBR_PATH',dirname(__FILE__)); /** Include config *****************/ require(PBR_PATH.'/config.php'); - /** Create session - *****************/ - require(PBR_PATH.'/includes/class/csession.php'); - CSession::CreateSession(); - /** Include functions ********************/ require(PBR_PATH.'/includes/function/functions.php'); - /** Initialize - *************/ - require(PBR_PATH.'/includes/init/init.php'); - $sAction=NULL; - $sToken=NULL; + /** Initialize context + *********************/ + require(PBR_PATH.'/includes/init/context.php'); /** Authenticate ***************/ - require(PBR_PATH.'/includes/init/inituser.php'); + require(PBR_PATH.'/includes/init/authuser.php'); - /** Include main object(s) - *************************/ + /** Initialize + *************/ require(PBR_PATH.'/includes/class/ccontact.php'); + $pContact = new CContact(); - /** Read input parameters - ************************/ - if( CUser::GetInstance()->IsAuthenticated() && filter_has_var(INPUT_GET, 'act') - && filter_has_var(INPUT_GET, 'tok') - && filter_has_var(INPUT_GET, 'cti') ) + /** Cancel + *********/ + if( filter_has_var( INPUT_POST, 'can') ) { - // Get action - $sAction = trim(filter_input( INPUT_GET, 'act', FILTER_SANITIZE_SPECIAL_CHARS)); - // Get token - $sToken = trim(filter_input( INPUT_GET, 'tok', FILTER_SANITIZE_SPECIAL_CHARS)); - // Get identifier - CContact::GetInstance()->SetIdentifier( (integer)filter_input( INPUT_GET,'cti',FILTER_VALIDATE_INT)); - // Verify readed values - if( $sToken!=CSession::GetToken() || (($sAction!='delete') && ($sAction!='confirm')) - || (CContact::GetInstance()->GetIdentifier()<1) ) - { - // Parameters are not valid - CUser::GetInstance()->Invalidate(); - }// if(.... - }//if( filter_has_var(... + // Read contact identifier + $pContact->ReadInputIdentifier(INPUT_POST); + $sBuffer = CContact::IDENTIFIERTAG.'='.$pContact->GetIdentifier(); + unset( $pContact ); + include(PBR_PATH.'/includes/init/clean.php'); + header('Location: '.PBR_URL.'contact.php?'.$sBuffer); + exit; + }//Cancel - // Unset token - CSession::CleanToken(); + /** Create session + *****************/ + require(PBR_PATH.'/includes/class/cphpsession.php'); + CPHPSession::CreateSession(); - /** Build the page - ******************/ - if( (CUser::GetInstance()->IsAuthenticated()===TRUE) && !is_null($sAction) ) + /** Delete + *********/ + if( filter_has_var( INPUT_POST, 'con') && (CPHPSession::GetInstance()->ValidInput(INPUT_POST)===TRUE) ) { - // Get contact - require(PBR_PATH.'/includes/db/'.PBR_DB_DIR.'/contactget.php'); - $iReturn=ContactGet( CUser::GetInstance()->GetUsername() - , CUser::GetInstance()->GetSession() - , GetIP().GetUserAgent() - , CContact::GetInstance()->GetIdentifier() - , CContact::GetInstance()); - if( $iReturn<1 ) - { - RedirectError( $iReturn, __FILE__, __LINE__ ); - exit; - }//if( $iReturn<1 ) + // Read contact identifier + $pContact->ReadInputIdentifier(INPUT_POST); - /** Cancel - *********/ - if( $sAction=='delete' && filter_has_var(INPUT_GET, 'cancel') ) - { - $sBuffer=PBR_URL.'contact.php?act=show&cti='.CContact::GetInstance()->GetIdentifier(); - include(PBR_PATH.'/includes/init/initclean.php'); - header('Location: '.$sBuffer); - exit; - }//if( $sAction='delete' && filter_has_var(INPUT_GET, 'cancel') ) + // Clean SESSION + CPHPSession::CleanToken(); + CPHPSession::Clean(); + + // Delete + require(PBR_PATH.'/includes/db/function/contactdel.php'); + $iReturn = ContactDel( CAuth::GetInstance()->GetUsername() + , CAuth::GetInstance()->GetSession() + , GetIP().GetUserAgent() + , $pContact ); - /** Delete - *********/ - if( $sAction=='delete' ) + unset($pContact); + + // Failed + if( ($iReturn===FALSE) || ($iReturn<=0) ) { - require(PBR_PATH.'/includes/db/'.PBR_DB_DIR.'/contactdel.php'); - $iReturn=ContactDel( CUser::GetInstance()->GetUsername() - , CUser::GetInstance()->GetSession() - , GetIP().GetUserAgent() - , CContact::GetInstance()->GetIdentifier()); - // Error - if( $iReturn<1 ) + if( $iReturn===0 ) { - // Failed - RedirectError( $iReturn, __FILE__, __LINE__ ); - exit; - }//if( $iReturn<1 ) - - // No error - $sBuffer='?error=3'; - include(PBR_PATH.'/includes/init/initclean.php'); - header('Location: '.PBR_URL.'contacts.php'.$sBuffer); + $sTitle='fichier: '.basename(__FILE__).', ligne:'.__LINE__; + ErrorLog( CAuth::GetInstance()->GetUsername(), $sTitle, 'identifiant inconnu', E_USER_ERROR, TRUE); + $iReturn=-2; + }//if( $iReturn==0 ) + RedirectError( $iReturn, __FILE__, __LINE__ ); exit; - }//if( $sAction='confirm' && filter_has_var(INPUT_GET, 'cancel') ) + }//if( ($iReturn===FALSE) || ($iReturn<0) ) - /** Confirm - **********/ - if( $sAction=='confirm' ) - { + // Succeeded + include(PBR_PATH.'/includes/init/clean.php'); + header('Location: '.PBR_URL.'contacts.php?error=3'); + exit; - /** Build token - **************/ - $sToken = md5(uniqid(rand(), TRUE)); - CSession::GetInstance()->SetToken($sToken); - - /** Build header - ***************/ - require(PBR_PATH.'/includes/class/cheader.php'); - $sBuffer='Supprimer '.CContact::GetInstance()->GetLastName().' '.CContact::GetInstance()->GetFirstName(); - CHeader::GetInstance()->SetNoCache(); - CHeader::GetInstance()->SetTitle($sBuffer); - CHeader::GetInstance()->SetDescription($sBuffer); - CHeader::GetInstance()->SetKeywords($sBuffer); - - /** Display - **********/ - require(PBR_PATH.'/includes/display/displayheader.php'); - require(PBR_PATH.'/includes/display/displaycontactdelete.php'); - require(PBR_PATH.'/includes/display/displayfooter.php'); - - /** Clean - ********/ - CHeader::DeleteInstance(); - - }//if( $sAction='confirm' ) - - } - else + }//Delete + + // Clean SESSION token + CPHPSession::CleanToken(); + + /** Generate and write SESSION token + ***********************************/ + $sToken = CPHPSession::GetInstance()->WriteToken(); + if( $sToken===FALSE ) + { + $sTitle = 'fichier: '.basename(__FILE__).', ligne:'.__LINE__; + ErrorLog( CAuth::GetInstance()->GetUsername(), $sTitle, 'impossible de fixer le jeton de la session', E_USER_ERROR, TRUE); + CPHPSession::CleanToken(); + CPHPSession::Clean(); + unset($pContact); + RedirectError( 1, __FILE__, __LINE__ ); + exit; + }//if( $sToken===FALSE ) + + /** Get contact data + *******************/ + $pContact->ReadInputIdentifier(INPUT_GET); + require(PBR_PATH.'/includes/db/function/contactget.php'); + $iReturn = ContactGet( CAuth::GetInstance()->GetUsername() + , CAuth::GetInstance()->GetSession() + , GetIP().GetUserAgent() + , $pContact ); + + // Error + if( ($iReturn===FALSE) || ($iReturn<=0) ) { - //Error - RedirectError( -2, __FILE__, __LINE__ ); - exit; - }//if( CUser::GetInstance()->IsAuthenticated() ) + unset( $pContact ); + if( $iReturn===0 ) + { + $sTitle='fichier: '.basename(__FILE__).', ligne:'.__LINE__; + ErrorLog( CAuth::GetInstance()->GetUsername(), $sTitle, 'identifiant inconnu', E_USER_ERROR, TRUE); + $iReturn=-2; + }//if( $iReturn==0 ) + RedirectError( $iReturn, __FILE__, __LINE__ ); + exit; + }//if( ($iReturn===FALSE) || ($iReturn<=0) ) + + /** Build header + ***************/ + require(PBR_PATH.'/includes/class/cheader.php'); + $pHeader = new CHeader(); + $sBuffer='Supprimer '.$pContact->GetLastName().' '.$pContact->GetFirstName(); + $pHeader->SetNoCache(); + $pHeader->SetTitle($sBuffer); + $pHeader->SetDescription($sBuffer); + $pHeader->SetKeywords('delete,erase,effacer,supprimer,suppression,contact'); + + /** Display + **********/ + require(PBR_PATH.'/includes/display/header.php'); + require(PBR_PATH.'/includes/display/contactdelete.php'); + require(PBR_PATH.'/includes/display/footer.php'); /** Delete objects *****************/ - include(PBR_PATH.'/includes/init/initclean.php'); + unset( $pContact ); + include(PBR_PATH.'/includes/init/clean.php'); ?> diff --git a/src/contactnew.php b/src/contactnew.php index edf930a..a18ca36 100644 --- a/src/contactnew.php +++ b/src/contactnew.php @@ -31,13 +31,14 @@ /************************************************************************* * file encoding: UTF-8 * description: build and display the new contact page. - * POST: act=new, ctX= + * POST: act=, ctX= * author: Olivier JULLIEN - 2010-02-04 + * update: Olivier JULLIEN - 2010-06-15 - improvement *************************************************************************/ /** Defines **********/ - define('PBR_VERSION','1.1.0'); + define('PBR_VERSION','1.2.0'); define('PBR_PATH',dirname(__FILE__)); /** Include config @@ -48,111 +49,77 @@ ********************/ require(PBR_PATH.'/includes/function/functions.php'); - /** Initialize - *************/ - require(PBR_PATH.'/includes/init/init.php'); - $sAction=NULL; - $iMessageCode=0; + /** Initialize context + *********************/ + require(PBR_PATH.'/includes/init/context.php'); /** Authenticate ***************/ - require(PBR_PATH.'/includes/init/inituser.php'); + require(PBR_PATH.'/includes/init/authuser.php'); - /** Include main object(s) - *************************/ + /** Initialize + *************/ require(PBR_PATH.'/includes/class/ccontact.php'); - require(PBR_PATH.'/includes/class/cdate.php'); + $pContact = new CContact(); + $iMessageCode = 0; /** Read input parameters ************************/ - if( CUser::GetInstance()->IsAuthenticated() && filter_has_var(INPUT_POST, 'act') - && filter_has_var(INPUT_POST, 'ctl') - && filter_has_var(INPUT_POST, 'ctf') - && filter_has_var(INPUT_POST, 'ctp') ) + require(PBR_PATH.'/includes/class/caction.php'); + if( filter_has_var( INPUT_POST, 'new' ) ) { - // Get action - $sAction = trim(filter_input( INPUT_POST, 'act', FILTER_SANITIZE_SPECIAL_CHARS)); - // Verify action - if( $sAction=='new' ) + // Read data + $pContact->ReadInput(INPUT_POST); + if( $pContact->MandatoriesAreFilled()===TRUE ) { - // Get the value - CContact::GetInstance()->ReadInput(); - } - else - { - // Parameters are not valid - CUser::GetInstance()->Invalidate(); - }// if( $sToken==CSession::GetToken() && ($sAction=='new') ) - }//if( filter_has_var(... + require(PBR_PATH.'/includes/db/function/contactadd.php'); + $iReturn = ContactAdd( CAuth::GetInstance()->GetUsername() + , CAuth::GetInstance()->GetSession() + , GetIP().GetUserAgent() + , $pContact ); - /** Build Page - *************/ - if( CUser::GetInstance()->IsAuthenticated() ) - { - /** Add a new contact - ********************/ - if( $sAction=='new' ) - { - if( CContact::GetInstance()->MandatoriesAreFilled()===TRUE ) - { - require(PBR_PATH.'/includes/db/'.PBR_DB_DIR.'/contactadd.php'); - $iReturn = ContactAdd( CUser::GetInstance()->GetUsername() - , CUser::GetInstance()->GetSession() - , GetIP().GetUserAgent() - , CContact::GetInstance()); - if( $iReturn>0 ) - { - // Succeed - $sBuffer='?act=search'; - $sBuffer.='&ctl='.rawurlencode(CContact::GetInstance()->GetLastName()); - $sBuffer.='&error=1'; - include(PBR_PATH.'/includes/init/initclean.php'); - header('Location: '.PBR_URL.'contacts.php'.$sBuffer); - exit; - } - else - { - // Failed - RedirectError( $iReturn, __FILE__, __LINE__ ); - exit; - }//if( $iReturn>0 ) - } - else + // Error + if( ($iReturn===FALSE) || ($iReturn<=0) ) { - // Missing values - $iMessageCode=1; - }//if{ CContact::GetInstance()->MandatoriesAreFilled()===TRUE ) - }// if( $sAction=='new' ) - - /** Build header - ***************/ - require(PBR_PATH.'/includes/class/cheader.php'); - $sBuffer='Nouveau contact'; - CHeader::GetInstance()->SetNoCache(); - CHeader::GetInstance()->SetTitle($sBuffer); - CHeader::GetInstance()->SetDescription($sBuffer); - CHeader::GetInstance()->SetKeywords($sBuffer); + unset($pContact); + RedirectError( $iReturn, __FILE__, __LINE__ ); + exit; + }//if( ($iReturn===FALSE) || ($iReturn<=0) ) - /** Display - **********/ - $sAction='new'; - require(PBR_PATH.'/includes/display/displayheader.php'); - require(PBR_PATH.'/includes/display/displaycontact.php'); - require(PBR_PATH.'/includes/display/displayfooter.php'); + // Succeed + $sBuffer = PBR_URL.'contacts.php?'.CAction::ACTIONTAG.'=search'; + $sBuffer .= '&'.CContact::LASTNAMETAG.'='.$pContact->GetLastName(2); + $sBuffer .= '&error=1'; + unset($pContact); + include(PBR_PATH.'/includes/init/clean.php'); + header('Location: '.$sBuffer); + exit; + } + else + { + // Missing values + $iMessageCode = 1; + }//if( $pContact->MandatoriesAreFilled()===TRUE ) + }//if( CAction::IsValid(... - /** Clean - ********/ - CHeader::DeleteInstance(); + /** Build header + ***************/ + require(PBR_PATH.'/includes/class/cheader.php'); + $pHeader = new CHeader(); + $sBuffer = 'Nouveau contact'; + $pHeader->SetNoCache(); + $pHeader->SetTitle($sBuffer); + $pHeader->SetDescription($sBuffer); + $pHeader->SetKeywords($sBuffer); - } - else - { - //Error - RedirectError( -2, __FILE__, __LINE__ ); - exit; - }//if( CUser::GetInstance()->IsAuthenticated() ) + /** Display + **********/ + require(PBR_PATH.'/includes/display/header.php'); + require(PBR_PATH.'/includes/display/contactnew.php'); + require(PBR_PATH.'/includes/display/footer.php'); /** Delete objects *****************/ - include(PBR_PATH.'/includes/init/initclean.php'); + unset( $pContact, $pHeader ); + include(PBR_PATH.'/includes/init/clean.php'); ?> diff --git a/src/contacts.php b/src/contacts.php index 0353e89..940b880 100644 --- a/src/contacts.php +++ b/src/contacts.php @@ -31,14 +31,15 @@ /************************************************************************* * file encoding: UTF-8 * description: build and display the contacts page. - * GET: act=null|search, ctl=, error= - * , pag= + * GET: act=search|export, ctl=, error= + * , pag=, opX=