From c0f79397dd75e03a7a40303f82926e8187697d07 Mon Sep 17 00:00:00 2001
From: M.Gergo
Date: Fri, 8 Mar 2019 23:32:47 +0100
Subject: Rev: 4455
---
.../mayor-wiki/wiki/data/pages/base/azonositas.txt | 74 +
.../mayor-wiki/wiki/data/pages/base/backend.txt | 11 +
.../mayor-wiki/wiki/data/pages/base/backend/ad.txt | 111 +
.../wiki/data/pages/base/backend/ldap.txt | 26 +
.../wiki/data/pages/base/hibakezeles.txt | 20 +
.../mayor-wiki/wiki/data/pages/base/mayor-base.txt | 16 +
.../mayor-wiki/wiki/data/pages/base/menue.txt | 96 +
.../mayor-wiki/wiki/data/pages/base/nyelv.txt | 5 +
.../wiki/data/pages/base/oldalszerkezet.txt | 115 +
.../mayor-wiki/wiki/data/pages/base/policy.txt | 6 +
.../wiki/data/pages/base/policy/parent.txt | 3 +
.../wiki/data/pages/base/policy/private.txt | 3 +
.../wiki/data/pages/base/policy/public.txt | 3 +
.../wiki/data/pages/base/regisztracio.txt | 41 +
.../wiki/data/pages/gyik/jogi_hatter.txt | 157 ++
.../mayor-wiki/wiki/data/pages/gyik/mayorca.txt | 77 +
.../mayor-wiki/wiki/data/pages/gyik/naplo.txt | 408 ++++
.../wiki/data/pages/hogyan/asc-ctrl-shift-e.txt | 53 +
.../wiki/data/pages/hogyan/beiratkozas.txt | 61 +
.../mayor-wiki/wiki/data/pages/hogyan/dobozok.txt | 55 +
.../wiki/data/pages/hogyan/evvegi_teendok.txt | 63 +
.../mayor-wiki/wiki/data/pages/hogyan/facebook.txt | 28 +
.../data/pages/hogyan/felevi_evvegi_elrejtese.txt | 33 +
.../wiki/data/pages/hogyan/felevi_teendok.txt | 49 +
.../hogyan/felhasznaloi_azonositok_generalasa.txt | 94 +
.../hogyan/felhasznalonevek_megvaltoztatasa.txt | 71 +
.../mayor-wiki/wiki/data/pages/hogyan/google.txt | 26 +
.../wiki/data/pages/hogyan/haladasi_utolag.txt | 41 +
.../data/pages/hogyan/hasznos_sql_gyujtemeny.txt | 159 ++
.../wiki/data/pages/hogyan/hataridok.txt | 84 +
.../wiki/data/pages/hogyan/jelszoemlekezteto.txt | 65 +
.../wiki/data/pages/hogyan/jogviszony.txt | 49 +
.../wiki/data/pages/hogyan/karbantartas.txt | 78 +
.../wiki/data/pages/hogyan/kepesitesek.txt | 75 +
.../wiki/data/pages/hogyan/kozossegi_szolgalat.txt | 35 +
.../wiki/data/pages/hogyan/mayor_szkript.txt | 40 +
.../wiki/data/pages/hogyan/menu_testreszabas.txt | 25 +
.../mayor-wiki/wiki/data/pages/hogyan/orarend.txt | 97 +
.../pages/hogyan/orarendi_hetek_atallitasa.txt | 10 +
.../data/pages/hogyan/osztaly_heti_idokeret.txt | 53 +
.../data/pages/hogyan/specialis_tanitasinap.txt | 25 +
.../mayor-wiki/wiki/data/pages/hogyan/sulix.txt | 56 +
.../pages/hogyan/szueloi_adatok_betoeltese.txt | 110 +
.../szueloi_adatok_betoeltese_kiegeszitesekkel.txt | 92 +
.../pages/hogyan/szueloi_azonositok_generalasa.txt | 149 ++
.../wiki/data/pages/hogyan/tantargyfelosztas.txt | 189 ++
.../wiki/data/pages/hogyan/tanusitvany.txt | 48 +
.../wiki/data/pages/hogyan/targy_atnevezes.txt | 102 +
.../wiki/data/pages/hogyan/telepites-debian.txt | 33 +
.../wiki/data/pages/hogyan/telepites-hw.txt | 15 +
.../wiki/data/pages/hogyan/telepites-man.txt | 521 ++++
.../wiki/data/pages/hogyan/telepites.txt | 105 +
.../mayor-wiki/wiki/data/pages/hogyan/uj_diak.txt | 27 +
.../mayor-wiki/wiki/data/pages/hogyan/uj_skin.txt | 43 +
.../data/pages/hogyan/visszatoltes_mentesbol.txt | 176 ++
.../wiki/data/pages/hogyan/wiki_sajat_gepre.txt | 36 +
.../wiki/data/pages/jogtar/adatkezeles.txt | 355 +++
.../wiki/data/pages/jogtar/adatszolgaltatas.txt | 64 +
.../wiki/data/pages/jogtar/adatvedelem.txt | 174 ++
.../wiki/data/pages/jogtar/bizonyitvany.txt | 18 +
.../wiki/data/pages/jogtar/elszamolas.txt | 30 +
.../wiki/data/pages/jogtar/ertekeles.txt | 48 +
.../wiki/data/pages/jogtar/evismetles.txt | 10 +
.../wiki/data/pages/jogtar/fejlesztes.txt | 119 +
.../mayor-wiki/wiki/data/pages/jogtar/hianyzas.txt | 126 +
.../wiki/data/pages/jogtar/iskolavaltas.txt | 124 +
.../wiki/data/pages/jogtar/nyelvi_elokeszito.txt | 18 +
.../wiki/data/pages/jogtar/nyomtatvanyok.txt | 109 +
.../mayor-wiki/wiki/data/pages/jogtar/oktatas.txt | 95 +
.../wiki/data/pages/jogtar/osztalyozovizsga.txt | 192 ++
.../wiki/data/pages/jogtar/pedagogiai_program.txt | 64 +
.../wiki/data/pages/jogtar/pedagogus_munkakor.txt | 74 +
.../mayor-wiki/wiki/data/pages/jogtar/sni.txt | 265 +++
.../wiki/data/pages/jogtar/tanitasi_nap.txt | 9 +
.../wiki/data/pages/jogtar/tanuloi_jogviszony.txt | 171 ++
.../wiki/data/pages/jogtar/zaradekok.txt | 261 ++
.../wiki/data/pages/jogtar/zarojegyek.txt | 645 +++++
.../mayor-wiki/wiki/data/pages/koncepcio.txt | 31 +
mayor-orig/mayor-wiki/wiki/data/pages/modulok.txt | 8 +
mayor-orig/mayor-wiki/wiki/data/pages/naplo.txt | 11 +
.../wiki/data/pages/naplo/admin/azonositok.txt | 21 +
.../wiki/data/pages/naplo/admin/fillhaladasi.txt | 23 +
.../wiki/data/pages/naplo/admin/import.txt | 23 +
.../wiki/data/pages/naplo/admin/rpcprivilege.txt | 35 +
.../wiki/data/pages/naplo/admin/szemeszterek.txt | 24 +
.../wiki/data/pages/naplo/admin/tanevek.txt | 82 +
.../mayor-wiki/wiki/data/pages/naplo/csoportok.txt | 27 +
.../data/pages/naplo/ertekeles/kerdoivbetoltes.txt | 146 ++
.../wiki/data/pages/naplo/export/bizonyitvany.txt | 12 +
.../mayor-wiki/wiki/data/pages/naplo/fogadoora.txt | 22 +
.../wiki/data/pages/naplo/haladasi/elmaradas.txt | 16 +
.../wiki/data/pages/naplo/haladasi/elszamolas.txt | 47 +
.../wiki/data/pages/naplo/haladasi/haladasi.txt | 16 +
.../wiki/data/pages/naplo/haladasi/minuszora.txt | 16 +
.../wiki/data/pages/naplo/haladasi/osszevonas.txt | 31 +
.../wiki/data/pages/naplo/haladasi/pluszora.txt | 21 +
.../wiki/data/pages/naplo/haladasi/specialis.txt | 15 +
.../wiki/data/pages/naplo/haladasi/stat.txt | 46 +
.../wiki/data/pages/naplo/hianyzas/osztaly.txt | 48 +
.../wiki/data/pages/naplo/hibabejelento/admin.txt | 28 +
.../pages/naplo/hibabejelento/hibabejelento.txt | 24 +
.../data/pages/naplo/hirnok/hirnokfeliratkozas.txt | 68 +
.../naplo/intezmeny/diaktankorjelentkezes.txt | 10 +
.../wiki/data/pages/naplo/intezmeny/kepzes.txt | 31 +
.../data/pages/naplo/intezmeny/munkakozosseg.txt | 21 +
.../wiki/data/pages/naplo/intezmeny/osztaly.txt | 109 +
.../wiki/data/pages/naplo/intezmeny/tanar.txt | 67 +
.../wiki/data/pages/naplo/intezmeny/tankordiak.txt | 37 +
.../pages/naplo/intezmeny/tankorszemeszter.txt | 22 +
.../data/pages/naplo/intezmeny/tankortanar.txt | 8 +
.../wiki/data/pages/naplo/intezmeny/valtas.txt | 7 +
.../wiki/data/pages/naplo/mayor-naplo.txt | 34 +
.../pages/naplo/nyomtatas/szovegesertekeles.txt | 71 +
.../wiki/data/pages/naplo/nyomtatas/torzslap.txt | 50 +
.../pages/naplo/orarend/asc_timetables_xml.txt | 16 +
.../asc_timetables_xml_tankoeroek_nelkuel.txt | 20 +
.../wiki/data/pages/naplo/orarend/ascexport.txt | 102 +
.../wiki/data/pages/naplo/orarend/orarend.txt | 3 +
.../data/pages/naplo/orarend/orarendbetolto.txt | 31 +
.../data/pages/naplo/orarend/orarendtankor.txt | 9 +
.../pages/naplo/orarend/orarendteremmodositas.txt | 9 +
.../wiki/data/pages/naplo/orarend/tanarorarend.txt | 10 +
.../pages/naplo/orarend/vegzosorarendlezaras.txt | 15 +
.../wiki/data/pages/naplo/osztalyozo.txt | 3 +
.../wiki/data/pages/naplo/osztalyozo/diak.txt | 11 +
.../wiki/data/pages/naplo/osztalyozo/dolgozat.txt | 41 +
.../wiki/data/pages/naplo/osztalyozo/jegy.txt | 29 +
.../pages/naplo/osztalyozo/szempontrendszer.txt | 32 +
.../pages/naplo/osztalyozo/szovegesertekeles.txt | 11 +
.../wiki/data/pages/naplo/osztalyozo/tankor.txt | 47 +
.../wiki/data/pages/naplo/osztalyozo/vizsga.txt | 33 +
.../wiki/data/pages/naplo/small_faces.txt | 104 +
.../wiki/data/pages/naplo/tanev/fogadoora.txt | 22 +
.../wiki/data/pages/naplo/tanev/munkaterv.txt | 92 +
.../wiki/data/pages/naplo/tanev/tankorblokk.txt | 10 +
.../wiki/data/pages/naplo/tanev/tankorcsoport.txt | 26 +
.../data/pages/naplo/tanmenet/tanmenetinfo.txt | 15 +
.../data/pages/naplo/tanmenet/tanmenetleadas.txt | 12 +
.../pages/naplo/tanmenet/tanmenetmodositas.txt | 58 +
.../data/pages/naplo/tanmenet/tanmenettankor.txt | 44 +
.../wiki/data/pages/naplo/tanmenet/ujtanmenet.txt | 7 +
.../mayor-wiki/wiki/data/pages/naplo/toolbar.txt | 17 +
.../wiki/data/pages/portal/hirek/hirekadmin.txt | 25 +
.../wiki/data/pages/portal/telepites.txt | 75 +
.../wiki/data/pages/session/createaccount.txt | 13 +
.../wiki/data/pages/session/groupinfo.txt | 6 +
mayor-orig/mayor-wiki/wiki/data/pages/sidebar.txt | 1 +
mayor-orig/mayor-wiki/wiki/data/pages/start.txt | 7 +
.../mayor-wiki/wiki/lib/plugins/bbcode/COPYING | 340 +++
.../mayor-wiki/wiki/lib/plugins/bbcode/README | 10 +
.../wiki/lib/plugins/bbcode/plugin.info.txt | 7 +
.../wiki/lib/plugins/bbcode/syntax/bold.php | 39 +
.../wiki/lib/plugins/bbcode/syntax/code.php | 39 +
.../wiki/lib/plugins/bbcode/syntax/color.php | 236 ++
.../wiki/lib/plugins/bbcode/syntax/deleted.php | 39 +
.../wiki/lib/plugins/bbcode/syntax/email.php | 47 +
.../wiki/lib/plugins/bbcode/syntax/image.php | 55 +
.../wiki/lib/plugins/bbcode/syntax/italic.php | 39 +
.../wiki/lib/plugins/bbcode/syntax/link.php | 60 +
.../wiki/lib/plugins/bbcode/syntax/monospace.php | 39 +
.../wiki/lib/plugins/bbcode/syntax/olist.php | 90 +
.../wiki/lib/plugins/bbcode/syntax/quote.php | 73 +
.../wiki/lib/plugins/bbcode/syntax/size.php | 104 +
.../wiki/lib/plugins/bbcode/syntax/ulist.php | 72 +
.../wiki/lib/plugins/bbcode/syntax/underline.php | 39 +
.../mayor-wiki/wiki/lib/tpl/mayor/VERSION.txt | 1 +
.../mayor-wiki/wiki/lib/tpl/mayor/conf/default.php | 17 +
.../wiki/lib/tpl/mayor/conf/metadata.php | 17 +
.../mayor-wiki/wiki/lib/tpl/mayor/design.css | 1029 ++++++++
.../mayor-wiki/wiki/lib/tpl/mayor/detail.php | 92 +
.../mayor-wiki/wiki/lib/tpl/mayor/footer.html | 70 +
.../wiki/lib/tpl/mayor/images/b/actions/admin.png | Bin 0 -> 1105 bytes
.../lib/tpl/mayor/images/b/actions/backlink.png | Bin 0 -> 926 bytes
.../wiki/lib/tpl/mayor/images/b/actions/create.png | Bin 0 -> 685 bytes
.../lib/tpl/mayor/images/b/actions/delicious.gif | Bin 0 -> 129 bytes
.../wiki/lib/tpl/mayor/images/b/actions/digg.gif | Bin 0 -> 958 bytes
.../wiki/lib/tpl/mayor/images/b/actions/edit.png | Bin 0 -> 1061 bytes
.../wiki/lib/tpl/mayor/images/b/actions/google.gif | Bin 0 -> 944 bytes
.../lib/tpl/mayor/images/b/actions/history.png | Bin 0 -> 1285 bytes
.../wiki/lib/tpl/mayor/images/b/actions/index.png | Bin 0 -> 892 bytes
.../wiki/lib/tpl/mayor/images/b/actions/login.png | Bin 0 -> 1073 bytes
.../lib/tpl/mayor/images/b/actions/previous.png | Bin 0 -> 915 bytes
.../lib/tpl/mayor/images/b/actions/profile.png | Bin 0 -> 904 bytes
.../wiki/lib/tpl/mayor/images/b/actions/recent.png | Bin 0 -> 1161 bytes
.../wiki/lib/tpl/mayor/images/b/actions/show.png | Bin 0 -> 547 bytes
.../lib/tpl/mayor/images/b/actions/subscribe.png | Bin 0 -> 936 bytes
.../wiki/lib/tpl/mayor/images/b/actions/top.png | Bin 0 -> 948 bytes
.../lib/tpl/mayor/images/b/actions/unsubscribe.png | Bin 0 -> 933 bytes
.../wiki/lib/tpl/mayor/images/b/black_arrow.gif | Bin 0 -> 81 bytes
.../lib/tpl/mayor/images/b/faded_background.png | Bin 0 -> 11180 bytes
.../wiki/lib/tpl/mayor/images/b/favicon.png | Bin 0 -> 767 bytes
.../wiki/lib/tpl/mayor/images/b/find.gif | Bin 0 -> 1112 bytes
.../lib/tpl/mayor/images/b/gradient_background.png | Bin 0 -> 245 bytes
.../wiki/lib/tpl/mayor/images/b/gradient_bc.png | Bin 0 -> 185 bytes
.../wiki/lib/tpl/mayor/images/b/gradient_logo.png | Bin 0 -> 241 bytes
.../lib/tpl/mayor/images/b/gradient_status.png | Bin 0 -> 197 bytes
.../wiki/lib/tpl/mayor/images/b/user_icon.png | Bin 0 -> 1113 bytes
.../wiki/lib/tpl/mayor/images/b/wiki_logo.png | Bin 0 -> 5177 bytes
.../wiki/lib/tpl/mayor/images/bullet.gif | Bin 0 -> 51 bytes
.../wiki/lib/tpl/mayor/images/button-cc.gif | Bin 0 -> 1231 bytes
.../wiki/lib/tpl/mayor/images/button-css.png | Bin 0 -> 299 bytes
.../wiki/lib/tpl/mayor/images/button-donate.gif | Bin 0 -> 200 bytes
.../wiki/lib/tpl/mayor/images/button-dw.png | Bin 0 -> 427 bytes
.../wiki/lib/tpl/mayor/images/button-php.gif | Bin 0 -> 269 bytes
.../wiki/lib/tpl/mayor/images/button-rss.png | Bin 0 -> 280 bytes
.../wiki/lib/tpl/mayor/images/button-xhtml.png | Bin 0 -> 321 bytes
.../wiki/lib/tpl/mayor/images/buttonshadow.png | Bin 0 -> 257 bytes
.../wiki/lib/tpl/mayor/images/closed.gif | Bin 0 -> 54 bytes
.../wiki/lib/tpl/mayor/images/favicon.ico | Bin 0 -> 1406 bytes
.../wiki/lib/tpl/mayor/images/favicon_blue.ico | Bin 0 -> 1406 bytes
.../wiki/lib/tpl/mayor/images/favicon_green.ico | Bin 0 -> 1406 bytes
.../wiki/lib/tpl/mayor/images/favicon_plain.ico | Bin 0 -> 7406 bytes
.../wiki/lib/tpl/mayor/images/inputshadow.png | Bin 0 -> 155 bytes
.../wiki/lib/tpl/mayor/images/link_icon.gif | Bin 0 -> 942 bytes
.../wiki/lib/tpl/mayor/images/mail_icon.gif | Bin 0 -> 918 bytes
.../mayor-wiki/wiki/lib/tpl/mayor/images/open.gif | Bin 0 -> 54 bytes
.../wiki/lib/tpl/mayor/images/p/actions/admin.png | Bin 0 -> 1018 bytes
.../lib/tpl/mayor/images/p/actions/backlink.png | Bin 0 -> 727 bytes
.../wiki/lib/tpl/mayor/images/p/actions/create.png | Bin 0 -> 961 bytes
.../lib/tpl/mayor/images/p/actions/delicious.gif | Bin 0 -> 129 bytes
.../wiki/lib/tpl/mayor/images/p/actions/digg.gif | Bin 0 -> 958 bytes
.../wiki/lib/tpl/mayor/images/p/actions/edit.png | Bin 0 -> 961 bytes
.../wiki/lib/tpl/mayor/images/p/actions/google.gif | Bin 0 -> 944 bytes
.../lib/tpl/mayor/images/p/actions/history.png | Bin 0 -> 1104 bytes
.../wiki/lib/tpl/mayor/images/p/actions/index.png | Bin 0 -> 818 bytes
.../wiki/lib/tpl/mayor/images/p/actions/login.png | Bin 0 -> 836 bytes
.../lib/tpl/mayor/images/p/actions/previous.png | Bin 0 -> 824 bytes
.../lib/tpl/mayor/images/p/actions/profile.png | Bin 0 -> 999 bytes
.../wiki/lib/tpl/mayor/images/p/actions/recent.png | Bin 0 -> 1009 bytes
.../wiki/lib/tpl/mayor/images/p/actions/show.png | Bin 0 -> 503 bytes
.../lib/tpl/mayor/images/p/actions/subscribe.png | Bin 0 -> 955 bytes
.../wiki/lib/tpl/mayor/images/p/actions/top.png | Bin 0 -> 992 bytes
.../lib/tpl/mayor/images/p/actions/unsubscribe.png | Bin 0 -> 921 bytes
.../lib/tpl/mayor/images/p/faded_background.png | Bin 0 -> 29017 bytes
.../lib/tpl/mayor/images/p/gradient_background.png | Bin 0 -> 246 bytes
.../wiki/lib/tpl/mayor/images/p/gradient_bc.png | Bin 0 -> 203 bytes
.../wiki/lib/tpl/mayor/images/p/gradient_logo.png | Bin 0 -> 198 bytes
.../lib/tpl/mayor/images/p/gradient_status.png | Bin 0 -> 151 bytes
.../wiki/lib/tpl/mayor/images/p/wiki_logo.png | Bin 0 -> 7948 bytes
.../wiki/lib/tpl/mayor/images/r/actions/admin.png | Bin 0 -> 1105 bytes
.../lib/tpl/mayor/images/r/actions/backlink.png | Bin 0 -> 1007 bytes
.../wiki/lib/tpl/mayor/images/r/actions/create.png | Bin 0 -> 685 bytes
.../lib/tpl/mayor/images/r/actions/delicious.gif | Bin 0 -> 129 bytes
.../wiki/lib/tpl/mayor/images/r/actions/digg.gif | Bin 0 -> 958 bytes
.../wiki/lib/tpl/mayor/images/r/actions/edit.png | Bin 0 -> 1061 bytes
.../wiki/lib/tpl/mayor/images/r/actions/google.gif | Bin 0 -> 944 bytes
.../lib/tpl/mayor/images/r/actions/history.png | Bin 0 -> 1144 bytes
.../wiki/lib/tpl/mayor/images/r/actions/index.png | Bin 0 -> 892 bytes
.../wiki/lib/tpl/mayor/images/r/actions/login.png | Bin 0 -> 1111 bytes
.../lib/tpl/mayor/images/r/actions/previous.png | Bin 0 -> 822 bytes
.../lib/tpl/mayor/images/r/actions/profile.png | Bin 0 -> 904 bytes
.../wiki/lib/tpl/mayor/images/r/actions/recent.png | Bin 0 -> 1370 bytes
.../wiki/lib/tpl/mayor/images/r/actions/show.png | Bin 0 -> 547 bytes
.../lib/tpl/mayor/images/r/actions/subscribe.png | Bin 0 -> 936 bytes
.../wiki/lib/tpl/mayor/images/r/actions/top.png | Bin 0 -> 768 bytes
.../lib/tpl/mayor/images/r/actions/unsubscribe.png | Bin 0 -> 933 bytes
.../wiki/lib/tpl/mayor/images/r/black_arrow.gif | Bin 0 -> 81 bytes
.../lib/tpl/mayor/images/r/faded_background.png | Bin 0 -> 5964 bytes
.../wiki/lib/tpl/mayor/images/r/favicon.png | Bin 0 -> 667 bytes
.../wiki/lib/tpl/mayor/images/r/find.gif | Bin 0 -> 1209 bytes
.../lib/tpl/mayor/images/r/gradient_background.png | Bin 0 -> 247 bytes
.../wiki/lib/tpl/mayor/images/r/gradient_bc.png | Bin 0 -> 185 bytes
.../wiki/lib/tpl/mayor/images/r/gradient_logo.png | Bin 0 -> 244 bytes
.../lib/tpl/mayor/images/r/gradient_status.png | Bin 0 -> 197 bytes
.../wiki/lib/tpl/mayor/images/r/user_icon.png | Bin 0 -> 995 bytes
.../wiki/lib/tpl/mayor/images/r/wiki_logo.png | Bin 0 -> 4967 bytes
.../wiki/lib/tpl/mayor/images/tocdot2.gif | Bin 0 -> 810 bytes
.../wiki/lib/tpl/mayor/images/windows.gif | Bin 0 -> 223 bytes
.../mayor-wiki/wiki/lib/tpl/mayor/js/builder.js | 131 +
.../mayor-wiki/wiki/lib/tpl/mayor/js/controls.js | 835 +++++++
.../mayor-wiki/wiki/lib/tpl/mayor/js/dragdrop.js | 944 ++++++++
.../mayor-wiki/wiki/lib/tpl/mayor/js/effects.js | 1090 +++++++++
.../mayor-wiki/wiki/lib/tpl/mayor/js/prototype.js | 2515 ++++++++++++++++++++
.../wiki/lib/tpl/mayor/js/scriptaculous.js | 51 +
.../mayor-wiki/wiki/lib/tpl/mayor/js/slider.js | 278 +++
.../wiki/lib/tpl/mayor/lang/en/settings.php | 22 +
.../wiki/lib/tpl/mayor/lang/hu/settings.php | 22 +
.../wiki/lib/tpl/mayor/lang/it/settings.php | 21 +
.../mayor-wiki/wiki/lib/tpl/mayor/layout.css | 232 ++
mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/main.php | 362 +++
mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/media.css | 204 ++
.../mayor-wiki/wiki/lib/tpl/mayor/mediamanager.php | 44 +
mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/print.css | 236 ++
mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/rtl.css | 111 +
mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/style.ini | 147 ++
.../mayor-wiki/wiki/lib/tpl/mayor/style_blue.ini | 147 ++
.../mayor-wiki/wiki/lib/tpl/mayor/style_green.ini | 147 ++
.../mayor-wiki/wiki/lib/tpl/mayor/style_plain.ini | 147 ++
.../wiki/lib/tpl/mayor/tplfn_sidebar.php | 97 +
289 files changed, 19815 insertions(+)
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/base/azonositas.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/base/backend.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/base/backend/ad.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/base/backend/ldap.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/base/hibakezeles.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/base/mayor-base.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/base/menue.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/base/nyelv.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/base/oldalszerkezet.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/base/policy.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/base/policy/parent.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/base/policy/private.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/base/policy/public.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/base/regisztracio.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/gyik/jogi_hatter.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/gyik/mayorca.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/gyik/naplo.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/asc-ctrl-shift-e.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/beiratkozas.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/dobozok.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/evvegi_teendok.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/facebook.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/felevi_evvegi_elrejtese.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/felevi_teendok.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/felhasznaloi_azonositok_generalasa.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/felhasznalonevek_megvaltoztatasa.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/google.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/haladasi_utolag.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/hasznos_sql_gyujtemeny.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/hataridok.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/jelszoemlekezteto.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/jogviszony.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/karbantartas.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/kepesitesek.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/kozossegi_szolgalat.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/mayor_szkript.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/menu_testreszabas.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/orarend.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/orarendi_hetek_atallitasa.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/osztaly_heti_idokeret.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/specialis_tanitasinap.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/sulix.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/szueloi_adatok_betoeltese.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/szueloi_adatok_betoeltese_kiegeszitesekkel.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/szueloi_azonositok_generalasa.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/tantargyfelosztas.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/tanusitvany.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/targy_atnevezes.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/telepites-debian.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/telepites-hw.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/telepites-man.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/telepites.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/uj_diak.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/uj_skin.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/visszatoltes_mentesbol.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/hogyan/wiki_sajat_gepre.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/jogtar/adatkezeles.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/jogtar/adatszolgaltatas.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/jogtar/adatvedelem.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/jogtar/bizonyitvany.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/jogtar/elszamolas.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/jogtar/ertekeles.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/jogtar/evismetles.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/jogtar/fejlesztes.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/jogtar/hianyzas.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/jogtar/iskolavaltas.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/jogtar/nyelvi_elokeszito.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/jogtar/nyomtatvanyok.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/jogtar/oktatas.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/jogtar/osztalyozovizsga.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/jogtar/pedagogiai_program.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/jogtar/pedagogus_munkakor.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/jogtar/sni.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/jogtar/tanitasi_nap.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/jogtar/tanuloi_jogviszony.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/jogtar/zaradekok.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/jogtar/zarojegyek.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/koncepcio.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/modulok.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/admin/azonositok.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/admin/fillhaladasi.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/admin/import.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/admin/rpcprivilege.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/admin/szemeszterek.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/admin/tanevek.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/csoportok.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/ertekeles/kerdoivbetoltes.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/export/bizonyitvany.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/fogadoora.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/haladasi/elmaradas.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/haladasi/elszamolas.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/haladasi/haladasi.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/haladasi/minuszora.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/haladasi/osszevonas.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/haladasi/pluszora.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/haladasi/specialis.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/haladasi/stat.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/hianyzas/osztaly.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/hibabejelento/admin.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/hibabejelento/hibabejelento.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/hirnok/hirnokfeliratkozas.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/intezmeny/diaktankorjelentkezes.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/intezmeny/kepzes.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/intezmeny/munkakozosseg.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/intezmeny/osztaly.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/intezmeny/tanar.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/intezmeny/tankordiak.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/intezmeny/tankorszemeszter.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/intezmeny/tankortanar.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/intezmeny/valtas.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/mayor-naplo.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/nyomtatas/szovegesertekeles.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/nyomtatas/torzslap.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/orarend/asc_timetables_xml.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/orarend/asc_timetables_xml_tankoeroek_nelkuel.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/orarend/ascexport.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/orarend/orarend.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/orarend/orarendbetolto.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/orarend/orarendtankor.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/orarend/orarendteremmodositas.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/orarend/tanarorarend.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/orarend/vegzosorarendlezaras.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/osztalyozo.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/osztalyozo/diak.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/osztalyozo/dolgozat.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/osztalyozo/jegy.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/osztalyozo/szempontrendszer.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/osztalyozo/szovegesertekeles.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/osztalyozo/tankor.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/osztalyozo/vizsga.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/small_faces.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/tanev/fogadoora.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/tanev/munkaterv.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/tanev/tankorblokk.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/tanev/tankorcsoport.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/tanmenet/tanmenetinfo.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/tanmenet/tanmenetleadas.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/tanmenet/tanmenetmodositas.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/tanmenet/tanmenettankor.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/tanmenet/ujtanmenet.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/naplo/toolbar.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/portal/hirek/hirekadmin.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/portal/telepites.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/session/createaccount.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/session/groupinfo.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/sidebar.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/data/pages/start.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/COPYING
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/README
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/plugin.info.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/bold.php
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/code.php
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/color.php
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/deleted.php
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/email.php
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/image.php
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/italic.php
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/link.php
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/monospace.php
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/olist.php
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/quote.php
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/size.php
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/ulist.php
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/underline.php
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/VERSION.txt
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/conf/default.php
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/conf/metadata.php
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/design.css
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/detail.php
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/footer.html
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/admin.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/backlink.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/create.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/delicious.gif
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/digg.gif
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/edit.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/google.gif
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/history.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/index.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/login.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/previous.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/profile.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/recent.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/show.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/subscribe.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/top.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/unsubscribe.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/black_arrow.gif
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/faded_background.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/favicon.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/find.gif
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/gradient_background.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/gradient_bc.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/gradient_logo.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/gradient_status.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/user_icon.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/wiki_logo.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/bullet.gif
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-cc.gif
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-css.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-donate.gif
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-dw.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-php.gif
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-rss.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-xhtml.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/buttonshadow.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/closed.gif
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/favicon.ico
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/favicon_blue.ico
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/favicon_green.ico
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/favicon_plain.ico
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/inputshadow.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/link_icon.gif
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/mail_icon.gif
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/open.gif
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/admin.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/backlink.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/create.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/delicious.gif
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/digg.gif
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/edit.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/google.gif
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/history.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/index.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/login.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/previous.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/profile.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/recent.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/show.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/subscribe.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/top.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/unsubscribe.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/faded_background.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/gradient_background.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/gradient_bc.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/gradient_logo.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/gradient_status.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/wiki_logo.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/admin.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/backlink.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/create.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/delicious.gif
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/digg.gif
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/edit.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/google.gif
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/history.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/index.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/login.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/previous.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/profile.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/recent.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/show.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/subscribe.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/top.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/unsubscribe.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/black_arrow.gif
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/faded_background.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/favicon.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/find.gif
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/gradient_background.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/gradient_bc.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/gradient_logo.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/gradient_status.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/user_icon.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/wiki_logo.png
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/tocdot2.gif
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/windows.gif
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/builder.js
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/controls.js
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/dragdrop.js
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/effects.js
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/prototype.js
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/scriptaculous.js
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/slider.js
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/lang/en/settings.php
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/lang/hu/settings.php
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/lang/it/settings.php
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/layout.css
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/main.php
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/media.css
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/mediamanager.php
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/print.css
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/rtl.css
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/style.ini
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/style_blue.ini
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/style_green.ini
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/style_plain.ini
create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/tplfn_sidebar.php
(limited to 'mayor-orig/mayor-wiki/wiki')
diff --git a/mayor-orig/mayor-wiki/wiki/data/pages/base/azonositas.txt b/mayor-orig/mayor-wiki/wiki/data/pages/base/azonositas.txt
new file mode 100644
index 00000000..75172f65
--- /dev/null
+++ b/mayor-orig/mayor-wiki/wiki/data/pages/base/azonositas.txt
@@ -0,0 +1,74 @@
+====== A felhasználók azonosítása ======
+
+A felhasználók azonosítása hozzáférési szintenként ([[policy]]) külön szabályozható.
+
+Az adott [[policy]] beállításai az ''config/$policy-conf.php'' állományban definiált ''$AUTH'' tömbben tárolódnak.
+
+
+
+
+===== Opciók =====
+
+ * ''$AUTH[$policy]['backend']''
+A felhasználói adatok tárolását végző háttéradatbázis típusa. Lehetséges értékei: [[base:backend:ldap]], [[base:backend:ad]], [[base:backend:mysql]], [[base:backend:file]]
+
+ * ''$AUTH[$policy]['authentication']''
+Az adott policy-ben kötelező-e az azonosítás. Lehetséges értékei: required (kötelező), optional (opcionális), none (nincs)
+
+ * ''$AUTH[$policy]['onExpired']''
+Mi történjen nem letiltott, delejárt jelszó esetén? Lehetséges értékei: force update (kötelező jelszóváltoztatás), warning (figyelmeztető üzenet), none (semmi)
+
+ * ''$AUTH[$policy]['onDisabed']''
+Mi történjen letiltott azonosító esetén? Lehetséges értékei: refuse (utasítsuk vissza), none (ne történjen semmi - azaz engedjük be)
+
+ * ''$AUTH[$policy]['enableSelfPasswordChange']''
+Engedélyezett-e a jelszó felhasználó általi megváltoztatása (''onExpired=force update'' esetén szükséges!)? Lehetséges értékei: true (igen), false (nem)
+
+ * ''$AUTH[$policy]['createAccount']''
+Azonosító létrehozásának módja. Lehetséges értékei: byRegistration (regisztrációval), byAdmin (adminisztrátor által)
+
+ * ''$AUTH[$policy]['adminGroup']''
+Adminisztrátor csoport megadása (azonosító).
+
+ * ''$AUTH[$policy]['categories']''
+A policy-ban érvényes fő kategóriákat felsoróló tömb. ''private'' esetén például: ''array('tanár','diák','titkárság','egyéb')''
+
+ * ''$AUTH[$policy]['accountAttrs']''
+A fontos account attribútumokat felsoroló tömb (backend-től is függhet!). Például: ''array('studyId','mail','telephoneNumber')''
+
+==== Shadow ====
+
+ * ''$AUTH[$policy]['shadowLastChange']''\\
+Az utolsó jelszóváltoztatás időpontja (1970-01-01 óta eltelt napok számával megadva).
+ * ''$AUTH[$policy]['shadowMin']''\\
+A jelszó érvényességének minimális ideje - **nem használjuk**.
+ * ''$AUTH[$policy]['shadowMax']''\\
+A jelszó érvényességi ideje napokban. Az itt megadott érték határozza meg, hogy hány naponta kell jelszót változtatni. Ha üres, vagy nulla értékű, akkor nem vesszük figyelembe. Ilyenkor a ''shadowInactive'' értéket sem vesszük figyelembe.
+ * ''$AUTH[$policy]['shadowWarning']''\\
+A jelszó érvényességének lejárata előtt hány nappal kezdjük figyelmeztetni a felhasználót.
+ * ''$AUTH[$policy]['shadowExpire']''\\
+A jelszó érvényességének lejárati időpontja (1970-01-01-től eltelt napok számával megadva).
+Ha üres vagy nulla, akkor nem vesszük figyelembe!
+ * ''$AUTH[$policy]['shadowInactive']''\\
+A jelszó érvényességének lejárta után még hány napig nem kerül letiltásra az azonosító. Ha a ''shadowMax'' és a ''shadowExpire'' is nulla, vagy üres, akkor nem vesszük figyelembe.
+
+
+
+Lássuk hogyan működnek ezek a keretrendszerben!
+Haladjunk végig időrendben, hogy mikor mi fog történni:
+ * Ha ''shadowLastchange+shadowMax-shadowWarning'' után, de ''shadowLastchange+shadowMax'' előtt vagyunk, ''onExpire<>none'' és ''shadowMax<>0'', akkor figyelmezetést küldünk, hogy le fog járni a jelszó. Hasonlóan ''shadowExpire-shadowWarning'' után és ''shadowExpire'' előtt is.
+ * Ha ''shadowLastchange+shadowMax'' után vagyunk, ''shadowMax<>0'', vagy ''shadowExpire'' után vagyunk és ''onExprired<>none'', akkor figyelmeztetést küldünk, hogy lejárt a jelszó.
+ * Ha még ''shadowLastchange+shadowMax+shadowInactive'' és ''shadowExpire+shadowInactive"" előtt vagyunk, ''shadowMax<>0'' és ''onDisabled=refuse'', akkor figyelmeztetést küldünk, hogy az azonosító le lesz tiltva.
+ * Ha már ''shadowLastchange+shadowMax+shadowInactive'' után vagyunk, ''shadowMax<>0'' és ''onDisabled=refuse'', akkor nem engedjük belépni.
+ * Ha ''onDisabled=refuse'' és ''shadowExpire+shadowInactive'' után vagyunk, akkor nem engedjük belépni.
+
+
+Tehát lejárat szempontjából a ''shadowExpire'' és a ''shadowLastChange+shadowMax'' közül a kisebb lesz érvényes.
+
+
+----
+
+A backend függő beállításokat lásd a backend leírásánál.
+
+
+====== Facebook connect ======
diff --git a/mayor-orig/mayor-wiki/wiki/data/pages/base/backend.txt b/mayor-orig/mayor-wiki/wiki/data/pages/base/backend.txt
new file mode 100644
index 00000000..df4f2914
--- /dev/null
+++ b/mayor-orig/mayor-wiki/wiki/data/pages/base/backend.txt
@@ -0,0 +1,11 @@
+====== Háttéradatbázisok (backend-ek) ======
+
+A keretrendszer a felhasználói azonosításhoz többféle backend-et használhat. A különböző [[policy|hozzáférési szintek]]en lehet különböző backend-et használni.
+
+Tervezett backend-ek:
+ * [[base:backend:mysql]] - MySQL alapú, az LDAP-nál könnyebben kezelhető háttéradatbázis típus - ez az alapértelmezett backend
+ * [[base:backend:ldap]] - OpenLDAP alapú háttéradatbázis, mely használható Unix/Linux rendszerek felhasználói adatbázisaként is működni (libpam-ldap, libnss-ldap)
+ * [[base:backend:ad]] - Microsoft Active Directory alapú háttéradatbázis
+ * [[base:backend:file]] - Inkább csak tesztelésre használatos backend típus
+
+A keretrendszer több függvényt backendtől függő módon valósít meg. Az ezeket megvalósító programrészek az ''include/backend///backend_nev//'' könyvtár alatt találhatók.
diff --git a/mayor-orig/mayor-wiki/wiki/data/pages/base/backend/ad.txt b/mayor-orig/mayor-wiki/wiki/data/pages/base/backend/ad.txt
new file mode 100644
index 00000000..b758809a
--- /dev/null
+++ b/mayor-orig/mayor-wiki/wiki/data/pages/base/backend/ad.txt
@@ -0,0 +1,111 @@
+
+====== Microsoft Active Directory backend ======
+
+A MaYoR keretrendszer az azonosítók és csoportok adatait képes AD-ből is venni. Mi szükséges ehhez?
+
+===== Módosítások az AD-ben =====
+
+Néhány egyszerű módosítást, bővítést el kell végeznünk az AD címtárban.
+
+==== mayor szervezeti egység létrehozása ====
+
+Nem kötelező, de célszerű lehet külön szervezeti egységet (OU) felvenni a mayor-hoz kapcsolódó csoportok, esetleg az admin felhasználó tárolására.
+
+ OU=mayor,DC=your,DC=domain
+
+==== A keretrendszer működtetéséhez szükséges felhasználói fiókok létrehozása ====
+
+Egyes műveletekhez szükséges, hogy a keretrendszer egy emelt jogosultságú felhasználóval tudjon csatlakozni az AD-hoz. Ehhet hozzunk létre külön azonosítót:
+
+ CN=MaYoROperator,OU=mayor,DC=your,DC=domain
+
+Majd tegyük be az **Account Operators** (Fiókfelelősök) csoportba.
+
+A biztonságot fokozhatja, ha létrehozunk a keretrendszer számára egy olyan azonosítót is, amelyik csak normál olvasási joggal rendelkezik a címtárban.
+Ekkor a program azokhoz a feladatokhoz, melyekhez elegendő az olvasási jog, ezt az azonosítót fogja használni.
+
+ CN=MaYoRUser,OU=mayor,DC=your,DC=domain
+
+==== Csoportok létrehozása =====
+
+A MaYoR rendszer igényel néhány felhasználói csoportot. Ezeket létrehozhatjuk a ''mayor'' tároló alatt:
+
+ CN=diak,OU=mayor,DC=your,DC=domain
+ CN=tanar,OU=mayor,DC=your,DC=domain
+ CN=titkarsag,OU=mayor,DC=your,DC=domain
+ CN=diakadmin,OU=mayor,DC=your,DC=domain
+ CN=uzenoadmin,OU=mayor,DC=your,DC=domain
+ CN=vezetoseg,OU=mayor,DC=your,DC=domain
+ CN=naploadmin,OU=mayor,DC=your,DC=domain
+ ...
+
+==== Az oktatási azonosító tárolása ====
+
+A MaYoR keretrendszer az oktatási azonosítót használja arra a célra, hogy a felhasználói azonosítókat és a naplóban szereplő diákokat, tanárokat
+megfeleltesse egymással. Ezért szükséges, hogy a felhasználói fiókok egy attribútumát az oktatási azonosító tárolására használjuk. Hogy melyik
+attribútumot használjuk erre a célra, az szabadon megválasztható, a konfigurációs file-ban megadható (''adsStudyIdAttr'').
+A javasolt, alapértelmezett mező erre a célra a ''serialnumber''.
+
+===== Ellenőrzés 1: LDAP lekérdezés =====
+
+Ellenőrzés képpen aa MaYoR szerverről próbáljunk lekérdezni AD adatokat parancssorból, valahogy így:
+ ldapsearch -H ldap://ad.your.domain -u -x -D "CN=MaYoRUser,OU=mayor,DC=your,DC=domain" -b DC=your,DC=domain '(&(objectclass=person)(cn=MaYoRUser))' -w jelszó
+
+Ha a lekérdezés eredményes, akkor továbbléphetünk. A fenti lekérdezés kódolatlan LDAP kapcsolatot használt, jelszavunk tehát titkosítatlanul utazott a hálózaton.
+Ezen mindenképp változtatni kell, a módosításokhoz a Microsoft AD - nagyon helyesen - meg is követeli a biztonságos kapcsolatot.
+
+===== Tanűsítvány telepítése =====
+
+Első körben tehát biztosítani kell, hogy LDAPS protokollal elérhető legyen az AD. Ehhez készítenünk/vásárolnuk és telepítenünk kell egy tanúsítványt a címtárba.
+Egy leírás erről: [[http://support.microsoft.com/kb/321051]]
+
+Ha saját (pl. MaYoR Hungary által hitelesített) tanúsítványt használtunk, akkor a hitelesítőt is el kell fogadtatnunk, fel kell vennünk a Windows szerveren.
+
+===== Kliens oldali beállítások =====
+
+/etc/ldap/ldap.conf
+ BASE dc=your,dc=domain
+ URI ldaps://ad.your.domain:636
+ TLS_CACERTDIR /etc/ssl/certs
+
+Ha saját (pl. MaYoR Hungary által hitelesített) tanúsítványt használtunk, akkor a hitelesítőt is el kell fogadtatnunk, fel kell vennünk a kliensen is. Ehhez másoljuk a hitelesítő
+tanúsítványát a ''/usr/share/ca-certificates/'' alá új alkönyvtárba (pl. ''mayor.hu''), majd készítsünk szimbolikus linket az elhelyezett file-ra a
+''/etc/ssl/certs'' alá (pl. ''MaYoR.pem.crt'' néven), és egészítsük ki a ''/etc/ldap/ldap.conf'' állományt:
+
+ TLS_CACERT /etc/ssl/certs/MaYoR.pem.crt
+
+===== Ellenőrzés 2: Lekérdezés LDAPS-sel =====
+
+A korábbihoz hasonlóan ellenőrizzük, hogy a telepített tanúsítványokkal megy-e LDAPS-sel a lekérdezés:
+ ldapsearch -H ldaps://ad.your.domain:636 -u -x -D "CN=MaYoRUser,OU=mayor,dc=your,dc=domain" -b dc=your,dc=domain '(&(objectclass=person)(cn=MaYoRUser))' -w jelszó
+
+===== MaYoR konfigurálás =====
+
+Az utolsó lépés, hogy a ''/var/mayor/config/private-conf.php'' állományban az erre vonatkozó konfigurációs beállításokat felvegyük, kitöltsük:
+
+ #Active Directory Backend példa konfig
+ 'backend' => 'ads',
+ 'adsHostname' => 'ldaps://your.domain:636', // Jelszóváltoztatáshoz kötelező az ldaps
+ 'adsBaseDn' => 'DC=your,DC=domain',
+ 'adsUser' => 'CN=MaYoRUser,OU=mayor,DC=your,DC=domain', // Olvasási jog az AD-ben - Normál user
+ 'adsPw' => 'jelszó',
+ 'adsAccountOperatorUser' => 'CN=Operator,OU=mayor,DC=your,DC=domain', // Account Operators (Fiókfelelősök) csoport tag pl (jelszóváltoztatás)
+ 'adsAccountOperatorPw' => 'jelszó',
+ 'adsUserObjectClass' => 'person', // Userek objectum osztálya
+ 'adsGroupObjectClass' => 'group', // Csoportok objectum osztálya
+ 'adsStudyIdAttr' => 'serialnumber', // Az oktatási azonosítót tároló attribútum (studyId)
+ 'adsContainers' => array(
+ 'ou=diak,dc=your,dc=domain' // Azok a tárolók, amikebe kerülhetnek a létrehozandó csoportok és felhasználói azonosítók
+ 'ou=tanar,dc=your,dc=domain' // - már ha a MaYoR-ból szeretnénk azonosítókat felvenni -
+ 'ou=titkarsag,dc=your,dc=domain'
+ ),
+ 'adminGroup' => 'Fiókfelelősök', // A felhasználói azonosítókat kezelők köre a MaYoR-ban - lehet szűkebb csoport is
+ 'cacheable' => true, // bizonyos lekérdezések eredményét egy ideig eltárolja a MaYoR ...
+
+===== Korlátok, kérdések =====
+
+ * A jelszavakra vonatkozó szabályok az AD és a MaYoR együttes szabályozásából adódnak, konkurens szabályok esetén a szigorúbb érvényesül.
+ * A ''diakadmin'' csoport tagjainak arra kell jogot adni, hogy a diákok jelszavait tudja változtatni, erre a funkcióra lett kitalálva ez a csoport. De hogy ezt hogy kell, azt valaki MS guru megírhatná :) ...
+ * Tapasztalataink szerint a Fiókfelelősök jelszavát nem engedi LDAP-n keresztül megváltoztatni az AD. Tud ilyen korlátozásról valaki valamit?
+ * Az Napló/Admin/Azonosító generálás oldal valamiért nagyon lassú. De legalább működik. :-)
+
diff --git a/mayor-orig/mayor-wiki/wiki/data/pages/base/backend/ldap.txt b/mayor-orig/mayor-wiki/wiki/data/pages/base/backend/ldap.txt
new file mode 100644
index 00000000..1e292b24
--- /dev/null
+++ b/mayor-orig/mayor-wiki/wiki/data/pages/base/backend/ldap.txt
@@ -0,0 +1,26 @@
+====== ldap backend ======
+
+
+===== Rendszer-követelmények =====
+
+ * OpenLDAP 2.*
+ * Az csak ékezettelen azonosítókat tudunk létrehozni
+
+===== MaYoR schema =====
+
+Az ldap backend-hez saját sémát készítettünk, mely a Unix/Linux környzetekben felhasználói azonosításra használt posicAccount és posixGroup objektum osztályokra épül, azokat bővíti újabb attribútumokkal. A schema file-t célszerűen a ''/etc/ldap/mayor/schema/mayor.schema'' szokás helyezni (eredetileg az ''install/base/ldap'' alatt található). A schema eredetileg úgy jött létre, hogy képes legyen tárolni az összes fontos személyes és csoport adatot. A mayor 3.0 verziójától kezdve ezeket nem használjuk ki.
+
+===== Konfigurációs beállítások =====
+
+A beállításokat az ''include/config/$policy-conf.php''-ban definiált ''$AUTH'' globális tömb tartalmazza.
+
+ * ''$AUTH[$policy]['ldap hostname']''
+Az LDAP kiszolgáló host neve, vagy IP címe. Általában 'localhost'.
+
+ * ''$AUTH[$policy]['ldap protocol version']''
+Az LDAP lekérdezésekhez használt protokol verziószáma. Erősen ajánlott: 3.
+
+ * ''$AUTH[$policy]['ldap base dn']''
+Az adatok eléréséhez szükséges gyökér bejegyzés. Általában ''o=intezmeny,c=hu'' alakú.
+
+
diff --git a/mayor-orig/mayor-wiki/wiki/data/pages/base/hibakezeles.txt b/mayor-orig/mayor-wiki/wiki/data/pages/base/hibakezeles.txt
new file mode 100644
index 00000000..336e4ae3
--- /dev/null
+++ b/mayor-orig/mayor-wiki/wiki/data/pages/base/hibakezeles.txt
@@ -0,0 +1,20 @@
+====== Hibakezelés (alert) ======
+
+A keretrendszer a ''$alert[]'' paraméteren keresztül képes a hiba- és egyéb figyelmeztető-üzenetek kezelésére.
+Az $alert[$i] felépítése: típus:hiba[:param1[:param2[:param3]]]
+
+típus:
+ * alert : javaScript alert
+ * message : hibaüzenet után az oldal betöltődik
+ * page : hibaüzenet után az oldal nem töltődik be
+ * info : információs üzenet
+
+hiba:
+A lehetséges hiba típusok policy (hozzáférési szint) és nyelv (lang) függően épülnek fel és a ''$ALERT_MSG'' tömbben tárolódnak. A tömböt az ''include/alert/$lang/base.php''-ben hozza létre a rendszer, majd bővíti az ''include/alert/$lang/base.php'', ''include/alert/$lang/$backend.php'' és ''include/alert/$lang/module-$page.php'' állományok csatolásával.
+
+Ismeretlen hiba string esetén a megjelenítő függvény az ''default'' hibaüzenetet írja ki, hozzáfűve az ismeretlen hiba stringet, paraméter listát.
+
+A hibaüzenetet a ''skin/$skin/base/html/alert.phtml'' állomány ''html_alert()'' függvénye írja ki. Ennek visszatérési érték dönti el, hogy megjelenjen a lap további része (''true''), vagy ne (''false'').
+
+A hibaüzenethez csatolt paramétereket a függvény behelyettesíti a ''%0'', ''%1%'' illetve ''%2%'' stringek helyére a hibaüzenet szövegébe, vagy ezek hiányában a hibaüzenet után írja ki - zárójeles megjegyzésként - őket.
+
diff --git a/mayor-orig/mayor-wiki/wiki/data/pages/base/mayor-base.txt b/mayor-orig/mayor-wiki/wiki/data/pages/base/mayor-base.txt
new file mode 100644
index 00000000..aff20b15
--- /dev/null
+++ b/mayor-orig/mayor-wiki/wiki/data/pages/base/mayor-base.txt
@@ -0,0 +1,16 @@
+====== A keretrendszer ======
+===== mayor-base =====
+
+A keretrendszer fő szolgáltatásai:
+ * több hozzáférési szint ([[base:policy:private]], [[base:policy:parent]], [[base:policy:public]])
+ * felhasználó [[azonosítás]]
+ * felhasználói adatok kezelése, többféle háttéradatbázissal ([[backend]]-el)
+ * több [[nyelv]] támogatása
+ * többféle kinézet ([[skin]]) támogatása
+ * [[oldalszerkezet]] kialakítása (fájlok csatolási sorrendje)
+ * [[modulok]] beépítésének lehetősége
+ * három szintű, nyelv és modul függő [[menü]]
+ * nyelv és modul függő [[hibakezelés]]
+
+A modulok ezen szolgáltatásokra épülve bővítik a rendszer szolgáltatásait.
+
diff --git a/mayor-orig/mayor-wiki/wiki/data/pages/base/menue.txt b/mayor-orig/mayor-wiki/wiki/data/pages/base/menue.txt
new file mode 100644
index 00000000..d050b7a0
--- /dev/null
+++ b/mayor-orig/mayor-wiki/wiki/data/pages/base/menue.txt
@@ -0,0 +1,96 @@
+====== A menü ======
+
+A keretrendszer egy az aktuális modultól és kiválasztott nyelvtől függő, legfeljebb három szintű menüt generál.
+
+===== A menü felépítése =====
+
+
+==== A fájlok csatolási sorrendje ====
+
+A menüt felépítő állományok az ''include/menu'' könyvtár alatt helyezkednek el.
+elsőként a ''include/menu/base.php'' töltődik be. Ennek feladata, hogy a többi állományt kiválassza és betöltse.
+Elsőként az ''include/menu/$policy/$lang/base.php'', ennek hiányában az ''include/menu/$policy/_DEFAULT_LANG/base.php'' kerül betöltésre. A következő lépés a ''include/menu/$policy/$lang/module-*.php'' állományok csatolása. Az utolsó lépés az [[hogyan:menu_testreszabas|egyedi menü beállítások]] beolvasása.
+
+Az oldal megjelenítésekor a ''skin/$skin/base/html/base.phtml'' állomány ''mayor_menu()'' függvénye írja ki a menü-t a ''$MENU'' tömb alapján. A tömben benne van az egész menürendszer, de a függvény nem feltétlenül építi rakja ki az összes menüpontot, a "classic" skin például az almenűket csak az aktuális ''$page'', ''$sub'' és ''$f'' szerint rakja ki.
+
+
+==== A menü tárolására szolgáló adatszerkezet - a $MENU tömb ====
+
+=== Egy menüpont (item, tétel) felépítése ===
+ * txt - a megjelenő szöveg
+ * [url]
+ - ha nincs: a $MENU alapján kiolvasható PSF-re mutat
+ - ha &-tel kezdődik: az lőzőhöz fúzzük
+ - ha http-vel kezdődik: a megadott URL-t vesszük egy az egyben (sessionID, lang, skin stb nélkül)
+ - egyéb esetben: az adott linket használjuk átadva a fontos paramétereket (sessionID, policy, lang, skin)
+ * [get] - az utolsó esetben az átadandó paraméterek listája (pl. sessionID, lang, skin)
+
+
+
+=== A $MENU tömb felépítése ===
+
+ $MENU = array(
+ $page1 => array( // Az első szinten a modulok menüpontjai
+ array('txt1'[,'url1']),
+ [array('txt2'[,'url2']), ...]
+ ),
+ [$page2 => array( ... ), ...]
+ $item1 => array( // Az elsp szinten nem modulhoz tartozó tételek
+ array('txt1'[,'url1']),
+ [array('txt2'[,'url2']), ...]
+ ),
+ [$item2 => array( ... ), ...]
+ 'modules' => array( // 'modules'-en belul csak page-ek vannak
+ $page1 => array(
+ 'sub' => array( // 'sub'-on belül csak sub-ok vannak
+ $sub1 => array(
+ $f1 => array(
+ array('txt1'[,'url1']),
+ [array('txt2'[,'url2']), ...]
+ ),
+ [$f2 => array(
+ array('txt1'[,'url1']),
+ [array('txt2'[,'url2']), ...]
+ ), ...]
+ ),
+ [$sub2 => arrray( ... ), ...]
+ ),
+ [$f1 => array(
+ array('txt1'[,'url1']),
+ [array('txt2'[,'url2']), ...]
+ ), ...]
+ ),
+ [$page2 => array( ... ), ...]
+ )
+ )
+
+
+Kirajzolva:
+
+ $M[$page1][0] | $M[$page1][1] ... | $M[$page2][0] | ... | $M[$item1][0] | $M[$item1][1] ...
+ $M['modules'][$page][$f1][0] | $M['modules'][$page][$f1][1] ... | $M['modules'][$page][$f2][0] | ...
+ $M['modules'][$page]['sub'][$sub][$f1][0] ... $M['modules'][$page]['sub'][$sub][$f2][0]
+
+
+Például:
+
+ $MENU['modules']['login'] = array(
+ 'sub' => array(
+ 'sub1' => array(
+ 'f11' => array(
+ array('txt' => 'Kakukk'),
+ array('txt' => 'Tojás', 'url'=>'http://')
+ )
+ ),
+ 'sub2' => array(
+ 'f21' => array(
+ array('txt' => 'Cica'),
+ )
+ )
+ ),
+ 'login' => array(
+ array('txt' => 'Szülői bejelentkezés','url' => '&toPolicy=parent'),
+ array('txt' => 'Bejelentkezés','url' => '&toPolicy=private'),
+ )
+ );
+
diff --git a/mayor-orig/mayor-wiki/wiki/data/pages/base/nyelv.txt b/mayor-orig/mayor-wiki/wiki/data/pages/base/nyelv.txt
new file mode 100644
index 00000000..8f6eb5ea
--- /dev/null
+++ b/mayor-orig/mayor-wiki/wiki/data/pages/base/nyelv.txt
@@ -0,0 +1,5 @@
+====== Nyelvek kezelése ======
+
+A nyelvek kezelésére a keretrendszer biztosít egy ''$lang'' nevű paramétert. A választható nyelvek listáját az ''include/config/main-config.php'' állomány tartalmazza. A teljes nyelvi támogatáshoz el kell készíteni a nyelvi fájlok adott nyelvű változatát - ezek a ''lang/$lang'' könyvtár alatt vannak -, valamint a [[menü]] és a [[hibakezelés]] adott nyelvű állományait.
+
+Amennyiben egy nyelvi álomány hiányzik, akkor a keretrendszer automatikusan az alapértelmezett nyelv megfelelő állományával helyettesíti. Ez a helyettesítés nem igaz a [[menü]] állományokra, mert előfordulhat, hogy a nyelvtől függően a menürendszer is változik.
\ No newline at end of file
diff --git a/mayor-orig/mayor-wiki/wiki/data/pages/base/oldalszerkezet.txt b/mayor-orig/mayor-wiki/wiki/data/pages/base/oldalszerkezet.txt
new file mode 100644
index 00000000..624c40a0
--- /dev/null
+++ b/mayor-orig/mayor-wiki/wiki/data/pages/base/oldalszerkezet.txt
@@ -0,0 +1,115 @@
+====== Oldalszerkezet ======
+
+Itt röviden összefoglaljuk milyen sorrendben kerülnek csatolásra az eyes állományok, majd részletezzük az egyes elemek szerepét.
+
+
+
+
+===== Az állományok csatolási sorrendje =====
+ index.php
+ include/base/config.php
+ ../config/main-config.php
+ _CONFIGDIR/$policy-conf.php
+ include/base/mysql.php
+ include/base/var.php
+ include/base/base.php
+ lang/$lang|_DEFAULT_LANG/base/base.php
+ _CONFIGDIR."/skin-$skin|_DEFAULT_SKIN/config.php
+ include/base/cache.php
+ include/base/str.php
+ include/base/log.php
+ include/alert/base.php
+ include/alert/'.$lang.'/base.php
+ include/alert/'.$lang.'/'.$AUTH[$policy]['backend'].'.php
+ include/alert/'.$lang.'/module-'.$page.'.php (*** VALID_MODULES)
+ include/base/rights.php
+ include/share/session/base.php
+ include/backend/'.$AUTH[$toPolicy]['backend'].'/session/base.php
+ include/backend/__backend__/base/attrs.php
+ include/backend/'.$AUTH[_POLICY]['backend'].'/session/base.php
+ include/share/ssl/ssl.php - RPC
+ _CONFIGDIR . "/module-$page/config.php (*** VALID_MODULES)
+ include/widgets/*.php
+ include/modules/$_module/base/*.php
+ include
+ skin
+ pre
+ include/base/login.php
+ include/share/auth/base.php
+ include/modules/auth/base/login.php
+ include/share/auth/base.php
+ include/backend/'.$AUTH[$toPolicy]['backend'].'/auth/login.php
+ include/share/session/close.php
+ include/share/facebook/autoload.php
+ include/menu/base.php
+ include/menu/'._POLICY.'/'.$lang.'/base.php
+ include/menu/'._POLICY.'/'.$lang/module-*.php (*** VALID_MODULES)
+ ../config/menu/'._POLICY.'/menu-'.$lang.'.php
+ skin/default/base/html/base.phtml
+ skin/$skin/base/html/alert.phtml
+ skin/$skin/base/html/base.phtml -- page()
+ lang/$lang/module-$page/base.php
+ lang/$lang/module-$page/$psf.php
+ skin/$skin/module-$page/html/base.phtml
+ skin/$skin/module-$page/html/$psf.phtml
+ policy/$policy/$page/$psf.php
+
+
+... RÉGEBBEN ...
+
+ index.php
+ include/config/main-config.php
+ include/config/module-*.php
+ include/base/log.php
+ include/base/base.php
+ include/config/$policy-conf.php
+ lang/$lang/base/base.php
+ skin/$skin/config.php
+ include/base/str.php
+ include/base/mysql.sql
+ include/alert/base.php
+ include/alert/lang/base.php
+ include/alert/$lang/$backend.php
+ include/alert/$lang/module-$page.php
+ include/base/rights.php
+ include/share/session/base.php
+ include/backend/session/base.php (ez csatolhat egyebet is pl: ldap/attrs.php)
+ include/modules/$page/base/*.php
+ include/modules/$page/$psf.php
+ config/skin-$skin/$page-config.php
+ private/$page/$psf-pre.php
+ include/menu/base.php
+ include/menu/$policy/$lang/base.php
+ include/menu/$policy/$lang/module-*.php
+ skin/$skin/base/alert.phtml
+ skin/$skin/base/base.phtml
+ page() függvény
+ lang/$lang/module-$page/base.php static/lang/$page/$psf.html
+ lang/$lang/module-$page/$psf.php
+ skin/$skin/module-$page/base.phtml
+ skin/$skin/module-$page/$psf.php
+ policy/$policy/$psf.php
+
+===== A backend függő részekről =====
+
+A keretrendszer három fő moduljában a [[backend]] függő részek felépítéséről a következőket kell tudni:
+
+=== auth ===
+ A toPolicy-től függő file-t csatoljuk => egyszerre több policyben azonosítani nem lehet.
+ A backend függő függvények az include/backend/$backend/auth alatt vannak
+
+=== password ===
+ A toPolicy-től függő file-t csatoljuk => egyszerre több policyben jelszóváltoztatás nem lehet.
+ backend függő függvények a include/backend/$backend/password alatt vannak.
+
+=== session ===
+ A backend függő függvényeknek előtagja a backend neve (pl. ldapMemberOf). Így egy program részen belül
+ több backend függvényei is használhatóak (általában erre nincs ugyan szükség, de pl. a login-ban igen,
+ vagy egy szülő keres a felhasználók között...).
+
+ A "fedő"-függvények ezeket a backend függő függvényeket hívják - a $toPolicy-től függően.
+ A backend-hez tartozó file-t a függvény csatolja require_once()-al.
+
+ A backend függő részek az include/backend/$backend/session alatt vannak.
+
+
diff --git a/mayor-orig/mayor-wiki/wiki/data/pages/base/policy.txt b/mayor-orig/mayor-wiki/wiki/data/pages/base/policy.txt
new file mode 100644
index 00000000..558bb08e
--- /dev/null
+++ b/mayor-orig/mayor-wiki/wiki/data/pages/base/policy.txt
@@ -0,0 +1,6 @@
+====== Hozzáférési szint (policy) ======
+
+A mayor rendszer által kialakított web-felület többféle felhasználói csoport számára biztosít hozzáférést. Ezek a hozzáférési szintek a felhsználói ||azonosítás]] és jogosultsági rendszer szempontjából nagyon eltérőek lehetnek. Alap helyzetben a rendszer három hozzáférési szintet különböztet meg:
+ * [[base:policy:private]] - A tanárok és diákok szigorú azonosítási rendszeren keresztül férnek a nekik nyújtott szolgáltatásokhoz. Ezen a hozzáférési szinten fontos, védett adatokhoz juthatnak (pl. elektronikus napló, saját levelezés, oktatási anyagok), sok esetben maguk is módosíthatnak adatokat. A hozzáférési szinten belül kategoriák és csoportok alapján tovább finomítható a jogosultsági rendszer.
+ * [[base:policy:parent]] - A szülői hozzáférési szint elsősorban az elektronikus napló adataiba való betekintésre ad lehetőséget. Az elérhető adatok itt is védettek tehát, így az azonosítás követelmény. Az azonosítók önkéntes regisztráció után jönnek létre, majd az egyes diákok adataihoz való hozzáférést igényelni kell az iskolától valamilyen formában.
+ * [[base:policy:public]] - Egy iskola honlapján sok nyilvános információt is el kell tudni helyezni. Erre szolgál a public hozzáférési szint. Ebben a policyben is van lehetőség opcionálisan felhasználói azonosításra, hogy bizonyos szolgáltatásokat előzetes regisztrációhoz köthessünk (pl. fórum hozzászólás).
diff --git a/mayor-orig/mayor-wiki/wiki/data/pages/base/policy/parent.txt b/mayor-orig/mayor-wiki/wiki/data/pages/base/policy/parent.txt
new file mode 100644
index 00000000..438bee18
--- /dev/null
+++ b/mayor-orig/mayor-wiki/wiki/data/pages/base/policy/parent.txt
@@ -0,0 +1,3 @@
+====== parent hozzáférési szint ======
+
+A szülők számára fenttertott hozzáférési szint, gyengébb azonosítással és jogosultsági rendszerrel védve.
\ No newline at end of file
diff --git a/mayor-orig/mayor-wiki/wiki/data/pages/base/policy/private.txt b/mayor-orig/mayor-wiki/wiki/data/pages/base/policy/private.txt
new file mode 100644
index 00000000..ef3aa137
--- /dev/null
+++ b/mayor-orig/mayor-wiki/wiki/data/pages/base/policy/private.txt
@@ -0,0 +1,3 @@
+====== private hozzáférési szint ======
+
+Szigorú azonosítással védett hozzáférési szint, ami elsősorban a diákok, tanárok és más alkalmazottak számára van fenttartva.
\ No newline at end of file
diff --git a/mayor-orig/mayor-wiki/wiki/data/pages/base/policy/public.txt b/mayor-orig/mayor-wiki/wiki/data/pages/base/policy/public.txt
new file mode 100644
index 00000000..7b5f9347
--- /dev/null
+++ b/mayor-orig/mayor-wiki/wiki/data/pages/base/policy/public.txt
@@ -0,0 +1,3 @@
+====== public hozzáférési szint ======
+
+Nyilvános adatok közlésére szolgáló hozzáférési szint, opcionális azonosítási lehetőséggel. Bizonyos modulok megkövetelhetik az előzetes regisztrációt (pl. [[mayor-forum]]).
\ No newline at end of file
diff --git a/mayor-orig/mayor-wiki/wiki/data/pages/base/regisztracio.txt b/mayor-orig/mayor-wiki/wiki/data/pages/base/regisztracio.txt
new file mode 100644
index 00000000..1203c04e
--- /dev/null
+++ b/mayor-orig/mayor-wiki/wiki/data/pages/base/regisztracio.txt
@@ -0,0 +1,41 @@
+====== Regisztráció ======
+
+===== Miért? =====
+
+A regisztrációnak alapvetően három szerepe van:
+
+A regisztráció...
+ - a fejlesztők fele fontos visszajelzés (a programot használó intézmények száma és kiléte más érdeklődők számára is fontos adat lehet...)
+ - lehetőség arra, hogy önkéntes alapon támogatást nyújthasson minden felhasználó a projekt számára.
+ - megalapozza azt a lehetőséget, hogy a különböző MaYoR telepítések egymással kommunikálhassanak.
+
+Ez utóbbiról annyit kell tudni, hogy a kommunikációhoz két kulcsos SSL hitelesítést használunk, s a publikus kulcsok elérhetőségét a regisztrációt követően a www.mayor.hu (a controller node) hivatott biztosítani - enélkül tehát a kommunikáció nem képes működni.
+
+===== Hogyan? =====
+
+ * Frissítsd a rendszered!
+ * Adminként (useradmin) belépve a ''Felhasználók/Szerver regisztráció'' menüpontban kell a regisztrációt rendbe tenni.
+Erre alapvetően azért van szükség, mert a kommunikációhoz két kulcsos SSL hitelesítést használunk, s a publikus kulcsok
+elérhetőségét a regisztrációt követően a www.mayor.hu (a controller node) biztosítja majd.
+
+A frissítés után a program mindenképp azt fogja kiírni halványpiros háttérrel, hogy
+ "A mayor.hu nem ismeri ezt a szervert (nodeId: 00000000)!"
+
+ * Ha az intézmény korábban regisztrált, akkor elvileg van eltárolt publikus kulcsa nálunk. Ekkor a felirat alatti "Csomópont azonosító lekérdezése" gombra kattintva megkísérelhetjük az azonosító lekérdezését. Ha sikerül, akkor zöldre vált az oldal és a felirat is arról tájékoztat, hogy a mayor.hu ismeri a rendszert.
+ * Ha a fenti próbálkozás nem vezet eredményre, vagy korábban még egyáltalán nem volt regisztrálva a program, akkor az alsó űrlapot kell kitölteni. A fehér mezők kitöltése kötelező.
+
+Az ''OMKod'' megadása nem kötelező ugyan, de ha az adott rendszer egyértelműen valamelyik intézményhez tartozik, akkor célszerű megadni, ugyanis ebből generáljuk a nodeId-t (egy kétjegyű sorszámot elé téve).
+
+A ''Közterület jelleg'' mező kényes - (jobb lenne itt egy legördülő menü - majd egyszer...): nem fogad el rövidítéseket, csak rendesen kiírt szövegeket mint "út", "utca", "tér", "körtér", "lejtő", ... Azok az értékek elfogadottak, amik a napló megfelelő helyein elérhetők - pl. a diák adatok lakcím részénél, vagy az intézmény adatainál...
+
+Az ''url'' csak azért nem kötelező, mert a fejlesztői rendszereken, amik dinamikus ip-vel működnek, nem lenne értelme, de amúgy fontos adat, a napló elérhetőségét kell hogy tartalmazza.
+
+A kitöltés után a ''Regisztráció'' gombot kell megnyomni, s sikeres esetben az újratöltés után már a zöld színű oldal fogad minket.
+
+A regisztrációs adatok (a publikus kulcs és a ''nodeId'' kivételével) ugyanitt később módosíthatók.
+
+ * A ''Felhasználók/Szerver regisztráció/Ismert végpontok'' menüpont alatt ezek után fel lehet venni azokat a végpontokat, akikkel a jövőben kommunikálni szeretnénk. Alaphelyzetben a listában csak a MaYoR HU van benne (ezt nem is szabad törölni), nodeId alapján lehet tőle lekérdezni újabb végpontokat (a ''nodeId'' amúgy alap esetben az ''OMKod''-dal egyezik meg, ha csak egy rendszert regisztrálunk egy OMKod alá). A "Lekérdezés" gombra kattintás után a listában megjelenik jó esetben az új intézmény.
+
+Ide lehet majd felvenni például a fenntartói szervert, hogy az bizonyos adatokat lekérdezhessen tőlünk.
+
+A listában szereplő végpontokkal már működik a kommunikáció. Ezt tesztelendő rá lehet kattintani a "ping" gombra, ami kis idő elteltével zöldre vált és kiírja az adott rendszer pillanatnyi verzió (revision) számát. (Olyan intézményt ne pingeljetek, amelyiken még nem volt frissítés...).
diff --git a/mayor-orig/mayor-wiki/wiki/data/pages/gyik/jogi_hatter.txt b/mayor-orig/mayor-wiki/wiki/data/pages/gyik/jogi_hatter.txt
new file mode 100644
index 00000000..dfbf8e0e
--- /dev/null
+++ b/mayor-orig/mayor-wiki/wiki/data/pages/gyik/jogi_hatter.txt
@@ -0,0 +1,157 @@
+====== Az elektronikus napló használatának törvényi háttere ======
+
+Az intézmények rendszeres ellenőrzései kapcsán visszatérő kérdés: engedélyezte-e valaki a szoftver használatát.
+
+Az alábbiakban megpróbáltuk összeszedni a témával kapcsolatos hozzánk eddig eljutott információkat.
+
+==== Informális állásfoglalás 2003 ====
+
+2003 júniusában - mikor az elektronikus adattárolás lehetősége a törvény szövegében megjelent - az Oktatási Minisztériumhoz fordultunk:
+készíthetünk-e ezek szerint saját elektronikus naplót. A Minisztérium álláspontja az volt, hogy ehhez nincs szükség az ő hozzájárulásukra.
+Épp ezért erről hivatalos, felmutatható állásfogalalás nem készült, az egyeztetés telefonon, illetve email-en zajlott.
+
+==== OM honlapon közzétett állásfoglalás - 2005 ====
+
+(Gy.I.K. - Iskolai adminisztrációs- és ügyviteli szoftverek 3/2005. (III.1.) OM rendelet - 2005. július 6.)
+
+Az Minisztérium honlapján sokáig elérhető volt egy írásos állásfoglalás is a témában.
+
+Az eredeti hivatkozás azóta sajnos már nem él:
+[[http://www.okm.gov.hu/main.php?folderID=949&articleID=5825&ctag=articlelist&iid=1]]
+
+de megtalálható az archívumban:
+[[http://www.okm.gov.hu/kozoktatas/archivum/gy-iskolai]]
+
+11. pont
+
+"A nevelési-oktatási intézmények működéséről szóló 11/1994.(VI. 8.)
+MKM rendelet az iskolák számára kötelezően használatos nyomtatványként
+nevezi meg, írja elő az osztálynapló (csoportnapló) használatát. A
+jogszabály a nyomtatvány kivitelével, formájával, tartalmával
+kapcsolatos előírást nem tartalmaz, nincs tehát közoktatási
+jogszabályi akadálya annak, hogy elektronikus osztálynapló,
+csoportnapló bevezetésére kerüljön sor. Az elektronikus
+napló-nyomtatvány az OM hozzájárulása nélkül is előállítható és
+forgalmazható.
+A naplók használata során érvényesíteni kell a személyes adatok
+védelméről szóló jogszabályi előírásokat is. Az osztálynapló pénzügyi
+dokumentum is, ezért a szoftverfejlesztés során figyelemmel kell lenni
+az intézményfenntartók vele szemben megfogalmazódó igényeire is."
+
+A fenti cikkre hivatkozik a Tanulmányinfo portál is:
+[[http://shop.tanulmanyi.info/index.php?option=com_content&view=article&id=69:111994vi-8-mkm-rendelet-elektronikus-naplo-hasznalatarol&catid=1:friss-hirek&Itemid=50]]
+
+==== ADAFOR-on közzétett vélemény ====
+
+Nagy port kavart fel a témában megjelent, az ADAFOR-on közzé tett __vélemény__:
+
+[[http://adafor.oh.gov.hu/doku/kozepfoku0809/taninfo.pdf]]
+
+A link sajnos már szintén nem él...
+
+Ebben megkérdőjelezték az eletronikus naplók üzemeltetésének jogszerűségét. De hangsúlyozzuk: ez csak egy __vélemény__ volt, bár
+az ADAFOR-on érkezett, így kicsit nagyobb súlyt kapott.
+
+==== A tanulmanyi.info közlemény ====
+
+A tanulmany.info portal - mely ingyenes elektronikus napló szolgáltatást nyújt több száz intézmény számára - az ADAFOR-on megjelent
+véleményre reagált, többek között így:
+
+"...
+Az Oktatási Hivatal állásfoglalása alapján bárki használhat elektronikus naplót, mert a törvény szerint naplót vezetni kötelező, de a jogszabály
+nem szabályozza azok adattartalmát és szerkezetét - így mind a kézírásos, mind az elektronikus adattartalmú naplók elkészíthetőek helyileg.
+Az elektronikus naplóba gondosan bevitt tartalmakat továbbra is ki kell nyomtatni, és őrizni kell őket legalább öt éven át (papíron, mappákban,
+a tanárok kézjegyével ellátva).
+..."
+
+[[http://www.diakkapu.hu/component/content/article/577-uj-elektronikus-ellenorzo?start=1]]
+
+==== Minisztáriumi állásfoglalás a tanulmany.info kérésére ====
+
+A tanulmany.info minisztériumi állásfoglalást kért:
+
+"Megkeresésünket követően az Oktatási és Kulturális Minisztérium Közoktatás-igazgatási osztály részünkre megküldött levelében tájékoztatta a tanulmanyi.info
+üzemeltetőjét arról, hogy a tanulmanyi.info szolgáltatást, mint elektronikus napló megoldást engedélyeztetni nem szükséges, annak felhasználásáról az
+intézményvezető vagy fenntartó szabadon dönthet. Dr. Szüdi János Közoktatási Szakállamtitkár levelében kitért többek között arra is, hogy a naplóvezetés
+mind papír mind elektronikus úton megtörténhet, viszont mindkettőt esetében papír alapon kell irattároznia a naplókat (napló lapokat) az intézménynek.
+A papír alapú irattározás tekintetében a személyiségi, adatvédelmi és biztonságvédelmi követelmények megtartásáért az intézményvezető felel, valamint a
+hitelesítésről az intézményvezetőnek kell gondoskodnia.
+
+Az oktatási intézmények a fentiekkel kapcsolatos kérdéseik tekintetében fordulhatnak az Oktatási és Kulturális Minisztérium, Közoktatás-igazgatási osztályához."
+
+[[http://shop.tanulmanyi.info/index.php?option=com_content&view=article&id=79:szakmai-velemeny-az-okm-reszerl&catid=1:friss-hirek&Itemid=50]]
+
+==== Egy szál a sulinetes TechNet listáról ====
+
+A levél a TechNet listán is vitát kavart:
+
+[[http://lista.sulinet.hu/pipermail/techinfo/2009-January/042003.html]]
+
+==== Elektronikus naplókat évek óta használnak szerte az országban ====
+
+ - [[http://www.dinaplo.hu/referenciak.html]]
+ - [[http://www.elektronikusnaplo.hu/]]
+ - [[http://www.mayor.hu/index.php?f=ref]]
+ - ...
+
+==== A MaYoR rendszert használó intézmények többször átestek már különféle ellenőrzéseken ====
+
+A Városmajori Gimnáziumban 2003 óta használunk elektronikus naplót. Azóta több törvényességi vizsgálat is folyt az intézményben, melyek egyike sem
+emelt kifogást az elektronikus napló használata ellen. Hozzánk hasonlóan a programot használó többi intézményben is volt már (tán nem mindenhol)
+ilyen-olyan ellenőrzés, vizsgálat - melyek legfeljebb formai hiányosságokra hívták fel a figyelmet - melyeket igyekeztünk és a jövőben is igekszünk
+minél hamarabb javítani, rendben tartani.
+
+===== A nyomtatványokra vonatkozó szabályozások ======
+
+A közoktatási törvény (Kt.) 72. § (2) bekezdése az alábbi módon szabályozza a közoktatási
+intézményi nyomtatványok, illetve az azokat részben kiváltó informatikai rendszerek alkalmazási
+szabályait:
+
+72. § . (2) Az iskolában csak olyan bizonyítványnyomtatvány, illetve bizonyítvány kiállításához
+szükséges nyomtatvány alkalmazható, amelyet az oktatásért felelős miniszter, szakképesítést tanúsító bizonyítvány
+esetén a szakképzésért és felnőttképzésért felelős miniszter jóváhagyott. A bizonyítványnyomtatvány és a bizonyítvány
+kiállításának alapjául szolgáló nyomtatvány előállításához, forgalmazásához az oktatásért felelős miniszter, szakképesítést
+tanúsító bizonyítvány esetén a szakképzésért és felnőttképzésért felelős miniszter engedélye szükséges. Az iskolai
+nyomtatványok - az év végi bizonyítvány és az állami vizsga teljesítéséről kiállított bizonyítvány kivételével -
+az oktatásért felelős miniszter, szakképesítést tanúsító bizonyítvány esetén a szakképzésért és felnőttképzésért
+felelős miniszter által jóváhagyott rendszer alkalmazásával, a személyiségi, adatvédelmi és biztonságvédelmi követelmények
+megtartásával elektronikus úton is elkészíthetők és tárolhatók. A bizonyítvány kiállításának alapjául szolgáló nyomtatványt
+azonban nyomtatott formában is elő kell állítani, és meg kell őrizni.
+
+====== 2011. évi CXC. törvény A nemzeti köznevelésrõl ======
+
+Az időközben megjelent új "Köznevelési törvény" szinte változtatás nélkül tartalmazza a korábbi szöveget:
+
+57. § (6) Az iskolai nyomtatványok – az év végi bizonyítvány és az állami vizsga teljesítésérõl kiállított bizonyítvány kivételével –
+az oktatásért felelõs miniszter, szakképesítést tanúsító bizonyítvány esetén a szakképzésért és felnõttképzésért felelõs
+miniszter által jóváhagyott rendszer alkalmazásával, a személyiségi, adatvédelmi és biztonságvédelmi követelmények
+megtartásával elektronikus úton is elkészíthetõk és tárolhatók. A bizonyítvány kiállításának alapjául szolgáló
+nyomtatványt ebben az esetben is elõ kell állítani nyomtatott formában, és meg kell õrizni.
+
+====== 11/1994 MKM rendelet ======
+
+=== A foglalkozási napló ===
+
+5. Az óvodai, a tanórai, a tanórán kívüli, valamint a kollégiumi foglalkozásokról a nevelő munkát végző, illetve a foglalkozást
+tartó pedagógus foglalkozási naplót (csoportnaplót, osztálynaplót, sportnaplót stb.) vezet. A foglalkozási naplót az óvodai nevelés,
+iskolai nevelés és oktatás nyelvén kell vezetni.
+
+=== A tanügyi nyilvántartások vezetése ===
+
+10. a) A pedagógus csak a nevelő-oktató munkával összefüggő feladatokhoz nélkülözhetetlen ügyviteli tevékenységet köteles elvégezni.
+
+b) Az osztályfőnök vezeti az osztálynaplót, a törzslapot, és kiállítja a bizonyítványt, vezeti a továbbtanulással összefüggő nyilvántartást.
+Alapfokú művészetoktatási intézményben a hangszert, illetve a csoportos tantárgyat oktató szaktanár - az intézményvezető megbízása alapján -
+vezeti az egyéni foglalkozási naplót, a csoportos foglalkozási naplót, a törzslapot és kiállítja a bizonyítványt.
+
+=== Irattári terv ===
+
+16. Naplók 5 (év)
+
+=== Az iskola által kötelezően használt nyomtatványok ===
+
+22. Osztálynapló (csoportnapló)
+
+(Nincs "megcsillagozva", ami azt jelentené:
+
+A * jelölt nyomtatványok csak az oktatásért felelős miniszter által vezetett minisztérium engedélyével gyárthatók és forgalmazhatók,)
\ No newline at end of file
diff --git a/mayor-orig/mayor-wiki/wiki/data/pages/gyik/mayorca.txt b/mayor-orig/mayor-wiki/wiki/data/pages/gyik/mayorca.txt
new file mode 100644
index 00000000..285c09a6
--- /dev/null
+++ b/mayor-orig/mayor-wiki/wiki/data/pages/gyik/mayorca.txt
@@ -0,0 +1,77 @@
+====== MaYoR Hungary - Tanúsítvány hitelesítő ======
+
+Saját gyakorlatunkból jól ismerjük a self-signed tanúsítványokkal járó kellemetlenségeket. A böngészőket rá kell beszélni az általuk borzasztóan veszélyesnek ítélt oldalhoz való csatlakozásra, ráadásul ezt a lépéssort a felhasználóink számára is - ha nem is érthetővé - legalább elfogadhatóvá kell tennünk, miközben a böngészők - amúgy teljesen jogosan - egyre drasztikusabb figyelmeztetéseket küldenek feléjük.
+
+
+===== Megoldási lehetőségek =====
+
+Az igazán jó megoldás nyilván egy tisztességes tanúsítvány beszerzése lenne, hazánkban talán a [[http://www.netlock.net/|NetLock]] által hitelesített tanúsítványok beszerzése a legegyszerűbb, de nem jellemző, hogy a magyar középiskolák tömegével szereznének be ilyet, ha találhatnak más - bár kétség kívül kevésbé biztonságos - megoldást is.
+
+Köztes megoldás lehet, ha csatlakozunk a [[http://www.cacert.org/|CAcert.org]]-hoz - de mi nem ismerjük részleteiben ezt a kezdeményezést, nem vettük a fáradságot, hogy megismerjük, így ajánlani nem tudjuk - ha valaki tud róla bővebbet, írjon róla nekünk - lehet, hogy jó megoldás.
+
+A mi alternatívánk egy általunk (MaYoR Hungary) hitelesített tanúsítvány kiadása.
+
+===== MaYoR Hungary CA =====
+
+Igény esetén az elküldött adatok alapján készítünk MaYoR Hungary által aláírt tanúsítványt.
+
+[color=red]** >> Ezt a szolgáltatást megszüntettük. << **[/color]
+
+[color=#bbbbbb]
+==== Mi előnye van? ====
+Ez a megoldás nem sokban tér el a ''self-signed'' tanúsítvány alkalmazásától. Kicsivel talán növeli a hitelességet, hogy nem az adott szerveren generált kulcsot használunk - a szerver egy tőlünk kapott tanúsítványt mutat fel, ami annyit jelent, hogy legalábbis fel kellett vegye velünk a kapcsolatot a szerver telepítője, ennek vannak nyomai, legalább egy email cím, vagy telefonszám. A hitelesítést ennél mélyebben nem tudjuk biztosítani (nem megyünk el "családlátogatásra", nem kérünk hivatalos iratokat a bejegyzéshez, mint a komoly tanúsítvány hitelesítő cégek).
+
+A másik, hogy elegendő a MaYoR Hungary "szervezetet" elfogadtatni a böngészővel, mint megbízható hitelesítő szerv - ez kevésbé ijesztő folyamat és [[http://www.mayor.hu/installca.php|néhány kattintást igényel csak]], viszont nyilvánvalóan bizalmi kérdés. Akik elfogadnak minket megbízható hitelesítőként, azoknak a továbbiakban semmilyen gondot nem fog okozni a MaYoR rendszerhez való csatlakozás, sem most, sem a jövőben kiállított újabb tanúsítványok esetén. Aki túl kockázatosnak tartja ezt a bizalmi lépést, az továbbra is úgy járhat el, mint ahogy azt a ''self-signed'' tanúsítványokkal tette.
+
+==== Milyen adatokra van szükség a tanúsítvány kiállításához? ====
+
+A következő adatokat kell eljuttatni hozzánk (mondjuk a support(a)mayor.hu címre) tanúsítvány igényléséhez:
+
+ * Megye, régió
+ * Város
+ * Intézmény név
+ * Szervezeti egység
+ * Web szerver neve
+ * Email cím
+
+Az elküldött adatok alapján három állományt generálunk: jelszóval védett kulcsot, jelszó
+nélküli kulcsot és tanúsítványt. Ha az intézmény rövid neve pl ''rovidnev'', akkor:
+
+ rovidnev.key.pem
+ rovidnev.key.pem.unsecure
+ mayor.rovidnev.sulinet.hu.cert.pem
+
+A két kulcs közül csak az egyiket kell használni. A különbség, hogy a
+jelszóval védett kulcs használata esetén a web-szerver indításakor
+mindig be kell írni a jelszót. Ez kényelmetlen, de a kulcs így nagyobb
+biztonságban van. Ha ezzel nem akarunk minden indításkor foglalkozni,
+akkor használjuk bátran a *.unsecure kulcsot (eddig is ilyet használt
+mindegyikünk).
+
+A három állományt valamilyen egyeztetett úton-módon eljuttatjuk a szerverre (nem email-ben,
+inkább scp-vel).
+
+
+==== A tanúsítvány telepítése ====
+
+A három állományt másoljuk be a /etc/apache2/ssl köyvtárba (ha nincs ilyen könyvtár, akkor hozzuk létre)!
+
+Szerkesszük a /etc/apache2/sites-enabled/mayor állományt:
+
+ SSLCertificateFile /etc/apache2/ssl/mayor.rovidnev.sulinet.hu.cert.pem
+ SSLCertificateKeyFile /etc/apache2/ssl/rovidnev.key.pem.unsecure
+
+A régi bejegyzéseket # jellel kommentezzük ki, vagy a korábbi állományt mentsük el - hátha valami miatt vissza akarunk térni a korábbi változatra...
+
+Indítsuk újra a web-szervert
+
+ /etc/init.d/apache2 restart
+
+==== A böngésző beállítása ====
+
+Ha fel szeretnénk venni a MaYoR Hungary "szervezetet" a megbízható tanúsítvány hitelesítők közé, akkor a böngészőnkkel látogassunk el a [[http://www.mayor.hu/installca.php]] oldalra és nyomjuk meg az Install gombot. Elegendő a web-helyek hitelesítését engedélyezni a megjelnő ablakban.
+
+Ha ezt a lépést nem kívánjuk megtenni, akkor a webszerverhez való következő csatlakozáskor fogadhatjuk el ideiglenesen, vagy hosszútávra az új tanúsítványt - ahogy azt az ön-aláírt tanúsítványokkal tettük.
+
+Ezzel el is készültünk.
+[/color]
\ No newline at end of file
diff --git a/mayor-orig/mayor-wiki/wiki/data/pages/gyik/naplo.txt b/mayor-orig/mayor-wiki/wiki/data/pages/gyik/naplo.txt
new file mode 100644
index 00000000..db516de1
--- /dev/null
+++ b/mayor-orig/mayor-wiki/wiki/data/pages/gyik/naplo.txt
@@ -0,0 +1,408 @@
+
+====== Gyakran Ismételt Kérdések - MaYoR Napló ======
+
+===== Minden határidő lejárt, segítség! =====
+
+**Kérdés:**
+Mit tegyek, ha már adminisztrátrként sem tudok jegyet módosítani, igazolást beírni, órát beírni, stb...? Nyúljak bele a naplóba adatbázis szinten?
+
+**Válasz:**
+Ne. Inkább ideiglenesen, egy munkamenet erejéig módosítsd a határidőt. Egy lehetséges mód a következő:
+
+Az intézmény konfigurációs állományában
+(''config/module-naplo/config-[azintezmenyrovidneve].php'') van
+egy ilyen sor (az elején):
+
+
+define('_ZARAS_HATARIDO',date('Y-m-01 00:00:00',strtotime('-1month -10days')));
+
+
+Ezt ki lehet egészíteni valahogy így:
+
+
+ if (_SESSIONID=='ad3dabd520fecfcd306a7fd39')
+ define('_ZARAS_HATARIDO','2008-09-01 00:00:00');
+ else
+ define('_ZARAS_HATARIDO',date('Y-m-01 00:00:00',strtotime('-1month -10days')));
+
+
+Ha a _SESSIONID
+értékéhez bemásolod az épp aktuális session azonosítódat az url-ből,
+akkor amíg ki nem lépsz, addig a _ZARAS_HATARIDO 2008. szeptember 1. lesz
+számodra - és tudsz pótlólag igazolni, órát beírni.
+
+===== Hogy tudok az előző hónapra jegyet beírni? =====
+
+**Kérdés:**
+Hogy tudok az előző hónapra jegyet beírni? Hiszen még nem járt le a határidő...
+
+**Válasz:**
+Sehogy. A jegy mindig a beírás dátumával kerül rögzítésre - hiszen a beírással válik hivatalossá, addig csak "mese". Ha utalni akarsz arra, hogy a jegy
+mikor, milyen körülmények között keletkezett, akkor több lehetőséged is van erre:
+
+ * Hozzárendelheted a jegyet egy órához
+ * Szöveges megjegyzést fűzhetsz a jegyhez
+ * Csoportos jegy esetén a dolgozat elnevezése is utalhat a körülményekre
+
+A határidő csak arra vonatkozik, hogy a már beírt jegyeket meddig lehet változtatni, törölni.
+
+===== Egy diák egy tárgyat több tankörben is tanul, hogy kap majd évvégi jegyet? =====
+
+**Kérdés:**
+Vannak olyan tanulók, akik egy tárgyat két különböző órán is tanulnak, de végül egy jegyet kapnak majd a kettőre félévkor/évvégén. Hogy oldjam ezt meg?
+
+**Válasz:**
+A zárójegyek nem tankörökhöz, hanem tárgyakhoz kapcsolódnak. Ha két tankör ugyanahhoz a tárgyhoz tartozik, akkor a közös diákok adott tárgyi zárójegyi mindkét
+tankörnél módosíthatók - a tankörök tanárainak meg kell egyezni bennük. Az év közben kapott jegyek is megjelennek mindkét tankörnél, de megkülönböztethetőek,
+tehát megállapítható, hogy melyik jegy melyik tankörben született.
+
+===== Nálunk nincs 2F zárójegy, hogyan tűntethetem el? =====
+
+**Kérdés:**
+A mi intézményünk nem ad elégséges F (figyelmeztető) bejegyzést se félévkor se évvégén. Hogyan lehet eltűntetni ezt a fokozatot?
+
+**Válasz:**
+A napló modul intézményi konfigurációs filejában (''config/module-naplo/config-[intezmeny_rovid_neve].php'') a $KOVETELMENY tömb
+'jegy' típusának* bejegyzéseit kell felüldefiniálni:
+
+ // Osztályzatok testreszabása - például: 5 fokú skála, F nélkül, de Dicsérettel:
+ global $KOVETELMENY;
+ $KOVETELMENY['jegy']= array(
+ 'értékek' => array('1.0','2.0','3.0','4.0','5.0'),
+ '1.0' => array('rovid' => '1', 'hivatalos' => 'ELEGTELEN'),
+ '2.0' => array('rovid' => '2', 'hivatalos' => 'ELEGSEGES'),
+ '3.0' => array('rovid' => '3', 'hivatalos' => 'KOZEPES'),
+ '4.0' => array('rovid' => '4', 'hivatalos' => 'JO',),
+ '5.0' => array('rovid' => '5', 'hivatalos' => 'JELES', 'megjegyzes'=>'dicséret'),
+ );
+
+
+*Amennyiben jegy típusra van állítva a tárgy zárójegy követelménye.
+
+===== Hogyan használhatok egyéni értékelést? =====
+
+**Kérdés:**
+Mi egyedi értékelést használunk évközben jegyek helyett. Lehetséges ez?
+
+**Válasz:**
+A napló modul intézményi konfigurációs file-jában (''config/module-naplo/config-[intezmeny_rovid_neve].php'') a $KOVETELMENY tömb
+'egyedi felsorolás' típusának bejegyzéseit kell (felül)definiálni:
+
+ global $KOVETELMENY;
+ $KOVETELMENY['egyedi felsorolás']= array(
+ 'értékek' => array('1.0','2.0','3.0'),
+ '1.0' => array('rovid' => 'szorgalmas', 'hivatalos' => 'SZORGALMAS'),
+ '2.0' => array('rovid' => 'ügyes', 'hivatalos' => 'UGYES', 'megjegyzes' => 'dicseret'),
+ '3.0' => array('rovid' => 'aranyos', 'hivatalos' => 'ARANYOS'),
+ );
+
+
+
+Megjegyzés: a hivatalos értékeléshez a megfelelő nyelvi konstansokat is létre kell hozni. [--HOGYAN]
+
+===== Késések összeadása =====
+
+**Kérdés:**
+A késések idejét annak rendje és módja szerint adminisztráljuk. Hogyan állítható be, hogy ezek az összesítő táblázatokban
+az összeadott értéknek megfelelően igazolatlan órára váltassanak át?
+
+**Válasz:**
+A napló modul intézményi konfigurációs filejában (''config/module-naplo/config-[intezmeny_rovid_neve].php'')
+erre a következő beállítás lehetőségek vannak:
+
+
+# Összeadjuk-e a késések perceit, hogy átváltsuk
+ define('_KESESI_IDOK_OSSZEADODNAK', false);
+# Hány késés felel meg egy igazolatlan órának - ha 0 vagy _KERESESI_IDOK_OSSZEADODNAK, akkor nem váltjuk át
+ define('_HANY_KESES_IGAZOLATLAN', 3);
+# Hány felszerelés hiány felel meg egy igazolatlan órának - ha 0 vagy _KERESESI_IDOK_OSSZEADODNAK, akkor nem váltjuk át
+ define('_HANY_FSZ_IGAZOLATLAN', 3);
+
+
+
+===== Órarend betöltés szövegfile-ból =====
+
+**Kérdés:**
+Hogyan tudom betölteni egy szövegfile-ból az órarendet?
+
+**Válasz:**
+Először a tanárok és termek adatait kell betöltenünk, illetve át kell gondolnunk hány hetes az órarend és ennek megfelelően inicializálhatjuk a tanévet. A termeket közvetlenül tudjuk csak betölteni (admin/import -- terem). Ezek után hetenként lehet betölteni órarendet.
+
+ 1. a beépített órarendibetöltő sémákat használva ([[naplo:tanev:orarendbetolto|Órarend/Órarend betöltés]])
+ 2. közvetlenül az orarendiOra táblába importálva (admin/import)
+
+==== közvetlen órarendbetöltés az orarendiOra táblába ====
+
+Ha kézzel kell "digitalizálni" az órarendet, akkor az a legjobb, ha az
+''orarendiOra'' táblának megfelelő tabulátorokkal tagolt szöveges
+állományt készítesz. Mezői (ezt a /var/mayor/install/module-naplo/mysql/tanev.sql-ben
+is megtalálod):
+
+ het, nap, ora, tanarId, osztalyJel, targyJel, teremId, tolDt, igDt
+
+Az első három gondolom egyértelmű. A ''tanarId'' a tanár naplóbeli
+azonosítója (a tanárok kiválasztására használt legördülő listákban is
+megjelenítjük), az ''osztályJel'', ''targyJel'' szöveges mezők, amik utalnak
+arra hogy melyik osztály, mely tárgyáról van szó, de alapvetősen csak
+az egyedi azonosíthatóság fontos (''tanarId'', ''osztalyJel'', ''targyJel'' mindig
+meghatároz egy tankört), ''teremId'' megint csak a naplóbeli terem
+azonosító (ez is külső kulcs), ''tolDt'', ''igDt'' meg a bejegyzés
+érvényességi ideje (pl csak az első félévben lévő óra...)
+
+Ha ezt betöltöd, akkor el kell végezned az [[naplo:orarend:orarendTankor|Órarend-Tankör
+összerendezés]]t (Órarend menüpont alatt) - ez az ''orarendiOraTankor''
+táblába vesz fel bejegyzéseket, amikkel a fent emlegetett
+(''tanarId'',''osztalyJel'',''targyJel'') --> ''tankorId'' hozzárendelés megvalósul.
+Egy tankört többféle hármas is jelölhet az órarendben (pl egy
+tanárváltáskor a tanarId legalább megváltozik), de fordítva mindig
+egyértelmű a kapcsolat.
+
+===== Nem tudok bejelentkezni. A böngésző "Tanúsítvány probléma" miatt nem enged tovább... =====
+
+**Kérdés:**
+Többször is próbáltam a bejelentkezéssel, de mindig azt kapom, hogy „tanusítvány probléma” miatt nem léphetek be. Mi történt?
+
+**Válasz:**
+A MaYoR rendszer a biztonságos böngészés érdekében [[http://http://wiki.hup.hu/index.php/SSL|SSL]] kapcsolatot épít ki a böngésző és a szerver között. E kapcsolat kiépítésekor a szerver egy tanúsítvánnyal próbálja igazolni, hogy valóban ő az a szolgáltató, akinek mondja magát. Egy ilyen tanúsítvány akkor megbízható, ha egy harmadik fél - egy hitelesítő szervezet - aláírta azt, jelezve ezzel, hogy meggyőződött annak valódiságáról.
+
+Ilyen tanúsítvány beszerzése költséges, erre szakosodott cégek végzik a hitelesítést (NetLock, VeriSign...). Egy a MaYoR-hoz hasonló, iskolai keretek közt működő szoftver számára az intézmények nem vásárolnak komoly tanúsítványokat, helyette inkább saját maguk, vagy az általunk kreált [[gyik:mayorca|MaYoR Hungary]] által aláírt tanúsítványokat használnak. Ezeket a tanúsítványokat a böngészők meglehetősen nagy előítélettel kezelik, és jelzik a felhasználó fele, hogy ismeretlen hitelesítő szerv írta őket alá.
+
+Az első esetben (ha az intézmény saját aláírású tanúsítványt használ), annyit tehetünk, hogy kivételként felvesszük a tanúsítványt az elfogadottak közé. Ez mindegyik böngésző típusnál megtehető, de számítanunk kell rá, hogy a böngésző folyamatosan le akar beszélni minket erről a lépésről.
+
+A második esetben (ha MaYoR Hungary által aláírt tanúsítványt használ az intézmény) az előzőekben tárgyalt módszer mellett megtehetjük azt is, hogy [[http://www.mayor.hu/installca.php|felvesszük a MaYoR Hungary-t a megbízható hitelesítők közé]] néhány kattintással.
+
+===== Le lehet cserélni a képeket a "Köszönjük, hogy minden órádat beírtad!" szöveg mellett? =====
+
+**Kérdés:**
+Letöltöttem pár jópofa képet! Le lehet cserélni ezekre a "Köszönjük, hogy minden órádat beírtad!" szöveg mellett megjelenőket?
+
+**Válasz:**
+Igen. A képeket (''*.gif'') be kell másolni a ''/var/mayor/www/skin/classic/module-naplo/img/anim/'' könyvtárba, és fel kell venni egy bejegyzést
+a napló konfigurációs állományába (''/var/mayor/config/module-naplo/config.php''):
+
+ // A "Köszönjük, hogy minden órádat beírtad!" felirat mellett megjelenő GIF képek
+ $UdvozloKep = array('pingvin','kutyus','vonat');
+
+A tömbbe a megjelenítendő állományok neveit kell felsorolni, a ''.gif'' kiterjesztés nélkül.
+
+Két kis gyűjtemény, szabad felhasználásra: [[http://www.szag.hu/gif.zip|Egyik]] és [[http://www.szag.hu/gif2.zip|Másik]]...
+
+===== Felvettem új tanárokat, de nem jelennek meg a felületen =====
+
+**Kérdés:**
+Felvettem új tanárokat tabulátorokkal tagolt szöveges állományból, látszólag minden rendben ment, de az új tanárok nem jelentek meg a nevek között. Mit lehet a hiba?
+
+**Válasz:**
+Az adatok valószínűleg bekerültek az adatbázisba, de a jogviszony kezdetét, illetve végét jelző ''beDt'' és ''kiDt'' attribútumok nem lettek jól beállítva,
+ezért a program úgy tekinti, hogy a felvett tanárok nincsenek jogviszonyban - ezért nem jeleníti meg őket. Egészítsük ki az adatállományt a megfelelő dátum
+adatokkal (legalább a ''beDt'' értéket állítsuk be) és töltsük be újra az adatokat!
+
+===== Hiba: Lejárt a munkamenet vagy nem engedélyezett a sütik használata. =====
+
+**Kérdés:**
+Belépésnél az adat bázisban látszik, hogy beléptem, a logolban bent van a megfelelő bejegyzés, viszont a következőket írja ki a program:
+
+ Hiba: Lejárt a munkamenet vagy nem engedélyezett a sütik használata.
+ Hiba: Azonosítatlan felhasználó! Az adott hozzáférési szinten nem hitelesítetted magad!
+ (A bejelentkezés kötelező.)
+
+Természetesen a gépen a sütik vannak engedélyezve. Mi lehet a baj?
+
+**Válasz:**
+Részlet a /var/mayor/config/main-config.php.example állományból:
+
+ // A paraméter mindenképpen legyen true, ha ssl kapcsolatod van.
+ // Ha nem ssl-en használod, akkor úgyis mindennek vége...
+ define('_SECURECOOKIE',true);
+
+Tehát a gond az lehet, hogy HTTP protokolt használsz (ne használj kódolatlan protokolt ott, ahol jelszavak vándorolnak a neten) és a fenti paraméter true értékű, vagy
+épp fordítva, HTTPS-t használsz, de a fenti beállítás false értékű.
+
+===== Haladási napló nyomtatásakor a Hiba: Hibás/rossz adat! (Első oldal tárgyak száma,7) hibaüzenetet kapom =====
+
+**Kérdés:**
+A haladási napló nyomtatásakor ''Hiba: Hibás/rossz adat! (Első oldal tárgyak száma,7)'' hibaüzenetet kapok. A nyomtatvány persze nem készül el. Mi a hiba?
+
+**Válasz:**
+A haladási naplóban az egy oldalon megjeleníthető tárgyak, illetve tankörök száma korlátozott. A legszigorúbb korlát az adott időszak (három nap) adatait
+tartalmazó első lapot érinti, ahol az egyes napok órarendje és hiányzási adatai is megjelennek. Ezeken az oldalakon 6 tankör órái jelenhetnek meg, ha ennél
+több jutna ide, akkor a program a fenti hibaüzenetet adja. Azért fordulhat elő ilyen eset, mert a program az azonos tárgyhoz tartozó tankörök óráit
+tankörönként külön oszlopban, de egy egységként kezeli. Ha például a tárgyak sorrendje magyar, matematika, történelem, angol, stb és a matematikát kettő, az
+angolt három csoportban tanulják az osztály tanulói, akkor előáll a fenti hiba, hiszen a történelem kerül a 4. oszlopba, majd az angol tankörök 3 oszlopa
+jönne, ami már nem fér ki.
+
+A probléma a tárgysorrend helyes megválasztásával oldható fel. A [[naplo:osztalyozo:targysorrend|Napló/Osztályozó/Tárgysorrend]] menüpont alatt módosítsuk a
+''napló'' nevű sorrendet.
+
+===== Nem tudok tárgysorrendet változtatni =====
+
+**Kérdés:**
+Az ''Osztályozó napló/Tárgysorrend'' menüpont alatt látszólag minden rendben, megjelennek a tárgyak, bal szélük sárga, de nem tudom a sorrendet változtatni.
+Mi a hiba?
+
+**Válasz:**
+Röviden:
+ cp /var/mayor/config/skin-classic/naplo-config.php.example /var/mayor/config/skin-classic/naplo-config.php
+
+Hosszabban: a hiányzó konfigurációs állomány miatt nem töltődik be a megelelő javascript rutin-gyűjtemény, ezért nem lesznek "vonszolhatók" a felsorolás elemei.
+
+===== A haladási napló nyomtatásakor csak üres oldalt kapok a generált pdf helyett =====
+
+**Kérdés:**
+A haladási napló nyomtatásakor az osztály kiválasztása után csak egy üres, fehér lapot kapok a böngészőben. Se hibaüzenet, se generált PDF állomány.
+Mi a hiba?
+
+**Válasz:**
+A problémát az okozza, hogy a nyomtatási kép generálása nagy memóriaigényű feladat, így minden bizonnyal túllépte a limitet a folyamat. Növeljük meg
+a felhasználható megória méretét a ''/etc/php5/apache/php.ini'' file-ban:
+
+ memory_limit = 128M ; Maximum amount of memory a script may consume (16MB)
+
+Ez után újra kell olvastatni az apache beállításait:
+
+ # /etc/init.d/apache2 reload
+
+===== Felhasználók jogosultságai =====
+
+**Kérdés:**
+Hogyan lehet a felhasználók jogosultságait módosítani?
+
+**Válasz:**
+Nem lehet. A jogosultságok áttekintéséhez, ill. szabályozásához használd a [[naplo:csoportok|Csoportok]]at!
+
+===== Felhasználónevek változtatása =====
+**Kérdés:**
+Meg tudom-e utólag változtatni a felhasználói neveket (a generáláskor túl hosszú -> asszonynevek; névváltozás (házasság, válás, vagy csak egyszerű hivatalos névváltoztatás))?
+
+**Válasz:**
+A felületen változtatni nem lehet, csak törölni és újat felvenni, de MySQL-ben lehet változtatni is. Részletek [[hogyan:felhasznalonevek_megvaltoztatasa|itt]]!
+
+===== Hogyan tudok visszamenőleg bejegyzéseket felvenni a Haladási naplóba? =====
+
+**Kérdés:**
+Hogyan tudok visszamenőleg bejegyzéseket felvenni a Haladási naplóba?
+
+**Válasz:**
+Egy-egy óra a [[naplo:haladasi:pluszora|Napló/Haladási napló/Plusz óra]] menüpontban vehető fel.
+Teljes napok feltöltésére a [[naplo:admin:fillhaladasi|Napló/Admin/Haladási napló feltöltése]] menüpont használható.
+
+Lehetőség szerint persze kerüljük az utólagos módosításokat! [[hogyan:haladasi_utolag|Bővebben...]]
+
+===== Vissza lehet-e tölteni régebbi adatbázist új teleptésű MaYoR-ra? =====
+**Kérdés:**
+Vissza lehet-e tölteni régebbi adatbázist új teleptésű MaYoR-ra?
+
+**Válasz:**
+A részletes leírás a [[hogyan:visszatoltes_mentesbol#vissza_lehet-e_toelteni_regebbi_adatbazist_ujabb_revision-szamu_mayor-ra|itt]] található.
+
+
+===== Üzenetek megjelenése =====
+**Kérdés**
+Hogyan tudom szabályozni a kezdőlapon megjelenő üzenetek számát, illetve az üzenetek lapozását?
+
+**Válasz**
+A ///var/mayor/config/module-naplo/config.php// állományban keressük meg az alábbi sorokat:
+
+ define('__UZENO_AJAXLIMIT',3);
+ define('__UZENO_DEFAULTLIMIT',20);
+
+Az első sorban a '3' a kezdőlapon megjelenő üzenetek számát jelenti.
+A második sor '20' értéke a **Minden üzenetemet mutasd!** utáni, egy oldalon olvasható üzeneteket (és így a lapozást is) befolyásolja.
+
+
+===== Nem töltődtek be a haladási naplóba a mai órák... - Mit tegyek? =====
+**Kérdés**
+A haladási naplóban nem jelnnek meg az órák. A Kollégák nem tudják beírni a tananyagot... hiányzókat... stb.
+
+**Válasz**
+A haladási naplóba (//naplo_[iskola]_[tanev]// adatbázis //ora// táblája) akkor kerülnek be az órák, ha:
+
+ * van érvényes //tolDt,igDt// értékekkel feltoltott orarendiOra tábla; és elkészült a órarend-tankör összerendezés;
+ * elérjük az adott nap dátumát, és valaki először lép a napló felületére (próbáljuk ki 0:00:01-kor... 8-), és még nincs az //ora// táblában az adott napra bejegyzés;
+ * vagy az adott napra valamilyen "esemény" (helyettesítés-kiírás, óracsere, stb.) történik.
+
+Előfordul, hogy - főleg a II. félévi órarendváltoztatásnál - hibás a tolDt érték az órarendiOra táblában. Ellenőrizzük!
+
+Szintén jellemző II. félévi hibajelenség, hogy az új órarend elkészülte és feltöltése után nem megfelelő az órarend-tankör összerendezés (változó óraszámú tárgyak, csoportcserék, stb. miatt). A **Napló-Órarend-Órarend ellenőrzés** menü pont erre szolgál: az aktuális dátum kiválasztása után itt találjuk azokat a tanköröket, amiknél nem megfelelő valamilyen okból az összerendezés. A lista alapján ellenőrizzük az **Órarend-tankör összerendezés** menüben a tanárok óráit!
+
+A(z egyéb, évközbeni) be-nem töltődésnek a leggyakoribb okai, illetve ellenőrzésük (óvatosan járjunk el, mert nem mindegy, hogy csak 1-2 óra van-e bent, vagy csak annyi hiányzik... :-). Most az előbbit taglaljuk.):
+
+Az éves munkatervben ellenőrizzük, hogy az adott nap megfelelően van-e rögzítve (tanítási nap);
+
+Ha nem, javítsuk, majd a **Helyettesítés** menüben az adott napra - tanár kiválasztása nélkül - nyomjunk egy **OK**-t. Ilyenkor be kell töltődni a haladási naplóba az óráknak.)
+
+Az egyes osztályok órarendjében ellenőrizzük, hogy az adott napra valamely óra mellett megjelent-e a jobb felső sarokban egy kis kör (ez jelzi, hogy az óra már a haladási naplóban is benn van).
+
+Ha csak néhány óránál találunk ilyet, meg is van az ok: egyetlen bejegyzés is elég, hogy a többi óra ne töltődjön be.
+
+SQL-szinten (//naplo_[iskola]_[tanev]// adatbázis):
+
+ mysql> SELECT * FROM ora WHERE dt=curdate();
+
+Ez a parancs listázza az aktuális napi haladási naplóbeli órákat. Ha nem nulla (hanem 1-2-3 rekord) az eredmény, derítsük ki, hogy melyik tanár, melyik csoportjai ezek. Járjunk utána, hogy kerültek be (plusz óra, admin-kolléga keze nyoma...). Ha biztosak vagyunk a dolgunkban, szüntessük meg ezeket az órákat!
+
+ mysql> DELETE FROM ora WHERE dt=curdate();
+
+**Figyelem!** Ez a parancs törli az aktuális napli órákat.
+
+Egy napi haladási naplót "kézzel" a **Helyettesítés** menüben az adott napra - tanár kiválasztása nélkül - az **OK** gombra történő kattintással tölthetünk be. Ilyenkor be kell kerülnie a haladási naplóba az óráknak.
+
+Amennyiben a kóbor, a hibát okozó órák valós állapotot tükröztek, kézzel, a **Plusz órá**knál, vagy a **Helyettesítés**nél újból rögzítenünk kell őket.
+
+Célszerű a műveletek előtt egy kézi //mayor backup//-pal elmenteni az aktuális állapotot...
+
+===== Az osztályozónapló és/vagy haladási napló és/vagy záradékok és/vagy törzslapok nyomtatásakor a keletkező PDF-állomány nem a teljes anyagot tartalmazza... - Mit tegyek? =====
+**Kérdés**
+Az osztályozónapló és/vagy haladási napló és/vagy záradékok és/vagy törzslapok nyomtatásakor a keletkező PDF-állomány nem a teljes anyagot tartalmazza, valahol "elakad" (Pl. 30 fős osztály osztályozónaplója a 23. diák után egyszerűen nincs... Vagy a haladási napló október 2. után egyszerűen nincs... Vagy a záradék elakad Balogh-nál...).
+
+**Válasz**
+A hiba oka a különleges karakterek jelenléte a napló idevágó részében. A PDF-generálás során a program nem tud mit kezdeni az ilyen karakterekkel, így a PDF-készítési folyamat leáll.
+
+__A megoldás lépései:__
+
+ * Nézzük meg, melyik az utolsó meglévő PDF-oldal!
+ * A **következő oldal** (példánkban a 24. diák vagy október 3. vagy a Balogh utáni diák(ok)) adatait alaposan nézzük végig! (Néha előfordul, hogy a felületen minden rendben levőnek látszik, azonban az adatbázisban hibás a karakter.)
+ * Ha nem találunk semmilyen rendellenességet, alaposan nézzük meg a ///var/mayor/download/private/nyomtatas/haladasi// vagy //osztalyozo// vagy a //...private/naplo/nyomtatas/zaradekok// vagy a //...private/naplo/nyomtatas/torzslap// könyvtárban az adott osztályhoz tartozó log és u8.tex állományokat! A log állományban konkrétan ott kell szerepelnie, hogy a TeX forrás hanyadik soránál akadt el a fordítás - ez elég sokat segíthet. Ezt a részt tanulmányozzuk át roppant figyelmesen!
+ * A hibás(nak ítélt) karakterek (felületen vagy adatbázisban történő) javítása után próbáljuk meg a napló újbóli nyomtatását! Javasoljuk, hogy mindig csak egy-egy változtatást hajtsunk végre, ha rosszul tippeltünk, azonnal állítsuk vissza az eredeti állapotot és folytassuk a kutatást!
+
+__Ami eddig előfordult:__
+
+ * Az apa telefonszám mezőjébe az e-mail-címe került, a **@** karakter nem tetszett...
+ * A gondviselő nevében hibásan rögzült egy **a** karakter (ez például a felületen nem látszott, csak az adatbázisban - okát nem tudjuk...)
+ * Itt-ott bekerült **görög** betű miatt lett nagy skandalum...
+ * **Nem szabványos szóköz** - észrevehetetlen!
+ * A haladási napló tananyag részébe ilyenformán került be az x-négyzet: **x^2**... Nem bírt vele mit kezdeni a generáló...
+ * Záradékok között **2013_14** formában volt a tanév megadva - az alsóvonás döntötte romba a generálást...
+ * Lelkes Kolléganő az orosz nyelv tanárgy Tananyag mezőjét **cirill** betűkkel írta... (Ez egy régebbi bukta volt, azóta ha a sima tex helyett XeTeX-et használunk, és a config opciók közt engedélyezzük is (így a cirill betűkkel nem lesz többet gond...):
+
+ define('__NYOMTATAS_XETEX',true);
+
+ * Az alsósok szöveges értékelésében, a szabadon kitölthető mezőbe %-jel került.
+ * Alsósok szöveges értékelésénél amolyan szabadszöveg helyeként csupa alsóvonást írtak be...
+
+Ha nem boldogulnuk, kérjünk segítséget a **support**tól vagy a **levelezőlistán** a tapasztaltabb üzemeltetőktől!
+
+
+
+
+===== A haladási napló teljes ugyan, de hiányoznak tantárgyak, tankörök =====
+**Kérdés**
+A haladási napló minden napja megvan, de hiányos vagy üres, pedig a Kollégák minden órát beírtak. Mit tegyek?
+
+**Válasz**
+A //Napló-Nyomtatás-Tankör naplóhozrendelése// oldalon a vegyes tanköröket egyenlő számban szét kell osztani az érintett osztályok haladási naplójai között.
+
+Például a 7.ab testnevelés (lány) tankör órái a 7.a, míg a 7.ab testnevelés (fiú) tankör órái a 7.b haladási naplójában kerülnek adminisztrálásra.
+
+===== Az egyes tárgyak éves óraszáma nem megfelelő =====
+**Kérdés**
+A Bizonyítványban/Statisztikában megjelenő éves tárgyóraszám nem egyezik az előírttal. Miért?
+
+**Válasz**
+Az éves óraszámot a napló a tanítási napok száma / 5 egészrészével számolja, ami általában 37-re jön ki. Ettől eltérő éves óraszámot a /var/mayor/config/module-naplo/config-[iskola].php állományba írt sorokkal tudjuk kikényszeríteni:
+
+ define('__TANITASI_HETEK_OVERRIDE', true);
+ if (defined('__TANEV') && __TANEV==2017) {
+ define('___TANITASI_HETEK_SZAMA', 36);
+ define('___VEGZOS_TANITASI_HETEK_SZAMA', 30);
+ }
diff --git a/mayor-orig/mayor-wiki/wiki/data/pages/hogyan/asc-ctrl-shift-e.txt b/mayor-orig/mayor-wiki/wiki/data/pages/hogyan/asc-ctrl-shift-e.txt
new file mode 100644
index 00000000..2ee54f86
--- /dev/null
+++ b/mayor-orig/mayor-wiki/wiki/data/pages/hogyan/asc-ctrl-shift-e.txt
@@ -0,0 +1,53 @@
+
+====== aSc szöveges export: Ctrl-Shift-E ======
+
+Az aSc Timetables program képes - az XML exportnál ugyan kevésbé részletes, de használható - szöveges fomátumú exportra.
+A varázslatos billentyűkombináció: **Ctrl-Shift-E**
+
+(Sajnos az aSc nem ad csak úgy ilyen exportot (csak az első 10 rekordot adja ki). A gyártótól kell kérni - normál licensz birtokában - speciális export-licenszet.)
+
+===== Mit tegyünk a keletkezett állománnyal =====
+
+==== Eredeti állomány ====
+
+A kapott **txt** állományt mentsük el, készítsünk róla egy biztonsági másolatot, és nyissuk meg [[http://libreoffice.hu|LibreOffice Calc]]-cal (sokkal jobb ezzel dolgozni, mint Excel-lel, mert a végső csv export itt pofonegyszerű!)
+
+Az exportált állomány mezői:
+
+ Day Name, Day Number in Cycle, Period in Day, Period in Cycle, Form, Form 'short', Subject, Subject 'short', Classroom, Classroom 'short', Teacher Name, Teacher Short, Group, Cycle
+
+==== Átalakítás====
+
+Az állományt érdemes először a táblázatkezelő saját formátumában menteni, és a legvégén átalakítani **tabulátorokkal tagolt, UTF-8 kódolású csv**-be!
+
+A kinyert fájlban a **'Day Number in Cycle'**, a '**Period in Day'**, a **'Form'**, a **'Subject'**, a **'Classroom'** és a **'Teacher Name'** hordoz lényeges információt a megfelelő import fájl számára, a többi törölhető - de még ne tegyük!!!
+
+Az órarend MaYoR-ba való importálásához a következő mezőkre van csak szükség:
+
+ het nap ora tanarId osztalyJel targyJel teremId tolDt igDt
+
+ * A **het** mező vagyis az órarendi hét, mely egyhetes órarendnél persze végig 1. A '**Day Name'** mezőt érdemes átnevezni "het"-re majd végig egyessel feltölteni. Kéthetes órarendnél 1 és 2 az érték, lásd később!
+
+ * A **nap** mező tartalma a **'Day Number in Cycle'** tartalma legyen,
+
+ * az **ora** mezőjé a **'Period in Day'**,
+
+ * a **tanarId** a MaYoR-ban lévő tanárazonosítók,
+
+ * az **osztalyJel** tartalma a **'Form'** mező. Ez azonban a naplóban egy 6 karakteres mező, tehát célszerű rövidíteni: '7.a, 7.b' helyett '7ab', '5.a, 5.b, 6.a, 6.b' helyett '5-6' és hasonlók. Ha nem tesszük meg, az import során csonkolódik!
+
+ * A mumus a **targyJel**... nos, a kiexportált fájl **'Subject'** mezője sajnos nem hordoz elegendő információt erről. Ellenben az azonos tárgyhoz kapcsolódó eltérő tankörök kiválóan megkülönböztethetők a **'Subject'** és a **'Group'** mezők együttes használatával. Ez különösen akkor fontos, ha __azonos nevű tárgyat ugyanabban az osztályban ugyanaz a tanár több csoportban is__ tanít. A táblázatkezelő remek lehetőséget ad a tömeges módosításra, csak okosan kell használni.
+Erre valók az ÖSSZEFŰZ, HA, BAL és hasonló függvények.
+
+ * A **teremId** persze a **'Classroom'** (de itt is a MaYoR-ban használt teremId-k kellenek!),
+
+ * A **tolDt** és az **igDt** egyértelmű (éééé-hh-nn formában).
+
+==== Kéthetes órarend ====
+
+Kéthetes órarendnél szintén az eredeti export-állományt hívjuk segítségül. A **'Cycle'** mező mondja meg, hogy minden héten vagy csak az egyiken van a bizonyos óra. A külön hetieket hagyhatjuk, a közös órákat duplázni kell (megfelelő mező szerinti sorrend, sorok kijelölése, másolás, új sor, beillesztés).
+
+==== Feltöltés, összerendezés ====
+
+Ezt a csv fájlt kell feltölteni a szerverre, majd //Admin/Import - orarendiOra//, text fájl útvonala, és OK.
+A Ctrl-Shift-E módszer esetén mindenképp kézzel kell hozzárendelgetni a tanköröket az órarendi órákhoz (Órarend/Órarendi óra - tankör hozzárendelés) - de ez egy egészséges kompromisszum... :-).
diff --git a/mayor-orig/mayor-wiki/wiki/data/pages/hogyan/beiratkozas.txt b/mayor-orig/mayor-wiki/wiki/data/pages/hogyan/beiratkozas.txt
new file mode 100644
index 00000000..b6504641
--- /dev/null
+++ b/mayor-orig/mayor-wiki/wiki/data/pages/hogyan/beiratkozas.txt
@@ -0,0 +1,61 @@
+====== Beiratkozás ======
+
+A **beiratkozás** az egyik legfontosabb adminisztratív esemény (:-)) egy iskola életében. A napló használatával egyszerűsíthető, legalábbis kevesebb lépcsőben valósítható meg ez az adafelvétel miatt kényes lépés.
+Az iskola hagyományait és lehetőségeit figyelembevéve rengeteg változat képzelhető el erre, egy lehetséges megoldást vázolok.
+
+=====Előkészítés=====
+
+====Ki végzi az adatrögzítést?====
+A beiratkozás általában nem egyemberes feladat. Azokat a géphasználatban jártas Kollégákat, akik segédkeznek, célszerű ideiglenesen a //titkarsag// csoportba felvenni (Felhasználói adatok - Csoportok keresése). Ezzel a diákok adatainak módosításához, felvételéhez jogot kapnak.
+
+====Új tanév nyitása====
+A beiratkozó diákok csak a következő tanévtől kerülnek be ténylegesen a naplóba, ezért meg kell nyitni a következő tanévet (Admin - Tanévek)
+
+====Előzetes adatfelvitel====
+
+A felvételt nyert tanulók adataiból készítsünk egy tabulátorokkal tagolt, UTF8 kódolású csv állományt a következő fejlécekkel:
+
+ oId viseltCsaladinev viseltUtonev nem kezdoTanev kezdoSzemeszter statusz
+
+ * oId =oktatási azonosító
+ * kezdoTanev = 2011
+ * kezdoSzemeszter = 1
+ * statusz = felvételt nyert
+
+A kész állományt töltsük fel valamilyen módon a naplót futtató szerverre, majd az Admin menüpontban emeljük be a //diak// táblába.
+
+=====Adatrögzítés a beiratkozás alkalmával=====
+
+Az Intézményi adatok menüben kiválasztjuk a következő tanévet, majd a Diákok menüben a „Felvételt nyert” csoportban jelennek meg az újoncok. Az oldal háttere zöld, ezzel is kiemelve a státuszt.
+Az adatokat értelemszerűen kitöltjük, majd a megfelelő dátummal a jogviszonyát rendezzük.
+
+Ez a módszer biztonságosan előkészített, egyes intézményekben speciális okok miatt az osztályba sorolás később valósul meg.
+
+A naplóból a későbbiek során tetszőleges adatokat lehet kinyerni – beiratkozási naplóhoz, statisztikához, egyéb nyilvántartáshoz.
+
+A beiratkozás után ne maradjon el a jogviszony váltás, egyeztetett
+dátum szerint!
+
+=====További ötletek, lehetőségek - ezt is olvassuk el...!=====
+
+Lehetőség van arra is, hogy előzetes adatfeltöltés nélkül vegyük fel az új diákokat. Ilyenkor a Diák lapon (a tanév és az osztály kiválasztása után) a //Bekerülés módja// mezőnél a **Felvétel osztályba** sort választva azonnal az osztályába is léptethető a diák.
+
+Érdemes egyeztetni a vezetőséggel, gazdasági irodával, titkársággal, könyvtárral, stb., hogy milyen adatokra van szükség az egyéb nyilvántartásokhoz. A napló rengeteg adatot kezel, ezek egy része kötelezően megadandó, más részükkel azonban óvatosan, megfelelő diszkrécióval kell bánni (elvált szülők, fogyatékosság, szociális helyzet, stb.).
+
+Feltétlenül javasolt ellenőrizni (eredeti dokumentumok alapján):
+
+ * diák neve, születéskori neve, második (harmadik) utónév, külföldi diákoknál melyik a vezeték- és melyik az utónév;
+ * jár-e testvére az iskolába, hiszen ilyenkor a szülői hozzárendelés egyszerűsödik;
+ * édesanyja neve, különös tekintettel a második (harmadik) utónévre;
+ * állandó lakcím vs. tartózkodási cím (a Fenntartók az állandó lakcím szerint adják-veszik a normatívát, ez mindenképp kell, de pl. értesítési cím miatt szükség lehet a "tényleges" címre is);
+ * email címeket érdemes a szülőktől begyűjteni (ha hozzájárul), hogy az azonosítók kiküldéséhez fel lehessen használni;
+
+Ha van rá szabad erőforrás és használja az iskola a [[naplo:small_faces|Képek a naplóban]] funkciót, el lehet készíteni a diákokról a fotókat - bár a tapasztalat szerint nem mindig a diák jelenik meg a beiratkozáson, így ezt talán érdemes az első szeptemberi napokra hagyni...
+
+=====Utólagos tennivalók=====
+
+Az ideiglenesen a //titkarsag// csoportba felvett Kollégákat vegyük ki a csoportból!
+
+Az új diákok osztályba sorolásáról ne feledkezzünk meg (ha nem közvetlenül osztályba vettük fel őket)!
+
+Ha előzetes adatfeltöltéssel dolgoztunk, nézzük át a listát, nem maradt-e benne olyan diák, aki __nem iratkozott be__! Ha találunk ilyet, járjunk utána, mi az oka az elmaradásnak: elfeledte az időpontot, esetleg mégis másik iskolába ment, vagy egyéb okok miatt nem jelent meg. Ha nem az iskolába fog járni, töröljük az adatbázisból!
\ No newline at end of file
diff --git a/mayor-orig/mayor-wiki/wiki/data/pages/hogyan/dobozok.txt b/mayor-orig/mayor-wiki/wiki/data/pages/hogyan/dobozok.txt
new file mode 100644
index 00000000..304f8534
--- /dev/null
+++ b/mayor-orig/mayor-wiki/wiki/data/pages/hogyan/dobozok.txt
@@ -0,0 +1,55 @@
+===== Dobozok a portálon =====
+
+
+A portál modul bal- és jobboldalán megjelenő kis dobozokhoz (szótár, születésnaposok, stb.) hasonlóakat tudunk létrehozni, saját tartalommal.
+(Vigyázat: a túl sok információ sem jó, elvesznek benne a fontos dolgok...)
+
+Három szinten hozhatunk létre ilyet:
+ * public - bejelentkezés nélkül is látszik a kezdőoldalon;
+ * private - tanári és diákoldalak;
+ * parent - szülői oldalak.
+
+==== Elsőként... ====
+ ...tisztában kell lennünk vele, melyik skint használjuk.
+ * classic - nem változtattunk semmit, "gyári" kinézet;
+ * oldschool - a hagyományos, régi Mayor-felület;
+ * valami egyéni - de akkor házi készítés, és nyilvánvaló... :-)
+//(A classic változatot mutatom be...)//
+==== Második lépés =====
+Szerkesszük /var/mayor/config/module-portal/config.php állományt - a demo helyett írjuk be az iskola rövid nevét, pl. 'pod'!
+Ez volt:
+ define('__PORTAL_CODE','demo');
+Ez kell:
+ define('__PORTAL_CODE','pod');
+Majd másoljuk át a kívánt hozzáférési szinteken a módosítandó állományokat az iskola nevével:
+ # cp /var/mayor/www/policy/public/portal/portal/portal_demo.classic.php /var/mayor/www/policy/public/portal/portal/portal_pod.classic.php
+ # cp /var/mayor/www/policy/private/portal/portal/portal_demo.classic.php /var/mayor/www/policy/private/portal/portal/portal_pod.classic.php
+ # cp /var/mayor/www/policy/parent/portal/portal/portal_demo.classic.php /var/mayor/www/policy/parent/portal/portal/portal_pod.classic.php
+//(Javasolt mindhármat másolni - ha nem változtatunk, sem lesz baj belőle...)//
+
+==== Most jön az érdemi munka! ====
+A választott állományba be kell szúrni az új dobozhoz tartozó kódot. Nyissuk meg az állományt valamilyen szerkesztővel (pl. nano):
+ # nano /var/mayor/www/policy/parent/portal/portal/portal_pod.classic.php
+Majd keressük meg a 'putDoboz'-zal kezdődő sorokat!
+
+Alapesetben a 'parent' szinten a bal oldalon 3 doboz van:
+ * putDoboz('Védett modulok',...
+ * putDoboz('Születésnaposok :)',...
+ * putDoboz('Bejegyzések',...
+Ez alá lehet felvenni a következőt.
+Egy példa:
+ putDoboz('Iskolánk','Pod Iskola, Budapest', array('header-color'=>'#f7d722'));
+Ekkor a szülők oldalán megjelenik egy negyedik doboz, #f7d722 (sárga) színű "Iskolánk" fejléccel, "Pod Iskola" tartalommal.
+
+Egy egyszerű, de jól használható színkódos oldal:
+[[http://www.hungarotips.com/grafika/szinek/]]
+
+A tartalmat lehet formázni, pl. a következő kód már középre igazítja a félkövér szöveget:
+ putDoboz('Iskolánk','
+ 1993. évi LXXIX. törvény a közoktatásról (Kotv)
+
+ 11/1994. (VI. 8.) MKM rendelet a nevelési-oktatási intézmények működéséről (MűkR)
+
+Tanév, (ą) tanítási év
+
+ (Kotv)
+
+ 121. § (1) E törvény alkalmazásában
+
+ 38. tanév: az iskolában általában szeptember 1-jétől a következő év augusztus 31-éig tartó időszak;
+
+ 52. § (1) Az iskolában a szorgalmi idő, tanítási év minden év szeptemberének első munkanapján kezdődik és - az érettségi vizsga s a szakmai vizsga évét kivéve - minden év június hónap 15-én, illetve, ha ez a nap nem munkanap, a június 15-ét megelőző munkanapon fejeződik be.
+
+Érdemjegy, (ą) osztályzat
+
+ (Kotv)
+
+ 70. § (1) A pedagógus - … - a tanuló teljesítményét, előmenetelét tanítási év közben rendszeresen érdemjeggyel értékeli, félévkor és a tanítási év végén osztályzattal minősíti. A tanuló magatartásának és szorgalmának értékelését és minősítését az osztályfőnök - az osztályban tanító pedagógusok véleményének kikérésével - végzi. Az érdemjegyekről a tanulót és a kiskorú tanuló szülőjét rendszeresen értesíteni kell. A félévi és az év végi osztályzatot az érdemjegyek alapján kell meghatározni. Az osztályzatról a tanulót és a kiskorú szülőjét értesíteni kell. Az érdemjegy, illetőleg az osztályzat megállapítása a tanuló teljesítményének, szorgalmának értékelésekor, minősítésekor nem lehet fegyelmezési eszköz.
+
+ (2) Az érdemjegyek és osztályzatok - a (3) bekezdésben meghatározott kivétellel - a következők:
+
+ a) a tanuló tudásának értékelésénél és minősítésénél jeles (5), jó (4), közepes (3), elégséges (2), elégtelen (1);
+
+ b) a tanuló magatartásának értékelésénél és minősítésénél példás (5), jó (4), változó (3), rossz (2);
+
+ c) a tanuló szorgalmának értékelésénél és minősítésénél példás (5), jó (4), változó (3), hanyag (2).
+
+ (4) Az egyes tanulók év végi osztályzatát a nevelőtestület osztályozó értekezleten áttekinti, és a pedagógus, illetve az osztályfőnök által megállapított osztályzatok alapján dönt a tanuló magasabb évfolyamba lépéséről. Abban az esetben, ha az év végi osztályzat a tanuló hátrányára lényegesen eltér a tanítási év közben adott érdemjegyek átlagától, a nevelőtestület felhívja az érdekelt pedagógust, hogy adjon tájékoztatást ennek okáról, és indokolt esetben változtassa meg döntését. Ha a pedagógus nem változtatja meg döntését, és a nevelőtestület ennek indokaival nem ért egyet, az osztályzatot az évközi érdemjegyek alapján a tanuló javára módosítja.
+
+ (MűkR)
+
+ 24. § (1) Ha a tantárgy oktatása félévkor fejeződik be, a tanuló osztályzatát az év végi bizonyítványban kell feltüntetni.
+
+ (5) Ha a tanuló előrehozott érettségi vizsgát tett valamely vizsgatantárgyból, ezáltal e tantárgy tanulmányi követelményeit teljesítette. Az iskola magasabb évfolyamán vagy évismétlés esetén ezt a tantárgyat nem köteles tanulni.
+
+Magántanuló
+
+ (Kotv)
+
+ 7. § (1) A tankötelezettség - a szülő választása alapján - iskolába járással vagy magántanulóként teljesíthető.
+
+ (2) Ha az iskola igazgatója … megítélése szerint a tanulónak hátrányos, hogy tankötelezettségének magántanulóként tegyen eleget, vagy az így elkezdett tanulmányok befejezésére nem lehet számítani, köteles erről értesíteni a gyermek lakóhelye … szerint illetékes önkormányzat jegyzőjét. A jegyző dönt arról, hogy a tanuló milyen módon teljesítse tankötelezettségét. Hátrányos helyzetű tanuló esetén az iskola igazgatójának a döntéséhez be kell szereznie a gyermekjóléti szolgálat véleményét.
+
+ 11. § (1) A tanuló joga különösen, hogy
+
+ n) magántanuló legyen, továbbá, hogy kérje a tanórai foglalkozásokon való részvétel alóli felmentését;
+
+ 69. § (3) A magántanulót az iskola valamennyi kötelező tanórai foglalkozása alól fel kell menteni.
+
+ (4) Az, akit felmentettek a kötelező tanórai foglalkozásokon való részvétel alól, az igazgató által meghatározott időben, és a nevelőtestület által meghatározott módon, ad számot tudásáról.
+
+ (MűkR)
+
+ 23. § (1) Ha a tanuló - szülőjének a közoktatási törvény 7. §-a (2) bekezdésében szabályozott választása alapján - tankötelezettségének magántanulóként tesz eleget, az erről való bejelentést követő három napon belül az iskola igazgatója beszerzi a tanuló lakóhelye … szerint illetékes gyermekjóléti szolgálat véleményét, annak eldöntésére, hátrányos-e ez a megoldás a tanulónak.
+
+ (2) Ha a tanuló tanulmányi kötelezettségének a szülő döntése alapján magántanulóként tesz eleget, felkészítéséről a szülő gondoskodik, illetőleg a tanuló egyénileg készül fel. Az az iskola pedig, amellyel a tanuló tanulói jogviszonyban áll - kivéve, ha a tanuló független vizsgabizottság előtt ad számot tudásáról - állapítja meg a tanuló érdemjegyeit és osztályzatait, továbbá dönt - minden esetben - a tanuló magasabb évfolyamra lépésével kapcsolatos kérdésekben. Az iskola igazgatója köteles tájékoztatni a tanulót, illetve a szülőt a magántanulói jogairól és kötelességeiről.
+
+ (3) Ha a sajátos nevelési igényű tanuló az illetékes szakértői és rehabilitációs bizottság, a beilleszkedési, magatartási, tanulási nehézséggel küzdő tanuló a nevelési tanácsadó szakértői véleménye alapján tanulmányait magántanulóként folytatja, iskolai neveléséről és oktatásáról - felkészítéséről, érdemjegyeinek és osztályzatainak megállapításáról, illetve az ehhez szükséges pedagógusokról - a szakértői véleményben foglaltak szerint - az az iskola gondoskodik, amellyel a tanuló tanulói jogviszonyban áll.
+
+ (4) Az iskola köteles gondoskodni a tanuló felkészítéséről, érdemjegyeinek és osztályzatának megállapításáról akkor is, ha a szakorvosi vélemény alapján otthoni ellátás keretében részesül tartós gyógykezelésben, és emiatt magántanulóként folytatja tanulmányait.
+
+Nem osztályozható
+
+ (MűkR)
+
+ 20. § (3) Ha a távolmaradást nem igazolják, a mulasztás igazolatlan. Az iskola köteles a szülőt értesíteni a tanköteles tanuló első igazolatlan mulasztásakor, illetve, ha a nem tanköteles kiskorú tanuló igazolatlan mulasztása a tíz órát eléri. Az értesítésben fel kell hívni a szülő figyelmét az igazolatlan mulasztás következményeire.
+
+ (6) Ha a tanulónak egy tanítási évben az igazolt és igazolatlan mulasztása együttesen
+
+ a) … a kettőszázötven tanítási órát,
+
+ d) egy adott tantárgyból a tanítási órák harminc százalékát meghaladja
+
+ és emiatt a tanuló teljesítménye tanítási év közben nem volt érdemjeggyel értékelhető, a tanítási év végén nem osztályozható, kivéve, ha a nevelőtestület engedélyezi, hogy osztályozóvizsgát tegyen. A nevelőtestület az osztályozóvizsga letételét akkor tagadhatja meg, ha az igazolatlan mulasztások száma meghaladja az igazolt mulasztások számát, és az iskola eleget tett a (3) bekezdésben meghatározott értesítési kötelezettségének. Ha a tanuló a tanítási év végén nem osztályozható, tanulmányait évfolyamismétléssel folytathatja. Ha a tanuló mulasztásainak száma már az első félév végére meghaladja a meghatározott mértéket, és emiatt teljesítménye nem volt érdemjeggyel értékelhető, félévkor osztályozóvizsgát kell tennie.
+
+Felmentés
+
+ (Kotv)
+
+ 30. § (9) A sajátos nevelési igényű tanulót, illetve a beilleszkedési, tanulási, magatartási nehézséggel küzdő tanulót - jogszabályban meghatározott munkamegosztás szerint - a szakértői és rehabilitációs bizottság vagy a nevelési tanácsadó szakértői véleménye alapján … az igazgató mentesíti egyes tantárgyakból, tantárgyrészekből az értékelés és a minősítés alól. Ha a tanulót egyes tantárgyakból, tantárgyrészekből mentesítik az értékelés és minősítés alól, az iskola … egyéni foglalkozást szervez részére. Az egyéni foglalkozás keretében - egyéni fejlesztési terv alapján - segíti a tanuló felzárkóztatását a többiekhez. Az érettségi vizsgán az érintett tantárgyak helyett a tanuló - a vizsgaszabályzatban meghatározottak szerint - másik tantárgyat választhat. A tanuló részére a felvételi vizsgán, az osztályozó vizsgán, … a javítóvizsgán, az érettségi vizsgán, … biztosítani kell a hosszabb felkészülési időt, az írásbeli beszámolón lehetővé kell tenni az iskolai tanulmányok során alkalmazott segédeszköz (írógép, számítógép stb.) alkalmazását, szükség esetén az írásbeli beszámoló szóbeli beszámolóval vagy a szóbeli beszámoló írásbeli beszámolóval történő felváltását.
+
+ 35. § (8) A gyógytestnevelés feladata a gyermek, a tanuló speciális egészségügyi célú testnevelési foglalkoztatása, ha az iskolaorvosi vagy szakorvosi szűrővizsgálat gyógy- vagy könnyített testnevelésre utalja.
+
+ 69. § (2) Az igazgató … a tanulót kérelmére - részben vagy egészben - felmentheti az iskolai kötelező tanórai foglalkozásokon való részvétel alól, ha a tanuló egyéni adottságai, sajátos nevelési igénye, továbbá sajátos helyzete ezt indokolttá teszi. Az igazgató a tanulót kérelmére mentesítheti a készségtárgyak tanulása alól, ha azt egyéni adottsága vagy sajátos helyzete indokolttá teszi.
+
+ (4) Az, akit felmentettek a kötelező tanórai foglalkozásokon való részvétel alól, az igazgató által meghatározott időben, és a nevelőtestület által meghatározott módon, ad számot tudásáról.
+
+ (MűkR)
+
+ 23. § (5) Ha a tanulót a közoktatási törvény 69. §-ának (2) bekezdése alapján egyéni adottsága vagy sajátos helyzete alapján mentesítették a testnevelés, a művészetek, a technika tantárgyak és egyéb gyakorlati jellegű tantárgyak, foglalkozások tanulása alól, tudásáról nem kell számot adnia. A mentesítés iránti kérelemben meg kell jelölni a kérelem indokát. Ha a mentesítést a sajátos nevelési igényű tanuló testi, érzékszervi, értelmi, beszédfogyatékosságára, autizmusára, halmozottan fogyatékosságára, vagy a pszichés fejlődés zavarai miatt a nevelési, tanulási folyamatban való tartós és súlyos akadályozottságára tekintettel kérik, az illetékes szakértői és rehabilitációs bizottság, ha pedig tanulási nehézségre tekintettel kérik, a nevelési tanácsadó szakértői véleményét be kell csatolni.
+
+ 1. számú melléklet a 11/1994. (VI. 8.) MKM rendelethez: A könnyített és a gyógytestnevelés szervezésének és a tanulók könnyített vagy gyógytestnevelési órára történő beosztásának rendje
+
+ 1. A tanuló, ha egészségi állapota miatt a testnevelési órák gyakorlatait csak részben vagy egyáltalán nem tudja elvégezni - az orvosi szakvéleményben foglaltak szerint - a kötelező testnevelési óra keretében vagy helyett könnyített testnevelésre (a továbbiakban: I. kategória) vagy a kötelező testnevelési óra helyett gyógytestnevelésre (a továbbiakban: II. kategória) kell beosztani, illetve fel kell menteni (a továbbiakban: III. kategória) mindenféle testnevelési órán való részvétel alól.
+
+Vizsgák
+Javítóvizsga
+
+ (MűkR)
+
+ 21. § (3) A tanuló osztályzatait évközi teljesítménye és érdemjegyei vagy az osztályozó vizsgán, … a javítóvizsgán nyújtott teljesítménye alapján kell megállapítani … (a továbbiakban a felsorolt vizsgák együtt: tanulmányok alatti vizsga). A tanulmányok alatti vizsgát iskolában illetve … független vizsgabizottság előtt lehet tenni. … A szabályosan megtartott tanulmányok alatti vizsga nem ismételhető.
+
+ (8) Ha a tanuló a tanév végén - a tantárgyak számától függetlenül - elégtelen osztályzatot kapott, javítóvizsgát tehet.
+
+ (9) Javítóvizsga letételével folytathatók a tanulmányok akkor is, ha a tanuló az osztályozó vizsgáról … igazolatlanul távol maradt, vagy azt nem fejezte be, illetve az előírt időpontig nem tette le.
+
+ 25. § (1) Javítóvizsga letételére az augusztus 15-től augusztus 31-ig terjedő időszakban … kell a vizsgaidőszakot kijelölni.
+
+ (2) Az iskolában tartott tanulmányok alatti vizsga esetén az igazgató … engedélyezheti, hogy a tanuló az (1) bekezdés szerint előre meghatározott időponttól eltérő időben tegyen vizsgát.
+
+Pótlóvizsga
+
+ 9. számú melléklet a 11/1994. (VI. 8.) MKM rendelethez: A tanulmányok alatti vizsgák eljárási szabályai
+
+ 2.15. Ha a vizsgázó az írásbeli vizsgáról fel nem róható okból elkésik, távol marad, a megkezdett vizsgáról engedéllyel eltávozik mielőtt a válaszadást befejezné
+
+ a) az igazgató - ha ehhez a feltételek megteremthetőek - hozzájárulhat ahhoz, hogy az adott vizsganapon, vagy a vizsgázó és az intézmény számára megszervezhető legközelebbi időpontban a vizsgázó pótlóvizsgát tegyen,
+
+ 2.16. Ha a vizsgázó az írásbeli vizsgáról felróható okból elkésik, távol marad, vagy a vizsgáról engedély nélkül eltávozik, az adott vizsgatantárgyból javítóvizsgát tehet az igazgató által meghatározott időben.
+
+ 2.17. A 2.16. és e pont alkalmazásában a vizsgázónak fel nem róható ok, minden olyan a vizsgán való részvételt gátló esemény, körülmény, amelynek bekövetkezése nem vezethető vissza a vizsgázó szándékos vagy gondatlan magatartására.
+
+ 3.16. A szóbeli vizsgán és a gyakorlati vizsgán elkövetett szabálytalanság, a felróható, vagy fel nem róható okból történő vizsga megszakítás, vagy a vizsgán meg nem jelenés esetében az igazgató a 2.13., 2.15-2.18., 2.21. pontokban leírtak szerint jár el.
+
+Osztályozó vizsga
+
+ (MűkR)
+
+ 21. § (4) A félévi és a tanév végi osztályzat megállapításához a tanulónak osztályozó vizsgát kell tennie, ha
+
+ a) felmentették a tanórai foglalkozásokon való részvétele alól,
+
+ b) engedélyezték, hogy egy vagy több tantárgy tanulmányi követelményének egy tanévben, illetve az előírtnál rövidebb idő alatt tegyen eleget,
+
+ c) a 20. § (6) bekezdésében meghatározott időnél többet mulasztott, és a nevelőtestület döntése alapján osztályozó vizsgát tehet,
+
+ e) a tanuló a félévi, illetőleg év végi osztályzatának megállapítása érdekében független vizsgabizottság előtt tesz vizsgát.
+
+ (5) A magántanulónak a magatartását és szorgalmát nem kell minősíteni.
+
+ 24. § (3) Ha a tanuló egy vagy több tantárgy több évfolyamra megállapított követelményeit egy tanévben teljesíti, osztályzatait minden érintett évfolyamra meg kell állapítani. Ha a tanuló több iskolai évfolyam valamennyi követelményét teljesíti, az osztályzatokat valamennyi elvégzett évfolyam bizonyítványába be kell jegyezni. Ha a tanuló nem teljesíti az iskolai évfolyam valamennyi követelményét, az egyes tantárgyak osztályzatát a törzslapján valamennyi elvégzett évfolyamon fel kell tüntetni, és a vizsga évében, ezt követően az adott évben kiállításra kerülő év végi bizonyítványba be kell írni.
+
+ 25. § (1) … osztályozó … vizsga esetén a vizsgát megelőző három hónapon belül kell a vizsgaidőszakot kijelölni. Az iskola osztályozó vizsgát a tanítási év során bármikor szervezhet. A vizsgák időpontjáról a tanulót a jelentkezéskor tájékoztatni kell.
+
+ (2) Az iskolában tartott tanulmányok alatti vizsga esetén az igazgató … engedélyezheti, hogy a tanuló az (1) bekezdés szerint előre meghatározott időponttól eltérő időben tegyen vizsgát.
+
+ 26. § (1) A tanulmányok alatti vizsgát háromtagú vizsgabizottság előtt kell letenni. Ha a tanulmányok alatti vizsgát az iskola szervezi, a vizsgabizottság az iskola pedagógusaiból áll.
+
+ (2) A tanulmányok alatti vizsga követelményeit, részeit (írásbeli, szóbeli, gyakorlati) és az értékelés rendjét a nevelőtestület a helyi tanterv alapján határozza meg, és a helyben szokásos módon nyilvánosságra hozza. A tanulmányok alatti vizsga - ha azt az iskolában szervezik - vizsgabizottságának elnökét és tagjait az igazgató … bízza meg. A tanulmányok alatti vizsgák lebonyolításakor figyelemmel kell lenni e rendelet 9. számú mellékletének rendelkezéseire.
+
+Jegyzőkönyvek
+
+ 4. számú melléklet a 11/1994. (VI. 8.) MKM rendelethez
+
+ A nevelési-oktatási intézmények ügyintézésének, iratkezelésének általános szabályai és a tanügyi nyilvántartások
+
+ A nevelési-oktatási intézmény irattári terve, az iskolai záradékok és a kötelező nyomtatványok
+
+ Az iskola által kötelezően használt nyomtatványok
+
+ 13. Javítóvizsga-jegyzőkönyv
+
+ 14. Jegyzőkönyv a vizsgához
+
+ 23. Osztályozóív a vizsgához
+
+ 24. Osztályozóvizsga-jegyzőkönyv
+
+Záradékok
+
+ 4. számú melléklet a 11/1994. (VI. 8.) MKM rendelethez
+
+ A nevelési-oktatási intézmények ügyintézésének, iratkezelésének általános szabályai és a tanügyi nyilvántartások
+
+ A nevelési-oktatási intézmény irattári terve, az iskolai záradékok és a kötelező nyomtatványok
+
+Az iskolák által alkalmazott záradékok
+4. Tanulmányait évfolyamismétléssel kezdheti meg, illetve osztályozó vizsga letételével folytathatja.
+Bn., TI., N.
+4/A. ..... tantárgyból tanulmányait egyéni továbbhaladás szerint végzi. N., Tl., B.
+4/B. Mentesítve ..... tantárgyból az értékelés és a minősítés alól N., Tl., B.
+4/C. ..... tantárgy ..... évfolyamainak követelményeit egy tanévben teljesítette a következők szerint: .... N., Tl., B.
+5. Egyes tantárgyak tanórai látogatása alól az 19...../..... tanévben felmentve ............................................ miatt.
+N., TI., B.
+ Kiegészülhet:
+ osztályozó vizsgát köteles tenni
+6. Tanulmányait a szülő kérésére (szakértői vélemény alapján) magántanulóként folytatja. N., TI.
+7. Mentesítve a(z) [a tantárgy(ak) neve] ....................... tantárgy tanulása alól. N., TI., B.
+ Megjegyzés: A törzslapra be kell jegyezni a mentesítés okát is.
+8. Tanulmányi idejének megrövidítése miatt a(z) ................... évfolyam tantárgyból osztályozó vizsgát köteles tenni.
+N., TI.
+9. A(z) évfolyamra megállapított tantervi követelményeket a tanulmányi idő megrövidítésével teljesítette.
+N., TI., B.
+10. A(z) ....................... tantárgy óráinak látogatása alól felmentve .................... -tól ........................ -ig.
+N.
+ Kiegészülhet:
+ Osztályozó vizsgát köteles tenni.
+11. Mulasztása miatt nem osztályozható, a nevelőtestület határozata értelmében osztályozó vizsgát tehet.
+N., TI.
+13. A tanuló az .................. évfolyam követelményeit egy tanítási évnél hosszabb ideig, .................. hónap alatt teljesítette.
+N., TI.
+14. A(z) .................. tantárgyból javítóvizsgát tehet. N., TI., B.,
+ A javítóvizsgán ..................... tantárgyból .......................... osztályzatot kapott ....................... évfolyamba léphet.
+TI., B.
+15. A .................. évfolyam követelményeit nem teljesítette, az évfolyamot megismételheti.
+N., TI., B.
+16. A javítóvizsgán ................ tantárgyból elégtelen osztályzatot kapott.
+ Évfolyamot ismételni köteles. TI., B.
+17. A(z) ........................ tantárgyból .......... -án osztályozó vizsgát tett. N., TI.
+18. Osztályozó vizsgát tett. TI., B.
+19. A(z) .................. tantárgy alól ............... okból felmentve. TI., B.
+20. A(z) ................... tanóra alól .................. okból felmentve. TI., B.
+21. Az osztályozó (beszámoltató, különbözeti, javító-) vizsga letételére .............................-ig halasztást kapott.
+TI., B.
+22. Az osztályozó (javító-) vizsgát engedéllyel a(z) ................................ iskolában független vizsgabizottság előtt tette le.
+TI., B.
+
+
+ Alkalmazott rövidítések:
+
+Beírási napló Bn.
+Osztálynapló N.
+Törzslap TI.
+Bizonyítvány B.
+
\ No newline at end of file
diff --git a/mayor-orig/mayor-wiki/wiki/data/pages/koncepcio.txt b/mayor-orig/mayor-wiki/wiki/data/pages/koncepcio.txt
new file mode 100644
index 00000000..d3ce013d
--- /dev/null
+++ b/mayor-orig/mayor-wiki/wiki/data/pages/koncepcio.txt
@@ -0,0 +1,31 @@
+
+====== A MaYoR rendszer áttekintése ======
+
+===== Avagy: mi az amit érdemes tudni a rendszer belső felépítéséről =====
+
+A MaYoR alapját egy keretrendszer képezi. Ennek a keretrendszernek a fő feladata a felhasználói azonosítás, no meg az oldalak megjelenítéséhez szükséges háttér biztosítása, beleértve a többnyelvűség és a különböző skin-ek kezelését.
+
+A keretrendszer önállóan is működő rendszer, a napló nélkül is életképes, bár alapvetően azért készült, hogy a naplót rá lehessen építeni (általános célú portál motorból van rengeteg, minden bizonnyal jobbak és szebbek is mint a mi rendszerünk).
+A keretrendszer háromféle hozzáférési szintet kezel: a nyilvános (public) oldalak azonosítás nélkül elérhetők (bár van lehetőség itt is azonosításra, ha valamiért szükséges), külön azönosítási folyamaton esnek át a szülők (parent),
+illetve az iskolával jogviszonyban levő diákok, tanárok (private).
+
+Az egyes hozzáférési szinteken külön szabályozhatjuk, hogy milyen felhasználói azonosítást követelünk meg, illetve azt, hogy az azonosítókat milyen háttér adatbázisban tároljuk. Jelenleg kétféle
+háttéradatbázist használhatunk: MySQL-t és OpenLDAP-ot. Az előbbi kezelése jóval egyszerűbb, könyen lekérdezhetők, módosíthatók benne az adatok, az utóbbi pedig - mivel a posixAccount séma kiterjeszéseként
+felépülő azonosítókat használ - felhasználható más szolgáltatások azonosítási folyamataiban (levelezés, ssh, ftp...)
+
+----
+
+A keretrendszerre épülő napló modulban eltárolunk sokféle adatot. Többek között a diákok, tanárok adatait is. Alaphelyzetben ezen adatok és a felhasznái adatok között nincs semmilyen kapcsolat. A gyakorlatban
+persze szeretnénk a tanároknak, diákoknak, szülőknek, titkársági dolgozóknak saját azonosítót adni, mellyel képesek a saját adataikhoz hozzáférni. A felhasználói adatok és a naplóbeli személyek közötti
+kapcsolat a következők szerint alakul ki:
+
+ * A privete hozzáférési szinten "titkárság" kategóriába tartozó felhasználók hozzáférnek a titkárság számára engedélyezett oldalakhoz
+ * A private hozzáférési szinten "tanár" kategóriába tertozó felhasználók esetén a rendszer a oktatási azonosító alapján próbál kapcsolatot találni a naplóban szereplő tanárok és a felhasználói
+azonosító tulajdonosa között. Ha az azonosítóhoz tartozó oktatási azonosító (studyId) attribútum megegyezik valamely tanát oktatási azonosító attribútumával (oId), akkor a rendszer őket azonosnak
+tekinti. Így elvileg nem kizárt, hogy egyes tanárokhoz ne legyen felhasználói azonosító (pl. már megszűnt a jogviszonya), az is lehet, hogy valamiért több azonosítót készítünk hozzá (no erre nem
+tudnék értelmes példát mondani, hogy mire lenne jó), és az is elődordulhat, hogy egy tanár kategóriájú azonosítóhoz nincs megfelelő tanár a naplóban (ez azért többnyire hiba, hacsak nem abból
+adódik, hogy több intézmény adatait kezeljük egy rendszerben).
+ * A private hozzáférési szinten "diák" kategóriába tartozó felhasznlók esetén a rendszer (a tanárokhoz hasonlóan) az oktatási azonosítót használja a naplóbeli diákoknak való megfeleltetéshez.
+ * A parent hozzáférési szinten bejelentkezett felhasználót a program a userAccount attripútum alapján próbálja megfeleltetni a naplóban eltárolt szülők valamelyikével. Itt tehát közvetlenebb
+a kapcsolat, direkt módon a felhasználói azonosítót rendeljük hozzá a szülőhöz.
+
diff --git a/mayor-orig/mayor-wiki/wiki/data/pages/modulok.txt b/mayor-orig/mayor-wiki/wiki/data/pages/modulok.txt
new file mode 100644
index 00000000..45799e91
--- /dev/null
+++ b/mayor-orig/mayor-wiki/wiki/data/pages/modulok.txt
@@ -0,0 +1,8 @@
+====== Modulok ======
+
+A modulok bővítik ki a rendszer szolgáltatásait. A tervezett modulok:
+ * [[mayor-naplo]] - teljesértékű elektronikus napló
+ * [[mayor-portal]] - iskolai portál, statikus részekkel, hírbeküldéssel, kiírással
+
+A sor ízlés, igény és energia függvényében bővíthető (játékok, naptár, képtár, stb).
+
diff --git a/mayor-orig/mayor-wiki/wiki/data/pages/naplo.txt b/mayor-orig/mayor-wiki/wiki/data/pages/naplo.txt
new file mode 100644
index 00000000..0b07d6cc
--- /dev/null
+++ b/mayor-orig/mayor-wiki/wiki/data/pages/naplo.txt
@@ -0,0 +1,11 @@
+
+====== MaYoR elektronikus napló ======
+
+Teljes értékű, web-felületű elektronikus napló.
+
+===== Mit tud? =====
+
+ * Több tanév párhuzamos kezelése
+ * Csoportbontások teljeskörű kezelése
+ * stb
+
diff --git a/mayor-orig/mayor-wiki/wiki/data/pages/naplo/admin/azonositok.txt b/mayor-orig/mayor-wiki/wiki/data/pages/naplo/admin/azonositok.txt
new file mode 100644
index 00000000..7f394c80
--- /dev/null
+++ b/mayor-orig/mayor-wiki/wiki/data/pages/naplo/admin/azonositok.txt
@@ -0,0 +1,21 @@
+====== Diák azonosítók generálása ======
+
+Az oldal arra szolgál, hogy a naplóba felvett tanulói adatokból generálhassunk felhasználói azonosítókat.
+A generálás előtt minden diáknak meg kell adni az oktatási azonosítóját is.
+
+A felhasználói azonosítók a ''kezdoEvfolyam+Betujel+kezdoTanev'' (pl. 7a2008) diák kategóriába kerülnek. Ez a private hozzáférési szint háttéradatbázisának típusától függően a következőt jelenti:
+ * ldap: A fenti néven az ''ou=diak'' alá kerülnek az azonosítók.
+ * mysql: Az azonosítók a fenti nevű csoportba kerülnek.
+Ha szükséges, a program létrehozza az azonosítókat tartalmazó kategóriát, csoportot is.
+
+A megjelenő űrlap első sorában megadhatjuk a generálandó diákok indulási jelszavát. Ha ilyet nem adunk meg, akkor a program a diák vezetéknevének CRC32-es kódját adja meg első jelszóként
+(sikeres létrehozás után meg is jeleníti a generált jelszót a név melett a program).
+
+Alatta az osztály diákjai jelennek meg. A program megpróbál minden névhez azonosítót keresni az oktatási azonosító alapján. Ha talál pontosan egy ilyet, akkor azt jeleníti meg a második oszlopban, egyéb esetben egy beviteli mezőt, az új azonosító generálásához. Ha az oktatási azonosítóhoz egyáltalán nem talál felhasználói azonosítót a rendszer, akkor javasol egy felhasználói azonosítót. Ezt kétféle algoritmus alapján teszi:
+ * unix stylusú azonosító: csupa kisbetűs, maximum nyolc karakteres, ékezettelen azonosító a vezetéknév és a keresztnév első betűjének felhasználásával.
+ * Vezetéknév.Keresztnév alakú, ékezetes, kis- és nagybetűket is használó azonosító.
+Hogy melyiket használja a rendszer, azt a ''/var/mayor/config/private-conf.php'' állomány ''$AUTH['private']['unixStyleAccounts'] true illetve false értékével befolyásolhatjuk.
+
+A következő oszlopban arról látunk információt, hogy a program talált-e olyan azonosítókat, amik esetleg az adott diákhoz tartozhatnak. Itt jelennek meg a diákéval azonos oktatási azonosítóval rendelkező azonosítók, ha több is van belőlük - ez nyilvánvaló hibát jelez, ilyenkor a kiírt azonosítókat kell rendbe rakni. Megjelenhetnek itt olyan azonosítók is, melyekhez a diákkal azonos név tartozik (de az oktatási azonosító különbözik). Ilyenkor ellenőrizhetjük, hogy nem az oktatási azonosító esetleges elírásáról van-e szó.
+
+Jóváhagyás után a progam felveszi a megadott azonosítókat - ha az azonosító nem foglalt már.
diff --git a/mayor-orig/mayor-wiki/wiki/data/pages/naplo/admin/fillhaladasi.txt b/mayor-orig/mayor-wiki/wiki/data/pages/naplo/admin/fillhaladasi.txt
new file mode 100644
index 00000000..6145214b
--- /dev/null
+++ b/mayor-orig/mayor-wiki/wiki/data/pages/naplo/admin/fillhaladasi.txt
@@ -0,0 +1,23 @@
+====== Haladási napló visszamenőleges feltöltése ======
+
+Elsősorban tesztüzemben, a napló kipróbálási időszakában, vagy késedelmesen elkészült órarend esetén használhatjuk a visszamanőleges feltöltést. Ilyenkor az //orarendiOra// tábla szerint kerülnek a bejegyzések az //ora// táblába, az éves munkatervben beállított tanítási napokra.
+
+Használata egyszerű: a dátumok beállítása és az **OK** gomb után egy hosszabb-rövidebb listában jelzi, hogy mely napokra volt sikeres a betöltés.
+
+**__Tesztüzem:__**
+
+Általában a tanévek második féléve alkalmas a naplóval történő büntetlen ismerkedésre, próbálkozásra. Ebben az esetben - ha szeptemberig visszamenőleg feltöltjük a naplót, minden Kolléga töméntelen beíratlan órával fog rendelkezni. Ez a működést nem befolyásolja, de negatívan hathat a sok figyelmeztetés. Jó hír viszont, hogy az óraszámok - nagyjából - passzolni fognak.
+
+__Megoldás:__
+
+Egy ügyes SQL-paranccsal (a //naplo_[iskola]_[tanev]// adatbázisban) megszüntethetjük ezt az állapotot:
+
+ mysql> UPDATE ora SET leiras='Tesztüzem' WHERE dt'.$match.':
'; + $renderer->doc .= ''; + break; + + case DOKU_LEXER_UNMATCHED : + $match = $renderer->_xmlEntities($match); + $renderer->doc .= str_replace("\n",''; + break; + + } + return true; + } + return false; + } + +} +// vim:ts=4:sw=4:et:enc=utf-8: diff --git a/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/size.php b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/size.php new file mode 100644 index 00000000..f111a98d --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/size.php @@ -0,0 +1,104 @@ + + * @author Luis Machuca Bezzaza
',$match); + break; + + case DOKU_LEXER_EXIT : + $renderer->doc .= '
←
+ + + +/gi, "");
+ },
+ createEditField: function() {
+ var text;
+ if(this.options.loadTextURL) {
+ text = this.options.loadingText;
+ } else {
+ text = this.getText();
+ }
+
+ var obj = this;
+
+ if (this.options.rows == 1 && !this.hasHTMLLineBreaks(text)) {
+ this.options.textarea = false;
+ var textField = document.createElement("input");
+ textField.obj = this;
+ textField.type = "text";
+ textField.name = this.options.paramName;
+ textField.value = text;
+ textField.style.backgroundColor = this.options.highlightcolor;
+ textField.className = 'editor_field';
+ var size = this.options.size || this.options.cols || 0;
+ if (size != 0) textField.size = size;
+ if (this.options.submitOnBlur)
+ textField.onblur = this.onSubmit.bind(this);
+ this.editField = textField;
+ } else {
+ this.options.textarea = true;
+ var textArea = document.createElement("textarea");
+ textArea.obj = this;
+ textArea.name = this.options.paramName;
+ textArea.value = this.convertHTMLLineBreaks(text);
+ textArea.rows = this.options.rows;
+ textArea.cols = this.options.cols || 40;
+ textArea.className = 'editor_field';
+ if (this.options.submitOnBlur)
+ textArea.onblur = this.onSubmit.bind(this);
+ this.editField = textArea;
+ }
+
+ if(this.options.loadTextURL) {
+ this.loadExternalText();
+ }
+ this.form.appendChild(this.editField);
+ },
+ getText: function() {
+ return this.element.innerHTML;
+ },
+ loadExternalText: function() {
+ Element.addClassName(this.form, this.options.loadingClassName);
+ this.editField.disabled = true;
+ new Ajax.Request(
+ this.options.loadTextURL,
+ Object.extend({
+ asynchronous: true,
+ onComplete: this.onLoadedExternalText.bind(this)
+ }, this.options.ajaxOptions)
+ );
+ },
+ onLoadedExternalText: function(transport) {
+ Element.removeClassName(this.form, this.options.loadingClassName);
+ this.editField.disabled = false;
+ this.editField.value = transport.responseText.stripTags();
+ Field.scrollFreeActivate(this.editField);
+ },
+ onclickCancel: function() {
+ this.onComplete();
+ this.leaveEditMode();
+ return false;
+ },
+ onFailure: function(transport) {
+ this.options.onFailure(transport);
+ if (this.oldInnerHTML) {
+ this.element.innerHTML = this.oldInnerHTML;
+ this.oldInnerHTML = null;
+ }
+ return false;
+ },
+ onSubmit: function() {
+ // onLoading resets these so we need to save them away for the Ajax call
+ var form = this.form;
+ var value = this.editField.value;
+
+ // do this first, sometimes the ajax call returns before we get a chance to switch on Saving...
+ // which means this will actually switch on Saving... *after* we've left edit mode causing Saving...
+ // to be displayed indefinitely
+ this.onLoading();
+
+ if (this.options.evalScripts) {
+ new Ajax.Request(
+ this.url, Object.extend({
+ parameters: this.options.callback(form, value),
+ onComplete: this.onComplete.bind(this),
+ onFailure: this.onFailure.bind(this),
+ asynchronous:true,
+ evalScripts:true
+ }, this.options.ajaxOptions));
+ } else {
+ new Ajax.Updater(
+ { success: this.element,
+ // don't update on failure (this could be an option)
+ failure: null },
+ this.url, Object.extend({
+ parameters: this.options.callback(form, value),
+ onComplete: this.onComplete.bind(this),
+ onFailure: this.onFailure.bind(this)
+ }, this.options.ajaxOptions));
+ }
+ // stop the event to avoid a page refresh in Safari
+ if (arguments.length > 1) {
+ Event.stop(arguments[0]);
+ }
+ return false;
+ },
+ onLoading: function() {
+ this.saving = true;
+ this.removeForm();
+ this.leaveHover();
+ this.showSaving();
+ },
+ showSaving: function() {
+ this.oldInnerHTML = this.element.innerHTML;
+ this.element.innerHTML = this.options.savingText;
+ Element.addClassName(this.element, this.options.savingClassName);
+ this.element.style.backgroundColor = this.originalBackground;
+ Element.show(this.element);
+ },
+ removeForm: function() {
+ if(this.form) {
+ if (this.form.parentNode) Element.remove(this.form);
+ this.form = null;
+ }
+ },
+ enterHover: function() {
+ if (this.saving) return;
+ this.element.style.backgroundColor = this.options.highlightcolor;
+ if (this.effect) {
+ this.effect.cancel();
+ }
+ Element.addClassName(this.element, this.options.hoverClassName)
+ },
+ leaveHover: function() {
+ if (this.options.backgroundColor) {
+ this.element.style.backgroundColor = this.oldBackground;
+ }
+ Element.removeClassName(this.element, this.options.hoverClassName)
+ if (this.saving) return;
+ this.effect = new Effect.Highlight(this.element, {
+ startcolor: this.options.highlightcolor,
+ endcolor: this.options.highlightendcolor,
+ restorecolor: this.originalBackground
+ });
+ },
+ leaveEditMode: function() {
+ Element.removeClassName(this.element, this.options.savingClassName);
+ this.removeForm();
+ this.leaveHover();
+ this.element.style.backgroundColor = this.originalBackground;
+ Element.show(this.element);
+ if (this.options.externalControl) {
+ Element.show(this.options.externalControl);
+ }
+ this.editing = false;
+ this.saving = false;
+ this.oldInnerHTML = null;
+ this.onLeaveEditMode();
+ },
+ onComplete: function(transport) {
+ this.leaveEditMode();
+ this.options.onComplete.bind(this)(transport, this.element);
+ },
+ onEnterEditMode: function() {},
+ onLeaveEditMode: function() {},
+ dispose: function() {
+ if (this.oldInnerHTML) {
+ this.element.innerHTML = this.oldInnerHTML;
+ }
+ this.leaveEditMode();
+ Event.stopObserving(this.element, 'click', this.onclickListener);
+ Event.stopObserving(this.element, 'mouseover', this.mouseoverListener);
+ Event.stopObserving(this.element, 'mouseout', this.mouseoutListener);
+ if (this.options.externalControl) {
+ Event.stopObserving(this.options.externalControl, 'click', this.onclickListener);
+ Event.stopObserving(this.options.externalControl, 'mouseover', this.mouseoverListener);
+ Event.stopObserving(this.options.externalControl, 'mouseout', this.mouseoutListener);
+ }
+ }
+};
+
+Ajax.InPlaceCollectionEditor = Class.create();
+Object.extend(Ajax.InPlaceCollectionEditor.prototype, Ajax.InPlaceEditor.prototype);
+Object.extend(Ajax.InPlaceCollectionEditor.prototype, {
+ createEditField: function() {
+ if (!this.cached_selectTag) {
+ var selectTag = document.createElement("select");
+ var collection = this.options.collection || [];
+ var optionTag;
+ collection.each(function(e,i) {
+ optionTag = document.createElement("option");
+ optionTag.value = (e instanceof Array) ? e[0] : e;
+ if((typeof this.options.value == 'undefined') &&
+ ((e instanceof Array) ? this.element.innerHTML == e[1] : e == optionTag.value)) optionTag.selected = true;
+ if(this.options.value==optionTag.value) optionTag.selected = true;
+ optionTag.appendChild(document.createTextNode((e instanceof Array) ? e[1] : e));
+ selectTag.appendChild(optionTag);
+ }.bind(this));
+ this.cached_selectTag = selectTag;
+ }
+
+ this.editField = this.cached_selectTag;
+ if(this.options.loadTextURL) this.loadExternalText();
+ this.form.appendChild(this.editField);
+ this.options.callback = function(form, value) {
+ return "value=" + encodeURIComponent(value);
+ }
+ }
+});
+
+// Delayed observer, like Form.Element.Observer,
+// but waits for delay after last key input
+// Ideal for live-search fields
+
+Form.Element.DelayedObserver = Class.create();
+Form.Element.DelayedObserver.prototype = {
+ initialize: function(element, delay, callback) {
+ this.delay = delay || 0.5;
+ this.element = $(element);
+ this.callback = callback;
+ this.timer = null;
+ this.lastValue = $F(this.element);
+ Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));
+ },
+ delayedListener: function(event) {
+ if(this.lastValue == $F(this.element)) return;
+ if(this.timer) clearTimeout(this.timer);
+ this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);
+ this.lastValue = $F(this.element);
+ },
+ onTimerEvent: function() {
+ this.timer = null;
+ this.callback(this.element, $F(this.element));
+ }
+};
diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/dragdrop.js b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/dragdrop.js
new file mode 100644
index 00000000..32c91bc3
--- /dev/null
+++ b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/dragdrop.js
@@ -0,0 +1,944 @@
+// script.aculo.us dragdrop.js v1.7.0, Fri Jan 19 19:16:36 CET 2007
+
+// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+// (c) 2005, 2006 Sammi Williams (http://www.oriontransfer.co.nz, sammi@oriontransfer.co.nz)
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+if(typeof Effect == 'undefined')
+ throw("dragdrop.js requires including script.aculo.us' effects.js library");
+
+var Droppables = {
+ drops: [],
+
+ remove: function(element) {
+ this.drops = this.drops.reject(function(d) { return d.element==$(element) });
+ },
+
+ add: function(element) {
+ element = $(element);
+ var options = Object.extend({
+ greedy: true,
+ hoverclass: null,
+ tree: false
+ }, arguments[1] || {});
+
+ // cache containers
+ if(options.containment) {
+ options._containers = [];
+ var containment = options.containment;
+ if((typeof containment == 'object') &&
+ (containment.constructor == Array)) {
+ containment.each( function(c) { options._containers.push($(c)) });
+ } else {
+ options._containers.push($(containment));
+ }
+ }
+
+ if(options.accept) options.accept = [options.accept].flatten();
+
+ Element.makePositioned(element); // fix IE
+ options.element = element;
+
+ this.drops.push(options);
+ },
+
+ findDeepestChild: function(drops) {
+ deepest = drops[0];
+
+ for (i = 1; i < drops.length; ++i)
+ if (Element.isParent(drops[i].element, deepest.element))
+ deepest = drops[i];
+
+ return deepest;
+ },
+
+ isContained: function(element, drop) {
+ var containmentNode;
+ if(drop.tree) {
+ containmentNode = element.treeNode;
+ } else {
+ containmentNode = element.parentNode;
+ }
+ return drop._containers.detect(function(c) { return containmentNode == c });
+ },
+
+ isAffected: function(point, element, drop) {
+ return (
+ (drop.element!=element) &&
+ ((!drop._containers) ||
+ this.isContained(element, drop)) &&
+ ((!drop.accept) ||
+ (Element.classNames(element).detect(
+ function(v) { return drop.accept.include(v) } ) )) &&
+ Position.within(drop.element, point[0], point[1]) );
+ },
+
+ deactivate: function(drop) {
+ if(drop.hoverclass)
+ Element.removeClassName(drop.element, drop.hoverclass);
+ this.last_active = null;
+ },
+
+ activate: function(drop) {
+ if(drop.hoverclass)
+ Element.addClassName(drop.element, drop.hoverclass);
+ this.last_active = drop;
+ },
+
+ show: function(point, element) {
+ if(!this.drops.length) return;
+ var affected = [];
+
+ if(this.last_active) this.deactivate(this.last_active);
+ this.drops.each( function(drop) {
+ if(Droppables.isAffected(point, element, drop))
+ affected.push(drop);
+ });
+
+ if(affected.length>0) {
+ drop = Droppables.findDeepestChild(affected);
+ Position.within(drop.element, point[0], point[1]);
+ if(drop.onHover)
+ drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element));
+
+ Droppables.activate(drop);
+ }
+ },
+
+ fire: function(event, element) {
+ if(!this.last_active) return;
+ Position.prepare();
+
+ if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active))
+ if (this.last_active.onDrop)
+ this.last_active.onDrop(element, this.last_active.element, event);
+ },
+
+ reset: function() {
+ if(this.last_active)
+ this.deactivate(this.last_active);
+ }
+}
+
+var Draggables = {
+ drags: [],
+ observers: [],
+
+ register: function(draggable) {
+ if(this.drags.length == 0) {
+ this.eventMouseUp = this.endDrag.bindAsEventListener(this);
+ this.eventMouseMove = this.updateDrag.bindAsEventListener(this);
+ this.eventKeypress = this.keyPress.bindAsEventListener(this);
+
+ Event.observe(document, "mouseup", this.eventMouseUp);
+ Event.observe(document, "mousemove", this.eventMouseMove);
+ Event.observe(document, "keypress", this.eventKeypress);
+ }
+ this.drags.push(draggable);
+ },
+
+ unregister: function(draggable) {
+ this.drags = this.drags.reject(function(d) { return d==draggable });
+ if(this.drags.length == 0) {
+ Event.stopObserving(document, "mouseup", this.eventMouseUp);
+ Event.stopObserving(document, "mousemove", this.eventMouseMove);
+ Event.stopObserving(document, "keypress", this.eventKeypress);
+ }
+ },
+
+ activate: function(draggable) {
+ if(draggable.options.delay) {
+ this._timeout = setTimeout(function() {
+ Draggables._timeout = null;
+ window.focus();
+ Draggables.activeDraggable = draggable;
+ }.bind(this), draggable.options.delay);
+ } else {
+ window.focus(); // allows keypress events if window isn't currently focused, fails for Safari
+ this.activeDraggable = draggable;
+ }
+ },
+
+ deactivate: function() {
+ this.activeDraggable = null;
+ },
+
+ updateDrag: function(event) {
+ if(!this.activeDraggable) return;
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
+ // Mozilla-based browsers fire successive mousemove events with
+ // the same coordinates, prevent needless redrawing (moz bug?)
+ if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return;
+ this._lastPointer = pointer;
+
+ this.activeDraggable.updateDrag(event, pointer);
+ },
+
+ endDrag: function(event) {
+ if(this._timeout) {
+ clearTimeout(this._timeout);
+ this._timeout = null;
+ }
+ if(!this.activeDraggable) return;
+ this._lastPointer = null;
+ this.activeDraggable.endDrag(event);
+ this.activeDraggable = null;
+ },
+
+ keyPress: function(event) {
+ if(this.activeDraggable)
+ this.activeDraggable.keyPress(event);
+ },
+
+ addObserver: function(observer) {
+ this.observers.push(observer);
+ this._cacheObserverCallbacks();
+ },
+
+ removeObserver: function(element) { // element instead of observer fixes mem leaks
+ this.observers = this.observers.reject( function(o) { return o.element==element });
+ this._cacheObserverCallbacks();
+ },
+
+ notify: function(eventName, draggable, event) { // 'onStart', 'onEnd', 'onDrag'
+ if(this[eventName+'Count'] > 0)
+ this.observers.each( function(o) {
+ if(o[eventName]) o[eventName](eventName, draggable, event);
+ });
+ if(draggable.options[eventName]) draggable.options[eventName](draggable, event);
+ },
+
+ _cacheObserverCallbacks: function() {
+ ['onStart','onEnd','onDrag'].each( function(eventName) {
+ Draggables[eventName+'Count'] = Draggables.observers.select(
+ function(o) { return o[eventName]; }
+ ).length;
+ });
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+var Draggable = Class.create();
+Draggable._dragging = {};
+
+Draggable.prototype = {
+ initialize: function(element) {
+ var defaults = {
+ handle: false,
+ reverteffect: function(element, top_offset, left_offset) {
+ var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;
+ new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur,
+ queue: {scope:'_draggable', position:'end'}
+ });
+ },
+ endeffect: function(element) {
+ var toOpacity = typeof element._opacity == 'number' ? element._opacity : 1.0;
+ new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity,
+ queue: {scope:'_draggable', position:'end'},
+ afterFinish: function(){
+ Draggable._dragging[element] = false
+ }
+ });
+ },
+ zindex: 1000,
+ revert: false,
+ scroll: false,
+ scrollSensitivity: 20,
+ scrollSpeed: 15,
+ snap: false, // false, or xy or [x,y] or function(x,y){ return [x,y] }
+ delay: 0
+ };
+
+ if(!arguments[1] || typeof arguments[1].endeffect == 'undefined')
+ Object.extend(defaults, {
+ starteffect: function(element) {
+ element._opacity = Element.getOpacity(element);
+ Draggable._dragging[element] = true;
+ new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7});
+ }
+ });
+
+ var options = Object.extend(defaults, arguments[1] || {});
+
+ this.element = $(element);
+
+ if(options.handle && (typeof options.handle == 'string'))
+ this.handle = this.element.down('.'+options.handle, 0);
+
+ if(!this.handle) this.handle = $(options.handle);
+ if(!this.handle) this.handle = this.element;
+
+ if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) {
+ options.scroll = $(options.scroll);
+ this._isScrollChild = Element.childOf(this.element, options.scroll);
+ }
+
+ Element.makePositioned(this.element); // fix IE
+
+ this.delta = this.currentDelta();
+ this.options = options;
+ this.dragging = false;
+
+ this.eventMouseDown = this.initDrag.bindAsEventListener(this);
+ Event.observe(this.handle, "mousedown", this.eventMouseDown);
+
+ Draggables.register(this);
+ },
+
+ destroy: function() {
+ Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
+ Draggables.unregister(this);
+ },
+
+ currentDelta: function() {
+ return([
+ parseInt(Element.getStyle(this.element,'left') || '0'),
+ parseInt(Element.getStyle(this.element,'top') || '0')]);
+ },
+
+ initDrag: function(event) {
+ if(typeof Draggable._dragging[this.element] != 'undefined' &&
+ Draggable._dragging[this.element]) return;
+ if(Event.isLeftClick(event)) {
+ // abort on form elements, fixes a Firefox issue
+ var src = Event.element(event);
+ if((tag_name = src.tagName.toUpperCase()) && (
+ tag_name=='INPUT' ||
+ tag_name=='SELECT' ||
+ tag_name=='OPTION' ||
+ tag_name=='BUTTON' ||
+ tag_name=='TEXTAREA')) return;
+
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
+ var pos = Position.cumulativeOffset(this.element);
+ this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) });
+
+ Draggables.activate(this);
+ Event.stop(event);
+ }
+ },
+
+ startDrag: function(event) {
+ this.dragging = true;
+
+ if(this.options.zindex) {
+ this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0);
+ this.element.style.zIndex = this.options.zindex;
+ }
+
+ if(this.options.ghosting) {
+ this._clone = this.element.cloneNode(true);
+ Position.absolutize(this.element);
+ this.element.parentNode.insertBefore(this._clone, this.element);
+ }
+
+ if(this.options.scroll) {
+ if (this.options.scroll == window) {
+ var where = this._getWindowScroll(this.options.scroll);
+ this.originalScrollLeft = where.left;
+ this.originalScrollTop = where.top;
+ } else {
+ this.originalScrollLeft = this.options.scroll.scrollLeft;
+ this.originalScrollTop = this.options.scroll.scrollTop;
+ }
+ }
+
+ Draggables.notify('onStart', this, event);
+
+ if(this.options.starteffect) this.options.starteffect(this.element);
+ },
+
+ updateDrag: function(event, pointer) {
+ if(!this.dragging) this.startDrag(event);
+ Position.prepare();
+ Droppables.show(pointer, this.element);
+ Draggables.notify('onDrag', this, event);
+
+ this.draw(pointer);
+ if(this.options.change) this.options.change(this);
+
+ if(this.options.scroll) {
+ this.stopScrolling();
+
+ var p;
+ if (this.options.scroll == window) {
+ with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; }
+ } else {
+ p = Position.page(this.options.scroll);
+ p[0] += this.options.scroll.scrollLeft + Position.deltaX;
+ p[1] += this.options.scroll.scrollTop + Position.deltaY;
+ p.push(p[0]+this.options.scroll.offsetWidth);
+ p.push(p[1]+this.options.scroll.offsetHeight);
+ }
+ var speed = [0,0];
+ if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity);
+ if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity);
+ if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity);
+ if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity);
+ this.startScrolling(speed);
+ }
+
+ // fix AppleWebKit rendering
+ if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);
+
+ Event.stop(event);
+ },
+
+ finishDrag: function(event, success) {
+ this.dragging = false;
+
+ if(this.options.ghosting) {
+ Position.relativize(this.element);
+ Element.remove(this._clone);
+ this._clone = null;
+ }
+
+ if(success) Droppables.fire(event, this.element);
+ Draggables.notify('onEnd', this, event);
+
+ var revert = this.options.revert;
+ if(revert && typeof revert == 'function') revert = revert(this.element);
+
+ var d = this.currentDelta();
+ if(revert && this.options.reverteffect) {
+ this.options.reverteffect(this.element,
+ d[1]-this.delta[1], d[0]-this.delta[0]);
+ } else {
+ this.delta = d;
+ }
+
+ if(this.options.zindex)
+ this.element.style.zIndex = this.originalZ;
+
+ if(this.options.endeffect)
+ this.options.endeffect(this.element);
+
+ Draggables.deactivate(this);
+ Droppables.reset();
+ },
+
+ keyPress: function(event) {
+ if(event.keyCode!=Event.KEY_ESC) return;
+ this.finishDrag(event, false);
+ Event.stop(event);
+ },
+
+ endDrag: function(event) {
+ if(!this.dragging) return;
+ this.stopScrolling();
+ this.finishDrag(event, true);
+ Event.stop(event);
+ },
+
+ draw: function(point) {
+ var pos = Position.cumulativeOffset(this.element);
+ if(this.options.ghosting) {
+ var r = Position.realOffset(this.element);
+ pos[0] += r[0] - Position.deltaX; pos[1] += r[1] - Position.deltaY;
+ }
+
+ var d = this.currentDelta();
+ pos[0] -= d[0]; pos[1] -= d[1];
+
+ if(this.options.scroll && (this.options.scroll != window && this._isScrollChild)) {
+ pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft;
+ pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop;
+ }
+
+ var p = [0,1].map(function(i){
+ return (point[i]-pos[i]-this.offset[i])
+ }.bind(this));
+
+ if(this.options.snap) {
+ if(typeof this.options.snap == 'function') {
+ p = this.options.snap(p[0],p[1],this);
+ } else {
+ if(this.options.snap instanceof Array) {
+ p = p.map( function(v, i) {
+ return Math.round(v/this.options.snap[i])*this.options.snap[i] }.bind(this))
+ } else {
+ p = p.map( function(v) {
+ return Math.round(v/this.options.snap)*this.options.snap }.bind(this))
+ }
+ }}
+
+ var style = this.element.style;
+ if((!this.options.constraint) || (this.options.constraint=='horizontal'))
+ style.left = p[0] + "px";
+ if((!this.options.constraint) || (this.options.constraint=='vertical'))
+ style.top = p[1] + "px";
+
+ if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering
+ },
+
+ stopScrolling: function() {
+ if(this.scrollInterval) {
+ clearInterval(this.scrollInterval);
+ this.scrollInterval = null;
+ Draggables._lastScrollPointer = null;
+ }
+ },
+
+ startScrolling: function(speed) {
+ if(!(speed[0] || speed[1])) return;
+ this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed];
+ this.lastScrolled = new Date();
+ this.scrollInterval = setInterval(this.scroll.bind(this), 10);
+ },
+
+ scroll: function() {
+ var current = new Date();
+ var delta = current - this.lastScrolled;
+ this.lastScrolled = current;
+ if(this.options.scroll == window) {
+ with (this._getWindowScroll(this.options.scroll)) {
+ if (this.scrollSpeed[0] || this.scrollSpeed[1]) {
+ var d = delta / 1000;
+ this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] );
+ }
+ }
+ } else {
+ this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000;
+ this.options.scroll.scrollTop += this.scrollSpeed[1] * delta / 1000;
+ }
+
+ Position.prepare();
+ Droppables.show(Draggables._lastPointer, this.element);
+ Draggables.notify('onDrag', this);
+ if (this._isScrollChild) {
+ Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer);
+ Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000;
+ Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000;
+ if (Draggables._lastScrollPointer[0] < 0)
+ Draggables._lastScrollPointer[0] = 0;
+ if (Draggables._lastScrollPointer[1] < 0)
+ Draggables._lastScrollPointer[1] = 0;
+ this.draw(Draggables._lastScrollPointer);
+ }
+
+ if(this.options.change) this.options.change(this);
+ },
+
+ _getWindowScroll: function(w) {
+ var T, L, W, H;
+ with (w.document) {
+ if (w.document.documentElement && documentElement.scrollTop) {
+ T = documentElement.scrollTop;
+ L = documentElement.scrollLeft;
+ } else if (w.document.body) {
+ T = body.scrollTop;
+ L = body.scrollLeft;
+ }
+ if (w.innerWidth) {
+ W = w.innerWidth;
+ H = w.innerHeight;
+ } else if (w.document.documentElement && documentElement.clientWidth) {
+ W = documentElement.clientWidth;
+ H = documentElement.clientHeight;
+ } else {
+ W = body.offsetWidth;
+ H = body.offsetHeight
+ }
+ }
+ return { top: T, left: L, width: W, height: H };
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+var SortableObserver = Class.create();
+SortableObserver.prototype = {
+ initialize: function(element, observer) {
+ this.element = $(element);
+ this.observer = observer;
+ this.lastValue = Sortable.serialize(this.element);
+ },
+
+ onStart: function() {
+ this.lastValue = Sortable.serialize(this.element);
+ },
+
+ onEnd: function() {
+ Sortable.unmark();
+ if(this.lastValue != Sortable.serialize(this.element))
+ this.observer(this.element)
+ }
+}
+
+var Sortable = {
+ SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,
+
+ sortables: {},
+
+ _findRootElement: function(element) {
+ while (element.tagName.toUpperCase() != "BODY") {
+ if(element.id && Sortable.sortables[element.id]) return element;
+ element = element.parentNode;
+ }
+ },
+
+ options: function(element) {
+ element = Sortable._findRootElement($(element));
+ if(!element) return;
+ return Sortable.sortables[element.id];
+ },
+
+ destroy: function(element){
+ var s = Sortable.options(element);
+
+ if(s) {
+ Draggables.removeObserver(s.element);
+ s.droppables.each(function(d){ Droppables.remove(d) });
+ s.draggables.invoke('destroy');
+
+ delete Sortable.sortables[s.element.id];
+ }
+ },
+
+ create: function(element) {
+ element = $(element);
+ var options = Object.extend({
+ element: element,
+ tag: 'li', // assumes li children, override with tag: 'tagname'
+ dropOnEmpty: false,
+ tree: false,
+ treeTag: 'ul',
+ overlap: 'vertical', // one of 'vertical', 'horizontal'
+ constraint: 'vertical', // one of 'vertical', 'horizontal', false
+ containment: element, // also takes array of elements (or id's); or false
+ handle: false, // or a CSS class
+ only: false,
+ delay: 0,
+ hoverclass: null,
+ ghosting: false,
+ scroll: false,
+ scrollSensitivity: 20,
+ scrollSpeed: 15,
+ format: this.SERIALIZE_RULE,
+ onChange: Prototype.emptyFunction,
+ onUpdate: Prototype.emptyFunction
+ }, arguments[1] || {});
+
+ // clear any old sortable with same element
+ this.destroy(element);
+
+ // build options for the draggables
+ var options_for_draggable = {
+ revert: true,
+ scroll: options.scroll,
+ scrollSpeed: options.scrollSpeed,
+ scrollSensitivity: options.scrollSensitivity,
+ delay: options.delay,
+ ghosting: options.ghosting,
+ constraint: options.constraint,
+ handle: options.handle };
+
+ if(options.starteffect)
+ options_for_draggable.starteffect = options.starteffect;
+
+ if(options.reverteffect)
+ options_for_draggable.reverteffect = options.reverteffect;
+ else
+ if(options.ghosting) options_for_draggable.reverteffect = function(element) {
+ element.style.top = 0;
+ element.style.left = 0;
+ };
+
+ if(options.endeffect)
+ options_for_draggable.endeffect = options.endeffect;
+
+ if(options.zindex)
+ options_for_draggable.zindex = options.zindex;
+
+ // build options for the droppables
+ var options_for_droppable = {
+ overlap: options.overlap,
+ containment: options.containment,
+ tree: options.tree,
+ hoverclass: options.hoverclass,
+ onHover: Sortable.onHover
+ }
+
+ var options_for_tree = {
+ onHover: Sortable.onEmptyHover,
+ overlap: options.overlap,
+ containment: options.containment,
+ hoverclass: options.hoverclass
+ }
+
+ // fix for gecko engine
+ Element.cleanWhitespace(element);
+
+ options.draggables = [];
+ options.droppables = [];
+
+ // drop on empty handling
+ if(options.dropOnEmpty || options.tree) {
+ Droppables.add(element, options_for_tree);
+ options.droppables.push(element);
+ }
+
+ (this.findElements(element, options) || []).each( function(e) {
+ // handles are per-draggable
+ var handle = options.handle ?
+ $(e).down('.'+options.handle,0) : e;
+ options.draggables.push(
+ new Draggable(e, Object.extend(options_for_draggable, { handle: handle })));
+ Droppables.add(e, options_for_droppable);
+ if(options.tree) e.treeNode = element;
+ options.droppables.push(e);
+ });
+
+ if(options.tree) {
+ (Sortable.findTreeElements(element, options) || []).each( function(e) {
+ Droppables.add(e, options_for_tree);
+ e.treeNode = element;
+ options.droppables.push(e);
+ });
+ }
+
+ // keep reference
+ this.sortables[element.id] = options;
+
+ // for onupdate
+ Draggables.addObserver(new SortableObserver(element, options.onUpdate));
+
+ },
+
+ // return all suitable-for-sortable elements in a guaranteed order
+ findElements: function(element, options) {
+ return Element.findChildren(
+ element, options.only, options.tree ? true : false, options.tag);
+ },
+
+ findTreeElements: function(element, options) {
+ return Element.findChildren(
+ element, options.only, options.tree ? true : false, options.treeTag);
+ },
+
+ onHover: function(element, dropon, overlap) {
+ if(Element.isParent(dropon, element)) return;
+
+ if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) {
+ return;
+ } else if(overlap>0.5) {
+ Sortable.mark(dropon, 'before');
+ if(dropon.previousSibling != element) {
+ var oldParentNode = element.parentNode;
+ element.style.visibility = "hidden"; // fix gecko rendering
+ dropon.parentNode.insertBefore(element, dropon);
+ if(dropon.parentNode!=oldParentNode)
+ Sortable.options(oldParentNode).onChange(element);
+ Sortable.options(dropon.parentNode).onChange(element);
+ }
+ } else {
+ Sortable.mark(dropon, 'after');
+ var nextElement = dropon.nextSibling || null;
+ if(nextElement != element) {
+ var oldParentNode = element.parentNode;
+ element.style.visibility = "hidden"; // fix gecko rendering
+ dropon.parentNode.insertBefore(element, nextElement);
+ if(dropon.parentNode!=oldParentNode)
+ Sortable.options(oldParentNode).onChange(element);
+ Sortable.options(dropon.parentNode).onChange(element);
+ }
+ }
+ },
+
+ onEmptyHover: function(element, dropon, overlap) {
+ var oldParentNode = element.parentNode;
+ var droponOptions = Sortable.options(dropon);
+
+ if(!Element.isParent(dropon, element)) {
+ var index;
+
+ var children = Sortable.findElements(dropon, {tag: droponOptions.tag, only: droponOptions.only});
+ var child = null;
+
+ if(children) {
+ var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap);
+
+ for (index = 0; index < children.length; index += 1) {
+ if (offset - Element.offsetSize (children[index], droponOptions.overlap) >= 0) {
+ offset -= Element.offsetSize (children[index], droponOptions.overlap);
+ } else if (offset - (Element.offsetSize (children[index], droponOptions.overlap) / 2) >= 0) {
+ child = index + 1 < children.length ? children[index + 1] : null;
+ break;
+ } else {
+ child = children[index];
+ break;
+ }
+ }
+ }
+
+ dropon.insertBefore(element, child);
+
+ Sortable.options(oldParentNode).onChange(element);
+ droponOptions.onChange(element);
+ }
+ },
+
+ unmark: function() {
+ if(Sortable._marker) Sortable._marker.hide();
+ },
+
+ mark: function(dropon, position) {
+ // mark on ghosting only
+ var sortable = Sortable.options(dropon.parentNode);
+ if(sortable && !sortable.ghosting) return;
+
+ if(!Sortable._marker) {
+ Sortable._marker =
+ ($('dropmarker') || Element.extend(document.createElement('DIV'))).
+ hide().addClassName('dropmarker').setStyle({position:'absolute'});
+ document.getElementsByTagName("body").item(0).appendChild(Sortable._marker);
+ }
+ var offsets = Position.cumulativeOffset(dropon);
+ Sortable._marker.setStyle({left: offsets[0]+'px', top: offsets[1] + 'px'});
+
+ if(position=='after')
+ if(sortable.overlap == 'horizontal')
+ Sortable._marker.setStyle({left: (offsets[0]+dropon.clientWidth) + 'px'});
+ else
+ Sortable._marker.setStyle({top: (offsets[1]+dropon.clientHeight) + 'px'});
+
+ Sortable._marker.show();
+ },
+
+ _tree: function(element, options, parent) {
+ var children = Sortable.findElements(element, options) || [];
+
+ for (var i = 0; i < children.length; ++i) {
+ var match = children[i].id.match(options.format);
+
+ if (!match) continue;
+
+ var child = {
+ id: encodeURIComponent(match ? match[1] : null),
+ element: element,
+ parent: parent,
+ children: [],
+ position: parent.children.length,
+ container: $(children[i]).down(options.treeTag)
+ }
+
+ /* Get the element containing the children and recurse over it */
+ if (child.container)
+ this._tree(child.container, options, child)
+
+ parent.children.push (child);
+ }
+
+ return parent;
+ },
+
+ tree: function(element) {
+ element = $(element);
+ var sortableOptions = this.options(element);
+ var options = Object.extend({
+ tag: sortableOptions.tag,
+ treeTag: sortableOptions.treeTag,
+ only: sortableOptions.only,
+ name: element.id,
+ format: sortableOptions.format
+ }, arguments[1] || {});
+
+ var root = {
+ id: null,
+ parent: null,
+ children: [],
+ container: element,
+ position: 0
+ }
+
+ return Sortable._tree(element, options, root);
+ },
+
+ /* Construct a [i] index for a particular node */
+ _constructIndex: function(node) {
+ var index = '';
+ do {
+ if (node.id) index = '[' + node.position + ']' + index;
+ } while ((node = node.parent) != null);
+ return index;
+ },
+
+ sequence: function(element) {
+ element = $(element);
+ var options = Object.extend(this.options(element), arguments[1] || {});
+
+ return $(this.findElements(element, options) || []).map( function(item) {
+ return item.id.match(options.format) ? item.id.match(options.format)[1] : '';
+ });
+ },
+
+ setSequence: function(element, new_sequence) {
+ element = $(element);
+ var options = Object.extend(this.options(element), arguments[2] || {});
+
+ var nodeMap = {};
+ this.findElements(element, options).each( function(n) {
+ if (n.id.match(options.format))
+ nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode];
+ n.parentNode.removeChild(n);
+ });
+
+ new_sequence.each(function(ident) {
+ var n = nodeMap[ident];
+ if (n) {
+ n[1].appendChild(n[0]);
+ delete nodeMap[ident];
+ }
+ });
+ },
+
+ serialize: function(element) {
+ element = $(element);
+ var options = Object.extend(Sortable.options(element), arguments[1] || {});
+ var name = encodeURIComponent(
+ (arguments[1] && arguments[1].name) ? arguments[1].name : element.id);
+
+ if (options.tree) {
+ return Sortable.tree(element, arguments[1]).children.map( function (item) {
+ return [name + Sortable._constructIndex(item) + "[id]=" +
+ encodeURIComponent(item.id)].concat(item.children.map(arguments.callee));
+ }).flatten().join('&');
+ } else {
+ return Sortable.sequence(element, arguments[1]).map( function(item) {
+ return name + "[]=" + encodeURIComponent(item);
+ }).join('&');
+ }
+ }
+}
+
+// Returns true if child is contained within element
+Element.isParent = function(child, element) {
+ if (!child.parentNode || child == element) return false;
+ if (child.parentNode == element) return true;
+ return Element.isParent(child.parentNode, element);
+}
+
+Element.findChildren = function(element, only, recursive, tagName) {
+ if(!element.hasChildNodes()) return null;
+ tagName = tagName.toUpperCase();
+ if(only) only = [only].flatten();
+ var elements = [];
+ $A(element.childNodes).each( function(e) {
+ if(e.tagName && e.tagName.toUpperCase()==tagName &&
+ (!only || (Element.classNames(e).detect(function(v) { return only.include(v) }))))
+ elements.push(e);
+ if(recursive) {
+ var grandchildren = Element.findChildren(e, only, recursive, tagName);
+ if(grandchildren) elements.push(grandchildren);
+ }
+ });
+
+ return (elements.length>0 ? elements.flatten() : []);
+}
+
+Element.offsetSize = function (element, type) {
+ return element['offset' + ((type=='vertical' || type=='height') ? 'Height' : 'Width')];
+}
diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/effects.js b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/effects.js
new file mode 100644
index 00000000..06f59b47
--- /dev/null
+++ b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/effects.js
@@ -0,0 +1,1090 @@
+// script.aculo.us effects.js v1.7.0, Fri Jan 19 19:16:36 CET 2007
+
+// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+// Contributors:
+// Justin Palmer (http://encytemedia.com/)
+// Mark Pilgrim (http://diveintomark.org/)
+// Martin Bialasinki
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+// converts rgb() and #xxx to #xxxxxx format,
+// returns self (or first argument) if not convertable
+String.prototype.parseColor = function() {
+ var color = '#';
+ if(this.slice(0,4) == 'rgb(') {
+ var cols = this.slice(4,this.length-1).split(',');
+ var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);
+ } else {
+ if(this.slice(0,1) == '#') {
+ if(this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();
+ if(this.length==7) color = this.toLowerCase();
+ }
+ }
+ return(color.length==7 ? color : (arguments[0] || this));
+}
+
+/*--------------------------------------------------------------------------*/
+
+Element.collectTextNodes = function(element) {
+ return $A($(element).childNodes).collect( function(node) {
+ return (node.nodeType==3 ? node.nodeValue :
+ (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
+ }).flatten().join('');
+}
+
+Element.collectTextNodesIgnoreClass = function(element, className) {
+ return $A($(element).childNodes).collect( function(node) {
+ return (node.nodeType==3 ? node.nodeValue :
+ ((node.hasChildNodes() && !Element.hasClassName(node,className)) ?
+ Element.collectTextNodesIgnoreClass(node, className) : ''));
+ }).flatten().join('');
+}
+
+Element.setContentZoom = function(element, percent) {
+ element = $(element);
+ element.setStyle({fontSize: (percent/100) + 'em'});
+ if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);
+ return element;
+}
+
+Element.getOpacity = function(element){
+ return $(element).getStyle('opacity');
+}
+
+Element.setOpacity = function(element, value){
+ return $(element).setStyle({opacity:value});
+}
+
+Element.getInlineOpacity = function(element){
+ return $(element).style.opacity || '';
+}
+
+Element.forceRerendering = function(element) {
+ try {
+ element = $(element);
+ var n = document.createTextNode(' ');
+ element.appendChild(n);
+ element.removeChild(n);
+ } catch(e) { }
+};
+
+/*--------------------------------------------------------------------------*/
+
+Array.prototype.call = function() {
+ var args = arguments;
+ this.each(function(f){ f.apply(this, args) });
+}
+
+/*--------------------------------------------------------------------------*/
+
+var Effect = {
+ _elementDoesNotExistError: {
+ name: 'ElementDoesNotExistError',
+ message: 'The specified DOM element does not exist, but is required for this effect to operate'
+ },
+ tagifyText: function(element) {
+ if(typeof Builder == 'undefined')
+ throw("Effect.tagifyText requires including script.aculo.us' builder.js library");
+
+ var tagifyStyle = 'position:relative';
+ if(/MSIE/.test(navigator.userAgent) && !window.opera) tagifyStyle += ';zoom:1';
+
+ element = $(element);
+ $A(element.childNodes).each( function(child) {
+ if(child.nodeType==3) {
+ child.nodeValue.toArray().each( function(character) {
+ element.insertBefore(
+ Builder.node('span',{style: tagifyStyle},
+ character == ' ' ? String.fromCharCode(160) : character),
+ child);
+ });
+ Element.remove(child);
+ }
+ });
+ },
+ multiple: function(element, effect) {
+ var elements;
+ if(((typeof element == 'object') ||
+ (typeof element == 'function')) &&
+ (element.length))
+ elements = element;
+ else
+ elements = $(element).childNodes;
+
+ var options = Object.extend({
+ speed: 0.1,
+ delay: 0.0
+ }, arguments[2] || {});
+ var masterDelay = options.delay;
+
+ $A(elements).each( function(element, index) {
+ new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
+ });
+ },
+ PAIRS: {
+ 'slide': ['SlideDown','SlideUp'],
+ 'blind': ['BlindDown','BlindUp'],
+ 'appear': ['Appear','Fade']
+ },
+ toggle: function(element, effect) {
+ element = $(element);
+ effect = (effect || 'appear').toLowerCase();
+ var options = Object.extend({
+ queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
+ }, arguments[2] || {});
+ Effect[element.visible() ?
+ Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);
+ }
+};
+
+var Effect2 = Effect; // deprecated
+
+/* ------------- transitions ------------- */
+
+Effect.Transitions = {
+ linear: Prototype.K,
+ sinoidal: function(pos) {
+ return (-Math.cos(pos*Math.PI)/2) + 0.5;
+ },
+ reverse: function(pos) {
+ return 1-pos;
+ },
+ flicker: function(pos) {
+ return ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;
+ },
+ wobble: function(pos) {
+ return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;
+ },
+ pulse: function(pos, pulses) {
+ pulses = pulses || 5;
+ return (
+ Math.round((pos % (1/pulses)) * pulses) == 0 ?
+ ((pos * pulses * 2) - Math.floor(pos * pulses * 2)) :
+ 1 - ((pos * pulses * 2) - Math.floor(pos * pulses * 2))
+ );
+ },
+ none: function(pos) {
+ return 0;
+ },
+ full: function(pos) {
+ return 1;
+ }
+};
+
+/* ------------- core effects ------------- */
+
+Effect.ScopedQueue = Class.create();
+Object.extend(Object.extend(Effect.ScopedQueue.prototype, Enumerable), {
+ initialize: function() {
+ this.effects = [];
+ this.interval = null;
+ },
+ _each: function(iterator) {
+ this.effects._each(iterator);
+ },
+ add: function(effect) {
+ var timestamp = new Date().getTime();
+
+ var position = (typeof effect.options.queue == 'string') ?
+ effect.options.queue : effect.options.queue.position;
+
+ switch(position) {
+ case 'front':
+ // move unstarted effects after this effect
+ this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {
+ e.startOn += effect.finishOn;
+ e.finishOn += effect.finishOn;
+ });
+ break;
+ case 'with-last':
+ timestamp = this.effects.pluck('startOn').max() || timestamp;
+ break;
+ case 'end':
+ // start effect after last queued effect has finished
+ timestamp = this.effects.pluck('finishOn').max() || timestamp;
+ break;
+ }
+
+ effect.startOn += timestamp;
+ effect.finishOn += timestamp;
+
+ if(!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
+ this.effects.push(effect);
+
+ if(!this.interval)
+ this.interval = setInterval(this.loop.bind(this), 15);
+ },
+ remove: function(effect) {
+ this.effects = this.effects.reject(function(e) { return e==effect });
+ if(this.effects.length == 0) {
+ clearInterval(this.interval);
+ this.interval = null;
+ }
+ },
+ loop: function() {
+ var timePos = new Date().getTime();
+ for(var i=0, len=this.effects.length;i' + html.stripScripts() + '
';
+ depth = 2;
+ break;
+ case 'TR':
+ div.innerHTML = '
';
+ depth = 3;
+ break;
+ case 'TD':
+ div.innerHTML = '' + html.stripScripts() + '
';
+ depth = 4;
+ }
+ $A(element.childNodes).each(function(node){
+ element.removeChild(node)
+ });
+ depth.times(function(){ div = div.firstChild });
+
+ $A(div.childNodes).each(
+ function(node){ element.appendChild(node) });
+ } else {
+ element.innerHTML = html.stripScripts();
+ }
+ setTimeout(function() {html.evalScripts()}, 10);
+ return element;
+ }
+};
+
+Object.extend(Element, Element.Methods);
+
+var _nativeExtensions = false;
+
+if(/Konqueror|Safari|KHTML/.test(navigator.userAgent))
+ ['', 'Form', 'Input', 'TextArea', 'Select'].each(function(tag) {
+ var className = 'HTML' + tag + 'Element';
+ if(window[className]) return;
+ var klass = window[className] = {};
+ klass.prototype = document.createElement(tag ? tag.toLowerCase() : 'div').__proto__;
+ });
+
+Element.addMethods = function(methods) {
+ Object.extend(Element.Methods, methods || {});
+
+ function copy(methods, destination, onlyIfAbsent) {
+ onlyIfAbsent = onlyIfAbsent || false;
+ var cache = Element.extend.cache;
+ for (var property in methods) {
+ var value = methods[property];
+ if (!onlyIfAbsent || !(property in destination))
+ destination[property] = cache.findOrStore(value);
+ }
+ }
+
+ if (typeof HTMLElement != 'undefined') {
+ copy(Element.Methods, HTMLElement.prototype);
+ copy(Element.Methods.Simulated, HTMLElement.prototype, true);
+ copy(Form.Methods, HTMLFormElement.prototype);
+ [HTMLInputElement, HTMLTextAreaElement, HTMLSelectElement].each(function(klass) {
+ copy(Form.Element.Methods, klass.prototype);
+ });
+ _nativeExtensions = true;
+ }
+}
+
+var Toggle = new Object();
+Toggle.display = Element.toggle;
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.Insertion = function(adjacency) {
+ this.adjacency = adjacency;
+}
+
+Abstract.Insertion.prototype = {
+ initialize: function(element, content) {
+ this.element = $(element);
+ this.content = content.stripScripts();
+
+ if (this.adjacency && this.element.insertAdjacentHTML) {
+ try {
+ this.element.insertAdjacentHTML(this.adjacency, this.content);
+ } catch (e) {
+ var tagName = this.element.tagName.toUpperCase();
+ if (['TBODY', 'TR'].include(tagName)) {
+ this.insertContent(this.contentFromAnonymousTable());
+ } else {
+ throw e;
+ }
+ }
+ } else {
+ this.range = this.element.ownerDocument.createRange();
+ if (this.initializeRange) this.initializeRange();
+ this.insertContent([this.range.createContextualFragment(this.content)]);
+ }
+
+ setTimeout(function() {content.evalScripts()}, 10);
+ },
+
+ contentFromAnonymousTable: function() {
+ var div = document.createElement('div');
+ div.innerHTML = '' + html.stripScripts() + ' ' + this.content + '
';
+ return $A(div.childNodes[0].childNodes[0].childNodes);
+ }
+}
+
+var Insertion = new Object();
+
+Insertion.Before = Class.create();
+Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), {
+ initializeRange: function() {
+ this.range.setStartBefore(this.element);
+ },
+
+ insertContent: function(fragments) {
+ fragments.each((function(fragment) {
+ this.element.parentNode.insertBefore(fragment, this.element);
+ }).bind(this));
+ }
+});
+
+Insertion.Top = Class.create();
+Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), {
+ initializeRange: function() {
+ this.range.selectNodeContents(this.element);
+ this.range.collapse(true);
+ },
+
+ insertContent: function(fragments) {
+ fragments.reverse(false).each((function(fragment) {
+ this.element.insertBefore(fragment, this.element.firstChild);
+ }).bind(this));
+ }
+});
+
+Insertion.Bottom = Class.create();
+Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), {
+ initializeRange: function() {
+ this.range.selectNodeContents(this.element);
+ this.range.collapse(this.element);
+ },
+
+ insertContent: function(fragments) {
+ fragments.each((function(fragment) {
+ this.element.appendChild(fragment);
+ }).bind(this));
+ }
+});
+
+Insertion.After = Class.create();
+Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), {
+ initializeRange: function() {
+ this.range.setStartAfter(this.element);
+ },
+
+ insertContent: function(fragments) {
+ fragments.each((function(fragment) {
+ this.element.parentNode.insertBefore(fragment,
+ this.element.nextSibling);
+ }).bind(this));
+ }
+});
+
+/*--------------------------------------------------------------------------*/
+
+Element.ClassNames = Class.create();
+Element.ClassNames.prototype = {
+ initialize: function(element) {
+ this.element = $(element);
+ },
+
+ _each: function(iterator) {
+ this.element.className.split(/\s+/).select(function(name) {
+ return name.length > 0;
+ })._each(iterator);
+ },
+
+ set: function(className) {
+ this.element.className = className;
+ },
+
+ add: function(classNameToAdd) {
+ if (this.include(classNameToAdd)) return;
+ this.set($A(this).concat(classNameToAdd).join(' '));
+ },
+
+ remove: function(classNameToRemove) {
+ if (!this.include(classNameToRemove)) return;
+ this.set($A(this).without(classNameToRemove).join(' '));
+ },
+
+ toString: function() {
+ return $A(this).join(' ');
+ }
+};
+
+Object.extend(Element.ClassNames.prototype, Enumerable);
+var Selector = Class.create();
+Selector.prototype = {
+ initialize: function(expression) {
+ this.params = {classNames: []};
+ this.expression = expression.toString().strip();
+ this.parseExpression();
+ this.compileMatcher();
+ },
+
+ parseExpression: function() {
+ function abort(message) { throw 'Parse error in selector: ' + message; }
+
+ if (this.expression == '') abort('empty expression');
+
+ var params = this.params, expr = this.expression, match, modifier, clause, rest;
+ while (match = expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=)(?:"([^"]*)"|([^\]\s]*)))?\]$/i)) {
+ params.attributes = params.attributes || [];
+ params.attributes.push({name: match[2], operator: match[3], value: match[4] || match[5] || ''});
+ expr = match[1];
+ }
+
+ if (expr == '*') return this.params.wildcard = true;
+
+ while (match = expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)) {
+ modifier = match[1], clause = match[2], rest = match[3];
+ switch (modifier) {
+ case '#': params.id = clause; break;
+ case '.': params.classNames.push(clause); break;
+ case '':
+ case undefined: params.tagName = clause.toUpperCase(); break;
+ default: abort(expr.inspect());
+ }
+ expr = rest;
+ }
+
+ if (expr.length > 0) abort(expr.inspect());
+ },
+
+ buildMatchExpression: function() {
+ var params = this.params, conditions = [], clause;
+
+ if (params.wildcard)
+ conditions.push('true');
+ if (clause = params.id)
+ conditions.push('element.readAttribute("id") == ' + clause.inspect());
+ if (clause = params.tagName)
+ conditions.push('element.tagName.toUpperCase() == ' + clause.inspect());
+ if ((clause = params.classNames).length > 0)
+ for (var i = 0, length = clause.length; i < length; i++)
+ conditions.push('element.hasClassName(' + clause[i].inspect() + ')');
+ if (clause = params.attributes) {
+ clause.each(function(attribute) {
+ var value = 'element.readAttribute(' + attribute.name.inspect() + ')';
+ var splitValueBy = function(delimiter) {
+ return value + ' && ' + value + '.split(' + delimiter.inspect() + ')';
+ }
+
+ switch (attribute.operator) {
+ case '=': conditions.push(value + ' == ' + attribute.value.inspect()); break;
+ case '~=': conditions.push(splitValueBy(' ') + '.include(' + attribute.value.inspect() + ')'); break;
+ case '|=': conditions.push(
+ splitValueBy('-') + '.first().toUpperCase() == ' + attribute.value.toUpperCase().inspect()
+ ); break;
+ case '!=': conditions.push(value + ' != ' + attribute.value.inspect()); break;
+ case '':
+ case undefined: conditions.push('element.hasAttribute(' + attribute.name.inspect() + ')'); break;
+ default: throw 'Unknown operator ' + attribute.operator + ' in selector';
+ }
+ });
+ }
+
+ return conditions.join(' && ');
+ },
+
+ compileMatcher: function() {
+ this.match = new Function('element', 'if (!element.tagName) return false; \
+ element = $(element); \
+ return ' + this.buildMatchExpression());
+ },
+
+ findElements: function(scope) {
+ var element;
+
+ if (element = $(this.params.id))
+ if (this.match(element))
+ if (!scope || Element.childOf(element, scope))
+ return [element];
+
+ scope = (scope || document).getElementsByTagName(this.params.tagName || '*');
+
+ var results = [];
+ for (var i = 0, length = scope.length; i < length; i++)
+ if (this.match(element = scope[i]))
+ results.push(Element.extend(element));
+
+ return results;
+ },
+
+ toString: function() {
+ return this.expression;
+ }
+}
+
+Object.extend(Selector, {
+ matchElements: function(elements, expression) {
+ var selector = new Selector(expression);
+ return elements.select(selector.match.bind(selector)).map(Element.extend);
+ },
+
+ findElement: function(elements, expression, index) {
+ if (typeof expression == 'number') index = expression, expression = false;
+ return Selector.matchElements(elements, expression || '*')[index || 0];
+ },
+
+ findChildElements: function(element, expressions) {
+ return expressions.map(function(expression) {
+ return expression.match(/[^\s"]+(?:"[^"]*"[^\s"]+)*/g).inject([null], function(results, expr) {
+ var selector = new Selector(expr);
+ return results.inject([], function(elements, result) {
+ return elements.concat(selector.findElements(result || element));
+ });
+ });
+ }).flatten();
+ }
+});
+
+function $$() {
+ return Selector.findChildElements(document, $A(arguments));
+}
+var Form = {
+ reset: function(form) {
+ $(form).reset();
+ return form;
+ },
+
+ serializeElements: function(elements, getHash) {
+ var data = elements.inject({}, function(result, element) {
+ if (!element.disabled && element.name) {
+ var key = element.name, value = $(element).getValue();
+ if (value != undefined) {
+ if (result[key]) {
+ if (result[key].constructor != Array) result[key] = [result[key]];
+ result[key].push(value);
+ }
+ else result[key] = value;
+ }
+ }
+ return result;
+ });
+
+ return getHash ? data : PHash.toQueryString(data);
+ }
+};
+
+Form.Methods = {
+ serialize: function(form, getHash) {
+ return Form.serializeElements(Form.getElements(form), getHash);
+ },
+
+ getElements: function(form) {
+ return $A($(form).getElementsByTagName('*')).inject([],
+ function(elements, child) {
+ if (Form.Element.Serializers[child.tagName.toLowerCase()])
+ elements.push(Element.extend(child));
+ return elements;
+ }
+ );
+ },
+
+ getInputs: function(form, typeName, name) {
+ form = $(form);
+ var inputs = form.getElementsByTagName('input');
+
+ if (!typeName && !name) return $A(inputs).map(Element.extend);
+
+ for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
+ var input = inputs[i];
+ if ((typeName && input.type != typeName) || (name && input.name != name))
+ continue;
+ matchingInputs.push(Element.extend(input));
+ }
+
+ return matchingInputs;
+ },
+
+ disable: function(form) {
+ form = $(form);
+ form.getElements().each(function(element) {
+ element.blur();
+ element.disabled = 'true';
+ });
+ return form;
+ },
+
+ enable: function(form) {
+ form = $(form);
+ form.getElements().each(function(element) {
+ element.disabled = '';
+ });
+ return form;
+ },
+
+ findFirstElement: function(form) {
+ return $(form).getElements().find(function(element) {
+ return element.type != 'hidden' && !element.disabled &&
+ ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
+ });
+ },
+
+ focusFirstElement: function(form) {
+ form = $(form);
+ form.findFirstElement().activate();
+ return form;
+ }
+}
+
+Object.extend(Form, Form.Methods);
+
+/*--------------------------------------------------------------------------*/
+
+Form.Element = {
+ focus: function(element) {
+ $(element).focus();
+ return element;
+ },
+
+ select: function(element) {
+ $(element).select();
+ return element;
+ }
+}
+
+Form.Element.Methods = {
+ serialize: function(element) {
+ element = $(element);
+ if (!element.disabled && element.name) {
+ var value = element.getValue();
+ if (value != undefined) {
+ var pair = {};
+ pair[element.name] = value;
+ return PHash.toQueryString(pair);
+ }
+ }
+ return '';
+ },
+
+ getValue: function(element) {
+ element = $(element);
+ var method = element.tagName.toLowerCase();
+ return Form.Element.Serializers[method](element);
+ },
+
+ clear: function(element) {
+ $(element).value = '';
+ return element;
+ },
+
+ present: function(element) {
+ return $(element).value != '';
+ },
+
+ activate: function(element) {
+ element = $(element);
+ element.focus();
+ if (element.select && ( element.tagName.toLowerCase() != 'input' ||
+ !['button', 'reset', 'submit'].include(element.type) ) )
+ element.select();
+ return element;
+ },
+
+ disable: function(element) {
+ element = $(element);
+ element.disabled = true;
+ return element;
+ },
+
+ enable: function(element) {
+ element = $(element);
+ element.blur();
+ element.disabled = false;
+ return element;
+ }
+}
+
+Object.extend(Form.Element, Form.Element.Methods);
+var Field = Form.Element;
+var $F = Form.Element.getValue;
+
+/*--------------------------------------------------------------------------*/
+
+Form.Element.Serializers = {
+ input: function(element) {
+ switch (element.type.toLowerCase()) {
+ case 'checkbox':
+ case 'radio':
+ return Form.Element.Serializers.inputSelector(element);
+ default:
+ return Form.Element.Serializers.textarea(element);
+ }
+ },
+
+ inputSelector: function(element) {
+ return element.checked ? element.value : null;
+ },
+
+ textarea: function(element) {
+ return element.value;
+ },
+
+ select: function(element) {
+ return this[element.type == 'select-one' ?
+ 'selectOne' : 'selectMany'](element);
+ },
+
+ selectOne: function(element) {
+ var index = element.selectedIndex;
+ return index >= 0 ? this.optionValue(element.options[index]) : null;
+ },
+
+ selectMany: function(element) {
+ var values, length = element.length;
+ if (!length) return null;
+
+ for (var i = 0, values = []; i < length; i++) {
+ var opt = element.options[i];
+ if (opt.selected) values.push(this.optionValue(opt));
+ }
+ return values;
+ },
+
+ optionValue: function(opt) {
+ // extend element because hasAttribute may not be native
+ return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.TimedObserver = function() {}
+Abstract.TimedObserver.prototype = {
+ initialize: function(element, frequency, callback) {
+ this.frequency = frequency;
+ this.element = $(element);
+ this.callback = callback;
+
+ this.lastValue = this.getValue();
+ this.registerCallback();
+ },
+
+ registerCallback: function() {
+ setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
+ },
+
+ onTimerEvent: function() {
+ var value = this.getValue();
+ var changed = ('string' == typeof this.lastValue && 'string' == typeof value
+ ? this.lastValue != value : String(this.lastValue) != String(value));
+ if (changed) {
+ this.callback(this.element, value);
+ this.lastValue = value;
+ }
+ }
+}
+
+Form.Element.Observer = Class.create();
+Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
+ getValue: function() {
+ return Form.Element.getValue(this.element);
+ }
+});
+
+Form.Observer = Class.create();
+Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
+ getValue: function() {
+ return Form.serialize(this.element);
+ }
+});
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.EventObserver = function() {}
+Abstract.EventObserver.prototype = {
+ initialize: function(element, callback) {
+ this.element = $(element);
+ this.callback = callback;
+
+ this.lastValue = this.getValue();
+ if (this.element.tagName.toLowerCase() == 'form')
+ this.registerFormCallbacks();
+ else
+ this.registerCallback(this.element);
+ },
+
+ onElementEvent: function() {
+ var value = this.getValue();
+ if (this.lastValue != value) {
+ this.callback(this.element, value);
+ this.lastValue = value;
+ }
+ },
+
+ registerFormCallbacks: function() {
+ Form.getElements(this.element).each(this.registerCallback.bind(this));
+ },
+
+ registerCallback: function(element) {
+ if (element.type) {
+ switch (element.type.toLowerCase()) {
+ case 'checkbox':
+ case 'radio':
+ Event.observe(element, 'click', this.onElementEvent.bind(this));
+ break;
+ default:
+ Event.observe(element, 'change', this.onElementEvent.bind(this));
+ break;
+ }
+ }
+ }
+}
+
+Form.Element.EventObserver = Class.create();
+Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
+ getValue: function() {
+ return Form.Element.getValue(this.element);
+ }
+});
+
+Form.EventObserver = Class.create();
+Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
+ getValue: function() {
+ return Form.serialize(this.element);
+ }
+});
+if (!window.Event) {
+ var Event = new Object();
+}
+
+Object.extend(Event, {
+ KEY_BACKSPACE: 8,
+ KEY_TAB: 9,
+ KEY_RETURN: 13,
+ KEY_ESC: 27,
+ KEY_LEFT: 37,
+ KEY_UP: 38,
+ KEY_RIGHT: 39,
+ KEY_DOWN: 40,
+ KEY_DELETE: 46,
+ KEY_HOME: 36,
+ KEY_END: 35,
+ KEY_PAGEUP: 33,
+ KEY_PAGEDOWN: 34,
+
+ element: function(event) {
+ return event.target || event.srcElement;
+ },
+
+ isLeftClick: function(event) {
+ return (((event.which) && (event.which == 1)) ||
+ ((event.button) && (event.button == 1)));
+ },
+
+ pointerX: function(event) {
+ return event.pageX || (event.clientX +
+ (document.documentElement.scrollLeft || document.body.scrollLeft));
+ },
+
+ pointerY: function(event) {
+ return event.pageY || (event.clientY +
+ (document.documentElement.scrollTop || document.body.scrollTop));
+ },
+
+ stop: function(event) {
+ if (event.preventDefault) {
+ event.preventDefault();
+ event.stopPropagation();
+ } else {
+ event.returnValue = false;
+ event.cancelBubble = true;
+ }
+ },
+
+ // find the first node with the given tagName, starting from the
+ // node the event was triggered on; traverses the DOM upwards
+ findElement: function(event, tagName) {
+ var element = Event.element(event);
+ while (element.parentNode && (!element.tagName ||
+ (element.tagName.toUpperCase() != tagName.toUpperCase())))
+ element = element.parentNode;
+ return element;
+ },
+
+ observers: false,
+
+ _observeAndCache: function(element, name, observer, useCapture) {
+ if (!this.observers) this.observers = [];
+ if (element.addEventListener) {
+ this.observers.push([element, name, observer, useCapture]);
+ element.addEventListener(name, observer, useCapture);
+ } else if (element.attachEvent) {
+ this.observers.push([element, name, observer, useCapture]);
+ element.attachEvent('on' + name, observer);
+ }
+ },
+
+ unloadCache: function() {
+ if (!Event.observers) return;
+ for (var i = 0, length = Event.observers.length; i < length; i++) {
+ Event.stopObserving.apply(this, Event.observers[i]);
+ Event.observers[i][0] = null;
+ }
+ Event.observers = false;
+ },
+
+ observe: function(element, name, observer, useCapture) {
+ element = $(element);
+ useCapture = useCapture || false;
+
+ if (name == 'keypress' &&
+ (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
+ || element.attachEvent))
+ name = 'keydown';
+
+ Event._observeAndCache(element, name, observer, useCapture);
+ },
+
+ stopObserving: function(element, name, observer, useCapture) {
+ element = $(element);
+ useCapture = useCapture || false;
+
+ if (name == 'keypress' &&
+ (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
+ || element.detachEvent))
+ name = 'keydown';
+
+ if (element.removeEventListener) {
+ element.removeEventListener(name, observer, useCapture);
+ } else if (element.detachEvent) {
+ try {
+ element.detachEvent('on' + name, observer);
+ } catch (e) {}
+ }
+ }
+});
+
+/* prevent memory leaks in IE */
+if (navigator.appVersion.match(/\bMSIE\b/))
+ Event.observe(window, 'unload', Event.unloadCache, false);
+var Position = {
+ // set to true if needed, warning: firefox performance problems
+ // NOT neeeded for page scrolling, only if draggable contained in
+ // scrollable elements
+ includeScrollOffsets: false,
+
+ // must be called before calling withinIncludingScrolloffset, every time the
+ // page is scrolled
+ prepare: function() {
+ this.deltaX = window.pageXOffset
+ || document.documentElement.scrollLeft
+ || document.body.scrollLeft
+ || 0;
+ this.deltaY = window.pageYOffset
+ || document.documentElement.scrollTop
+ || document.body.scrollTop
+ || 0;
+ },
+
+ realOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.scrollTop || 0;
+ valueL += element.scrollLeft || 0;
+ element = element.parentNode;
+ } while (element);
+ return [valueL, valueT];
+ },
+
+ cumulativeOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ element = element.offsetParent;
+ } while (element);
+ return [valueL, valueT];
+ },
+
+ positionedOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ element = element.offsetParent;
+ if (element) {
+ if(element.tagName=='BODY') break;
+ var p = Element.getStyle(element, 'position');
+ if (p == 'relative' || p == 'absolute') break;
+ }
+ } while (element);
+ return [valueL, valueT];
+ },
+
+ offsetParent: function(element) {
+ if (element.offsetParent) return element.offsetParent;
+ if (element == document.body) return element;
+
+ while ((element = element.parentNode) && element != document.body)
+ if (Element.getStyle(element, 'position') != 'static')
+ return element;
+
+ return document.body;
+ },
+
+ // caches x/y coordinate pair to use with overlap
+ within: function(element, x, y) {
+ if (this.includeScrollOffsets)
+ return this.withinIncludingScrolloffsets(element, x, y);
+ this.xcomp = x;
+ this.ycomp = y;
+ this.offset = this.cumulativeOffset(element);
+
+ return (y >= this.offset[1] &&
+ y < this.offset[1] + element.offsetHeight &&
+ x >= this.offset[0] &&
+ x < this.offset[0] + element.offsetWidth);
+ },
+
+ withinIncludingScrolloffsets: function(element, x, y) {
+ var offsetcache = this.realOffset(element);
+
+ this.xcomp = x + offsetcache[0] - this.deltaX;
+ this.ycomp = y + offsetcache[1] - this.deltaY;
+ this.offset = this.cumulativeOffset(element);
+
+ return (this.ycomp >= this.offset[1] &&
+ this.ycomp < this.offset[1] + element.offsetHeight &&
+ this.xcomp >= this.offset[0] &&
+ this.xcomp < this.offset[0] + element.offsetWidth);
+ },
+
+ // within must be called directly before
+ overlap: function(mode, element) {
+ if (!mode) return 0;
+ if (mode == 'vertical')
+ return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
+ element.offsetHeight;
+ if (mode == 'horizontal')
+ return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
+ element.offsetWidth;
+ },
+
+ page: function(forElement) {
+ var valueT = 0, valueL = 0;
+
+ var element = forElement;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+
+ // Safari fix
+ if (element.offsetParent==document.body)
+ if (Element.getStyle(element,'position')=='absolute') break;
+
+ } while (element = element.offsetParent);
+
+ element = forElement;
+ do {
+ if (!window.opera || element.tagName=='BODY') {
+ valueT -= element.scrollTop || 0;
+ valueL -= element.scrollLeft || 0;
+ }
+ } while (element = element.parentNode);
+
+ return [valueL, valueT];
+ },
+
+ clone: function(source, target) {
+ var options = Object.extend({
+ setLeft: true,
+ setTop: true,
+ setWidth: true,
+ setHeight: true,
+ offsetTop: 0,
+ offsetLeft: 0
+ }, arguments[2] || {})
+
+ // find page position of source
+ source = $(source);
+ var p = Position.page(source);
+
+ // find coordinate system to use
+ target = $(target);
+ var delta = [0, 0];
+ var parent = null;
+ // delta [0,0] will do fine with position: fixed elements,
+ // position:absolute needs offsetParent deltas
+ if (Element.getStyle(target,'position') == 'absolute') {
+ parent = Position.offsetParent(target);
+ delta = Position.page(parent);
+ }
+
+ // correct by body offsets (fixes Safari)
+ if (parent == document.body) {
+ delta[0] -= document.body.offsetLeft;
+ delta[1] -= document.body.offsetTop;
+ }
+
+ // set position
+ if(options.setLeft) target.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px';
+ if(options.setTop) target.style.top = (p[1] - delta[1] + options.offsetTop) + 'px';
+ if(options.setWidth) target.style.width = source.offsetWidth + 'px';
+ if(options.setHeight) target.style.height = source.offsetHeight + 'px';
+ },
+
+ absolutize: function(element) {
+ element = $(element);
+ if (element.style.position == 'absolute') return;
+ Position.prepare();
+
+ var offsets = Position.positionedOffset(element);
+ var top = offsets[1];
+ var left = offsets[0];
+ var width = element.clientWidth;
+ var height = element.clientHeight;
+
+ element._originalLeft = left - parseFloat(element.style.left || 0);
+ element._originalTop = top - parseFloat(element.style.top || 0);
+ element._originalWidth = element.style.width;
+ element._originalHeight = element.style.height;
+
+ element.style.position = 'absolute';
+ element.style.top = top + 'px';
+ element.style.left = left + 'px';
+ element.style.width = width + 'px';
+ element.style.height = height + 'px';
+ },
+
+ relativize: function(element) {
+ element = $(element);
+ if (element.style.position == 'relative') return;
+ Position.prepare();
+
+ element.style.position = 'relative';
+ var top = parseFloat(element.style.top || 0) - (element._originalTop || 0);
+ var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
+
+ element.style.top = top + 'px';
+ element.style.left = left + 'px';
+ element.style.height = element._originalHeight;
+ element.style.width = element._originalWidth;
+ }
+}
+
+// Safari returns margins on body which is incorrect if the child is absolutely
+// positioned. For performance reasons, redefine Position.cumulativeOffset for
+// KHTML/WebKit only.
+if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {
+ Position.cumulativeOffset = function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ if (element.offsetParent == document.body)
+ if (Element.getStyle(element, 'position') == 'absolute') break;
+
+ element = element.offsetParent;
+ } while (element);
+
+ return [valueL, valueT];
+ }
+}
+
+Element.addMethods();
\ No newline at end of file
diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/scriptaculous.js b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/scriptaculous.js
new file mode 100644
index 00000000..585313c3
--- /dev/null
+++ b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/scriptaculous.js
@@ -0,0 +1,51 @@
+// script.aculo.us scriptaculous.js v1.7.0, Fri Jan 19 19:16:36 CET 2007
+
+// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+var Scriptaculous = {
+ Version: '1.7.0',
+ require: function(libraryName) {
+ // inserting via DOM fails in Safari 2.0, so brute force approach
+ document.write('');
+ },
+ load: function() {
+ if((typeof Prototype=='undefined') ||
+ (typeof Element == 'undefined') ||
+ (typeof Element.Methods=='undefined') ||
+ parseFloat(Prototype.Version.split(".")[0] + "." +
+ Prototype.Version.split(".")[1]) < 1.5)
+ throw("script.aculo.us requires the Prototype JavaScript framework >= 1.5.0");
+
+ $A(document.getElementsByTagName("script")).findAll( function(s) {
+ return (s.src && s.src.match(/scriptaculous\.js(\?.*)?$/))
+ }).each( function(s) {
+ var path = s.src.replace(/scriptaculous\.js(\?.*)?$/,'');
+ var includes = s.src.match(/\?.*load=([a-z,]*)/);
+ (includes ? includes[1] : 'builder,effects,dragdrop,controls,slider').split(',').each(
+ function(include) { Scriptaculous.require(path+include+'.js') });
+ });
+ }
+}
+
+Scriptaculous.load();
\ No newline at end of file
diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/slider.js b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/slider.js
new file mode 100644
index 00000000..f24f2823
--- /dev/null
+++ b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/slider.js
@@ -0,0 +1,278 @@
+// script.aculo.us slider.js v1.7.0, Fri Jan 19 19:16:36 CET 2007
+
+// Copyright (c) 2005, 2006 Marty Haught, Thomas Fuchs
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+if(!Control) var Control = {};
+Control.Slider = Class.create();
+
+// options:
+// axis: 'vertical', or 'horizontal' (default)
+//
+// callbacks:
+// onChange(value)
+// onSlide(value)
+Control.Slider.prototype = {
+ initialize: function(handle, track, options) {
+ var slider = this;
+
+ if(handle instanceof Array) {
+ this.handles = handle.collect( function(e) { return $(e) });
+ } else {
+ this.handles = [$(handle)];
+ }
+
+ this.track = $(track);
+ this.options = options || {};
+
+ this.axis = this.options.axis || 'horizontal';
+ this.increment = this.options.increment || 1;
+ this.step = parseInt(this.options.step || '1');
+ this.range = this.options.range || $R(0,1);
+
+ this.value = 0; // assure backwards compat
+ this.values = this.handles.map( function() { return 0 });
+ this.spans = this.options.spans ? this.options.spans.map(function(s){ return $(s) }) : false;
+ this.options.startSpan = $(this.options.startSpan || null);
+ this.options.endSpan = $(this.options.endSpan || null);
+
+ this.restricted = this.options.restricted || false;
+
+ this.maximum = this.options.maximum || this.range.end;
+ this.minimum = this.options.minimum || this.range.start;
+
+ // Will be used to align the handle onto the track, if necessary
+ this.alignX = parseInt(this.options.alignX || '0');
+ this.alignY = parseInt(this.options.alignY || '0');
+
+ this.trackLength = this.maximumOffset() - this.minimumOffset();
+
+ this.handleLength = this.isVertical() ?
+ (this.handles[0].offsetHeight != 0 ?
+ this.handles[0].offsetHeight : this.handles[0].style.height.replace(/px$/,"")) :
+ (this.handles[0].offsetWidth != 0 ? this.handles[0].offsetWidth :
+ this.handles[0].style.width.replace(/px$/,""));
+
+ this.active = false;
+ this.dragging = false;
+ this.disabled = false;
+
+ if(this.options.disabled) this.setDisabled();
+
+ // Allowed values array
+ this.allowedValues = this.options.values ? this.options.values.sortBy(Prototype.K) : false;
+ if(this.allowedValues) {
+ this.minimum = this.allowedValues.min();
+ this.maximum = this.allowedValues.max();
+ }
+
+ this.eventMouseDown = this.startDrag.bindAsEventListener(this);
+ this.eventMouseUp = this.endDrag.bindAsEventListener(this);
+ this.eventMouseMove = this.update.bindAsEventListener(this);
+
+ // Initialize handles in reverse (make sure first handle is active)
+ this.handles.each( function(h,i) {
+ i = slider.handles.length-1-i;
+ slider.setValue(parseFloat(
+ (slider.options.sliderValue instanceof Array ?
+ slider.options.sliderValue[i] : slider.options.sliderValue) ||
+ slider.range.start), i);
+ Element.makePositioned(h); // fix IE
+ Event.observe(h, "mousedown", slider.eventMouseDown);
+ });
+
+ Event.observe(this.track, "mousedown", this.eventMouseDown);
+ Event.observe(document, "mouseup", this.eventMouseUp);
+ Event.observe(document, "mousemove", this.eventMouseMove);
+
+ this.initialized = true;
+ },
+ dispose: function() {
+ var slider = this;
+ Event.stopObserving(this.track, "mousedown", this.eventMouseDown);
+ Event.stopObserving(document, "mouseup", this.eventMouseUp);
+ Event.stopObserving(document, "mousemove", this.eventMouseMove);
+ this.handles.each( function(h) {
+ Event.stopObserving(h, "mousedown", slider.eventMouseDown);
+ });
+ },
+ setDisabled: function(){
+ this.disabled = true;
+ },
+ setEnabled: function(){
+ this.disabled = false;
+ },
+ getNearestValue: function(value){
+ if(this.allowedValues){
+ if(value >= this.allowedValues.max()) return(this.allowedValues.max());
+ if(value <= this.allowedValues.min()) return(this.allowedValues.min());
+
+ var offset = Math.abs(this.allowedValues[0] - value);
+ var newValue = this.allowedValues[0];
+ this.allowedValues.each( function(v) {
+ var currentOffset = Math.abs(v - value);
+ if(currentOffset <= offset){
+ newValue = v;
+ offset = currentOffset;
+ }
+ });
+ return newValue;
+ }
+ if(value > this.range.end) return this.range.end;
+ if(value < this.range.start) return this.range.start;
+ return value;
+ },
+ setValue: function(sliderValue, handleIdx){
+ if(!this.active) {
+ this.activeHandleIdx = handleIdx || 0;
+ this.activeHandle = this.handles[this.activeHandleIdx];
+ this.updateStyles();
+ }
+ handleIdx = handleIdx || this.activeHandleIdx || 0;
+ if(this.initialized && this.restricted) {
+ if((handleIdx>0) && (sliderValue