Commit a59033430fa5503088080aaf69db6ea199507f0b
1 parent
b71bd5c3
Erster import der aktuellen Arbitskopie des neuen Bildertools
Showing
32 changed files
with
3743 additions
and
0 deletions
bilder.pot
0 → 100644
1 | +# SOME DESCRIPTIVE TITLE. | ||
2 | +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||
3 | +# This file is distributed under the same license as the PACKAGE package. | ||
4 | +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | ||
5 | +# | ||
6 | +#, fuzzy | ||
7 | +msgid "" | ||
8 | +msgstr "" | ||
9 | +"Project-Id-Version: PACKAGE VERSION\n" | ||
10 | +"Report-Msgid-Bugs-To: \n" | ||
11 | +"POT-Creation-Date: 2007-10-08 03:09+0200\n" | ||
12 | +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | ||
13 | +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||
14 | +"Language-Team: LANGUAGE <LL@li.org>\n" | ||
15 | +"MIME-Version: 1.0\n" | ||
16 | +"Content-Type: text/plain; charset=CHARSET\n" | ||
17 | +"Content-Transfer-Encoding: 8bit\n" | ||
18 | + | ||
19 | +#: templates/personAdmin/personSearch1.tpl.php:37 | ||
20 | +msgid "search" | ||
21 | +msgstr "" | ||
22 | + | ||
23 | +#: templates/personAdmin/personSearch1.tpl.php:45 | ||
24 | +#: templates/personAdmin/personInUp.tpl.php:86 | ||
25 | +msgid "surname" | ||
26 | +msgstr "" | ||
27 | + | ||
28 | +#: templates/personAdmin/personSearch1.tpl.php:56 | ||
29 | +#: templates/personAdmin/personInUp.tpl.php:80 | ||
30 | +msgid "firstname" | ||
31 | +msgstr "" | ||
32 | + | ||
33 | +#: templates/personAdmin/personInUp.tpl.php:47 | ||
34 | +msgid "update" | ||
35 | +msgstr "" | ||
36 | + | ||
37 | +#: templates/personAdmin/personInUp.tpl.php:54 | ||
38 | +msgid "insert" | ||
39 | +msgstr "" | ||
40 | + | ||
41 | +#: templates/personAdmin/personInUp.tpl.php:57 | ||
42 | +msgid "submit" | ||
43 | +msgstr "" | ||
44 | + | ||
45 | +#: templates/personAdmin/personInUp.tpl.php:63 | ||
46 | +msgid "personal data" | ||
47 | +msgstr "" | ||
48 | + | ||
49 | +#: templates/personAdmin/personInUp.tpl.php:92 | ||
50 | +msgid "company" | ||
51 | +msgstr "" | ||
52 | + | ||
53 | +#: templates/personAdmin/personInUp.tpl.php:98 | ||
54 | +msgid "email" | ||
55 | +msgstr "" | ||
56 | + | ||
57 | +#: templates/personAdmin/personInUp.tpl.php:104 | ||
58 | +msgid "url" | ||
59 | +msgstr "" | ||
60 | + | ||
61 | +#: templates/personAdmin/personInUp.tpl.php:117 | ||
62 | +msgid "photographer" | ||
63 | +msgstr "" | ||
64 | + | ||
65 | +#: templates/personAdmin/personInUp.tpl.php:124 | ||
66 | +msgid "cameraId" | ||
67 | +msgstr "" | ||
68 | + | ||
69 | +#: templates/personAdmin/personInUp.tpl.php:137 | ||
70 | +msgid "owner" | ||
71 | +msgstr "" | ||
72 | + | ||
73 | +#: templates/personAdmin/personInUp.tpl.php:144 | ||
74 | +msgid "watermark width" | ||
75 | +msgstr "" | ||
76 | + | ||
77 | +#: templates/personAdmin/personInUp.tpl.php:150 | ||
78 | +msgid "watermark height" | ||
79 | +msgstr "" | ||
80 | + | ||
81 | +#: templates/personAdmin/personInUp.tpl.php:156 | ||
82 | +msgid "watermark xPos" | ||
83 | +msgstr "" | ||
84 | + | ||
85 | +#: templates/personAdmin/personInUp.tpl.php:162 | ||
86 | +msgid "watermark yPos" | ||
87 | +msgstr "" |
components/personAdmin.php
0 → 100644
config.php
0 → 100644
1 | +<? | ||
2 | +/* Pfadkonstanten */ | ||
3 | +define ('HOME', dirname (__FILE__) . '/'); | ||
4 | +define ('DATADIR', HOME . 'data/'); | ||
5 | +define ('IMGDIR', HOME . 'img/'); | ||
6 | +define ('LIBDIR', HOME . 'libs/'); | ||
7 | +define ('TPLDIR', HOME . 'templates/'); | ||
8 | +define ('JSDIR', HOME . 'js/'); | ||
9 | +define ('CSSDIR', HOME . 'css/'); | ||
10 | +define ('FONTDIR', HOME . 'fonts/'); | ||
11 | +define ('CACHEDIR', HOME . 'cache/'); | ||
12 | +define ('LOCALEDIR', HOME . 'locale/'); | ||
13 | + | ||
14 | +/* diese Pfade als URLS */ | ||
15 | +// Evolver | ||
16 | +define ('BASEURL', "http://localhost/~georg/bilder/"); | ||
17 | + | ||
18 | +define ('IMGURL', BASEURL . 'img/'); | ||
19 | +define ('LIBURL', BASEURL . 'libs/'); | ||
20 | +define ('TPLURL', BASEURL . 'templates/'); | ||
21 | +define ('DATAURL', BASEURL . 'data/'); | ||
22 | +define ('CSSURL', BASEURL . 'css/'); | ||
23 | +define ('JSURL', BASEURL . 'js/'); | ||
24 | +define ('CSSDIR', BASEURL . 'css/'); | ||
25 | +define ('FONTURL', BASEURL . 'fonts/'); | ||
26 | +define ('CACHEURL', BASEURL . 'cache/'); | ||
27 | + | ||
28 | +define ('BASESURL', "https://localhost/~georg/bilder/"); | ||
29 | +define ('IMGSURL', BASESURL . 'img/'); | ||
30 | + | ||
31 | +/* Basisklassen & Funktionen */ | ||
32 | +define ('SAVANT_SMALL', LIBDIR . 'c_SavantSmall.php'); | ||
33 | +define ('PICTOOL_SAVANT', LIBDIR . 'c_picToolSavant.php'); | ||
34 | +define ('UTILS', LIBDIR . 'utils.php'); | ||
35 | +?> |
css/background-colors.css
0 → 100644
1 | +/* ======================================================================= | ||
2 | + * Styles for components | ||
3 | + * ======================================================================= */ | ||
4 | +.bgc-bg1 { background-color: #888888 } | ||
5 | +/* ======================================================================= */ | ||
6 | + | ||
7 | +/* ======================================================================= | ||
8 | + * Styles for logical groups. A group is defined by a bounding box "grp*" | ||
9 | + * containing one or more header lines "head*" and content-boxes "box*" | ||
10 | + * ======================================================================= */ | ||
11 | +.bgc-grp1 { background-color: #aaaaaa } | ||
12 | +.bgc-box1 { background-color: #ffb400 } | ||
13 | +.bgc-head1 { background-color: #e5a200 } | ||
14 | +/* ======================================================================= */ | ||
15 | + | ||
16 | +/* ======================================================================= | ||
17 | + * Styles for tooltips | ||
18 | + * ======================================================================= */ | ||
19 | +.bgc-tt1 { background-color: #eeeeee } | ||
20 | +/* ======================================================================= */ |
css/displays.css
0 → 100644
1 | +/* ======================================================================= | ||
2 | + * Styles for components | ||
3 | + * ======================================================================= */ | ||
4 | +.d-bg1 { | ||
5 | + padding: 2px | ||
6 | +} | ||
7 | +/* ======================================================================= */ | ||
8 | + | ||
9 | +/* ======================================================================= | ||
10 | + * Styles for logical groups. A group is defined by a bounding box "grp*" | ||
11 | + * containing one or more header lines "head*" and content-boxes "box*" | ||
12 | + * ======================================================================= */ | ||
13 | +.d-grp1 { | ||
14 | + padding: 2px; | ||
15 | + padding-top: 1px; | ||
16 | + padding-bottom: 1px | ||
17 | +} | ||
18 | +.d-box1 { | ||
19 | + padding: 3px; | ||
20 | + margin-top: 1px; | ||
21 | + margin-bottom: 1px | ||
22 | +} | ||
23 | +.d-head1 { | ||
24 | + padding: 3px; | ||
25 | + margin-top: 1px; | ||
26 | + margin-bottom: 1px | ||
27 | +} | ||
28 | +/* ======================================================================= */ | ||
29 | + | ||
30 | +/* ======================================================================= | ||
31 | + * Styles for tooltips | ||
32 | + * ======================================================================= */ | ||
33 | +div.d-tt1 { | ||
34 | + border: 1px solid black; | ||
35 | + padding: 2px; | ||
36 | + visibility: hidden; | ||
37 | + z-index: 100 | ||
38 | +} | ||
39 | +ul.d-tt1 { | ||
40 | + list-style-type: none; | ||
41 | + margin: 0px; | ||
42 | + padding: 0px | ||
43 | +} | ||
44 | +/* ======================================================================= */ | ||
45 | + | ||
46 | +/* ======================================================================= | ||
47 | + * common changes to tag defaults | ||
48 | + * ======================================================================= */ | ||
49 | +form { | ||
50 | + padding: 0px; | ||
51 | + margin: 0px; | ||
52 | +} | ||
53 | + | ||
54 | +td { | ||
55 | + padding: 0px; | ||
56 | + margin: 0px; | ||
57 | +} | ||
58 | +/* ======================================================================= */ |
css/fonts.css
0 → 100644
1 | +/* ======================================================================= | ||
2 | + * Styles for components | ||
3 | + * ======================================================================= */ | ||
4 | +.f-bg1 { | ||
5 | + font-family: verdana, sans-serif; | ||
6 | + font-size: 8pt; | ||
7 | + font-weight: normal; | ||
8 | + color: #000000 | ||
9 | +} | ||
10 | +/* ======================================================================= */ | ||
11 | + | ||
12 | +/* ======================================================================= | ||
13 | + * Styles for logical groups. A group is defined by a bounding box "grp*" | ||
14 | + * containing one or more header lines "head*" and content-boxes "box*" | ||
15 | + * ======================================================================= */ | ||
16 | +.f-box1 { | ||
17 | + font-family: verdana, sans-serif; | ||
18 | + font-size: 8pt; | ||
19 | + font-weight: normal; | ||
20 | + color: #000000 | ||
21 | +} | ||
22 | +.f-head1 { | ||
23 | + font-family: verdana, sans-serif; | ||
24 | + font-size: 10pt; | ||
25 | + font-weight: bold; | ||
26 | + color: #000000 | ||
27 | +} | ||
28 | +/* ======================================================================= */ | ||
29 | + | ||
30 | +/* ======================================================================= | ||
31 | + * Styles for tooltips | ||
32 | + * ======================================================================= */ | ||
33 | +/* ======================================================================= */ |
img/circDblArrDownBlk.png
0 → 100644
339 Bytes
img/circDblArrLeftBlk.png
0 → 100644
331 Bytes
img/circDblArrRightBlk.png
0 → 100644
329 Bytes
img/circDblArrUpBlk.png
0 → 100644
343 Bytes
img/patterns1.xcf
0 → 100644
No preview for this file type
js/fittingStrings.js
0 → 100644
1 | +/* | ||
2 | + * requires levenshtein.js to be loaded first | ||
3 | + */ | ||
4 | + | ||
5 | +function distsort (_a, _b) | ||
6 | +{ | ||
7 | + var a = _a.substring (0, _a.indexOf('::')); | ||
8 | + var b = _b.substring (0, _b.indexOf('::')); | ||
9 | + | ||
10 | + return a - b; | ||
11 | +} | ||
12 | + | ||
13 | +function fittingStrings (search, strings, cs) | ||
14 | +{ | ||
15 | + var dists = new Array (); | ||
16 | + | ||
17 | + if (search.length <= 0) | ||
18 | + return dists; | ||
19 | + | ||
20 | + if (cs == false) | ||
21 | + _search = search.toUpperCase (); | ||
22 | + else | ||
23 | + _search = search; | ||
24 | + | ||
25 | + /* | ||
26 | + * hier suche ich die zur Eingabe am besten passenden Eintraege | ||
27 | + * in der Datenbank. Neben der eigentlichen distance ermittle ich noch | ||
28 | + * einen Wert distance - Ueberhang(Datenbankstring zu Suchstring) | ||
29 | + * Zweiter eignet sich besser zum Vergleich der Ergebnisse untereinander. | ||
30 | + */ | ||
31 | + for (str in strings) | ||
32 | + { | ||
33 | + if (cs == false) | ||
34 | + _str = strings[str].toUpperCase (); | ||
35 | + else | ||
36 | + _str = strings[str]; | ||
37 | + | ||
38 | + var dist = levenshtein (_search, _str); | ||
39 | + var delta = _str.length - _search.length; | ||
40 | + var subDist = (delta > 0)? dist - delta: dist; | ||
41 | + | ||
42 | + dists.push (subDist + '::' + dist + '::' + strings[str]); | ||
43 | + } | ||
44 | + | ||
45 | + dists.sort(distsort); | ||
46 | + | ||
47 | + return dists; | ||
48 | +} |
js/levenshtein.js
0 → 100644
1 | +/* | ||
2 | + Copyright (c) 2006. All Rights reserved. | ||
3 | + | ||
4 | + If you use this script, please email me and let me know, thanks! | ||
5 | + Andrew Hedges | ||
6 | + andrew (at) hedges (dot) name | ||
7 | + If you want to hire me to write JavaScript for you, see my resume. | ||
8 | + | ||
9 | + http://andrew.hedges.name/resume/ | ||
10 | +*/ | ||
11 | + | ||
12 | +// return the smallest of the three values passed in | ||
13 | +function minimum (x, y, z) | ||
14 | +{ | ||
15 | + if (x < y && x < z) return x; | ||
16 | + if (y < x && y < z) return y; | ||
17 | + return z; | ||
18 | +} | ||
19 | + | ||
20 | +// calculate the Levenshtein distance between a and b, | ||
21 | +function levenshtein (a, b) | ||
22 | +{ | ||
23 | + var cost; | ||
24 | + var m = a.length; | ||
25 | + var n = b.length; | ||
26 | + | ||
27 | + // make sure a.length >= b.length to use O(min(n,m)) space | ||
28 | + if (m < n) | ||
29 | + { | ||
30 | + var c=a; a=b; b=c; | ||
31 | + var o=m; m=n; n=o; | ||
32 | + } | ||
33 | + | ||
34 | + var r = new Array(); | ||
35 | + r[0] = new Array(); | ||
36 | + for (var c = 0; c < n+1; c++) | ||
37 | + r[0][c] = c; | ||
38 | + | ||
39 | + for (var i = 1; i < m+1; i++) | ||
40 | + { | ||
41 | + r[i] = new Array(); | ||
42 | + r[i][0] = i; | ||
43 | + | ||
44 | + for (var j = 1; j < n+1; j++) | ||
45 | + { | ||
46 | + cost = (a.charAt(i-1) == b.charAt(j-1))? 0: 1; | ||
47 | + r[i][j] = minimum (r[i-1][j]+1, r[i][j-1]+1, r[i-1][j-1]+cost); | ||
48 | + } | ||
49 | + } | ||
50 | + | ||
51 | + return r[r.length-1][r[r.length-1].length-1]; | ||
52 | +} |
js/personAdmin/person.js
0 → 100644
1 | +function c_person (personId, photographerId, ownerId, firstname, surname, | ||
2 | + company, email, url, cameraId, wmWidth, wmHeight, wmXPos, wmYPos) | ||
3 | +{ | ||
4 | + this.personId = personId; | ||
5 | + this.photographerId = photographerId; | ||
6 | + this.ownerId = ownerId; | ||
7 | + this.firstname = firstname; | ||
8 | + this.surname = surname; | ||
9 | + this.company = company; | ||
10 | + this.email = email; | ||
11 | + this.url = url; | ||
12 | + this.cameraId = cameraId; | ||
13 | + this.wmWidth = wmWidth; | ||
14 | + this.wmHeight = wmHeight; | ||
15 | + this.wmXPos = wmXPos; | ||
16 | + this.wmYPos = wmYPos; | ||
17 | + | ||
18 | + this.personForm = null; | ||
19 | + | ||
20 | + this.connect = function (personForm) | ||
21 | + { | ||
22 | + this.personForm = personForm; | ||
23 | + } | ||
24 | + | ||
25 | + this.reset = function () | ||
26 | + { | ||
27 | + if (this.personId != -1) | ||
28 | + { | ||
29 | + this.personId = -1; | ||
30 | + this.photographerId = -1; | ||
31 | + this.ownerId = -1; | ||
32 | + this.firstname = ''; | ||
33 | + this.surname = ''; | ||
34 | + this.company = ''; | ||
35 | + this.email = ''; | ||
36 | + this.url = ''; | ||
37 | + this.cameraId = -1; | ||
38 | + this.wmWidth = ''; | ||
39 | + this.wmHeight = ''; | ||
40 | + this.wmXPos = ''; | ||
41 | + this.wmYPos = ''; | ||
42 | + | ||
43 | + if (this.personForm != null) | ||
44 | + this.personForm.updateForm (); | ||
45 | + } | ||
46 | + } | ||
47 | + | ||
48 | + this.update = function (p) | ||
49 | + { | ||
50 | + if (this.personId != p.personId) | ||
51 | + { | ||
52 | + this.personId = p.personId; | ||
53 | + this.photographerId = p.photographerId; | ||
54 | + this.ownerId = p.ownerId; | ||
55 | + this.firstname = p.firstname; | ||
56 | + this.surname = p.surname; | ||
57 | + this.company = p.company; | ||
58 | + this.email = p.email; | ||
59 | + this.url = p.url; | ||
60 | + this.cameraId = p.cameraId; | ||
61 | + this.wmWidth = p.wmWidth; | ||
62 | + this.wmHeight = p.wmHeight; | ||
63 | + this.wmXPos = p.wmXPos; | ||
64 | + this.wmYPos = p.wmYPos; | ||
65 | + | ||
66 | + if (this.personForm != null) | ||
67 | + this.personForm.updateForm (); | ||
68 | + } | ||
69 | + } | ||
70 | +} |
js/personAdmin/personInUp.js
0 → 100644
1 | +/* | ||
2 | + * requires fittingStrings.js to be loaded first | ||
3 | + */ | ||
4 | + | ||
5 | + | ||
6 | +/* | ||
7 | + * controls input/update formular for person insert | ||
8 | + * | ||
9 | + * Arguments: | ||
10 | + * upId / ID of the insert checkbox | ||
11 | + * inId / ID of the update checkbox | ||
12 | + * persons / Array containing all persons already existant in DB | ||
13 | + * | ||
14 | + * Methods: | ||
15 | + * de_activate / de/activate the formular fields for input | ||
16 | + * updateForm / calls de_activate and controls the checkboxes | ||
17 | + */ | ||
18 | +function personInUp ( | ||
19 | + upId, inId, submitId, person, newPerson, arrRight, arrDown) | ||
20 | +{ | ||
21 | + this.updBox = upId; | ||
22 | + this.insBox = inId; | ||
23 | + this.submitButton = submitId; | ||
24 | + this.arrRight = arrRight; | ||
25 | + this.arrDown = arrDown; | ||
26 | + this.person = person; | ||
27 | + this.newPerson = newPerson; | ||
28 | + | ||
29 | + person.connect (this); | ||
30 | + | ||
31 | + this.de_activate = function (field) | ||
32 | + { | ||
33 | + var updBox = document.getElementById (this.updBox); | ||
34 | + var insBox = document.getElementById (this.insBox); | ||
35 | + | ||
36 | + if (updBox.checked == true || insBox.checked == true) | ||
37 | + field.disabled = false; | ||
38 | + else | ||
39 | + field.disabled = true; | ||
40 | + | ||
41 | + return false; | ||
42 | + } | ||
43 | + | ||
44 | + this.un_fold = function (id, element) | ||
45 | + { | ||
46 | + title = element.parentNode.getElementsByTagName ('div')[0]; | ||
47 | + img = title.getElementsByTagName ('img')[0]; | ||
48 | + | ||
49 | + if (id != -1) | ||
50 | + { | ||
51 | + element.style.display = 'block'; | ||
52 | + img.src = this.arrDown.getImgUrl (title); | ||
53 | + } | ||
54 | + else | ||
55 | + { | ||
56 | + element.style.display = 'none'; | ||
57 | + img.src = this.arrRight.getImgUrl (title); | ||
58 | + } | ||
59 | + } | ||
60 | + | ||
61 | + this.updateFields = function (person) | ||
62 | + { | ||
63 | + for (p in person) | ||
64 | + { | ||
65 | + if (p == 'personForm') | ||
66 | + break; | ||
67 | + | ||
68 | + var field = document.getElementById (p); | ||
69 | + | ||
70 | + if (field != null) | ||
71 | + { | ||
72 | + field.value = person[p]; | ||
73 | + this.de_activate (field); | ||
74 | + } | ||
75 | + | ||
76 | + switch (p) | ||
77 | + { | ||
78 | + case 'photographerId': | ||
79 | + this.un_fold (person[p], | ||
80 | + document.getElementById ('cameraId').parentNode.parentNode); | ||
81 | + break; | ||
82 | + case 'ownerId': | ||
83 | + this.un_fold (person[p], | ||
84 | + document.getElementById ('wmWidth').parentNode.parentNode); | ||
85 | + } | ||
86 | + } | ||
87 | + } | ||
88 | + | ||
89 | + this.updateForm = function () | ||
90 | + { | ||
91 | + var updBox = document.getElementById (this.updBox); | ||
92 | + var insBox = document.getElementById (this.insBox); | ||
93 | + var submitButton = document.getElementById (this.submitButton); | ||
94 | + var person; | ||
95 | + | ||
96 | + if (this.person.personId != -1) | ||
97 | + { | ||
98 | + if (insBox.checked == false) | ||
99 | + { | ||
100 | + person = this.person; | ||
101 | + updBox.disabled = false; | ||
102 | + } | ||
103 | + else | ||
104 | + { | ||
105 | + person = this.newPerson; | ||
106 | + updBox.checked = false; | ||
107 | + updBox.disabled = true; | ||
108 | + } | ||
109 | + } | ||
110 | + else | ||
111 | + { | ||
112 | + person = this.newPerson; | ||
113 | + updBox.checked = false; | ||
114 | + updBox.disabled = true; | ||
115 | + } | ||
116 | + | ||
117 | + if (updBox.checked == true || insBox.checked == true) | ||
118 | + submitButton.disabled = false; | ||
119 | + else | ||
120 | + submitButton.disabled = true; | ||
121 | + | ||
122 | + this.updateFields (person); | ||
123 | + | ||
124 | + return false; | ||
125 | + } | ||
126 | + | ||
127 | + this.selectPerson = function () | ||
128 | + { | ||
129 | + var insBox = document.getElementById (this.insBox); | ||
130 | + var person; | ||
131 | + | ||
132 | + if (insBox.checked == true) | ||
133 | + person = this.newPerson; | ||
134 | + else | ||
135 | + person = this.person; | ||
136 | + | ||
137 | + return person; | ||
138 | + } | ||
139 | + | ||
140 | + this.setFirstname = function (value) | ||
141 | + { | ||
142 | + this.selectPerson ().firstname = value; | ||
143 | + } | ||
144 | + | ||
145 | + this.setSurname = function (value) | ||
146 | + { | ||
147 | + this.selectPerson ().surname = value; | ||
148 | + } | ||
149 | + | ||
150 | + this.setCompany = function (value) | ||
151 | + { | ||
152 | + this.selectPerson ().company = value; | ||
153 | + } | ||
154 | + | ||
155 | + this.setEmail = function (value) | ||
156 | + { | ||
157 | + this.selectPerson ().email = value; | ||
158 | + } | ||
159 | + | ||
160 | + this.setUrl = function (value) | ||
161 | + { | ||
162 | + this.selectPerson ().url = value; | ||
163 | + } | ||
164 | + | ||
165 | + this.setCameraId = function (value) | ||
166 | + { | ||
167 | + var person = this.selectPerson (); | ||
168 | + | ||
169 | + person.cameraId = value; | ||
170 | + if (person == this.newPerson) | ||
171 | + person.photographerId = 0; | ||
172 | + } | ||
173 | + | ||
174 | + this.setWmWidth = function (value) | ||
175 | + { | ||
176 | + var person = this.selectPerson (); | ||
177 | + | ||
178 | + person.wmWidth = value; | ||
179 | + if (person == this.newPerson) | ||
180 | + person.ownerId = 0; | ||
181 | + } | ||
182 | + | ||
183 | + this.setWmHeight = function (value) | ||
184 | + { | ||
185 | + var person = this.selectPerson (); | ||
186 | + | ||
187 | + person.wmHeight = value; | ||
188 | + if (person == this.newPerson) | ||
189 | + person.ownerId = 0; | ||
190 | + } | ||
191 | + | ||
192 | + this.setWmXPos = function (value) | ||
193 | + { | ||
194 | + var person = this.selectPerson (); | ||
195 | + | ||
196 | + person.wmXPos = value; | ||
197 | + if (person == this.newPerson) | ||
198 | + person.ownerId = 0; | ||
199 | + } | ||
200 | + | ||
201 | + this.setWmYPos = function (value) | ||
202 | + { | ||
203 | + var person = this.selectPerson (); | ||
204 | + | ||
205 | + person.wmYPos = value; | ||
206 | + if (person == this.newPerson) | ||
207 | + person.ownerId = 0; | ||
208 | + } | ||
209 | +} |
js/personAdmin/personSearch1.js
0 → 100644
1 | +/* | ||
2 | + * requires fittingStrings.js to be loaded first | ||
3 | + */ | ||
4 | + | ||
5 | + | ||
6 | +/* | ||
7 | + * provide alternative Names already existent in DB to given names in | ||
8 | + * input text fields: | ||
9 | + * | ||
10 | + * Arguments: | ||
11 | + * fname / ID of the input text field with firstname | ||
12 | + * sname / ID of the input text field with surname | ||
13 | + * fnameAlt / ID of the list that recieves the alternative firstnames | ||
14 | + * snameAlt / ID of the list that receives the alternative surnames | ||
15 | + * names / Array containing the already existing names and persons. | ||
16 | + * | ||
17 | + * Methods: | ||
18 | + * updField / exact match(no-case) found => update input field | ||
19 | + * genAlternativesList / generate List of alternative Strings | ||
20 | + * altSurnames / fill the list of alternative surnames | ||
21 | + * altFirstnames / fill the list of alternative firstnames | ||
22 | + */ | ||
23 | +function c_personSearch1 (fname, sname, fnameAlt, snameAlt, names, person) | ||
24 | +{ | ||
25 | + this.firstname = fname; | ||
26 | + this.surname = sname; | ||
27 | + this.fNameAlt = fnameAlt; | ||
28 | + this.sNameAlt = snameAlt; | ||
29 | + | ||
30 | + this.surnames = new Array (); | ||
31 | + this.firstnames = new Array (); | ||
32 | + this.persons = new Array (); | ||
33 | + for (sn in names) | ||
34 | + { | ||
35 | + this.surnames.push (sn); | ||
36 | + this.firstnames[sn] = new Array (); | ||
37 | + this.persons[sn] = new Array (); | ||
38 | + for (d in names[sn]) | ||
39 | + { | ||
40 | + this.firstnames[sn].push (names[sn][d][0]); | ||
41 | + this.persons[sn][names[sn][d][0]] = names[sn][d][1]; | ||
42 | + } | ||
43 | + } | ||
44 | + this.person = person; | ||
45 | + | ||
46 | + this.sNameBest = new Array (-1, -1, null); | ||
47 | + this.fNameBest = new Array (-1, -1, null); | ||
48 | + | ||
49 | + this.show = function (id) | ||
50 | + { | ||
51 | + var node = document.getElementById (id); | ||
52 | + node.parentNode.style.visibility = 'visible'; | ||
53 | + | ||
54 | + return false; | ||
55 | + } | ||
56 | + | ||
57 | + this.hide = function (id) | ||
58 | + { | ||
59 | + var node = document.getElementById (id); | ||
60 | + node.parentNode.style.visibility = 'hidden'; | ||
61 | + | ||
62 | + return false; | ||
63 | + } | ||
64 | + | ||
65 | + this.updField = function (field, alternative, altId) | ||
66 | + { | ||
67 | + if (alternative[1] == 0) | ||
68 | + field.value = alternative[2]; | ||
69 | + else | ||
70 | + if (alternative[1] >= 0) | ||
71 | + return this.show (altId); | ||
72 | + | ||
73 | + return this.hide (altId); | ||
74 | + } | ||
75 | + | ||
76 | + this.genAlternativesList = function (bestFit, dists) | ||
77 | + { | ||
78 | + if (dists.length > 0) | ||
79 | + // there are caculated distances for surnames | ||
80 | + { | ||
81 | + var i = 0; | ||
82 | + var bestMatch = dists[0].split ('::'); // infos for best match | ||
83 | + | ||
84 | + // reset matches select | ||
85 | + while ((child = bestFit.firstChild) != null) | ||
86 | + bestFit.removeChild (child); | ||
87 | + | ||
88 | + for (match in dists) | ||
89 | + // walk through all matches | ||
90 | + { | ||
91 | + // get infos for match | ||
92 | + var sMatch = dists[match].split ('::'); | ||
93 | + | ||
94 | + // create list entries | ||
95 | + newLi = document.createElement ('li'); | ||
96 | + liTxt = document.createTextNode (sMatch[2]); | ||
97 | + newLi.appendChild (liTxt); | ||
98 | + bestFit.appendChild (newLi); | ||
99 | + i=i+1; | ||
100 | + | ||
101 | + if (i >= bestMatch[1]) | ||
102 | + // dont show more than best match distance matches. | ||
103 | + break; | ||
104 | + } | ||
105 | + } | ||
106 | + else | ||
107 | + // there are no caculated distances for surnames | ||
108 | + { | ||
109 | + // reset matches select | ||
110 | + while ((child = bestFit.firstChild) != null) | ||
111 | + bestFit.removeChild (child); | ||
112 | + return new Array (-1, -1, ''); | ||
113 | + } | ||
114 | + | ||
115 | + return bestMatch; | ||
116 | + } | ||
117 | + | ||
118 | + this.altSurnames = function () | ||
119 | + { | ||
120 | + var surname = document.getElementById (this.surname); | ||
121 | + var sNameAlt = document.getElementById (this.sNameAlt); | ||
122 | + var dists = fittingStrings (surname.value, this.surnames, false); | ||
123 | + | ||
124 | + this.sNameBest = this.genAlternativesList (sNameAlt, dists); | ||
125 | + this.updField (surname, this.sNameBest, this.sNameAlt) | ||
126 | + | ||
127 | + if (this.sNameBest[1] == 0) | ||
128 | + { | ||
129 | + var firstname = document.getElementById (this.firstname); | ||
130 | + var dists = fittingStrings ( | ||
131 | + firstname.value, this.firstnames[this.sNameBest[2]], false); | ||
132 | + | ||
133 | + if (dists.length > 0) | ||
134 | + this.fNameBest = dists[0].split ('::'); | ||
135 | + | ||
136 | + if (this.person != null) | ||
137 | + if (this.fNameBest[1] == 0) | ||
138 | + this.person.update ( | ||
139 | + this.persons[this.sNameBest[2]][this.fNameBest[2]]); | ||
140 | + else | ||
141 | + this.person.reset (); | ||
142 | + } | ||
143 | + else | ||
144 | + { | ||
145 | + this.fNameBest = new Array (-1, -1, null); | ||
146 | + if (this.person != null) | ||
147 | + this.person.reset (); | ||
148 | + } | ||
149 | + | ||
150 | + return false; | ||
151 | + } | ||
152 | + | ||
153 | + this.altFirstnames = function (person) | ||
154 | + { | ||
155 | + var firstname = document.getElementById (this.firstname); | ||
156 | + var fNameAlt = document.getElementById (this.fNameAlt); | ||
157 | + | ||
158 | + if (this.sNameBest[1] == 0) | ||
159 | + { | ||
160 | + var surname = document.getElementById (this.surname); | ||
161 | + var dists = fittingStrings ( | ||
162 | + firstname.value, this.firstnames[this.sNameBest[2]], false); | ||
163 | + } | ||
164 | + else | ||
165 | + dists = new Array (); | ||
166 | + | ||
167 | + this.fNameBest = this.genAlternativesList (fNameAlt, dists); | ||
168 | + this.updField (firstname, this.fNameBest, this.fNameAlt) | ||
169 | + | ||
170 | + if (this.person != null) | ||
171 | + if (this.sNameBest[1] == 0 && this.fNameBest[1] == 0) | ||
172 | + this.person.update ( | ||
173 | + this.persons[this.sNameBest[2]][this.fNameBest[2]]); | ||
174 | + else | ||
175 | + this.person.reset (); | ||
176 | + | ||
177 | + return false; | ||
178 | + } | ||
179 | +} |
js/transPngBg.js
0 → 100644
1 | +function transPngBg (img, libUrl) | ||
2 | +{ | ||
3 | + this.img = img; | ||
4 | + this.libUrl = libUrl; | ||
5 | + | ||
6 | + this.RGBtoHex = function (color) | ||
7 | + { | ||
8 | + color = color.replace (/^rgb\((.*)\)$/, '$1'); | ||
9 | + color = color.replace (/ /g, '').split (','); | ||
10 | + | ||
11 | + return this.toHex (color[0]) + | ||
12 | + this.toHex (color[1]) + | ||
13 | + this.toHex(color[2]); | ||
14 | + } | ||
15 | + | ||
16 | + this.toHex = function (N) | ||
17 | + { | ||
18 | + if (N == null) | ||
19 | + return "00"; | ||
20 | + | ||
21 | + N = parseInt(N); | ||
22 | + if (N == 0 || isNaN(N)) | ||
23 | + return "00"; | ||
24 | + | ||
25 | + N = Math.max (0, N); | ||
26 | + N = Math.min (N, 255); | ||
27 | + N = Math.round(N); | ||
28 | + | ||
29 | + return "0123456789ABCDEF".charAt ((N-N % 16) / 16) + | ||
30 | + "0123456789ABCDEF".charAt (N % 16); | ||
31 | + } | ||
32 | + | ||
33 | + this.getImgUrl = function (posElement) | ||
34 | + { | ||
35 | + var cNames = posElement.className.split (' '); | ||
36 | + var color = posElement.style.backgroundImage; | ||
37 | + | ||
38 | + // try to get the background color of the given element from class | ||
39 | + // ---------------------------------------------------------------- | ||
40 | + if (color == '') | ||
41 | + { | ||
42 | + var cName; | ||
43 | + | ||
44 | + for (var cN in cNames) | ||
45 | + { | ||
46 | + if (cNames[cN].indexOf ('bgc') != -1) | ||
47 | + { | ||
48 | + cName = cNames[cN]; | ||
49 | + break; | ||
50 | + } | ||
51 | + } | ||
52 | + | ||
53 | + loop: for (var i=0; i<document.styleSheets.length; i++) | ||
54 | + { | ||
55 | + var rules = document.styleSheets[i].cssRules; | ||
56 | + if (rules == null) | ||
57 | + rules = document.styleSheets[i].rules; | ||
58 | + | ||
59 | + for (var j=0; j<rules.length; j++) | ||
60 | + { | ||
61 | + var selector = rules[j].selectorText; | ||
62 | + | ||
63 | + if (selector.indexOf (cName) != -1) | ||
64 | + { | ||
65 | + color = rules[j].style.backgroundColor; | ||
66 | + | ||
67 | + if (color.indexOf ('#') != -1) | ||
68 | + color = color.substr (1); | ||
69 | + else | ||
70 | + color = this.RGBtoHex (color); | ||
71 | + | ||
72 | + break loop; | ||
73 | + } | ||
74 | + } | ||
75 | + } | ||
76 | + } | ||
77 | + // ---------------------------------------------------------------- | ||
78 | + | ||
79 | + return this.libUrl + 'gd_bgMerge.php?col=' + color + '&img=' + this.img; | ||
80 | + } | ||
81 | +} |
libs/c_SavantSmall.php
0 → 100644
1 | +<?php | ||
2 | + | ||
3 | +/** | ||
4 | +* | ||
5 | +* Error constants. | ||
6 | +* | ||
7 | +*/ | ||
8 | + | ||
9 | +define('SAVANT2_ERROR_ASSIGN', -1); | ||
10 | +define('SAVANT2_ERROR_ASSIGNREF', -2); | ||
11 | +define('SAVANT2_ERROR_COMPILER', -3); | ||
12 | +define('SAVANT2_ERROR_NOFILTER', -4); | ||
13 | +define('SAVANT2_ERROR_NOPLUGIN', -5); | ||
14 | +define('SAVANT2_ERROR_NOSCRIPT', -6); | ||
15 | +define('SAVANT2_ERROR_NOTEMPLATE', -7); | ||
16 | +define('SAVANT2_ERROR_COMPILE_FAIL', -8); | ||
17 | + | ||
18 | + | ||
19 | +/** | ||
20 | +* | ||
21 | +* Error messages. | ||
22 | +* | ||
23 | +*/ | ||
24 | + | ||
25 | +if (! isset($GLOBALS['_SAVANT2']['error'])) { | ||
26 | + $GLOBALS['_SAVANT2']['error'] = array( | ||
27 | + SAVANT2_ERROR_ASSIGN => 'assign() parameters not correct', | ||
28 | + SAVANT2_ERROR_ASSIGNREF => 'assignRef() parameters not correct', | ||
29 | + SAVANT2_ERROR_COMPILER => 'compiler not an object or has no compile() method', | ||
30 | + SAVANT2_ERROR_NOFILTER => 'filter file not found', | ||
31 | + SAVANT2_ERROR_NOPLUGIN => 'plugin file not found', | ||
32 | + SAVANT2_ERROR_NOSCRIPT => 'compiled template script file not found', | ||
33 | + SAVANT2_ERROR_NOTEMPLATE => 'template source file not found', | ||
34 | + SAVANT2_ERROR_COMPILE_FAIL => 'template source failed to compile' | ||
35 | + ); | ||
36 | +} | ||
37 | + | ||
38 | +class Savant2_Error { | ||
39 | + | ||
40 | + var $code = null; | ||
41 | + var $info = array(); | ||
42 | + var $text = null; | ||
43 | + var $backtrace = null; | ||
44 | + | ||
45 | + function Savant2_Error($conf = array()) | ||
46 | + { | ||
47 | + // set public properties | ||
48 | + foreach ($conf as $key => $val) { | ||
49 | + $this->$key = $val; | ||
50 | + } | ||
51 | + | ||
52 | + // generate a backtrace | ||
53 | + if (function_exists('debug_backtrace')) { | ||
54 | + $this->backtrace = debug_backtrace(); | ||
55 | + } | ||
56 | + | ||
57 | + // extended behaviors | ||
58 | + $this->_genError(); | ||
59 | + } | ||
60 | + | ||
61 | + function _genError() | ||
62 | + { | ||
63 | + } | ||
64 | +} | ||
65 | + | ||
66 | + | ||
67 | +/** | ||
68 | +* | ||
69 | +* This is totally based on Savent by Paul M. Jones <pmjones@ciaweb.net>. | ||
70 | +* But is made much smaller... | ||
71 | +*/ | ||
72 | + | ||
73 | +class SavantSmall { | ||
74 | + | ||
75 | + var $_error = null; | ||
76 | + var $_escape = array('htmlspecialchars'); | ||
77 | + var $_output = null; | ||
78 | + | ||
79 | + var $_path = array( | ||
80 | + 'resource' => array(), | ||
81 | + 'template' => array() | ||
82 | + ); | ||
83 | + | ||
84 | + var $_restrict = false; | ||
85 | + | ||
86 | + var $_template = null; | ||
87 | + | ||
88 | + | ||
89 | + // ----------------------------------------------------------------- | ||
90 | + // | ||
91 | + // Constructor and general property setters | ||
92 | + // | ||
93 | + // ----------------------------------------------------------------- | ||
94 | + | ||
95 | + | ||
96 | + function __construct($conf = array()) | ||
97 | + { | ||
98 | + // set the default template search dirs | ||
99 | + if (isset($conf['template_path'])) { | ||
100 | + // user-defined dirs | ||
101 | + $this->setPath('template', $conf['template_path']); | ||
102 | + } else { | ||
103 | + // default directory only | ||
104 | + $this->setPath('template', null); | ||
105 | + } | ||
106 | + | ||
107 | + // set the error class | ||
108 | + if (isset($conf['error'])) { | ||
109 | + $this->setError($conf['error']); | ||
110 | + } | ||
111 | + | ||
112 | + // set the restrict flag | ||
113 | + if (isset($conf['restrict'])) { | ||
114 | + $this->setRestrict($conf['restrict']); | ||
115 | + } | ||
116 | + | ||
117 | + // set the default template | ||
118 | + if (isset($conf['template'])) { | ||
119 | + $this->setTemplate($conf['template']); | ||
120 | + } | ||
121 | + | ||
122 | + // set the output escaping callbacks | ||
123 | + if (isset($config['escape'])) { | ||
124 | + call_user_func_array( | ||
125 | + array($this, 'setEscape'), | ||
126 | + (array) $config['escape'] | ||
127 | + ); | ||
128 | + } | ||
129 | + } | ||
130 | + | ||
131 | + function setError($error) | ||
132 | + { | ||
133 | + if (! $error) { | ||
134 | + $this->_error = null; | ||
135 | + } else { | ||
136 | + $this->_error = $error; | ||
137 | + } | ||
138 | + } | ||
139 | + | ||
140 | + function setRestrict($flag = false) | ||
141 | + { | ||
142 | + if ($flag) { | ||
143 | + $this->_restrict = true; | ||
144 | + } else { | ||
145 | + $this->_restrict = false; | ||
146 | + } | ||
147 | + } | ||
148 | + | ||
149 | + function setTemplate($template) | ||
150 | + { | ||
151 | + $this->_template = $template; | ||
152 | + } | ||
153 | + | ||
154 | + | ||
155 | + // ----------------------------------------------------------------- | ||
156 | + // | ||
157 | + // Output escaping and management. | ||
158 | + // | ||
159 | + // ----------------------------------------------------------------- | ||
160 | + | ||
161 | + function setEscape() | ||
162 | + { | ||
163 | + $this->_escape = func_get_args(); | ||
164 | + } | ||
165 | + | ||
166 | + function addEscape() | ||
167 | + { | ||
168 | + $args = func_get_args(); | ||
169 | + $this->_escape = array_merge($this->_escape, $args); | ||
170 | + } | ||
171 | + | ||
172 | + function getEscape() | ||
173 | + { | ||
174 | + return $this->_escape; | ||
175 | + } | ||
176 | + | ||
177 | + function escape($value) | ||
178 | + { | ||
179 | + // if value is not set return | ||
180 | + if (! isset ($value)) | ||
181 | + return $value; | ||
182 | + | ||
183 | + // were custom callbacks passed? | ||
184 | + if (func_num_args() == 1) { | ||
185 | + | ||
186 | + // no, only a value was passed. | ||
187 | + // loop through the predefined callbacks. | ||
188 | + foreach ($this->_escape as $func) { | ||
189 | + $value = call_user_func($func, $value); | ||
190 | + } | ||
191 | + | ||
192 | + } else { | ||
193 | + | ||
194 | + // yes, use the custom callbacks instead. | ||
195 | + $callbacks = func_get_args(); | ||
196 | + | ||
197 | + // drop $value | ||
198 | + array_shift($callbacks); | ||
199 | + | ||
200 | + // loop through custom callbacks. | ||
201 | + foreach ($callbacks as $func) { | ||
202 | + $value = call_user_func($func, $value); | ||
203 | + } | ||
204 | + | ||
205 | + } | ||
206 | + | ||
207 | + return $value; | ||
208 | + } | ||
209 | + | ||
210 | + function eprint($value) | ||
211 | + { | ||
212 | + $args = func_get_args(); | ||
213 | + echo call_user_func_array( | ||
214 | + array($this, 'escape'), | ||
215 | + $args | ||
216 | + ); | ||
217 | + } | ||
218 | + | ||
219 | + function _($value) | ||
220 | + { | ||
221 | + $args = func_get_args(); | ||
222 | + return call_user_func_array( | ||
223 | + array($this, 'eprint'), | ||
224 | + $args | ||
225 | + ); | ||
226 | + } | ||
227 | + | ||
228 | + | ||
229 | + | ||
230 | + // ----------------------------------------------------------------- | ||
231 | + // | ||
232 | + // Path management and file finding | ||
233 | + // | ||
234 | + // ----------------------------------------------------------------- | ||
235 | + | ||
236 | + function setPath($type, $new) | ||
237 | + { | ||
238 | + // clear out the prior search dirs | ||
239 | + $this->_path[$type] = array(); | ||
240 | + | ||
241 | + // convert from string to path | ||
242 | + if (is_string($new) && ! strpos('://', $new)) { | ||
243 | + // the search config is a string, and it's not a stream | ||
244 | + // identifier (the "://" piece), add it as a path | ||
245 | + // string. | ||
246 | + $new = explode(PATH_SEPARATOR, $new); | ||
247 | + } else { | ||
248 | + // force to array | ||
249 | + settype($new, 'array'); | ||
250 | + } | ||
251 | + | ||
252 | + // always add the fallback directories as last resort | ||
253 | + switch (strtolower($type)) { | ||
254 | + case 'template': | ||
255 | + $this->addPath($type, '.'); | ||
256 | + break; | ||
257 | + case 'resource': | ||
258 | + $this->addPath($type, dirname(__FILE__) . '/Savant2/'); | ||
259 | + break; | ||
260 | + } | ||
261 | + | ||
262 | + // actually add the user-specified directories | ||
263 | + foreach ($new as $dir) { | ||
264 | + $this->addPath($type, $dir); | ||
265 | + } | ||
266 | + } | ||
267 | + | ||
268 | + function addPath($type, $dir) | ||
269 | + { | ||
270 | + // no surrounding spaces allowed! | ||
271 | + $dir = trim($dir); | ||
272 | + | ||
273 | + // add trailing separators as needed | ||
274 | + if (strpos($dir, '://') && substr($dir, -1) != '/') { | ||
275 | + // stream | ||
276 | + $dir .= '/'; | ||
277 | + } elseif (substr($dir, -1) != DIRECTORY_SEPARATOR) { | ||
278 | + // directory | ||
279 | + $dir .= DIRECTORY_SEPARATOR; | ||
280 | + } | ||
281 | + | ||
282 | + // add to the top of the search dirs | ||
283 | + array_unshift($this->_path[$type], $dir); | ||
284 | + } | ||
285 | + | ||
286 | + function getPath($type = null) | ||
287 | + { | ||
288 | + if (! $type) { | ||
289 | + return $this->_path; | ||
290 | + } else { | ||
291 | + return $this->_path[$type]; | ||
292 | + } | ||
293 | + } | ||
294 | + | ||
295 | + function findFile($type, $file) | ||
296 | + { | ||
297 | + // get the set of paths | ||
298 | + $set = $this->getPath($type); | ||
299 | + | ||
300 | + // start looping through them | ||
301 | + foreach ($set as $path) { | ||
302 | + | ||
303 | + // get the path to the file | ||
304 | + $fullname = $path . $file; | ||
305 | + | ||
306 | + // are we doing path checks? | ||
307 | + if (! $this->_restrict) { | ||
308 | + | ||
309 | + // no. this is faster but less secure. | ||
310 | + if (file_exists($fullname) && is_readable($fullname)) { | ||
311 | + return $fullname; | ||
312 | + } | ||
313 | + | ||
314 | + } else { | ||
315 | + | ||
316 | + // yes. this is slower, but attempts to restrict | ||
317 | + // access only to defined paths. | ||
318 | + | ||
319 | + // is the path based on a stream? | ||
320 | + if (strpos('://', $path) === false) { | ||
321 | + // not a stream, so do a realpath() to avoid | ||
322 | + // directory traversal attempts on the local file | ||
323 | + // system. Suggested by Ian Eure, initially | ||
324 | + // rejected, but then adopted when the secure | ||
325 | + // compiler was added. | ||
326 | + $path = realpath($path); // needed for substr() later | ||
327 | + $fullname = realpath($fullname); | ||
328 | + } | ||
329 | + | ||
330 | + // the substr() check added by Ian Eure to make sure | ||
331 | + // that the realpath() results in a directory registered | ||
332 | + // with Savant so that non-registered directores are not | ||
333 | + // accessible via directory traversal attempts. | ||
334 | + if (file_exists($fullname) && is_readable($fullname) && | ||
335 | + substr($fullname, 0, strlen($path)) == $path) { | ||
336 | + return $fullname; | ||
337 | + } | ||
338 | + } | ||
339 | + } | ||
340 | + | ||
341 | + // could not find the file in the set of paths | ||
342 | + return false; | ||
343 | + } | ||
344 | + | ||
345 | + | ||
346 | + // ----------------------------------------------------------------- | ||
347 | + // | ||
348 | + // Variable and reference assignment | ||
349 | + // | ||
350 | + // ----------------------------------------------------------------- | ||
351 | + | ||
352 | + function assign() | ||
353 | + { | ||
354 | + // this method is overloaded. | ||
355 | + $arg = func_get_args(); | ||
356 | + | ||
357 | + // must have at least one argument. no error, just do nothing. | ||
358 | + if (! isset($arg[0])) { | ||
359 | + return; | ||
360 | + } | ||
361 | + | ||
362 | + // assign by object | ||
363 | + if (is_object($arg[0])) { | ||
364 | + // assign public properties | ||
365 | + foreach (get_object_vars($arg[0]) as $key => $val) { | ||
366 | + if (substr($key, 0, 1) != '_') { | ||
367 | + $this->$key = $val; | ||
368 | + } | ||
369 | + } | ||
370 | + return; | ||
371 | + } | ||
372 | + | ||
373 | + // assign by associative array | ||
374 | + if (is_array($arg[0])) { | ||
375 | + foreach ($arg[0] as $key => $val) { | ||
376 | + if (substr($key, 0, 1) != '_') { | ||
377 | + $this->$key = $val; | ||
378 | + } | ||
379 | + } | ||
380 | + return; | ||
381 | + } | ||
382 | + | ||
383 | + // assign by string name and mixed value. | ||
384 | + // | ||
385 | + // we use array_key_exists() instead of isset() becuase isset() | ||
386 | + // fails if the value is set to null. | ||
387 | + if (is_string($arg[0]) && | ||
388 | + substr($arg[0], 0, 1) != '_' && | ||
389 | + array_key_exists(1, $arg)) { | ||
390 | + $this->$arg[0] = $arg[1]; | ||
391 | + } else { | ||
392 | + return $this->_genError(SAVANT2_ERROR_ASSIGN, $arg); | ||
393 | + } | ||
394 | + } | ||
395 | + | ||
396 | + function assignRef($key, &$val) | ||
397 | + { | ||
398 | + if (is_string($key) && substr($key, 0, 1) != '_') { | ||
399 | + $this->$key =& $val; | ||
400 | + } else { | ||
401 | + return $this->_genError( | ||
402 | + SAVANT2_ERROR_ASSIGNREF, | ||
403 | + array('key' => $key, 'val' => $val) | ||
404 | + ); | ||
405 | + } | ||
406 | + } | ||
407 | + | ||
408 | + function clear($var = null) | ||
409 | + { | ||
410 | + if (is_null($var)) { | ||
411 | + // clear all variables | ||
412 | + $var = array_keys(get_object_vars($this)); | ||
413 | + } else { | ||
414 | + // clear specific variables | ||
415 | + settype($var, 'array'); | ||
416 | + } | ||
417 | + | ||
418 | + // clear out the selected variables | ||
419 | + foreach ($var as $name) { | ||
420 | + if (substr($name, 0, 1) != '_' && isset($this->$name)) { | ||
421 | + unset($this->$name); | ||
422 | + } | ||
423 | + } | ||
424 | + } | ||
425 | + | ||
426 | + function getVars($key = null) | ||
427 | + { | ||
428 | + if (is_null($key)) { | ||
429 | + $key = array_keys(get_object_vars($this)); | ||
430 | + } | ||
431 | + | ||
432 | + if (is_array($key)) { | ||
433 | + // return a series of vars | ||
434 | + $tmp = array(); | ||
435 | + foreach ($key as $var) { | ||
436 | + if (substr($var, 0, 1) != '_' && isset($this->$var)) { | ||
437 | + $tmp[$var] = $this->$var; | ||
438 | + } | ||
439 | + } | ||
440 | + return $tmp; | ||
441 | + } else { | ||
442 | + // return a single var | ||
443 | + if (substr($key, 0, 1) != '_' && isset($this->$key)) { | ||
444 | + return $this->$key; | ||
445 | + } | ||
446 | + } | ||
447 | + } | ||
448 | + | ||
449 | + | ||
450 | + // ----------------------------------------------------------------- | ||
451 | + // | ||
452 | + // Template processing | ||
453 | + // | ||
454 | + // ----------------------------------------------------------------- | ||
455 | + | ||
456 | + function loadTemplate($tpl = null, $setScript = false) | ||
457 | + { | ||
458 | + // set to default template if none specified. | ||
459 | + if (is_null($tpl)) { | ||
460 | + $tpl = $this->_template; | ||
461 | + } | ||
462 | + | ||
463 | + // find the template source. | ||
464 | + $file = $this->findFile('template', $tpl); | ||
465 | + if (! $file) { | ||
466 | + return $this->_genError( | ||
467 | + SAVANT2_ERROR_NOTEMPLATE, | ||
468 | + array('template' => $tpl) | ||
469 | + ); | ||
470 | + } | ||
471 | + | ||
472 | + // no compiling requested, return the source path | ||
473 | + $this->_script = $file; | ||
474 | + return $file; | ||
475 | + } | ||
476 | + | ||
477 | + function findTemplate($tpl = null) | ||
478 | + { | ||
479 | + return $this->loadTemplate($tpl, false); | ||
480 | + } | ||
481 | + | ||
482 | + function fetch($_tpl = null) | ||
483 | + { | ||
484 | + // clear prior output | ||
485 | + $this->_output = null; | ||
486 | + | ||
487 | + // load the template script | ||
488 | + $_result = $this->loadTemplate($_tpl, true); | ||
489 | + | ||
490 | + // is there a template script to be processed? | ||
491 | + if ($this->isError($_result)) { | ||
492 | + return $_result; | ||
493 | + } | ||
494 | + | ||
495 | + // unset so as not to introduce into template scope | ||
496 | + unset($_tpl); | ||
497 | + unset($_result); | ||
498 | + | ||
499 | + // never allow a 'this' property | ||
500 | + if (isset($this->this)) { | ||
501 | + unset($this->this); | ||
502 | + } | ||
503 | + | ||
504 | + // start capturing output into a buffer | ||
505 | + ob_start(); | ||
506 | + | ||
507 | + // include the requested template filename in the local scope | ||
508 | + // (this will execute the view logic). | ||
509 | + include $this->_script; | ||
510 | + | ||
511 | + // done with the requested template; get the buffer and | ||
512 | + // clear it. | ||
513 | + $this->_output = ob_get_contents(); | ||
514 | + ob_end_clean(); | ||
515 | + | ||
516 | + // done! | ||
517 | + return $this->_output; | ||
518 | + } | ||
519 | + | ||
520 | + function display($tpl = null) | ||
521 | + { | ||
522 | + $result = $this->fetch($tpl); | ||
523 | + if ($this->isError($result)) { | ||
524 | + return $result; | ||
525 | + } else { | ||
526 | + echo $result; | ||
527 | + } | ||
528 | + } | ||
529 | + | ||
530 | + // ----------------------------------------------------------------- | ||
531 | + // | ||
532 | + // Error handling | ||
533 | + // | ||
534 | + // ----------------------------------------------------------------- | ||
535 | + | ||
536 | + function &_genError($code, $info = array()) | ||
537 | + { | ||
538 | + // the error config array | ||
539 | + $conf = array( | ||
540 | + 'code' => $code, | ||
541 | + 'text' => 'Savant2: ', | ||
542 | + 'info' => (array) $info | ||
543 | + ); | ||
544 | + | ||
545 | + // set an error message from the globals | ||
546 | + if (isset($GLOBALS['_SAVANT2']['error'][$code])) { | ||
547 | + $conf['text'] .= $GLOBALS['_SAVANT2']['error'][$code]; | ||
548 | + } else { | ||
549 | + $conf['text'] .= '???'; | ||
550 | + } | ||
551 | + | ||
552 | + // set up the error class name | ||
553 | + if ($this->_error) { | ||
554 | + $class = 'Savant2_Error_' . $this->_error; | ||
555 | + } else { | ||
556 | + $class = 'Savant2_Error'; | ||
557 | + } | ||
558 | + | ||
559 | + // set up the error class file name | ||
560 | + $file = $class . '.php'; | ||
561 | + | ||
562 | + // is it loaded? | ||
563 | + if (! class_exists($class)) { | ||
564 | + | ||
565 | + // find the error class | ||
566 | + $result = $this->findFile('resource', $file); | ||
567 | + if (! $result) { | ||
568 | + // could not find the custom error class, revert to | ||
569 | + // Savant_Error base class. | ||
570 | + $class = 'Savant2_Error'; | ||
571 | + $result = dirname(__FILE__) . '/Savant2/Error.php'; | ||
572 | + } | ||
573 | + | ||
574 | + // include the error class | ||
575 | + include_once $result; | ||
576 | + } | ||
577 | + | ||
578 | + // instantiate and return the error class | ||
579 | + $err = new $class($conf); | ||
580 | + return $err; | ||
581 | + } | ||
582 | + | ||
583 | + function isError(&$obj) | ||
584 | + { | ||
585 | + if (is_object($obj)) { | ||
586 | + if ($obj instanceof Savant2_Error || | ||
587 | + is_subclass_of($obj, 'Savant2_Error')) { | ||
588 | + return true; | ||
589 | + } | ||
590 | + } | ||
591 | + | ||
592 | + return false; | ||
593 | + } | ||
594 | +} | ||
595 | +?> |
libs/c_mysqlDb.php
0 → 100644
1 | +<?php | ||
2 | + | ||
3 | +require_once LIBDIR . 'errException.php'; | ||
4 | + | ||
5 | +class mysqlQueryException extends errException | ||
6 | +{ | ||
7 | + private $query; | ||
8 | + | ||
9 | + function __construct ($msg, $no, $file, $line, $context, $query) | ||
10 | + { | ||
11 | + parent::__construct ($msg, $no, $file, $line, $context); | ||
12 | + | ||
13 | + $this->query = $query; | ||
14 | + } | ||
15 | + | ||
16 | + function __toString () | ||
17 | + { | ||
18 | + $retStr = "Fehler in Query: \n"; | ||
19 | + $retStr .= $this->query . "\n\n"; | ||
20 | + $retStr .= $this->message . "\n\n"; | ||
21 | + $retStr .= 'Datei: ' . $this->file . "\n"; | ||
22 | + $retStr .= 'Zeile: ' . $this->line . "\n\n"; | ||
23 | + | ||
24 | + if ($this->errContext != NULL) | ||
25 | + { | ||
26 | + $retStr .= "Fehler Context: \n"; | ||
27 | + $retStr .= print_r ($this->errContext, TRUE) . "\n"; | ||
28 | + } | ||
29 | + | ||
30 | + $retStr .= "Aufruf Stack: \n"; | ||
31 | + $retStr .= $this->getTraceAsString () . "\n"; | ||
32 | + | ||
33 | + return $retStr; | ||
34 | + } | ||
35 | +} | ||
36 | + | ||
37 | +/*** | ||
38 | + * This class depends on errException.php, as it does not handle any | ||
39 | + * error at all, except it catches exceptions. | ||
40 | + */ | ||
41 | +class c_mysqlDb | ||
42 | +{ | ||
43 | + private $connectRes; | ||
44 | + private $host; | ||
45 | + private $user; | ||
46 | + private $pass; | ||
47 | + private $database; | ||
48 | + | ||
49 | + private $result = array (); | ||
50 | + private $resCount = 0; | ||
51 | + | ||
52 | + private function getAllData ($resId, $method, $class = NULL, $parm = NULL) | ||
53 | + { | ||
54 | + $ret = array (); | ||
55 | + | ||
56 | + if (isset ($this->result[$resId]) && $this->result[$resId] != FALSE) | ||
57 | + { | ||
58 | + try | ||
59 | + { | ||
60 | + mysql_data_seek ($this->result[$resId], 0); | ||
61 | + } | ||
62 | + catch (Exception $e) | ||
63 | + { | ||
64 | + if ($e->getCode () != 2) | ||
65 | + throw ($e); | ||
66 | + // wenn der Fehlercode gleich 2 ist war das resultset nur leer | ||
67 | + // und ich mache weiter. | ||
68 | + } | ||
69 | + | ||
70 | + if ($class === NULL) | ||
71 | + $row = $method ($this->result[$resId]); | ||
72 | + else | ||
73 | + $row = $method ($this->result[$resId], $class, $parm); | ||
74 | + | ||
75 | + while ($row != FALSE) | ||
76 | + { | ||
77 | + $ret[] = $row; | ||
78 | + if ($class === NULL) | ||
79 | + $row = $method ($this->result[$resId]); | ||
80 | + else | ||
81 | + $row = $method ($this->result[$resId], $class, $parm); | ||
82 | + } | ||
83 | + } | ||
84 | + | ||
85 | + return $ret; | ||
86 | + } | ||
87 | + | ||
88 | + function __construct ($host, $user, $pass, $db) | ||
89 | + { | ||
90 | + /* init member */ | ||
91 | + $this->host = $host; | ||
92 | + $this->user = $user; | ||
93 | + $this->pass = $pass; | ||
94 | + $this->database = $db; | ||
95 | + | ||
96 | + /* connect and select db */ | ||
97 | + $this->connectRes = mysql_pconnect ( | ||
98 | + $this->host, | ||
99 | + $this->user, | ||
100 | + $this->pass); | ||
101 | + mysql_select_db ($this->database); | ||
102 | + mysql_query ('set character set utf8'); | ||
103 | + } | ||
104 | + | ||
105 | + function __destruct () | ||
106 | + { | ||
107 | + /* close connection */ | ||
108 | + mysql_close ($this->connectRes); | ||
109 | + } | ||
110 | + | ||
111 | + function query ($query) | ||
112 | + { | ||
113 | + try | ||
114 | + { | ||
115 | + for ($i = 0; $i < $this->resCount; $i++) | ||
116 | + if (! isset ($this->result[$i])) | ||
117 | + break; | ||
118 | + | ||
119 | + if ($i == $this->resCount) | ||
120 | + $i = $this->resCount = $this->resCount + 1; | ||
121 | + | ||
122 | + $this->result[$i] = mysql_query ($query); | ||
123 | + | ||
124 | + if ($this->result[$i] === FALSE) | ||
125 | + throw new Exception (mysql_error (), mysql_errno ()); | ||
126 | + | ||
127 | + return $i; | ||
128 | + } | ||
129 | + catch (errException $e) | ||
130 | + { | ||
131 | + throw new mysqlQueryException ( | ||
132 | + $e->getMessage (), | ||
133 | + $e->getCode (), | ||
134 | + $e->getFile (), | ||
135 | + $e->getLine (), | ||
136 | + $e->getErrContext (), | ||
137 | + $query); | ||
138 | + } | ||
139 | + catch (Exception $e) | ||
140 | + { | ||
141 | + throw new mysqlQueryException ( | ||
142 | + $e->getMessage (), | ||
143 | + $e->getCode (), | ||
144 | + $e->getFile (), | ||
145 | + $e->getLine (), | ||
146 | + NULL, | ||
147 | + $query); | ||
148 | + } | ||
149 | + } | ||
150 | + | ||
151 | + function freeResult ($resId) | ||
152 | + { | ||
153 | + if (is_resource ($this->result[$resId])) | ||
154 | + mysql_free_result ($this->result[$resId]); | ||
155 | + unset ($this->result[$resId]); | ||
156 | + } | ||
157 | + | ||
158 | + function resetResult ($resId) | ||
159 | + { | ||
160 | + mysql_data_seek ($this->result[$resId], 0); | ||
161 | + } | ||
162 | + | ||
163 | + function getResult ($resId) | ||
164 | + { | ||
165 | + return $this->result[$resId]; | ||
166 | + } | ||
167 | + | ||
168 | + function getAssoc ($resId) | ||
169 | + { | ||
170 | + return $this->getAllData ($resId, 'mysql_fetch_assoc'); | ||
171 | + } | ||
172 | + | ||
173 | + function getArray ($resId) | ||
174 | + { | ||
175 | + return $this->getAllData ($resId, 'mysql_fetch_row'); | ||
176 | + } | ||
177 | + | ||
178 | + function getObject ($resId, $class, $parm = NULL) | ||
179 | + { | ||
180 | + return $this->getAllData ($resId, 'mysql_fetch_object', $class, $parm); | ||
181 | + } | ||
182 | + | ||
183 | + function rows ($resId) | ||
184 | + { | ||
185 | + return mysql_num_rows ($this->result[$resId]); | ||
186 | + } | ||
187 | + | ||
188 | + function get ($resId, $row, $col) | ||
189 | + { | ||
190 | + if ($row > mysql_num_rows ($this->result[$resId])) | ||
191 | + return NULL; | ||
192 | + | ||
193 | + mysql_data_seek ($this->result[$resId], $row); | ||
194 | + | ||
195 | + if (is_int ($col) && $col > mysql_num_fields ($this->result[$resId])) | ||
196 | + return NULL; | ||
197 | + | ||
198 | + if (is_string ($col)) | ||
199 | + { | ||
200 | + $rowData = mysql_fetch_assoc ($this->result[$resId]); | ||
201 | + | ||
202 | + if (! array_key_exists ($col, $rowData)) | ||
203 | + return NULL; | ||
204 | + } | ||
205 | + | ||
206 | + return mysql_result ($this->result[$resId], $row, $col); | ||
207 | + } | ||
208 | + | ||
209 | + // === einige nuetzlich Sachen ======================================== | ||
210 | + function setLocale ($locale) | ||
211 | + { | ||
212 | + $resId = $this->query ('set @LANG=\'' . $locale . '\''); | ||
213 | + $this->freeResult ($resId); | ||
214 | + } | ||
215 | +}; | ||
216 | + | ||
217 | +/* quote string (und pack ' herum) */ | ||
218 | +function quoteS ($var) | ||
219 | +{ | ||
220 | + if ($var === NULL) | ||
221 | + return 'NULL'; | ||
222 | + | ||
223 | + return "'" . addslashes ($var) . "'"; | ||
224 | +} | ||
225 | + | ||
226 | +?> |
libs/c_person.php
0 → 100644
1 | +<?php | ||
2 | + | ||
3 | +require_once LIBDIR . 'c_xmlify.php'; | ||
4 | + | ||
5 | +class c_person extends c_xmlify | ||
6 | +{ | ||
7 | + protected $personId; | ||
8 | + protected $photographerId; | ||
9 | + protected $ownerId; | ||
10 | + protected $firstname; | ||
11 | + protected $surname; | ||
12 | + protected $company; | ||
13 | + protected $email; | ||
14 | + protected $url; | ||
15 | + protected $cameraId; | ||
16 | + protected $wmWidth; | ||
17 | + protected $wmHeight; | ||
18 | + protected $wmXPos; | ||
19 | + protected $wmYPos; | ||
20 | + | ||
21 | + function __construct ($xr) | ||
22 | + { | ||
23 | + if (NULL !== $xr) | ||
24 | + parent::__construct ($xr); | ||
25 | + } | ||
26 | + | ||
27 | + function get_personId () { return $this->personId; } | ||
28 | + function get_photographerId () { return $this->photographerId; } | ||
29 | + function get_ownerId () { return $this->ownerId; } | ||
30 | + function get_firstname () { return $this->firstname; } | ||
31 | + function get_surname () { return $this->surname; } | ||
32 | + function get_company () { return $this->company; } | ||
33 | + function get_email () { return $this->email; } | ||
34 | + function get_url () { return $this->url; } | ||
35 | + function get_cameraId () { return $this->cameraId; } | ||
36 | + function get_wmWidth () { return $this->wmWidth; } | ||
37 | + function get_wmHeight () { return $this->wmHeight; } | ||
38 | + function get_wmXPos () { return $this->wmXPos; } | ||
39 | + function get_wmYPos () { return $this->wmYPos; } | ||
40 | +}; | ||
41 | + | ||
42 | +?> |
libs/c_personAdmin.php
0 → 100644
1 | +<?php | ||
2 | + | ||
3 | +require_once PICTOOL_SAVANT; | ||
4 | +require_once LIBDIR . 'c_mysqlDb.php'; | ||
5 | +require_once LIBDIR . 'errException.php'; | ||
6 | +require_once LIBDIR . 'c_person.php'; | ||
7 | + | ||
8 | +class c_personAdmin extends c_picToolSavant | ||
9 | +{ | ||
10 | + private $dbHandle = NULL; | ||
11 | + private $_persons; | ||
12 | + | ||
13 | + function __construct ($locale = NULL) | ||
14 | + { | ||
15 | + parent::__construct (); | ||
16 | + | ||
17 | + setErrExceptionMapping (); | ||
18 | + | ||
19 | + try | ||
20 | + { | ||
21 | + $this->dbHandle = new c_mysqlDb ( | ||
22 | + self::DBHOST, self::DBUSER, self::DBPASS, self::DBNAME); | ||
23 | + | ||
24 | + if (is_string ($locale)) | ||
25 | + $this->dbHandle->setLocale ($locale); | ||
26 | + } | ||
27 | + catch (Exception $e) | ||
28 | + { | ||
29 | + if ($this->dbHandle !== NULL) | ||
30 | + unset ($this->dbHandle); | ||
31 | + | ||
32 | + print "<pre>\n"; | ||
33 | + print "Konnte Datenbank nicht initialisieren!\n"; | ||
34 | + print $e; | ||
35 | + print "</pre>\n"; | ||
36 | + exit (1); | ||
37 | + } | ||
38 | + | ||
39 | + resetErrExceptionMapping (); | ||
40 | + | ||
41 | + $this->_persons = $this->getPersons (); | ||
42 | + } | ||
43 | + | ||
44 | + function __destruct () | ||
45 | + { | ||
46 | + if (isset ($this->persons)) | ||
47 | + unset ($this->persons); | ||
48 | + | ||
49 | + if ($this->dbHandle !== NULL) | ||
50 | + unset ($this->dbHandle); | ||
51 | + } | ||
52 | + | ||
53 | + private function getPersons () | ||
54 | + { | ||
55 | + $result = NULL; | ||
56 | + | ||
57 | + setErrExceptionMapping (); | ||
58 | + try | ||
59 | + { | ||
60 | + $resId = $this->dbHandle->query ( | ||
61 | + 'SELECT * from personsView ORDER BY surname, firstname'); | ||
62 | + $_result = $this->dbHandle->getObject ( | ||
63 | + $resId, 'c_person', array (NULL)); | ||
64 | + $this->dbHandle->freeResult ($resId); | ||
65 | + } | ||
66 | + catch (Exception $e) | ||
67 | + { | ||
68 | + print "jokus<br/>"; | ||
69 | + if (isset ($_result)) | ||
70 | + unset ($_result); | ||
71 | + if (isset ($resId)) | ||
72 | + $this->dbHandle->freeResult ($resId); | ||
73 | + | ||
74 | + print "<pre>"; | ||
75 | + print $e; | ||
76 | + print "</pre>"; | ||
77 | + } | ||
78 | + resetErrExceptionMapping (); | ||
79 | + | ||
80 | + foreach ($_result as $res) | ||
81 | + $result[$res->get_personId ()] = $res; | ||
82 | + unset ($_result); | ||
83 | + | ||
84 | + return $result; | ||
85 | + } | ||
86 | + | ||
87 | + function personSearch1 () | ||
88 | + { | ||
89 | + $names = array (); | ||
90 | + | ||
91 | + foreach ($this->_persons as $person) | ||
92 | + $names[$person->get_surname ()][] = | ||
93 | + array ($person->get_firstname (), $person); | ||
94 | + | ||
95 | + $this->assign ('names', $names); | ||
96 | + | ||
97 | + return $this->fetch ('personAdmin/personSearch1.tpl.php'); | ||
98 | + } | ||
99 | + | ||
100 | + function personInUp () | ||
101 | + { | ||
102 | + return $this->fetch ('personAdmin/personInUp.tpl.php'); | ||
103 | + } | ||
104 | + | ||
105 | + function show () | ||
106 | + { | ||
107 | + $this->assign ('personSearch1', $this->personSearch1 ()); | ||
108 | + $this->assign ('personInUp', $this->personInUp ()); | ||
109 | + | ||
110 | + $this->display ('personAdmin/personAdmin.tpl.php'); | ||
111 | + } | ||
112 | +}; | ||
113 | + | ||
114 | +?> |
libs/c_picToolSavant.php
0 → 100644
1 | +<?php | ||
2 | + | ||
3 | +require_once SAVANT_SMALL; | ||
4 | + | ||
5 | +class c_picToolSavant extends SavantSmall | ||
6 | +{ | ||
7 | + const DBHOST = 'localhost'; | ||
8 | + const DBUSER = 'picadmin'; | ||
9 | + const DBPASS = '1Rz3ftb.'; | ||
10 | + const DBNAME = 'bilder_new'; | ||
11 | + | ||
12 | + function __construct() | ||
13 | + { | ||
14 | + parent::__construct (); | ||
15 | + | ||
16 | + $this->addPath ('template', TPLDIR); | ||
17 | + } | ||
18 | + | ||
19 | + function is_set($varname) | ||
20 | + { | ||
21 | + if ($this->getVars($varname)) | ||
22 | + return true; | ||
23 | + return false; | ||
24 | + } | ||
25 | +} | ||
26 | + | ||
27 | +?> |
libs/c_xmlify.php
0 → 100644
1 | +<?php | ||
2 | + | ||
3 | +/* | ||
4 | + * xml stream to native vars | ||
5 | + */ | ||
6 | +function xmlToVar ($xr) | ||
7 | +{ | ||
8 | + if ($xr->isEmptyElement == TRUE) | ||
9 | + return NULL; | ||
10 | + | ||
11 | + $ret = NULL; | ||
12 | + | ||
13 | + while ($xr->read () && | ||
14 | + ! ($xr->nodeType == 15 && | ||
15 | + $xr->name == 'variable')) | ||
16 | + { | ||
17 | + if ($xr->nodeType == 3 && $xr->hasValue == TRUE) | ||
18 | + // der iconv is nur drin weil evolver ihre Seiten dummer weise | ||
19 | + // als latin1 verschicken, aus der Datenbank aber utf-8 kommt. | ||
20 | + $ret = iconv ("UTF-8", "ISO-8859-1", $xr->value); | ||
21 | + } | ||
22 | + | ||
23 | + return $ret; | ||
24 | +} | ||
25 | + | ||
26 | +function xmlToArray ($xr) | ||
27 | +{ | ||
28 | + $ret = array (); | ||
29 | + | ||
30 | + if ($xr->isEmptyElement == TRUE) | ||
31 | + return $ret; | ||
32 | + | ||
33 | + while ($xr->read () && | ||
34 | + ! ($xr->nodeType == 15 && | ||
35 | + $xr->name == 'array')) | ||
36 | + { | ||
37 | + if ($xr->nodeType == 1 && | ||
38 | + $xr->name == 'item') | ||
39 | + { | ||
40 | + $key = $xr->getAttribute ('key'); | ||
41 | + | ||
42 | + while ($xr->read () && | ||
43 | + ! ($xr->nodeType == 15 && | ||
44 | + $xr->name == 'item')) | ||
45 | + { | ||
46 | + if ($xr->nodeType == 1) | ||
47 | + { | ||
48 | + switch ($xr->name) | ||
49 | + { | ||
50 | + case 'variable': | ||
51 | + $ret[$key] = xmlToVar ($xr); | ||
52 | + $type = $xr->getAttribute ('type'); | ||
53 | + settype ($ret[$key], $type); | ||
54 | + break; | ||
55 | + | ||
56 | + case 'array': | ||
57 | + $ret[$key] = xmlToArray ($xr); | ||
58 | + break; | ||
59 | + | ||
60 | + case 'class': | ||
61 | + $class = $xr->getAttribute ('class'); | ||
62 | + $ret[$key] = new $class ($xr); | ||
63 | + } | ||
64 | + } | ||
65 | + } | ||
66 | + } | ||
67 | + } | ||
68 | + | ||
69 | + return $ret; | ||
70 | +} | ||
71 | + | ||
72 | +/* | ||
73 | + * native vars to xml stream | ||
74 | + */ | ||
75 | +function varToXml ($xw, $name, $val) | ||
76 | +{ | ||
77 | + $xw->startElement ('variable'); | ||
78 | + | ||
79 | + if ($name !== NULL) | ||
80 | + $xw->writeAttribute ('name', $name); | ||
81 | + | ||
82 | + $xw->writeAttribute ('type', gettype ($val)); | ||
83 | + | ||
84 | + $xw->text ($val); | ||
85 | + | ||
86 | + $xw->endElement (); | ||
87 | +} | ||
88 | + | ||
89 | +function arrayToXml ($xw, $name, $arr) | ||
90 | +{ | ||
91 | + $xw->startElement ('array'); | ||
92 | + | ||
93 | + if ($name !== NULL) | ||
94 | + $xw->writeAttribute ('name', $name); | ||
95 | + | ||
96 | + foreach ($arr as $key => $val) | ||
97 | + { | ||
98 | + $xw->startElement ('item'); | ||
99 | + $xw->writeAttribute ('key', $key); | ||
100 | + | ||
101 | + if (is_array ($val)) | ||
102 | + { | ||
103 | + arrayToXml ($xw, NULL, $val); | ||
104 | + } | ||
105 | + else if (is_object ($val)) | ||
106 | + { | ||
107 | + if (in_array ('toXml', get_class_methods ($val)) == TRUE) | ||
108 | + { | ||
109 | + $val->toXml ($xw); | ||
110 | + } | ||
111 | + } | ||
112 | + else | ||
113 | + { | ||
114 | + varToXml ($xw, NULL, $val); | ||
115 | + } | ||
116 | + | ||
117 | + $xw->endElement (); | ||
118 | + } | ||
119 | + | ||
120 | + $xw->endElement (); | ||
121 | +} | ||
122 | + | ||
123 | +function xmlify ($val) | ||
124 | +{ | ||
125 | + $xw = new xmlWriter (); | ||
126 | + $xw->openMemory (); | ||
127 | + $xw->setIndent (TRUE); | ||
128 | + $xw->startDocument ('1.0', 'UTF-8'); | ||
129 | + | ||
130 | + if (is_array ($val)) | ||
131 | + { | ||
132 | + arrayToXml ($xw, NULL, $val); | ||
133 | + } | ||
134 | + else if (is_object ($val)) | ||
135 | + { | ||
136 | + if (in_array ('toXml', get_class_methods ($val)) == TRUE) | ||
137 | + { | ||
138 | + $val->toXml ($xw); | ||
139 | + } | ||
140 | + } | ||
141 | + else | ||
142 | + { | ||
143 | + varToXml ($xw, NULL, $val); | ||
144 | + } | ||
145 | + | ||
146 | + $res = $xw->outputMemory(TRUE); | ||
147 | + unset ($xw); | ||
148 | + | ||
149 | + return $res; | ||
150 | +} | ||
151 | + | ||
152 | +function deXmlify ($xmldata) | ||
153 | +{ | ||
154 | + $ret = NULL; | ||
155 | + | ||
156 | +// print "<pre>"; | ||
157 | +// var_dump (str_replace ( | ||
158 | +// array ("<", ">"), array ("<", ">") , $xmldata)); | ||
159 | +// print "</pre>"; | ||
160 | +// exit (1); | ||
161 | + | ||
162 | + $xr = new XMLReader (); | ||
163 | + $xr->XML ($xmldata); | ||
164 | + | ||
165 | + $xr->read (); | ||
166 | + | ||
167 | + switch ($xr->name) | ||
168 | + { | ||
169 | + case 'variable': $ret = xmlToVar ($xr); break; | ||
170 | + case 'array': $ret = xmlToArray ($xr); break; | ||
171 | + case 'class': | ||
172 | + $class = $xr->getAttribute ('class'); | ||
173 | + $ret = new $class ($xr); | ||
174 | + } | ||
175 | + | ||
176 | + $xr->close (); | ||
177 | + | ||
178 | + return $ret; | ||
179 | +} | ||
180 | + | ||
181 | +class c_xmlify | ||
182 | +{ | ||
183 | + function __construct ($xr) | ||
184 | + { | ||
185 | + if ($xr->isEmptyElement == TRUE) | ||
186 | + return; | ||
187 | + | ||
188 | + while ($xr->read () && | ||
189 | + ! ($xr->nodeType == 15 && | ||
190 | + $xr->name == 'class')) | ||
191 | + { | ||
192 | + if ($xr->nodeType == 1) | ||
193 | + { | ||
194 | + $name = $xr->getAttribute ('name'); | ||
195 | + | ||
196 | + switch ($xr->name) | ||
197 | + { | ||
198 | + case 'variable': | ||
199 | + $this->$name = xmlToVar ($xr); | ||
200 | + $type = $xr->getAttribute ('type'); | ||
201 | + settype ($this->$name, $type); | ||
202 | + break; | ||
203 | + | ||
204 | + case 'array': | ||
205 | + $this->$name = xmlToArray ($xr); | ||
206 | + break; | ||
207 | + | ||
208 | + case 'class': | ||
209 | + $class = $xr->getAttribute ('class'); | ||
210 | + $this->$name = new $class ($xr); | ||
211 | + } | ||
212 | + } | ||
213 | + } | ||
214 | + } | ||
215 | + | ||
216 | + function toXml ($xw, $name = NULL) | ||
217 | + { | ||
218 | + $xw->startElement ('class'); | ||
219 | + | ||
220 | + if ($name !== NULL) | ||
221 | + $xw->writeAttribute ('name', $name); | ||
222 | + | ||
223 | + $xw->writeAttribute ('class', get_class ($this)); | ||
224 | + | ||
225 | + foreach (get_object_vars ($this) as $var => $val) | ||
226 | + { | ||
227 | + if (is_array ($val)) | ||
228 | + { | ||
229 | + arrayToXml ($xw, $var, $val); | ||
230 | + continue; | ||
231 | + } | ||
232 | + | ||
233 | + if (is_object ($val)) | ||
234 | + { | ||
235 | + if (in_array ('toXml', get_class_methods ($val)) == TRUE) | ||
236 | + { | ||
237 | + $val->toXml ($xw, $var); | ||
238 | + } | ||
239 | + continue; | ||
240 | + } | ||
241 | + | ||
242 | + varToXml ($xw, $var, $val); | ||
243 | + } | ||
244 | + | ||
245 | + $xw->endElement(); | ||
246 | + } | ||
247 | +}; | ||
248 | + | ||
249 | +?> |
libs/errException.php
0 → 100644
1 | +<?php | ||
2 | + | ||
3 | +static $oldErrHandler = NULL; | ||
4 | + | ||
5 | +class errException extends Exception | ||
6 | +{ | ||
7 | + protected $errContext; | ||
8 | + | ||
9 | + function __construct ($msg, $no, $file, $line, $context) | ||
10 | + { | ||
11 | + parent::__construct ($msg, $no); | ||
12 | + | ||
13 | + $this->file = $file; | ||
14 | + $this->line = $line; | ||
15 | + $this->errContext = $context; | ||
16 | + } | ||
17 | + | ||
18 | + function __toString () | ||
19 | + { | ||
20 | + $retStr = "Laufzeitfehler (" . $this->code . "): \n"; | ||
21 | + $retStr .= $this->message . "\n\n"; | ||
22 | + $retStr .= 'Datei: ' . $this->file . "\n"; | ||
23 | + $retStr .= 'Zeile: ' . $this->line . "\n"; | ||
24 | + | ||
25 | + if ($this->errContext != NULL) | ||
26 | + { | ||
27 | + $retStr .= "Fehler Context: \n"; | ||
28 | + $retStr .= print_r ($this->errContext, TRUE) . "\n"; | ||
29 | + } | ||
30 | + | ||
31 | + $retStr .= "Aufruf Stack: \n"; | ||
32 | + $retStr .= $this->getTraceAsString () . "\n"; | ||
33 | + | ||
34 | + return $retStr; | ||
35 | + } | ||
36 | + | ||
37 | + function getErrContext () | ||
38 | + { | ||
39 | + return $this->errContext; | ||
40 | + } | ||
41 | +} | ||
42 | + | ||
43 | +function mapErrToExc ($no, $msg, $file, $line, $con) | ||
44 | +{ | ||
45 | + throw new errException ($msg, $no, $file, $line, $con); | ||
46 | +} | ||
47 | + | ||
48 | +function setErrExceptionMapping () | ||
49 | +{ | ||
50 | + global $oldErrHandler; | ||
51 | + | ||
52 | + if ($oldErrHandler == NULL) | ||
53 | + $oldErrHandler = set_error_handler ('mapErrToExc'); | ||
54 | +} | ||
55 | + | ||
56 | +function resetErrExceptionMapping () | ||
57 | +{ | ||
58 | + global $oldErrHandler; | ||
59 | + | ||
60 | + if ($oldErrHandler != NULL) | ||
61 | + { | ||
62 | + set_error_handler ($oldErrHandler); | ||
63 | + $oldErrHandler = NULL; | ||
64 | + } | ||
65 | +} | ||
66 | + | ||
67 | +?> |
libs/gd_bgMerge.php
0 → 100644
1 | +<?php | ||
2 | + | ||
3 | +require_once dirname (__FILE__) . "/../config.php"; | ||
4 | +require_once LIBDIR . "errException.php"; | ||
5 | + | ||
6 | +setErrExceptionMapping (); | ||
7 | + | ||
8 | +// --- Data ---------------------------------- | ||
9 | +if (isset ($_REQUEST['img'])) | ||
10 | + $img = $_REQUEST['img']; | ||
11 | +else | ||
12 | + $img = -1; | ||
13 | + | ||
14 | +if (isset ($_REQUEST['col'])) | ||
15 | + $col = $_REQUEST['col']; | ||
16 | +else | ||
17 | + $col = 'aaaaaa'; | ||
18 | +// ------------------------------------------- | ||
19 | + | ||
20 | +// Load Image and get it's size | ||
21 | +if ($img !== -1) | ||
22 | +{ | ||
23 | + $size = getimagesize(IMGDIR . $img); | ||
24 | + $width = $size[0]; | ||
25 | + $height = $size[1]; | ||
26 | + unset ($size); | ||
27 | + $loadIm = imagecreatefrompng (IMGDIR . $img); | ||
28 | +} | ||
29 | +else | ||
30 | +{ | ||
31 | + $width = 1; | ||
32 | + $height = 1; | ||
33 | + $loadIm = imagecreatetruecolor ($width, $height); | ||
34 | + $color = imagecolorallocatealpha ($loadIm, 0, 0, 0, 127); | ||
35 | + imagefill ($loadIm, 0, 0, $color); | ||
36 | + unset ($color); | ||
37 | +} | ||
38 | +imagealphablending ($loadIm, TRUE); | ||
39 | + | ||
40 | +$bgImg = imagecreatetruecolor ($width, $height); | ||
41 | +preg_match_all ('/[A-Za-z0-9]{2,2}/', $col, $rgb); | ||
42 | +$color = imagecolorallocate ( | ||
43 | + $bgImg, hexdec ($rgb[0][0]), hexdec ($rgb[0][1]), hexdec ($rgb[0][2])); | ||
44 | +imagefill ($bgImg, 0, 0, $color); | ||
45 | +unset ($color); | ||
46 | + | ||
47 | +imagecopy ($bgImg, $loadIm, 0, 0, 0, 0, $width, $height); | ||
48 | +imagedestroy($loadIm); | ||
49 | + | ||
50 | +resetErrExceptionMapping (); | ||
51 | + | ||
52 | +header ("Content-Type: image/png"); | ||
53 | +imagepng ($bgImg); | ||
54 | + | ||
55 | +?> |
libs/initLocale.php
0 → 100644
1 | +<?php | ||
2 | + | ||
3 | + exec ('locale -a | sort -u', $locales); | ||
4 | + $locale = 'C'; | ||
5 | + | ||
6 | + /* | ||
7 | + * First find the browser encoding and try to create a valid locale | ||
8 | + * from one of the supported browser encodings. Start with the most | ||
9 | + * preferred encoding. | ||
10 | + */ | ||
11 | + $langs = explode (",", $_SERVER[HTTP_ACCEPT_LANGUAGE]); | ||
12 | + | ||
13 | + foreach ($langs as $lang) | ||
14 | + { | ||
15 | + preg_match("/^([a-z]{2})(-([a-zA-Z]{2})){0,1}(;q=([0-9].[0-9])){0,1}$/", | ||
16 | + $lang, $lng_pref); | ||
17 | + | ||
18 | + $la = $lng_pref[1]; | ||
19 | + if (isset ($lng_pref[3]) && $lng_pref[3] !== "") | ||
20 | + $co = '_' . strtoupper ($lng_pref[3]); | ||
21 | + else | ||
22 | + $co = ''; | ||
23 | + if (isset ($lng_pref[5]) && $lng_pref[5] !== "") | ||
24 | + $pr = $lng_pref[5]; | ||
25 | + else | ||
26 | + $pr = 1.0; | ||
27 | + | ||
28 | + if ($co != "US") | ||
29 | + $la_specs[$la . $co] = $pr; | ||
30 | + else | ||
31 | + $la_specs["POSIX"]=$pr; | ||
32 | + } | ||
33 | + array_multisort ($la_specs, SORT_DESC, SORT_NUMERIC); | ||
34 | + | ||
35 | + /* | ||
36 | + * Set locale and initialize gettext catalogs | ||
37 | + */ | ||
38 | + foreach ($la_specs as $key => $value) | ||
39 | + { | ||
40 | + foreach ($locales as $l) | ||
41 | + { | ||
42 | + if (isset ($key) && "" !== $key && strpos ($l, $key) !== FALSE) | ||
43 | + { | ||
44 | + $locale = $l; | ||
45 | + break; | ||
46 | + } | ||
47 | + } | ||
48 | + if ('C' !== $locale) break; | ||
49 | + } | ||
50 | + | ||
51 | + $l = setlocale (LC_MESSAGES, $locale); | ||
52 | + if ($l !== $locale) | ||
53 | + { | ||
54 | + $locale = 'C'; | ||
55 | + setlocale (LC_MESSAGES, $locale); | ||
56 | + } | ||
57 | + setlocale (LC_TIME, $locale); | ||
58 | + bindtextdomain ("bilder", LOCALEDIR); | ||
59 | + bind_textdomain_codeset ("bilder", "UTF-8"); | ||
60 | + textdomain ("bilder"); | ||
61 | + | ||
62 | +?> |
locale/de/LC_MESSAGES/bilder.mo
0 → 100644
No preview for this file type
po/de.po
0 → 100644
1 | +# German translations for PACKAGE package | ||
2 | +# German messages for PACKAGE. | ||
3 | +# Copyright (C) 2007 THE PACKAGE'S COPYRIGHT HOLDER | ||
4 | +# This file is distributed under the same license as the PACKAGE package. | ||
5 | +# <georg@steffers.org>, 2007. | ||
6 | +# | ||
7 | +msgid "" | ||
8 | +msgstr "" | ||
9 | +"Project-Id-Version: PACKAGE VERSION\n" | ||
10 | +"Report-Msgid-Bugs-To: \n" | ||
11 | +"POT-Creation-Date: 2007-10-08 03:09+0200\n" | ||
12 | +"PO-Revision-Date: 2007-10-07 15:45+0200\n" | ||
13 | +"Last-Translator: <georg@steffers.org>\n" | ||
14 | +"Language-Team: German\n" | ||
15 | +"MIME-Version: 1.0\n" | ||
16 | +"Content-Type: text/plain; charset=UTF-8\n" | ||
17 | +"Content-Transfer-Encoding: 8bit\n" | ||
18 | +"Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||
19 | + | ||
20 | +#: templates/personAdmin/personSearch1.tpl.php:37 | ||
21 | +msgid "search" | ||
22 | +msgstr "Suche" | ||
23 | + | ||
24 | +#: templates/personAdmin/personSearch1.tpl.php:45 | ||
25 | +#: templates/personAdmin/personInUp.tpl.php:86 | ||
26 | +msgid "surname" | ||
27 | +msgstr "Vorname" | ||
28 | + | ||
29 | +#: templates/personAdmin/personSearch1.tpl.php:56 | ||
30 | +#: templates/personAdmin/personInUp.tpl.php:80 | ||
31 | +msgid "firstname" | ||
32 | +msgstr "Nachname" | ||
33 | + | ||
34 | +#: templates/personAdmin/personInUp.tpl.php:47 | ||
35 | +msgid "update" | ||
36 | +msgstr "aktualisieren" | ||
37 | + | ||
38 | +#: templates/personAdmin/personInUp.tpl.php:54 | ||
39 | +msgid "insert" | ||
40 | +msgstr "einfügen" | ||
41 | + | ||
42 | +#: templates/personAdmin/personInUp.tpl.php:57 | ||
43 | +msgid "submit" | ||
44 | +msgstr "abschicken" | ||
45 | + | ||
46 | +#: templates/personAdmin/personInUp.tpl.php:63 | ||
47 | +msgid "personal data" | ||
48 | +msgstr "Perönliche Daten" | ||
49 | + | ||
50 | +#: templates/personAdmin/personInUp.tpl.php:92 | ||
51 | +msgid "company" | ||
52 | +msgstr "Firma" | ||
53 | + | ||
54 | +#: templates/personAdmin/personInUp.tpl.php:98 | ||
55 | +msgid "email" | ||
56 | +msgstr "eMail" | ||
57 | + | ||
58 | +#: templates/personAdmin/personInUp.tpl.php:104 | ||
59 | +msgid "url" | ||
60 | +msgstr "Homepage" | ||
61 | + | ||
62 | +#: templates/personAdmin/personInUp.tpl.php:117 | ||
63 | +msgid "photographer" | ||
64 | +msgstr "Fotograf" | ||
65 | + | ||
66 | +#: templates/personAdmin/personInUp.tpl.php:124 | ||
67 | +msgid "cameraId" | ||
68 | +msgstr "Kamera ID" | ||
69 | + | ||
70 | +#: templates/personAdmin/personInUp.tpl.php:137 | ||
71 | +msgid "owner" | ||
72 | +msgstr "Besitzer" | ||
73 | + | ||
74 | +#: templates/personAdmin/personInUp.tpl.php:144 | ||
75 | +msgid "watermark width" | ||
76 | +msgstr "Wasserzeichen Breite" | ||
77 | + | ||
78 | +#: templates/personAdmin/personInUp.tpl.php:150 | ||
79 | +msgid "watermark height" | ||
80 | +msgstr "Wasserzeichen Höhe" | ||
81 | + | ||
82 | +#: templates/personAdmin/personInUp.tpl.php:156 | ||
83 | +msgid "watermark xPos" | ||
84 | +msgstr "Wasserzeichen X" | ||
85 | + | ||
86 | +#: templates/personAdmin/personInUp.tpl.php:162 | ||
87 | +msgid "watermark yPos" | ||
88 | +msgstr "Wasserzeichen Y" |
sql/create.sql
0 → 100644
1 | +DROP DATABASE bilder_new; | ||
2 | +DROP USER 'picadmin'@'localhost'; | ||
3 | + | ||
4 | +CREATE USER 'picadmin'@'localhost' IDENTIFIED BY '1Rz3ftb.'; | ||
5 | + | ||
6 | +--GRANT USAGE ON *.* TO 'picadmin'@ 'localhost' IDENTIFIED BY '********' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ; | ||
7 | + | ||
8 | +CREATE DATABASE bilder_new CHARACTER SET utf8 DEFAULT COLLATE utf8_unicode_ci; | ||
9 | +GRANT ALL PRIVILEGES ON bilder_new.* TO 'picadmin'@'localhost'; | ||
10 | + | ||
11 | +SET storage_engine=InnoDB; | ||
12 | +USE bilder_new; | ||
13 | + | ||
14 | +CREATE TABLE language | ||
15 | +( | ||
16 | + languageId BIGINT UNSIGNED NOT NULL auto_increment, | ||
17 | + languageCode VARCHAR(3) NOT NULL, | ||
18 | + countryCode VARCHAR(2) NULL, | ||
19 | + | ||
20 | + PRIMARY KEY (languageId), | ||
21 | + UNIQUE KEY (languageCode, countryCode) | ||
22 | +); | ||
23 | + | ||
24 | +CREATE TABLE i18n | ||
25 | +( | ||
26 | + textId BIGINT UNSIGNED NOT NULL, | ||
27 | + language BIGINT UNSIGNED NOT NULL, | ||
28 | + text TEXT NOT NULL, | ||
29 | + | ||
30 | + PRIMARY KEY (textId, language), | ||
31 | + CONSTRAINT FOREIGN KEY (language) | ||
32 | + REFERENCES language (languageId) | ||
33 | + ON UPDATE CASCADE | ||
34 | + ON DELETE CASCADE | ||
35 | +); | ||
36 | + | ||
37 | +CREATE TABLE watermark | ||
38 | +( | ||
39 | + watermarkId BIGINT UNSIGNED NOT NULL auto_increment, | ||
40 | + width SMALLINT UNSIGNED NOT NULL, | ||
41 | + height SMALLINT UNSIGNED NOT NULL, | ||
42 | + xpos SMALLINT NOT NULL, | ||
43 | + ypos SMALLINT NOT NULL, | ||
44 | + | ||
45 | + PRIMARY KEY (watermarkId) | ||
46 | +); | ||
47 | + | ||
48 | +-- Das sollte noch aufgeteilt werden, eine Person kann ein Fotograph, der | ||
49 | +-- Besitzer eines Bildes (Copyrighthalter) oder ein user des Bildertools sein. | ||
50 | +CREATE TABLE person | ||
51 | +( | ||
52 | + personId BIGINT UNSIGNED NOT NULL auto_increment, | ||
53 | + firstname VARCHAR(30) NULL, | ||
54 | + surname VARCHAR(30) NULL, | ||
55 | + company VARCHAR(30) NULL, | ||
56 | + email VARCHAR(30) NULL, | ||
57 | + url VARCHAR(30) NULL, | ||
58 | + | ||
59 | + PRIMARY KEY (personId), | ||
60 | + UNIQUE KEY (firstname, surname) | ||
61 | +); | ||
62 | + | ||
63 | +CREATE TABLE photographer | ||
64 | +( | ||
65 | + photographerId BIGINT UNSIGNED NOT NULL auto_increment, | ||
66 | + personId BIGINT UNSIGNED NOT NULL, | ||
67 | + cameraId BIGINT UNSIGNED NULL, | ||
68 | + | ||
69 | + PRIMARY KEY (photographerId), | ||
70 | + UNIQUE KEY (personId), | ||
71 | + CONSTRAINT FOREIGN KEY (personId) | ||
72 | + REFERENCES person (personId) | ||
73 | + ON UPDATE CASCADE | ||
74 | + ON DELETE CASCADE | ||
75 | +); | ||
76 | + | ||
77 | +CREATE TABLE owner | ||
78 | +( | ||
79 | + ownerId BIGINT UNSIGNED NOT NULL auto_increment, | ||
80 | + personId BIGINT UNSIGNED NOT NULL, | ||
81 | + watermarkId BIGINT UNSIGNED NULL, | ||
82 | + | ||
83 | + PRIMARY KEY (ownerId), | ||
84 | + UNIQUE KEY (personId), | ||
85 | + CONSTRAINT FOREIGN KEY (personId) | ||
86 | + REFERENCES person (personId) | ||
87 | + ON UPDATE CASCADE | ||
88 | + ON DELETE CASCADE, | ||
89 | + CONSTRAINT FOREIGN KEY (watermarkId) | ||
90 | + REFERENCES watermark (watermarkId) | ||
91 | + ON UPDATE CASCADE | ||
92 | + ON DELETE SET NULL | ||
93 | +); | ||
94 | + | ||
95 | +CREATE TABLE format | ||
96 | +( | ||
97 | + formatId BIGINT UNSIGNED NOT NULL auto_increment, | ||
98 | + width SMALLINT UNSIGNED NOT NULL, | ||
99 | + height SMALLINT UNSIGNED NOT NULL, | ||
100 | + quality TINYINT UNSIGNED NOT NULL, | ||
101 | + | ||
102 | + PRIMARY KEY (formatId) | ||
103 | +); | ||
104 | + | ||
105 | +CREATE TABLE picture | ||
106 | +( | ||
107 | + pictureId BIGINT UNSIGNED NOT NULL auto_increment, | ||
108 | + title BIGINT UNSIGNED NULL, | ||
109 | + photographerId BIGINT UNSIGNED NULL, | ||
110 | + ownerId BIGINT UNSIGNED NULL, | ||
111 | + origWidth SMALLINT UNSIGNED NOT NULL, | ||
112 | + origHeight SMALLINT UNSIGNED NOT NULL, | ||
113 | + trade ENUM('download', | ||
114 | + 'buy') NOT NULL default 'download', | ||
115 | + createDate TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP(), | ||
116 | + `lock` BOOLEAN NOT NULL DEFAULT FALSE, | ||
117 | + | ||
118 | + PRIMARY KEY (pictureId), | ||
119 | + CONSTRAINT FOREIGN KEY (title) | ||
120 | + REFERENCES i18n (textId) | ||
121 | + ON UPDATE CASCADE | ||
122 | + ON DELETE SET NULL, | ||
123 | + CONSTRAINT FOREIGN KEY (photographerId) | ||
124 | + REFERENCES photographer (photographerId) | ||
125 | + ON UPDATE CASCADE | ||
126 | + ON DELETE SET NULL, | ||
127 | + CONSTRAINT FOREIGN KEY (ownerId) | ||
128 | + REFERENCES owner (ownerId) | ||
129 | + ON UPDATE CASCADE | ||
130 | + ON DELETE SET NULL | ||
131 | +); | ||
132 | + | ||
133 | +CREATE TABLE pictureDetail | ||
134 | +( | ||
135 | + pictureId BIGINT UNSIGNED NOT NULL, | ||
136 | + textId BIGINT UNSIGNED NOT NULL, | ||
137 | + ident VARCHAR(30) NOT NULL DEFAULT "", | ||
138 | + | ||
139 | + PRIMARY KEY (pictureId, textId), | ||
140 | + UNIQUE KEY (pictureId,ident), | ||
141 | + CONSTRAINT FOREIGN KEY (pictureId) | ||
142 | + REFERENCES picture (pictureId) | ||
143 | + ON UPDATE CASCADE | ||
144 | + ON DELETE CASCADE, | ||
145 | + CONSTRAINT FOREIGN KEY (textId) | ||
146 | + REFERENCES i18n (textId) | ||
147 | + ON UPDATE CASCADE | ||
148 | + ON DELETE CASCADE | ||
149 | +); | ||
150 | + | ||
151 | +CREATE TABLE pictureLog | ||
152 | +( | ||
153 | + pictureId BIGINT UNSIGNED NOT NULL, | ||
154 | + `date` DATE NOT NULL, | ||
155 | + views BIGINT UNSIGNED NOT NULL DEFAULT 0, | ||
156 | + downloads BIGINT UNSIGNED NOT NULL DEFAULT 0, | ||
157 | + downlSize BIGINT UNSIGNED NOT NULL DEFAULT 0, | ||
158 | + brokeDownl BIGINT UNSIGNED NOT NULL DEFAULT 0, | ||
159 | + brokeSize BIGINT UNSIGNED NOT NULL DEFAULT 0, | ||
160 | + | ||
161 | + PRIMARY KEY (pictureId,`date`), | ||
162 | + CONSTRAINT FOREIGN KEY (pictureId) | ||
163 | + REFERENCES picture (pictureId) | ||
164 | + ON UPDATE CASCADE | ||
165 | + ON DELETE CASCADE | ||
166 | +); | ||
167 | + | ||
168 | +CREATE TRIGGER picLogDateDefault_t | ||
169 | +BEFORE INSERT ON pictureLog | ||
170 | +FOR EACH ROW | ||
171 | + SET NEW.`date` = CURDATE (); | ||
172 | + | ||
173 | +CREATE TABLE picture_format | ||
174 | +( | ||
175 | + pictureId BIGINT UNSIGNED NOT NULL, | ||
176 | + formatId BIGINT UNSIGNED NOT NULL, | ||
177 | + | ||
178 | + PRIMARY KEY (pictureId,formatId), | ||
179 | + CONSTRAINT FOREIGN KEY (pictureId) | ||
180 | + REFERENCES picture (pictureId) | ||
181 | + ON UPDATE CASCADE | ||
182 | + ON DELETE CASCADE, | ||
183 | + CONSTRAINT FOREIGN KEY (formatId) | ||
184 | + REFERENCES format (formatId) | ||
185 | + ON UPDATE CASCADE | ||
186 | + ON DELETE CASCADE | ||
187 | +); | ||
188 | + | ||
189 | +CREATE TABLE location | ||
190 | +( | ||
191 | + locationId BIGINT UNSIGNED NOT NULL auto_increment, | ||
192 | + zip VARCHAR(5) NULL, | ||
193 | + city VARCHAR(30) NULL, | ||
194 | + street VARCHAR(30) NULL, | ||
195 | + hno VARCHAR(5) NULL, | ||
196 | + name VARCHAR(30) NULL, | ||
197 | + | ||
198 | + PRIMARY KEY (locationId), | ||
199 | + UNIQUE KEY (zip,city,street,hno) | ||
200 | +); | ||
201 | + | ||
202 | +CREATE TABLE section | ||
203 | +( | ||
204 | + sectionId BIGINT UNSIGNED NOT NULL auto_increment, | ||
205 | + title BIGINT UNSIGNED NULL, | ||
206 | + locationId BIGINT UNSIGNED NULL, | ||
207 | + `lock` BOOLEAN NOT NULL DEFAULT FALSE, | ||
208 | + | ||
209 | + PRIMARY KEY (sectionId), | ||
210 | + CONSTRAINT FOREIGN KEY (title) | ||
211 | + REFERENCES i18n (textId) | ||
212 | + ON UPDATE CASCADE | ||
213 | + ON DELETE SET NULL, | ||
214 | + CONSTRAINT FOREIGN KEY (locationId) | ||
215 | + REFERENCES location (locationId) | ||
216 | + ON UPDATE CASCADE | ||
217 | + ON DELETE SET NULL | ||
218 | +); | ||
219 | + | ||
220 | +CREATE TABLE sectionDetail | ||
221 | +( | ||
222 | + sectionId BIGINT UNSIGNED NOT NULL, | ||
223 | + textId BIGINT UNSIGNED NOT NULL, | ||
224 | + ident VARCHAR(30) NOT NULL DEFAULT "", | ||
225 | + | ||
226 | + PRIMARY KEY (sectionId, textId), | ||
227 | + UNIQUE KEY (sectionId,ident), | ||
228 | + CONSTRAINT FOREIGN KEY (sectionId) | ||
229 | + REFERENCES section (sectionId) | ||
230 | + ON UPDATE CASCADE | ||
231 | + ON DELETE CASCADE, | ||
232 | + CONSTRAINT FOREIGN KEY (textId) | ||
233 | + REFERENCES i18n (textId) | ||
234 | + ON UPDATE CASCADE | ||
235 | + ON DELETE CASCADE | ||
236 | +); | ||
237 | + | ||
238 | +CREATE TABLE picture_section | ||
239 | +( | ||
240 | + pictureId BIGINT UNSIGNED NOT NULL, | ||
241 | + sectionId BIGINT UNSIGNED NOT NULL, | ||
242 | + validFrom TIMESTAMP NULL, | ||
243 | + validTo TIMESTAMP NULL, | ||
244 | + prio SMALLINT UNSIGNED NOT NULL DEFAULT 0, | ||
245 | + | ||
246 | + PRIMARY KEY (pictureId,sectionId), | ||
247 | + CONSTRAINT FOREIGN KEY (pictureId) | ||
248 | + REFERENCES picture (pictureId) | ||
249 | + ON UPDATE CASCADE | ||
250 | + ON DELETE CASCADE, | ||
251 | + CONSTRAINT FOREIGN KEY (sectionId) | ||
252 | + REFERENCES section (sectionId) | ||
253 | + ON UPDATE CASCADE | ||
254 | + ON DELETE CASCADE | ||
255 | +); | ||
256 | + | ||
257 | +CREATE PROCEDURE lockEmptySection (IN oldId BIGINT(20)) | ||
258 | + UPDATE section SET `lock` = TRUE | ||
259 | + WHERE | ||
260 | + sectionId IN ( | ||
261 | + SELECT sectionId | ||
262 | + FROM picture_section | ||
263 | + INNER JOIN picture USING (pictureId) | ||
264 | + WHERE `lock` = FALSE | ||
265 | + GROUP BY sectionId | ||
266 | + HAVING | ||
267 | + COUNT(*) = 1 AND | ||
268 | + MAX(pictureId) = oldId); | ||
269 | + | ||
270 | +CREATE TRIGGER lockEmptySectionD_t | ||
271 | +BEFORE DELETE ON picture | ||
272 | +FOR EACH ROW | ||
273 | + CALL lockEmptySection (OLD.pictureId); | ||
274 | + | ||
275 | +CREATE TRIGGER lockEmptySectionU_t | ||
276 | +BEFORE UPDATE ON picture | ||
277 | +FOR EACH ROW | ||
278 | + CALL lockEmptySection (OLD.pictureId); | ||
279 | + | ||
280 | +CREATE TABLE gallery | ||
281 | +( | ||
282 | + galleryId BIGINT UNSIGNED NOT NULL auto_increment, | ||
283 | + title BIGINT UNSIGNED NULL, | ||
284 | + creator BIGINT UNSIGNED NOT NULL, | ||
285 | + createDate TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP(), | ||
286 | + `lock` BOOLEAN NOT NULL DEFAULT FALSE, | ||
287 | + | ||
288 | + PRIMARY KEY (galleryId), | ||
289 | + UNIQUE KEY (creator,createDate), | ||
290 | + CONSTRAINT FOREIGN KEY (title) | ||
291 | + REFERENCES i18n (textId) | ||
292 | + ON UPDATE CASCADE | ||
293 | + ON DELETE SET NULL, | ||
294 | + CONSTRAINT FOREIGN KEY (creator) | ||
295 | + REFERENCES person (personId) | ||
296 | + ON UPDATE CASCADE | ||
297 | +); | ||
298 | + | ||
299 | +CREATE TABLE galleryDetail | ||
300 | +( | ||
301 | + galleryId BIGINT UNSIGNED NOT NULL, | ||
302 | + textId BIGINT UNSIGNED NOT NULL, | ||
303 | + ident VARCHAR(30) NOT NULL DEFAULT "", | ||
304 | + | ||
305 | + PRIMARY KEY (galleryId, textId), | ||
306 | + UNIQUE KEY (galleryId,ident), | ||
307 | + CONSTRAINT FOREIGN KEY (galleryId) | ||
308 | + REFERENCES gallery (galleryId) | ||
309 | + ON UPDATE CASCADE | ||
310 | + ON DELETE CASCADE, | ||
311 | + CONSTRAINT FOREIGN KEY (textId) | ||
312 | + REFERENCES i18n (textId) | ||
313 | + ON UPDATE CASCADE | ||
314 | + ON DELETE CASCADE | ||
315 | +); | ||
316 | + | ||
317 | +CREATE TABLE section_gallery | ||
318 | +( | ||
319 | + sectionId BIGINT UNSIGNED NOT NULL, | ||
320 | + galleryId BIGINT UNSIGNED NOT NULL, | ||
321 | + validFrom TIMESTAMP NULL, | ||
322 | + validTo TIMESTAMP NULL, | ||
323 | + prio SMALLINT UNSIGNED NOT NULL DEFAULT 0, | ||
324 | + | ||
325 | + PRIMARY KEY (sectionId,galleryId), | ||
326 | + CONSTRAINT FOREIGN KEY (sectionId) | ||
327 | + REFERENCES section (sectionId) | ||
328 | + ON UPDATE CASCADE | ||
329 | + ON DELETE CASCADE, | ||
330 | + CONSTRAINT FOREIGN KEY (galleryId) | ||
331 | + REFERENCES gallery (galleryId) | ||
332 | + ON UPDATE CASCADE | ||
333 | + ON DELETE CASCADE | ||
334 | +); | ||
335 | + | ||
336 | +CREATE PROCEDURE lockEmptyGallery (IN oldId BIGINT(20)) | ||
337 | + UPDATE gallery SET `lock` = TRUE | ||
338 | + WHERE | ||
339 | + galleryId IN ( | ||
340 | + SELECT galleryId | ||
341 | + FROM section_gallery | ||
342 | + INNER JOIN section USING (sectionId) | ||
343 | + WHERE `lock` = FALSE | ||
344 | + GROUP BY galleryId | ||
345 | + HAVING | ||
346 | + COUNT(*) = 1 AND | ||
347 | + MAX(sectionId) = oldId); | ||
348 | + | ||
349 | +CREATE TRIGGER lockEmptyGalleryD_t | ||
350 | +BEFORE DELETE ON section | ||
351 | +FOR EACH ROW | ||
352 | + CALL lockEmptyGallery (OLD.sectionId); | ||
353 | + | ||
354 | +CREATE TRIGGER lockEmptyGalleryU_t | ||
355 | +BEFORE UPDATE ON section | ||
356 | +FOR EACH ROW | ||
357 | + CALL lockEmptyGallery (OLD.sectionId); | ||
358 | + | ||
359 | +CREATE TABLE template | ||
360 | +( | ||
361 | + templateId BIGINT UNSIGNED NOT NULL auto_increment, | ||
362 | + name VARCHAR(100) NOT NULL, | ||
363 | + | ||
364 | + PRIMARY KEY (templateId), | ||
365 | + UNIQUE KEY (name) | ||
366 | +); | ||
367 | + | ||
368 | +CREATE TABLE category | ||
369 | +( | ||
370 | + categoryId BIGINT UNSIGNED NOT NULL auto_increment, | ||
371 | + title BIGINT UNSIGNED NULL, | ||
372 | + templateId BIGINT UNSIGNED NOT NULL, | ||
373 | + `lock` BOOLEAN NOT NULL DEFAULT FALSE, | ||
374 | + | ||
375 | + PRIMARY KEY (categoryId), | ||
376 | + CONSTRAINT FOREIGN KEY (title) | ||
377 | + REFERENCES i18n (textId) | ||
378 | + ON UPDATE CASCADE | ||
379 | + ON DELETE SET NULL, | ||
380 | + CONSTRAINT FOREIGN KEY (templateId) | ||
381 | + REFERENCES template (templateId) | ||
382 | + ON UPDATE CASCADE | ||
383 | +); | ||
384 | + | ||
385 | +CREATE TABLE categoryDetail | ||
386 | +( | ||
387 | + categoryId BIGINT UNSIGNED NOT NULL, | ||
388 | + textId BIGINT UNSIGNED NOT NULL, | ||
389 | + ident VARCHAR(30) NOT NULL DEFAULT "", | ||
390 | + | ||
391 | + PRIMARY KEY (categoryId, textId), | ||
392 | + UNIQUE KEY (categoryId,ident), | ||
393 | + CONSTRAINT FOREIGN KEY (categoryId) | ||
394 | + REFERENCES category (categoryId) | ||
395 | + ON UPDATE CASCADE | ||
396 | + ON DELETE CASCADE, | ||
397 | + CONSTRAINT FOREIGN KEY (textId) | ||
398 | + REFERENCES i18n (textId) | ||
399 | + ON UPDATE CASCADE | ||
400 | + ON DELETE CASCADE | ||
401 | +); | ||
402 | + | ||
403 | +CREATE TABLE gallery_category | ||
404 | +( | ||
405 | + galleryId BIGINT UNSIGNED NOT NULL, | ||
406 | + categoryId BIGINT UNSIGNED NOT NULL, | ||
407 | + validFrom TIMESTAMP NULL, | ||
408 | + validTo TIMESTAMP NULL, | ||
409 | + prio SMALLINT UNSIGNED NOT NULL DEFAULT 0, | ||
410 | + | ||
411 | + PRIMARY KEY (galleryId,categoryId), | ||
412 | + CONSTRAINT FOREIGN KEY (galleryId) | ||
413 | + REFERENCES gallery (galleryId) | ||
414 | + ON UPDATE CASCADE | ||
415 | + ON DELETE CASCADE, | ||
416 | + CONSTRAINT FOREIGN KEY (categoryId) | ||
417 | + REFERENCES category (categoryId) | ||
418 | + ON UPDATE CASCADE | ||
419 | + ON DELETE CASCADE | ||
420 | +); | ||
421 | + | ||
422 | +CREATE TABLE subCategory | ||
423 | +( | ||
424 | + categoryId BIGINT UNSIGNED NOT NULL, | ||
425 | + subId BIGINT UNSIGNED NOT NULL, | ||
426 | + | ||
427 | + PRIMARY KEY (categoryId,subId), | ||
428 | + CONSTRAINT FOREIGN KEY (categoryId) | ||
429 | + REFERENCES category (categoryId) | ||
430 | + ON UPDATE CASCADE | ||
431 | + ON DELETE CASCADE, | ||
432 | + CONSTRAINT FOREIGN KEY (subId) | ||
433 | + REFERENCES category (categoryId) | ||
434 | + ON UPDATE CASCADE | ||
435 | + ON DELETE CASCADE | ||
436 | +); | ||
437 | + | ||
438 | +CREATE VIEW i18nView AS | ||
439 | + SELECT | ||
440 | + textId, languageCode, countryCode, text | ||
441 | + FROM i18n _1 | ||
442 | + INNER JOIN language ON language = languageId; | ||
443 | + | ||
444 | +DELIMITER // | ||
445 | +CREATE FUNCTION gettextFunc (tId BIGINT(20)) | ||
446 | +RETURNS TEXT | ||
447 | +READS SQL DATA | ||
448 | +COMMENT 'This function nees the Variable @LANG set to the current locale.' | ||
449 | +BEGIN | ||
450 | + DECLARE lText TEXT; | ||
451 | + DECLARE lc VARCHAR(3); | ||
452 | + DECLARE cc VARCHAR(2); | ||
453 | + | ||
454 | + SET lc = SUBSTRING(@LANG, 1, | ||
455 | + CASE LOCATE('_', @LANG) | ||
456 | + WHEN 0 THEN CHAR_LENGTH(@LANG) | ||
457 | + ELSE LOCATE('_', @LANG)-1 | ||
458 | + END); | ||
459 | + SET lc = CASE WHEN lc IS NOT NULL THEN lc ELSE 'en' END; | ||
460 | + | ||
461 | + SET cc = SUBSTR(@LANG, | ||
462 | + CASE LOCATE('_', @LANG) | ||
463 | + WHEN 0 THEN NULL | ||
464 | + ELSE LOCATE('_', @LANG)+1 | ||
465 | + END); | ||
466 | + | ||
467 | + SELECT `text` INTO lText | ||
468 | + FROM i18nView | ||
469 | + WHERE | ||
470 | + textId = tId AND | ||
471 | + languageCode = lc AND | ||
472 | + countryCode = cc; | ||
473 | + IF lText IS NULL THEN | ||
474 | + SELECT `text` INTO lText | ||
475 | + FROM i18nView | ||
476 | + WHERE | ||
477 | + textId = tId AND | ||
478 | + languageCode = lc AND | ||
479 | + countryCode IS NULL; | ||
480 | + END If; | ||
481 | + IF lText IS NULL THEN | ||
482 | + SELECT `text` INTO lText | ||
483 | + FROM i18nView | ||
484 | + WHERE | ||
485 | + textId = tId AND | ||
486 | + languageCode = 'en' AND | ||
487 | + countryCode IS NULL ; | ||
488 | + END If; | ||
489 | + | ||
490 | + RETURN lText; | ||
491 | +END// | ||
492 | +DELIMITER ; | ||
493 | + | ||
494 | +CREATE VIEW personsView AS | ||
495 | + SELECT | ||
496 | + personId, photographerId, ownerId, | ||
497 | + firstname, surname, company, email, url, cameraId, | ||
498 | + width AS wmWidth, height AS wmHeight, xpos AS wmXPos, ypos AS wmYPos | ||
499 | + FROM person | ||
500 | + LEFT JOIN photographer USING (personId) | ||
501 | + LEFT JOIN owner USING (personId) | ||
502 | + LEFT JOIN watermark USING (watermarkId); | ||
503 | + | ||
504 | +CREATE VIEW photographerView AS | ||
505 | + SELECT | ||
506 | + photographerId, | ||
507 | + firstname AS pFirstname, surname AS pSurname, company AS pCompany, | ||
508 | + email AS pEmail, url AS pUrl, cameraId | ||
509 | + FROM photographer | ||
510 | + LEFT JOIN person USING (personId); | ||
511 | + | ||
512 | +CREATE VIEW ownerView AS | ||
513 | + SELECT | ||
514 | + ownerId, | ||
515 | + firstname AS oFirstname, surname AS oSurname, company AS oCompany, | ||
516 | + email AS oEmail, url AS oUrl, | ||
517 | + width AS wmWidth, height AS wmHeight, xpos AS wmXPos, ypos AS wmYPos | ||
518 | + FROM owner | ||
519 | + LEFT JOIN person USING (personId) | ||
520 | + LEFT JOIN watermark USING (watermarkId); | ||
521 | + | ||
522 | +CREATE VIEW picturesView AS | ||
523 | + SELECT | ||
524 | + _1.pictureId, | ||
525 | + gettextFunc(title) AS pTitle, | ||
526 | + gettextFunc(textId) AS pDetails, ident AS pDetailIdent, | ||
527 | + pFirstname, pSurname, pCompany, pEmail, pUrl, cameraId, | ||
528 | + oFirstname, oSurname, oCompany, oEmail, oUrl, | ||
529 | + wmWidth, wmHeight, wmXPos, wmYPos, | ||
530 | + origWidth, origHeight, trade, createDate AS pCreateDate, | ||
531 | + width, height, quality, | ||
532 | + `date` AS vDate, views, downloads, downlSize, brokeDownl, brokeSize | ||
533 | + FROM picture _1 | ||
534 | + LEFT JOIN pictureDetail USING (pictureId) | ||
535 | + LEFT JOIN photographerView USING (photographerId) | ||
536 | + LEFT JOIN ownerView USING (ownerId) | ||
537 | + LEFT JOIN pictureLog USING (pictureId) | ||
538 | + INNER JOIN picture_format _2 ON | ||
539 | + _1.pictureId = _2.pictureId AND | ||
540 | + _1.`lock` = FALSE | ||
541 | + INNER JOIN format USING (formatId); | ||
542 | + | ||
543 | +CREATE VIEW pictureCountsSumView AS | ||
544 | + SELECT | ||
545 | + pictureId, pTitle, pDetails, pDetailIdent, | ||
546 | + pFirstname, pSurname, pCompany, pEmail, pUrl, cameraId, | ||
547 | + oFirstname, oSurname, oCompany, oEmail, oUrl, | ||
548 | + wmWidth, wmHeight, wmXPos, wmYPos, | ||
549 | + origWidth, origHeight, trade, pCreateDate, width, height, quality, | ||
550 | + CAST(SUM(views) AS UNSIGNED) AS views, | ||
551 | + CAST(SUM(downloads) AS UNSIGNED) AS downloads, | ||
552 | + CAST(SUM(downlSize) AS UNSIGNED) AS downlSize, | ||
553 | + CAST(SUM(brokeDownl) AS UNSIGNED) AS brokeDownl, | ||
554 | + CAST(SUM(brokeSize) AS UNSIGNED) AS brokeSize | ||
555 | + FROM picturesView | ||
556 | + GROUP BY | ||
557 | + pictureId, pTitle, pDetails, pDetailIdent, | ||
558 | + pCreateDate, origWidth, origHeight, trade, width, height, quality, | ||
559 | + pFirstname, pSurname, pCompany, pEmail, pUrl, cameraId, | ||
560 | + oFirstname, oSurname, oCompany, oEmail, oUrl, | ||
561 | + wmWidth, wmHeight, wmXPos, wmYPos; | ||
562 | + | ||
563 | +CREATE VIEW sectionsView AS | ||
564 | + SELECT | ||
565 | + sectionId, gettextFunc(title) AS sTitle, | ||
566 | + gettextFunc(_3.textId) AS sDetails, _3.ident AS sDetailIdent, | ||
567 | + zip, city, street, hno | ||
568 | + FROM section _1 | ||
569 | + LEFT JOIN location _2 USING (locationId) | ||
570 | + LEFT JOIN sectionDetail _3 USING (sectionId) | ||
571 | + WHERE | ||
572 | + _1.`lock` = FALSE; | ||
573 | + | ||
574 | +CREATE VIEW sectionPicturesView AS | ||
575 | + SELECT | ||
576 | + sectionId, sTitle, sDetails, sDetailIdent, | ||
577 | + zip, city, street, hno, | ||
578 | + pictureId, pTitle, pDetails, pDetailIdent, | ||
579 | + pFirstname, pSurname, pCompany, pEmail, pUrl, cameraId, | ||
580 | + oFirstname, oSurname, oCompany, oEmail, oUrl, | ||
581 | + wmWidth, wmHeight, wmXPos, wmYPos, | ||
582 | + origWidth, origHeight, trade, pCreateDate, width, height, quality, | ||
583 | + vDate, views, downloads, downlSize, brokeDownl, brokeSize | ||
584 | + FROM sectionsView | ||
585 | + INNER JOIN picture_section USING (sectionId) | ||
586 | + INNER JOIN picturesView USING (pictureId); | ||
587 | + | ||
588 | +CREATE VIEW sectionCountsView AS | ||
589 | + SELECT | ||
590 | + sectionId, sTitle, sDetails, sDetailIdent, | ||
591 | + zip, city, street, hno, vDate, | ||
592 | + CAST(SUM(views) AS UNSIGNED) AS views, | ||
593 | + CAST(SUM(downloads) AS UNSIGNED) AS downloads, | ||
594 | + CAST(SUM(downlSize) AS UNSIGNED) AS downlSize, | ||
595 | + CAST(SUM(brokeDownl) AS UNSIGNED) AS brokeDownl, | ||
596 | + CAST(SUM(brokeSize) AS UNSIGNED) AS brokeSize | ||
597 | + FROM sectionPicturesView | ||
598 | + GROUP BY | ||
599 | + sectionId, sTitle, sDetails, sDetailIdent, | ||
600 | + zip, city, street, hno, vDate; | ||
601 | + | ||
602 | +CREATE VIEW sectionCountsSumView AS | ||
603 | + SELECT | ||
604 | + sectionId, sTitle, sDetails, sDetailIdent, | ||
605 | + zip, city, street, hno, | ||
606 | + CAST(SUM(views) AS UNSIGNED) AS views, | ||
607 | + CAST(SUM(downloads) AS UNSIGNED) AS downloads, | ||
608 | + CAST(SUM(downlSize) AS UNSIGNED) AS downlSize, | ||
609 | + CAST(SUM(brokeDownl) AS UNSIGNED) AS brokeDownl, | ||
610 | + CAST(SUM(brokeSize) AS UNSIGNED) AS brokeSize | ||
611 | + FROM sectionPicturesView | ||
612 | + GROUP BY | ||
613 | + sectionId, sTitle, sDetails, sDetailIdent, | ||
614 | + zip, city, street, hno; | ||
615 | + | ||
616 | +CREATE VIEW galleriesView AS | ||
617 | + SELECT | ||
618 | + galleryId, | ||
619 | + gettextFunc(title) AS gTitle, | ||
620 | + gettextFunc(_4.textId) AS gDetails, _4.ident AS gDetailIdent, | ||
621 | + createDate AS sCreateDate, | ||
622 | + creator, firstname AS cFirstname, surname AS cSurname, | ||
623 | + company AS cCompany, email AS cEmail, url AS cUrl | ||
624 | + FROM gallery _1 | ||
625 | + INNER JOIN person _2 ON | ||
626 | + _1.creator = _2.personId AND | ||
627 | + _1.`lock` = FALSE | ||
628 | + LEFT JOIN galleryDetail _4 USING (galleryId); | ||
629 | + | ||
630 | +CREATE VIEW galleryPicturesView AS | ||
631 | + SELECT | ||
632 | + galleryId, gTitle, gDetails, gDetailIdent, | ||
633 | + sCreateDate, creator, cFirstname, cSurname, cCompany, cEmail, cUrl, | ||
634 | + sectionId, sTitle, sDetails, sDetailIdent, | ||
635 | + zip, city, street, hno, | ||
636 | + pictureId, pTitle, pDetails, pDetailIdent, | ||
637 | + pFirstname, pSurname, pCompany, pEmail, pUrl, cameraId, | ||
638 | + oFirstname, oSurname, oCompany, oEmail, oUrl, | ||
639 | + wmWidth, wmHeight, wmXPos, wmYPos, | ||
640 | + origWidth, origHeight, trade, pCreateDate, width, height, quality, | ||
641 | + vDate, views, downloads, downlSize, brokeDownl, brokeSize | ||
642 | + FROM galleriesView _1 | ||
643 | + INNER JOIN section_gallery _2 USING (galleryId) | ||
644 | + INNER JOIN sectionPicturesView _3 USING (sectionId); | ||
645 | + | ||
646 | +CREATE VIEW galleryCountsView AS | ||
647 | + SELECT | ||
648 | + galleryId, gTitle, gDetails, gDetailIdent, sCreateDate, | ||
649 | + creator, cFirstname, cSurname, cCompany, cEmail, cUrl, vDate, | ||
650 | + CAST(SUM(views) AS UNSIGNED) AS views, | ||
651 | + CAST(SUM(downloads) AS UNSIGNED) AS downloads, | ||
652 | + CAST(SUM(downlSize) AS UNSIGNED) AS downlSize, | ||
653 | + CAST(SUM(brokeDownl) AS UNSIGNED) AS brokeDownl, | ||
654 | + CAST(SUM(brokeSize) AS UNSIGNED) AS brokeSize | ||
655 | + FROM galleryPicturesView | ||
656 | + GROUP BY | ||
657 | + galleryId, gTitle, gDetails, gDetailIdent, sCreateDate, | ||
658 | + creator, cFirstname, cSurname, cCompany, cEmail, cUrl, vDate; | ||
659 | + | ||
660 | +CREATE VIEW galleryCountsSumView AS | ||
661 | + SELECT | ||
662 | + galleryId, gTitle, gDetails, gDetailIdent, sCreateDate, | ||
663 | + creator, cFirstname, cSurname, cCompany, cEmail, cUrl, | ||
664 | + CAST(SUM(views) AS UNSIGNED) AS views, | ||
665 | + CAST(SUM(downloads) AS UNSIGNED) AS downloads, | ||
666 | + CAST(SUM(downlSize) AS UNSIGNED) AS downlSize, | ||
667 | + CAST(SUM(brokeDownl) AS UNSIGNED) AS brokeDownl, | ||
668 | + CAST(SUM(brokeSize) AS UNSIGNED) AS brokeSize | ||
669 | + FROM galleryPicturesView | ||
670 | + GROUP BY | ||
671 | + galleryId, gTitle, gDetails, gDetailIdent, sCreateDate, | ||
672 | + creator, cFirstname, cSurname, cCompany, cEmail, cUrl; | ||
673 | + | ||
674 | +CREATE VIEW gallerySectionsView AS | ||
675 | + SELECT | ||
676 | + galleryId, gTitle, gDetails, gDetailIdent, | ||
677 | + sCreateDate, creator, cFirstname, cSurname, cCompany, cEmail, cUrl, | ||
678 | + sectionId, sTitle, sDetails, sDetailIdent, | ||
679 | + zip, city, street, hno | ||
680 | + FROM galleriesView _1 | ||
681 | + INNER JOIN section_gallery _2 USING (galleryId) | ||
682 | + INNER JOIN sectionsView _3 USING (sectionId); | ||
683 | + | ||
684 | +CREATE VIEW categoriesView AS | ||
685 | + SELECT | ||
686 | + categoryId, | ||
687 | + gettextFunc(title) AS cTitle, | ||
688 | + gettextFunc(_5.textId) AS cDetails, _5.ident AS cDetailIdent, | ||
689 | + _2.templateId, _2.name AS templateName, | ||
690 | + _4.subId | ||
691 | + FROM category _1 | ||
692 | + INNER JOIN template _2 ON | ||
693 | + _1.templateId = _2.templateId AND | ||
694 | + _1.`lock` = FALSE | ||
695 | + LEFT JOIN categoryDetail _5 USING (categoryId) | ||
696 | + LEFT JOIN subCategory _4 USING (categoryId); | ||
697 | + | ||
698 | +CREATE VIEW catPicturesView AS | ||
699 | + SELECT | ||
700 | + categoryId, cTitle, cDetails, cDetailIdent, | ||
701 | + templateId, templateName, subId, | ||
702 | + galleryId, gTitle, gDetails, gDetailIdent, | ||
703 | + sCreateDate, creator, cFirstname, cSurname, cCompany, cEmail, cUrl, | ||
704 | + sectionId, sTitle, sDetails, sDetailIdent, | ||
705 | + zip, city, street, hno, | ||
706 | + pictureId, pTitle, pDetails, pDetailIdent, | ||
707 | + origWidth, origHeight, trade, pCreateDate, width, height, quality, | ||
708 | + pFirstname, pSurname, pCompany, pEmail, pUrl, cameraId, | ||
709 | + oFirstname, oSurname, oCompany, oEmail, oUrl, | ||
710 | + wmWidth, wmHeight, wmXPos, wmYPos, | ||
711 | + vDate, views, downloads, downlSize, brokeDownl, brokeSize | ||
712 | + FROM categoriesView | ||
713 | + INNER JOIN gallery_category USING (categoryId) | ||
714 | + INNER JOIN galleryPicturesView USING (galleryId); | ||
715 | + | ||
716 | +CREATE VIEW categoryCountsView AS | ||
717 | + SELECT | ||
718 | + categoryId, cTitle, cDetails, cDetailIdent, | ||
719 | + templateId, templateName, subId, vDate, | ||
720 | + CAST(SUM(views) AS UNSIGNED) AS views, | ||
721 | + CAST(SUM(downloads) AS UNSIGNED) AS downloads, | ||
722 | + CAST(SUM(downlSize) AS UNSIGNED) AS downlSize, | ||
723 | + CAST(SUM(brokeDownl) AS UNSIGNED) AS brokeDownl, | ||
724 | + CAST(SUM(brokeSize) AS UNSIGNED) AS brokeSize | ||
725 | + FROM catPicturesView | ||
726 | + GROUP BY | ||
727 | + categoryId, cTitle, cDetails, cDetailIdent, | ||
728 | + templateId, templateName, subId, vDate; | ||
729 | + | ||
730 | +CREATE VIEW categoryCountsSumView AS | ||
731 | + SELECT | ||
732 | + categoryId, cTitle, cDetails, cDetailIdent, | ||
733 | + templateId, templateName, subId, | ||
734 | + CAST(SUM(views) AS UNSIGNED) AS views, | ||
735 | + CAST(SUM(downloads) AS UNSIGNED) AS downloads, | ||
736 | + CAST(SUM(downlSize) AS UNSIGNED) AS downlSize, | ||
737 | + CAST(SUM(brokeDownl) AS UNSIGNED) AS brokeDownl, | ||
738 | + CAST(SUM(brokeSize) AS UNSIGNED) AS brokeSize | ||
739 | + FROM catPicturesView | ||
740 | + GROUP BY | ||
741 | + categoryId, cTitle, cDetails, cDetailIdent, | ||
742 | + templateId, templateName, subId; | ||
743 | + | ||
744 | +CREATE VIEW catSectionsView AS | ||
745 | + SELECT | ||
746 | + categoryId, cTitle, cDetails, cDetailIdent, | ||
747 | + templateId, templateName, subId, | ||
748 | + galleryId, gTitle, gDetails, gDetailIdent, | ||
749 | + sCreateDate, creator, cFirstname, cSurname, cCompany, cEmail, cUrl, | ||
750 | + sectionId, sTitle, sDetails, sDetailIdent, | ||
751 | + zip, city, street, hno | ||
752 | + FROM categoriesView | ||
753 | + INNER JOIN gallery_category USING (categoryId) | ||
754 | + INNER JOIN gallerySectionsView USING (galleryId); | ||
755 | + | ||
756 | +CREATE VIEW catGalleriesView AS | ||
757 | + SELECT | ||
758 | + categoryId, cTitle, cDetails, cDetailIdent, | ||
759 | + templateId, templateName, subId, | ||
760 | + galleryId, gTitle, gDetails, gDetailIdent, | ||
761 | + sCreateDate, creator, cFirstname, cSurname, cCompany, cEmail, cUrl | ||
762 | + FROM categoriesView | ||
763 | + INNER JOIN gallery_category USING (categoryId) | ||
764 | + INNER JOIN galleriesView USING (galleryId); | ||
765 | + | ||
766 | +DELIMITER // | ||
767 | +CREATE PROCEDURE updateOwner (IN pid BIGINT, | ||
768 | + IN _width SMALLINT UNSIGNED, IN _height SMALLINT UNSIGNED, | ||
769 | + IN _xpos SMALLINT, IN _ypos SMALLINT) | ||
770 | +BEGIN | ||
771 | + DECLARE wid, oid BIGINT DEFAULT NULL; | ||
772 | + | ||
773 | + IF _width IS NOT NULL AND _height IS NOT NULL AND | ||
774 | + _xpos IS NOT NULL AND _ypos IS NOT NULL | ||
775 | + THEN | ||
776 | + SELECT ownerId, watermarkId INTO oid, wid | ||
777 | + FROM owner | ||
778 | + WHERE personId = pid; | ||
779 | + | ||
780 | + IF oid IS NULL | ||
781 | + THEN | ||
782 | + SELECT watermarkId INTO wid | ||
783 | + FROM watermark | ||
784 | + WHERE | ||
785 | + height = _height AND | ||
786 | + width = _width AND | ||
787 | + xpos = _xpos AND | ||
788 | + ypos = _ypos; | ||
789 | + | ||
790 | + IF wid IS NULL | ||
791 | + THEN | ||
792 | + INSERT INTO watermark (width, height, xpos, ypos) | ||
793 | + VALUES (_width, _height, _xpos, _ypos); | ||
794 | + SELECT LAST_INSERT_ID() INTO wid; | ||
795 | + END IF; | ||
796 | + | ||
797 | + INSERT INTO owner (personId, watermarkId) | ||
798 | + VALUES (pid, wid); | ||
799 | + ELSE | ||
800 | + IF wid IS NULL | ||
801 | + THEN | ||
802 | + INSERT INTO watermark (width, height, xpos, ypos) | ||
803 | + VALUES (_width, _height, _xpos, _ypos); | ||
804 | + SELECT LAST_INSERT_ID() INTO wid; | ||
805 | + ELSE | ||
806 | + UPDATE watermark | ||
807 | + SET | ||
808 | + width = _width, | ||
809 | + height = _height, | ||
810 | + xpos = _xpos, | ||
811 | + ypos = _ypos | ||
812 | + WHERE watermarkId = wid; | ||
813 | + END IF; | ||
814 | + | ||
815 | + UPDATE owner | ||
816 | + SET watermarkId = wid | ||
817 | + WHERE ownerId = oid; | ||
818 | + END IF; | ||
819 | + END IF; | ||
820 | + | ||
821 | + SELECT oid, wid; | ||
822 | +END// | ||
823 | +DELIMITER ; | ||
824 | + | ||
825 | +DELIMITER // | ||
826 | +CREATE PROCEDURE updatePhotographer (IN pid BIGINT, IN _camId BIGINT) | ||
827 | +BEGIN | ||
828 | + DECLARE phid BIGINT DEFAULT NULL; | ||
829 | + | ||
830 | + IF _camId IS NOT NULL | ||
831 | + THEN | ||
832 | + SELECT photographerId INTO phid | ||
833 | + FROM photographer | ||
834 | + WHERE personId = pid; | ||
835 | + | ||
836 | + IF phid IS NULL | ||
837 | + THEN | ||
838 | + INSERT INTO photographer (personId, cameraId) | ||
839 | + VALUES (pid, _camId); | ||
840 | + SELECT LAST_INSERT_ID() INTO phid; | ||
841 | + ELSE | ||
842 | + UPDATE photographer | ||
843 | + SET cameraId = _camId | ||
844 | + WHERE photographerId = phid; | ||
845 | + END IF; | ||
846 | + END IF; | ||
847 | + | ||
848 | + SELECT phid; | ||
849 | +END// | ||
850 | +DELIMITER ; | ||
851 | + | ||
852 | +DELIMITER // | ||
853 | +CREATE PROCEDURE updatePerson (IN _firstname VARCHAR(30), | ||
854 | + IN _surname VARCHAR(30), IN _company VARCHAR(30), IN _email VARCHAR(30), | ||
855 | + IN _url VARCHAR(30), IN _camId BIGINT, | ||
856 | + IN _width SMALLINT UNSIGNED, IN _height SMALLINT UNSIGNED, | ||
857 | + IN _xpos SMALLINT, IN _ypos SMALLINT) | ||
858 | +BEGIN | ||
859 | + DECLARE pid BIGINT DEFAULT NULL; | ||
860 | + | ||
861 | + IF _firstname IS NOT NULL AND _surname IS NOT NULL | ||
862 | + THEN | ||
863 | + SELECT personId INTO pid | ||
864 | + FROM person | ||
865 | + WHERE | ||
866 | + UPPER(firstname) = UPPER(_firstname) AND | ||
867 | + UPPER(surname) = UPPER(_surname); | ||
868 | + | ||
869 | + IF pid IS NOT NULL | ||
870 | + THEN | ||
871 | + UPDATE person | ||
872 | + SET | ||
873 | + firstname = _firstname, | ||
874 | + surname = _surname, | ||
875 | + company = _company, | ||
876 | + email = _email, | ||
877 | + url = _url | ||
878 | + WHERE | ||
879 | + personId = pid; | ||
880 | + ELSE | ||
881 | + INSERT INTO person (firstname, surname, company, email, url) | ||
882 | + VALUES (_firstname, _surname, _company, _email, _url); | ||
883 | + SELECT LAST_INSERT_ID() INTO pid; | ||
884 | + END IF; | ||
885 | + | ||
886 | + CALL updateOwner (pid, _width, _height, _xpos, _ypos); | ||
887 | + CALL updatePhotographer (pid, _camId); | ||
888 | + END IF; | ||
889 | + | ||
890 | + SELECT pid; | ||
891 | +END// | ||
892 | +DELIMITER ; | ||
893 | + | ||
894 | +INSERT INTO language | ||
895 | + (languageCode, countryCode) | ||
896 | +VALUES | ||
897 | + ('de', NULL), | ||
898 | + ('de', 'DE'), | ||
899 | + ('en', NULL), | ||
900 | + ('en', 'GB'), | ||
901 | + ('en', 'US'); | ||
902 | + | ||
903 | +INSERT INTO person | ||
904 | + (firstname, surname) | ||
905 | +VALUES | ||
906 | + ('Elisabeth', 'Steffers'), | ||
907 | + ('Mechtild', 'Steffers'), | ||
908 | + ('Wilhelm', 'Steffers'), | ||
909 | + ('Markus', 'Engbers'), | ||
910 | + ('Jens', 'Rautenberg'), | ||
911 | + ('Achim', 'Krämer'), | ||
912 | + ('Lambert', 'Herrgesell'), | ||
913 | + ('Jochen', 'Bilek'), | ||
914 | + ('Holger', 'Böking'), | ||
915 | + ('Torsten', 'Böking'), | ||
916 | + ('Georg', 'Steffers'), | ||
917 | + ('Donald', 'von Entenhausen'), | ||
918 | + ('Dagobert', 'von Entenhausen'); | ||
919 | + | ||
920 | +INSERT INTO watermark | ||
921 | + (width, height, xpos, ypos) | ||
922 | +VALUES | ||
923 | + (22, 22, -5, -5); | ||
924 | + | ||
925 | +INSERT INTO photographer | ||
926 | + (personId, cameraId) | ||
927 | +VALUES | ||
928 | + (2, 3); | ||
929 | + | ||
930 | +INSERT INTO owner | ||
931 | + (personId, watermarkId) | ||
932 | +VALUES | ||
933 | + (1, 1), | ||
934 | + (2, 1); | ||
935 | + | ||
936 | +INSERT INTO i18n | ||
937 | + (textId, language, text) | ||
938 | +VALUES | ||
939 | + (1, 1, 'Das erste Bild'), | ||
940 | + (1, 2, 'Das erste Bild'), | ||
941 | + (1, 3, 'The first picture'), | ||
942 | + (2, 1, 'Der erste Testeintrag in der DB'), | ||
943 | + (2, 2, 'Der erste Testeintrag in der DB'), | ||
944 | + (2, 3, 'The first testentry in the DB'), | ||
945 | + (3, 1, 'Pictures von Zuhause'), | ||
946 | + (3, 2, 'Pictures von Zuhause'), | ||
947 | + (3, 3, 'Pictures from home'), | ||
948 | + (4, 1, 'So wohn ich nunmal und basta.'), | ||
949 | + (4, 2, 'So wohn ich nunmal und basta.'), | ||
950 | + (4, 3, 'That\'s the way i live. End of story.'), | ||
951 | + (5, 1, 'Daheim'), | ||
952 | + (5, 3, 'Home'), | ||
953 | + (6, 1, 'Diese Sektion zeigt mein Zuhause'), | ||
954 | + (6, 3, 'This section shows my home'), | ||
955 | + (7, 1, 'dummy'), | ||
956 | + (7, 3, 'dummy'), | ||
957 | + (8, 1, 'Eine Dummy-Sektion'), | ||
958 | + (8, 3, 'A dummy-section'), | ||
959 | + (9, 1, 'Galerie 1'), | ||
960 | + (9, 3, 'Gallery 1'), | ||
961 | + (10, 1, 'Die erste Galerie'), | ||
962 | + (10, 3, 'The first gallery'), | ||
963 | + (11, 1, 'Kategorie 1'), | ||
964 | + (11, 3, 'Category 1'), | ||
965 | + (12, 1, 'Die erste Kategorie'), | ||
966 | + (12, 3, 'The first category'); | ||
967 | + | ||
968 | +INSERT INTO format | ||
969 | + (width, height, quality) | ||
970 | +VALUES | ||
971 | + (1024, 768, 100), | ||
972 | + (800, 600, 100); | ||
973 | + | ||
974 | +INSERT INTO picture | ||
975 | + (title, photographerId, ownerId, origWidth, origHeight) | ||
976 | +VALUES | ||
977 | + (1, 1, 2, 2835, 1212), | ||
978 | + (3, 1, 1, 2135, 1100), | ||
979 | + (1, 1, 2, 1024, 915); | ||
980 | + | ||
981 | +INSERT INTO pictureDetail | ||
982 | + (pictureId, textId) | ||
983 | +VALUES | ||
984 | + (1, 2), | ||
985 | + (2, 4), | ||
986 | + (3, 2); | ||
987 | + | ||
988 | +INSERT INTO picture_format | ||
989 | + (pictureId, formatId) | ||
990 | +VALUES | ||
991 | + (1, 1), | ||
992 | + (1, 2), | ||
993 | + (2, 1), | ||
994 | + (3, 1); | ||
995 | + | ||
996 | +INSERT INTO location | ||
997 | + (zip, city, street, hno, name) | ||
998 | +VALUES | ||
999 | + ('48145', 'Münster', 'Warendorfer Str.', '75', 'Daheim'); | ||
1000 | + | ||
1001 | +INSERT INTO section | ||
1002 | + (title, locationId) | ||
1003 | +VALUES | ||
1004 | + (5, 1), | ||
1005 | + (7, 1); | ||
1006 | + | ||
1007 | +INSERT INTO sectionDetail | ||
1008 | + (sectionId, textId) | ||
1009 | +VALUES | ||
1010 | + (1, 6), | ||
1011 | + (2, 8); | ||
1012 | + | ||
1013 | +INSERT INTO picture_section | ||
1014 | + (pictureId, sectionId, prio) | ||
1015 | +VALUES | ||
1016 | + (1, 1, 1), | ||
1017 | + (2, 1, 1), | ||
1018 | + (1, 2, 1); | ||
1019 | + | ||
1020 | +INSERT INTO gallery | ||
1021 | + (title, creator) | ||
1022 | +VALUES | ||
1023 | + (9, 1); | ||
1024 | + | ||
1025 | +INSERT INTO galleryDetail | ||
1026 | + (galleryId, textId) | ||
1027 | +VALUES | ||
1028 | + (1, 10); | ||
1029 | + | ||
1030 | +INSERT INTO section_gallery | ||
1031 | + (sectionId, galleryId, prio) | ||
1032 | +VALUES | ||
1033 | + (1, 1, 1); | ||
1034 | + | ||
1035 | +INSERT INTO template | ||
1036 | + (templateId, name) | ||
1037 | +VALUES | ||
1038 | + (1, 'Template 1'); | ||
1039 | + | ||
1040 | +INSERT INTO category | ||
1041 | + (title, templateId) | ||
1042 | +VALUES | ||
1043 | + (11, 1); | ||
1044 | + | ||
1045 | +INSERT INTO categoryDetail | ||
1046 | + (categoryId, textId) | ||
1047 | +VALUES | ||
1048 | + (1, 12); | ||
1049 | + | ||
1050 | +INSERT INTO gallery_category | ||
1051 | + (galleryId, categoryId, prio) | ||
1052 | +VALUES | ||
1053 | + (1, 1, 1); |
templates/personAdmin/personAdmin.tpl.php
0 → 100644
1 | +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" | ||
2 | + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | ||
3 | +<html> | ||
4 | + <head> | ||
5 | + <title>Nur zum testen</title> | ||
6 | + <meta http-equiv="content-type" content="text/html;charset=utf-8" /> | ||
7 | + | ||
8 | + <link rel="stylesheet" type="text/css" | ||
9 | + href="<?=CSSURL?>background-colors.css" /> | ||
10 | + <link rel="stylesheet" type="text/css" href="<?=CSSURL?>fonts.css" /> | ||
11 | + <link rel="stylesheet" type="text/css" href="<?=CSSURL?>displays.css" /> | ||
12 | + | ||
13 | + <script src="<?=JSURL?>levenshtein.js" type="text/javascript"></script> | ||
14 | + <script src="<?=JSURL?>fittingStrings.js" type="text/javascript"></script> | ||
15 | + <script src="<?=JSURL?>transPngBg.js" type="text/javascript"></script> | ||
16 | + <script src="<?=JSURL?>personAdmin/personSearch1.js" | ||
17 | + type="text/javascript"></script> | ||
18 | + <script src="<?=JSURL?>personAdmin/personInUp.js" | ||
19 | + type="text/javascript"></script> | ||
20 | + <script src="<?=JSURL?>personAdmin/person.js" | ||
21 | + type="text/javascript"></script> | ||
22 | + | ||
23 | + <script language="javascript"> | ||
24 | + //<![CDATA[ | ||
25 | + arrDown = new transPngBg ('circDblArrDownBlk.png', '<?=LIBURL?>'); | ||
26 | + arrRight = new transPngBg ('circDblArrRightBlk.png', '<?=LIBURL?>'); | ||
27 | + | ||
28 | + newPerson = new c_person ( | ||
29 | + -1, -1, -1, '', '', '', '', '', -1, '', '', '', ''); | ||
30 | + person = new c_person ( | ||
31 | + -1, -1, -1, '', '', '', '', '', -1, '', '', '', ''); | ||
32 | + //]]> | ||
33 | + </script> | ||
34 | + </head> | ||
35 | + | ||
36 | + <body> | ||
37 | + <div style="width: 350px"> | ||
38 | + <?=$this->personSearch1?> | ||
39 | + <div style="height: 5px; line-height: 5px"> </div> | ||
40 | + <?=$this->personInUp?> | ||
41 | + </div> | ||
42 | + </body> | ||
43 | +</html> |
templates/personAdmin/personInUp.tpl.php
0 → 100644
1 | +<script language="javascript"> | ||
2 | +//<![CDATA[ | ||
3 | + pInUp = new personInUp ( | ||
4 | + 'update', 'insert', 'submit', person, newPerson, arrRight, arrDown); | ||
5 | + | ||
6 | + function showHideBlock (titleId) | ||
7 | + { | ||
8 | + var titleElement = document.getElementById (titleId); | ||
9 | + var imgElement = titleElement.getElementsByTagName ('img')[0]; | ||
10 | + var blockElement = titleElement.parentNode; | ||
11 | + var dataElement = blockElement.getElementsByTagName ('div')[1]; | ||
12 | + | ||
13 | + if (dataElement.style.display == 'none') | ||
14 | + { | ||
15 | + dataElement.style.display = 'block'; | ||
16 | + imgElement.src = arrDown.getImgUrl (titleElement); | ||
17 | + } | ||
18 | + else | ||
19 | + { | ||
20 | + dataElement.style.display = 'none'; | ||
21 | + imgElement.src = arrRight.getImgUrl (titleElement); | ||
22 | + } | ||
23 | + } | ||
24 | + | ||
25 | + function personInUpInit () | ||
26 | + { | ||
27 | + var tCam = document.getElementById ('_title_camera'); | ||
28 | + var tCamImg = tCam.getElementsByTagName ('img')[0]; | ||
29 | + var tWat = document.getElementById ('_title_watermark'); | ||
30 | + var tWatImg = tWat.getElementsByTagName ('img')[0]; | ||
31 | + | ||
32 | + tCamImg.src = arrRight.getImgUrl (tCam); | ||
33 | + tWatImg.src = arrRight.getImgUrl (tWat); | ||
34 | + } | ||
35 | +//]]> | ||
36 | +</script> | ||
37 | + | ||
38 | +<div class="bgc-bg1 d-bg1 f-bg1"> | ||
39 | + <form id="pForm" onSubmit="return false"> | ||
40 | + <div> | ||
41 | + <table width="100%"><tr> | ||
42 | + <td style="vertical-align: middle"> | ||
43 | + <input type="checkbox" id="update" name="action" | ||
44 | + value="update" disabled="true" | ||
45 | + onClick="pInUp.updateForm ()" /> | ||
46 | + </td> | ||
47 | + <td style="vertical-align: middle"><?=_('update')?></td> | ||
48 | + <td style="vertical-align: middle"> </td> | ||
49 | + <td style="vertical-align: middle"> | ||
50 | + <input type="checkbox" id="insert" name="action" | ||
51 | + value="insert" | ||
52 | + onClick="pInUp.updateForm ()" /> | ||
53 | + </td> | ||
54 | + <td style="vertical-align: middle"><?=_('insert')?></td> | ||
55 | + <td align="right" width="100%"> | ||
56 | + <input type="button" id="submit" | ||
57 | + value="<?=_('submit')?>" disabled="true" /> | ||
58 | + </td> | ||
59 | + </tr></table> | ||
60 | + </div> | ||
61 | + <div class="bgc-grp1 d-grp1" style="margin-top: 2px"> | ||
62 | + <div class="bgc-head1 f-head1 d-head1"> | ||
63 | + <?=_('personal data')?> | ||
64 | + </div> | ||
65 | + <div class="bgc-box1 f-box1 d-box1"> | ||
66 | + <div> | ||
67 | + <input type="hidden" id="personId" value="-1" disabled="true" /> | ||
68 | + </div> | ||
69 | + <div> | ||
70 | + <input type="hidden" id="photographerId" value="-1" | ||
71 | + disabled="true" /> | ||
72 | + </div> | ||
73 | + <div> | ||
74 | + <input type="hidden" id="ownerId" value="-1" disabled="true" /> | ||
75 | + </div> | ||
76 | + <div> | ||
77 | + <input type="text" style="width: 200px" maxlength="255" | ||
78 | + id="firstname" value="" disabled="true" | ||
79 | + onChange="pInUp.setFirstname (this.value)" /> | ||
80 | + <?=_('firstname')?> | ||
81 | + </div> | ||
82 | + <div> | ||
83 | + <input type="text" style="width: 200px" maxlength="255" | ||
84 | + id="surname" value="" disabled="true" | ||
85 | + onChange="pInUp.setSurname (this.value)" /> | ||
86 | + <?=_('surname')?> | ||
87 | + </div> | ||
88 | + <div> | ||
89 | + <input type="text" style="width: 200px" maxlength="255" | ||
90 | + id="company" value="" disabled="true" | ||
91 | + onChange="pInUp.setCompany (this.value)" /> | ||
92 | + <?=_('company')?> | ||
93 | + </div> | ||
94 | + <div> | ||
95 | + <input type="text" style="width: 200px" maxlength="255" | ||
96 | + id="email" value="" disabled="true" | ||
97 | + onChange="pInUp.setEmail (this.value)" /> | ||
98 | + <?=_('email')?> | ||
99 | + </div> | ||
100 | + <div> | ||
101 | + <input type="text" style="width: 200px" maxlength="255" | ||
102 | + id="url" value="" disabled="true" | ||
103 | + onChange="pInUp.setUrl (this.value)" /> | ||
104 | + <?=_('url')?> | ||
105 | + </div> | ||
106 | + </div> | ||
107 | + </div> | ||
108 | + | ||
109 | + <div class="bgc-grp1 d-grp1" style="margin-top: 2px"> | ||
110 | + <div class="bgc-head1 f-head1 d-head1" id="_title_camera"> | ||
111 | + <img style=" | ||
112 | + position: relative; | ||
113 | + float: right; | ||
114 | + margin-right: 3px; | ||
115 | + cursor: pointer" | ||
116 | + onClick="showHideBlock ('_title_camera')" /> | ||
117 | + <?=_('photographer')?> | ||
118 | + </div> | ||
119 | + <div class="bgc-box1 f-box1 d-box1" style="display: none"> | ||
120 | + <div> | ||
121 | + <input type="text" style="width: 200px" maxlength="255" | ||
122 | + id="cameraId" value="-1" disabled="true" | ||
123 | + onChange="pInUp.setCameraId (this.value)" /> | ||
124 | + <?=_('cameraId')?> | ||
125 | + </div> | ||
126 | + </div> | ||
127 | + </div> | ||
128 | + | ||
129 | + <div class="bgc-grp1 d-grp1" style="margin-top: 2px"> | ||
130 | + <div class="bgc-head1 f-head1 d-head1" id="_title_watermark"> | ||
131 | + <img style=" | ||
132 | + position: relative; | ||
133 | + float: right; | ||
134 | + margin-right: 3px; | ||
135 | + cursor: pointer" | ||
136 | + onClick="showHideBlock ('_title_watermark')" /> | ||
137 | + <?=_('owner')?> | ||
138 | + </div> | ||
139 | + <div class="bgc-box1 f-box1 d-box1" style="display: none"> | ||
140 | + <div> | ||
141 | + <input type="text" style="width: 200px" maxlength="255" | ||
142 | + id="wmWidth" value="" disabled="true" | ||
143 | + onChange="pInUp.setWmWidth (this.value)" /> | ||
144 | + <?=_('watermark width')?> | ||
145 | + </div> | ||
146 | + <div> | ||
147 | + <input type="text" style="width: 200px" maxlength="255" | ||
148 | + id="wmHeight" value="" disabled="true" | ||
149 | + onChange="pInUp.setWmHeight (this.value)" /> | ||
150 | + <?=_('watermark height')?> | ||
151 | + </div> | ||
152 | + <div> | ||
153 | + <input type="text" style="width: 200px" maxlength="255" | ||
154 | + id="wmXPos" value="" disabled="true" | ||
155 | + onChange="pInUp.setWmXPos (this.value)" /> | ||
156 | + <?=_('watermark xPos')?> | ||
157 | + </div> | ||
158 | + <div> | ||
159 | + <input type="text" style="width: 200px" maxlength="255" | ||
160 | + id="wmYPos" value="" disabled="true" | ||
161 | + onChange="pInUp.setWmYPos (this.value)" /> | ||
162 | + <?=_('watermark yPos')?> | ||
163 | + </div> | ||
164 | + </div> | ||
165 | + </div> | ||
166 | + </form> | ||
167 | +</div> | ||
168 | + | ||
169 | +<script language="javascript"> | ||
170 | +//<![CDATA[ | ||
171 | + personInUpInit (); | ||
172 | +//]]> | ||
173 | +</script> |
templates/personAdmin/personSearch1.tpl.php
0 → 100644
1 | +<script language="javascript"> | ||
2 | +//<![CDATA[ | ||
3 | + var names = new Array (); | ||
4 | + | ||
5 | + <? foreach ($this->names as $surname => $data): ?> | ||
6 | + names['<?=$surname?>'] = new Array (); | ||
7 | + <? foreach ($data as $d): ?> | ||
8 | + names['<?=$surname?>'].push ( | ||
9 | + new Array ('<?=$d[0]?>', | ||
10 | + new c_person ( | ||
11 | + <?=$d[1]->get_personId ()?>, | ||
12 | + <?=(($val=$d[1]->get_photographerId ()) !== NULL)?$val:-1?>, | ||
13 | + <?=(($val=$d[1]->get_ownerId ()) !== NULL)?$val:-1?>, | ||
14 | + '<?=$d[1]->get_firstname ()?>', | ||
15 | + '<?=$d[1]->get_surname ()?>', | ||
16 | + '<?=$d[1]->get_company ()?>', | ||
17 | + '<?=$d[1]->get_email ()?>', | ||
18 | + '<?=$d[1]->get_url ()?>', | ||
19 | + <?=(($val=$d[1]->get_cameraId ()) !== NULL)?$val:-1?>, | ||
20 | + '<?=(($val=$d[1]->get_wmWidth ()) !== NULL)?$val:''?>', | ||
21 | + '<?=(($val=$d[1]->get_wmHeight ()) !== NULL)?$val:''?>', | ||
22 | + '<?=(($val=$d[1]->get_wmXPos ()) !== NULL)?$val:''?>', | ||
23 | + '<?=(($val=$d[1]->get_wmYPos ()) !== NULL)?$val:''?>'))); | ||
24 | + <? endforeach ?> | ||
25 | + <? endforeach ?> | ||
26 | + | ||
27 | + pSearch1 = new c_personSearch1 ( | ||
28 | + 'personSearch1_fname', 'personSearch1_sname', | ||
29 | + 'personSearch1_fBestFit', 'personSearch1_sBestFit', names, person); | ||
30 | +//]]> | ||
31 | +</script> | ||
32 | + | ||
33 | +<div class="bgc-bg1 d-bg1"> | ||
34 | + <div class="bgc-grp1 d-grp1"> | ||
35 | + <form id="personForm" onSubmit="return false"> | ||
36 | + <div class="bgc-head1 f-head1 d-head1"> | ||
37 | + <?=_('search')?> | ||
38 | + </div> | ||
39 | + <div class="bgc-box1 f-box1 d-box1"> | ||
40 | + <div style="position: relative; z-index: 1"> | ||
41 | + <input type="text" style="width: 200px" maxlength="255" | ||
42 | + id="personSearch1_sname" value="" | ||
43 | + onKeyUp="return pSearch1.altSurnames ()" | ||
44 | + onBlur="return pSearch1.hide ('personSearch1_sBestFit')" /> | ||
45 | + <?=_('surname')?> | ||
46 | + <div class="bgc-tt1 d-tt1" | ||
47 | + style="position: absolute; top: 20px; left: 0px"> | ||
48 | + <ul id="personSearch1_sBestFit" class="d-tt1" /> | ||
49 | + </div> | ||
50 | + </div> | ||
51 | + <div style="position: relative; z-index: 0"> | ||
52 | + <input type="text" style="width: 200px" maxlength="255" | ||
53 | + id="personSearch1_fname" value="" | ||
54 | + onKeyUp="return pSearch1.altFirstnames ()" | ||
55 | + onBlur="return pSearch1.hide ('personSearch1_fBestFit')" /> | ||
56 | + <?=_('firstname')?> | ||
57 | + <div class="bgc-tt1 d-tt1" | ||
58 | + style="position: absolute; top: 20px; left: 0px"> | ||
59 | + <ul id="personSearch1_fBestFit" class="d-tt1" /> | ||
60 | + </div> | ||
61 | + </div> | ||
62 | + </div> | ||
63 | + </form> | ||
64 | + </div> | ||
65 | +</div> |
Please
register
or
login
to post a comment