Commit a59033430fa5503088080aaf69db6ea199507f0b

Authored by Georg Hopp
1 parent b71bd5c3

Erster import der aktuellen Arbitskopie des neuen Bildertools

  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 ""
  1 +<?php
  2 +
  3 +require_once dirname(__FILE__) . '/../config.php';
  4 +require_once LIBDIR . 'initLocale.php';
  5 +require_once LIBDIR . 'c_personAdmin.php';
  6 +
  7 +$personAdmin = new c_personAdmin ($locale);
  8 +
  9 +ob_start ('ob_gzhandler');
  10 +$personAdmin->show ();
  11 +
  12 +?>
  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 +?>
  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 +/* ======================================================================= */
  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 +/* ======================================================================= */
  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 +/* ======================================================================= */
No preview for this file type
  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 +}
  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 +}
  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 +}
  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 +}
  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 +}
  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 +}
  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 +?>
  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 +?>
  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 +?>
  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 +?>
  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 +?>
  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 ("&lt;", "&gt;") , $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 +?>
  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 +?>
  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 +?>
  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 +?>
No preview for this file type
  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"
  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);
  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">&nbsp;</div>
  40 + <?=$this->personInUp?>
  41 + </div>
  42 + </body>
  43 +</html>
  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">&nbsp;&nbsp;</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>
  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