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