From 3abcc0896aec2fe8da7201ce3ffff78c82c10c67 Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Thu, 2 Nov 2023 12:34:36 +0100 Subject: [PATCH] wip #6447 --- .htaccess | 2 - v2/dotclear/CHANGELOG | 385 -- v2/dotclear/CREDITS | 46 - v2/dotclear/LICENSE | 339 -- v2/dotclear/README | 22 - v2/dotclear/admin/auth.php | 431 --- v2/dotclear/admin/blog.php | 96 - v2/dotclear/admin/blog_del.php | 73 - v2/dotclear/admin/blog_pref.php | 553 --- v2/dotclear/admin/blog_theme.php | 363 -- v2/dotclear/admin/blogs.php | 185 - v2/dotclear/admin/categories.php | 190 - v2/dotclear/admin/category.php | 260 -- v2/dotclear/admin/comment.php | 236 -- v2/dotclear/admin/comments.php | 251 -- v2/dotclear/admin/comments_actions.php | 136 - v2/dotclear/admin/dispatcher.php | 34 - v2/dotclear/admin/images/add.png | Bin 1193 -> 0 bytes v2/dotclear/admin/images/admin.png | Bin 625 -> 0 bytes v2/dotclear/admin/images/attach.png | Bin 370 -> 0 bytes v2/dotclear/admin/images/check-off.png | Bin 450 -> 0 bytes v2/dotclear/admin/images/check-on.png | Bin 1121 -> 0 bytes v2/dotclear/admin/images/check-wrn.png | Bin 394 -> 0 bytes v2/dotclear/admin/images/date-picker.png | Bin 1199 -> 0 bytes v2/dotclear/admin/images/dotclear_pw.png | Bin 1525 -> 0 bytes v2/dotclear/admin/images/edit-mini.png | Bin 614 -> 0 bytes v2/dotclear/admin/images/favicon.png | Bin 858 -> 0 bytes v2/dotclear/admin/images/help.png | Bin 1600 -> 0 bytes v2/dotclear/admin/images/junk.png | Bin 498 -> 0 bytes v2/dotclear/admin/images/locker.png | Bin 354 -> 0 bytes v2/dotclear/admin/images/logout.png | Bin 915 -> 0 bytes v2/dotclear/admin/images/media/audio.png | Bin 1170 -> 0 bytes v2/dotclear/admin/images/media/blank.png | Bin 1273 -> 0 bytes v2/dotclear/admin/images/media/document.png | Bin 762 -> 0 bytes v2/dotclear/admin/images/media/executable.png | Bin 1240 -> 0 bytes v2/dotclear/admin/images/media/folder.png | Bin 1011 -> 0 bytes v2/dotclear/admin/images/media/html.png | Bin 1811 -> 0 bytes v2/dotclear/admin/images/media/image.png | Bin 1467 -> 0 bytes v2/dotclear/admin/images/media/package.png | Bin 1153 -> 0 bytes .../admin/images/media/presentation.png | Bin 1141 -> 0 bytes .../admin/images/media/spreadsheet.png | Bin 1624 -> 0 bytes v2/dotclear/admin/images/media/text.png | Bin 1095 -> 0 bytes v2/dotclear/admin/images/media/video.png | Bin 1250 -> 0 bytes .../admin/images/menu/add_to_favorites.png | Bin 3473 -> 0 bytes v2/dotclear/admin/images/menu/blog-pref-b.png | Bin 5339 -> 0 bytes v2/dotclear/admin/images/menu/blog-pref.png | Bin 1621 -> 0 bytes .../admin/images/menu/blog-theme-b.png | Bin 3925 -> 0 bytes v2/dotclear/admin/images/menu/blogs-b.png | Bin 4371 -> 0 bytes v2/dotclear/admin/images/menu/blogs.png | Bin 1344 -> 0 bytes .../admin/images/menu/categories-b.png | Bin 3859 -> 0 bytes v2/dotclear/admin/images/menu/categories.png | Bin 1472 -> 0 bytes v2/dotclear/admin/images/menu/comments-b.png | Bin 3344 -> 0 bytes v2/dotclear/admin/images/menu/comments.png | Bin 1445 -> 0 bytes v2/dotclear/admin/images/menu/dashboard.png | Bin 256 -> 0 bytes v2/dotclear/admin/images/menu/edit-b.png | Bin 3356 -> 0 bytes v2/dotclear/admin/images/menu/edit.png | Bin 1591 -> 0 bytes v2/dotclear/admin/images/menu/entries-b.png | Bin 3027 -> 0 bytes v2/dotclear/admin/images/menu/entries.png | Bin 1547 -> 0 bytes v2/dotclear/admin/images/menu/favorite-b.png | Bin 6047 -> 0 bytes v2/dotclear/admin/images/menu/favorite.png | Bin 3311 -> 0 bytes v2/dotclear/admin/images/menu/langs-b.png | Bin 8168 -> 0 bytes v2/dotclear/admin/images/menu/langs.png | Bin 1479 -> 0 bytes v2/dotclear/admin/images/menu/media-b.png | Bin 6778 -> 0 bytes v2/dotclear/admin/images/menu/media.png | Bin 1532 -> 0 bytes v2/dotclear/admin/images/menu/plugins-b.png | Bin 8750 -> 0 bytes v2/dotclear/admin/images/menu/plugins.png | Bin 1663 -> 0 bytes v2/dotclear/admin/images/menu/search-b.png | Bin 6716 -> 0 bytes v2/dotclear/admin/images/menu/search.png | Bin 1713 -> 0 bytes v2/dotclear/admin/images/menu/themes.png | Bin 1442 -> 0 bytes v2/dotclear/admin/images/menu/update.png | Bin 3364 -> 0 bytes v2/dotclear/admin/images/menu/user-pref-b.png | Bin 6605 -> 0 bytes v2/dotclear/admin/images/menu/user-pref.png | Bin 1597 -> 0 bytes v2/dotclear/admin/images/menu/users-b.png | Bin 5292 -> 0 bytes v2/dotclear/admin/images/menu/users.png | Bin 1584 -> 0 bytes v2/dotclear/admin/images/menu_off.png | Bin 1346 -> 0 bytes v2/dotclear/admin/images/menu_on.png | Bin 1334 -> 0 bytes v2/dotclear/admin/images/minus.png | Bin 284 -> 0 bytes v2/dotclear/admin/images/noscreenshot.png | Bin 1395 -> 0 bytes v2/dotclear/admin/images/outgoing-blue.png | Bin 972 -> 0 bytes v2/dotclear/admin/images/outgoing.png | Bin 965 -> 0 bytes v2/dotclear/admin/images/picker.png | Bin 1520 -> 0 bytes v2/dotclear/admin/images/plus.png | Bin 297 -> 0 bytes v2/dotclear/admin/images/scheduled.png | Bin 316 -> 0 bytes v2/dotclear/admin/images/selected.png | Bin 259 -> 0 bytes v2/dotclear/admin/images/superadmin.png | Bin 638 -> 0 bytes v2/dotclear/admin/images/trash.png | Bin 718 -> 0 bytes v2/dotclear/admin/index.php | 360 -- v2/dotclear/admin/install/check.php | 83 - v2/dotclear/admin/install/index.php | 401 --- v2/dotclear/admin/install/wizard.php | 190 - v2/dotclear/admin/js/_blog_pref.js | 4 - v2/dotclear/admin/js/_blog_theme.js | 6 - v2/dotclear/admin/js/_categories.js | 2 - v2/dotclear/admin/js/_category.js | 2 - v2/dotclear/admin/js/_comment.js | 3 - v2/dotclear/admin/js/_comments.js | 6 - v2/dotclear/admin/js/_index.js | 10 - v2/dotclear/admin/js/_langs.js | 2 - v2/dotclear/admin/js/_media.js | 7 - v2/dotclear/admin/js/_media_item.js | 4 - v2/dotclear/admin/js/_permissions.js | 6 - v2/dotclear/admin/js/_permissions_blog.js | 2 - v2/dotclear/admin/js/_plugins.js | 2 - v2/dotclear/admin/js/_post.js | 16 - v2/dotclear/admin/js/_posts_list.js | 7 - v2/dotclear/admin/js/_preferences-dragdrop.js | 2 - v2/dotclear/admin/js/_preferences.js | 5 - v2/dotclear/admin/js/_trackbacks.js | 2 - v2/dotclear/admin/js/_users.js | 7 - v2/dotclear/admin/js/color-picker.js | 6 - v2/dotclear/admin/js/common.js | 21 - v2/dotclear/admin/js/confirm-close.js | 12 - v2/dotclear/admin/js/date-picker.js | 41 - v2/dotclear/admin/js/dragsort-tablerows.js | 2 - v2/dotclear/admin/js/filter-controls.js | 2 - v2/dotclear/admin/js/ie7/IE7.js | 74 - v2/dotclear/admin/js/ie7/IE8.js | 86 - v2/dotclear/admin/js/ie7/blank.gif | Bin 48 -> 0 bytes v2/dotclear/admin/js/ie7/ie7-recalc.js | 5 - v2/dotclear/admin/js/ie7/ie7-squish.js | 3 - .../js/jquery/jquery-ui-1.8.12.custom.min.js | 8 - v2/dotclear/admin/js/jquery/jquery.bgFade.js | 7 - v2/dotclear/admin/js/jquery/jquery.biscuit.js | 5 - .../admin/js/jquery/jquery.candyUpload.js | 22 - .../admin/js/jquery/jquery.farbtastic.js | 22 - v2/dotclear/admin/js/jquery/jquery.js | 471 --- v2/dotclear/admin/js/jquery/jquery.modal.js | 17 - .../admin/js/jquery/jquery.pageTabs.js | 4 - .../admin/js/jsToolBar/jsToolBar.dotclear.js | 35 - v2/dotclear/admin/js/jsToolBar/jsToolBar.js | 29 - .../admin/js/jsToolBar/jsToolBar.wysiwyg.js | 47 - v2/dotclear/admin/js/jsToolBar/popup_link.js | 3 - v2/dotclear/admin/js/jsToolBar/popup_media.js | 13 - v2/dotclear/admin/js/jsToolBar/popup_posts.js | 2 - v2/dotclear/admin/js/meta-editor.js | 14 - v2/dotclear/admin/js/prelude.js | 6 - v2/dotclear/admin/js/tool-man/cookies.js | 11 - v2/dotclear/admin/js/tool-man/coordinates.js | 19 - v2/dotclear/admin/js/tool-man/core.js | 35 - v2/dotclear/admin/js/tool-man/css.js | 3 - v2/dotclear/admin/js/tool-man/drag.js | 84 - v2/dotclear/admin/js/tool-man/dragsort.js | 35 - v2/dotclear/admin/js/tool-man/events.js | 8 - v2/dotclear/admin/langs.php | 289 -- v2/dotclear/admin/media.php | 472 --- v2/dotclear/admin/media_item.php | 528 --- v2/dotclear/admin/permissions.php | 160 - v2/dotclear/admin/permissions_blog.php | 196 -- v2/dotclear/admin/plugin.php | 91 - v2/dotclear/admin/plugins.php | 364 -- v2/dotclear/admin/popup_link.php | 62 - v2/dotclear/admin/popup_posts.php | 57 - v2/dotclear/admin/post.php | 624 ---- v2/dotclear/admin/post_media.php | 79 - v2/dotclear/admin/posts.php | 324 -- v2/dotclear/admin/posts_actions.php | 259 -- v2/dotclear/admin/preferences.php | 631 ---- v2/dotclear/admin/search.php | 180 - v2/dotclear/admin/services.php | 395 --- v2/dotclear/admin/style/add.png | Bin 1113 -> 0 bytes .../admin/style/candyUpload/cancel.png | Bin 309 -> 0 bytes .../admin/style/candyUpload/loader.png | Bin 858 -> 0 bytes v2/dotclear/admin/style/candyUpload/style.css | 113 - v2/dotclear/admin/style/date-picker.css | 35 - v2/dotclear/admin/style/dc_bg.png | Bin 131 -> 0 bytes v2/dotclear/admin/style/dc_logo.png | Bin 825 -> 0 bytes v2/dotclear/admin/style/dc_logo_small.png | Bin 839 -> 0 bytes v2/dotclear/admin/style/default-rtl.css | 11 - v2/dotclear/admin/style/default.css | 1361 -------- v2/dotclear/admin/style/dotclear-logo.png | Bin 2900 -> 0 bytes v2/dotclear/admin/style/dotclear-logo2.png | Bin 1615 -> 0 bytes v2/dotclear/admin/style/drag.png | Bin 611 -> 0 bytes .../admin/style/farbtastic/farbtastic.css | 33 - v2/dotclear/admin/style/farbtastic/marker.png | Bin 614 -> 0 bytes v2/dotclear/admin/style/farbtastic/mask.png | Bin 2020 -> 0 bytes v2/dotclear/admin/style/farbtastic/wheel.png | Bin 11733 -> 0 bytes v2/dotclear/admin/style/grid.png | Bin 202 -> 0 bytes v2/dotclear/admin/style/head-bg.png | Bin 1325 -> 0 bytes v2/dotclear/admin/style/iesucks.css | 46 - v2/dotclear/admin/style/info.png | Bin 724 -> 0 bytes v2/dotclear/admin/style/install.css | 165 - v2/dotclear/admin/style/install/important.png | Bin 1418 -> 0 bytes v2/dotclear/admin/style/install/note.png | Bin 1561 -> 0 bytes .../admin/style/install/process_warning.png | Bin 4937 -> 0 bytes v2/dotclear/admin/style/install/w-logo.png | Bin 1615 -> 0 bytes .../admin/style/jsToolBar/bt_bquote.png | Bin 261 -> 0 bytes v2/dotclear/admin/style/jsToolBar/bt_br.png | Bin 243 -> 0 bytes .../admin/style/jsToolBar/bt_clean.png | Bin 576 -> 0 bytes v2/dotclear/admin/style/jsToolBar/bt_code.png | Bin 338 -> 0 bytes v2/dotclear/admin/style/jsToolBar/bt_del.png | Bin 351 -> 0 bytes v2/dotclear/admin/style/jsToolBar/bt_em.png | Bin 300 -> 0 bytes v2/dotclear/admin/style/jsToolBar/bt_img.png | Bin 899 -> 0 bytes .../admin/style/jsToolBar/bt_img_select.png | Bin 518 -> 0 bytes v2/dotclear/admin/style/jsToolBar/bt_ins.png | Bin 308 -> 0 bytes v2/dotclear/admin/style/jsToolBar/bt_link.png | Bin 833 -> 0 bytes v2/dotclear/admin/style/jsToolBar/bt_ol.png | Bin 249 -> 0 bytes .../admin/style/jsToolBar/bt_paragraph.png | Bin 295 -> 0 bytes v2/dotclear/admin/style/jsToolBar/bt_post.png | Bin 1507 -> 0 bytes v2/dotclear/admin/style/jsToolBar/bt_pre.png | Bin 244 -> 0 bytes .../admin/style/jsToolBar/bt_quote.png | Bin 322 -> 0 bytes .../admin/style/jsToolBar/bt_strong.png | Bin 336 -> 0 bytes v2/dotclear/admin/style/jsToolBar/bt_ul.png | Bin 239 -> 0 bytes .../admin/style/jsToolBar/jsToolBar.css | 173 - v2/dotclear/admin/style/jsToolBar/resize.png | Bin 1267 -> 0 bytes v2/dotclear/admin/style/magnifier.png | Bin 499 -> 0 bytes v2/dotclear/admin/style/modal/close.png | Bin 1179 -> 0 bytes v2/dotclear/admin/style/modal/loader.gif | Bin 9427 -> 0 bytes v2/dotclear/admin/style/modal/modal.css | 52 - v2/dotclear/admin/style/msg-error.png | Bin 4159 -> 0 bytes v2/dotclear/admin/style/msg-std.png | Bin 1135 -> 0 bytes v2/dotclear/admin/style/package.png | Bin 771 -> 0 bytes v2/dotclear/admin/style/page-bg.png | Bin 1254 -> 0 bytes v2/dotclear/admin/style/warning.png | Bin 678 -> 0 bytes v2/dotclear/admin/trackbacks.php | 150 - v2/dotclear/admin/update.php | 222 -- v2/dotclear/admin/user.php | 331 -- v2/dotclear/admin/users.php | 174 - v2/dotclear/admin/xmlrpc.php | 35 - v2/dotclear/cache/.htaccess | 1 - v2/dotclear/db/.htaccess | 1 - v2/dotclear/inc/.htaccess | 1 - v2/dotclear/inc/admin/class.dc.menu.php | 88 - v2/dotclear/inc/admin/lib.dc.page.php | 709 ---- v2/dotclear/inc/admin/lib.pager.php | 420 --- v2/dotclear/inc/admin/prepend.php | 376 -- v2/dotclear/inc/config.php.in | 70 - v2/dotclear/inc/core/class.dc.auth.php | 632 ---- v2/dotclear/inc/core/class.dc.blog.php | 2089 ----------- v2/dotclear/inc/core/class.dc.categories.php | 483 --- v2/dotclear/inc/core/class.dc.core.php | 1467 -------- v2/dotclear/inc/core/class.dc.error.php | 133 - v2/dotclear/inc/core/class.dc.log.php | 204 -- v2/dotclear/inc/core/class.dc.media.php | 1093 ------ v2/dotclear/inc/core/class.dc.meta.php | 615 ---- v2/dotclear/inc/core/class.dc.modules.php | 563 --- v2/dotclear/inc/core/class.dc.namespace.php | 308 -- v2/dotclear/inc/core/class.dc.postmedia.php | 172 - v2/dotclear/inc/core/class.dc.prefs.php | 134 - v2/dotclear/inc/core/class.dc.rest.php | 52 - .../inc/core/class.dc.rs.extensions.php | 870 ----- v2/dotclear/inc/core/class.dc.settings.php | 384 -- v2/dotclear/inc/core/class.dc.themes.php | 102 - v2/dotclear/inc/core/class.dc.trackback.php | 404 --- v2/dotclear/inc/core/class.dc.update.php | 478 --- v2/dotclear/inc/core/class.dc.utils.php | 53 - v2/dotclear/inc/core/class.dc.workspace.php | 368 -- v2/dotclear/inc/core/class.dc.xmlrpc.php | 1632 --------- v2/dotclear/inc/core_error.php | 62 - v2/dotclear/inc/dbschema/db-schema.php | 282 -- v2/dotclear/inc/dbschema/upgrade-cli.php | 52 - v2/dotclear/inc/dbschema/upgrade.php | 331 -- v2/dotclear/inc/digests | 694 ---- v2/dotclear/inc/libs/clearbricks/Makefile | 44 - v2/dotclear/inc/libs/clearbricks/README | 67 - v2/dotclear/inc/libs/clearbricks/_common.php | 123 - .../inc/libs/clearbricks/common/_main.php | 58 - .../inc/libs/clearbricks/common/lib.crypt.php | 77 - .../inc/libs/clearbricks/common/lib.date.php | 260 -- .../inc/libs/clearbricks/common/lib.files.php | 667 ---- .../inc/libs/clearbricks/common/lib.form.php | 347 -- .../inc/libs/clearbricks/common/lib.html.php | 185 - .../inc/libs/clearbricks/common/lib.http.php | 452 --- .../inc/libs/clearbricks/common/lib.l10n.php | 453 --- .../inc/libs/clearbricks/common/lib.text.php | 355 -- .../inc/libs/clearbricks/common/tz.dat | 407 --- .../libs/clearbricks/dblayer/class.cursor.php | 258 -- .../libs/clearbricks/dblayer/class.mysql.php | 253 -- .../libs/clearbricks/dblayer/class.mysqli.php | 284 -- .../libs/clearbricks/dblayer/class.pgsql.php | 280 -- .../libs/clearbricks/dblayer/class.sqlite.php | 278 -- .../inc/libs/clearbricks/dblayer/dblayer.php | 1208 ------- .../clearbricks/dbschema/class.dbschema.php | 310 -- .../clearbricks/dbschema/class.dbstruct.php | 639 ---- .../dbschema/class.mysql.dbschema.php | 470 --- .../dbschema/class.mysqli.dbschema.php | 21 - .../dbschema/class.pgsql.dbschema.php | 400 --- .../dbschema/class.sqlite.dbschema.php | 514 --- .../inc/libs/clearbricks/debian/changelog | 466 --- .../inc/libs/clearbricks/debian/compat | 1 - .../inc/libs/clearbricks/debian/control | 14 - .../inc/libs/clearbricks/debian/copyright | 27 - v2/dotclear/inc/libs/clearbricks/debian/dirs | 1 - v2/dotclear/inc/libs/clearbricks/debian/docs | 1 - .../inc/libs/clearbricks/debian/mkdcl.php | 198 -- v2/dotclear/inc/libs/clearbricks/debian/rules | 62 - .../inc/libs/clearbricks/diff/lib.diff.php | 366 -- .../libs/clearbricks/diff/lib.tidy.diff.php | 353 -- .../clearbricks/ext/incutio.ixr_library.php | 856 ----- .../filemanager/class.filemanager.php | 618 ---- .../html.filter/class.html.filter.php | 676 ---- .../html.validator/class.html.validator.php | 143 - .../clearbricks/image/class.image.meta.php | 406 --- .../clearbricks/image/class.image.tools.php | 299 -- .../mail.convert/class.mail.convert.php | 201 -- .../mail.mime/class.mime.message.php | 467 --- .../inc/libs/clearbricks/mail/class.mail.php | 117 - .../clearbricks/mail/class.socket.mail.php | 181 - .../net.http.feed/class.feed.parser.php | 288 -- .../net.http.feed/class.feed.reader.php | 276 -- .../clearbricks/net.http/class.net.http.php | 918 ----- .../clearbricks/net.nntp/class.net.nntp.php | 448 --- .../net.nntp/class.nntp.message.php | 48 - .../net.xmlrpc/class.net.xmlrpc.php | 1349 ------- .../libs/clearbricks/net/class.net.socket.php | 315 -- .../libs/clearbricks/pager/class.pager.php | 215 -- .../inc/libs/clearbricks/rest/class.rest.php | 292 -- .../session.db/class.session.db.php | 232 -- .../clearbricks/template/class.template.php | 324 -- .../text.wiki2xhtml/class.wiki2xhtml.php | 1305 ------- .../url.handler/class.url.handler.php | 229 -- .../libs/clearbricks/xmlsql/class.xmlsql.php | 180 - .../inc/libs/clearbricks/zip/class.unzip.php | 541 --- .../inc/libs/clearbricks/zip/class.zip.php | 370 -- v2/dotclear/inc/load_plugin_file.php | 87 - v2/dotclear/inc/prepend.php | 286 -- v2/dotclear/inc/public/class.dc.template.php | 3095 ----------------- .../inc/public/default-templates/404.html | 62 - .../public/default-templates/_flv_player.html | 8 - .../inc/public/default-templates/_footer.html | 5 - .../inc/public/default-templates/_head.html | 12 - .../public/default-templates/_mp3_player.html | 6 - .../inc/public/default-templates/_top.html | 10 - .../inc/public/default-templates/archive.html | 79 - .../default-templates/archive_month.html | 96 - .../default-templates/atom-comments.xml | 47 - .../inc/public/default-templates/atom.xml | 50 - .../public/default-templates/category.html | 167 - .../inc/public/default-templates/home.html | 144 - .../default-templates/password-form.html | 41 - .../inc/public/default-templates/post.html | 274 -- .../default-templates/rss2-comments.xml | 48 - .../inc/public/default-templates/rss2.xml | 49 - .../inc/public/default-templates/rss2.xsl | 120 - .../inc/public/default-templates/search.html | 152 - .../public/default-templates/user_head.html | 1 - v2/dotclear/inc/public/lib.tpl.context.php | 443 --- v2/dotclear/inc/public/lib.urlhandlers.php | 683 ---- v2/dotclear/inc/public/prepend.php | 156 - v2/dotclear/inc/public/rs.extension.php | 93 - v2/dotclear/inc/swf/player_flv.swf | Bin 12975 -> 0 bytes v2/dotclear/inc/swf/player_mp3.swf | Bin 6379 -> 0 bytes v2/dotclear/inc/swf/swfupload.swf | Bin 12787 -> 0 bytes v2/dotclear/index.php | 23 - v2/dotclear/locales/README | 1 - v2/dotclear/locales/en/date.lang.php | 38 - v2/dotclear/locales/en/date.po | 116 - v2/dotclear/locales/en/help/blog_pref.html | 148 - v2/dotclear/locales/en/help/categories.html | 47 - v2/dotclear/locales/en/help/comments.html | 58 - v2/dotclear/locales/en/help/media.html | 90 - v2/dotclear/locales/en/help/post.html | 125 - v2/dotclear/locales/en/help/posts.html | 65 - v2/dotclear/locales/en/help/user.html | 71 - v2/dotclear/locales/en/help/user_pref.html | 84 - v2/dotclear/locales/en/help/wiki.html | 85 - v2/dotclear/locales/en/main.lang.php | 19 - v2/dotclear/locales/en/main.po | 2785 --------------- v2/dotclear/locales/en/plugins.lang.php | 45 - v2/dotclear/locales/en/plugins.po | 1573 --------- v2/dotclear/locales/en/public.lang.php | 19 - v2/dotclear/locales/en/public.po | 243 -- v2/dotclear/locales/en/resources.php | 35 - v2/dotclear/locales/fr/date.lang.php | 58 - v2/dotclear/locales/fr/date.po | 136 - v2/dotclear/locales/fr/help/blowupConfig.html | 71 - .../locales/fr/help/core_blog_pref.html | 191 - .../locales/fr/help/core_categories.html | 50 - .../locales/fr/help/core_comments.html | 59 - v2/dotclear/locales/fr/help/core_media.html | 97 - v2/dotclear/locales/fr/help/core_post.html | 137 - v2/dotclear/locales/fr/help/core_posts.html | 65 - v2/dotclear/locales/fr/help/core_user.html | 74 - .../locales/fr/help/core_user_pref.html | 91 - v2/dotclear/locales/fr/help/core_wiki.html | 85 - v2/dotclear/locales/fr/help/themeEditor.html | 37 - v2/dotclear/locales/fr/main.lang.php | 923 ----- v2/dotclear/locales/fr/main.po | 2896 --------------- v2/dotclear/locales/fr/plugins.lang.php | 530 --- v2/dotclear/locales/fr/plugins.po | 1769 ---------- v2/dotclear/locales/fr/public.lang.php | 94 - v2/dotclear/locales/fr/public.po | 241 -- v2/dotclear/locales/fr/resources.php | 23 - v2/dotclear/plugins/.htaccess | 1 - v2/dotclear/plugins/aboutConfig/_admin.php | 17 - v2/dotclear/plugins/aboutConfig/_define.php | 20 - v2/dotclear/plugins/aboutConfig/icon-big.png | Bin 9886 -> 0 bytes v2/dotclear/plugins/aboutConfig/icon.png | Bin 1679 -> 0 bytes v2/dotclear/plugins/aboutConfig/index.php | 240 -- v2/dotclear/plugins/akismet/_define.php | 24 - v2/dotclear/plugins/akismet/_prepend.php | 17 - .../akismet/class.dc.filter.akismet.php | 260 -- v2/dotclear/plugins/antispam/_admin.php | 73 - v2/dotclear/plugins/antispam/_define.php | 24 - v2/dotclear/plugins/antispam/_install.php | 56 - v2/dotclear/plugins/antispam/_prepend.php | 30 - v2/dotclear/plugins/antispam/_public.php | 17 - v2/dotclear/plugins/antispam/antispam.js | 3 - v2/dotclear/plugins/antispam/feed.png | Bin 404 -> 0 bytes .../antispam/filters/class.dc.filter.ip.php | 312 -- .../filters/class.dc.filter.iplookup.php | 121 - .../filters/class.dc.filter.linkslookup.php | 74 - .../filters/class.dc.filter.words.php | 356 -- v2/dotclear/plugins/antispam/icon-big.png | Bin 5758 -> 0 bytes v2/dotclear/plugins/antispam/icon.png | Bin 1734 -> 0 bytes .../antispam/inc/class.dc.spamfilter.php | 161 - .../antispam/inc/class.dc.spamfilters.php | 164 - .../plugins/antispam/inc/lib.dc.antispam.php | 211 -- .../antispam/inc/lib.dc.antispam.url.php | 99 - v2/dotclear/plugins/antispam/index.php | 233 -- v2/dotclear/plugins/antispam/style.css | 23 - v2/dotclear/plugins/attachments/_admin.php | 75 - v2/dotclear/plugins/attachments/_define.php | 24 - v2/dotclear/plugins/attachments/_public.php | 248 -- v2/dotclear/plugins/blogroll/_admin.php | 34 - v2/dotclear/plugins/blogroll/_define.php | 23 - v2/dotclear/plugins/blogroll/_install.php | 46 - v2/dotclear/plugins/blogroll/_prepend.php | 15 - v2/dotclear/plugins/blogroll/_public.php | 233 -- v2/dotclear/plugins/blogroll/_widgets.php | 44 - .../plugins/blogroll/class.dc.blogroll.php | 198 -- .../blogroll/class.dc.importblogroll.php | 101 - v2/dotclear/plugins/blogroll/edit.php | 241 -- v2/dotclear/plugins/blogroll/icon-small.png | Bin 1810 -> 0 bytes v2/dotclear/plugins/blogroll/icon.png | Bin 7485 -> 0 bytes v2/dotclear/plugins/blogroll/index.php | 414 --- .../blogroll/locales/en/help/blogroll.html | 41 - .../plugins/blogroll/locales/en/resources.php | 18 - .../blogroll/locales/fr/help/blogroll.html | 38 - .../plugins/blogroll/locales/fr/resources.php | 18 - v2/dotclear/plugins/blowupConfig/_admin.php | 26 - v2/dotclear/plugins/blowupConfig/_define.php | 23 - v2/dotclear/plugins/blowupConfig/_install.php | 25 - v2/dotclear/plugins/blowupConfig/_public.php | 196 -- .../blowupConfig/alpha-img/comment-b.png | Bin 1328 -> 0 bytes .../blowupConfig/alpha-img/comment-t.png | Bin 1549 -> 0 bytes .../blowupConfig/alpha-img/gradient-d.png | Bin 1432 -> 0 bytes .../blowupConfig/alpha-img/gradient-l.png | Bin 1443 -> 0 bytes .../blowupConfig/alpha-img/gradient-m.png | Bin 1446 -> 0 bytes .../plugins/blowupConfig/alpha-img/page-b.png | Bin 1340 -> 0 bytes .../blowupConfig/alpha-img/page-bg.png | Bin 1263 -> 0 bytes .../blowupConfig/alpha-img/page-t/animals.png | Bin 28044 -> 0 bytes .../blowupConfig/alpha-img/page-t/blank.png | Bin 1892 -> 0 bytes .../alpha-img/page-t/butterflies.png | Bin 6350 -> 0 bytes .../blowupConfig/alpha-img/page-t/default.png | Bin 1926 -> 0 bytes .../alpha-img/page-t/flamingo.png | Bin 12864 -> 0 bytes .../alpha-img/page-t/flourish-1.png | Bin 5045 -> 0 bytes .../alpha-img/page-t/flourish-2.png | Bin 12838 -> 0 bytes .../alpha-img/page-t/image-mask.png | Bin 1982 -> 0 bytes .../alpha-img/page-t/light-trails-1.png | Bin 28612 -> 0 bytes .../alpha-img/page-t/light-trails-2.png | Bin 40999 -> 0 bytes .../alpha-img/page-t/light-trails-3.png | Bin 38308 -> 0 bytes .../alpha-img/page-t/light-trails-4.png | Bin 32171 -> 0 bytes .../blowupConfig/alpha-img/page-t/rabbit.png | Bin 3208 -> 0 bytes .../alpha-img/page-t/roadrunner-1.png | Bin 6337 -> 0 bytes .../alpha-img/page-t/roadrunner-2.png | Bin 8997 -> 0 bytes .../blowupConfig/alpha-img/page-t/typo.png | Bin 15365 -> 0 bytes v2/dotclear/plugins/blowupConfig/config.js | 11 - v2/dotclear/plugins/blowupConfig/help.html | 55 - v2/dotclear/plugins/blowupConfig/index.php | 464 --- .../blowupConfig/lib/class.blowup.config.php | 429 --- .../plugins/fairTrackbacks/_define.php | 24 - .../plugins/fairTrackbacks/_prepend.php | 22 - .../plugins/fairTrackbacks/_public.php | 18 - .../class.dc.filter.fairtrackbacks.php | 85 - v2/dotclear/plugins/importExport/_admin.php | 35 - v2/dotclear/plugins/importExport/_define.php | 21 - v2/dotclear/plugins/importExport/_prepend.php | 42 - v2/dotclear/plugins/importExport/icon-big.png | Bin 6024 -> 0 bytes v2/dotclear/plugins/importExport/icon.png | Bin 1666 -> 0 bytes .../importExport/inc/class.dc.export.flat.php | 241 -- .../importExport/inc/class.dc.ieModule.php | 80 - .../importExport/inc/class.dc.import.dc1.php | 625 ---- .../importExport/inc/class.dc.import.feed.php | 99 - .../importExport/inc/class.dc.import.flat.php | 325 -- .../importExport/inc/class.dc.import.wp.php | 788 ----- .../inc/flat/class.flat.backup.php | 148 - .../inc/flat/class.flat.export.php | 106 - .../inc/flat/class.flat.import.php | 869 ----- .../plugins/importExport/inc/img/progress.png | Bin 858 -> 0 bytes v2/dotclear/plugins/importExport/index.php | 95 - v2/dotclear/plugins/importExport/js/script.js | 3 - .../importExport/locales/fr/main.lang.php | 92 - .../plugins/importExport/locales/fr/main.po | 333 -- v2/dotclear/plugins/importExport/style.css | 25 - v2/dotclear/plugins/maintenance/_admin.php | 26 - v2/dotclear/plugins/maintenance/_define.php | 20 - v2/dotclear/plugins/maintenance/icon-big.png | Bin 6729 -> 0 bytes v2/dotclear/plugins/maintenance/icon.png | Bin 1626 -> 0 bytes v2/dotclear/plugins/maintenance/index.php | 186 - .../locales/en/help/maintenance.html | 41 - .../maintenance/locales/en/resources.php | 18 - .../locales/fr/help/maintenance.html | 39 - .../maintenance/locales/fr/resources.php | 18 - v2/dotclear/plugins/pages/_admin.php | 51 - v2/dotclear/plugins/pages/_define.php | 24 - v2/dotclear/plugins/pages/_prepend.php | 21 - v2/dotclear/plugins/pages/_public.php | 267 -- v2/dotclear/plugins/pages/_widgets.php | 41 - .../plugins/pages/default-templates/page.html | 247 -- v2/dotclear/plugins/pages/icon-big.png | Bin 2736 -> 0 bytes v2/dotclear/plugins/pages/icon-np-big.png | Bin 2635 -> 0 bytes v2/dotclear/plugins/pages/icon-np.png | Bin 1369 -> 0 bytes v2/dotclear/plugins/pages/icon.png | Bin 1509 -> 0 bytes v2/dotclear/plugins/pages/index.php | 23 - v2/dotclear/plugins/pages/list.php | 205 -- .../plugins/pages/locales/en/help/page.html | 165 - .../plugins/pages/locales/en/help/pages.html | 22 - .../plugins/pages/locales/en/resources.php | 21 - .../plugins/pages/locales/fr/help/page.html | 172 - .../plugins/pages/locales/fr/help/pages.html | 22 - .../plugins/pages/locales/fr/resources.php | 21 - v2/dotclear/plugins/pages/page.php | 659 ---- v2/dotclear/plugins/pings/_admin.php | 47 - v2/dotclear/plugins/pings/_define.php | 23 - v2/dotclear/plugins/pings/icon-big.png | Bin 5223 -> 0 bytes v2/dotclear/plugins/pings/icon.png | Bin 1370 -> 0 bytes v2/dotclear/plugins/pings/index.php | 101 - v2/dotclear/plugins/pings/lib.pings.php | 99 - v2/dotclear/plugins/pings/post.js | 3 - v2/dotclear/plugins/simpleMenu/_admin.php | 32 - v2/dotclear/plugins/simpleMenu/_define.php | 23 - v2/dotclear/plugins/simpleMenu/_install.php | 29 - v2/dotclear/plugins/simpleMenu/_public.php | 116 - v2/dotclear/plugins/simpleMenu/_widgets.php | 25 - v2/dotclear/plugins/simpleMenu/icon-small.png | Bin 1328 -> 0 bytes v2/dotclear/plugins/simpleMenu/icon.png | Bin 2188 -> 0 bytes v2/dotclear/plugins/simpleMenu/index.php | 569 --- .../simpleMenu/locales/en/help/help.html | 31 - .../simpleMenu/locales/en/resources.php | 18 - .../simpleMenu/locales/fr/help/help.html | 31 - .../simpleMenu/locales/fr/resources.php | 18 - v2/dotclear/plugins/tags/_admin.php | 327 -- v2/dotclear/plugins/tags/_define.php | 23 - v2/dotclear/plugins/tags/_prepend.php | 17 - v2/dotclear/plugins/tags/_public.php | 374 -- v2/dotclear/plugins/tags/_widgets.php | 38 - v2/dotclear/plugins/tags/_xmlrpc.php | 50 - .../plugins/tags/default-templates/tag.html | 153 - .../plugins/tags/default-templates/tags.html | 69 - v2/dotclear/plugins/tags/icon-big.png | Bin 4765 -> 0 bytes v2/dotclear/plugins/tags/icon.png | Bin 1665 -> 0 bytes v2/dotclear/plugins/tags/img/loader.gif | Bin 1737 -> 0 bytes v2/dotclear/plugins/tags/img/tag-add.png | Bin 568 -> 0 bytes v2/dotclear/plugins/tags/index.php | 22 - .../plugins/tags/js/jquery.autocomplete.js | 56 - v2/dotclear/plugins/tags/js/post.js | 10 - v2/dotclear/plugins/tags/js/posts_actions.js | 4 - v2/dotclear/plugins/tags/style.css | 100 - v2/dotclear/plugins/tags/tag_posts.php | 167 - v2/dotclear/plugins/tags/tags.php | 77 - v2/dotclear/plugins/themeEditor/_admin.php | 26 - v2/dotclear/plugins/themeEditor/_define.php | 20 - .../plugins/themeEditor/class.themeEditor.php | 252 -- v2/dotclear/plugins/themeEditor/help.html | 28 - v2/dotclear/plugins/themeEditor/index.php | 128 - v2/dotclear/plugins/themeEditor/script.js | 3 - v2/dotclear/plugins/themeEditor/style.css | 29 - v2/dotclear/plugins/userPref/_admin.php | 17 - v2/dotclear/plugins/userPref/_define.php | 20 - v2/dotclear/plugins/userPref/icon-big.png | Bin 6605 -> 0 bytes v2/dotclear/plugins/userPref/icon.png | Bin 1606 -> 0 bytes v2/dotclear/plugins/userPref/index.php | 236 -- v2/dotclear/plugins/widgets/_admin.php | 26 - .../plugins/widgets/_default_widgets.php | 91 - v2/dotclear/plugins/widgets/_define.php | 24 - v2/dotclear/plugins/widgets/_install.php | 40 - v2/dotclear/plugins/widgets/_public.php | 131 - .../plugins/widgets/_widgets_functions.php | 369 -- v2/dotclear/plugins/widgets/class.widgets.php | 263 -- v2/dotclear/plugins/widgets/dragdrop.js | 29 - v2/dotclear/plugins/widgets/icon-big.png | Bin 7965 -> 0 bytes v2/dotclear/plugins/widgets/icon.png | Bin 1568 -> 0 bytes v2/dotclear/plugins/widgets/index.php | 340 -- v2/dotclear/plugins/widgets/style.css | 80 - v2/dotclear/plugins/widgets/widgets.js | 22 - v2/dotclear/themes/blueSilence/_define.php | 20 - v2/dotclear/themes/blueSilence/img/attach.png | Bin 321 -> 0 bytes .../themes/blueSilence/img/background.png | Bin 588 -> 0 bytes .../themes/blueSilence/img/commentaire.png | Bin 325 -> 0 bytes .../blueSilence/img/commentaire_bulle.png | Bin 312 -> 0 bytes v2/dotclear/themes/blueSilence/img/footer.png | Bin 827 -> 0 bytes v2/dotclear/themes/blueSilence/img/li.png | Bin 154 -> 0 bytes v2/dotclear/themes/blueSilence/img/report.png | Bin 396 -> 0 bytes .../themes/blueSilence/img/retrolien.png | Bin 452 -> 0 bytes v2/dotclear/themes/blueSilence/img/rss.png | Bin 549 -> 0 bytes .../themes/blueSilence/img/sidebar_li.png | Bin 115 -> 0 bytes v2/dotclear/themes/blueSilence/img/tag.png | Bin 308 -> 0 bytes v2/dotclear/themes/blueSilence/img/tags.png | Bin 321 -> 0 bytes v2/dotclear/themes/blueSilence/img/top.jpg | Bin 11038 -> 0 bytes v2/dotclear/themes/blueSilence/screenshot.jpg | Bin 17165 -> 0 bytes v2/dotclear/themes/blueSilence/style.css | 879 ----- v2/dotclear/themes/customCSS/_config.php | 41 - v2/dotclear/themes/customCSS/_define.php | 20 - v2/dotclear/themes/customCSS/_public.php | 26 - .../themes/customCSS/locales/fr/main.lang.php | 22 - .../themes/customCSS/locales/fr/main.po | 27 - v2/dotclear/themes/customCSS/style.css | 0 v2/dotclear/themes/default/_define.php | 20 - v2/dotclear/themes/default/img/attach.png | Bin 1329 -> 0 bytes v2/dotclear/themes/default/img/body-bg.png | Bin 211 -> 0 bytes v2/dotclear/themes/default/img/comment-b.png | Bin 175 -> 0 bytes v2/dotclear/themes/default/img/comment-t.png | Bin 422 -> 0 bytes v2/dotclear/themes/default/img/comment.png | Bin 1415 -> 0 bytes .../themes/default/img/commentmy-b.png | Bin 186 -> 0 bytes .../themes/default/img/commentmy-t.png | Bin 442 -> 0 bytes v2/dotclear/themes/default/img/feed.png | Bin 2046 -> 0 bytes v2/dotclear/themes/default/img/page-b.png | Bin 189 -> 0 bytes v2/dotclear/themes/default/img/page-bg.png | Bin 1263 -> 0 bytes v2/dotclear/themes/default/img/page-t.png | Bin 25574 -> 0 bytes v2/dotclear/themes/default/img/tag.png | Bin 381 -> 0 bytes v2/dotclear/themes/default/img/trackback.png | Bin 1269 -> 0 bytes .../themes/default/js/jquery.cookie.js | 6 - v2/dotclear/themes/default/js/jquery.js | 471 --- v2/dotclear/themes/default/js/post.js | 8 - v2/dotclear/themes/default/print.css | 50 - v2/dotclear/themes/default/screenshot.jpg | Bin 16340 -> 0 bytes v2/dotclear/themes/default/smilies/alien.png | Bin 558 -> 0 bytes v2/dotclear/themes/default/smilies/angry.png | Bin 650 -> 0 bytes v2/dotclear/themes/default/smilies/arrow.png | Bin 600 -> 0 bytes .../themes/default/smilies/confused.png | Bin 522 -> 0 bytes v2/dotclear/themes/default/smilies/cool.png | Bin 624 -> 0 bytes v2/dotclear/themes/default/smilies/cry.png | Bin 700 -> 0 bytes v2/dotclear/themes/default/smilies/dizzy.png | Bin 634 -> 0 bytes v2/dotclear/themes/default/smilies/eek.png | Bin 565 -> 0 bytes v2/dotclear/themes/default/smilies/evil.png | Bin 623 -> 0 bytes v2/dotclear/themes/default/smilies/exclam.png | Bin 519 -> 0 bytes v2/dotclear/themes/default/smilies/idea.png | Bin 627 -> 0 bytes v2/dotclear/themes/default/smilies/laugh.png | Bin 590 -> 0 bytes v2/dotclear/themes/default/smilies/lol.png | Bin 567 -> 0 bytes .../themes/default/smilies/mrgreen.png | Bin 568 -> 0 bytes v2/dotclear/themes/default/smilies/normal.png | Bin 522 -> 0 bytes .../themes/default/smilies/question.png | Bin 580 -> 0 bytes v2/dotclear/themes/default/smilies/razz.png | Bin 601 -> 0 bytes .../themes/default/smilies/redface.png | Bin 492 -> 0 bytes .../themes/default/smilies/rolleyes.png | Bin 595 -> 0 bytes v2/dotclear/themes/default/smilies/sad.png | Bin 590 -> 0 bytes v2/dotclear/themes/default/smilies/smile.png | Bin 555 -> 0 bytes .../themes/default/smilies/smilies.txt | 17 - .../themes/default/smilies/surprised.png | Bin 637 -> 0 bytes v2/dotclear/themes/default/smilies/wink.png | Bin 546 -> 0 bytes v2/dotclear/themes/default/style.css | 564 --- v2/dotclear/themes/ductile/_config.php | 643 ---- v2/dotclear/themes/ductile/_define.php | 22 - v2/dotclear/themes/ductile/_prepend.php | 70 - v2/dotclear/themes/ductile/_public.php | 426 --- v2/dotclear/themes/ductile/ductile.js | 77 - v2/dotclear/themes/ductile/ie.css | 167 - v2/dotclear/themes/ductile/img/404.png | Bin 12795 -> 0 bytes v2/dotclear/themes/ductile/img/download.png | Bin 1326 -> 0 bytes v2/dotclear/themes/ductile/img/feed.png | Bin 654 -> 0 bytes v2/dotclear/themes/ductile/img/filet.png | Bin 945 -> 0 bytes v2/dotclear/themes/ductile/img/hline.png | Bin 925 -> 0 bytes v2/dotclear/themes/ductile/img/info-co.png | Bin 2475 -> 0 bytes v2/dotclear/themes/ductile/img/last-hline.png | Bin 947 -> 0 bytes v2/dotclear/themes/ductile/img/logo.png | Bin 2955 -> 0 bytes v2/dotclear/themes/ductile/img/menu.png | Bin 690 -> 0 bytes v2/dotclear/themes/ductile/img/menumobile.png | Bin 449 -> 0 bytes v2/dotclear/themes/ductile/img/minus-plus.png | Bin 1094 -> 0 bytes v2/dotclear/themes/ductile/img/post-info.png | Bin 2111 -> 0 bytes v2/dotclear/themes/ductile/img/squares.png | Bin 1151 -> 0 bytes .../themes/ductile/img/sticker-about.png | Bin 1033 -> 0 bytes .../themes/ductile/img/sticker-contact.png | Bin 1608 -> 0 bytes .../themes/ductile/img/sticker-feed.png | Bin 1447 -> 0 bytes v2/dotclear/themes/ductile/img/vline.png | Bin 928 -> 0 bytes .../themes/ductile/locales/en/help/help.html | 83 - .../themes/ductile/locales/en/main.lang.php | 21 - v2/dotclear/themes/ductile/locales/en/main.po | 5 - .../themes/ductile/locales/en/resources.php | 18 - .../themes/ductile/locales/es/main.lang.php | 33 - v2/dotclear/themes/ductile/locales/es/main.po | 41 - .../themes/ductile/locales/fr/admin.lang.php | 67 - .../themes/ductile/locales/fr/admin.po | 143 - .../themes/ductile/locales/fr/help/help.html | 96 - .../themes/ductile/locales/fr/main.lang.php | 33 - v2/dotclear/themes/ductile/locales/fr/main.po | 41 - .../themes/ductile/locales/fr/resources.php | 18 - v2/dotclear/themes/ductile/mediaqueries.css | 389 --- v2/dotclear/themes/ductile/rebase.css | 107 - v2/dotclear/themes/ductile/screenshot.jpg | Bin 17218 -> 0 bytes v2/dotclear/themes/ductile/style.css | 1077 ------ v2/dotclear/themes/ductile/tpl/404.html | 59 - .../themes/ductile/tpl/_entry-full.html | 55 - .../themes/ductile/tpl/_entry-short.html | 78 - .../themes/ductile/tpl/_entry-title.html | 41 - v2/dotclear/themes/ductile/tpl/_footer.html | 13 - v2/dotclear/themes/ductile/tpl/_head.html | 17 - .../themes/ductile/tpl/_pagination.html | 13 - v2/dotclear/themes/ductile/tpl/_sidebar.html | 8 - .../themes/ductile/tpl/_simple-entry.html | 179 - v2/dotclear/themes/ductile/tpl/_top.html | 20 - v2/dotclear/themes/ductile/tpl/archive.html | 144 - .../themes/ductile/tpl/archive_month.html | 76 - v2/dotclear/themes/ductile/tpl/category.html | 112 - v2/dotclear/themes/ductile/tpl/home.html | 97 - v2/dotclear/themes/ductile/tpl/page.html | 62 - v2/dotclear/themes/ductile/tpl/post.html | 83 - v2/dotclear/themes/ductile/tpl/search.html | 99 - v2/dotclear/themes/ductile/tpl/tag.html | 88 - v2/dotclear/themes/ductile/tpl/tags.html | 60 - 699 files changed, 93361 deletions(-) delete mode 100644 .htaccess delete mode 100644 v2/dotclear/CHANGELOG delete mode 100644 v2/dotclear/CREDITS delete mode 100644 v2/dotclear/LICENSE delete mode 100644 v2/dotclear/README delete mode 100644 v2/dotclear/admin/auth.php delete mode 100644 v2/dotclear/admin/blog.php delete mode 100644 v2/dotclear/admin/blog_del.php delete mode 100644 v2/dotclear/admin/blog_pref.php delete mode 100644 v2/dotclear/admin/blog_theme.php delete mode 100644 v2/dotclear/admin/blogs.php delete mode 100644 v2/dotclear/admin/categories.php delete mode 100644 v2/dotclear/admin/category.php delete mode 100644 v2/dotclear/admin/comment.php delete mode 100644 v2/dotclear/admin/comments.php delete mode 100644 v2/dotclear/admin/comments_actions.php delete mode 100644 v2/dotclear/admin/dispatcher.php delete mode 100644 v2/dotclear/admin/images/add.png delete mode 100644 v2/dotclear/admin/images/admin.png delete mode 100644 v2/dotclear/admin/images/attach.png delete mode 100644 v2/dotclear/admin/images/check-off.png delete mode 100644 v2/dotclear/admin/images/check-on.png delete mode 100644 v2/dotclear/admin/images/check-wrn.png delete mode 100644 v2/dotclear/admin/images/date-picker.png delete mode 100644 v2/dotclear/admin/images/dotclear_pw.png delete mode 100644 v2/dotclear/admin/images/edit-mini.png delete mode 100644 v2/dotclear/admin/images/favicon.png delete mode 100644 v2/dotclear/admin/images/help.png delete mode 100644 v2/dotclear/admin/images/junk.png delete mode 100644 v2/dotclear/admin/images/locker.png delete mode 100644 v2/dotclear/admin/images/logout.png delete mode 100644 v2/dotclear/admin/images/media/audio.png delete mode 100644 v2/dotclear/admin/images/media/blank.png delete mode 100644 v2/dotclear/admin/images/media/document.png delete mode 100644 v2/dotclear/admin/images/media/executable.png delete mode 100644 v2/dotclear/admin/images/media/folder.png delete mode 100644 v2/dotclear/admin/images/media/html.png delete mode 100644 v2/dotclear/admin/images/media/image.png delete mode 100644 v2/dotclear/admin/images/media/package.png delete mode 100644 v2/dotclear/admin/images/media/presentation.png delete mode 100644 v2/dotclear/admin/images/media/spreadsheet.png delete mode 100644 v2/dotclear/admin/images/media/text.png delete mode 100644 v2/dotclear/admin/images/media/video.png delete mode 100644 v2/dotclear/admin/images/menu/add_to_favorites.png delete mode 100644 v2/dotclear/admin/images/menu/blog-pref-b.png delete mode 100644 v2/dotclear/admin/images/menu/blog-pref.png delete mode 100644 v2/dotclear/admin/images/menu/blog-theme-b.png delete mode 100644 v2/dotclear/admin/images/menu/blogs-b.png delete mode 100644 v2/dotclear/admin/images/menu/blogs.png delete mode 100644 v2/dotclear/admin/images/menu/categories-b.png delete mode 100644 v2/dotclear/admin/images/menu/categories.png delete mode 100644 v2/dotclear/admin/images/menu/comments-b.png delete mode 100644 v2/dotclear/admin/images/menu/comments.png delete mode 100644 v2/dotclear/admin/images/menu/dashboard.png delete mode 100644 v2/dotclear/admin/images/menu/edit-b.png delete mode 100644 v2/dotclear/admin/images/menu/edit.png delete mode 100644 v2/dotclear/admin/images/menu/entries-b.png delete mode 100644 v2/dotclear/admin/images/menu/entries.png delete mode 100644 v2/dotclear/admin/images/menu/favorite-b.png delete mode 100644 v2/dotclear/admin/images/menu/favorite.png delete mode 100644 v2/dotclear/admin/images/menu/langs-b.png delete mode 100644 v2/dotclear/admin/images/menu/langs.png delete mode 100644 v2/dotclear/admin/images/menu/media-b.png delete mode 100644 v2/dotclear/admin/images/menu/media.png delete mode 100644 v2/dotclear/admin/images/menu/plugins-b.png delete mode 100644 v2/dotclear/admin/images/menu/plugins.png delete mode 100644 v2/dotclear/admin/images/menu/search-b.png delete mode 100644 v2/dotclear/admin/images/menu/search.png delete mode 100644 v2/dotclear/admin/images/menu/themes.png delete mode 100644 v2/dotclear/admin/images/menu/update.png delete mode 100644 v2/dotclear/admin/images/menu/user-pref-b.png delete mode 100644 v2/dotclear/admin/images/menu/user-pref.png delete mode 100644 v2/dotclear/admin/images/menu/users-b.png delete mode 100644 v2/dotclear/admin/images/menu/users.png delete mode 100644 v2/dotclear/admin/images/menu_off.png delete mode 100644 v2/dotclear/admin/images/menu_on.png delete mode 100644 v2/dotclear/admin/images/minus.png delete mode 100644 v2/dotclear/admin/images/noscreenshot.png delete mode 100644 v2/dotclear/admin/images/outgoing-blue.png delete mode 100644 v2/dotclear/admin/images/outgoing.png delete mode 100644 v2/dotclear/admin/images/picker.png delete mode 100644 v2/dotclear/admin/images/plus.png delete mode 100644 v2/dotclear/admin/images/scheduled.png delete mode 100644 v2/dotclear/admin/images/selected.png delete mode 100644 v2/dotclear/admin/images/superadmin.png delete mode 100644 v2/dotclear/admin/images/trash.png delete mode 100644 v2/dotclear/admin/index.php delete mode 100644 v2/dotclear/admin/install/check.php delete mode 100644 v2/dotclear/admin/install/index.php delete mode 100644 v2/dotclear/admin/install/wizard.php delete mode 100644 v2/dotclear/admin/js/_blog_pref.js delete mode 100644 v2/dotclear/admin/js/_blog_theme.js delete mode 100644 v2/dotclear/admin/js/_categories.js delete mode 100644 v2/dotclear/admin/js/_category.js delete mode 100644 v2/dotclear/admin/js/_comment.js delete mode 100644 v2/dotclear/admin/js/_comments.js delete mode 100644 v2/dotclear/admin/js/_index.js delete mode 100644 v2/dotclear/admin/js/_langs.js delete mode 100644 v2/dotclear/admin/js/_media.js delete mode 100644 v2/dotclear/admin/js/_media_item.js delete mode 100644 v2/dotclear/admin/js/_permissions.js delete mode 100644 v2/dotclear/admin/js/_permissions_blog.js delete mode 100644 v2/dotclear/admin/js/_plugins.js delete mode 100644 v2/dotclear/admin/js/_post.js delete mode 100644 v2/dotclear/admin/js/_posts_list.js delete mode 100644 v2/dotclear/admin/js/_preferences-dragdrop.js delete mode 100644 v2/dotclear/admin/js/_preferences.js delete mode 100644 v2/dotclear/admin/js/_trackbacks.js delete mode 100644 v2/dotclear/admin/js/_users.js delete mode 100644 v2/dotclear/admin/js/color-picker.js delete mode 100644 v2/dotclear/admin/js/common.js delete mode 100644 v2/dotclear/admin/js/confirm-close.js delete mode 100644 v2/dotclear/admin/js/date-picker.js delete mode 100644 v2/dotclear/admin/js/dragsort-tablerows.js delete mode 100644 v2/dotclear/admin/js/filter-controls.js delete mode 100644 v2/dotclear/admin/js/ie7/IE7.js delete mode 100644 v2/dotclear/admin/js/ie7/IE8.js delete mode 100644 v2/dotclear/admin/js/ie7/blank.gif delete mode 100644 v2/dotclear/admin/js/ie7/ie7-recalc.js delete mode 100644 v2/dotclear/admin/js/ie7/ie7-squish.js delete mode 100644 v2/dotclear/admin/js/jquery/jquery-ui-1.8.12.custom.min.js delete mode 100644 v2/dotclear/admin/js/jquery/jquery.bgFade.js delete mode 100644 v2/dotclear/admin/js/jquery/jquery.biscuit.js delete mode 100644 v2/dotclear/admin/js/jquery/jquery.candyUpload.js delete mode 100644 v2/dotclear/admin/js/jquery/jquery.farbtastic.js delete mode 100644 v2/dotclear/admin/js/jquery/jquery.js delete mode 100644 v2/dotclear/admin/js/jquery/jquery.modal.js delete mode 100644 v2/dotclear/admin/js/jquery/jquery.pageTabs.js delete mode 100644 v2/dotclear/admin/js/jsToolBar/jsToolBar.dotclear.js delete mode 100644 v2/dotclear/admin/js/jsToolBar/jsToolBar.js delete mode 100644 v2/dotclear/admin/js/jsToolBar/jsToolBar.wysiwyg.js delete mode 100644 v2/dotclear/admin/js/jsToolBar/popup_link.js delete mode 100644 v2/dotclear/admin/js/jsToolBar/popup_media.js delete mode 100644 v2/dotclear/admin/js/jsToolBar/popup_posts.js delete mode 100644 v2/dotclear/admin/js/meta-editor.js delete mode 100644 v2/dotclear/admin/js/prelude.js delete mode 100644 v2/dotclear/admin/js/tool-man/cookies.js delete mode 100644 v2/dotclear/admin/js/tool-man/coordinates.js delete mode 100644 v2/dotclear/admin/js/tool-man/core.js delete mode 100644 v2/dotclear/admin/js/tool-man/css.js delete mode 100644 v2/dotclear/admin/js/tool-man/drag.js delete mode 100644 v2/dotclear/admin/js/tool-man/dragsort.js delete mode 100644 v2/dotclear/admin/js/tool-man/events.js delete mode 100644 v2/dotclear/admin/langs.php delete mode 100644 v2/dotclear/admin/media.php delete mode 100644 v2/dotclear/admin/media_item.php delete mode 100644 v2/dotclear/admin/permissions.php delete mode 100644 v2/dotclear/admin/permissions_blog.php delete mode 100644 v2/dotclear/admin/plugin.php delete mode 100644 v2/dotclear/admin/plugins.php delete mode 100644 v2/dotclear/admin/popup_link.php delete mode 100644 v2/dotclear/admin/popup_posts.php delete mode 100644 v2/dotclear/admin/post.php delete mode 100644 v2/dotclear/admin/post_media.php delete mode 100644 v2/dotclear/admin/posts.php delete mode 100644 v2/dotclear/admin/posts_actions.php delete mode 100644 v2/dotclear/admin/preferences.php delete mode 100644 v2/dotclear/admin/search.php delete mode 100644 v2/dotclear/admin/services.php delete mode 100644 v2/dotclear/admin/style/add.png delete mode 100644 v2/dotclear/admin/style/candyUpload/cancel.png delete mode 100644 v2/dotclear/admin/style/candyUpload/loader.png delete mode 100644 v2/dotclear/admin/style/candyUpload/style.css delete mode 100644 v2/dotclear/admin/style/date-picker.css delete mode 100644 v2/dotclear/admin/style/dc_bg.png delete mode 100644 v2/dotclear/admin/style/dc_logo.png delete mode 100644 v2/dotclear/admin/style/dc_logo_small.png delete mode 100644 v2/dotclear/admin/style/default-rtl.css delete mode 100644 v2/dotclear/admin/style/default.css delete mode 100644 v2/dotclear/admin/style/dotclear-logo.png delete mode 100644 v2/dotclear/admin/style/dotclear-logo2.png delete mode 100644 v2/dotclear/admin/style/drag.png delete mode 100644 v2/dotclear/admin/style/farbtastic/farbtastic.css delete mode 100644 v2/dotclear/admin/style/farbtastic/marker.png delete mode 100644 v2/dotclear/admin/style/farbtastic/mask.png delete mode 100644 v2/dotclear/admin/style/farbtastic/wheel.png delete mode 100644 v2/dotclear/admin/style/grid.png delete mode 100644 v2/dotclear/admin/style/head-bg.png delete mode 100644 v2/dotclear/admin/style/iesucks.css delete mode 100644 v2/dotclear/admin/style/info.png delete mode 100644 v2/dotclear/admin/style/install.css delete mode 100644 v2/dotclear/admin/style/install/important.png delete mode 100644 v2/dotclear/admin/style/install/note.png delete mode 100644 v2/dotclear/admin/style/install/process_warning.png delete mode 100644 v2/dotclear/admin/style/install/w-logo.png delete mode 100644 v2/dotclear/admin/style/jsToolBar/bt_bquote.png delete mode 100644 v2/dotclear/admin/style/jsToolBar/bt_br.png delete mode 100644 v2/dotclear/admin/style/jsToolBar/bt_clean.png delete mode 100644 v2/dotclear/admin/style/jsToolBar/bt_code.png delete mode 100644 v2/dotclear/admin/style/jsToolBar/bt_del.png delete mode 100644 v2/dotclear/admin/style/jsToolBar/bt_em.png delete mode 100644 v2/dotclear/admin/style/jsToolBar/bt_img.png delete mode 100644 v2/dotclear/admin/style/jsToolBar/bt_img_select.png delete mode 100644 v2/dotclear/admin/style/jsToolBar/bt_ins.png delete mode 100644 v2/dotclear/admin/style/jsToolBar/bt_link.png delete mode 100644 v2/dotclear/admin/style/jsToolBar/bt_ol.png delete mode 100644 v2/dotclear/admin/style/jsToolBar/bt_paragraph.png delete mode 100644 v2/dotclear/admin/style/jsToolBar/bt_post.png delete mode 100644 v2/dotclear/admin/style/jsToolBar/bt_pre.png delete mode 100644 v2/dotclear/admin/style/jsToolBar/bt_quote.png delete mode 100644 v2/dotclear/admin/style/jsToolBar/bt_strong.png delete mode 100644 v2/dotclear/admin/style/jsToolBar/bt_ul.png delete mode 100644 v2/dotclear/admin/style/jsToolBar/jsToolBar.css delete mode 100644 v2/dotclear/admin/style/jsToolBar/resize.png delete mode 100644 v2/dotclear/admin/style/magnifier.png delete mode 100644 v2/dotclear/admin/style/modal/close.png delete mode 100644 v2/dotclear/admin/style/modal/loader.gif delete mode 100644 v2/dotclear/admin/style/modal/modal.css delete mode 100644 v2/dotclear/admin/style/msg-error.png delete mode 100644 v2/dotclear/admin/style/msg-std.png delete mode 100644 v2/dotclear/admin/style/package.png delete mode 100644 v2/dotclear/admin/style/page-bg.png delete mode 100644 v2/dotclear/admin/style/warning.png delete mode 100644 v2/dotclear/admin/trackbacks.php delete mode 100644 v2/dotclear/admin/update.php delete mode 100644 v2/dotclear/admin/user.php delete mode 100644 v2/dotclear/admin/users.php delete mode 100644 v2/dotclear/admin/xmlrpc.php delete mode 100644 v2/dotclear/cache/.htaccess delete mode 100644 v2/dotclear/db/.htaccess delete mode 100644 v2/dotclear/inc/.htaccess delete mode 100644 v2/dotclear/inc/admin/class.dc.menu.php delete mode 100644 v2/dotclear/inc/admin/lib.dc.page.php delete mode 100644 v2/dotclear/inc/admin/lib.pager.php delete mode 100644 v2/dotclear/inc/admin/prepend.php delete mode 100644 v2/dotclear/inc/config.php.in delete mode 100644 v2/dotclear/inc/core/class.dc.auth.php delete mode 100644 v2/dotclear/inc/core/class.dc.blog.php delete mode 100644 v2/dotclear/inc/core/class.dc.categories.php delete mode 100644 v2/dotclear/inc/core/class.dc.core.php delete mode 100644 v2/dotclear/inc/core/class.dc.error.php delete mode 100644 v2/dotclear/inc/core/class.dc.log.php delete mode 100644 v2/dotclear/inc/core/class.dc.media.php delete mode 100644 v2/dotclear/inc/core/class.dc.meta.php delete mode 100644 v2/dotclear/inc/core/class.dc.modules.php delete mode 100644 v2/dotclear/inc/core/class.dc.namespace.php delete mode 100644 v2/dotclear/inc/core/class.dc.postmedia.php delete mode 100644 v2/dotclear/inc/core/class.dc.prefs.php delete mode 100644 v2/dotclear/inc/core/class.dc.rest.php delete mode 100644 v2/dotclear/inc/core/class.dc.rs.extensions.php delete mode 100644 v2/dotclear/inc/core/class.dc.settings.php delete mode 100644 v2/dotclear/inc/core/class.dc.themes.php delete mode 100644 v2/dotclear/inc/core/class.dc.trackback.php delete mode 100644 v2/dotclear/inc/core/class.dc.update.php delete mode 100644 v2/dotclear/inc/core/class.dc.utils.php delete mode 100644 v2/dotclear/inc/core/class.dc.workspace.php delete mode 100644 v2/dotclear/inc/core/class.dc.xmlrpc.php delete mode 100644 v2/dotclear/inc/core_error.php delete mode 100644 v2/dotclear/inc/dbschema/db-schema.php delete mode 100644 v2/dotclear/inc/dbschema/upgrade-cli.php delete mode 100644 v2/dotclear/inc/dbschema/upgrade.php delete mode 100644 v2/dotclear/inc/digests delete mode 100644 v2/dotclear/inc/libs/clearbricks/Makefile delete mode 100644 v2/dotclear/inc/libs/clearbricks/README delete mode 100644 v2/dotclear/inc/libs/clearbricks/_common.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/common/_main.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/common/lib.crypt.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/common/lib.date.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/common/lib.files.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/common/lib.form.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/common/lib.html.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/common/lib.http.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/common/lib.l10n.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/common/lib.text.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/common/tz.dat delete mode 100644 v2/dotclear/inc/libs/clearbricks/dblayer/class.cursor.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/dblayer/class.mysql.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/dblayer/class.mysqli.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/dblayer/class.pgsql.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/dblayer/class.sqlite.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/dblayer/dblayer.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/dbschema/class.dbschema.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/dbschema/class.dbstruct.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/dbschema/class.mysql.dbschema.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/dbschema/class.mysqli.dbschema.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/dbschema/class.pgsql.dbschema.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/dbschema/class.sqlite.dbschema.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/debian/changelog delete mode 100644 v2/dotclear/inc/libs/clearbricks/debian/compat delete mode 100644 v2/dotclear/inc/libs/clearbricks/debian/control delete mode 100644 v2/dotclear/inc/libs/clearbricks/debian/copyright delete mode 100644 v2/dotclear/inc/libs/clearbricks/debian/dirs delete mode 100644 v2/dotclear/inc/libs/clearbricks/debian/docs delete mode 100644 v2/dotclear/inc/libs/clearbricks/debian/mkdcl.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/debian/rules delete mode 100644 v2/dotclear/inc/libs/clearbricks/diff/lib.diff.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/diff/lib.tidy.diff.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/ext/incutio.ixr_library.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/filemanager/class.filemanager.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/html.filter/class.html.filter.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/html.validator/class.html.validator.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/image/class.image.meta.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/image/class.image.tools.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/mail.convert/class.mail.convert.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/mail.mime/class.mime.message.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/mail/class.mail.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/mail/class.socket.mail.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/net.http.feed/class.feed.parser.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/net.http.feed/class.feed.reader.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/net.http/class.net.http.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/net.nntp/class.net.nntp.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/net.nntp/class.nntp.message.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/net.xmlrpc/class.net.xmlrpc.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/net/class.net.socket.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/pager/class.pager.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/rest/class.rest.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/session.db/class.session.db.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/template/class.template.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/text.wiki2xhtml/class.wiki2xhtml.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/url.handler/class.url.handler.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/xmlsql/class.xmlsql.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/zip/class.unzip.php delete mode 100644 v2/dotclear/inc/libs/clearbricks/zip/class.zip.php delete mode 100644 v2/dotclear/inc/load_plugin_file.php delete mode 100644 v2/dotclear/inc/prepend.php delete mode 100644 v2/dotclear/inc/public/class.dc.template.php delete mode 100644 v2/dotclear/inc/public/default-templates/404.html delete mode 100644 v2/dotclear/inc/public/default-templates/_flv_player.html delete mode 100644 v2/dotclear/inc/public/default-templates/_footer.html delete mode 100644 v2/dotclear/inc/public/default-templates/_head.html delete mode 100644 v2/dotclear/inc/public/default-templates/_mp3_player.html delete mode 100644 v2/dotclear/inc/public/default-templates/_top.html delete mode 100644 v2/dotclear/inc/public/default-templates/archive.html delete mode 100644 v2/dotclear/inc/public/default-templates/archive_month.html delete mode 100644 v2/dotclear/inc/public/default-templates/atom-comments.xml delete mode 100644 v2/dotclear/inc/public/default-templates/atom.xml delete mode 100644 v2/dotclear/inc/public/default-templates/category.html delete mode 100644 v2/dotclear/inc/public/default-templates/home.html delete mode 100644 v2/dotclear/inc/public/default-templates/password-form.html delete mode 100644 v2/dotclear/inc/public/default-templates/post.html delete mode 100644 v2/dotclear/inc/public/default-templates/rss2-comments.xml delete mode 100644 v2/dotclear/inc/public/default-templates/rss2.xml delete mode 100644 v2/dotclear/inc/public/default-templates/rss2.xsl delete mode 100644 v2/dotclear/inc/public/default-templates/search.html delete mode 100644 v2/dotclear/inc/public/default-templates/user_head.html delete mode 100644 v2/dotclear/inc/public/lib.tpl.context.php delete mode 100644 v2/dotclear/inc/public/lib.urlhandlers.php delete mode 100644 v2/dotclear/inc/public/prepend.php delete mode 100644 v2/dotclear/inc/public/rs.extension.php delete mode 100644 v2/dotclear/inc/swf/player_flv.swf delete mode 100644 v2/dotclear/inc/swf/player_mp3.swf delete mode 100644 v2/dotclear/inc/swf/swfupload.swf delete mode 100644 v2/dotclear/index.php delete mode 100644 v2/dotclear/locales/README delete mode 100644 v2/dotclear/locales/en/date.lang.php delete mode 100644 v2/dotclear/locales/en/date.po delete mode 100644 v2/dotclear/locales/en/help/blog_pref.html delete mode 100644 v2/dotclear/locales/en/help/categories.html delete mode 100644 v2/dotclear/locales/en/help/comments.html delete mode 100644 v2/dotclear/locales/en/help/media.html delete mode 100644 v2/dotclear/locales/en/help/post.html delete mode 100644 v2/dotclear/locales/en/help/posts.html delete mode 100644 v2/dotclear/locales/en/help/user.html delete mode 100644 v2/dotclear/locales/en/help/user_pref.html delete mode 100644 v2/dotclear/locales/en/help/wiki.html delete mode 100644 v2/dotclear/locales/en/main.lang.php delete mode 100644 v2/dotclear/locales/en/main.po delete mode 100644 v2/dotclear/locales/en/plugins.lang.php delete mode 100644 v2/dotclear/locales/en/plugins.po delete mode 100644 v2/dotclear/locales/en/public.lang.php delete mode 100644 v2/dotclear/locales/en/public.po delete mode 100644 v2/dotclear/locales/en/resources.php delete mode 100644 v2/dotclear/locales/fr/date.lang.php delete mode 100644 v2/dotclear/locales/fr/date.po delete mode 100644 v2/dotclear/locales/fr/help/blowupConfig.html delete mode 100644 v2/dotclear/locales/fr/help/core_blog_pref.html delete mode 100644 v2/dotclear/locales/fr/help/core_categories.html delete mode 100644 v2/dotclear/locales/fr/help/core_comments.html delete mode 100644 v2/dotclear/locales/fr/help/core_media.html delete mode 100644 v2/dotclear/locales/fr/help/core_post.html delete mode 100644 v2/dotclear/locales/fr/help/core_posts.html delete mode 100644 v2/dotclear/locales/fr/help/core_user.html delete mode 100644 v2/dotclear/locales/fr/help/core_user_pref.html delete mode 100644 v2/dotclear/locales/fr/help/core_wiki.html delete mode 100644 v2/dotclear/locales/fr/help/themeEditor.html delete mode 100644 v2/dotclear/locales/fr/main.lang.php delete mode 100644 v2/dotclear/locales/fr/main.po delete mode 100644 v2/dotclear/locales/fr/plugins.lang.php delete mode 100644 v2/dotclear/locales/fr/plugins.po delete mode 100644 v2/dotclear/locales/fr/public.lang.php delete mode 100644 v2/dotclear/locales/fr/public.po delete mode 100644 v2/dotclear/locales/fr/resources.php delete mode 100644 v2/dotclear/plugins/.htaccess delete mode 100644 v2/dotclear/plugins/aboutConfig/_admin.php delete mode 100644 v2/dotclear/plugins/aboutConfig/_define.php delete mode 100644 v2/dotclear/plugins/aboutConfig/icon-big.png delete mode 100644 v2/dotclear/plugins/aboutConfig/icon.png delete mode 100644 v2/dotclear/plugins/aboutConfig/index.php delete mode 100644 v2/dotclear/plugins/akismet/_define.php delete mode 100644 v2/dotclear/plugins/akismet/_prepend.php delete mode 100644 v2/dotclear/plugins/akismet/class.dc.filter.akismet.php delete mode 100644 v2/dotclear/plugins/antispam/_admin.php delete mode 100644 v2/dotclear/plugins/antispam/_define.php delete mode 100644 v2/dotclear/plugins/antispam/_install.php delete mode 100644 v2/dotclear/plugins/antispam/_prepend.php delete mode 100644 v2/dotclear/plugins/antispam/_public.php delete mode 100644 v2/dotclear/plugins/antispam/antispam.js delete mode 100644 v2/dotclear/plugins/antispam/feed.png delete mode 100644 v2/dotclear/plugins/antispam/filters/class.dc.filter.ip.php delete mode 100644 v2/dotclear/plugins/antispam/filters/class.dc.filter.iplookup.php delete mode 100644 v2/dotclear/plugins/antispam/filters/class.dc.filter.linkslookup.php delete mode 100644 v2/dotclear/plugins/antispam/filters/class.dc.filter.words.php delete mode 100644 v2/dotclear/plugins/antispam/icon-big.png delete mode 100644 v2/dotclear/plugins/antispam/icon.png delete mode 100644 v2/dotclear/plugins/antispam/inc/class.dc.spamfilter.php delete mode 100644 v2/dotclear/plugins/antispam/inc/class.dc.spamfilters.php delete mode 100644 v2/dotclear/plugins/antispam/inc/lib.dc.antispam.php delete mode 100644 v2/dotclear/plugins/antispam/inc/lib.dc.antispam.url.php delete mode 100644 v2/dotclear/plugins/antispam/index.php delete mode 100644 v2/dotclear/plugins/antispam/style.css delete mode 100644 v2/dotclear/plugins/attachments/_admin.php delete mode 100644 v2/dotclear/plugins/attachments/_define.php delete mode 100644 v2/dotclear/plugins/attachments/_public.php delete mode 100644 v2/dotclear/plugins/blogroll/_admin.php delete mode 100644 v2/dotclear/plugins/blogroll/_define.php delete mode 100644 v2/dotclear/plugins/blogroll/_install.php delete mode 100644 v2/dotclear/plugins/blogroll/_prepend.php delete mode 100644 v2/dotclear/plugins/blogroll/_public.php delete mode 100644 v2/dotclear/plugins/blogroll/_widgets.php delete mode 100644 v2/dotclear/plugins/blogroll/class.dc.blogroll.php delete mode 100644 v2/dotclear/plugins/blogroll/class.dc.importblogroll.php delete mode 100644 v2/dotclear/plugins/blogroll/edit.php delete mode 100644 v2/dotclear/plugins/blogroll/icon-small.png delete mode 100644 v2/dotclear/plugins/blogroll/icon.png delete mode 100644 v2/dotclear/plugins/blogroll/index.php delete mode 100644 v2/dotclear/plugins/blogroll/locales/en/help/blogroll.html delete mode 100644 v2/dotclear/plugins/blogroll/locales/en/resources.php delete mode 100644 v2/dotclear/plugins/blogroll/locales/fr/help/blogroll.html delete mode 100644 v2/dotclear/plugins/blogroll/locales/fr/resources.php delete mode 100644 v2/dotclear/plugins/blowupConfig/_admin.php delete mode 100644 v2/dotclear/plugins/blowupConfig/_define.php delete mode 100644 v2/dotclear/plugins/blowupConfig/_install.php delete mode 100644 v2/dotclear/plugins/blowupConfig/_public.php delete mode 100644 v2/dotclear/plugins/blowupConfig/alpha-img/comment-b.png delete mode 100644 v2/dotclear/plugins/blowupConfig/alpha-img/comment-t.png delete mode 100644 v2/dotclear/plugins/blowupConfig/alpha-img/gradient-d.png delete mode 100644 v2/dotclear/plugins/blowupConfig/alpha-img/gradient-l.png delete mode 100644 v2/dotclear/plugins/blowupConfig/alpha-img/gradient-m.png delete mode 100644 v2/dotclear/plugins/blowupConfig/alpha-img/page-b.png delete mode 100644 v2/dotclear/plugins/blowupConfig/alpha-img/page-bg.png delete mode 100644 v2/dotclear/plugins/blowupConfig/alpha-img/page-t/animals.png delete mode 100644 v2/dotclear/plugins/blowupConfig/alpha-img/page-t/blank.png delete mode 100644 v2/dotclear/plugins/blowupConfig/alpha-img/page-t/butterflies.png delete mode 100644 v2/dotclear/plugins/blowupConfig/alpha-img/page-t/default.png delete mode 100644 v2/dotclear/plugins/blowupConfig/alpha-img/page-t/flamingo.png delete mode 100644 v2/dotclear/plugins/blowupConfig/alpha-img/page-t/flourish-1.png delete mode 100644 v2/dotclear/plugins/blowupConfig/alpha-img/page-t/flourish-2.png delete mode 100644 v2/dotclear/plugins/blowupConfig/alpha-img/page-t/image-mask.png delete mode 100644 v2/dotclear/plugins/blowupConfig/alpha-img/page-t/light-trails-1.png delete mode 100644 v2/dotclear/plugins/blowupConfig/alpha-img/page-t/light-trails-2.png delete mode 100644 v2/dotclear/plugins/blowupConfig/alpha-img/page-t/light-trails-3.png delete mode 100644 v2/dotclear/plugins/blowupConfig/alpha-img/page-t/light-trails-4.png delete mode 100644 v2/dotclear/plugins/blowupConfig/alpha-img/page-t/rabbit.png delete mode 100644 v2/dotclear/plugins/blowupConfig/alpha-img/page-t/roadrunner-1.png delete mode 100644 v2/dotclear/plugins/blowupConfig/alpha-img/page-t/roadrunner-2.png delete mode 100644 v2/dotclear/plugins/blowupConfig/alpha-img/page-t/typo.png delete mode 100644 v2/dotclear/plugins/blowupConfig/config.js delete mode 100644 v2/dotclear/plugins/blowupConfig/help.html delete mode 100644 v2/dotclear/plugins/blowupConfig/index.php delete mode 100644 v2/dotclear/plugins/blowupConfig/lib/class.blowup.config.php delete mode 100644 v2/dotclear/plugins/fairTrackbacks/_define.php delete mode 100644 v2/dotclear/plugins/fairTrackbacks/_prepend.php delete mode 100644 v2/dotclear/plugins/fairTrackbacks/_public.php delete mode 100644 v2/dotclear/plugins/fairTrackbacks/class.dc.filter.fairtrackbacks.php delete mode 100644 v2/dotclear/plugins/importExport/_admin.php delete mode 100644 v2/dotclear/plugins/importExport/_define.php delete mode 100644 v2/dotclear/plugins/importExport/_prepend.php delete mode 100644 v2/dotclear/plugins/importExport/icon-big.png delete mode 100644 v2/dotclear/plugins/importExport/icon.png delete mode 100644 v2/dotclear/plugins/importExport/inc/class.dc.export.flat.php delete mode 100644 v2/dotclear/plugins/importExport/inc/class.dc.ieModule.php delete mode 100644 v2/dotclear/plugins/importExport/inc/class.dc.import.dc1.php delete mode 100644 v2/dotclear/plugins/importExport/inc/class.dc.import.feed.php delete mode 100644 v2/dotclear/plugins/importExport/inc/class.dc.import.flat.php delete mode 100644 v2/dotclear/plugins/importExport/inc/class.dc.import.wp.php delete mode 100644 v2/dotclear/plugins/importExport/inc/flat/class.flat.backup.php delete mode 100644 v2/dotclear/plugins/importExport/inc/flat/class.flat.export.php delete mode 100644 v2/dotclear/plugins/importExport/inc/flat/class.flat.import.php delete mode 100644 v2/dotclear/plugins/importExport/inc/img/progress.png delete mode 100644 v2/dotclear/plugins/importExport/index.php delete mode 100644 v2/dotclear/plugins/importExport/js/script.js delete mode 100644 v2/dotclear/plugins/importExport/locales/fr/main.lang.php delete mode 100644 v2/dotclear/plugins/importExport/locales/fr/main.po delete mode 100644 v2/dotclear/plugins/importExport/style.css delete mode 100644 v2/dotclear/plugins/maintenance/_admin.php delete mode 100644 v2/dotclear/plugins/maintenance/_define.php delete mode 100644 v2/dotclear/plugins/maintenance/icon-big.png delete mode 100644 v2/dotclear/plugins/maintenance/icon.png delete mode 100644 v2/dotclear/plugins/maintenance/index.php delete mode 100644 v2/dotclear/plugins/maintenance/locales/en/help/maintenance.html delete mode 100644 v2/dotclear/plugins/maintenance/locales/en/resources.php delete mode 100644 v2/dotclear/plugins/maintenance/locales/fr/help/maintenance.html delete mode 100644 v2/dotclear/plugins/maintenance/locales/fr/resources.php delete mode 100644 v2/dotclear/plugins/pages/_admin.php delete mode 100644 v2/dotclear/plugins/pages/_define.php delete mode 100644 v2/dotclear/plugins/pages/_prepend.php delete mode 100644 v2/dotclear/plugins/pages/_public.php delete mode 100644 v2/dotclear/plugins/pages/_widgets.php delete mode 100644 v2/dotclear/plugins/pages/default-templates/page.html delete mode 100644 v2/dotclear/plugins/pages/icon-big.png delete mode 100644 v2/dotclear/plugins/pages/icon-np-big.png delete mode 100644 v2/dotclear/plugins/pages/icon-np.png delete mode 100644 v2/dotclear/plugins/pages/icon.png delete mode 100644 v2/dotclear/plugins/pages/index.php delete mode 100644 v2/dotclear/plugins/pages/list.php delete mode 100644 v2/dotclear/plugins/pages/locales/en/help/page.html delete mode 100644 v2/dotclear/plugins/pages/locales/en/help/pages.html delete mode 100644 v2/dotclear/plugins/pages/locales/en/resources.php delete mode 100644 v2/dotclear/plugins/pages/locales/fr/help/page.html delete mode 100644 v2/dotclear/plugins/pages/locales/fr/help/pages.html delete mode 100644 v2/dotclear/plugins/pages/locales/fr/resources.php delete mode 100644 v2/dotclear/plugins/pages/page.php delete mode 100644 v2/dotclear/plugins/pings/_admin.php delete mode 100644 v2/dotclear/plugins/pings/_define.php delete mode 100644 v2/dotclear/plugins/pings/icon-big.png delete mode 100644 v2/dotclear/plugins/pings/icon.png delete mode 100644 v2/dotclear/plugins/pings/index.php delete mode 100644 v2/dotclear/plugins/pings/lib.pings.php delete mode 100644 v2/dotclear/plugins/pings/post.js delete mode 100644 v2/dotclear/plugins/simpleMenu/_admin.php delete mode 100644 v2/dotclear/plugins/simpleMenu/_define.php delete mode 100644 v2/dotclear/plugins/simpleMenu/_install.php delete mode 100644 v2/dotclear/plugins/simpleMenu/_public.php delete mode 100644 v2/dotclear/plugins/simpleMenu/_widgets.php delete mode 100644 v2/dotclear/plugins/simpleMenu/icon-small.png delete mode 100644 v2/dotclear/plugins/simpleMenu/icon.png delete mode 100644 v2/dotclear/plugins/simpleMenu/index.php delete mode 100644 v2/dotclear/plugins/simpleMenu/locales/en/help/help.html delete mode 100644 v2/dotclear/plugins/simpleMenu/locales/en/resources.php delete mode 100644 v2/dotclear/plugins/simpleMenu/locales/fr/help/help.html delete mode 100644 v2/dotclear/plugins/simpleMenu/locales/fr/resources.php delete mode 100644 v2/dotclear/plugins/tags/_admin.php delete mode 100644 v2/dotclear/plugins/tags/_define.php delete mode 100644 v2/dotclear/plugins/tags/_prepend.php delete mode 100644 v2/dotclear/plugins/tags/_public.php delete mode 100644 v2/dotclear/plugins/tags/_widgets.php delete mode 100644 v2/dotclear/plugins/tags/_xmlrpc.php delete mode 100644 v2/dotclear/plugins/tags/default-templates/tag.html delete mode 100644 v2/dotclear/plugins/tags/default-templates/tags.html delete mode 100644 v2/dotclear/plugins/tags/icon-big.png delete mode 100644 v2/dotclear/plugins/tags/icon.png delete mode 100644 v2/dotclear/plugins/tags/img/loader.gif delete mode 100644 v2/dotclear/plugins/tags/img/tag-add.png delete mode 100644 v2/dotclear/plugins/tags/index.php delete mode 100644 v2/dotclear/plugins/tags/js/jquery.autocomplete.js delete mode 100644 v2/dotclear/plugins/tags/js/post.js delete mode 100644 v2/dotclear/plugins/tags/js/posts_actions.js delete mode 100644 v2/dotclear/plugins/tags/style.css delete mode 100644 v2/dotclear/plugins/tags/tag_posts.php delete mode 100644 v2/dotclear/plugins/tags/tags.php delete mode 100644 v2/dotclear/plugins/themeEditor/_admin.php delete mode 100644 v2/dotclear/plugins/themeEditor/_define.php delete mode 100644 v2/dotclear/plugins/themeEditor/class.themeEditor.php delete mode 100644 v2/dotclear/plugins/themeEditor/help.html delete mode 100644 v2/dotclear/plugins/themeEditor/index.php delete mode 100644 v2/dotclear/plugins/themeEditor/script.js delete mode 100644 v2/dotclear/plugins/themeEditor/style.css delete mode 100644 v2/dotclear/plugins/userPref/_admin.php delete mode 100644 v2/dotclear/plugins/userPref/_define.php delete mode 100644 v2/dotclear/plugins/userPref/icon-big.png delete mode 100644 v2/dotclear/plugins/userPref/icon.png delete mode 100644 v2/dotclear/plugins/userPref/index.php delete mode 100644 v2/dotclear/plugins/widgets/_admin.php delete mode 100644 v2/dotclear/plugins/widgets/_default_widgets.php delete mode 100644 v2/dotclear/plugins/widgets/_define.php delete mode 100644 v2/dotclear/plugins/widgets/_install.php delete mode 100644 v2/dotclear/plugins/widgets/_public.php delete mode 100644 v2/dotclear/plugins/widgets/_widgets_functions.php delete mode 100644 v2/dotclear/plugins/widgets/class.widgets.php delete mode 100644 v2/dotclear/plugins/widgets/dragdrop.js delete mode 100644 v2/dotclear/plugins/widgets/icon-big.png delete mode 100644 v2/dotclear/plugins/widgets/icon.png delete mode 100644 v2/dotclear/plugins/widgets/index.php delete mode 100644 v2/dotclear/plugins/widgets/style.css delete mode 100644 v2/dotclear/plugins/widgets/widgets.js delete mode 100644 v2/dotclear/themes/blueSilence/_define.php delete mode 100644 v2/dotclear/themes/blueSilence/img/attach.png delete mode 100644 v2/dotclear/themes/blueSilence/img/background.png delete mode 100644 v2/dotclear/themes/blueSilence/img/commentaire.png delete mode 100644 v2/dotclear/themes/blueSilence/img/commentaire_bulle.png delete mode 100644 v2/dotclear/themes/blueSilence/img/footer.png delete mode 100644 v2/dotclear/themes/blueSilence/img/li.png delete mode 100644 v2/dotclear/themes/blueSilence/img/report.png delete mode 100644 v2/dotclear/themes/blueSilence/img/retrolien.png delete mode 100644 v2/dotclear/themes/blueSilence/img/rss.png delete mode 100644 v2/dotclear/themes/blueSilence/img/sidebar_li.png delete mode 100644 v2/dotclear/themes/blueSilence/img/tag.png delete mode 100644 v2/dotclear/themes/blueSilence/img/tags.png delete mode 100644 v2/dotclear/themes/blueSilence/img/top.jpg delete mode 100644 v2/dotclear/themes/blueSilence/screenshot.jpg delete mode 100644 v2/dotclear/themes/blueSilence/style.css delete mode 100644 v2/dotclear/themes/customCSS/_config.php delete mode 100644 v2/dotclear/themes/customCSS/_define.php delete mode 100644 v2/dotclear/themes/customCSS/_public.php delete mode 100644 v2/dotclear/themes/customCSS/locales/fr/main.lang.php delete mode 100644 v2/dotclear/themes/customCSS/locales/fr/main.po delete mode 100644 v2/dotclear/themes/customCSS/style.css delete mode 100644 v2/dotclear/themes/default/_define.php delete mode 100644 v2/dotclear/themes/default/img/attach.png delete mode 100644 v2/dotclear/themes/default/img/body-bg.png delete mode 100644 v2/dotclear/themes/default/img/comment-b.png delete mode 100644 v2/dotclear/themes/default/img/comment-t.png delete mode 100644 v2/dotclear/themes/default/img/comment.png delete mode 100644 v2/dotclear/themes/default/img/commentmy-b.png delete mode 100644 v2/dotclear/themes/default/img/commentmy-t.png delete mode 100644 v2/dotclear/themes/default/img/feed.png delete mode 100644 v2/dotclear/themes/default/img/page-b.png delete mode 100644 v2/dotclear/themes/default/img/page-bg.png delete mode 100644 v2/dotclear/themes/default/img/page-t.png delete mode 100644 v2/dotclear/themes/default/img/tag.png delete mode 100644 v2/dotclear/themes/default/img/trackback.png delete mode 100644 v2/dotclear/themes/default/js/jquery.cookie.js delete mode 100644 v2/dotclear/themes/default/js/jquery.js delete mode 100644 v2/dotclear/themes/default/js/post.js delete mode 100644 v2/dotclear/themes/default/print.css delete mode 100644 v2/dotclear/themes/default/screenshot.jpg delete mode 100644 v2/dotclear/themes/default/smilies/alien.png delete mode 100644 v2/dotclear/themes/default/smilies/angry.png delete mode 100644 v2/dotclear/themes/default/smilies/arrow.png delete mode 100644 v2/dotclear/themes/default/smilies/confused.png delete mode 100644 v2/dotclear/themes/default/smilies/cool.png delete mode 100644 v2/dotclear/themes/default/smilies/cry.png delete mode 100644 v2/dotclear/themes/default/smilies/dizzy.png delete mode 100644 v2/dotclear/themes/default/smilies/eek.png delete mode 100644 v2/dotclear/themes/default/smilies/evil.png delete mode 100644 v2/dotclear/themes/default/smilies/exclam.png delete mode 100644 v2/dotclear/themes/default/smilies/idea.png delete mode 100644 v2/dotclear/themes/default/smilies/laugh.png delete mode 100644 v2/dotclear/themes/default/smilies/lol.png delete mode 100644 v2/dotclear/themes/default/smilies/mrgreen.png delete mode 100644 v2/dotclear/themes/default/smilies/normal.png delete mode 100644 v2/dotclear/themes/default/smilies/question.png delete mode 100644 v2/dotclear/themes/default/smilies/razz.png delete mode 100644 v2/dotclear/themes/default/smilies/redface.png delete mode 100644 v2/dotclear/themes/default/smilies/rolleyes.png delete mode 100644 v2/dotclear/themes/default/smilies/sad.png delete mode 100644 v2/dotclear/themes/default/smilies/smile.png delete mode 100644 v2/dotclear/themes/default/smilies/smilies.txt delete mode 100644 v2/dotclear/themes/default/smilies/surprised.png delete mode 100644 v2/dotclear/themes/default/smilies/wink.png delete mode 100644 v2/dotclear/themes/default/style.css delete mode 100644 v2/dotclear/themes/ductile/_config.php delete mode 100644 v2/dotclear/themes/ductile/_define.php delete mode 100644 v2/dotclear/themes/ductile/_prepend.php delete mode 100644 v2/dotclear/themes/ductile/_public.php delete mode 100644 v2/dotclear/themes/ductile/ductile.js delete mode 100644 v2/dotclear/themes/ductile/ie.css delete mode 100644 v2/dotclear/themes/ductile/img/404.png delete mode 100644 v2/dotclear/themes/ductile/img/download.png delete mode 100644 v2/dotclear/themes/ductile/img/feed.png delete mode 100644 v2/dotclear/themes/ductile/img/filet.png delete mode 100644 v2/dotclear/themes/ductile/img/hline.png delete mode 100644 v2/dotclear/themes/ductile/img/info-co.png delete mode 100644 v2/dotclear/themes/ductile/img/last-hline.png delete mode 100644 v2/dotclear/themes/ductile/img/logo.png delete mode 100644 v2/dotclear/themes/ductile/img/menu.png delete mode 100644 v2/dotclear/themes/ductile/img/menumobile.png delete mode 100644 v2/dotclear/themes/ductile/img/minus-plus.png delete mode 100644 v2/dotclear/themes/ductile/img/post-info.png delete mode 100644 v2/dotclear/themes/ductile/img/squares.png delete mode 100644 v2/dotclear/themes/ductile/img/sticker-about.png delete mode 100644 v2/dotclear/themes/ductile/img/sticker-contact.png delete mode 100644 v2/dotclear/themes/ductile/img/sticker-feed.png delete mode 100644 v2/dotclear/themes/ductile/img/vline.png delete mode 100644 v2/dotclear/themes/ductile/locales/en/help/help.html delete mode 100644 v2/dotclear/themes/ductile/locales/en/main.lang.php delete mode 100644 v2/dotclear/themes/ductile/locales/en/main.po delete mode 100644 v2/dotclear/themes/ductile/locales/en/resources.php delete mode 100644 v2/dotclear/themes/ductile/locales/es/main.lang.php delete mode 100644 v2/dotclear/themes/ductile/locales/es/main.po delete mode 100644 v2/dotclear/themes/ductile/locales/fr/admin.lang.php delete mode 100644 v2/dotclear/themes/ductile/locales/fr/admin.po delete mode 100644 v2/dotclear/themes/ductile/locales/fr/help/help.html delete mode 100644 v2/dotclear/themes/ductile/locales/fr/main.lang.php delete mode 100644 v2/dotclear/themes/ductile/locales/fr/main.po delete mode 100644 v2/dotclear/themes/ductile/locales/fr/resources.php delete mode 100644 v2/dotclear/themes/ductile/mediaqueries.css delete mode 100644 v2/dotclear/themes/ductile/rebase.css delete mode 100644 v2/dotclear/themes/ductile/screenshot.jpg delete mode 100644 v2/dotclear/themes/ductile/style.css delete mode 100644 v2/dotclear/themes/ductile/tpl/404.html delete mode 100644 v2/dotclear/themes/ductile/tpl/_entry-full.html delete mode 100644 v2/dotclear/themes/ductile/tpl/_entry-short.html delete mode 100644 v2/dotclear/themes/ductile/tpl/_entry-title.html delete mode 100644 v2/dotclear/themes/ductile/tpl/_footer.html delete mode 100644 v2/dotclear/themes/ductile/tpl/_head.html delete mode 100644 v2/dotclear/themes/ductile/tpl/_pagination.html delete mode 100644 v2/dotclear/themes/ductile/tpl/_sidebar.html delete mode 100644 v2/dotclear/themes/ductile/tpl/_simple-entry.html delete mode 100644 v2/dotclear/themes/ductile/tpl/_top.html delete mode 100644 v2/dotclear/themes/ductile/tpl/archive.html delete mode 100644 v2/dotclear/themes/ductile/tpl/archive_month.html delete mode 100644 v2/dotclear/themes/ductile/tpl/category.html delete mode 100644 v2/dotclear/themes/ductile/tpl/home.html delete mode 100644 v2/dotclear/themes/ductile/tpl/page.html delete mode 100644 v2/dotclear/themes/ductile/tpl/post.html delete mode 100644 v2/dotclear/themes/ductile/tpl/search.html delete mode 100644 v2/dotclear/themes/ductile/tpl/tag.html delete mode 100644 v2/dotclear/themes/ductile/tpl/tags.html diff --git a/.htaccess b/.htaccess deleted file mode 100644 index d25d354..0000000 --- a/.htaccess +++ /dev/null @@ -1,2 +0,0 @@ - -AddType x-mapp-php5 .php \ No newline at end of file diff --git a/v2/dotclear/CHANGELOG b/v2/dotclear/CHANGELOG deleted file mode 100644 index 4c0e362..0000000 --- a/v2/dotclear/CHANGELOG +++ /dev/null @@ -1,385 +0,0 @@ -Dotclear 2.4.4 - 2012-08-13 -=========================================================== -* Bugfix: Programmed entries works again. -* Compatibility fix: widgets are now fully php >=5.3 compliant -* Security fix: potential CSRF in user management -* has_tag now part of dotclear core, moved from tag plugin. -* empty title fixed on rss reader widget - - -Dotclear 2.4.3 - 2012-05-18 -=========================================================== -* Admin: My favorites menu can be hidden -* Admin: Fix wordpress importer -* Admin: about:config and user:pref tables are now more readable -* Ductile theme: Blog logo can be changed -* New lithuanian language (thanks to Paulius Černakauskas) -* Various bug fixes - -Dotclear 2.4.2 - 2012-02-11 -=========================================================== -* Security fix release -* 4 XSS vulnerabilities fixed, discovered by High-Tech Bridge - -Dotclear 2.4.1.2 - 2011-12-24 -=========================================================== -* Happy Christmas! -* Security: fixed one SQL injection vulnerability in Clearbricks, thanks to Adjaya -* New behaviour: publicGetURLFor -* New behaviour: publicRegisterURL -* New behaviour: templatePrepareParams -* Changed the way to get artefacts URLs, through $core->url->getURLFor calls, instead of $core->url->getBase() -* new/updated parameter sql_only in $core->blog->getPosts and $core->blog->getComments - -Dotclear 2.4.0 - 2011-11-13 -=========================================================== -* Admin: new iconset from Thomas Daveluy -* Admin: Accessibility enhancements -* Added a custom widget sidebar -* Added a new theme (Ductile) -* Added a new plugin (simpleMenu) -* handling of postgres non default schemas (db_prefix = 'schema.prefix') -* New iconset mechanism -* New behaviour: coreBlogBeforeGetPosts -* Security fix: Spam comments feed now checks for blog permission. Thanks to Romuald Brunet. -* Various bug fixes - -Dotclear 2.3.1 - 2011-06-14 -=========================================================== -* Updated makefile for cleaner distrib. -* Better localization handling for prefs and shortcuts. -* Misc JS & CSS cleaning. -* Import/Export preferences-related bugfix. -* Administrative mail address is now configurable. -* Security: one minor fix and changes for two potential problems. Thanks to Jeremie Boutoille - -Dotclear 2.3.0 - 2011-05-16 -=========================================================== -* Admin: Major backend redesign -* Admin: Customizable Dashboard -* Admin: New Favourites admin submenu -* Admin: New user preferences backend -* Admin: Accessibility enhancements -* Admin: Inline help extended -* Templates: Default theme templates moved to inc/public/default-templates -* Clearbricks: External libraries relocated to inc/libs -* Clearbricks: fixed utf-8 and mysql strict mode problems -* Added a safe mode connection, disabling all plugins -* Mysqli support (config.php may need to be updated manually) -* Fixed dcLog bug with pgsql -* Fixed comment/trackbacks counters reset. -* Several other bug fixes - - -Dotclear 2.2.3 - 2011-04-01 -=========================================================== -* Security fix in media manager. Thx to Raphaël -* Bugfix : 2.2.2 was preventing manual thumbnail regeneration. -* Database handling bugfixes - -Dotclear 2.2.2 - 2011-01-17 -=========================================================== -* Bugfix: 2.2.1 was blocking new installations -* Autoupdate procedure should now be "bad ftp client configuration"-proof. -* Several other small bugfixes - -Dotclear 2.2.1 - 2011-01-15 -=========================================================== -* ExternalMedia is not part of the core distribution anymore -* New attribute to tpl:SysIf: blog_id -* New behaviour: adminMediaItemForm -* Several bugfixes -* Several code optimizations -* Several typos corrected -* Security fix in Clearbricks. Thx to François Pierre-Doray for pointing it out. - -Dotclear 2.2 - 2010-07-01 -=========================================================== -* New installation wizard. -* Several new behaviours: - - adminCommentHeaders - - adminCommentsActionsCombo - - adminCommentsActions - - adminCommentsActionsContent - - adminBeforeCommentDelete - - adminPostsActionsHeaders - - adminUsersActionsCombo - - coreBeforeCategoryCreate & coreAfterCategoryCreate - - coreBeforeCategoryUpdate & coreAfterCategoryUpdate - - coreBeforeLogCreate & coreAfterLogCreate - - coreBeforePostCreate & coreAfterPostCreate - - coreBeforePostUpdate & coreAfterPostUpdate - - coreMediaConstruct - - templateCustomSortByAlias - - urlHandlerGetArgsDocument -* New methods for several core classes. -* Metadata integration to the core. -* Error handlers can now be extended. -* Templates: blocks can now be recursive. -* Templates: Entries & Comments tags can now be sorted. -* Templates: The template subsystem is quicker, linier, and ready to be extended. -* Complete reworking of the settings system -* Correct handling of postgresql non default schemas. -* Admin: Autocompletion and further enhancing to tags handling. -* Admin: Accessibility & ergonomic tweaks. -* Admin: Administrator tag in users list. -* Comment cookies are now specific to the blog rather than to the domain. -* Password changes can now be mandatory. -* jQuery updated to 1.4.2. -* And way too many bugfixes and typos squashes to be listed. - - -Dotclear 2.1.7 - 2010-05-25 -=========================================================== -* Auto-update procedure fix - -Dotclear 2.1.6 - 2009-10-01 -=========================================================== -* Install procedure fixes -* Admin: Page managers can now create pages -* Admin: several typos corrected. -* Admin: Widgets now work in IE8. -* Admin: Password protected posts can now be previewed. -* Templates: tpl:Meta* are now tpl:Tags*. -* Templates: now display all posts. -* new behavior: adminPageHTMLHead -* DB schema: new blog_id field in log table -* Media manager: Pubic folder can now be set on a different host. -* WordPress import fixes -* Dailymotion insertion fix -* Upgrade procedure: CRLF removed in files that were bugging the upgrade. -* JQuery updated to 1.3 -* IE7-js update -* security: Full Path Disclosure protection. Thx to Karim Ayad for pointing it out. -* and way too many bugfixes to be listed. - -Dotclear 2.1.5 - 2009-02-05 -=========================================================== -* Security release -* Youtube insertion update - -Dotclear 2.1.4 - 2008-12-21 -=========================================================== -* Security flaw fix -* WordPress import refining -* XML-RPC improvements - -Dotclear 2.1.3 - 2008-11-19 -=========================================================== -* Admin: New upgrade procedure -* Admin: Fixed video insertion bug -* Template: New attributes - * url on EntryIf - * only_category on Blogroll - * no_context on Pagination -* Template: New tag - * BlogID -* Admin: escaped blog_id on authentication page - -Dotclear 2.1.1 - 2008-11-07 -=========================================================== -* Admin: Automatic Update bug fixes -* Admin: Disable Automatic Update if no digests file -* Admin: Javascript fixes in authentication page -* Admin: Fixed errors with categories select boxes -* Template: Added level attribute in tpl:Categories -* Media: Added H.264/MPEG-4 AVC for mp4 files - -Dotclear 2.1 - 2008-11-01 -=========================================================== -* Subcategories -* Admin: Automatic Update -* Admin: Flash 10 support for uploader -* Admin: mailto link in comment details -* Admin: Embedded video size selection -* Admin: Restrict session cookie path to admin -* Media: H.264/MPEG-4 AVC (HD) support with m4v files -* Inherited themes -* WordPress XML-RPC methods support -* True unicode URLs -* Plugin: Widgets as template tags -* Plugin: Filters in entries widgets and Blogroll -* Plugin: Added vimeo.com in external media -* Template: New tags - * LoopPosition - * CommentAuthorDomain - * CommentAuthorMD5 - * EntryFirstImage - * EntryCategoryShortURL - * CategoryIf - * CategoryFirstChildren - * CategoryParents - * EntryCategoriesBreadcrum - * MediaURL - -Dotclear 2.0.2 - 2008-09-05 -=========================================================== -* New installation procedure -* Plugin: WordPress import fixes -* Plugin: Plain text export as downloadable files -* Plugin: Message about URLs in Dotclear 1.2 import -* Public: Display a message if search returns no result -* Admin: Fixed some CSS bugs -* Admin: Batch select/unselect entries -* Admin: In a media item, find entries containing it - -Dotclear 2.0.1 - 2008-08-16 -=========================================================== -* Plugin: Fixed a bug with Dotclear 1.2 URLs import. -* Plugin: Fixed a l10n bug in Pages -* Admin: Enhanced plugins resources loading and cache - -Dotclear 2.0 - 2008-08-01 -=========================================================== -* Public: Atom becomes the default feed format. RSS 2 is always available. -* Admin: design enhancements and new Dotclear logo -* Admin: entries preview in blog context -* L10N: New language manager with zip files support -* Plugin: Import/Export plugin version 2.0 with import from Dotclear 1.2 and WordPress -* Plugin: Pages enhancements (preview, sorting) -* Plugin: support for jamendo and deezer in External Media -* JSMin on JavaScript files instead of JS packing -* SQLite 3 only support (PDO based) -* Many bug fixes and major performances improvements - -Dotclear 2.0 RC2 - 2008-06-21 -=========================================================== -* FairTrackback spam filter -* Language pack infrastructure -* Bug fix on comment search with author "0" -* Javascript fixes -* dcAuth::sessionExists and dcAuth::checkSession new methods -* Right management in dcAuth::sudo -* Media File sorting options in media manager -* CandyUpload, new uploader tool based on SWFUpload -* New search engine robots options -* New image options -* L10N: Japanese and Portugues (Brazil) language packs -* Many bug fixes and enhancements - -Dotclear 2.0 RC1 - 2008-05-01 -=========================================================== -* New: Pages plugin -* New: Theme editor plugin -* Entries: Text and WYSIWYG enhancements -* Entries: Markup validator -* Entries: Insertion of links to other entries from toolbar -* Entries: External media insertion (dailymotion, youtube, google video) -* Tags: Same list for new and existing entries -* Tags: Tags can be removed on all associated entries -* Tags: Tags can be removed on a post selection -* Admin: Ask password for user management tasks, theme upload and plugin upload -* Admin: New contextual help viewer -* Media manager: Recreate thumbnails option -* Media manager: Custom medium thumbnail size (per blog) -* Media manager: Zip files extract support -* Media manager: Zip file download of directory -* Media manager: File exclusion pattern option -* Themes and plugins: Zip as new package format -* Themes and plugins: Upload -* Themes and plugins: Upgrade within administration interface -* Themes and plugins: Deletion -* Public: New default theme: Blowup (fully customizable) -* Public: Changed the way commenter cookie is handled -* Themes: Template files moved to tpl/ directory -* L10N: Polish, Catalan and Spanish translations -* Misc: jQuery upgraded to 1.2.3 -* Misc: Crushed png files -* Fixed many bugs - -Dotclear 2.0 beta 7 - 2007-07-12 -=========================================================== -* New way to display comments and trackbacks on entries in backend -* Dashboard visual improvements -* Default cache dir created by installation process -* Option to limit posts and comments in feeds -* Introduced UDBS for installation and upgrade -* Changed handling of XML-RPC URLs -* New option to force HTTPS redirect if wanted -* Enforced cookies security (directory and ssl support) -* Added Plugin auto-install and auto-upgrade support -* Added trackbacks ttl and moderation preferences -* Added an Internal search engine -* FLV support in backend with Neolao player -* Added nice messages if database is broken or Dotclear not installed -* upgrade jQuery to 1.1.3 -* Fixed many bugs -* Fixed security issues in backend - -Dotclear 2.0 beta 6 - 2007-02-19 -=========================================================== -* New antispam plugin, with a set of filters (rbl, ipblacklist, spamwords, akismet) -* New admin dashboard page -* Fixed unwanted logout bug -* Added settings to disable template caching and allow PHP code -* Blog preferences panel bug fix -* New XML-RPC Client and Server -* Comment posting permissions bug fix - -Dotclear 2.0 beta 5.4 - 2007-01-19 -=========================================================== -* Minor change on spam display in comments.php -* Command line upgrade script and fix in load_plugin_file.php -* Make akismet configurable only by superadmin with DC_AKISMET_SUPER -* SQL optimisations -* New comments view in post - -Dotclear 2.0 beta 5.2 - 2007-01-11 -=========================================================== -* Fixed a bug with imageMeta::getMeta -* Enhanced dynamic file uploader -* Move clearbricks files to their own repository -* Fixed a bug with auto_br in wikiSimpleComment -* Support for language restriction in feeds -* Default theme structure changes -* Fixed a PHP 5.0 compatibility issue -* Installation Wizard - -Dotclear 2.0 beta 4 - 2006-12-26 -=========================================================== -* Performances enhancements. -* Administration UI enhancements. -* More user-friendly Widgets (version 1.5). -* Switch to jQuery . -* Added jQuery in default theme. -* Major changes in HTTP client and Feed Parser based on a - generic socket handler. -* PHP 5.2 compatibility. -* Code documentation (all core and most of clearbricks). -* Many bug fixes. - -Dotclear 2.0 beta 3 - 2006-11-05 -=========================================================== -* Disallow special wrappers for fopen like functions. -* XML/RPC improvements. -* Read IPTC and EXIF metadata in uploaded pictures. -* MySQL 4.1 support only. -* Metadata import from Dotclear 1.2.x. -* Akismet plugin. -* Pings plugin. -* Added a priority setting for plugins. -* Many bug fixes. - -Dotclear 2.0 beta 2 - 2006-08-09 -=========================================================== -* DC_PLUGIN_ROOT can handle more than one path. -* OPML/XBEL import in blogroll plugin. -* Fixed a security issue in html::absoluteURLs(). -* Fixed issues with timezone on scheduled entries. -* Multiple categories selection in tpl:Entries. -* Improved dbLayer. -* Changed category feed URL. -* Feeds for tags (entries and comments). -* Added attachments count on backend and frontend. -* New settings code design. Can now handle wide system settings. -* Memory usage improvements with autoloader. -* Some code cleanup. -* Feed parser improvements. -* Themes can be configured if needed. -* XMP support on JPEG files. -* Media manager improvements. -* Spamplemousse now uses DNSBL (and the guy who left the bug was fired). -* Javascript editor and toolbar improvements. -* RDS support (XML/RPC API discovery). -* Added a theme with user stylesheet. -* Plugins manager diff --git a/v2/dotclear/CREDITS b/v2/dotclear/CREDITS deleted file mode 100644 index 76b9172..0000000 --- a/v2/dotclear/CREDITS +++ /dev/null @@ -1,46 +0,0 @@ -This is a credits file of people that have contributed to the Dotclear project. - -Dotclear Team -------------- - -Thomas Bouron -Anne Cavalier -Noé Cendrier -Benoit Clerc -Grégory Corvisier -Florent Cotton -Philippe Hénaff -Bruno Hondelatte -Olivier Meunier -Franck Paul -Michel Pelletier -Xavier Plantefève -Jean-Michel Royer -Anne Sophie Tranchet -Alain Vagner - -Dotclear Translators --------------------- - -Benjamin Bank -Alain Béarez -Claire Cambier -Luis Correia -Andreas Diller -Alain Fagot -Sabrina Favier -Charles Hebert -Guillaume Jonquiere -Dennis S. L. Jørgensen -Miguel A. Muñoz -Sebestyén Muráncsik -Nnidŷu -Polo -Aina Chabert Ramon -Adnan Shameem -Enrique Matias Sanchez -Jan Skrasek -Takafumi -Regina Timbó - -... and all contributors. \ No newline at end of file diff --git a/v2/dotclear/LICENSE b/v2/dotclear/LICENSE deleted file mode 100644 index d511905..0000000 --- a/v2/dotclear/LICENSE +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/v2/dotclear/README b/v2/dotclear/README deleted file mode 100644 index ed0c4c4..0000000 --- a/v2/dotclear/README +++ /dev/null @@ -1,22 +0,0 @@ -Welcome to Dotclear - -WHAT YOU NEED TO RUN DOTCLEAR ------------------------------ -In order to run Dotclear you need: - - * A web server (Apache, Cheerokee, lightHttpd, etc.) - * PHP 5.2 with the following modules: - * mbstring - * iconv - * simplexml - * mysql, postgresql or sqlite - * A database server (MySQL or PostgreSQL) or SQLite. - - -INSTALLATION ------------- -Copy inc/config.php.in to inc/config.php and fill in the fields with appropriate -values. - -If you intend to use MySQL or PostgreSQL, you'll have to create a database -first. With SQLite, db/ folder will have to be writable by your web server. \ No newline at end of file diff --git a/v2/dotclear/admin/auth.php b/v2/dotclear/admin/auth.php deleted file mode 100644 index 414914c..0000000 --- a/v2/dotclear/admin/auth.php +++ /dev/null @@ -1,431 +0,0 @@ -auth->allowPassChange() && isset($_POST['new_pwd']) && isset($_POST['new_pwd_c']) && isset($_POST['login_data']); -$login_data = !empty($_POST['login_data']) ? html::escapeHTML($_POST['login_data']) : null; -$recover = $core->auth->allowPassChange() && !empty($_REQUEST['recover']); -$safe_mode = !empty($_REQUEST['safe_mode']); -$akey = $core->auth->allowPassChange() && !empty($_GET['akey']) ? $_GET['akey'] : null; -$user_id = $user_pwd = $user_key = $user_email = null; -$err = $msg = null; - -# Auto upgrade -if (empty($_GET) && empty($_POST)) { - require dirname(__FILE__).'/../inc/dbschema/upgrade.php'; - try { - if (($changes = dotclearUpgrade($core)) !== false) { - $msg = __('Dotclear has been upgraded.').''; - } - } catch (Exception $e) { - $err = $e->getMessage(); - } -} - -# If we have POST login informations, go throug auth process -if (!empty($_POST['user_id']) && !empty($_POST['user_pwd'])) -{ - $user_id = !empty($_POST['user_id']) ? $_POST['user_id'] : null; - $user_pwd = !empty($_POST['user_pwd']) ? $_POST['user_pwd'] : null; -} -# If we have COOKIE login informations, go throug auth process -elseif (isset($_COOKIE['dc_admin']) && strlen($_COOKIE['dc_admin']) == 104) -{ - # If we have a remember cookie, go through auth process with user_key - $user_id = substr($_COOKIE['dc_admin'],40); - $user_id = @unpack('a32',@pack('H*',$user_id)); - if (is_array($user_id)) - { - $user_id = $user_id[1]; - $user_key = substr($_COOKIE['dc_admin'],0,40); - $user_pwd = null; - } - else - { - $user_id = null; - } -} - -# Recover password -if ($recover && !empty($_POST['user_id']) && !empty($_POST['user_email'])) -{ - $user_id = !empty($_POST['user_id']) ? $_POST['user_id'] : null; - $user_email = !empty($_POST['user_email']) ? $_POST['user_email'] : ''; - try - { - $recover_key = $core->auth->setRecoverKey($user_id,$user_email); - - $subject = mail::B64Header('DotClear '.__('Password reset')); - $message = - __('Someone has requested to reset the password for the following site and username.')."\n\n". - $page_url."\n".__('Username:').' '.$user_id."\n\n". - __('To reset your password visit the following address, otherwise just ignore this email and nothing will happen.')."\n". - $page_url.'?akey='.$recover_key; - - $headers[] = 'From: '.(defined('DC_ADMIN_MAILFROM') && DC_ADMIN_MAILFROM ? DC_ADMIN_MAILFROM : 'dotclear@local'); - $headers[] = 'Content-Type: text/plain; charset=UTF-8;'; - - mail::sendMail($user_email,$subject,$message,$headers); - $msg = sprintf(__('The e-mail was sent successfully to %s.'),$user_email); - } - catch (Exception $e) - { - $err = $e->getMessage(); - } -} -# Send new password -elseif ($akey) -{ - try - { - $recover_res = $core->auth->recoverUserPassword($akey); - - $subject = mb_encode_mimeheader('DotClear '.__('Your new password'),'UTF-8','B'); - $message = - __('Username:').' '.$recover_res['user_id']."\n". - __('Password:').' '.$recover_res['new_pass']."\n\n". - preg_replace('/\?(.*)$/','',$page_url); - - $headers[] = 'From: dotclear@'.$_SERVER['HTTP_HOST']; - $headers[] = 'Content-Type: text/plain; charset=UTF-8;'; - - mail::sendMail($recover_res['user_email'],$subject,$message,$headers); - $msg = __('Your new password is in your mailbox.'); - } - catch (Exception $e) - { - $err = $e->getMessage(); - } -} -# Change password and retry to log -elseif ($change_pwd) -{ - try - { - $tmp_data = explode('/',$_POST['login_data']); - if (count($tmp_data) != 3) { - throw new Exception(); - } - $data = array( - 'user_id'=>base64_decode($tmp_data[0]), - 'cookie_admin'=>$tmp_data[1], - 'user_remember'=>$tmp_data[2]=='1' - ); - if ($data['user_id'] === false) { - throw new Exception(); - } - - # Check login informations - $check_user = false; - if (isset($data['cookie_admin']) && strlen($data['cookie_admin']) == 104) - { - $user_id = substr($data['cookie_admin'],40); - $user_id = @unpack('a32',@pack('H*',$user_id)); - if (is_array($user_id)) - { - $user_id = $user_id[1]; - $user_key = substr($data['cookie_admin'],0,40); - $check_user = $core->auth->checkUser($user_id,null,$user_key) === true; - } - } - - if (!$core->auth->allowPassChange() || !$check_user) { - $change_pwd = false; - throw new Exception(); - } - - if ($_POST['new_pwd'] != $_POST['new_pwd_c']) { - throw new Exception(__("Passwords don't match")); - } - - if ($core->auth->checkUser($user_id,$_POST['new_pwd']) === true) { - throw new Exception(__("You didn't change your password.")); - } - - $cur = $core->con->openCursor($core->prefix.'user'); - $cur->user_change_pwd = 0; - $cur->user_pwd = $_POST['new_pwd']; - $core->updUser($core->auth->userID(),$cur); - - $core->session->start(); - $_SESSION['sess_user_id'] = $user_id; - $_SESSION['sess_browser_uid'] = http::browserUID(DC_MASTER_KEY); - - if ($data['user_remember']) - { - setcookie('dc_admin',$data['cookie_admin'],strtotime('+15 days'),'','',DC_ADMIN_SSL); - } - - http::redirect('index.php'); - } - catch (Exception $e) - { - $err = $e->getMessage(); - } -} -# Try to log -elseif ($user_id !== null && ($user_pwd !== null || $user_key !== null)) -{ - # We check the user - $check_user = $core->auth->checkUser($user_id,$user_pwd,$user_key) === true; - - $cookie_admin = http::browserUID(DC_MASTER_KEY.$user_id. - crypt::hmac(DC_MASTER_KEY,$user_pwd)).bin2hex(pack('a32',$user_id)); - - if ($check_user && $core->auth->mustChangePassword()) - { - $login_data = join('/',array( - base64_encode($user_id), - $cookie_admin, - empty($_POST['user_remember'])?'0':'1' - )); - - if (!$core->auth->allowPassChange()) { - $err = __('You have to change your password before you can login.'); - } else { - $err = __('In order to login, you have to change your password now.'); - $change_pwd = true; - } - } - elseif ($check_user && !empty($_POST['safe_mode']) && !$core->auth->isSuperAdmin()) - { - $err = __('Safe Mode can only be used for super administrators.'); - } - elseif ($check_user) - { - $core->session->start(); - $_SESSION['sess_user_id'] = $user_id; - $_SESSION['sess_browser_uid'] = http::browserUID(DC_MASTER_KEY); - - if (!empty($_POST['blog'])) { - $_SESSION['sess_blog_id'] = $_POST['blog']; - } - - if (!empty($_POST['safe_mode']) && $core->auth->isSuperAdmin()) { - $_SESSION['sess_safe_mode'] = true; - } - - if (!empty($_POST['user_remember'])) { - setcookie('dc_admin',$cookie_admin,strtotime('+15 days'),'','',DC_ADMIN_SSL); - } - - http::redirect('index.php'); - } - else - { - if (isset($_COOKIE['dc_admin'])) { - unset($_COOKIE['dc_admin']); - setcookie('dc_admin',false,-600,'','',DC_ADMIN_SSL); - } - $err = __('Wrong username or password'); - } -} - -if (isset($_GET['user'])) { - $user_id = $_GET['user']; -} - -header('Content-Type: text/html; charset=UTF-8'); -?> - - - - - - - - - - <?php echo html::escapeHTML(DC_VENDOR_NAME); ?> - - - - - - callBehavior('loginPageHTMLHead'); - ?> - - - - - - -
-

- -'.$err.''; -} -if ($msg) { - echo '

'.$msg.'

'; -} - -if ($akey) -{ - echo '

'.__('Back to login screen').'

'; -} -elseif ($recover) -{ - echo - '
'.__('Request a new password').''. - '

'. - form::field(array('user_id','user_id'),20,32,html::escapeHTML($user_id)).'

'. - - '

'. - form::field(array('user_email','user_email'),20,255,html::escapeHTML($user_email)).'

'. - - '

'. - form::hidden(array('recover'),1).'

'. - '
'. - - ''; -} -elseif ($change_pwd) -{ - echo - '
'.__('Change your password').''. - '

'. - form::password(array('new_pwd','new_pwd'),20,255).'

'. - - '

'. - form::password(array('new_pwd_c','new_pwd_c'),20,255).'

'. - ''. - - '

'. - form::hidden('login_data',$login_data).'

'; -} -else -{ - if (is_callable(array($core->auth,'authForm'))) - { - echo $core->auth->authForm($user_id); - } - else - { - if ($safe_mode) { - echo '
'; - echo ''.__('Safe mode login').''; - echo - '

'. - __('This mode allows you to login without activating any of your plugins. This may be useful to solve compatibility problems').' 
'. - __('Disable or delete any plugin suspected to cause trouble, then log out and log back in normally.'). - '

'; - } - else { - echo '
'; - } - - echo - '

'. - form::field(array('user_id','user_id'),20,32,html::escapeHTML($user_id)).'

'. - - '

'. - form::password(array('user_pwd','user_pwd'),20,255).'

'. - - '

'. - form::checkbox(array('user_remember','user_remember'),1). - '

'. - - '

'; - - if (!empty($_REQUEST['blog'])) { - echo form::hidden('blog',html::escapeHTML($_REQUEST['blog'])); - } - if($safe_mode) { - echo - form::hidden('safe_mode',1). - '
'; - } - else { - echo ''; - } - echo - ''; - - echo '
'; - - if ($safe_mode) { - echo - '

'.__('Get back to normal authentication').'

'; - } else { - echo '

'.__('Connection issue?').'

'; - if ($core->auth->allowPassChange()) { - echo '

'.__('I forgot my password').'

'; - } - echo '

'.__('I want to log in in safe mode').'

'; - } - - echo '
'; - } -} -?> - - - diff --git a/v2/dotclear/admin/blog.php b/v2/dotclear/admin/blog.php deleted file mode 100644 index fc01915..0000000 --- a/v2/dotclear/admin/blog.php +++ /dev/null @@ -1,96 +0,0 @@ -con->openCursor($core->prefix.'blog'); - $blog_id = $cur->blog_id = $_POST['blog_id']; - $blog_url = $cur->blog_url = $_POST['blog_url']; - $blog_name = $cur->blog_name = $_POST['blog_name']; - $blog_desc = $cur->blog_desc = $_POST['blog_desc']; - - try - { - # --BEHAVIOR-- adminBeforeBlogCreate - $core->callBehavior('adminBeforeBlogCreate',$cur,$blog_id); - - $core->addBlog($cur); - - # Default settings and override some - $core->blogDefaults($cur->blog_id); - $blog_settings = new dcSettings($core,$cur->blog_id); - $blog_settings->addNamespace('system'); - $blog_settings->system->put('lang',$core->auth->getInfo('user_lang')); - $blog_settings->system->put('blog_timezone',$core->auth->getInfo('user_tz')); - - if (substr($blog_url,-1) == '?') { - $blog_settings->system->put('url_scan','query_string'); - } else { - $blog_settings->system->put('url_scan','path_info'); - } - - # --BEHAVIOR-- adminAfterBlogCreate - $core->callBehavior('adminAfterBlogCreate',$cur,$blog_id,$blog_settings); - - http::redirect('blog.php?id='.$cur->blog_id.'&add=1'); - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } -} - -if (!empty($_REQUEST['id'])) -{ - $edit_blog_mode = true; - include dirname(__FILE__).'/blog_pref.php'; -} -else -{ - dcPage::open(__('New blog'),dcPage::jsConfirmClose('blog-form')); - - echo - '

'.__('Blogs').''.__('New blog').'

'. - - '
'. - - $core->formNonce(). - '

'. - '

'.__('At least 2 characters using letters, numbers or symbols.').'

'. - '

'.__('Please note that changing your blog ID may require changes in your public index.php file.').'

'. - - '

'. - - '

'. - - '

'. - form::textarea('blog_desc',60,5,html::escapeHTML($blog_desc)).'

'. - - '

'. - '
'; - - dcPage::close(); -} -?> \ No newline at end of file diff --git a/v2/dotclear/admin/blog_del.php b/v2/dotclear/admin/blog_del.php deleted file mode 100644 index e0d31fe..0000000 --- a/v2/dotclear/admin/blog_del.php +++ /dev/null @@ -1,73 +0,0 @@ -getBlog($_POST['blog_id']); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } - - if ($rs->isEmpty()) { - $core->error->add(__('No such blog ID')); - } else { - $blog_id = $rs->blog_id; - $blog_name = $rs->blog_name; - } -} - -# Delete the blog -if (!$core->error->flag() && $blog_id && !empty($_POST['del'])) -{ - if (!$core->auth->checkPassword(crypt::hmac(DC_MASTER_KEY,$_POST['pwd']))) { - $core->error->add(__('Password verification failed')); - } else { - try { - $core->delBlog($blog_id); - http::redirect('blogs.php?del=1'); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } - } -} - -dcPage::open('Delete a blog'); - -if (!$core->error->flag()) -{ - echo - '

'.__('Delete a blog').'

'. - '

'.__('Warning').'

'. - '

'.sprintf(__('You are about to delete the blog %s. Every entry, comment and category will be deleted.'), - ''.$blog_id.' ('.$blog_name.')').'

'. - '

'.__('Please give your password to confirm the blog deletion.').'

'; - - echo - '
'. - '
'.$core->formNonce().'
'. - '

'. - '

'. - form::hidden('blog_id',$blog_id).'

'. - '
'; -} - -dcPage::close(); -?> \ No newline at end of file diff --git a/v2/dotclear/admin/blog_pref.php b/v2/dotclear/admin/blog_pref.php deleted file mode 100644 index e8e900a..0000000 --- a/v2/dotclear/admin/blog_pref.php +++ /dev/null @@ -1,553 +0,0 @@ -blog->id; - $blog_status = $core->blog->status; - $blog_name = $core->blog->name; - $blog_desc = $core->blog->desc; - $blog_settings = $core->blog->settings; - $blog_url = $core->blog->url; - - $action = 'blog_pref.php'; - $redir = 'blog_pref.php?upd=1'; -} -else -{ - dcPage::checkSuper(); - try - { - if (empty($_REQUEST['id'])) { - throw new Exception(__('No given blog id.')); - } - $rs = $core->getBlog($_REQUEST['id']); - - if (!$rs) { - throw new Exception(__('No such blog.')); - } - - $blog_id = $rs->blog_id; - $blog_status = $rs->blog_status; - $blog_name = $rs->blog_name; - $blog_desc = $rs->blog_desc; - $blog_settings = new dcSettings($core,$blog_id); - $blog_url = $rs->blog_url ; - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } - - $action = 'blog.php'; - $redir = 'blog.php?id=%s&upd=1'; -} - -# Language codes -$langs = l10n::getISOcodes(1,1); -foreach ($langs as $k => $v) { - $lang_avail = $v == 'en' || is_dir(DC_L10N_ROOT.'/'.$v); - $lang_combo[] = new formSelectOption($k,$v,$lang_avail ? 'avail10n' : ''); -} - -# Status combo -foreach ($core->getAllBlogStatus() as $k => $v) { - $status_combo[$v] = (string) $k; -} - -# URL scan modes -$url_scan_combo = array( - 'PATH_INFO' => 'path_info', - 'QUERY_STRING' => 'query_string' -); - -# Post URL combo -$post_url_combo = array( - __('year/month/day/title') => '{y}/{m}/{d}/{t}', - __('year/month/title') => '{y}/{m}/{t}', - __('year/title') => '{y}/{t}', - __('title') => '{t}' -); -if (!in_array($blog_settings->system->post_url_format,$post_url_combo)) { - $post_url_combo[html::escapeHTML($blog_settings->system->post_url_format)] = html::escapeHTML($blog_settings->system->post_url_format); -} - -# Image title combo -$img_title_combo = array( - __('Title') => 'Title ;; separator(, )', - __('Title, Date') => 'Title ;; Date(%b %Y) ;; separator(, )', - __('Title, Country, Date') => 'Title ;; Country ;; Date(%b %Y) ;; separator(, )', - __('Title, City, Country, Date') => 'Title ;; City ;; Country ;; Date(%b %Y) ;; separator(, )', -); -if (!in_array($blog_settings->system->media_img_title_pattern,$img_title_combo)) { - $img_title_combo[html::escapeHTML($blog_settings->system->media_img_title_pattern)] = html::escapeHTML($blog_settings->system->media_img_title_pattern); -} - -# Robots policy options -$robots_policy_options = array( - 'INDEX,FOLLOW' => __("I would like search engines and archivers to index and archive my blog's content."), - 'INDEX,FOLLOW,NOARCHIVE' => __("I would like search engines and archivers to index but not archive my blog's content."), - 'NOINDEX,NOFOLLOW,NOARCHIVE' => __("I would like to prevent search engines and archivers from indexing or archiving my blog's content."), -); - -# Update a blog -if ($blog_id && !empty($_POST) && $core->auth->check('admin',$blog_id)) -{ - $cur = $core->con->openCursor($core->prefix.'blog'); - if ($core->auth->isSuperAdmin()) { - $cur->blog_id = $_POST['blog_id']; - $cur->blog_url = preg_replace('/\?+$/','?',$_POST['blog_url']); - if (in_array($_POST['blog_status'],$status_combo)) { - $cur->blog_status = (integer) $_POST['blog_status']; - } - } - $cur->blog_name = $_POST['blog_name']; - $cur->blog_desc = $_POST['blog_desc']; - - $media_img_t_size = abs((integer) $_POST['media_img_t_size']); - if ($media_img_t_size < 0) { $media_img_t_size = 100; } - - $media_img_s_size = abs((integer) $_POST['media_img_s_size']); - if ($media_img_s_size < 0) { $media_img_s_size = 240; } - - $media_img_m_size = abs((integer) $_POST['media_img_m_size']); - if ($media_img_m_size < 0) { $media_img_m_size = 448; } - - $nb_post_per_page = abs((integer) $_POST['nb_post_per_page']); - if ($nb_post_per_page <= 1) { $nb_post_per_page = 1; } - - $nb_post_per_feed = abs((integer) $_POST['nb_post_per_feed']); - if ($nb_post_per_feed <= 1) { $nb_post_per_feed = 1; } - - $nb_comment_per_feed = abs((integer) $_POST['nb_comment_per_feed']); - if ($nb_comment_per_feed <= 1) { $nb_comment_per_feed = 1; } - - try - { - if ($cur->blog_id != null && $cur->blog_id != $blog_id) { - $rs = $core->getBlog($cur->blog_id); - - if ($rs) { - throw new Exception(__('That blog Id is already in use.')); - } - } - - # --BEHAVIOR-- adminBeforeBlogUpdate - $core->callBehavior('adminBeforeBlogUpdate',$cur,$blog_id); - - if (!preg_match('/^[a-z]{2}(-[a-z]{2})?$/',$_POST['lang'])) { - throw new Exception(__('Invalid language code')); - } - - $core->updBlog($blog_id,$cur); - - # --BEHAVIOR-- adminAfterBlogUpdate - $core->callBehavior('adminAfterBlogUpdate',$cur,$blog_id); - - if ($cur->blog_id != null && $cur->blog_id != $blog_id) { - if ($blog_id == $core->blog->id) { - $core->setBlog($cur->blog_id); - $_SESSION['sess_blog_id'] = $cur->blog_id; - $blog_settings = $core->blog->settings; - } else { - $blog_settings = new dcSettings($core,$cur->blog_id); - } - - $blog_id = $cur->blog_id; - } - - - $blog_settings->addNameSpace('system'); - - $blog_settings->system->put('editor',$_POST['editor']); - $blog_settings->system->put('copyright_notice',$_POST['copyright_notice']); - $blog_settings->system->put('post_url_format',$_POST['post_url_format']); - $blog_settings->system->put('lang',$_POST['lang']); - $blog_settings->system->put('blog_timezone',$_POST['blog_timezone']); - $blog_settings->system->put('date_format',$_POST['date_format']); - $blog_settings->system->put('time_format',$_POST['time_format']); - $blog_settings->system->put('comments_ttl',abs((integer) $_POST['comments_ttl'])); - $blog_settings->system->put('trackbacks_ttl',abs((integer) $_POST['trackbacks_ttl'])); - $blog_settings->system->put('allow_comments',!empty($_POST['allow_comments'])); - $blog_settings->system->put('allow_trackbacks',!empty($_POST['allow_trackbacks'])); - $blog_settings->system->put('comments_pub',empty($_POST['comments_pub'])); - $blog_settings->system->put('trackbacks_pub',empty($_POST['trackbacks_pub'])); - $blog_settings->system->put('comments_nofollow',!empty($_POST['comments_nofollow'])); - $blog_settings->system->put('wiki_comments',!empty($_POST['wiki_comments'])); - $blog_settings->system->put('enable_xmlrpc',!empty($_POST['enable_xmlrpc'])); - - $blog_settings->system->put('nb_post_per_page',$nb_post_per_page); - $blog_settings->system->put('use_smilies',!empty($_POST['use_smilies'])); - $blog_settings->system->put('media_img_t_size',$media_img_t_size); - $blog_settings->system->put('media_img_s_size',$media_img_s_size); - $blog_settings->system->put('media_img_m_size',$media_img_m_size); - $blog_settings->system->put('media_img_title_pattern',$_POST['media_img_title_pattern']); - $blog_settings->system->put('nb_post_per_feed',$nb_post_per_feed); - $blog_settings->system->put('nb_comment_per_feed',$nb_comment_per_feed); - $blog_settings->system->put('short_feed_items',!empty($_POST['short_feed_items'])); - - if (isset($_POST['robots_policy'])) { - $blog_settings->system->put('robots_policy',$_POST['robots_policy']); - } - - # --BEHAVIOR-- adminBeforeBlogSettingsUpdate - $core->callBehavior('adminBeforeBlogSettingsUpdate',$blog_settings); - - if ($core->auth->isSuperAdmin() && in_array($_POST['url_scan'],$url_scan_combo)) { - $blog_settings->system->put('url_scan',$_POST['url_scan']); - } - - http::redirect(sprintf($redir,$blog_id)); - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } -} - -dcPage::open(__('Blog settings'), - '". - dcPage::jsConfirmClose('blog-form'). - dcPage::jsLoad('js/_blog_pref.js'). - - - # --BEHAVIOR-- adminBlogPreferencesHeaders - $core->callBehavior('adminBlogPreferencesHeaders'). - - dcPage::jsPageTabs() -); - -if ($blog_id) -{ - echo '

'.(!$standalone ? ''.__('Blogs').' › ' : ''). - html::escapeHTML($blog_name).' › '. - __('Blog settings').'

'; - - if (!empty($_GET['add'])) { - echo '

'.__('Blog has been successfully created.').'

'; - } - - if (!empty($_GET['upd'])) { - echo '

'.__('Blog has been successfully updated.').'

'; - } - - echo - '
'. - '

'.__('Parameters').'

'. - '
'; - - echo - '
'.__('Blog details').''. - $core->formNonce(); - - if ($core->auth->isSuperAdmin()) - { - echo - '

'. - '

'.__('At least 2 characters using letters, numbers or symbols.').'

'. - '

'.__('Please note that changing your blog ID may require changes in your public index.php file.').'

'; - } - - echo - '

'; - - if ($core->auth->isSuperAdmin()) - { - echo - '

'. - - '

'. - - '

'; - } - - echo - '

'. - form::textarea('blog_desc',60,5,html::escapeHTML($blog_desc)).'

'. - '
'; - - - echo - '
'.__('Blog configuration').''. - '
'. - '
'. - '

'. - - '

'. - - '

'. - '
'. - - '
'. - '

'. - - '

'. - - '

'. - ' - '.__('more information').'

'. - '
'. - '
'. - '
'. //Opera sucks - '
'; - - echo - '
'.__('Comments and trackbacks').''. - '
'. - '
'. - '

'. - - '

'. - - '

'. - '

'.__('Leave blank to disable this feature.').'

'. - - '

'. - '
'. - - '
'. - '

'. - - '

'. - - '

'. - '

'.__('Leave blank to disable this feature.').'

'. - - '

'. - '
'. - '
'. - '
'. //Opera sucks - '
'; - - echo - '
'.__('Blog presentation').''. - '
'. - '
'. - '

'. - - '

'. - - '

'. - '
'. - - '
'. - '

'. - - '

'. - - '

'. - - '

'. - '
'. - '
'. - '
'. //Opera sucks - '
'; - - echo - '
'.__('Media and images').''. - '
'. - '
'. - '

'.__('Generated image sizes (in pixels)').'

'. - '

'. - - '

'. - - '

'. - '
'. - - '
'. - '

'. - '

'.__('This defines image tag title when you insert it in a post from the media manager. It is retrieved from the picture\'s metadata.').'

'. - '

'.form::combo('media_img_title_pattern',$img_title_combo,html::escapeHTML($blog_settings->system->media_img_title_pattern)).'

'. - '
'. - '
'. - '
'; - - echo - '
'.__('Search engines robots policy').''; - - $i = 0; - foreach ($robots_policy_options as $k => $v) - { - echo '

'; - $i++; - } - - echo '
'; - - - # --BEHAVIOR-- adminBlogPreferencesForm - $core->callBehavior('adminBlogPreferencesForm',$core,$blog_settings); - - echo - '

'. - (!$standalone ? form::hidden('id',$blog_id) : ''). - '

'. - '
'; - - if ($core->auth->isSuperAdmin() && $blog_id != $core->blog->id) - { - echo - '
'. - '

'. - form::hidden(array('blog_id'),$blog_id). - $core->formNonce().'

'. - '
'; - } - - # XML/RPC information - echo '

'.__('XML/RPC interface').'

'; - - echo '

'.__('XML/RPC interface allows you to edit your blog with an external client.').'

'; - - if (!$blog_settings->system->enable_xmlrpc) - { - echo '

'.__('XML/RPC interface is not active. Change settings to enable it.').'

'; - } - else - { - echo - '

'.__('XML/RPC interface is active. You should set the following parameters on your XML/RPC client:').'

'. - '
    '. - '
  • '.__('Server URL:').' '. - sprintf(DC_XMLRPC_URL,$core->blog->url,$core->blog->id). - '
  • '. - '
  • '.__('Blogging system:').' Movable Type
  • '. - '
  • '.__('User name:').' '.$core->auth->userID().'
  • '. - '
  • '.__('Password:').' '.__('your password').'
  • '. - '
  • '.__('Blog ID:').' 1
  • '. - '
'; - } - - echo '
'; - - # - # Users on the blog (with permissions) - - $blog_users = $core->getBlogPermissions($blog_id,$core->auth->isSuperAdmin()); - $perm_types = $core->auth->getPermissionsTypes(); - - echo - '
'. - '

'.__('Users on this blog').'

'; - - if (empty($blog_users)) - { - echo '

'.__('No users').'

'; - } - else - { - if ($core->auth->isSuperAdmin()) { - $user_url_p = '%1$s'; - } else { - $user_url_p = '%1$s'; - } - - foreach ($blog_users as $k => $v) - { - if (count($v['p']) > 0) - { - echo - '

'.sprintf($user_url_p,html::escapeHTML($k)). - ' ('.html::escapeHTML(dcUtils::getUserCN( - $k, $v['name'], $v['firstname'], $v['displayname'] - )).')'; - - if (!$v['super'] && $core->auth->isSuperAdmin()) { - echo - ' - ' - .__('Change permissions').''; - } - - echo '

'; - - echo '
    '; - if ($v['super']) { - echo '
  • '.__('Super administrator').'
  • '; - } else { - foreach ($v['p'] as $p => $V) { - echo '
  • '.__($perm_types[$p]).'
  • '; - } - } - echo '
'; - } - } - } - - echo '
'; -} - -dcPage::helpBlock('core_blog_pref'); -dcPage::close(); -?> \ No newline at end of file diff --git a/v2/dotclear/admin/blog_theme.php b/v2/dotclear/admin/blog_theme.php deleted file mode 100644 index d463379..0000000 --- a/v2/dotclear/admin/blog_theme.php +++ /dev/null @@ -1,363 +0,0 @@ -themes = new dcThemes($core); -$core->themes->loadModules($core->blog->themes_path,null); - -# Theme screenshot -if (!empty($_GET['shot']) && $core->themes->moduleExists($_GET['shot'])) -{ - if (empty($_GET['src'])) { - $f = $core->blog->themes_path.'/'.$_GET['shot'].'/screenshot.jpg'; - } else { - $f = $core->blog->themes_path.'/'.$_GET['shot'].'/'.path::clean($_GET['src']); - } - - $f = path::real($f); - - if (!file_exists($f)) { - $f = dirname(__FILE__).'/images/noscreenshot.png'; - } - - http::cache(array_merge(array($f),get_included_files())); - - header('Content-Type: '.files::getMimeType($f)); - header('Content-Length: '.filesize($f)); - readfile($f); - - exit; -} - -$can_install = $core->auth->isSuperAdmin(); -$is_writable = is_dir($core->blog->themes_path) && is_writable($core->blog->themes_path); -$default_tab = 'themes-list'; - -# Selecting theme -if (!empty($_POST['theme']) && !empty($_POST['select']) && empty($_REQUEST['conf'])) -{ - $core->blog->settings->addNamespace('system'); - $core->blog->settings->system->put('theme',$_POST['theme']); - $core->blog->triggerBlog(); - http::redirect('blog_theme.php?upd=1'); -} - -if ($can_install && !empty($_POST['theme']) && !empty($_POST['remove']) && empty($_REQUEST['conf'])) -{ - try - { - if ($_POST['theme'] == 'default') { - throw new Exception(__('You can\'t remove default theme.')); - } - - if (!$core->themes->moduleExists($_POST['theme'])) { - throw new Exception(__('Theme does not exist.')); - } - - $theme = $core->themes->getModules($_POST['theme']); - - # --BEHAVIOR-- themeBeforeDelete - $core->callBehavior('themeBeforeDelete',$theme); - - $core->themes->deleteModule($_POST['theme']); - - # --BEHAVIOR-- themeAfterDelete - $core->callBehavior('themeAfterDelete',$theme); - - http::redirect('blog_theme.php?del=1'); - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } -} - -# Theme upload -if ($can_install && $is_writable && ((!empty($_POST['upload_pkg']) && !empty($_FILES['pkg_file'])) || - (!empty($_POST['fetch_pkg']) && !empty($_POST['pkg_url'])))) -{ - try - { - if (empty($_POST['your_pwd']) || !$core->auth->checkPassword(crypt::hmac(DC_MASTER_KEY,$_POST['your_pwd']))) { - throw new Exception(__('Password verification failed')); - } - - if (!empty($_POST['upload_pkg'])) - { - files::uploadStatus($_FILES['pkg_file']); - - $dest = $core->blog->themes_path.'/'.$_FILES['pkg_file']['name']; - if (!move_uploaded_file($_FILES['pkg_file']['tmp_name'],$dest)) { - throw new Exception(__('Unable to move uploaded file.')); - } - } - else - { - $url = urldecode($_POST['pkg_url']); - $dest = $core->blog->themes_path.'/'.basename($url); - - try - { - $client = netHttp::initClient($url,$path); - $client->setUserAgent('Dotclear - http://www.dotclear.org/'); - $client->useGzip(false); - $client->setPersistReferers(false); - $client->setOutput($dest); - $client->get($path); - } - catch( Exception $e) - { - throw new Exception(__('An error occurred while downloading the file.')); - } - - unset($client); - } - - $ret_code = dcModules::installPackage($dest,$core->themes); - http::redirect('blog_theme.php?added='.$ret_code); - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - $default_tab = 'add-theme'; - } -} - -$theme_conf_mode = false; -if (!empty($_REQUEST['conf'])) -{ - $theme_conf_file = path::real($core->blog->themes_path.'/'.$core->blog->settings->system->theme).'/_config.php'; - if (file_exists($theme_conf_file)) { - $theme_conf_mode = true; - } -} - -function display_theme_details($id,$details,$current) -{ - global $core; - - $screenshot = 'images/noscreenshot.png'; - if (file_exists($core->blog->themes_path.'/'.$id.'/screenshot.jpg')) { - $screenshot = 'blog_theme.php?shot='.rawurlencode($id); - } - - $radio_id = 'theme_'.html::escapeHTML($id); - if (preg_match('#^http(s)?://#',$core->blog->settings->system->themes_url)) { - $theme_url = http::concatURL($core->blog->settings->system->themes_url,'/'.$id); - } else { - $theme_url = http::concatURL($core->blog->url,$core->blog->settings->system->themes_url.'/'.$id); - } - $has_conf = file_exists(path::real($core->blog->themes_path.'/'.$id).'/_config.php'); - $has_css = file_exists(path::real($core->blog->themes_path.'/'.$id).'/style.css'); - $parent = $core->themes->moduleInfo($id,'parent'); - $has_parent = (boolean)$parent; - if ($has_parent) { - $is_parent_present = $core->themes->moduleExists($parent); - } - - $res = - '
'. - '
'. - '
'. - '

'.form::radio(array('theme',$radio_id),html::escapeHTML($id),$current,'','',($has_parent && !$is_parent_present)).' '. - '

'. - '

'.html::escapeHTML($details['desc']).' '. - ''.sprintf(__('by %s'),html::escapeHTML($details['author'])).' '. - ''.sprintf(__('version %s'),html::escapeHTML($details['version'])).' '; - if ($has_parent) { - if ($is_parent_present) { - $res .= ''.sprintf(__('(built on "%s")'),html::escapeHTML($parent)).' '; - } else { - $res .= ''.sprintf(__('(requires "%s")'),html::escapeHTML($parent)).' '; - } - } - if ($has_css) { - $res .= ''.__('Stylesheet').''; - } - $res .= '

'; - $res .= - '
'. - '
'; - if ($current && $has_conf) { - $res .= '

'.__('Configure theme').'

'; - } - if ($current) { - # --BEHAVIOR-- adminCurrentThemeDetails - $res .= $core->callBehavior('adminCurrentThemeDetails',$core,$id,$details); - } - $res .= - '
'. - '
'; - - return $res; -} - -dcPage::open(__('Blog appearance'), - (!$theme_conf_mode ? dcPage::jsLoad('js/_blog_theme.js') : ''). - dcPage::jsPageTabs($default_tab). - dcPage::jsColorPicker() -); - -if (!$theme_conf_mode) -{ - echo - '

'.html::escapeHTML($core->blog->name).' › '.__('Blog appearance').'

'; - - if (!empty($_GET['upd'])) { - echo '

'.__('Theme has been successfully changed.').'

'; - } - - if (!empty($_GET['added'])) { - echo '

'. - ($_GET['added'] == 2 ? __('Theme has been successfully upgraded') : __('Theme has been successfully installed.')). - '

'; - } - - if (!empty($_GET['del'])) { - echo '

'.__('Theme has been successfully deleted.').'

'; - } - - if ($can_install) { - echo - '

'.sprintf(__('You can find additional themes for your blog on %s.'), - 'Dotaddict').' '. - __('To install or upgrade a theme you generally just need to upload it '. - 'in "Install or upgrade a theme" section.').'

'; - } - - # Themes list - echo '
'; - - $themes = $core->themes->getModules(); - if (isset($themes[$core->blog->settings->system->theme])) { - echo '

'.sprintf(__('You are currently using "%s"'),$themes[$core->blog->settings->system->theme]['name']).'

'; - } - - echo - '
'. - '
'; - - if (isset($themes[$core->blog->settings->system->theme])) { - echo display_theme_details($core->blog->settings->system->theme,$themes[$core->blog->settings->system->theme],true); - } - - foreach ($themes as $k => $v) - { - if ($core->blog->settings->system->theme == $k) { // Current theme - continue; - } - echo display_theme_details($k,$v,false); - } - - echo '
'; - - echo - '
'. - $core->formNonce(). - '

'; - - if ($can_install) { - echo '

'; - } - - echo - '
'. - '
'. - '
'; - - # Add a new theme - if ($can_install) - { - echo - '
'; - - if ($is_writable) - { - echo '

'.__('You can install themes by uploading or downloading zip files.').'

'; - - # 'Upload theme' form - echo - '
'. - '
'. - ''.__('Upload a zip file').''. - '

'. - '

'. - ''. - $core->formNonce(). - '
'. - '
'; - - # 'Fetch theme' form - echo - '
'. - '
'. - ''.__('Download a zip file').''. - '

'. - '

'. - ''. - $core->formNonce(). - '
'. - '
'; - } - else - { - echo - '

'. - __('To enable this function, please give write access to your themes directory.'). - '

'; - } - echo '
'; - } -} -else -{ - $theme_name = $core->themes->moduleInfo($core->blog->settings->system->theme,'name'); - $core->themes->loadModuleL10Nresources($core->blog->settings->system->theme,$_lang); - echo - '

'.html::escapeHTML($core->blog->name). - ' › '.__('Blog appearance').''.__('Theme configuration').'

'. - '

'.__('back').'

'; - - try - { - # Let theme configuration set their own form(s) if required - $standalone_config = (boolean) $core->themes->moduleInfo($core->blog->settings->system->theme,'standalone_config'); - - if (!$standalone_config) - echo '
'; - - include $theme_conf_file; - - if (!$standalone_config) - echo - '

'. - $core->formNonce().'

'. - '
'; - - } - catch (Exception $e) - { - echo '

'.$e->getMessage().'

'; - } -} - -dcPage::close(); -?> \ No newline at end of file diff --git a/v2/dotclear/admin/blogs.php b/v2/dotclear/admin/blogs.php deleted file mode 100644 index ce572d6..0000000 --- a/v2/dotclear/admin/blogs.php +++ /dev/null @@ -1,185 +0,0 @@ - 'blog_upddt', -__('Blog name') => 'UPPER(blog_name)', -__('Blog ID') => 'B.blog_id' -); - -$order_combo = array( -__('Descending') => 'desc', -__('Ascending') => 'asc' -); - -$q = !empty($_GET['q']) ? $_GET['q'] : ''; -$sortby = !empty($_GET['sortby']) ? $_GET['sortby'] : 'blog_upddt'; -$order = !empty($_GET['order']) ? $_GET['order'] : 'desc'; - -$page = !empty($_GET['page']) ? $_GET['page'] : 1; -$nb_per_page = 30; - -if (!empty($_GET['nb']) && (integer) $_GET['nb'] > 0) { - $nb_per_page = (integer) $_GET['nb']; -} - -$show_filters = false; - -# - Search filter -if ($q) { - $params['q'] = $q; - $show_filters = true; -} - -# - Sortby and order filter -if ($sortby !== '' && in_array($sortby,$sortby_combo)) { - if ($order !== '' && in_array($order,$order_combo)) { - $params['order'] = $sortby.' '.$order; - } - - if ($sortby != 'blog_upddt' || $order != 'desc') { - $show_filters = true; - } -} - -$params['limit'] = array((($page-1)*$nb_per_page),$nb_per_page); - -try { - $counter = $core->getBlogs($params,1); - $rs = $core->getBlogs($params); - $nb_blog = $counter->f(0); -} catch (Exception $e) { - $core->error->add($e->getMessage()); -} - -/* DISPLAY --------------------------------------------------------- */ -$starting_script = ''; -if (!$show_filters) { - $starting_script .= dcPage::jsLoad('js/filter-controls.js'); -} -dcPage::open(__('List of blogs'),$starting_script); - -if (!empty($_GET['del'])) { - echo '

'.__('Blog has been successfully deleted.').'

'; -} - -echo '

'.__('List of blogs').'

'; - -if (!$core->error->flag()) -{ - if ($core->auth->isSuperAdmin()) { - echo '

'.__('Create a new blog').'

'; - } - - if (!$show_filters) { - echo '

'.__('Filters').'

'; - } - - echo - '
'. - '
'.__('Filters').''. - - '
'. - '

'. - '

'. - '
'. - - '
'. - '

'. - '

'. - '

'. - '
'. - - '
'. //Opera sucks - '
'. - '
'; - - # Show blogs - if ($nb_blog == 0) - { - echo '

'.__('No blog').'

'; - } - else - { - $pager = new pager($page,$nb_blog,$nb_per_page,10); - $pager->var_page = 'page'; - - echo '

'.__('Page(s)').' : '.$pager->getLinks().'

'; - - echo - ''. - ''. - ''. - ''. - ''. - ''. - ''. - ''; - - while ($rs->fetch()) { - echo blogLine($rs); - } - - echo '
'.__('Blog name').''.__('Last update').''.__('Entries').''.__('Blog ID').' '.__('Status').'
'; - - echo '

'.__('Page(s)').' : '.$pager->getLinks().'

'; - } -} - -dcPage::close(); - -function blogLine($rs) -{ - global $core; - - $blog_id = html::escapeHTML($rs->blog_id); - $edit_link = ''; - - if ($GLOBALS['core']->auth->isSuperAdmin()) { - $edit_link = - ''. - __('edit').''; - } - - $img_status = $rs->blog_status == 1 ? 'check-on' : 'check-off'; - $txt_status = $GLOBALS['core']->getBlogStatus($rs->blog_status); - $img_status = sprintf('%2$s',$img_status,$txt_status); - $offset = dt::getTimeOffset($core->auth->getInfo('user_tz')); - $blog_upddt = dt::str(__('%Y-%m-%d %H:%M'),strtotime($rs->blog_upddt) + $offset); - - return - ''. - ''. - html::escapeHTML($rs->blog_name).''. - ''.$blog_upddt.''. - ''.$core->countBlogPosts($rs->blog_id).''. - ''.$blog_id.''. - ''.$edit_link.''. - ''.$img_status.''. - ''; -} -?> \ No newline at end of file diff --git a/v2/dotclear/admin/categories.php b/v2/dotclear/admin/categories.php deleted file mode 100644 index 15f0301..0000000 --- a/v2/dotclear/admin/categories.php +++ /dev/null @@ -1,190 +0,0 @@ -blog->getCategory((integer) $_POST['del_cat']); - if ($c->isEmpty()) { - throw new Exception(__('This category does not exist.')); - } - unset($c); - $core->blog->delCategory($_POST['del_cat']); - http::redirect('categories.php?del=1'); - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } -} - -# Reset order -if (!empty($_POST['reset'])) -{ - try - { - $core->blog->resetCategoriesOrder(); - http::redirect('categories.php?reord=1'); - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } -} - -/* Display --------------------------------------------------------- */ -dcPage::open(__('Categories'), - dcPage::jsToolMan()."\n". - dcPage::jsLoad('js/_categories.js') -); - -if (!empty($_GET['add'])) { - echo '

'.__('The category has been successfully created.').'

'; -} -if (!empty($_GET['del'])) { - echo '

'.__('The category has been successfully removed.').'

'; -} -if (!empty($_GET['reord'])) { - echo '

'.__('Categories have been successfully reordered.').'

'; -} -if (!empty($_GET['moved'])) { - echo '

'.__('The category has been successfully moved.').'

'; -} - -echo '

'.html::escapeHTML($core->blog->name).' › '.__('Categories').'

'; - -$rs = $core->blog->getCategories(array('post_type'=>'post')); - -echo -'
'. -'
'; -if ($rs->isEmpty()) -{ - echo '

'.__('No category yet.').'

'; -} -else -{ - echo - '

'.__('Categories list').'

'. - '
'; - - $ref_level = $level = $rs->level-1; - while ($rs->fetch()) - { - $attr = 'id="cat'.$rs->cat_id.'"'; - if ($rs->nb_total == 0) { - $attr .= ' class="deletable"'; - } - - if ($rs->level > $level) { - echo str_repeat('
  • ',$rs->level - $level); - } elseif ($rs->level < $level) { - echo str_repeat('
',-($rs->level - $level)); - } - - if ($rs->level <= $level) { - echo '
  • '; - } - - echo - '

    '.html::escapeHTML($rs->cat_title).''. - ' ('. - sprintf(($rs->nb_post > 1 ? __('%d entries') : __('%d entry') ),$rs->nb_post).''. - ', '.__('total:').' '.$rs->nb_total.')

    '. - '

    '.__('URL:').' '.html::escapeHTML($rs->cat_url).'

    '; - - $level = $rs->level; - } - - if ($ref_level - $level < 0) { - echo str_repeat('
  • ',-($ref_level - $level)); - } - echo '
    '; -} -echo '
    '; - -echo '
    '. - -'
    '. -'
    '.__('Add a new category').''. -'

    '. -'

    '. -'

    '. -$core->formNonce(). -'
    '. -'
    '; - -if (!$rs->isEmpty()) -{ - $deletable = array(); - $l = $rs->level; - $full_name = array($rs->cat_title); - while ($rs->fetch()) - { - if ($rs->level < $l) { - $full_name = array(); - } elseif ($rs->level == $l) { - array_pop($full_name); - } - $full_name[] = html::escapeHTML($rs->cat_title); - if ($rs->nb_post == 0) { - $deletable[implode(' / ',$full_name)] = $rs->cat_id; - } - $l = $rs->level; - } - - if (count($deletable) > 0) - { - echo - '
    '. - '
    '.__('Remove a category').''. - '

    '. - '

    '. - $core->formNonce(). - '
    '. - '
    '; - } - - echo - '
    '. - '
    '.__('Reorder categories').''. - '

    '.__('This will relocate all categories on the top level').'

    '. - '

    '. - form::hidden(array('reset'),1). - $core->formNonce(). - '
    '. - '
    '; -} -echo '
    '; -echo '
    '; - -dcPage::helpBlock('core_categories'); -dcPage::close(); -?> \ No newline at end of file diff --git a/v2/dotclear/admin/category.php b/v2/dotclear/admin/category.php deleted file mode 100644 index d91895a..0000000 --- a/v2/dotclear/admin/category.php +++ /dev/null @@ -1,260 +0,0 @@ -blog->getCategory($_REQUEST['id']); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } - - if (!$core->error->flag() && !$rs->isEmpty()) - { - $cat_id = (integer) $rs->cat_id; - $cat_title = $rs->cat_title; - $cat_url = $rs->cat_url; - $cat_desc = $rs->cat_desc; - } - unset($rs); - - # Getting hierarchy information - $parents = $core->blog->getCategoryParents($cat_id); - $rs = $core->blog->getCategoryParent($cat_id); - $cat_parent = $rs->isEmpty() ? 0 : (integer) $rs->cat_id; - unset($rs); - - # Allowed parents list - $children = $core->blog->getCategories(array('post_type'=>'post','start'=>$cat_id)); - $allowed_parents = array(__('Top level')=>0); - - $p = array(); - while ($children->fetch()) { - $p[$children->cat_id] = 1; - } - - $rs = $core->blog->getCategories(array('post_type'=>'post')); - while ($rs->fetch()) { - if (!isset($p[$rs->cat_id])) { - $allowed_parents[] = new formSelectOption( - str_repeat('  ',$rs->level-1).($rs->level-1 == 0 ? '' : '• ').html::escapeHTML($rs->cat_title), - $rs->cat_id - ); - } - } - unset($rs); - - # Allowed siblings list - $siblings = array(); - $rs = $core->blog->getCategoryFirstChildren($cat_parent); - while ($rs->fetch()) { - if ($rs->cat_id != $cat_id) { - $siblings[html::escapeHTML($rs->cat_title)] = $rs->cat_id; - } - } - unset($rs); -} - -# Changing parent -if ($cat_id && isset($_POST['cat_parent'])) -{ - $new_parent = (integer) $_POST['cat_parent']; - if ($cat_parent != $new_parent) - { - try { - $core->blog->setCategoryParent($cat_id,$new_parent); - http::redirect('categories.php?moved=1'); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } - } -} - -# Changing sibling -if ($cat_id && isset($_POST['cat_sibling'])) -{ - try { - $core->blog->setCategoryPosition($cat_id,(integer) $_POST['cat_sibling'],$_POST['cat_move']); - http::redirect('categories.php?moved=1'); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } -} - -# Create or update a category -if (isset($_POST['cat_title'])) -{ - $cur = $core->con->openCursor($core->prefix.'category'); - - $cur->cat_title = $cat_title = $_POST['cat_title']; - - if (isset($_POST['cat_desc'])) { - $cur->cat_desc = $cat_desc = $_POST['cat_desc']; - } - - if (isset($_POST['cat_url'])) { - $cur->cat_url = $cat_url = $_POST['cat_url']; - } else { - $cur->cat_url = $cat_url; - } - - try - { - # Update category - if ($cat_id) - { - # --BEHAVIOR-- adminBeforeCategoryUpdate - $core->callBehavior('adminBeforeCategoryUpdate',$cur,$cat_id); - - $core->blog->updCategory($_POST['id'],$cur); - - # --BEHAVIOR-- adminAfterCategoryUpdate - $core->callBehavior('adminAfterCategoryUpdate',$cur,$cat_id); - - http::redirect('category.php?id='.$_POST['id'].'&upd=1'); - } - # Create category - else - { - # --BEHAVIOR-- adminBeforeCategoryCreate - $core->callBehavior('adminBeforeCategoryCreate',$cur); - - $id = $core->blog->addCategory($cur,(integer) $_POST['new_cat_parent']); - - # --BEHAVIOR-- adminAfterCategoryCreate - $core->callBehavior('adminAfterCategoryCreate',$cur,$id); - - http::redirect('categories.php?add=1'); - } - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } -} - - -$title = $cat_id ? html::escapeHTML($cat_title) : __('New category'); - -dcPage::open($title, - dcPage::jsConfirmClose('category-form'). - dcPage::jsToolBar(). - dcPage::jsLoad('js/_category.js') -); - -if (!empty($_GET['upd'])) { - echo '

    '.__('Category has been successfully updated.').'

    '; -} - -echo -'

    '.html::escapeHTML($core->blog->name).' › '. -__('Categories').' › '; - -if ($cat_id) -{ - while($parents->fetch()) { - echo ''.html::escapeHTML($parents->cat_title).''; - echo " › "; - } -} - -echo ''.$title.'

    '; - -echo -'
    '. -'
    '.__('Category information').''. -'

    '; -if (!$cat_id) -{ - $rs = $core->blog->getCategories(array('post_type'=>'post')); - echo - '

    '; - unset($rs); -} -echo -'
    '. -'

    '. -'

    '. -__('Warning: If you set the URL manually, it may conflict with another category.').'

    '. -'
    '. - -'

    '. -form::textarea('cat_desc',50,8,html::escapeHTML($cat_desc)). -'

    '. - -'

    '. -($cat_id ? form::hidden('id',$cat_id) : ''). -$core->formNonce(). -'

    '. -'
    '. -'
    '; - -if ($cat_id) -{ - echo - '

    '.__('Move this category').'

    '. - '
    '. - '
    '. - - '
    '. - '
    '.__('Category parent').''. - '

    '. - '

    '. - form::hidden(array('id'),$cat_id).$core->formNonce().'

    '. - '
    '. - '
    '. - '
    '; - - if (count($siblings) > 0) { - echo - '
    '. - '
    '. - '
    '.__('Category sibling').''. - '

    '. - form::combo('cat_move',array(__('before')=>'before',__('after')=>'after'),'','','',false,'title="'.__('position: ').'"').' '. - form::combo('cat_sibling',$siblings).'

    '. - '

    '. - form::hidden(array('id'),$cat_id).$core->formNonce().'

    '. - '
    '. - '
    '. - '
    '; - } - - echo '
    '; -} - -dcPage::helpBlock('core_categories'); -dcPage::close(); -?> \ No newline at end of file diff --git a/v2/dotclear/admin/comment.php b/v2/dotclear/admin/comment.php deleted file mode 100644 index 0ef8cec..0000000 --- a/v2/dotclear/admin/comment.php +++ /dev/null @@ -1,236 +0,0 @@ -blog->getAllCommentStatus() as $k => $v) { - $status_combo[$v] = (string) $k; -} - -# Adding comment -if (!empty($_POST['add']) && !empty($_POST['post_id'])) -{ - try - { - $rs = $core->blog->getPosts(array('post_id' => $_POST['post_id'], 'post_type' => '')); - - if ($rs->isEmpty()) { - throw new Exception(__('Entry does not exist.')); - } - - $cur = $core->con->openCursor($core->prefix.'comment'); - - $cur->comment_author = $_POST['comment_author']; - $cur->comment_email = html::clean($_POST['comment_email']); - $cur->comment_site = html::clean($_POST['comment_site']); - $cur->comment_content = $core->HTMLfilter($_POST['comment_content']); - $cur->post_id = (integer) $_POST['post_id']; - - # --BEHAVIOR-- adminBeforeCommentCreate - $core->callBehavior('adminBeforeCommentCreate',$cur); - - $comment_id = $core->blog->addComment($cur); - - # --BEHAVIOR-- adminAfterCommentCreate - $core->callBehavior('adminAfterCommentCreate',$cur,$comment_id); - - http::redirect($core->getPostAdminURL($rs->post_type,$rs->post_id,false).'&co=1&creaco=1'); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } -} - -if (!empty($_REQUEST['id'])) -{ - $params['comment_id'] = $_REQUEST['id']; - - try { - $rs = $core->blog->getComments($params); - if (!$rs->isEmpty()) { - $comment_id = $rs->comment_id; - $post_id = $rs->post_id; - $post_type = $rs->post_type; - $post_title = $rs->post_title; - $comment_dt = $rs->comment_dt; - $comment_author = $rs->comment_author; - $comment_email = $rs->comment_email; - $comment_site = $rs->comment_site; - $comment_content = $rs->comment_content; - $comment_ip = $rs->comment_ip; - $comment_status = $rs->comment_status; - $comment_trackback = (boolean) $rs->comment_trackback; - $comment_spam_status = $rs->comment_spam_status; - } - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } -} - -if (!$comment_id && !$core->error->flag()) { - $core->error->add(__('No comment')); -} - -if (!$core->error->flag() && isset($rs)) -{ - $can_edit = $can_delete = $can_publish = $core->auth->check('contentadmin',$core->blog->id); - - if (!$core->auth->check('contentadmin',$core->blog->id) && $core->auth->userID() == $rs->user_id) { - $can_edit = true; - if ($core->auth->check('delete',$core->blog->id)) { - $can_delete = true; - } - if ($core->auth->check('publish',$core->blog->id)) { - $can_publish = true; - } - } - - # update comment - if (!empty($_POST['update']) && $can_edit) - { - $cur = $core->con->openCursor($core->prefix.'comment'); - - $cur->comment_author = $_POST['comment_author']; - $cur->comment_email = html::clean($_POST['comment_email']); - $cur->comment_site = html::clean($_POST['comment_site']); - $cur->comment_content = $core->HTMLfilter($_POST['comment_content']); - - if (isset($_POST['comment_status'])) { - $cur->comment_status = (integer) $_POST['comment_status']; - } - - try - { - # --BEHAVIOR-- adminBeforeCommentUpdate - $core->callBehavior('adminBeforeCommentUpdate',$cur,$comment_id); - - $core->blog->updComment($comment_id,$cur); - - # --BEHAVIOR-- adminAfterCommentUpdate - $core->callBehavior('adminAfterCommentUpdate',$cur,$comment_id); - - http::redirect('comment.php?id='.$comment_id.'&upd=1'); - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } - } - - if (!empty($_POST['delete']) && $can_delete) - { - try { - # --BEHAVIOR-- adminBeforeCommentDelete - $core->callBehavior('adminBeforeCommentDelete',$comment_id); - - $core->blog->delComment($comment_id); - http::redirect($core->getPostAdminURL($rs->post_type,$rs->post_id).'&co=1#c'.$comment_id,false); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } - } - - if (!$can_edit) { - $core->error->add(__("You can't edit this comment.")); - } -} - -/* DISPLAY --------------------------------------------------------- */ -dcPage::open(__('Edit comment'), - dcPage::jsConfirmClose('comment-form'). - dcPage::jsToolBar(). - dcPage::jsLoad('js/_comment.js'). - # --BEHAVIOR-- adminCommentHeaders - $core->callBehavior('adminCommentHeaders') -); - -if ($comment_id) -{ - if (!empty($_GET['upd'])) { - echo '

    '.__('Comment has been successfully updated.').'

    '; - } - - $comment_mailto = ''; - if ($comment_email) - { - $comment_mailto = 'getPostURL())) - .'">'.__('Send an e-mail').''; - } - - echo '

    '.html::escapeHTML($core->blog->name).' › '. - $post_title.''.__('Edit comment').'

    '; - - echo - '
    '. - '

    '.__('IP address:').'
    '. - ''.$comment_ip.'

    '. - - '

    '.__('Date:').'
    '. - dt::dt2str(__('%Y-%m-%d %H:%M'),$comment_dt).'

    '. - - '

    '. - - '

    '. - - '

    '. - - '

    '. - - # --BEHAVIOR-- adminAfterCommentDesc - $core->callBehavior('adminAfterCommentDesc', $rs). - - '

    '. - form::textarea('comment_content',50,10,html::escapeHTML($comment_content)). - '

    '. - - '

    '.form::hidden('id',$comment_id). - $core->formNonce(). - ' '; - - if ($can_delete) { - echo ''; - } - echo - '

    '. - '
    '; -} - -dcPage::helpBlock('core_comments'); -dcPage::close(); -?> \ No newline at end of file diff --git a/v2/dotclear/admin/comments.php b/v2/dotclear/admin/comments.php deleted file mode 100644 index 1d1d303..0000000 --- a/v2/dotclear/admin/comments.php +++ /dev/null @@ -1,251 +0,0 @@ - '' -); -foreach ($core->blog->getAllCommentStatus() as $k => $v) { - $status_combo[$v] = (string) $k; -} - -$type_combo = array( -'-' => '', -__('comment') => 'co', -__('trackback') => 'tb' -); - -$sortby_combo = array( -__('Date') => 'comment_dt', -__('Entry title') => 'post_title', -__('Author') => 'comment_author', -__('Status') => 'comment_status' -); - -$order_combo = array( -__('Descending') => 'desc', -__('Ascending') => 'asc' -); - - -/* Get comments --------------------------------------------------------- */ -$author = isset($_GET['author']) ? $_GET['author'] : ''; -$status = isset($_GET['status']) ? $_GET['status'] : ''; -$type = !empty($_GET['type']) ? $_GET['type'] : ''; -$sortby = !empty($_GET['sortby']) ? $_GET['sortby'] : 'comment_dt'; -$order = !empty($_GET['order']) ? $_GET['order'] : 'desc'; -$ip = !empty($_GET['ip']) ? $_GET['ip'] : ''; - -$with_spam = $author || $status || $type || $sortby != 'comment_dt' || $order != 'desc' || $ip; - -$show_filters = false; - -$page = !empty($_GET['page']) ? (integer) $_GET['page'] : 1; -$nb_per_page = 30; - -if (!empty($_GET['nb']) && (integer) $_GET['nb'] > 0) { - if ($nb_per_page != $_GET['nb']) { - $show_filters = true; - } - $nb_per_page = (integer) $_GET['nb']; -} - -$params['limit'] = array((($page-1)*$nb_per_page),$nb_per_page); -$params['no_content'] = true; - -# Author filter -if ($author !== '') { - $params['q_author'] = $author; - $show_filters = true; -} else { - $author=''; -} - -# - Type filter -if ($type == 'tb' || $type == 'co') { - $params['comment_trackback'] = ($type == 'tb'); - $show_filters = true; -} else { - $type=''; -} - -# - Status filter -if ($status !== '' && in_array($status,$status_combo)) { - $params['comment_status'] = $status; - $show_filters = true; -} elseif (!$with_spam) { - $params['comment_status_not'] = -2; - $status=''; -} else { - $status=''; -} - -# - IP filter -if ($ip) { - $params['comment_ip'] = $ip; - $show_filters = true; -} - -# Sortby and order filter -if ($sortby !== '' && in_array($sortby,$sortby_combo)) { - if ($order !== '' && in_array($order,$order_combo)) { - $params['order'] = $sortby.' '.$order; - } else { - $order = 'desc'; - } - - if ($sortby != 'comment_dt' || $order != 'desc') { - $show_filters = true; - } -} else { - $sortby = 'comment_dt'; - $order = 'desc'; -} - -# Actions combo box -$combo_action = array(); -$default = ''; -if ($core->auth->check('publish,contentadmin',$core->blog->id)) -{ - $combo_action[__('publish')] = 'publish'; - $combo_action[__('unpublish')] = 'unpublish'; - $combo_action[__('mark as pending')] = 'pending'; - $combo_action[__('mark as junk')] = 'junk'; -} -if ($core->auth->check('delete,contentadmin',$core->blog->id)) -{ - $combo_action[__('Delete')] = 'delete'; - if ($status == -2) { - $default = 'delete'; - } -} - -# --BEHAVIOR-- adminCommentsActionsCombo -$core->callBehavior('adminCommentsActionsCombo',array(&$combo_action)); - -/* Get comments --------------------------------------------------------- */ -try { - $comments = $core->blog->getComments($params); - $counter = $core->blog->getComments($params,true); - $comment_list = new adminCommentList($core,$comments,$counter->f(0)); -} catch (Exception $e) { - $core->error->add($e->getMessage()); -} - -/* DISPLAY --------------------------------------------------------- */ -$starting_script = dcPage::jsLoad('js/_comments.js'); -if (!$show_filters) { - $starting_script .= dcPage::jsLoad('js/filter-controls.js'); -} -# --BEHAVIOR-- adminCommentsHeaders -$starting_script .= $core->callBehavior('adminCommentsHeaders'); - -dcPage::open(__('Comments and trackbacks'),$starting_script); - -echo '

    '.html::escapeHTML($core->blog->name).' › '.__('Comments and trackbacks').'

    '; - -if (!$core->error->flag()) -{ - # Filters - if (!$show_filters) { - echo '

    '. - __('Filters').'

    '; - } - - echo - '
    '. - '
    '.__('Filters').''. - '
    '. - '
    '. - ' '. - ''. - '
    '. - - '
    '. - '

    '. - '

    '. - '

    '. - '
    '. - - '
    '. - '

    '. - '

    '. - '

    '. - '
    '. - - '
    '. - '
    '. //Opera sucks - '
    '. - '
    '; - - if (!$with_spam) { - $spam_count = $core->blog->getComments(array('comment_status'=>-2),true)->f(0); - if ($spam_count == 1) { - echo '

    '.sprintf(__('You have one spam comments.'),''.$spam_count.'').' '. - ''.__('Show it.').'

    '; - } elseif ($spam_count > 1) { - echo '

    '.sprintf(__('You have %s spam comments.'),''.$spam_count.'').' '. - ''.__('Show them.').'

    '; - } - } - - # Show comments - $comment_list->display($page,$nb_per_page, - '
    '. - - '%s'. - - '
    '. - '

    '. - - '

    '. - form::combo('action',$combo_action,$default,'','','','title="'.__('action: ').'"'). - $core->formNonce(). - '

    '. - form::hidden(array('type'),$type). - form::hidden(array('sortby'),$sortby). - form::hidden(array('order'),$order). - form::hidden(array('author'),preg_replace('/%/','%%',$author)). - form::hidden(array('status'),$status). - form::hidden(array('ip'),preg_replace('/%/','%%',$ip)). - form::hidden(array('page'),$page). - form::hidden(array('nb'),$nb_per_page). - '
    '. - - '
    ' - ); -} - -dcPage::helpBlock('core_comments'); -dcPage::close(); -?> diff --git a/v2/dotclear/admin/comments_actions.php b/v2/dotclear/admin/comments_actions.php deleted file mode 100644 index c90edb3..0000000 --- a/v2/dotclear/admin/comments_actions.php +++ /dev/null @@ -1,136 +0,0 @@ - $v) { - $comments[$k] = (integer) $v; - } - - $params['sql'] = 'AND C.comment_id IN('.implode(',',$comments).') '; - - if (!isset($_POST['full_content']) || empty($_POST['full_content'])) { - $params['no_content'] = true; - } - - $co = $core->blog->getComments($params); - - # --BEHAVIOR-- adminCommentsActions - $core->callBehavior('adminCommentsActions',$core,$co,$action,$redir); - - if (preg_match('/^(publish|unpublish|pending|junk)$/',$action)) - { - switch ($action) { - case 'unpublish' : $status = 0; break; - case 'pending' : $status = -1; break; - case 'junk' : $status = -2; break; - default : $status = 1; break; - } - - while ($co->fetch()) - { - try { - $core->blog->updCommentStatus($co->comment_id,$status); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } - } - - if (!$core->error->flag()) { - http::redirect($redir); - } - } - elseif ($action == 'delete') - { - while ($co->fetch()) - { - try { - # --BEHAVIOR-- adminBeforeCommentDelete - $core->callBehavior('adminBeforeCommentDelete',$co->comment_id); - - $core->blog->delComment($co->comment_id); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } - } - - if (!$core->error->flag()) { - http::redirect($redir); - } - } -} - -/* DISPLAY --------------------------------------------------------- */ -dcPage::open(__('Comments')); - -if (!isset($action)) { - dcPage::close(); - exit; -} - -$hidden_fields = ''; -while ($co->fetch()) { - $hidden_fields .= form::hidden(array('comments[]'),$co->comment_id); -} - -if (isset($_POST['redir']) && strpos($_POST['redir'],'://') === false) -{ - $hidden_fields .= form::hidden(array('redir'),html::escapeURL($_POST['redir'])); -} -else -{ - $hidden_fields .= - form::hidden(array('type'),$_POST['type']). - form::hidden(array('author'),$_POST['author']). - form::hidden(array('status'),$_POST['status']). - form::hidden(array('sortby'),$_POST['sortby']). - form::hidden(array('ip'),$_POST['ip']). - form::hidden(array('order'),$_POST['order']). - form::hidden(array('page'),$_POST['page']). - form::hidden(array('nb'),$_POST['nb']); -} - -# --BEHAVIOR-- adminCommentsActionsContent -$core->callBehavior('adminCommentsActionsContent',$core,$action,$hidden_fields); - -echo '

    '.__('back').'

    '; - -dcPage::close(); -?> \ No newline at end of file diff --git a/v2/dotclear/admin/dispatcher.php b/v2/dotclear/admin/dispatcher.php deleted file mode 100644 index 9c923ab..0000000 --- a/v2/dotclear/admin/dispatcher.php +++ /dev/null @@ -1,34 +0,0 @@ -What the hell are you doing here?

    '; -exit; -?> \ No newline at end of file diff --git a/v2/dotclear/admin/images/add.png b/v2/dotclear/admin/images/add.png deleted file mode 100644 index e892690ac5b45a68001c585abbec612edfa9b55b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1193 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m{T%CB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPA){ffi_eM3D1{oGuTzrd=COM+4n&cLd=IHa;5RX-@T zIKQ+g85kdF$}r8qu)}W=NFmTQR{lkqz(`5Vami0E%}vcK@pQ3O0?O#6WTsdd8k)IS zxEdO`89AA_8WFYa`DL%v85MT^vIyZY>Eu z$aTno=dD-j_Je$3W?%UK81FxB|M^L%F|8TPJq=O|?JxeF>hJYD@<);T3K0RYaVkC*@e diff --git a/v2/dotclear/admin/images/admin.png b/v2/dotclear/admin/images/admin.png deleted file mode 100644 index 074b4068b21c8ada6cc16213e93030f536f85807..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 625 zcmV-%0*?KOP)Px#1ZP1_K>z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUz?@2^KR47wpWPpOW>KV;?&Q8@2K742V^ZOsepFe*Y{{H#LAkWM8 z|H^@Vt!pL~)xy+*>6pst&7He${7YYP?tlJ@)Bj7Bo%kO;>)8LAmFNBi=JYh9C3z@4|%(|2A*i z^|G_GXL)UH?Tq~V{9bc&a|H$=AtA=Z#6;_@TeqIRapT6X%aVP}&;Qx9Y18w4lt*0xJdP7YNuNT;BnAY*H5YyYK7 zm;P!{K25D(&b{7|y=-}Ys5SRu4i-zZeTs2>>00000 LNkvXXu0mjfh6y$Z diff --git a/v2/dotclear/admin/images/attach.png b/v2/dotclear/admin/images/attach.png deleted file mode 100644 index f87bc77b50dadd1b8c89de269c7670268c93016a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 370 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$3?vg*uel1On2Vh}LpV4%Za?&Y0OV!{_=LFr z|NsBjuV3H4fB*XR>z6NIK7IQ1@#DvrFJC@?{`}s(dw1^Kxqkin`Sa&bpFVy3`0*V( zc5L6iecQHe>({Sex^(HxnKNr^YpbfN%FD}(ii!#g3-j{wa&mIAva-_B(qdy{Lqb9V z0|PxhJ&lcx@2}d~2eg#2B*-tA!Qt7BG$4nwz$3Dlfq`2Hgc&d0t@{HM6f1F!C~+=I zO)SaG&r=A=%uQu5Fw{4&&^IutDrQgus!#x_2+mI{DNig)W$;Z*F3QhMP037DaLX)8 zEzd8?E>`f3*ga881*q25)5S4_BRV;Ofzi$|GEmN-JFvmEvAs83@J!;=#Hs8-9x|$@ zEV$+v@J%*p?^vR+TV}>#1*L;WPw1-hJT&0$Jni|3S(0Jz6xN6Gyw99~1~PcM`njxg HN@xNAAb^u| diff --git a/v2/dotclear/admin/images/check-off.png b/v2/dotclear/admin/images/check-off.png deleted file mode 100644 index fc5f661d721bce85d63fe782bad90d4e2e5b09a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 450 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$3?vg*uel1On2Vh}LpV4%Za?&Y0OU>x@CkAK z|NsBLfB*h|{`~jTr@tRR{(kuI_k#z&?%w@%=gzO&w|`x~{$v0CZyPs$TfhFx;>Dk* zO!?H(^0BJwLrKYpf`SkE`5&^f-e+dMPfdN7knk=({#{($yO@}F(b4ZBBj1IEy$ub0 z8yx&LDCn)P?^{2=H=dqvJUm{zy1sFCe(mJ++Sc}!we>4=^Opt&FSWH_sH(n@le3E2 zoCtIqV@Z%-FoVOh8)-leXMsm#F#`j)5C}6~x?A@LC@5Cq8d2h0l$uzQnV+W+l9`*z zU|^_kV4-hdQdP{L1XQ5_QW2b=R#Ki=l*-_nm|T>fo0^iDsNj}alv^#UfR7-`qJDWr*qo7UN3*B olRo3-qr7R$^o?t(8{*mPEf(|d)VTkI1!yyar>mdKI;Vst0E=S9@8j@P$+@g%ubY&ZAdh#W(NcjUG9Q0D64(PU%^^} zC?>Ud0wtstK{0hob}>|1w=kO^YU|UMtaL*JI$)P(1jxmwlO)j80C~hOF_P5;lUj4X z4cq!#<4S+G!mDI`9jHwUSU`tJ25G&=aD;S#T-6ou-aV#CunIxl0rF2$2`LJiOdA3} z#ds8kV*tleY?ZINy7~a{GAu(gUYhlK*lMB5D=-XLdr0hNtDQnj46k|NC_p9=vILq= zrBYO?iZbmkn&o-k)$n>f7~ygH3?!#LhO;lPAVNp6H4AB`0bE77!|X)?5@-6S1l?Mf zHJr6;!WTxTWs7Dh#w{ril%)Sdb$uP}pcvf9_n*Q}yw8Gk3_517t>DIW?sKgyp~;3a zGVQo&_T+CdnlzE=Buxu6wfTW0E1KcPt9VHgB8G!xLxB-7KwMd0#Lr`Z+G> zXW01P@b!9aJhn9cNBCBJB!fPPCzwmn>tu6Se}t#U-L8)<4%P=B8hF}mJl2`yxQc&?W6_p)D3{Bv ztgI~mTKe(x``qHEFAML!E`0nt|9*CUX6$*-jj6*oCZeO02Ztxbk%{m~ws|<)n8`K_ zKdZm?Oc;8~4`sQlPnav?`!7D)d+9Ma|FB~4LHXJH+t1wFJaC&xT_;Xn-93lBicqYz zjcAyC*NKDnh}alUe`tBJb>}ItYx7k0#ir%bl3Tgl%|tMxo}!AT_Z%3lJ2xPmeNZ_) zcBuVcvTW@2_zZts_hc@=tQef;w=O=q(!8TCSkhSj=JUBg?AyxJQgLP*RkVeetuLKv Szc76i`w)>(t9Unf?DTJ3@qq#W diff --git a/v2/dotclear/admin/images/check-wrn.png b/v2/dotclear/admin/images/check-wrn.png deleted file mode 100644 index fa327f0e609396c5111896ace7e21a276cd22a8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 394 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$3?vg*uel1On2Vh}LpV4%Za?&Y0OV!{_=LFr z|NsBrzkh#!eER$2)q{N?{EKlck9Q4y&n%&eLPtGepk->9U1R;q`%vi z^ln??yR8ZDHpjf%9Q|%%#M_PGZ#RU#T_5~*UBKIQfp1oOy;jYXc2>_tDnm{r-UW|w2G|f diff --git a/v2/dotclear/admin/images/date-picker.png b/v2/dotclear/admin/images/date-picker.png deleted file mode 100644 index e35e932ca785f3649eafe142bd98c5895cbe4546..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1199 zcmd^7J&T@I5IsvG#9+XW6d@pt*!uw~(kRE}O|nbEvcv@qSPTj_779wR^AG}lRQU;0 z1k3#mV_~7D2-X&ZjUpD?Dfsbv?*0ugJkQ)a%$+mmocrbB!Ho;&FP{f+VSjIP+woa{ z&zw8s|1bBS`T;nD!&^t!eAMZu(;%Ou_WG&6{{Do43@A{64om<<5G0ZiQA86%AQ1^B zGND8zIxz|N3xPt)jZs1iW2{0HSjd73Rp`PL(1->b*-)bz-IxXjG2kEv8q}Z%GXNNC z9OeRHt*ac+Q$~=%3@TW`4o=XuPJ1OOvdAXK4U&;7n@J@r*~v+oWN4M9D6zyAM>O-O zbw7(LRef^X*SiYW;ds4jbdn|9BNp@9?lR;UAI#%c~pzE2C`}q3p+y!Rj5M~ z!eX-q$~BIW4dQ;XzL9InOes~VPEER{Z@bXBwMuGfBs&o$^GT;lRqE1|Y)`aIGF{iI zR=1{Q&thce>C2-U^=L*|@51!#wu|hc?Xok=#fYUv#_Cwn9X(-l?86c$xnOF^VN>?C<#h|Np`L+uyvpcmC{=dv`9*oH_IT`+M8BuIcG+ zIev8SnKNe|+`IhZ+3kh%r=K}>prgI<_RVv*XMu`0ZCr8r;_<0ddVuUj z3ubQmr+)=#9cO_@WHAE+w-5+3Ub#8IXksPAt^OIGtX8@K|w)DAv48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakZd z%cjB#s5v*aBvGLvHz%*ys=`(YY^D{E4HDK@QUEI{$+lH;1X-pK;TxdfoL`ixV4`QJ zn`~fgqF`dCXJl?O*Y5S&<|;FXxCU}UafWMBX!jI0a|txODojsXKDJ1!t?Qv55FG|-pw6wI;H!#vSGSUUA&@HaaD@m--%_~-h z7y>iLCAB!YD6^m>Ge1uOWNufvSUNJQAfWfF=kyxN_sAr%L zHyNnW1}JFdT$Gwvl3x^(pPyp~@xEJTQEGX9QFgI{bFi@uNGFOSgslkusV<2nsdm8d zu+TLy(KRv*F*LO@HL^0bj6%{6QG}-5H$NpatrAJQIas?HSi2!qJCY)(b{lJ#}JM4rIQ}= zH7oG6G-}?+YUuD$J@@AC{30I4)}8+r?tE{dFoomd0e@2`fkM$UGpro-{#{I*{e434 zmW~_g*BLd8j$OzyX}3~&PwK3%$>gW_p?3I z+U0~_gfB4JaXmAB#+~WRa~Kb#Mr^Bb)A_lMzklho>I9BE&GVM`tupFb(!M>IvrKxn z?=*(18&ku!ux$8fS->sIaO~%jwu0=SUZzsDy0s0rKLvkEud!oE6npZ!VZA)iHw>Px KelF{r5}E*DJ>Y-< diff --git a/v2/dotclear/admin/images/edit-mini.png b/v2/dotclear/admin/images/edit-mini.png deleted file mode 100644 index 890bae6452b8a54bfa35cd841ee774f8d9498050..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 614 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$3?vg*uel1On2Vh}LpV4%Za?&Y0OWoP@CkAC zx0SwkD!;X>_vixUhmW4tRur7MaD8dL_R7`Ech8JJd+O-XmCpS!TtB~kdVFlg;|p_c z9*$kV{phagF%zqU4=%FUw{PFfnKQ2+2y5?bEeevod-v9-PoK`rWVnC#?EnA&SGG7^ z-(=JmFMjms(F03MP8{BO_w0^~+w3172n{!4*tW6%_OXon&)zPX)!k8-d*kN){)xTs z&gSo3*0iw3>e{K@_wL=hzsvQ~-Yqw7T$`S$a&k@Jlc&$uwCO#&vbwXoZSvF!4b^$S zf4q2lW!a4#9?uTNcQ=2bOZQAqUfJ&T?B27BS8kj+bEYF&_|fC*eQ7F( z7L{K+cU1UNYzQy}rMq>1fPxAot`Q}{ z`DrEPiAAXlzKO|2`MIennTZN+nMJAP`9;~q3ceA$Cu*qx)rx`CIv1rTmSpDVDTHL^ zrZN~9>Kj<-8<RY)8l1R2@EK!~&zCP-Ty147bweCwgw6FT>lEvgEd|;<}v!PC{xWt~$(697~aD-{3$ diff --git a/v2/dotclear/admin/images/favicon.png b/v2/dotclear/admin/images/favicon.png deleted file mode 100644 index 01fa2e27e9df4c03c31cc8562aacb963ac35e0c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 858 zcmV-g1Eu_lP)iz^d=O_&y@3@78X?Y!$1T4Jv}~B3g}NT z@Ha$aWq`n^>17%H4@P2quu*m+f>nEt5txB-F*68bLo%8G`a;0%cEjuSUOUG13e;pW z>A<2W!awH0_RcQS>2&W22!a5oQ$R4_$HSlxK938zqY}2Zayqj(Yt!k|`AqyBUQ-@qP&KJdcqPHW6a!4Go4x37TTFXC||1dcOZyVsdqk;<;=`)#wD zn`4FI3D#tVw4ZAG|6C_CVcpJTbvbfs33<}D%lUw`K6+uSR;%M@YzrG3GLfv`o&YnI z@vwLWI755wCT<=x9*(2e*46=+efb4K5+5&*3-8(oxHXF#LYFw zZZ0`=W8VH7Gk4#ZwBvg3*6ZC{u6Jy@*0k-LKlZ5Iq0FX%U1&}+D$Q-5Bq`n+oOdF86}(xvCbip~kfMH?3pCQl$&H|6fVg?3oArNM~ zbhqvg0|Sd-iEBhjgs+cPa(=E}VoH8es$NBI0fUWwML}Y6c4~=2Qfhi;o~@FCf`XDl zW{Ry+xT&v!Z-H}aMy5wqQEG6NUr2IQcCuxPlD!?5O@$Rub8c!$qC!P(PF}H9g{>0U zOe-K8B&@Hb09I0xZL8!6vP>buH$cHTzbI9~M9)w+*}&LD!Ng3@$lS=%+)PIyII%>* zD=|;O$Xvn5zyL@XSs5BynHT~c0|rWVTtM2UC?(A*$i)q6Cy-~Wlu=SrV5P5LUS6(O zZmgGIl&)`RX=$l%V5DzkqzhD`TU?n}l31aeSF8*%1ZIv)YH@N=WKgSN@ zeYeb_)bjkI>|zDyU}GDQP83B5TM_zGT@p)D?SSE7p=)5GYh)N=Xli9@WMyg@g`^*% z2u-_heoAIqC6aca31%UNCRT=KRz?<3?MRBC+HLef0f7`S;7|wo2~C_(fTbkE!>gdQ zC+u5Cats;6w|`4k4MjsSE~|`i2(z2Byrv z!;^t3WI!r{^V3So6N^$Au%zi3*W5rQaF3^pV~EA+WCK+OiMGW|vaFh#mAZ4dzO+aj zXb2bH&6I1#rjZbIc$LEhM!p?B8#Dsgy+3|z)C|?(TH+{lXxXwk3Q=O+OqPZU0Y+C7 z7&QZqiSqqgbVi}F%vpx3XU9Rk2O$SV1B?+V;6Mt+Q*I`)ivgR5kWhHS|{2b(Pk1mDRMDR(F%i-WNl$NtKD`le=lt61C+0mo<9+$)?E5FI z?;dhKx3}-c4%-_$bdGJVJ+!Xm@(QJ0OOkdjO4vLrc-IboFyt=akR{05#H)4*&oF diff --git a/v2/dotclear/admin/images/logout.png b/v2/dotclear/admin/images/logout.png deleted file mode 100644 index ce75f91167f5c5b98cc6c646c8015014ebe132f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 915 zcmV;E18n?>P)DQ67S|3H;Rh4I z7Z~#B=+Y4u+Y1!X5*D-=7r7W0;|LSu4HLf?7}*UKy%!k37Z>Ca6`MXfycZYa3lp#y z7u^aJ;|>$t3lzc^7r+`E-w71n2^6&>C%PCHyc`|6939{Y6r4Xg)DRZ8ASdGq6WuH# zrzIt{B`EOY(C}&Mh$CHmY3lhA&)jU@aE;WA}7=%9ro_-(IOhxB_6dH7w_8Ix>Zt`J2>|6 z@5v@4!5SRLJUp-{Dg68Tyc!tBYHH&S6w{cO%U)jJFC)*3ir}cGDCMdQZAHW+P!x>#I+7T7R7#O!07rtO!;wmoAadO<5nfv$m-C$atBqXaPCcPXTtR*I@B_*IFB(x$Y zLh0VmK)Fm5B5|6uSsScw3de1=z?*@OWe6ZV0r!zZ;^G|l7nLCeBe zMhQ-I&k=YJaC~=YLdf&j#OZVwg3l;~dSMiynAJ*-qNIMgg(|cSJBa@?J(8C9vUph~ zxm9hz*R@HSnF@(<@Nnd#;BUctie$cHYX7lxEy4et5;VZQfNJwfcB^kKE>CLrRYXG2 pVRdM1z(IONr(ABeK7IcQFaQO>K%T#JickOm002ovPDHLkV1gy#ih%$C diff --git a/v2/dotclear/admin/images/media/audio.png b/v2/dotclear/admin/images/media/audio.png deleted file mode 100644 index fec7e22c8e7392acc5b8297bc09be3a7ba5d89b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1170 zcmV;D1a13?P)#2%*=d>Goq<`ov1k>1|kXmcw6|Np(c zy~N0@i)_bi$ajK1mZ4o^aUgMiE6df4yU1&g zn^35^LYt#+#n6P(+nt4xLfqcYsbjgLa3-jUyvRbp`uBp za%CcPQQ16WDn0;aonR=?vbO>?-N%1cz4>h<`0zO^wl*4fDdpw;sKFc1=dXXf`Kg0^Jv!PCA}#u7h+9<3>gnm}=;-L@=jZ0;=H=z(T|N#K6G7yu7@+y1KWwx3#skw6wIdv$L_Wv9PePudlDIt*xxAtgEZ5si~=_r>CT( zq@$ywqN1XopP!zdo}HbYoSdASo12=NnwgoIn3$NCmzS27mX(#2larH?k&%#)kdKd# zj*gCvjg5?qjEjqlii(PfiHV4ah=+%VhK7cOgoJ~GgMxyBfq{X5fPjC0e|>#@dwY9% zd3knrc6D`ib8~ZXadB{PaBgmHYinz1X=!I?XJut&V`F1tVq#%oVPIfjUteEdUS3^Y zU0hsTTU%RNT3T6ISy)(DS65e6RaI0}R8vz^Qc_Y-P*6`#PpDqW{{R3032;bRa{vGe z@Bjb`@Bu=sG?)MY03dWlSaefwW^{L9a%BKbVPkS{ZDnL>VIW3na%FdKa%*!SO<22; zDkJ~^0^UhPK~zY`y_QXG<3EV2r+$Q6=FV0lc5 zKV8*XbdwS#dVp*~fC54Ft9tKMRW~F5@rwT!;Kz@WbIwvPRaH@upjw_q{FmP^0U!VP z`y518A#=H(KCJ+|=O3DRMG#=KZ!(C?zV7@8PtS1QO=w|-=3853?p7O{{Rv|?oC1qWHpi*TN*lfP|@Cs`1bVvZ&_WkB&EOVK?)T^~P z0dVK1Hvl4JIFJKir_=?&`7*beaqAKQ4F+msQ>`@4`|2g2bobJ1;qhfEt3{Sg?}`!v zHs7tsks@EyriLc#0m7IyuZ2W>^7! z{@k7a*Yl&-Aj17mE5NV6wIKUu-!xiJ|LpFb-P1UZeP&o^U@W_fgxJI;gs9?fmeQ1x j_*{If800000NkvXXu0mjf&25Wr diff --git a/v2/dotclear/admin/images/media/document.png b/v2/dotclear/admin/images/media/document.png deleted file mode 100644 index 5af28a8658b659a8ba95ce3f83e03648eda008e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 762 zcmV@Bjb*WO9kR&c2SB zrkAhD=H}+i%*9k_rJTCfnVFe!dya>QijJDHhl-5% z_wJ6Is+z39x6Qwll%<-t*JfsBX>^8@rMP;2g_)U|V!W7QeL?Lp*;u!qxG^0j>`c<9F3L&+O>4~7&!_i1aCn9=gRQ^zCsS(|G_$~`07f9{&3g9z-MAP$ zlGe0O-+#BR*6SQ##o&%5%d+D*%cUdB6bL-fKWahh_lv11D|S=TqLYB@np(J*6uMC` s=d6Jt0=l9oH8#vAY5%aR2}S07*qoM6N<$f-hTh-~a#s diff --git a/v2/dotclear/admin/images/media/executable.png b/v2/dotclear/admin/images/media/executable.png deleted file mode 100644 index bb830b8924b2578fc1ded1bf989aa444216d11ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1240 zcmV;}1Sk86P)}rvLx{uC~ZYWs-V| zuguKMj+?S(fum$-d@fRgy}iA(x6!7w$%~J%-s9_6Zkc_7pHNkBW_hE;$lLe#_k@bA zLt&1qtg*|@-1b9alc zy3dW2y4~L6=H}*RbCXnEdTV^8w!_qUhOLjAyT!%DRAYruRBm;FppK!tY;1xySchX| zet(U!gp;*&dy>)8*rlz#O=y(J%iVH)qot;+ade57sla@FnPYRMl9i@qXn{&mY*AWu zgpIVFqr{Szyi#kNTXUSPwas&js-3OHij}vtyvvlHzPGoxSYCNQUW{sZn30~fy}!`b z*4C%6%C)}JmX@}{#@Ty(mzAc#aDAIxVtjUksCpgQaYAjA3n!p`@}pTZx2} ztx|KGYn7=SMlMuy8m5*5_g zNt1RGM-E(uu`3B_2M2gqOw^JYnSz$*^!I!3Wn;VBu;ZtmPn_*}wwHT1Koj=_{kNcs z#CrwRn{TRkkDz)pBfRu4&{K@bW`vl)-a6;0D(c7eRUU?Ro)t(H{C z0I}6!foz|*WsT79PYJ}%7)mJg-YSsoJ7u#_h>zz9Kg|L$zG)Jzb&dP|3)7c?uY&?v zzUGh#lBCRI;!764=nm3AJ>s1%1#g}cbTC&ae`@Hr6^QEFG-Df+X^b=A8g1vdy{^IYI=GX-)rsZXI}OE38?<(w+E~+go(ER}dbaO)mY}Fu6X)}7(0L8ydcEGe zoE!Sir&UxpuBc3gP}-Sp*QnRsKJz}1!W;ropN$vy!Xg}^i7PO5F&qv*fMN`I zJ-)qH>c9b-Sj8})KAi1zO2?@9d2Hl~oH`qW6_Ob8{{>5M6J{y@3PeT|00000p+)8Vey}i9tg1K8;Tal5FQD}z3&)_?0rt$Up z;_33Ot*vHpe`cA?jIr2omBXjQ;Y@d}#l^+e*49!|QgU{BbfM6DdwYGR(^YVkwaw+D zxzXKTyKb4 zh`wx*zWR(z?f?J)32;bRa{vGe@Bjb`@Bu=sG?)MY03dWlSaefwW^{L9a%BKbVPkS{ zZDnL>VIW3na%FdKa%*!SO<22;DkJ~^0xU^HK~zY`-Ii-}lRy-PlhAgtw%lr(x=LIp zEx|&JaSdssm9b%@cQ5pOM7{*$%EMR0oFbuaiTA9N` zcoK$Mz0D~Ju<6(q!~(lu1lUs{z`%>&eK#axxjb0^_$jJqa{m-L*Pa-t)B_W2C z+s=2HFnOH|3if|YC4$#EI~4+<7JapIP@VV2YhMZh51;Qx)p>7x@ly!8Z_&qV=T&*b zFwXb43xN%H&zjYFBii{Ogx1jVzjemf=8ZWA(`SXCXh-ilRpq(hJP?AaVc%{}R+BS8 zq`9!!E(Aqek2cC@Vq7JP^RLx?iMQgYBFpi{n|yjckR4N2;{Doh_8x-t?iA4B&+ z2s&~L29#S*6VuH1z?Hho=N6Y>9L<3%m|r~YrfF8bG)4K!k`&$qUJl&VAq(N)y0IGo hZ8M|IZ*JtT!(Ym_)8#kqCS3pk002ovPDHLkV1km??hOC{ diff --git a/v2/dotclear/admin/images/media/html.png b/v2/dotclear/admin/images/media/html.png deleted file mode 100644 index eed6e049e42497a1b4dd4c2588ced234eba860db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1811 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 VLnw+QwaWki002ovPDHLkV1lf+$fN)O diff --git a/v2/dotclear/admin/images/media/package.png b/v2/dotclear/admin/images/media/package.png deleted file mode 100644 index 82f5cdff6fcd2f3f7f071d283f58d6cb563e5e54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1153 zcmV-{1b+L8P)$?e62@9*#D$CS^qgzwLs&x|6sib1t{8|vN3rEnSP)wb8u%)**k$dW$n zzk2S+jPTa1=Co+ln?T{OVE_OB-oll~q;189BH6{J`0LmA=grlgO7!8y)3}b^yo;@U zFWt_z-L`wo%*?8FAgFU7?bx>F$eP2hjNabfw0k13gE`m0ox-PlyNyE3q-6H+=iS%N z;LWe^%8vK<_tw_d?BUL$Y7p#j7IU@z2C*2u6ZHx z>D<<@a>Jcs%C(ZrmPE{%GvvO5!i+b?j48~A9lf7$=(=;t#=zdal)HW$=*yk%)2Gh?^N|Nl~Uu`3V-ky?R!1J|sWOB9zv7Ey5p(>gGL?a*} zQACo2Xz>EC$!+%6CQDqbB}jyKcs^sBB_^)o@%YtcoS2_@8NI*1fA2XwI?{28W{?#s z{LZP>rE>WFdc8ijzP^5ay`7y)eIRz&Qb`B14?#-Edluv^gR4urLAj+^9m}QEpb)+_ z3Pxj~$K*j%VDA{3OhN$%`#CPWSzrQ{9+OMN4B=9ktP{%2zK=R)V!&t28(Kz}mL4aG zI_53sEEXqM^-*M9iG@JA-9xKF`wc|kGe~ioHG4)f$DH$TVs@rQQGi8u=&FQ zV3D`(G@P3u0HF0=0HyX}*1dag>8=>xC_e{f>tve`hXgD0|4sOOY z3>G^AfMn~ShLsFNQcEBqyIfh(u|l0YMn5E5nYvWB1I&`$sP3>@G`m>!Y6FElKs zp-3aOcuIhmMBAZjX0gA6A|pO7NiC+Tj@IXMyj?N)`C-1ft@M;2aD53E__S(2D#;h2 z?P4;S{D@r=fy~Uzx+^PJSyk#~)fUl6L91Jj z)*}-vHsTq@@oYWEBOdjNM?Gqk9byl!f7@LGlrwC&-q~ed3F~b71 z0s-i%%z~=ReZlfD8>SRi5N#I32|1httg--waMFs>l?Z}Gzz89ZOyWE*i1{VpP(U*-zW4PCTb#%lJQbY2EThD3uaJzkAwtlLU zDj;Wt*B9TA@E#5S(rSI2OIAn;GHqy#cGI4%*IRFghMtYY(-X47*|8o?|L^{drAG@3 z_g3N+a)p(BKWR6oZ~u5QzJKZ1i?!r(eud-Ln@!Tq$vguIKTQ?lJvT^f+McPc1K3~wzou9gSV*9Tssoj$!j|%FV_T3W)fTt34$cxbov5e;0Kx&q9s(NIQ?isN*I_NWCbN$LMcrU zo+AuMPEj&~luxlxn47gisZf}^L;!$IC?_HC-E#Q2kfAEhkxo$Tf7d~ z1q=nQ1~I!JPdGJte6R|f;gLCb2FEC<(1Dg9kWpn3fMfEI=0=b=9Z(_wfDFem`u~7= zdWq?-$PwsnAu+BEdC{YX90hqI4{bNtVR0ddc9Ch?)24;35Odl#O{Doh6yHe-64VVt zL^u*K79rH36bOkqP=_2t9On-q{t9p$W2_B&vC)5ZJ;gv?Jd!@_t*00000NkvXX Hu0mjfrtJ+~ diff --git a/v2/dotclear/admin/images/media/spreadsheet.png b/v2/dotclear/admin/images/media/spreadsheet.png deleted file mode 100644 index 842750909f3deb0bd7c8529330b7d76b2a6e0309..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1624 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 N002ovPDHLkV1gt+Fk%1z diff --git a/v2/dotclear/admin/images/media/video.png b/v2/dotclear/admin/images/media/video.png deleted file mode 100644 index a0ed12ccbcef5ead8b18f29f752d657bd47d5299..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1250 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 diff --git a/v2/dotclear/admin/images/menu/blog-pref-b.png b/v2/dotclear/admin/images/menu/blog-pref-b.png deleted file mode 100644 index 47ffc037e0c190320fe8d658de2b859be3180789..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5339 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 AM*si- diff --git a/v2/dotclear/admin/images/menu/blog-pref.png b/v2/dotclear/admin/images/menu/blog-pref.png deleted file mode 100644 index 6fa527fddc5dce108c563d3c3d1b76127abd5f48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1621 zcmbVMe^8TU9A82~I<|MddtuWl zX@SKdQU_KlV1(l=q;rvUsVHXtCbgM)saTp|(c#WKLT;qJ184nV{n2yxzR&l0-tXu0 z{r%P~$<2;o&SWwej2O*AL{IPW!6)(s`ptgu7^SzDC{;dXAc`p`N@5JTnJB^ljTJ4y z^cZShzwRuS!C-`$abrG}uhYUN!pcK~Iy{%vPNNx&j4YQOHCZqUD8fo`n~dW>e2fF& zW*KL>NC)cdN~{!LxPinB8*+`N4HlEs%*o0GGF&iCV8tjDa9PW24%j8*Oz^_A9K7ap zfC&}KBI8Utm9JX@CNDa3$a z4ikynDV(qYK}NKQD5qo`+SADptahF5DY4D*BvEwA_%77Whj<|0Y7NFUq3xjb*xznE zQ`=!&Z^!t0%t4fsCb}NQNg*(uyZ<&6RHVIu7n3+$6toN>OyyS0MrjZkhyKDd<7OBU z$>oq#El8IrKotnlq7aeG(^Nu{TCGkKC_)_1!m5-IBos(N1(Ys@AQh+(LUN@@DNYAP z2qZ}tgs>W$gFD`-R z#@Awrgw3p;k|~^86HZt7_STiQrkB}tU&P$9Cq@JU2duNQva{FC3uHJrECfp+Y&V~) zy!g#6%WC%i+S({{SHa%PxK^uO<95&TwsSZ7{n?N1guC7Dhazc>um6>V88gsb+~^Yv z{vZ-6lEXW`EnQPlkx&dUD&ykfejXT5mFzJ;d{4VpjWT~6WwE$d*5-{S68BGxc9cH$ zZQqz#-`18CGc+`$DEVmGRvehK^VI3n@8)`l2R zx4&`V5O3|lnKyC<@}{so0r%(K-M5E^n2(XK8Uj`JGxDKqromvy*}Xq;_w>b)EoaS{ ziSa!i&+}nnVae~GkDpUjO{UGP#tQuHzCGv9FWRw;h5Mt+=I^U*ZGAO5HZ}#gO5`?( z-Bp91WRb>^@%j{FO3Sj%yXM1i+CF1SYiFlUx3aL%*X8v>;U^o4yl)rwwAX0$rk#vMGj*W}+dc9lR z(9R!zxi~U%ko!SP%lAjYJ7m)Adef#&tGXP%Ri3#6o(qz;F9$zt(%{6ouJ9|v!^3q4 zwnfkB{Nnf`nM{_lC9u*m`eJ-X_u<38k#oC`92xJ84fFxMeSO;TV~jAyJMCrVZ9dtx P;E!IT%0)g^ta;-v_*h^l diff --git a/v2/dotclear/admin/images/menu/blog-theme-b.png b/v2/dotclear/admin/images/menu/blog-theme-b.png deleted file mode 100644 index ecbc7c489255c243f57308f284f90a8a043113a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3925 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 diff --git a/v2/dotclear/admin/images/menu/blogs-b.png b/v2/dotclear/admin/images/menu/blogs-b.png deleted file mode 100644 index 33904fc55e0c5df40c6d5f5d2d1db3da8c1f25de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4371 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 diff --git a/v2/dotclear/admin/images/menu/categories-b.png b/v2/dotclear/admin/images/menu/categories-b.png deleted file mode 100644 index d91c5ddd6c634577b5c62cfb1ca15a5f476e82eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3859 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 diff --git a/v2/dotclear/admin/images/menu/categories.png b/v2/dotclear/admin/images/menu/categories.png deleted file mode 100644 index 0587a860774b7e7ef6dbe7fe88857dcca3b8daf9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1472 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m{T%CB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPA){ffi_eM3D1{oGuTzrd=COM+4n&cLd=IHa;5RX-@T zIKQ+g85kdF$}r8qu)}W=NFmTQR{lkqz(`5Vami0E%}vcK@pQ3O0?O#6WTse|n;4o} zy0}#&rIU%MGbc{YIX&@yPm=G}iftc`w59GkJPHG-7zZ3y8 zhPl;&j|>cqpFCY0Ln>}93ErC}<|txo{Q2y^C*2C+Vs5k`3EG z2)@zPVRh`7;LeehDy}l&(EK%qH~*GBe_oYV7HN{9D7oXz-MQ80Y`>pbCnOk?qIs;V zu=tk0MEm7`>qRB&Zf*2PD1852P7Ef&##Hj7qOYJ*}VFNjFX6rZ2j@YPhU$`{66|_&i+3o`RDZa-`;=z?PHG%du~lu zRQPGgBY3v3yYzOk!>?ez%Nu4@nJeT3g|mi*uV1+D%ZGPKb5^x-*-0lYIvn@cb+N}*zN1@A!K{X_0yF@tWCVZoNG?Y zC8>N^{+U}>chM$^Dk)j^YyTVcm==lDq;+4|bZV|LN4m%M2`U~EGd5|=5x8@BO7x5N ztT(GHx!hZJtoh;Jq%f0VWBXOU)@RM@E~?M5Ub4zJEV%x~Ker3L^I3a?Y92FsG|q~fC|~! z!ACOVS04pA$@{nPy~C18oA0=b@5>J5$5Oa-fIwr1&>>_dC5-Mvr_kc|cGIl^K$;fr zw~N2a-3>=&GtDTg7&8HrBVhx8wVi-Np+?gAkPv!UILih)d957^38&dWcUro`-8uGj zM!54nF5P#ZhaYucBo#}8+Sx*^1vrTSlg_6=1k5NF4=1pJ{;7+TtXGd=P{^MUexwcb zFQ<07dqM2kTsp+k3~ow=qu>w}!VF<x@P~o} zok!({bNJzG7GzbC62gw=+dw6r{uKg~^qFpKv+QIeFw1QZSoVFrgWnX7UAiRSTr z=>K)&AJII&I1U}=L+7!hxl~C#LJfbACAs@|L#sfEH#kpjxTGkQC9q47^#j0FKnM3c}20zxtz z;Y2KnNF)(0uo!a-655gUgG*-d_!JhE{=;s##O`-4>R-7ydoG>AXLJ47?5H0d;Kg9` z**pfD1F`qDgzOAw(b%!P)#CgWs{@@I9z&;*xNIim&+OvD|G_%i9FD?Z?Iry}Ago4B zbbwph6U@;l6xy6*LBv46b7}ui#$Xa>V5_b1KdtiPNYa0+%fB06vibY!&{>lE!j)W% zB&zIL000xo4g^2J(8~bV!@AEkug|=zWH*d03+}|sxh2YkEwWsMN&4G#E5Z{LCSZ(WOvi`yGa&X106sf!p)`jV1z zxob&R0S{&t<|>uk4LTleXeThbz+JhW2*5pJ4hA%`mfZ5i(E9{KyDkG;S@DLvE%}hr zT&viRFV*%RD<>^;pau#+Z+0Eu_RuZ6JxPfWby<)MVIHyEoPE_(yCO)3Cc2-8RRo2=j;JLs`>XjsX0YLwdn|5c%Axu=SRD_?T}B z5RLUNvQ-6PInq^&Wp=|FAAyd{19#It|2{6GlzasM`aoG2VZop>NvLbW-8=$7JM3S{ z)P?t+S?m8>!4=V6v5>J`kP+9PD<9gIWS0d@Hm$+8tEc9MJKbnrgkeU>&<) zoT>I)^K^(O4doG;^A!AoT$3qt%NW1ixaf<&P;Z*UFnN(&L?`rIy+PvXZviTT2EH`) zcFSHeJ^45;Pa|LP+;u&?s9%NAFu^aqd%3oMH1ttw36yw!KzQysQQag9(|FpUkYwfO zxGNwaKHzC|=!Qd4Cqm7tgSUOE9oQE5ZF0vWrju}M>OgK^SG)p4N%@zwr4;F|^NOv_ zwK7U4P&+)Hi9~4$ww{x)nAq4xmZ)v%^Y!>S+s>Q_2G0Myw9w{O>AluQgjjc<^z7Vh z@Q3V8n8iCTo6pR59t|R%^-1=rmdU6PQeS-i<8IE1VC-ID4r3tmN$@MZ5nmYyXlp(Y zp}5&xnfX*sAJm`Ge7~gfNfo+-NSC0wmIRw)%oM+9F+_o% z^AVa2j>bH?xKXr(8VG6?eEub2QCNF+aDR(yh*Z!+f2FG?TFUpg7JLmUJQ4NeYi(9) zu{5~=_g-(b!>3`_M5)yLsZ<#B^wefG5a?05kryNG_;!0}o1tF!*W`^3yq(Qi%fa9o z;HR#~F)n(-1ufN_ch%dkdt-wgLH+kSAv!G?n+Od}PT+^TUCh)D5^W0=yfn3=?jCrT zXc-UW3f=3{OAfU;e__bx38jb5r*}K`*4x1K#YGcg08)>Ow@sV$ffta+kj8<_hcWm& zTImNZlgYYu+Q%kl2G`TXLL66^cv60)#;Bm@%)D3H3;>!a0?QrB$z3a-t4K46S8z^V zkNDEl1%h(%KFw~w`-+&JAZu6esob8*TcEAh2Q=m*CZjn*X*pG4R<+lMk@!>6fWMA^ z)2{iW{(D;cZ!fs;P!~gos-zD~Bm1P}8+269WY7W?4j+T|yKXIlx7o5-Z1#$8XUVHe z7b~N7YwcExOap=5T~(`zz)gI7EC6lR22zSLPKe)P_jJr7LfsxAix<0stgZ#gHxNu~ zI=E+*dn&aqt5GzJr10-){@X5z6P60@LC^;oUH29q1h#gx!hZT(E!@4~gwcoVUaz;D zC8X_ij%e~&RzI2%Q14%1WztuU<(*oTYABKqdf(UKp+S>VQV7{i3EqJ8vjIOlW$`N4 z&idxTo$JhxfI9Q#GF=z&KzHqdsUT&x(eyqnWXN`7OgThTvxlKsP_J9Q^I~#eIV^Md z)wS4_gsIoPTLwlO8XDMaCUfcS7)#UbH0VfSV0X54|GiCHOZ-(!#xmMcK6Fp|`fEQb z1$t!j9xi!)>hEz@@Yady9M}<9Eh4z7tPl1e9grDJvCGK5C@>I>q}#8bBj!B-TFKh62r0U6`p zw&9XimY3}Iv?ngrcz34<-Esu()#L2b*NkV?8~>EsGS2C7slU)&!gT!vz50Yw>8~^77o|>rrln?s=JnQKPV|A z6#C|AeOsTE4YzpKz`I~D!s+-WwejEm^i(p+t}Hv>oiB~4Qs$L?9PPx8-yMs&eP`&v z`T|j1#2E)>jiFSPU75wXslWuWNay#2iFju7#eyQU`pa5J=Jw5wkU#j?LEETQoPqe# z0gKux^~K@AvDvMprtR#M&ep>_krDYoI$xA7zv^M$VhBuy`e*OCOgK%EO$6Dw` z>*BuYO3+1i7u?&?%HDt|Sd5~I={BiW#+eVw?b<=3OP#KJ^z(z)=Cd5%2pn9do~h9X z^DM6BM6G1*k36YgF>WwN$?!IW>??Dg*jCY0GIB`ekG%#xry|EbzHH{by_2omJ|A?8 zo)V!cy4a<$_i2?LFnU#RhP7zxVVHdbG*H&E&al(FIzgjZ1q`Ueu?3IScI;@#@N8 zk-5^gLx~eZDU<5jYf{OwyVG87tf$-r*LOPgj_sCLNIkklIDGS!7 z@)no&K^z_+j=aBa(n=(CDIPnf1b1 zttZciD~2{5oty&Wr4)>M9&nGhbc-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPA){ffi_eM3D1{oGuTzrd=COM+4n&cLd=IHa;5RX-@T zIKQ+g85kdF$}r8qu)}W=NFmTQR{lkqz(`5Vami0E%}vcK@pQ3O0?O#6WTsfTIaydb z8# z#lqag!ot$b*%_wSGq1QLF)uk4W^X3QUWi@`yn3yii&7Iy@{2<9^K)P+ARr^ZB)>Q# zzd*q`*i<1rGcP5-yciTY5Wl*l7G;*DrnnX5=PH0h*D4d6?F4-d(VId}i0K0zqYp|N zNJ#}I1WbP*COqK-IqM>(8?}-T!pmJokg|bx-fHvn`&_GL?CQm|{To zn--?$n>i)UF5x+NNAc3sx2Gcwf*K58aXyP-c)Dk^;H8rnTLl74*9LIu^&a`(dNcON zB$IrV#s~K-jUw+Z{lmk=7+^emp-9T*!UO7@GrpM3^KJ5~(*7XP&U~I-bZ+9qYUMdi zE;SOna@`rU>v?xhvYaU~O>%*qBu7CC+pJ5O8a>Ll>fXBVwQ*qKneZT$CBp12%hB2o zlD1}o=>>t;c%(QrUnyS7vy(Zv_S=uSw~tEahu_~(eg9gR+1mw7%{O-*|18c{`nyCs z`Pa+rrF$;sg?BisZA)%T-M>C+|A&BQQL~L+o^GG|e7*Sn+CQJXE?(Zf{KKka%2j8I zXSJWZxbR*Wv1GqN%C)t|DyWutf;RB(E_`njxgN@xNAe@74z diff --git a/v2/dotclear/admin/images/menu/dashboard.png b/v2/dotclear/admin/images/menu/dashboard.png deleted file mode 100644 index 95a9ac43817a5b8ec273e31c6638a85cd7f0372b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~i!3-n?Kj!QJQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jii`t%LR`ZmBfozAdiLD8`i6#O%a^}?{W>u@`TC6;*}1t7 zA3mHkWy-EyyAB^YvSGu9(z3G7uC6)r=Jh19vjep!d%8G=RNR_#Znsdg0gubYSXFVdQ&MBb@ E04_{w(*OVf diff --git a/v2/dotclear/admin/images/menu/edit-b.png b/v2/dotclear/admin/images/menu/edit-b.png deleted file mode 100644 index c386f2a1392f1f6f356a0998e540827701a65656..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3356 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 ARR910 diff --git a/v2/dotclear/admin/images/menu/edit.png b/v2/dotclear/admin/images/menu/edit.png deleted file mode 100644 index 516e8ba21782158d556ff6343b71230678fb00f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1591 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 B&}#qy diff --git a/v2/dotclear/admin/images/menu/entries.png b/v2/dotclear/admin/images/menu/entries.png deleted file mode 100644 index 2f0070636b984219efa94dd82039adf0f344f3d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1547 zcmbVMdr;GM9FOy=6^~6e$Eib_Mcmw^P0}ZgRBf9Ex>;bf9H5gCnm}`qq)US>RS|Gb z@O2<66Ljivvds#kjJ>EXM-O&9f>pgi!@pufzs`#CZWP=`N&2Fpn-^I1}`swH*Q($^>QV z9Eihfr9Dh?P@tW`6qh?#=r&T&yt!av0Fwk*S|q^$Tg3UWfC(DX#iV&?8-~Ckh*)TX zhMmfCq=8mmph2AqQMwU50_sr}s?iz@hImkopa_hpVN|U|4VXraAqY6~K$10q%E!`i zV#JoTGC>|u^kOjV_xn|TjfxivVAN4`CP+F_Q4EFQ1~ZE2^oS9)AT|U= zjf4g_o3%ELjvxrF+7i|njZ5eV9d01>7Bs<#qBg{mV76Lx2?o8aPfRmxC7EWyvX}Jyce`ObzmmLQM}(5D$a1MI4v+sXo?Vc z797eh#*Aj&m|(P`R)fK8k^CMl>R~SRe=-J3&cLD8_)n{Zx1|0HO`kQsw0L%PXimB> zf^;!@dfNs8;02Q%H@gDYmQ_1E7t>-o2JHtAF~^KIl6x-Ou&nJ$EN1bXZ41_ne+&jE zCkD>f7R;M+BIR!O!(ZqBWPT~w0|h6UWm|tq+FYgR-g0O${eAJG_KU}# zOSY6gs7t!BxHKU%e$z)3l(V8|$*LXizOko;{h_aG_7Se2_g4Sbzs7yCZ>&5=1?97i zCq6jl9r*do>eL4Ju4=v|`dYuH;mbXHVyaJqyA%hTW~u!T@7;O2|L@Me?Mu(5DsG>@ zz?Wew<9AMLj&93fyStn{eRY>FSC;PG{lx{K$((S~ea3vM>%ebSmugPlK3!FK zb^Id()6uD|SygQ_M6Minty8h?e&fX8$7>apmM9;lue$Omd(frL+Y(`15tn$l`Ol~O zUfvKl73z4k>`iUtE9>-@6Mx7Ju^Ug%Zi$c3XJp4wx{TK^QMU5&sh=JxDrd6GKAQpI z^0@=wRa~EvIkRDUxwEWNu3(GmL78hui?ZN7OHx@(`Gk})QKeVc?v;`6=N3;4-r4Z^ zdbl2HjktHEUABESMK7wfeN(Ztys6LGO|_I}%v39?pVX6Bf?MMr<{Py6cVfU-X$ifEGAU%a>J?5&+~ny(+ho-1!J zPt_yx_08wrYC3SA{WiC`_u%fX%+zzs=GNA)|51o}(r3Ld%V~^^-FEZ(?#8vfv9jZa ulvB~3H46ieRm*QWI@FWjiCwdKK#l;5YNq=$ZYmX_-?QD8g73BDR{R6sXFb#a diff --git a/v2/dotclear/admin/images/menu/favorite-b.png b/v2/dotclear/admin/images/menu/favorite-b.png deleted file mode 100644 index a2dca4c60e14a8c3c88029353d31f9c09c13beb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6047 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 diff --git a/v2/dotclear/admin/images/menu/media.png b/v2/dotclear/admin/images/menu/media.png deleted file mode 100644 index f4de5e3e5461105dc455b4960078c4c3d9048f75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1532 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m{T%CB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPA){ffi_eM3D1{oGuTzrd=COM+4n&cLd=IHa;5RX-@T zIKQ+g85kdF$}r8qu)}W=NFmTQR{lkqz(`5Vami0E%}vcK@pQ3O0?O#6WTse|8aSI- zxEfhl7&;lc8WxAZL)R)3i|wXHgnSLrn?g>A=>r|3 z4@w$HNd+bZOn)FIJmCX5@T`-X2h1-;z>IP9rPM(N1|~gE7srr_TT_C4^MwLMY~Sx? z^a}Qh?!0TFBa*aB!RZjwCAGYse+)v*(;STl@K(?e{aXY+X@n)jrBk^jdnu=6S1=6uK(xOwYn}!f@=?b__ZU~{%4I;r<)lK*UV^)n`CS3HdTZ62-vKzY4t zu2()&&1*kGG z2|G^}G*98Z`N;U6pzP6o#qU+iru~^XEq9_`$<6q4>x9cVC#rtGdTcA_{CX|}hF$9w VkEgGU1*RMZ22WQ%mvv4FO#uD4GbI23 diff --git a/v2/dotclear/admin/images/menu/plugins-b.png b/v2/dotclear/admin/images/menu/plugins-b.png deleted file mode 100644 index c3b59260b2e983d8033d2cf8865cfb8d1611d09c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8750 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 diff --git a/v2/dotclear/admin/images/menu/plugins.png b/v2/dotclear/admin/images/menu/plugins.png deleted file mode 100644 index 39995bb1882943ce9c614aa9b78693251fb861d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1663 zcmbVNX;2eq7|u`+h~=oac(7ThVwLP>b3nEP&61=AG2GX$?{A!2rZMU`CWcC3vT&N$&`)I^a&+@&LANjrz;@j@4{cHERkFhDY4vDy^iqxwb=u$mR% zGN}&M*~5ucYeY6p#ANG@rtCD6+zc)V143DpBOnO|2Us%Q=0I5mIK+!`vg;TEfgu$p zO#!}iDo$qr!YP^nq(V5z1j}GRCK8IolHlOr`2YfoU?j0fWn~Go#6pU;Kq9$Z?&3g@AWkF5vBt*WY>>_2Kf<6Q946Xo zXRMSBa53V^R0g8}IZt1PK-zV>SHw2QaH6=BK`d^EL_!!MNmpD$+72d~_}7isYCDW; z>;x1|IH(NT#ML9ke+10s?#+f=ikvs-657fY1y5H|rVNs>FvYCW0{}Sfddk zBUr7?!QeI%F=E%s*&W6z--t!SX#!^`+DK99BOPE!r5MVQO4)(%7%8yKYBN(=4p(tr z#;PJ{YbIgV&=d&_Wf!%+#=1NN!8C|kCJVvDLs28)YNeQKBQ6+BE{DNktoi?B4C0)D zT&?k+Rv9_s`p+f4YJ6_DBY8Zx8m&rcWIIZV6PHYgnz*^~eo1Uf zTSBFw#IR)}?Gf1IE@&ECa6E5z0Nd~RVzl4m)=JHU$aRmkems$zN75(m&Ern4N)VRw zf=CNG#gY$he|G%(^_HDqHT)94_ClDO&yHQYIv4MaPW@6N+qE}tes^F0jq{1}+SvRf zCqp*;Hc_Y3Z90MX_V(U;@W7KVyOyx+^v?2f^^}aGb!~ywlCZ`K`-hYEnEZ{GV-MFH zZF-h>den0z_O;L8;Gm>AnJsP!5R1k4@|AsEnrz?t_=*)ho%N5{bLu;*rnMsl5{>enTm7tW8n7@kW4P(X52;S5&6`I6*-f4C9`W(u$;@TBH#Je1NiZ z0_}LG)5)fL8b=46BCq?#Lff_oD^3sWtMr>7oXv>(g)v{Z1U$ZWCn zENp5kYklJVq$r{5o4f0zv2!Dx=WBm|UrNW_?Jm@3=hsL5;CtJ*VbBY=ESFftV+_kI%ApItL5YFZEJyng1=5Z-bw@< z*l=5VA#eJYeGezEUq4WIp_;^M+L@b=K;!g*?-oM6foHvn27I4(&gsaz+}4IU|IknN zThDY2_Rr6$j!!>C)|TD$r>pakZBs7kmqx{JICggD(S$Knl4(CV702-={+PT-y`J7K zh2dNJs^H?5J5`tV8{^~qZ(`2#GZVkP@=;k|W%r+~-oCr9xw(0FRp6ZHTgyXG)c3jn Z&%Bz3FIt`KTo2bTL95oQ4q+>E{{af!d3^u? diff --git a/v2/dotclear/admin/images/menu/search-b.png b/v2/dotclear/admin/images/menu/search-b.png deleted file mode 100644 index 6cd92c55227d131a7423dad772d0f5c703f38e1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6716 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 LmBJJJbzlAs-K3%m diff --git a/v2/dotclear/admin/images/menu/themes.png b/v2/dotclear/admin/images/menu/themes.png deleted file mode 100644 index 9af61c3f6e505d2bdc7835f0a02df5993bc3c4cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1442 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m{T%CB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPA){ffi_eM3D1{oGuTzrd=COM+4n&cLd=IHa;5RX-@T zIKQ+g85kdF$}r8qu)}W=NFmTQR{lkqz(`5Vami0E%}vcK@pQ3O0?O#6WTsfT7&$r` zTDloom^&G`8W;kZ#x9PICa%V&ZfLA36r&aFW4VA^hnBDko!N= zM#1hS6CN~%1u|`4zFlWsu{mdw2iIQq_sZE*k((>1qgNGG%SY7=5 zFGaAnq#>b{#;aI)$7M6U?WK82VaO9akYyjbR0 zu(qk*PfbMCDKt;-=c@bK>WVtsMVqE2EUAtu+$L#mbSwVUmVH$ctkeHAxJdkzUie!s z)RO)7BFp6hXRMyyc;s2!{rjBO*X@R9muFj)J8R|Mocxu!WqxEi-?D!SPx3Wca`}ue z?@Yd*qG;b8_%`7_$BFYgPD+BW)D?81{Lar8RVz#Hh)Oe_Huur=V3nPF9HI(6lY75B z*y+}%l(BNvSB38rmd<7BC2l?(*J_pHU}#E-Te75%AJ&z3^S7EI;7obK}ms d{h#w0*%+$6)EWl+Fzf`Cnx3wHF6*2UngB8z5;*_> diff --git a/v2/dotclear/admin/images/menu/update.png b/v2/dotclear/admin/images/menu/update.png deleted file mode 100644 index 5ea2c56c7594cf14307599c3248cc60b7bd9f017..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3364 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 upuQCsFcuIf16D&)MSg`q0QhwUe+B@6X- diff --git a/v2/dotclear/admin/images/menu/user-pref-b.png b/v2/dotclear/admin/images/menu/user-pref-b.png deleted file mode 100644 index b2facf96d35175b7539327d4587a708c764c5d6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6605 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 diff --git a/v2/dotclear/admin/images/menu/users-b.png b/v2/dotclear/admin/images/menu/users-b.png deleted file mode 100644 index e39152e6e8af9c0ec18bf3fe2de653148bcef2df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5292 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 diff --git a/v2/dotclear/admin/images/menu/users.png b/v2/dotclear/admin/images/menu/users.png deleted file mode 100644 index 81531fd7e5bd62bb3916ca792704f72ce0223124..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1584 zcmbVMZA=qq9Iuuch8o!<6tw8AICV&ScP+HNqea^urOm7$Ah66AuI&Mra=qj3SW6Qp zsIeQ0FB3Fq97D&17-0#oAEU|oAKA%k&@*bQeL3& zSYw@qXclIkvL)>FvSOZRP!RNZJPMCWL9<05j37veL#dPt8gj1O&EsCVn~R@jzzEL4 zk_=DMZXm>n+vzf1FB3eS41r>7wi#kKH!AmgOQAQDN-iqmE!i~a7I#DdyV1N;` zQmZjSX%H-kD$HO=N>e49&E_PfahhW`Y?=~7k_;N95!NCwoCax4YOPsiG;54nSgBIY zV6ASB$K4KM+Ab;Box;Me#G)paz6{eu)<)#ahC@~qPcb}X2|j0smZowEZ!KUZ;dNX+4F_G*i!XV_rZJyH^z5- z8zYf@H2#_+uJRtZ{g;Gt@rL<9UNSlc=vBwysJ5?rFy>+ z(Q1QNuFQ*$mUK%F?5Z!n*0fhu-_@rZ(PeypyCgc|7wMIucYfY3!F^>FT~Ag;9bKe9 z_TxH#nDoT>&ik!ERK)f6V1gZgU%lYg?j6XoLv6Ze1><-ts`eb*^M*G?DOPTRc zmbLn~wbUHn{M|9@y;$v;k-oJ<%ocyevcW->TzrJ+cw4OgBW3YnZ`--u1wch0JG<%j zr~5E71kdS&R_F~4WN^j)jtY~$P8zJeVfu9lIneVUGOWjCIknvj7ByJT1y0wB->AGc z-rJj}+wm-_@n*&lk@8Z^)%jyAD<3}^*0@i$wJol?S$V3n^GHN=^MixChnM%2J`Jo# znytb9{?y#OB%SXfFuE;uxQ1DJ-eGzRc_g{e5Pp`r+L-YBmw~|Ebx`;w{i-?k_O`?R z$GynC<0o1rd8Urq#=gwI#>Scx!9z*X+eCGhzrNY9WNGcy_a5#0dex#rSfvu@u8#6* zrF&Y2sTb=V4o6e&naqURsza6)J^6{xy8L{4O;6#Am((Fk*kyZnBwR)w%S}y9b+4KG gkn#D@@$`y0q8GW+O{YHZ)rbD!*0c>+i?LwmKa>eelK=n! diff --git a/v2/dotclear/admin/images/menu_off.png b/v2/dotclear/admin/images/menu_off.png deleted file mode 100644 index 7bb65236b5fbcbbbfa3a77383dd15d02146a7654..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1346 zcmcIkO=uHA6y91XX=)EGC`CLB+g=2d+1;c`vm|NSq(6}+EzN?}i*9!(>5^o3*`1O! zVkv@R!B!L$#hZs7Jg6wNJqk+e!INk!h)@qUHw)s=L7~njY0?(aQ-__u$NRqb=6jEw z9f=P#+mG8RifWDyMn=hggiO1wo~%n>hhLGc-t3JEHk<9kr{N89b&U)OecRjHKdtd& zYwJs~__!?<>kuCi>1Y9i;GVe79QNWeRF>9+SMyF)0c8Xzs_GI@H#vi zPf(%F_epYT)CbR+6xGyf&AK-qr+*XU3EVe^6Iv4IL<3PhvNn!Dzha=AW~5CJPPp!_ z^;_v3v;4va60xGGKv1%XVpzy@LB?G$DVm}Vw^$xyu_0d4vQE(=a^|x-YYsfZNGBB*x_iZjY1maz3x;6iA2|oEBBUc>%{TWZ`(0 z<=revrZniFo$P)?PV%FX{z^=83(yl7>pXL#s=)ow5@MGyCDpAr?X!db2qsHaz4S>VQ!0xrL6kvRq+*k3#_rWj zmiVM*WJMfQvSJEBT}}C6&G^s!%2|`PAZ-b&eYul*wUh^PsOf$n^kve64DzkvVF&qr zaM4JQV7n)6h{+IDHy!VopP^t=>p*Dce&cNW^VRv+Vpv~pYiW2wU*8P1&1FtfkG~(f Tb;EshnV_j?Up(@t_rm2rZ)|Yj diff --git a/v2/dotclear/admin/images/menu_on.png b/v2/dotclear/admin/images/menu_on.png deleted file mode 100644 index 9b3ccdf0765143a41d08394d4923753189d3b424..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1334 zcmcIkOK1~87@j`R7;QlhQpCfs_9B? z5kJvkKV%00bVP?DNj&ev-QM1YN3C`44W8Qc{wQa&**<+4`HZ*SiD7PFeSN)BsjRK7 zuBgAKi59jCSZrz-{er@K`#p$VY=E&@~QH*aflJOKczWgzVH+$5f(>efq z4_LkB{nFHL96W3cq>Yr4GfZAXpf9Ur5F8XWWGY%ghvAg#_QIf5&p`_p)(~%qiVQhX zLV%)4s)wZ9WgQRzwC}eN>DVwUD3X)6gq$Tw1%cj@$_oW#zzoWZa*%)!5>U(riBp~! z6;s1#TpTKEC{>PgLb)LLvqW#m9w@PxEFpu3C8;RuY$-@oHCep2!XyE!5Tg(zYE`FW z2^dy11l>;BAy6(ibbFnQkMaAw$6$&#;7MMFj1Mvtg$IVEY1U2SVycY@+3_6EvN<*x z8La2TyC5-c7%EGWrfE7&ms8R5B<=V6Ns1vE#(@zIeNr~~l0(*y)I>IPB1jiBQLXxA z>GBz6!Uz(Cm8j9`hvU^oB3ZAShixQFyh_qeifkxjVgLu(>P;vbrzpkHUoI_RF}Hx4 zS(|(m;SChB{BYop@p80_b^BS5Z*&vC2HHlCDOoW$xk2x-=(L}sXx8OrJ#?ME2~?*C zNXv*###CLm&a^EK|6^EIX!xa0XvONaWCaoxk%VMJ$DYw!JKg{az_?T-*-g5Cc2YJe(t*8jej4WXrzy`oe{>Sr@t>f zGnM?!*u@Ok^wx z@(X5gcy=QV$l)yTh%9Dc;1&X5#!GkW{s0BVN?apKoQqNuOEUBG6hbm{QyB~l^$jfa z4NR(v8I*u36hJD1^V3So6N^$Ad=rz4@^e#DG7}ZtGK*5n^NX^J6?`LhPt;NYs@3y! zaSY*zPEHI;NJ#i`Jm~}jlTK5_%6M*x8$uB*^+pB;TuiLi1*=N-FsRrwGpKU0Z%T9v Rcm&kR;OXk;vd$@?2>{JhTfhJS diff --git a/v2/dotclear/admin/images/noscreenshot.png b/v2/dotclear/admin/images/noscreenshot.png deleted file mode 100644 index e9ba66d9ed7e8d7e1ee8fcb7180ecd73ab2ef5f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1395 zcmeAS@N?(olHy`uVBq!ia0vp^AAtB02OE$qG4x%}z`$zd>EaktaqI2f=YEef7}_rG z{GYwJZJOeQ3(onBP8o4~Cn~KCTYa}>#tpf-%8^or|9j-_?EAEuLF)DNU z5Ed{{NC07n10dYcz{uDP#LOTC*c3H1IFhYMzyNIB1N&>&uZMs9^eO1hojW3b>-JmN z*yvcz_1n04b8t>hj!1TP_R&+Pyf*IH6QiT6+xvg+{HOnKy)E0ge}DX(dGo}!Z{L3O z_3PEbS_xvBhH7Uv^@Xht{Zh5}(Z7Fne~vRUer`V1^L@ViKZ`kY=7_w1|K4v)gXZny z$B*~3*;p3co;$(b-hOTgWAHSa&3Z}?PHx<{&u-sVw*yliynLCtkkP;I@#Ez4$C=XN zc1nc_7WD1iYrFjlQ<~h*l912?mUaLCz4g*b*!TL;qeYh*ic5CK?&o0qEGyX%SbD%x zPhbD95zCo1eSLjdf(3TQl1Eh&(x%+LZpAW3+1W_Y!1%`9yK8+9SQ@EGGa4`TiC7VQ zV5Uc7!_1&Gk*k^yu3inDKb7Uo7NIjwRD;$XV`pbS`txUHVR^Z^+)`7i-eZrK3Wu`A z?%BJyw|?ICW0h%heGGLzOYpGO88W3wUB7<4*tR@vT3}xFX`UZ%-ki~QJD?NPmhw#N zUGA2K%oUs3QuA_iEoU+<`!|b)7NIQ_^=vvW#4PqyvzisYWD2eYTvnMsCiW^6XBY{R#jK0 zm#UGP=B}6^rV)N-)3O_~yDvbwxvF!hy0t0RvvX8&c<(mK|h_KJ0bC#3CWO5$JjL zJ)1W_KEgR;8QYw{4T1)|ycVlV6%wQ*3hp^XACEk6#pXfFtmvnU7cc(!sJQvy0V4~h zWqF&t+?>w-I&<^6#==>J_hVIf*aHCrQxjk+ zXtrDyS$OGJIMXsWp(i@h<>?#CR{L|!m=#l*-ueB#;BF!A8C|}`xBtX%zdWy#)yGv% zPVQOUnY(MZG_3Ske|@&~gFSQI4umMoZ$EY8vp8dLW6k5a<_X+;xFr~s6Vj$`Kasak zu)sO>#FIUY&s`;eksbLv3mEUticHIt=K4Lq{c+pvT=jqhAur#)U7N8r>i(@8)fO^V zjZDk3I18tB2DaDq!3SSbT3M1Z9X yq@;lrMUdhMrU+gXp(?^rUJ<1TRH$iv7H4kKE}8XSmLFJ{GI+ZBxvXjyn4Q diff --git a/v2/dotclear/admin/images/outgoing-blue.png b/v2/dotclear/admin/images/outgoing-blue.png deleted file mode 100644 index d3a3c9326efa8c9fa9b05a88d5df3559e0a6c611..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 972 zcmaJ=&ui0A9FG%W6b6E)?J%F27r`bk>AEaoaci5@1)5U2g7wzdm>gWyZob{_0<$oqaDpU>y}^BpzncNcO?IYAH> zoNcSg&&%D8@p`CtVDj5bfb6M*iTzTf89%m&KsfW^K1- zcqEiihLO^ca<(9BY^D@>`{mP_ioq9`^j>vo}B)K~4ox(2JZJ>go! zI}CBeCS3oVTbaqtRw1N3vW4T|A@-{=3BjmjBbc3wK2vYZ^=Ic&n#q-UGIBQ9e+E6d z;@gv%)3xQ!bn$V-w>{=-oxXVXgg=Qb$11hb58bP`p8mS7bU8=`OP$v&uL|=}c=KC&R~~*^&fb?}*R7Z3&ZED| C^)Mj- diff --git a/v2/dotclear/admin/images/outgoing.png b/v2/dotclear/admin/images/outgoing.png deleted file mode 100644 index 8a36d2f62c6f592e94900fc1e24ff665eee83ca6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 965 zcmaJ=zi-n(6to0y8vRix)O9~{Hu-=TQQ~aIW$sSMQNm_15zFPl31yI#=a6a z6JldxU|~dz4EzBwFn8e(VB!xzV(P%gIf+w-6c4`lPT%*v@7=w7(>{K-UVKnw7-qeB z1Uqz1cuSZ2#O#q1JRlQ0Ld>Cy`v^3Bdx$#7cCTJsqZ-5HSg+e7J*%ZT z*yrpN!zF%5*$h)VNJ85gBLezp=mk3a`|CFrc&^T#mMy^w4K(tOrV%=s9(SGT*il{f z;0dTD8Wr#nu|eWr1hJOr>`Ygqak|a3UNNS#4n82!S#ulpH}3fFg3@zFetP z_JAaa0xw9sD3!#Dwl8Ud02Uuht3~cW>%hjM7R_{aL`bOd{A4oWCi@(YhPQ4$8ZO6{Cdd3ttsb8`d!e6Q1;$4z+H zO@8#x-B&r`-NxF7Rw2K&UF<)7f4*JV-MY@V9zA68_n0-A+1>lZJWn51(>#Ws>*ufk E0{<%{5C8xG diff --git a/v2/dotclear/admin/images/picker.png b/v2/dotclear/admin/images/picker.png deleted file mode 100644 index d70e6b250a3f76395c9fb7db64153685d0f0d038..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1520 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$3?vg*uel1On2Vh}LpV4%Za?&Y0OYO?@Ck9{ zZ;;Db_szHWmSg7Dpmmo2|Np;z|5@LWMW4TY-@4~^^``c7Pya31cs93Vi~ID@)n_+H zF3Vc5_NYpqLhPcnzQu>mfBf&zwdl#)mlOBSK7Q`mic?!f8Z;DJjB57(kD2@Gz>Q%z4L@*gYvug@0BKMHEr))v*m_Zo%-J6cf&VX-+uV6epA=d zHP>TTWxn|MI-q?2y>I{Ty??fJ>ov)41(^n2J=?+}ptIRZg8YJk?)?9sVe|ea`+*{y z1s;*b3=G^tAk28_ZrvZCpje4(M2T}zYGO%dex5=|W^O8jfuX*Eg}#AFRWXASP=yRg zMR0yvNqJ&XDuZK6ep0G}TV_#ed45rLv4V53@r-M3z|dn61gVSg^|4CM&(%u=DbuUS zEnu**uP8`N&Q2{+NJ>r5%(GQeP*6}($V{%1*XS zQL?w=vZ=5FYR*k9NmQuF&B-gas<2f8n`s4PgM{^!6u?SKvTcwn? zGt^BsFg8&zG1D_LH?lN0(@_XcEK%@E%u_HjS1>X#01`%4hK5!qhCs)Ffs!2;khUpG zNwW%aaf8|k1^l#~=$>Fbx5m+O@q>*W`v>l<2HTIw4Z=^Gj80#)c1SLT%@R_Nvx zD?xrs^nr6smXN+65i0P4BK0=Pwa#n8Y52BUsOVu8M)o`F8x zWS~YHpr92v#`23o^7C`-utbRsNGFOSgslkusV<2nsdk|7&;=qRvk*gLD-%mAQ}ZY! z{SZZH+I{m=GSe!Nv|H#JnuD~P8dw=wK(!+&f@-(X2L%LDz<@&?(71p)z8 zg3_WKaI~Z(>!;?V=BDPA6a&M|5H-wFlC9G6i*gf7>@sr`(^K^e^3rYe5rTN#2XQqp zSpbuzK0IB*oDPplnlKRIP7~uHhSJg!-FYD;z(OS1)5S4_LzeYms}Lij2*Uw&vE!M` zt4pr){QsX?#{9re|rYMlPg zmfaM%Y1Vbe8#Z=3RR#REMkeyNl>F9XJhXH#`w!+06AqEZp7VWx)-iax`njxgN@xNA DIONiO diff --git a/v2/dotclear/admin/images/plus.png b/v2/dotclear/admin/images/plus.png deleted file mode 100644 index 77229ad40b982b5e529f3265e65d9e18d7bdf58e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 297 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=%3?!FCJ6-`&%*9TgAsieWw;%dH0CKegd_r9R z|NsB*-@n?qXRGI&DVuSsaLS3C3CGfVk0f;-ifcO<*|a~TZm(a}Zm;s4$1LSsfVvn< zg8YIR9G=}s19CVEJR*x37`TN%nDNrxx<5ccu@cva66d1S#FEVXJcW?V+*AewLwy4a zeFKxKVg@Ck3I&jg;QX|b^2DN42H(WwqWs*{l*~j0x6Go{^8BLgVg=ub-4nG`fNHHh zT^vI=qLY(?n3!1AoE;Se(u7!;6^>R5`fwUFX}sgzZ_cF2$j0WTpnCDZ#f}NWQ=&MQ g9rz{VsKU)Kv4S(}cgeh2Kw}s@UHx3vIVCg!0Ni9>g#Z8m diff --git a/v2/dotclear/admin/images/scheduled.png b/v2/dotclear/admin/images/scheduled.png deleted file mode 100644 index f6e2e9caba31ca0bfaef7b6df7bb5b2efbee4b3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=%3?!FCJ6-`&%*9TgAsieWw;%dH0CIH$d_r9R z1HtVn|8GzJf2;rhjqd-~+x}mv|9`dV|K+Ox7t8)%DEfas@Bi7XnKNhpXJC-Lvqcc7 zk+CGmFPOpM*^M+HhqJ&VvY3H^TL^?1FWs&C0~8c1ag8W(E=o--$;{7F2+7P%WiT+* zH?Yt*FsUkLPy(t@0I3MhPb(=;EJ|hYO-wGz&rMCqOjK~oEJ`iUFUl@f@Qv6#QA-7= z*4xv?F@z&JIcbk}^~ZG#la-nol$!-6CrCsm%}|)UV8ItRM}e&kf*zWhz6?przQ4Es zQ~zJ?L=eMA7FJe?gI-J#2d~`R?4T7Oz!AatM^jK#r9;vPXe@)LtDnm{r-UW|G=*`O diff --git a/v2/dotclear/admin/images/selected.png b/v2/dotclear/admin/images/selected.png deleted file mode 100644 index 373a85c48c0b01ed904095b873c886e14b3fc164..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GOFdm2Ln>}1B^+Q%V*c~jQDU|XH*=W)!&37_-UbgZ3N-jO zan3Gon8Lu3Tr8#>U?9JWflX$C1Ph;oAx}+0BbN?C60?q;!?ha54&fR4cX#{@ig!+C zouJ(4EX;i6K*v#OGrJU*;{P=hG&8!)8ARD0eKIkV774KFP1$8Lp{n7@O@0r@)eJ>^ zyLb&wvMpGmd_|HsqewzZrh!X3kttvs^Cq?i24;r8;s&ynLZ?>)9n9eA>gTe~DWM4f DkY!Nd diff --git a/v2/dotclear/admin/images/superadmin.png b/v2/dotclear/admin/images/superadmin.png deleted file mode 100644 index a0d9bbfbdc9459fa4a60712640cdfa10437ca26a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 638 zcmV-^0)hRBP)Px#1ZP1_K>z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUz{7FPXR47wpWPpN-c}G@=DvF2SfB%i)&+mT>fByVs`1|J{gFGKQ z!<&0gS57JRih!vF(`B;{t?1f)^MCq^bN@@1Z~I@jbn*Y_S;zj@tUCWcvwO=56vZG; z!PH&z+O}T%Td?Zv|5fWs{vX^N^S@xu*8detPXA4AUONv%Lr7|ce)`lySG(8k`+t33 z^#7;F(*Dm`)c!xBdFxfb*g}1{1|}vZ1~E}VCPRI7wuJ1=phVz1idW@Y|h_;jiG|L5yKKU~iG|M^nZ|I2f2uG*Lzp(+OHR8o{< zy0Rf;^XID#|6lHl`}$<7|C{$`GXCFLVgDl7-B=1ESl#Wl1s-pzR=_j> Y00)NjSxdx~bpQYW07*qoM6N<$f@YCEkN^Mx diff --git a/v2/dotclear/admin/images/trash.png b/v2/dotclear/admin/images/trash.png deleted file mode 100644 index 399189944045ba8061120d0ee1d43c00d221caab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 718 zcmV;<0x|uGP)FMR?<^Sg9?&jv};o;xm;ojZh z=-uA`;@#`h;p)xeyY)!Ose*zU;R+r{77*Vo|H)zr|?`_a+h)6>$=&)Lk(*vrb? z$;sTw$=S%r;mOI>!^ZNv%HPJt>Y&rK!^7jh#OK1o;lje=!ouUi!p6S7+rPikuEoy4 zz`wn{+@Qt4ySdrAy1KWw*0;CEwYAo@wav7&)wHzJwX@EgyS}rt#5Bq`Ru2%A};YoTS8lubqskuA`!- zqN1dqpT3`;zn`DHprE9noWGo#zMGr2nVGqmm%x{oxtEu-Vy$_Xmz$K7uab|kkdU=d zs&9~wv`ngNj*Xd(jgpIssD_KHiHW9&h^arOS%-(GhlI2*r%+6rWru>8gnyfTeV%%H zn0$GkFqlbnbcbnac@l*olM~U900001bW%=J06^y0W&i*H32;bRa{vGf5&!@T5&_cP ze*6Fc02XvbSad^jWnpw_Z*Cw|X>DZyFflJMI4>|XdUF6G0000WbVXQnQ*UN;cVTj6 z08L?Ia&K*AWNBd_Mrm?ocW-iQb0AGvyOAm+0001)Nkl(liZE794reeEv6PqM=N01M%XDLqQPkpOWbw?6w<(rp z;IdbjV^kCMs0u7%XJEC^wq_C&5LWR|2O6hm?j=}|rXP?M1mq}q`x>Q`7rK<006F5Z zks6Z9j`@|`Kn{abNla>KMTP_e80aJf8}NV_07P>gPHEOsetUserDefaultBlog($core->auth->userID(),$core->blog->id); - http::redirect('index.php'); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } -} - -dcPage::check('usage,contentadmin'); - -# Logout -if (!empty($_GET['logout'])) { - $core->session->destroy(); - if (isset($_COOKIE['dc_admin'])) { - unset($_COOKIE['dc_admin']); - setcookie('dc_admin',false,-600,'','',DC_ADMIN_SSL); - } - http::redirect('auth.php'); - exit; -} - -# Plugin install -$plugins_install = $core->plugins->installModules(); - -# Check dashboard module prefs -$ws = $core->auth->user_prefs->addWorkspace('dashboard'); -if (!$core->auth->user_prefs->dashboard->prefExists('doclinks')) { - if (!$core->auth->user_prefs->dashboard->prefExists('doclinks',true)) { - $core->auth->user_prefs->dashboard->put('doclinks',true,'boolean','',null,true); - } - $core->auth->user_prefs->dashboard->put('doclinks',true,'boolean'); -} -if (!$core->auth->user_prefs->dashboard->prefExists('dcnews')) { - if (!$core->auth->user_prefs->dashboard->prefExists('dcnews',true)) { - $core->auth->user_prefs->dashboard->put('dcnews',true,'boolean','',null,true); - } - $core->auth->user_prefs->dashboard->put('dcnews',true,'boolean'); -} -if (!$core->auth->user_prefs->dashboard->prefExists('quickentry')) { - if (!$core->auth->user_prefs->dashboard->prefExists('quickentry',true)) { - $core->auth->user_prefs->dashboard->put('quickentry',true,'boolean','',null,true); - } - $core->auth->user_prefs->dashboard->put('quickentry',true,'boolean'); -} - -# Dashboard icons -$__dashboard_icons = new ArrayObject(); - -# Dashboard favorites -$post_count = $core->blog->getPosts(array(),true)->f(0); -$str_entries = ($post_count > 1) ? __('%d entries') : __('%d entry'); - -$comment_count = $core->blog->getComments(array(),true)->f(0); -$str_comments = ($comment_count > 1) ? __('%d comments') : __('%d comment'); - -$ws = $core->auth->user_prefs->addWorkspace('favorites'); -$count = 0; -foreach ($ws->dumpPrefs() as $k => $v) { - // User favorites only - if (!$v['global']) { - $fav = unserialize($v['value']); - if (($fav['permissions'] == '*') || $core->auth->check($fav['permissions'],$core->blog->id)) { - $count++; - $title = ($fav['name'] == 'posts' ? sprintf($str_entries,$post_count) : - ($fav['name'] == 'comments' ? sprintf($str_comments,$comment_count) : $fav['title'])); - $__dashboard_icons[$fav['name']] = new ArrayObject(array(__($title),$fav['url'],$fav['large-icon'])); - - # Let plugins set their own title for favorite on dashboard - $core->callBehavior('adminDashboardFavsIcon',$core,$fav['name'],$__dashboard_icons[$fav['name']]); - } - } -} -if (!$count) { - // Global favorites if any - foreach ($ws->dumpPrefs() as $k => $v) { - $fav = unserialize($v['value']); - if (($fav['permissions'] == '*') || $core->auth->check($fav['permissions'],$core->blog->id)) { - $count++; - $title = ($fav['name'] == 'posts' ? sprintf($str_entries,$post_count) : - ($fav['name'] == 'comments' ? sprintf($str_comments,$comment_count) : $fav['title'])); - $__dashboard_icons[$fav['name']] = new ArrayObject(array(__($title),$fav['url'],$fav['large-icon'])); - - # Let plugins set their own title for favorite on dashboard - $core->callBehavior('adminDashboardFavsIcon',$core,$fav['name'],$__dashboard_icons[$fav['name']]); - } - } -} -if (!$count) { - // No user or global favorites, add "user pref" and "new entry" fav - if ($core->auth->check('usage,contentadmin',$core->blog->id)) { - $__dashboard_icons['new_post'] = new ArrayObject(array(__('New entry'),'post.php','images/menu/edit-b.png')); - } - $__dashboard_icons['prefs'] = new ArrayObject(array(__('My preferences'),'preferences.php','images/menu/user-pref-b.png')); -} - -# Latest news for dashboard -$__dashboard_items = new ArrayObject(array(new ArrayObject,new ArrayObject)); - -# Documentation links -$dashboardItem = 0; -if ($core->auth->user_prefs->dashboard->doclinks) { - if (!empty($__resources['doc'])) - { - $doc_links = '

    '.__('Documentation and support').'

      '; - - foreach ($__resources['doc'] as $k => $v) { - $doc_links .= '
    • '.$k.'
    • '; - } - - $doc_links .= '
    '; - $__dashboard_items[$dashboardItem][] = $doc_links; - $dashboardItem++; - } -} - -if ($core->auth->user_prefs->dashboard->dcnews) { - try - { - if (empty($__resources['rss_news'])) { - throw new Exception(); - } - - $feed_reader = new feedReader; - $feed_reader->setCacheDir(DC_TPL_CACHE); - $feed_reader->setTimeout(2); - $feed_reader->setUserAgent('Dotclear - http://www.dotclear.org/'); - $feed = $feed_reader->parse($__resources['rss_news']); - if ($feed) - { - $latest_news = '

    '.__('Latest news').'

    '; - $i = 1; - foreach ($feed->items as $item) - { - $dt = isset($item->link) ? ''.$item->title.'' : $item->title; - - if ($i < 3) { - $latest_news .= - '
    '.$dt.'
    '. - '

    '.dt::dt2str('%d %B %Y',$item->pubdate,'Europe/Paris').': '. - ''.text::cutString(html::clean($item->content),120).'...

    '; - } else { - $latest_news .= - '
    '.$dt.'
    '. - '
    '.dt::dt2str('%d %B %Y',$item->pubdate,'Europe/Paris').'
    '; - } - $i++; - if ($i > 3) { break; } - } - $latest_news .= '
    '; - $__dashboard_items[$dashboardItem][] = $latest_news; - $dashboardItem++; - } - } - catch (Exception $e) {} -} - -$core->callBehavior('adminDashboardItems', $core, $__dashboard_items); - -# Dashboard content -$dashboardContents = ''; -$__dashboard_contents = new ArrayObject(array(new ArrayObject,new ArrayObject)); -$core->callBehavior('adminDashboardContents', $core, $__dashboard_contents); - -/* DISPLAY --------------------------------------------------------- */ -dcPage::open(__('Dashboard'), - dcPage::jsToolBar(). - dcPage::jsLoad('js/_index.js'). - # --BEHAVIOR-- adminDashboardHeaders - $core->callBehavior('adminDashboardHeaders') -); - -echo '

    '.html::escapeHTML($core->blog->name).' › '.__('Dashboard').'

    '; - -if ($core->auth->getInfo('user_default_blog') != $core->blog->id && $core->auth->blog_count > 1) { - echo - '

    '.__('Make this blog my default blog').'

    '; -} - -if ($core->blog->status == 0) { - echo '

    '.__('This blog is offline').'

    '; -} elseif ($core->blog->status == -1) { - echo '

    '.__('This blog is removed').'

    '; -} - -if (!defined('DC_ADMIN_URL') || !DC_ADMIN_URL) { - echo - '

    '. - 'DC_ADMIN_URL '.__('is not defined, you should edit your configuration file.'). - '

    '; -} - -if (!defined('DC_ADMIN_MAILFROM') || !DC_ADMIN_MAILFROM) { - echo - '

    '. - 'DC_ADMIN_MAILFROM '.__('is not defined, you should edit your configuration file.'). - '

    '; -} - -# Plugins install messages -if (!empty($plugins_install['success'])) -{ - echo '
    '.__('Following plugins have been installed:').'
      '; - foreach ($plugins_install['success'] as $k => $v) { - echo '
    • '.$k.'
    • '; - } - echo '
    '; -} -if (!empty($plugins_install['failure'])) -{ - echo '
    '.__('Following plugins have not been installed:').'
      '; - foreach ($plugins_install['failure'] as $k => $v) { - echo '
    • '.$k.' ('.$v.')
    • '; - } - echo '
    '; -} - -# Dashboard columns (processed first, as we need to know the result before displaying the icons.) -$dashboardItems = ''; - -# Dotclear updates notifications -if ($core->auth->isSuperAdmin() && is_readable(DC_DIGESTS)) -{ - $updater = new dcUpdate(DC_UPDATE_URL,'dotclear',DC_UPDATE_VERSION,DC_TPL_CACHE.'/versions'); - $new_v = $updater->check(DC_VERSION); - $version_info = $new_v ? $updater->getInfoURL() : ''; - - if ($updater->getNotify() && $new_v) { - $dashboardItems .= - '

    '.sprintf(__('Dotclear %s is available!'),$new_v).'

    '. - '
    '; - } -} - -# Errors modules notifications -if ($core->auth->isSuperAdmin()) -{ - $list = array(); - foreach ($core->plugins->getErrors() as $k => $error) { - $list[] = '
  • '.$error.'
  • '; - } - - if (count($list) > 0) { - $dashboardItems .= - '

    '.__('Some plugins are installed twice:').'

    '. - '
      '.implode("\n",$list).'
    '; - } - -} - -foreach ($__dashboard_items as $i) -{ - if ($i->count() > 0) - { - $dashboardItems .= '
    '; - foreach ($i as $v) { - $dashboardItems .= $v; - } - $dashboardItems .= '
    '; - } -} - -# Dashboard icons -echo '
    '; -foreach ($__dashboard_icons as $i) -{ - echo - '

    '. - '
    '.$i[0].'

    '; -} -echo '
    '; - -if ($core->auth->user_prefs->dashboard->quickentry) { - if ($core->auth->check('usage,contentadmin',$core->blog->id)) - { - $categories_combo = array(' ' => ''); - try { - $categories = $core->blog->getCategories(array('post_type'=>'post')); - while ($categories->fetch()) { - $categories_combo[] = new formSelectOption( - str_repeat('  ',$categories->level-1). - ($categories->level-1 == 0 ? '' : '• ').html::escapeHTML($categories->cat_title), - $categories->cat_id - ); - } - } catch (Exception $e) { } - - echo - '
    '. - '

    '.__('Quick entry').'

    '. - '
    '. - '
    '.__('New entry').''. - '

    '. - '

    '. - form::textarea('post_content',50,7). - '

    '. - '

    '. - '

    '. - ($core->auth->check('publish',$core->blog->id) - ? '' - : ''). - $core->formNonce(). - form::hidden('post_status',-2). - form::hidden('post_format',$core->auth->getOption('post_format')). - form::hidden('post_excerpt',''). - form::hidden('post_lang',$core->auth->getInfo('user_lang')). - form::hidden('post_notes',''). - '

    '. - '
    '. - '
    '. - '
    '; - } -} - -foreach ($__dashboard_contents as $i) -{ - if ($i->count() > 0) - { - $dashboardContents .= '
    '; - foreach ($i as $v) { - $dashboardContents .= $v; - } - $dashboardContents .= '
    '; - } -} -echo ($dashboardContents ? '
    '.$dashboardContents.'
    ' : ''); - -echo '
    '; - -echo ($dashboardItems ? '
    '.$dashboardItems.'
    ' : ''); - -dcPage::close(); -?> \ No newline at end of file diff --git a/v2/dotclear/admin/install/check.php b/v2/dotclear/admin/install/check.php deleted file mode 100644 index 3d4ebc1..0000000 --- a/v2/dotclear/admin/install/check.php +++ /dev/null @@ -1,83 +0,0 @@ -driver() == 'mysql') - { - if (version_compare($con->version(),'4.1','<')) - { - $err[] = sprintf(__('MySQL version is %s (4.1 or earlier needed).'),$con->version()); - } - else - { - $rs = $con->select('SHOW ENGINES'); - $innodb = false; - while ($rs->fetch()) { - if (strtolower($rs->f(0)) == 'innodb' && strtolower($rs->f(1)) != 'disabled' && strtolower($rs->f(1)) != 'no') { - $innodb = true; - break; - } - } - - if (!$innodb) { - $err[] = __('MySQL InnoDB engine is not available.'); - } - } - } - elseif ($con->driver() == 'pgsql') - { - if (version_compare($con->version(),'8.0','<')) - { - $err[] = sprintf(__('PostgreSQL version is %s (8.0 or earlier needed).'),$con->version()); - } - } - - return count($err) == 0; -} -?> \ No newline at end of file diff --git a/v2/dotclear/admin/install/index.php b/v2/dotclear/admin/install/index.php deleted file mode 100644 index 9705b59..0000000 --- a/v2/dotclear/admin/install/index.php +++ /dev/null @@ -1,401 +0,0 @@ -'.__('Please set a master key (DC_MASTER_KEY) in configuration file.').'

    '; -} - -# Check if dotclear is already installed -$schema = dbSchema::init($core->con); -if (in_array($core->prefix.'post',$schema->getTables())) { - $can_install = false; - $err = '

    '.__('Dotclear is already installed.').'

    '; -} - -# Check system capabilites -if (!dcSystemCheck($core->con,$_e)) { - $can_install = false; - $err = '

    '.__('Dotclear cannot be installed.').'

    • '.implode('
    • ',$_e).'
    '; -} - -# Get information and perform install -$u_email = $u_firstname = $u_name = $u_login = $u_pwd = ''; -$mail_sent = false; -if ($can_install && !empty($_POST)) -{ - $u_email = !empty($_POST['u_email']) ? $_POST['u_email'] : null; - $u_firstname = !empty($_POST['u_firstname']) ? $_POST['u_firstname'] : null; - $u_name = !empty($_POST['u_name']) ? $_POST['u_name'] : null; - $u_login = !empty($_POST['u_login']) ? $_POST['u_login'] : null; - $u_pwd = !empty($_POST['u_pwd']) ? $_POST['u_pwd'] : null; - $u_pwd2 = !empty($_POST['u_pwd2']) ? $_POST['u_pwd2'] : null; - - try - { - # Check user information - if (empty($u_login)) { - throw new Exception(__('No user ID given')); - } - if (!preg_match('/^[A-Za-z0-9@._-]{2,}$/',$u_login)) { - throw new Exception(__('User ID must contain at least 2 characters using letters, numbers or symbols.')); - } - if ($u_email && !text::isEmail($u_email)) { - throw new Exception(__('Invalid email address')); - } - - if (empty($u_pwd)) { - throw new Exception(__('No password given')); - } - if ($u_pwd != $u_pwd2) { - throw new Exception(__("Passwords don't match")); - } - if (strlen($u_pwd) < 6) { - throw new Exception(__('Password must contain at least 6 characters.')); - } - - # Try to guess timezone - $default_tz = 'Europe/London'; - if (!empty($_POST['u_date']) && function_exists('timezone_open')) - { - if (preg_match('/\((.+)\)$/',$_POST['u_date'],$_tz)) { - $_tz = $_tz[1]; - $_tz = @timezone_open($_tz); - if ($_tz instanceof DateTimeZone) { - $_tz = @timezone_name_get($_tz); - if ($_tz) { - $default_tz = $_tz; - } - } - unset($_tz); - } - } - - # Create schema - $_s = new dbStruct($core->con,$core->prefix); - require dirname(__FILE__).'/../../inc/dbschema/db-schema.php'; - - $si = new dbStruct($core->con,$core->prefix); - $changes = $si->synchronize($_s); - - # Create user - $cur = $core->con->openCursor($core->prefix.'user'); - $cur->user_id = $u_login; - $cur->user_super = 1; - $cur->user_pwd = crypt::hmac(DC_MASTER_KEY,$u_pwd); - $cur->user_name = (string) $u_name; - $cur->user_firstname = (string) $u_firstname; - $cur->user_email = (string) $u_email; - $cur->user_lang = $dlang; - $cur->user_tz = $default_tz; - $cur->user_creadt = date('Y-m-d H:i:s'); - $cur->user_upddt = date('Y-m-d H:i:s'); - $cur->user_options = serialize($core->userDefaults()); - $cur->insert(); - - $core->auth->checkUser($u_login); - - $admin_url = preg_replace('%install/index.php$%','',$_SERVER['REQUEST_URI']); - $root_url = preg_replace('%/admin/install/index.php$%','',$_SERVER['REQUEST_URI']); - - # Create blog - $cur = $core->con->openCursor($core->prefix.'blog'); - $cur->blog_id = 'default'; - $cur->blog_url = http::getHost().$root_url.'/index.php?'; - $cur->blog_name = __('My first blog'); - $core->addBlog($cur); - $core->blogDefaults($cur->blog_id); - - $blog_settings = new dcSettings($core,'default'); - $blog_settings->addNamespace('system'); - $blog_settings->system->put('blog_timezone',$default_tz); - $blog_settings->system->put('lang',$dlang); - $blog_settings->system->put('public_url',$root_url.'/public'); - $blog_settings->system->put('themes_url',$root_url.'/themes'); - $blog_settings->system->put('date_format',__('%A, %B %e %Y')); - - # Add Dotclear version - $cur = $core->con->openCursor($core->prefix.'version'); - $cur->module = 'core'; - $cur->version = (string) DC_VERSION; - $cur->insert(); - - # Create first post - $core->setBlog('default'); - - $cur = $core->con->openCursor($core->prefix.'post'); - $cur->user_id = $u_login; - $cur->post_format = 'xhtml'; - $cur->post_lang = $dlang; - $cur->post_title = __('Welcome to Dotclear!'); - $cur->post_content = '

    '.__('This is your first entry. When you\'re ready '. - 'to blog, log in to edit or delete it.').'

    '; - $cur->post_content_xhtml = $cur->post_content; - $cur->post_status = 1; - $cur->post_open_comment = 1; - $cur->post_open_tb = 0; - $post_id = $core->blog->addPost($cur); - - # Add a comment to it - $cur = $core->con->openCursor($core->prefix.'comment'); - $cur->post_id = $post_id; - $cur->comment_tz = $default_tz; - $cur->comment_author = __('Dotclear Team'); - $cur->comment_email = 'contact@dotclear.net'; - $cur->comment_site = 'http://www.dotclear.org/'; - $cur->comment_content = __("

    This is a comment.

    \n

    To delete it, log in and ". - "view your blog's comments. Then you might remove or edit it.

    "); - $core->blog->addComment($cur); - - # Plugins initialization - define('DC_CONTEXT_ADMIN',true); - $core->plugins->loadModules(DC_PLUGINS_ROOT); - $plugins_install = $core->plugins->installModules(); - - # Add dashboard module options - $core->auth->user_prefs->addWorkspace('dashboard'); - $core->auth->user_prefs->dashboard->put('doclinks',true,'boolean','',null,true); - $core->auth->user_prefs->dashboard->put('dcnews',true,'boolean','',null,true); - $core->auth->user_prefs->dashboard->put('quickentry',true,'boolean','',null,true); - - # Add accessibility options - $core->auth->user_prefs->addWorkspace('accessibility'); - $core->auth->user_prefs->accessibility->put('nodragdrop',false,'boolean','',null,true); - - # Add user interface options - $core->auth->user_prefs->addWorkspace('interface'); - $core->auth->user_prefs->interface->put('enhanceduploader',false,'boolean','',null,true); - - # Add default favorites - $core->auth->user_prefs->addWorkspace('favorites'); - - $init_fav = array(); - - $init_fav['new_post'] = array('new_post','New entry','post.php', - 'images/menu/edit.png','images/menu/edit-b.png', - 'usage,contentadmin',null,'menu-new-post'); - $init_fav['posts'] = array('posts','Entries','posts.php', - 'images/menu/entries.png','images/menu/entries-b.png', - 'usage,contentadmin',null,null); - $init_fav['comments'] = array('comments','Comments','comments.php', - 'images/menu/comments.png','images/menu/comments-b.png', - 'usage,contentadmin',null,null); - $init_fav['prefs'] = array('prefs','My preferences','preferences.php', - 'images/menu/user-pref.png','images/menu/user-pref-b.png', - '*',null,null); - $init_fav['blog_pref'] = array('blog_pref','Blog settings','blog_pref.php', - 'images/menu/blog-pref.png','images/menu/blog-pref-b.png', - 'admin',null,null); - $init_fav['blog_theme'] = array('blog_theme','Blog appearance','blog_theme.php', - 'images/menu/themes.png','images/menu/blog-theme-b.png', - 'admin',null,null); - - $init_fav['pages'] = array('pages','Pages','plugin.php?p=pages', - 'index.php?pf=pages/icon.png','index.php?pf=pages/icon-big.png', - 'contentadmin,pages',null,null); - $init_fav['blogroll'] = array('blogroll','Blogroll','plugin.php?p=blogroll', - 'index.php?pf=blogroll/icon-small.png','index.php?pf=blogroll/icon.png', - 'usage,contentadmin',null,null); - - $count = 0; - foreach ($init_fav as $k => $f) { - $t = array('name' => $f[0],'title' => $f[1],'url' => $f[2], 'small-icon' => $f[3], - 'large-icon' => $f[4],'permissions' => $f[5],'id' => $f[6],'class' => $f[7]); - $core->auth->user_prefs->favorites->put(sprintf("g%03s",$count),serialize($t),'string',null,true,true); - $count++; - } - - $step = 1; - } - catch (Exception $e) - { - $err = $e->getMessage(); - } -} - -if (!isset($step)) { - $step = 0; -} -header('Content-Type: text/html; charset=UTF-8'); -?> - - - - - - - - - - <?php echo __('Dotclear Install'); ?> - - - - - - - - -
    -'.__('Dotclear installation').''. -'
    '; - -if (!is_writable(DC_TPL_CACHE)) { - echo '

    '.sprintf(__('Cache directory %s is not writable.'),DC_TPL_CACHE).'

    '; -} - -if ($can_install && !empty($err)) { - echo '

    '.__('Errors:').'

    '.$err.'
    '; -} - -if (!empty($_GET['wiz'])) { - echo '

    '.__('Configuration file has been successfully created.').'

    '; -} - -if ($can_install && $step == 0) -{ - echo - '

    '.__('User information').'

    '. - - '

    '.__('Please provide the following information needed to create the first user.').'

    '. - - '
    '. - '
    '.__('User information').''. - '

    '. - '

    '. - '

    '. - '
    '. - - '
    '.__('Username and password').''. - '

    '. - '

    '. - '

    '. - '
    '. - - '

    '. - '
    '; -} -elseif ($can_install && $step == 1) -{ - # Plugins install messages - $plugins_install_result = ''; - if (!empty($plugins_install['success'])) - { - $plugins_install_result .= '
    '.__('Following plugins have been installed:').'
      '; - foreach ($plugins_install['success'] as $k => $v) { - $plugins_install_result .= '
    • '.$k.'
    • '; - } - $plugins_install_result .= '
    '; - } - if (!empty($plugins_install['failure'])) - { - $plugins_install_result .= '
    '.__('Following plugins have not been installed:').'
      '; - foreach ($plugins_install['failure'] as $k => $v) { - $plugins_install_result .= '
    • '.$k.' ('.$v.')
    • '; - } - $plugins_install_result .= '
    '; - } - - echo - '

    '.__('All done!').'

    '. - - $plugins_install_result. - - '

    '.__('Dotclear has been successfully installed. Here is some useful information you should keep.').'

    '. - - '

    '.__('Your account').'

    '. - '
      '. - '
    • '.__('Username:').' '.html::escapeHTML($u_login).'
    • '. - '
    • '.__('Password:').' '.html::escapeHTML($u_pwd).'
    • '. - '
    '. - - '

    '.__('Your blog').'

    '. - '
      '. - '
    • '.__('Blog address:').' '.html::escapeHTML(http::getHost().$root_url).'/index.php?
    • '. - '
    • '.__('Administration interface:').' '.html::escapeHTML(http::getHost().$admin_url).'
    • '. - '
    '. - - '
    '. - '

    '. - form::hidden(array('user_id'),html::escapeHTML($u_login)). - form::hidden(array('user_pwd'),html::escapeHTML($u_pwd)). - '

    '. - '
    '; -} -elseif (!$can_install) -{ - echo '

    '.__('Installation can not be completed').'

    '. - '

    '.__('Errors:').'

    '.$err.'
    '. - '

    '.__('For the said reasons, Dotclear can not be installed. '. - 'Please refer to '. - 'the documentation to learn how to correct the problem.').'

    '; -} -?> -
    -
    - - \ No newline at end of file diff --git a/v2/dotclear/admin/install/wizard.php b/v2/dotclear/admin/install/wizard.php deleted file mode 100644 index 2f9120e..0000000 --- a/v2/dotclear/admin/install/wizard.php +++ /dev/null @@ -1,190 +0,0 @@ -' . __($e->getMessage()) . '

    '); - } - - # Checks system capabilites - require dirname(__FILE__).'/check.php'; - if (!dcSystemCheck($con,$_e)) { - $can_install = false; - throw new Exception('

    '.__('Dotclear cannot be installed.').'

    • '.implode('
    • ',$_e).'
    '); - } - - # Check if dotclear is already installed - $schema = dbSchema::init($con); - if (in_array($DBPREFIX.'version',$schema->getTables())) { - throw new Exception(__('Dotclear is already installed.')); - } - - # Does config.php.in exist? - $config_in = dirname(__FILE__).'/../../inc/config.php.in'; - if (!is_file($config_in)) { - throw new Exception(sprintf(__('File %s does not exist.'),$config_in)); - } - - # Can we write config.php - if (!is_writable(dirname(DC_RC_PATH))) { - throw new Exception(sprintf(__('Cannot write %s file.'),DC_RC_PATH)); - } - - # Creates config.php file - $full_conf = file_get_contents($config_in); - - writeConfigValue('DC_DBDRIVER',$DBDRIVER,$full_conf); - writeConfigValue('DC_DBHOST',$DBHOST,$full_conf); - writeConfigValue('DC_DBUSER',$DBUSER,$full_conf); - writeConfigValue('DC_DBPASSWORD',$DBPASSWORD,$full_conf); - writeConfigValue('DC_DBNAME',$DBNAME,$full_conf); - writeConfigValue('DC_DBPREFIX',$DBPREFIX,$full_conf); - - $admin_url = preg_replace('%install/wizard.php$%','',$_SERVER['REQUEST_URI']); - writeConfigValue('DC_ADMIN_URL',http::getHost().$admin_url,$full_conf); - writeConfigValue('DC_ADMIN_MAILFROM','dotclear@'.$_SERVER['HTTP_HOST'],$full_conf); - writeConfigValue('DC_MASTER_KEY',md5(uniqid()),$full_conf); - - $fp = @fopen(DC_RC_PATH,'wb'); - if ($fp === false) { - throw new Exception(sprintf(__('Cannot write %s file.'),DC_RC_PATH)); - } - fwrite($fp,$full_conf); - fclose($fp); - chmod(DC_RC_PATH, 0666); - - $con->close(); - http::redirect('index.php?wiz=1'); - } - catch (Exception $e) - { - $err = $e->getMessage(); - } -} - -function writeConfigValue($name,$val,&$str) -{ - $val = str_replace("'","\'",$val); - $str = preg_replace('/(\''.$name.'\')(.*?)$/ms','$1,\''.$val.'\');',$str); -} - -header('Content-Type: text/html; charset=UTF-8'); -?> - - - - - - - - - - <?php echo __('Dotclear installation wizard'); ?> - - - - -
    -'.__('Dotclear installation wizard').''. -'
    '; - -if (!empty($err)) { - echo '

    '.__('Errors:').'

    '.$err.'
    '; -} else { - echo '

    '.__('Welcome').'

    '. - '

    '.__('To complete your Dotclear installation and start writing on your blog, '. - 'we just need to know how to access your database and who you are. '. - 'Just fill this two steps wizard with this information and we will be done.').'

    '. - '

    '.__('Attention:').' '. - __('this wizard may not function on every host. If it does not work for you, '. - 'please refer to '. - 'the documentation to learn how to create the config.php '. - 'file manually.').'

    '; -} - -echo -'

    '.__('System information').'

    '. - -'

    '.__('Please provide the following information needed to create your configuration file.').'

    '. - -'
    '. -'

    '. -'

    '. -'

    '. -'

    '. -'

    '. -'

    '. - -'

    '. -'
    '; -?> -
    -
    - - \ No newline at end of file diff --git a/v2/dotclear/admin/js/_blog_pref.js b/v2/dotclear/admin/js/_blog_pref.js deleted file mode 100644 index 8762ac5..0000000 --- a/v2/dotclear/admin/js/_blog_pref.js +++ /dev/null @@ -1,4 +0,0 @@ - -function checkQueryString(){var blogUrl=$('#blog_url')[0].value;var urlScan=$('#url_scan')[0].value;errorMsg='';if(/.*[^\/]$/.exec(blogUrl)&&urlScan=='path_info'){errorMsg=dotclear.msg.warning_path_info;}else if(/.*[^\?]$/.exec(blogUrl)&&urlScan=='query_string'){errorMsg=dotclear.msg.warning_query_string;} -$("p#urlwarning").remove();if(errorMsg!=''){$("#blog_url").parents('p').before('

    '+errorMsg+'

    ');}} -$(function(){checkQueryString();$('#blog_url').focusout(checkQueryString);$('#url_scan').live("change",checkQueryString);}); \ No newline at end of file diff --git a/v2/dotclear/admin/js/_blog_theme.js b/v2/dotclear/admin/js/_blog_theme.js deleted file mode 100644 index 77e42ec..0000000 --- a/v2/dotclear/admin/js/_blog_theme.js +++ /dev/null @@ -1,6 +0,0 @@ - -$(function(){$('#themes-actions').hide();var submit_s=$('#themes-actions input[name=select]');var submit_r=$('#themes-actions input[name=remove]');var details=$('#themes div.theme-details');$('div.theme-actions',details).hide();$('input:radio',details).hide();$('div.theme-info span, div.theme-info a',details).hide();details.removeClass('theme-details').addClass('theme-details-js');var themes_wrapper=$('
    ');var theme_box=$('
    ');$('#themes').wrap(themes_wrapper).before(theme_box);details.each(function(){var box=this;var a=$(document.createElement('a'));a.attr('href','#');a.attr('title',$('>div h3>label',this).text());$(box).wrap(a);$(box).parent().click(function(event){update_box(box);event.preventDefault();return false;});});function update_box(e){theme_box.empty();var img=$('div.theme-shot',e).clone();var info=$('div.theme-info',e).clone();if($(e).hasClass('current-theme')){var actions=$('div.theme-actions',e).clone();actions.show();}else{var actions=$('
    ');if(submit_s.length>0&&!$('input:radio',info).attr('disabled')){var select=$(''+dotclear.msg.use_this_theme+'');select.css('font-weight','bold').click(function(){submit_s.click();return false;});actions.append(select).append('  ');} -if(submit_r.length>0&&$('input:radio',info).attr('id')!='theme_default'){var remove=$(''+dotclear.msg.remove_this_theme+'');remove.click(function(){var t_name=$(this).parents('#theme-box').find('div.theme-info h3:first').text();t_name=$.trim(t_name);if(window.confirm(dotclear.msg.confirm_delete_theme.replace('%s',t_name))){submit_r.click();} -return false;});actions.append(remove);}} -$('input:radio',info).remove();$('span, a',info).show();theme_box.append(img).append(info).append(actions);details.removeClass('theme-selected');$(e).addClass('theme-selected');$('input:radio',e).attr('checked','checked');} -update_box(details[0]);}); \ No newline at end of file diff --git a/v2/dotclear/admin/js/_categories.js b/v2/dotclear/admin/js/_categories.js deleted file mode 100644 index 8e6929e..0000000 --- a/v2/dotclear/admin/js/_categories.js +++ /dev/null @@ -1,2 +0,0 @@ - -$(function(){$('form#delete-category').submit(function(){var c_id=$('#del_cat').val();var c_name=$('#del_cat option[value='+c_id+']').text();return window.confirm(dotclear.msg.confirm_delete_category.replace('%s',c_name));});});$(function(){$('form#reset-order').submit(function(){return window.confirm(dotclear.msg.confirm_reorder_categories);});}); \ No newline at end of file diff --git a/v2/dotclear/admin/js/_category.js b/v2/dotclear/admin/js/_category.js deleted file mode 100644 index 496a4c4..0000000 --- a/v2/dotclear/admin/js/_category.js +++ /dev/null @@ -1,2 +0,0 @@ - -$(function(){dotclear.hideLockable();var tbCategory=new jsToolBar(document.getElementById('cat_desc'));tbCategory.draw('xhtml');}); \ No newline at end of file diff --git a/v2/dotclear/admin/js/_comment.js b/v2/dotclear/admin/js/_comment.js deleted file mode 100644 index a46fa52..0000000 --- a/v2/dotclear/admin/js/_comment.js +++ /dev/null @@ -1,3 +0,0 @@ - -$(function(){if(!document.getElementById){return;} -var tbComment=new jsToolBar(document.getElementById('comment_content'));tbComment.draw('xhtml');$('#comment-form input[name="delete"]').click(function(){return window.confirm(dotclear.msg.confirm_delete_comment);});}); \ No newline at end of file diff --git a/v2/dotclear/admin/js/_comments.js b/v2/dotclear/admin/js/_comments.js deleted file mode 100644 index 55e0bf5..0000000 --- a/v2/dotclear/admin/js/_comments.js +++ /dev/null @@ -1,6 +0,0 @@ - -dotclear.commentExpander=function(line){var td=line.firstChild;var img=document.createElement('img');img.src=dotclear.img_plus_src;img.alt=dotclear.img_plus_alt;img.className='expand';$(img).css('cursor','pointer');img.line=line;img.onclick=function(){dotclear.viewCommentContent(this,this.line);};td.insertBefore(img,td.firstChild);};dotclear.viewCommentContent=function(img,line){var commentId=line.id.substr(1);var tr=document.getElementById('ce'+commentId);if(!tr){tr=document.createElement('tr');tr.id='ce'+commentId;var td=document.createElement('td');td.colSpan=6;td.className='expand';tr.appendChild(td);img.src=dotclear.img_minus_src;img.alt=dotclear.img_minus_alt;$.get('services.php',{f:'getCommentById',id:commentId},function(data){var rsp=$(data).children('rsp')[0];if(rsp.attributes[0].value=='ok'){var comment=$(rsp).find('comment_display_content').text();if(comment){$(td).append(comment);var comment_email=$(rsp).find('comment_email').text();var comment_site=$(rsp).find('comment_site').text();var comment_ip=$(rsp).find('comment_ip').text();var comment_spam_disp=$(rsp).find('comment_spam_disp').text();$(td).append('

    '+dotclear.msg.website+' '+comment_site+'
    '+''+dotclear.msg.email+' '+comment_email+'
    '+''+dotclear.msg.ip_address+' '+comment_ip+''+'
    '+comment_spam_disp+'

    ');}}else{alert($(rsp).find('message').text());}});$(line).toggleClass('expand');line.parentNode.insertBefore(tr,line.nextSibling);} -else if(tr.style.display=='none') -{$(tr).toggle();$(line).toggleClass('expand');img.src=dotclear.img_minus_src;img.alt=dotclear.img_minus_alt;} -else -{$(tr).toggle();$(line).toggleClass('expand');img.src=dotclear.img_plus_src;img.alt=dotclear.img_plus_alt;}};$(function(){$('#form-comments tr.line').each(function(){dotclear.commentExpander(this);});$('.checkboxes-helpers').each(function(){dotclear.checkboxesHelpers(this);});$('#form-comments td input[type=checkbox]').enableShiftClick();dotclear.commentsActionsHelper();}); \ No newline at end of file diff --git a/v2/dotclear/admin/js/_index.js b/v2/dotclear/admin/js/_index.js deleted file mode 100644 index ac78b57..0000000 --- a/v2/dotclear/admin/js/_index.js +++ /dev/null @@ -1,10 +0,0 @@ - -$(function(){var f=$('#quick-entry');if(f.length>0){var contentTb=new jsToolBar($('#post_content',f)[0]);contentTb.switchMode($('#post_format',f).val());$('input[name=save]',f).click(function(){quickPost(f,-2);return false;});if($('input[name=save-publish]',f).length>0){var btn=$('');$('input[name=save-publish]',f).remove();$('input[name=save]',f).after(btn).after(' ');btn.click(function(){quickPost(f,1);return false;});} -function quickPost(f,status){if(contentTb.getMode()=='wysiwyg'){contentTb.syncContents('iframe');} -var params={f:'quickPost',xd_check:dotclear.nonce,post_title:$('#post_title',f).val(),post_content:$('#post_content',f).val(),cat_id:$('#cat_id',f).val(),post_status:status,post_format:$('#post_format',f).val(),post_lang:$('#post_lang',f).val()} -$('p.qinfo',f).remove();$.post('services.php',params,function(data){if($('rsp[status=failed]',data).length>0){var msg='

    '+dotclear.msg.error+' '+$('rsp',data).text()+'

    ';}else{var msg='

    '+dotclear.msg.entry_created+' - '+ -dotclear.msg.edit_entry+'';if($('rsp>post',data).attr('post_status')==1){msg+=' - '+ -dotclear.msg.view_entry+'';} -msg+='

    ';$('#post_title',f).val('');$('#post_content',f).val('');if(contentTb.getMode()=='wysiwyg'){contentTb.syncContents('textarea');}} -$('fieldset',f).prepend(msg);});}} -$('#quick h3').toggleWithLegend($('#quick').children().not('h3'),{cookie:'dcx_quick_entry'},positionFooter);}); \ No newline at end of file diff --git a/v2/dotclear/admin/js/_langs.js b/v2/dotclear/admin/js/_langs.js deleted file mode 100644 index 8824cff..0000000 --- a/v2/dotclear/admin/js/_langs.js +++ /dev/null @@ -1,2 +0,0 @@ - -$(function(){$('table.plugins form input[type=submit][name=delete]').click(function(){var l_name=$(this).parents('tr.line').find('td:first').text();return window.confirm(dotclear.msg.confirm_delete_lang.replace('%s',l_name));});}); \ No newline at end of file diff --git a/v2/dotclear/admin/js/_media.js b/v2/dotclear/admin/js/_media.js deleted file mode 100644 index 19893c0..0000000 --- a/v2/dotclear/admin/js/_media.js +++ /dev/null @@ -1,7 +0,0 @@ - -$(function(){fileRemoveAct();function fileRemoveAct(){$('a.media-remove').click(function(){var m_name=$(this).parents('ul').find('li:first>a').text();if(window.confirm(dotclear.msg.confirm_delete_media.replace('%s',m_name))){var f=$('#media-remove-hide').get(0);f.elements['remove'].value=this.href.replace(/^(.*)&remove=(.*?)(&|$)/,'$2');this.href='';f.submit();} -return false;});} -if(!$.browser.opera){if(dotclear.candyUpload_force_init=='1'){candyUploadInit();}} -function candyUploadInit() -{var candy_upload_success=false;var candy_upload_form_url=$('#media-upload').attr('action')+'&file_sort=date-desc&d='+$('#media-upload input[name=d]').val();var candy_upload_limit=$('#media-upload input[name=MAX_FILE_SIZE]').val();$('#media-upload').candyUpload({upload_url:dotclear.candyUpload.base_url+'/media.php',flash_movie:dotclear.candyUpload.movie_url,file_size_limit:candy_upload_limit+'b',params:'swfupload=1&'+dotclear.candyUpload.params,callbacks:{createControls:function(){var _this=this;this.ctrl.btn_browse.hide();this.ctrl.msg.html(dotclear.msg.load_enhanced_uploader);},flashReady:function(){var _this=this;this.ctrl.msg.fadeOut('fast',function(){$(this).text(_this.locales.no_file_in_queue).fadeIn('fast');_this.ctrl.btn_browse.fadeIn('fast',function(){_this.upldr.container.children().css({width:$('.cu-btn-browse').width(),height:$('.cu-btn-browse').height()});});});},uploadSuccess:function(o,data){if(data=='ok'){candy_upload_success=true;this.fileMsg(o.id,this.locales.file_uploaded);}else{this.fileErrorMsg(o.id,data);} -if(candy_upload_success&&$('div.cu-file:has(span.cu-filecancel a)',this.ctrl.files).length==0){$.cookie('dc_candy_upl','1',{expires:30});$.get(candy_upload_form_url,function(data){var media=$('div.media-list');media.after($('div.media-list',data)).remove();fileRemoveAct();});}},fileQueued:function(){positionFooter();}}});}}); \ No newline at end of file diff --git a/v2/dotclear/admin/js/_media_item.js b/v2/dotclear/admin/js/_media_item.js deleted file mode 100644 index c9a2eeb..0000000 --- a/v2/dotclear/admin/js/_media_item.js +++ /dev/null @@ -1,4 +0,0 @@ - -$(function(){$('#media-details-tab').onetabload(function(){var media_dt=document.getElementById('media_dt');if(media_dt==undefined){return;} -var post_dtPick=new datePicker(media_dt);post_dtPick.img_top='1.5em';post_dtPick.draw();});$('#file-unzip').each(function(){var a=document.createElement('a');var mediaId=$(this).find('input[name=id]').val();var self=$(this);a.href='#';$(a).text(dotclear.msg.zip_file_content);self.before(a);$(a).wrap('

    ');$(a).click(function(){$.get('services.php',{f:'getZipMediaContent',id:mediaId},function(data){var rsp=$(data).children('rsp')[0];if(rsp.attributes[0].value=='ok'){var div=document.createElement('div');var list=document.createElement('ul');var expanded=false;$(div).css({overflow:'auto',border:'1px solid #ccc',margin:'1em 0',padding:'1px 0.5em'});$(div).append(list);self.before(div);$(a).hide();$(div).before('

    '+dotclear.msg.zip_file_content+'

    ');$(rsp).find('file').each(function(){$(list).append('
  • '+$(this).text()+'
  • ');if($(div).height()>200&&!expanded){$(div).css({height:'200px'});expanded=true;}});}else{alert($(rsp).find('message').text());}});return false;});});$('#file-unzip').submit(function(){if($(this).find('#inflate_mode').val()=='current'){return window.confirm(dotclear.msg.confirm_extract_current);} -return true;});}); \ No newline at end of file diff --git a/v2/dotclear/admin/js/_permissions.js b/v2/dotclear/admin/js/_permissions.js deleted file mode 100644 index 1547911..0000000 --- a/v2/dotclear/admin/js/_permissions.js +++ /dev/null @@ -1,6 +0,0 @@ - -jQuery.fn.updatePermissionsForm=function(){return this.each(function(){var perms={};var re=/^perm\[(.+?)\]\[(.+?)\]$/;var e,prop;for(var i=0;i'+dotclear.msg.website+' '+comment_site+'
    '+''+dotclear.msg.email+' '+ -comment_email+'
    '+comment_spam_disp+'

    ');}}else{alert($(rsp).find('message').text());}});$(line).toggleClass('expand');line.parentNode.insertBefore(tr,line.nextSibling);} -else if(tr.style.display=='none') -{$(tr).toggle();$(line).toggleClass('expand');img.src=dotclear.img_minus_src;img.alt=dotclear.img_minus_alt;} -else -{$(tr).toggle();$(line).toggleClass('expand');img.src=dotclear.img_plus_src;img.alt=dotclear.img_plus_alt;}};$(function(){if(!document.getElementById){return;} -if(document.getElementById('edit-entry')) -{var formatField=$('#post_format').get(0);$(formatField).change(function(){excerptTb.switchMode(this.value);contentTb.switchMode(this.value);});var excerptTb=new jsToolBar(document.getElementById('post_excerpt'));var contentTb=new jsToolBar(document.getElementById('post_content'));excerptTb.context=contentTb.context='post';} -if(document.getElementById('comment_content')){var commentTb=new jsToolBar(document.getElementById('comment_content'));} -$('#post-preview').modalWeb($(window).width()-40,$(window).height()-40);$('#edit-entry').onetabload(function(){dotclear.hideLockable();var post_dtPick=new datePicker($('#post_dt').get(0));post_dtPick.img_top='1.5em';post_dtPick.draw();$('input[name="delete"]').click(function(){return window.confirm(dotclear.msg.confirm_delete_post);});$('#notes-area label').toggleWithLegend($('#notes-area').children().not('label'),{cookie:'dcx_post_notes',hide:$('#post_notes').val()==''});$('#post_lang').parent().toggleWithLegend($('#post_lang'),{cookie:'dcx_post_lang'});$('#post_password').parent().toggleWithLegend($('#post_password'),{cookie:'dcx_post_password',hide:$('#post_password').val()==''});$('#excerpt-area label').toggleWithLegend($('#excerpt-area').children().not('label'),{fn:function(){excerptTb.switchMode(formatField.value);},cookie:'dcx_post_excerpt',hide:$('#post_excerpt').val()==''});contentTb.switchMode(formatField.value);$('a.attachment-remove').click(function(){this.href='';var m_name=$(this).parents('ul').find('li:first>a').attr('title');if(window.confirm(dotclear.msg.confirm_remove_attachment.replace('%s',m_name))){var f=$('#attachment-remove-hide').get(0);f.elements['media_id'].value=this.id.substring(11);f.submit();} -return false;});var h=document.createElement('h4');var a=document.createElement('a');a.href='#';$(a).click(function(){var params={xd_check:dotclear.nonce,f:'validatePostMarkup',excerpt:$('#post_excerpt').text(),content:$('#post_content').text(),format:$('#post_format').get(0).value,lang:$('#post_lang').get(0).value};$.post('services.php',params,function(data){if($(data).find('rsp').attr('status')!='ok'){alert($(data).find('rsp message').text());return false;} -if($(data).find('valid').text()==1){var p=document.createElement('p');p.id='markup-validator';if($('#markup-validator').length>0){$('#markup-validator').remove();} -$(p).addClass('message');$(p).text(dotclear.msg.xhtml_valid);$(p).insertAfter(h);$(p).backgroundFade({sColor:'#666666',eColor:'#ffcc00',steps:50},function(){$(this).backgroundFade({sColor:'#ffcc00',eColor:'#666666'});});}else{var div=document.createElement('div');div.id='markup-validator';if($('#markup-validator').length>0){$('#markup-validator').remove();} -$(div).addClass('error');$(div).html('

    '+dotclear.msg.xhtml_not_valid+'

    '+$(data).find('errors').text());$(div).insertAfter(h);$(div).backgroundFade({sColor:'#ffffff',eColor:'#ff9999',steps:50},function(){$(this).backgroundFade({sColor:'#ff9999',eColor:'#ffffff'});});} -return false;});return false;});a.appendChild(document.createTextNode(dotclear.msg.xhtml_validator));h.appendChild(a);$(h).appendTo('#entry-content');var excerpt=$('#post_excerpt').val();var content=$('#post_content').val();$('#convert-xhtml').click(function(){if(excerpt!=$('#post_excerpt').val()||content!=$('#post_content').val()){return window.confirm(dotclear.msg.confirm_change_post_format);}});});$('#comments').onetabload(function(){$('.comments-list tr.line').each(function(){dotclear.commentExpander(this);});$('.checkboxes-helpers').each(function(){dotclear.checkboxesHelpers(this);});dotclear.commentsActionsHelper();});$('#add-comment').onetabload(function(){commentTb.draw('xhtml');});}); \ No newline at end of file diff --git a/v2/dotclear/admin/js/_posts_list.js b/v2/dotclear/admin/js/_posts_list.js deleted file mode 100644 index 2719cca..0000000 --- a/v2/dotclear/admin/js/_posts_list.js +++ /dev/null @@ -1,7 +0,0 @@ - -dotclear.postExpander=function(line){var td=line.firstChild;var img=document.createElement('img');img.src=dotclear.img_plus_src;img.alt=dotclear.img_plus_alt;img.className='expand';$(img).css('cursor','pointer');img.line=line;img.onclick=function(){dotclear.viewPostContent(this,this.line);positionFooter();};td.insertBefore(img,td.firstChild);};dotclear.viewPostContent=function(img,line){var postId=line.id.substr(1);var tr=document.getElementById('pe'+postId);if(!tr){tr=document.createElement('tr');tr.id='pe'+postId;var td=document.createElement('td');td.colSpan=8;td.className='expand';tr.appendChild(td);img.src=dotclear.img_minus_src;img.alt=dotclear.img_minus_alt;$.get('services.php',{f:'getPostById',id:postId,post_type:''},function(data){var rsp=$(data).children('rsp')[0];if(rsp.attributes[0].value=='ok'){var post=$(rsp).find('post_display_content').text();var post_excerpt=$(rsp).find('post_display_excerpt').text();var res='';if(post){if(post_excerpt){res+=post_excerpt+'
    ';} -res+=post;$(td).append(res);}}else{alert($(rsp).find('message').text());}});$(line).toggleClass('expand');line.parentNode.insertBefore(tr,line.nextSibling);} -else if(tr.style.display=='none') -{$(tr).toggle();$(line).toggleClass('expand');img.src=dotclear.img_minus_src;img.alt=dotclear.img_minus_alt;} -else -{$(tr).toggle();$(line).toggleClass('expand');img.src=dotclear.img_plus_src;img.alt=dotclear.img_plus_alt;}};$(function(){$('#form-entries tr.line').each(function(){dotclear.postExpander(this);});$('.checkboxes-helpers').each(function(){dotclear.checkboxesHelpers(this);});$('#form-entries td input[type=checkbox]').enableShiftClick();dotclear.postsActionsHelper();}); \ No newline at end of file diff --git a/v2/dotclear/admin/js/_preferences-dragdrop.js b/v2/dotclear/admin/js/_preferences-dragdrop.js deleted file mode 100644 index 3599f30..0000000 --- a/v2/dotclear/admin/js/_preferences-dragdrop.js +++ /dev/null @@ -1,2 +0,0 @@ - -$(function(){$("#my-favs ul").sortable({'cursor':'move'});$("#my-favs ul").hover(function(){$(this).css({'cursor':'move'});},function(){$(this).css({'cursor':'auto'});});$('#favs-form').submit(function(){var order=[];$("#my-favs ul li input.position").each(function(){order.push(this.name.replace(/^order\[([^\]]+)\]$/,'$1'));});$("input[name=favs_order]")[0].value=order.join(',');return true;});$("#my-favs ul li input.position").hide();}); \ No newline at end of file diff --git a/v2/dotclear/admin/js/_preferences.js b/v2/dotclear/admin/js/_preferences.js deleted file mode 100644 index d47d010..0000000 --- a/v2/dotclear/admin/js/_preferences.js +++ /dev/null @@ -1,5 +0,0 @@ - -$(function(){if($('#new_pwd').length==0){return;} -var user_email=$('#user_email').val();$('#user-form').submit(function(){var e=this.elements['cur_pwd'];if(e.value!=''){return true;} -if($('#user_email').val()!=user_email||$('#new_pwd').val()!=''){e.focus();$(e).backgroundFade({sColor:'#ffffff',eColor:'#ff9999',steps:50},function(){$(this).backgroundFade({sColor:'#ff9999',eColor:'#ffffff'});});return false;} -return true;});}); \ No newline at end of file diff --git a/v2/dotclear/admin/js/_trackbacks.js b/v2/dotclear/admin/js/_trackbacks.js deleted file mode 100644 index b3842d7..0000000 --- a/v2/dotclear/admin/js/_trackbacks.js +++ /dev/null @@ -1,2 +0,0 @@ - -$(function(){$('#tb_excerpt').keypress(function(){if(this.value.length>255){this.value=this.value.substring(0,255);}});}); \ No newline at end of file diff --git a/v2/dotclear/admin/js/_users.js b/v2/dotclear/admin/js/_users.js deleted file mode 100644 index ae2756f..0000000 --- a/v2/dotclear/admin/js/_users.js +++ /dev/null @@ -1,7 +0,0 @@ - -$(function(){$('.checkboxes-helpers').each(function(){dotclear.checkboxesHelpers(this);});$('#form-users').submit(function(){var action=$(this).find('select[name="dispatch_action"]').val();var user_ids=new Array();var nb_posts=new Array();var i;var msg_cannot_delete=false;$(this).find('input[name="user_id[]"]').each(function(){user_ids.push(this);});$(this).find('input[name="nb_post[]"]').each(function(){nb_posts.push(this.value);});if(action=='deleteuser'){for(i=0;i0){if(user_ids[i].checked==true){msg_cannot_delete=true;user_ids[i].checked=false;}}} -if(msg_cannot_delete==true){alert(dotclear.msg.cannot_delete_users);}} -var selectfields=0;for(i=0;iThis.height()){This.css('height',$('body').height()+'px');}};var textToggler=function(o){var i=$(''+p.img_on_alt+'');o.css('cursor','pointer');var hide=true;o.prepend(' ').prepend(i);o.click(function(){$(this).nextAll().each(function(){if($(this).is('h3')){return false;} -$(this).toggle();sizeBox();return true;});hide=!hide;var img=$(this).find('img');if(!hide){img.attr('src',p.img_off_src);}else{img.attr('src',p.img_on_src);}});};this.addClass('help-box');this.find('>hr').remove();this.find('h3').each(function(){textToggler($(this));});this.find('h3:first').nextAll('*:not(h3)').hide();sizeBox();var img=$(''+dotclear.msg.help+'');var select=$();img.click(function(){return toggle();});$('#content').append(img);return this;};var dotclear={msg:{},hideLockable:function(){$('div.lockable').each(function(){var current_lockable_div=this;$(this).find('p.form-note').hide();$(this).find('input').each(function(){this.disabled=true;$(this).width(($(this).width()-14)+'px');var imgE=document.createElement('img');imgE.src='images/locker.png';imgE.style.position='absolute';imgE.style.top='1.7em';imgE.style.left=($(this).width()+4)+'px';$(imgE).css('cursor','pointer');$(imgE).click(function(){$(this).hide();$(this).prev('input').each(function(){this.disabled=false;$(this).width(($(this).width()+14)+'px');});$(current_lockable_div).find('p.form-note').show();});$(this).parent().css('position','relative');$(this).after(imgE);});});},checkboxesHelpers:function(e){var a=document.createElement('a');a.href='#';$(a).append(document.createTextNode(dotclear.msg.select_all));a.onclick=function(){$(this).parents('form').find('input[type="checkbox"]').check();return false;};$(e).append(a);$(e).append(document.createTextNode(' - '));a=document.createElement('a');a.href='#';$(a).append(document.createTextNode(dotclear.msg.no_selection));a.onclick=function(){$(this).parents('form').find('input[type="checkbox"]').unCheck();return false;};$(e).append(a);$(e).append(document.createTextNode(' - '));a=document.createElement('a');a.href='#';$(a).append(document.createTextNode(dotclear.msg.invert_sel));a.onclick=function(){$(this).parents('form').find('input[type="checkbox"]').toggleCheck();return false;};$(e).append(a);},postsActionsHelper:function(){$('#form-entries').submit(function(){var action=$(this).find('select[name="action"]').val();var checked=false;$(this).find('input[name="entries[]"]').each(function(){if(this.checked){checked=true;}});if(!checked){return false;} -if(action=='delete'){return window.confirm(dotclear.msg.confirm_delete_posts.replace('%s',$('input[name="entries[]"]:checked').size()));} -return true;});},commentsActionsHelper:function(){$('#form-comments').submit(function(){var action=$(this).find('select[name="action"]').val();var checked=false;$(this).find('input[name="comments[]"]').each(function(){if(this.checked){checked=true;}});if(!checked){return false;} -if(action=='delete'){return window.confirm(dotclear.msg.confirm_delete_comments.replace('%s',$('input[name="comments[]"]:checked').size()));} -return true;});}};function positionFooter(){$("#wrapper").css({overflow:"auto"});var page_height=$("#top").height()+$("#wrapper").height()-$("#footer").height();if(page_height<$(window).height()){var page_width=$(document).width()-30;$("#footer").css({position:"absolute",bottom:"10px",width:page_width+"px",padding:".75em 0",marginbottom:"0"});}else{$("#footer").css({position:"static",padding:".75em 0",width:"auto"});}} -$(function(){$('#switchblog').change(function(){this.form.submit();});var menu_settings={img_on_src:dotclear.img_menu_off,img_off_src:dotclear.img_menu_on,legend_click:true,speed:100} -$('#blog-menu h3:first').toggleWithLegend($('#blog-menu ul:first'),$.extend({cookie:'dc_blog_menu'},menu_settings));$('#system-menu h3:first').toggleWithLegend($('#system-menu ul:first'),$.extend({cookie:'dc_system_menu'},menu_settings));$('#plugins-menu h3:first').toggleWithLegend($('#plugins-menu ul:first'),$.extend({cookie:'dc_plugins_menu'},menu_settings));$('#favorites-menu h3:first').toggleWithLegend($('#favorites-menu ul:first'),$.extend({cookie:'dc_favorites_menu',hide:false,reverse_cookie:true},menu_settings));$('#help').helpViewer();$('.message').backgroundFade({sColor:'#cccccc',eColor:'#666666',steps:20});$('.error').backgroundFade({sColor:'#f5e5e5',eColor:'#e5bfbf',steps:20});$('form:has(input[type=password][name=your_pwd])').submit(function(){var e=this.elements['your_pwd'];if(e.value==''){e.focus();$(e).backgroundFade({sColor:'#ffffff',eColor:'#ff9999',steps:50},function(){$(this).backgroundFade({sColor:'#ff9999',eColor:'#ffffff'});});return false;} -return true;});positionFooter();$(window).resize(positionFooter);}); \ No newline at end of file diff --git a/v2/dotclear/admin/js/confirm-close.js b/v2/dotclear/admin/js/confirm-close.js deleted file mode 100644 index 41489c9..0000000 --- a/v2/dotclear/admin/js/confirm-close.js +++ /dev/null @@ -1,12 +0,0 @@ - -function confirmClose(){if(arguments.length>0){for(var i=0;i0){var res=new Array();var f;for(var i=0;i23){h=0;} -if(h<10){h='0'+h;} -this.hour=h*1;this.oHour.value=h;},setMinute:function(m){if(m<0){m=59;} -if(m>59){m=0;} -if(m<10){m='0'+m;} -this.minute=m*1;this.oMinute.value=m;},changeMonth:function(dir){var y=this.year;var m=this.month;m=m+dir;if(m>12){this.month=1;this.year++;} -else if(m<1){this.month=12;this.year--;} -else{this.month=m;} -this.setDate();},changeYear:function(dir){this.year=this.year+dir;this.setDate();},changeHour:function(dir){this.setHour(this.hour*1+dir);},changeMinute:function(dir){this.setMinute(this.minute*1+dir);},sendDate:function(d){var m=this.month;var hour=this.oHour.value*1;var minute=this.oMinute.value*1;if(hour<0||hour>23||isNaN(hour)){hour=0;} -if(minute<0||minute>59||isNaN(minute)){minute=0;} -if(m<10){m='0'+m;} -if(d<10){d='0'+d;} -if(hour<10){hour='0'+hour;} -if(minute<10){minute='0'+minute;} -this.target.value=this.year+'-'+m+'-'+d+' '+hour+':'+minute;this.close();},sendNow:function(){var dt=new Date();var y=dt.getFullYear();var m=dt.getMonth()+1;var d=dt.getDate();var h=dt.getHours();var i=dt.getMinutes();if(m<10){m='0'+m;} -if(d<10){d='0'+d;} -if(h<10){h='0'+h;} -if(i<10){i='0'+i;} -this.target.value=y+'-'+m+'-'+d+' '+h+':'+i;this.close();},close:function(){document.body.removeChild(this.oTable);},numberOfDays:function(){var res=31;if(this.month==4||this.month==6||this.month==9||this.month==11){res=30;}else if(this.month==2){res=28;if(this.year%4==0&&(this.year%100!=0||this.year%400==0)){res=29;}} -return res;},firstDay:function(){var dt=new Date(this.year,this.month-1,1);var res=dt.getDay();if(res==0){res=7;} -return res;},show:function(){var re=/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2})/;var match=re.exec(this.target.value);if(match){this.year=match[1]*1;this.month=match[2]*1;this.day=match[3]*1;this.hour=match[4]*1;this.minute=match[5]*1;}else{var dt=new Date();this.year=dt.getFullYear();this.month=dt.getMonth()+1;this.day=dt.getDate();this.hour=dt.getHours();this.minute=dt.getMinutes();} -this.oTable.appendChild(this.oBody);this.setDate();this.setPosition();document.body.appendChild(this.oTable);this.oHour.focus();},setPosition:function(){var t_x=this.findPosX(this.target);var t_y=this.findPosY(this.target);var o_h=this.oTable.offsetHeight;var o_w=this.oTable.offsetWidth;this.oTable.style.position='absolute';this.oTable.style.zIndex='100';this.oTable.style.top=t_y+'px';this.oTable.style.left=t_x+'px';},findPosX:function(obj){var curleft=0;if(obj.offsetParent){while(1){curleft+=obj.offsetLeft;if(!obj.offsetParent){break;} -obj=obj.offsetParent;}}else if(obj.x){curleft+=obj.x;} -return curleft;},findPosY:function(obj){var curtop=0;if(obj.offsetParent){while(1){curtop+=obj.offsetTop;if(!obj.offsetParent){break;} -obj=obj.offsetParent;}}else if(obj.y){curtop+=obj.y;} -return curtop;},draw:function(){var imgE=document.createElement('img');imgE.src=this.img_src;imgE.style.position='absolute';imgE.style.top=this.img_top;imgE.style.left=(this.target.clientWidth+4)+'px';imgE.obj=this;imgE.fn=this.show;imgE.onclick=function(){this.fn.apply(this.obj);};this.target.parentNode.style.position='relative';this.target.parentNode.insertBefore(imgE,this.target.nextSibling);}}; \ No newline at end of file diff --git a/v2/dotclear/admin/js/dragsort-tablerows.js b/v2/dotclear/admin/js/dragsort-tablerows.js deleted file mode 100644 index 164b5ec..0000000 --- a/v2/dotclear/admin/js/dragsort-tablerows.js +++ /dev/null @@ -1,2 +0,0 @@ - -ToolMan._dragsortFactory.makeTableSortable=function(table){if(table==null)return;var helpers=ToolMan.helpers();var coordinates=ToolMan.coordinates();var items=table.getElementsByTagName("tr");helpers.map(items,function(item){var dragGroup=dragsort.makeSortable(item);dragGroup.setThreshold(4);var min,max;dragGroup.addTransform(function(coordinate,dragEvent){return coordinate.constrainTo(min,max);});dragGroup.register('dragstart',function(){var items=table.getElementsByTagName("tr");min=max=coordinates.topLeftOffset(items[0]);for(var i=1,n=items.length;i":"","\\/\\*[^*]*\\*+([^\\/][^*]*\\*+)*\\/":"","@(namespace|import)[^;\\n]+[;\\n]":"","'(\\\\.|[^'\\\\])*'":encodeString,'"(\\\\.|[^"\\\\])*"':encodeString,"\\s+":" "});function encode(cssText){return encoder.exec(cssText);};function decode(cssText){return cssText.replace(ENCODED,function(match,index){return _strings[index-1];});};function encodeString(string){return"\x01"+_strings.push(string.replace(UNICODE,function(match,chr){return eval("'\\u"+"0000".slice(chr.length)+chr+"'");}).slice(1,-1).replace(QUOTES,"\\'"));};function getString(value){return STRING.test(value)?_strings[value.slice(1)-1]:value;};var rotater=new RegGrp({Width:"Height",width:"height",Left:"Top",left:"top",Right:"Bottom",right:"bottom",onX:"onY"});function rotate(fn){return rotater.exec(fn);};var eventHandlers=[];function addResize(handler){addRecalc(handler);addEventHandler(window,"onresize",handler);};function addEventHandler(element,type,handler){element.attachEvent(type,handler);eventHandlers.push(arguments);};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler);}catch(ignore){}};addEventHandler(window,"onunload",function(){var handler;while(handler=eventHandlers.pop()){removeEventHandler(handler[0],handler[1],handler[2]);}});function register(handler,element,condition){if(!handler.elements)handler.elements={};if(condition)handler.elements[element.uniqueID]=element;else delete handler.elements[element.uniqueID];return condition;};addEventHandler(window,"onbeforeprint",function(){if(!IE7.CSS.print)new StyleSheet("print");IE7.CSS.print.recalc();});var PIXEL=/^\d+(px)?$/i;var PERCENT=/^\d+%$/;var getPixelValue=function(element,value){if(PIXEL.test(value))return parseInt(value);var style=element.style.left;var runtimeStyle=element.runtimeStyle.left;element.runtimeStyle.left=element.currentStyle.left;element.style.left=value||0;value=element.style.pixelLeft;element.style.left=style;element.runtimeStyle.left=runtimeStyle;return value;};var $IE7="ie7-";var Fix=Base.extend({constructor:function(){this.fixes=[];this.recalcs=[];},init:Undefined});var recalcs=[];function addRecalc(recalc){recalcs.push(recalc);};IE7.recalc=function(){IE7.HTML.recalc();IE7.CSS.recalc();for(var i=0;i1?2:0;var block=cssParser.exec(selectors[i])||"if(0){";if(_wild){block+=format("if(e%1.nodeName!='!'){",_index);} -var store=_duplicate>1?_TEST:"";block+=format(store+_STORE,_index);block+=Array(match(block,/\{/g).length+1).join("}");fn+=block;} -eval(format(_FN,reg)+cssParser.unescape(fn)+"return s?null:r}");_cache[selector]=_selectorFunction;} -return _cache[selector](context||document,single);};var _MSIE5=appVersion<6;var _EVALUATED=/^(href|src)$/;var _ATTRIBUTES={"class":"className","for":"htmlFor"};IE7._indexed=1;IE7._byId=function(document,id){var result=document.all[id]||null;if(!result||result.id==id)return result;for(var i=0;i+~,]|[^(]\+|^)([#.:\[])/g,IMPLIED_SPACE=/(^|,)([^\s>+~])/g,WHITESPACE=/\s*([\s>+~(),]|^|$)\s*/g,WILD_CARD=/\s\*\s/g;;var CSSParser=RegGrp.extend({constructor:function(items){this.base(items);this.sorter=new RegGrp;this.sorter.add(/:not\([^)]*\)/,RegGrp.IGNORE);this.sorter.add(/([ >](\*|[\w-]+))([^: >+~]*)(:\w+-child(\([^)]+\))?)([^: >+~]*)/,"$1$3$6$4");},ignoreCase:true,escape:function(selector){return this.optimise(this.format(selector));},format:function(selector){return selector.replace(WHITESPACE,"$1").replace(IMPLIED_SPACE,"$1 $2").replace(IMPLIED_ASTERISK,"$1*$2");},optimise:function(selector){return this.sorter.exec(selector.replace(WILD_CARD,">* "));},unescape:function(selector){return decode(selector);}});var _OPERATORS={"":"%1!=null","=":"%1=='%2'","~=":/(^| )%1( |$)/,"|=":/^%1(-|$)/,"^=":/^%1/,"$=":/%1$/,"*=":/%1/};var _PSEUDO_CLASSES={"first-child":"!IE7._getPreviousElementSibling(e%1)","link":"e%1.currentStyle['ie7-link']=='link'","visited":"e%1.currentStyle['ie7-link']=='visited'"};var _VAR="var p%2=0,i%2,e%2,n%2=e%1.";var _ID="e%1.sourceIndex";var _TEST="var g="+_ID+";if(!p[g]){p[g]=1;";var _STORE="r[r.length]=e%1;if(s)return e%1;";var _FN="var _selectorFunction=function(e0,s){IE7._indexed++;var r=[],p={},reg=[%1],d=document;";var reg;var _index;var _wild;var _list;var _duplicate;var _cache={};var cssParser=new CSSParser({" (\\*|[\\w-]+)#([\\w-]+)":function(match,tagName,id){_wild=false;var replacement="var e%2=IE7._byId(d,'%4');if(e%2&&";if(tagName!="*")replacement+="e%2.nodeName=='%3'&&";replacement+="(e%1==d||e%1.contains(e%2))){";if(_list)replacement+=format("i%1=n%1.length;",_list);return format(replacement,_index++,_index,tagName.toUpperCase(),id);}," (\\*|[\\w-]+)":function(match,tagName){_duplicate++;_wild=tagName=="*";var replacement=_VAR;replacement+=(_wild&&_MSIE5)?"all":"getElementsByTagName('%3')";replacement+=";for(i%2=0;(e%2=n%2[i%2]);i%2++){";return format(replacement,_index++,_list=_index,tagName.toUpperCase());},">(\\*|[\\w-]+)":function(match,tagName){var children=_list;_wild=tagName=="*";var replacement=_VAR;replacement+=children?"children":"childNodes";if(!_wild&&children)replacement+=".tags('%3')";replacement+=";for(i%2=0;(e%2=n%2[i%2]);i%2++){";if(_wild){replacement+="if(e%2.nodeType==1){";_wild=_MSIE5;}else{if(!children)replacement+="if(e%2.nodeName=='%3'){";} -return format(replacement,_index++,_list=_index,tagName.toUpperCase());},"\\+(\\*|[\\w-]+)":function(match,tagName){var replacement="";if(_wild)replacement+="if(e%1.nodeName!='!'){";_wild=false;replacement+="e%1=IE7._getNextElementSibling(e%1);if(e%1";if(tagName!="*")replacement+="&&e%1.nodeName=='%2'";replacement+="){";return format(replacement,_index,tagName.toUpperCase());},"~(\\*|[\\w-]+)":function(match,tagName){var replacement="";if(_wild)replacement+="if(e%1.nodeName!='!'){";_wild=false;_duplicate=2;replacement+="while(e%1=e%1.nextSibling){if(e%1.ie7_adjacent==IE7._indexed)break;if(";if(tagName=="*"){replacement+="e%1.nodeType==1";if(_MSIE5)replacement+="&&e%1.nodeName!='!'";}else replacement+="e%1.nodeName=='%2'";replacement+="){e%1.ie7_adjacent=IE7._indexed;";return format(replacement,_index,tagName.toUpperCase());},"#([\\w-]+)":function(match,id){_wild=false;var replacement="if(e%1.id=='%2'){";if(_list)replacement+=format("i%1=n%1.length;",_list);return format(replacement,_index,id);},"\\.([\\w-]+)":function(match,className){_wild=false;reg.push(new RegExp("(^|\\s)"+rescape(className)+"(\\s|$)"));return format("if(e%1.className&®[%2].test(e%1.className)){",_index,reg.length-1);},"\\[([\\w-]+)\\s*([^=]?=)?\\s*([^\\]]*)\\]":function(match,attr,operator,value){var alias=_ATTRIBUTES[attr]||attr;if(operator){var getAttribute="e%1.getAttribute('%2',2)";if(!_EVALUATED.test(attr)){getAttribute="e%1.%3||"+getAttribute;} -attr=format("("+getAttribute+")",_index,attr,alias);}else{attr=format("IE7._getAttribute(e%1,'%2')",_index,attr);} -var replacement=_OPERATORS[operator||""]||"0";if(replacement&&replacement.source){reg.push(new RegExp(format(replacement.source,rescape(cssParser.unescape(value)))));replacement="reg[%2].test(%1)";value=reg.length-1;} -return"if("+format(replacement,attr,value)+"){";},":+([\\w-]+)(\\(([^)]+)\\))?":function(match,pseudoClass,$2,args){pseudoClass=_PSEUDO_CLASSES[pseudoClass];return"if("+(pseudoClass?format(pseudoClass,_index,args||""):"0")+"){";}});var HYPERLINK=/a(#[\w-]+)?(\.[\w-]+)?:(hover|active)/i;var BRACE1=/\s*\{\s*/,BRACE2=/\s*\}\s*/,COMMA=/\s*\,\s*/;var FIRST_LINE_LETTER=/(.*)(:first-(line|letter))/;var styleSheets=document.styleSheets;IE7.CSS=new(Fix.extend({parser:new Parser,screen:"",print:"",styles:[],rules:[],pseudoClasses:appVersion<7?"first\\-child":"",dynamicPseudoClasses:{toString:function(){var strings=[];for(var pseudoClass in this)strings.push(pseudoClass);return strings.join("|");}},init:function(){var NONE="^\x01$";var CLASS="\\[class=?[^\\]]*\\]";var pseudoClasses=[];if(this.pseudoClasses)pseudoClasses.push(this.pseudoClasses);var dynamicPseudoClasses=this.dynamicPseudoClasses.toString();if(dynamicPseudoClasses)pseudoClasses.push(dynamicPseudoClasses);pseudoClasses=pseudoClasses.join("|");var unknown=appVersion<7?["[>+~[(]|([:.])\\w+\\1"]:[CLASS];if(pseudoClasses)unknown.push(":("+pseudoClasses+")");this.UNKNOWN=new RegExp(unknown.join("|")||NONE,"i");var complex=appVersion<7?["\\[[^\\]]+\\]|[^\\s(\\[]+\\s*[+~]"]:[CLASS];var complexRule=complex.concat();if(pseudoClasses)complexRule.push(":("+pseudoClasses+")");Rule.COMPLEX=new RegExp(complexRule.join("|")||NONE,"ig");if(this.pseudoClasses)complex.push(":("+this.pseudoClasses+")");DynamicRule.COMPLEX=new RegExp(complex.join("|")||NONE,"i");DynamicRule.MATCH=new RegExp(dynamicPseudoClasses?"(.*):("+dynamicPseudoClasses+")(.*)":NONE,"i");this.createStyleSheet();this.refresh();},addEventHandler:function(){addEventHandler.apply(null,arguments);},addFix:function(expression,replacement){this.parser.add(expression,replacement);},addRecalc:function(propertyName,test,handler,replacement){test=new RegExp("([{;\\s])"+propertyName+"\\s*:\\s*"+test+"[^;}]*");var id=this.recalcs.length;if(replacement)replacement=propertyName+":"+replacement;this.addFix(test,function(match,$1){return(replacement?$1+replacement:match)+";ie7-"+match.slice(1)+";ie7_recalc"+id+":1";});this.recalcs.push(arguments);return id;},apply:function(){this.getInlineStyles();new StyleSheet("screen");this.trash();},createStyleSheet:function(){this.styleSheet=document.createStyleSheet();this.styleSheet.ie7=true;this.styleSheet.owningElement.ie7=true;this.styleSheet.cssText=HEADER;},getInlineStyles:function(){var styleSheets=document.getElementsByTagName("style"),styleSheet;for(var i=styleSheets.length-1;(styleSheet=styleSheets[i]);i--){if(!styleSheet.disabled&&!styleSheet.ie7){this.styles.push(styleSheet.innerHTML);}}},getText:function(styleSheet,path){try{var cssText=styleSheet.cssText;}catch(e){cssText="";} -if(httpRequest)cssText=loadFile(styleSheet.href,path)||cssText;return cssText;},recalc:function(){this.screen.recalc();var RECALCS=/ie7_recalc\d+/g;var start=HEADER.match(/[{,]/g).length;var stop=start+(this.screen.cssText.match(/\{/g)||"").length;var rules=this.styleSheet.rules,rule;var calcs,calc,elements,element,i,j,k,id;for(i=start;i0&&Rule.CLASS.test(simple)){simple=simple.replace(Rule.CLASS,"");classes--;} -while(tags>0&&Rule.TAG.test(simple)){simple=simple.replace(Rule.TAG,"$1*");tags--;} -simple+="."+this.className;classes=Math.min(classes,2);tags=Math.min(tags,2);var score=-10*classes-tags;if(score>0){simple=simple+","+Rule.MAP[score]+" "+simple;} -return simple;},remove:function(element){element.className=element.className.replace(this.MATCH,"$1");},toString:function(){return format("%1 {%2}",this.selectorText,this.cssText);}},{CHILD:/>/g,CLASS:/\.[\w-]+/,CLASSES:/[.:\[]/g,MULTI:/(\.[\w-]+)+/g,PREFIX:"ie7_class",TAG:/^\w+|([\s>+~])\w+/,TAGS:/^\w|[\s>+~]\w/g,MAP:{1:"html",2:"html body",10:".ie7_html",11:"html.ie7_html",12:"html.ie7_html body",20:".ie7_html .ie7_body",21:"html.ie7_html .ie7_body",22:"html.ie7_html body.ie7_body"}});var DynamicRule=Rule.extend({constructor:function(selector,attach,dynamicPseudoClass,target,cssText){this.attach=attach||"*";this.dynamicPseudoClass=IE7.CSS.dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.base(selector,cssText);},recalc:function(){var attaches=cssQuery(this.attach),attach;for(var i=0;attach=attaches[i];i++){var target=this.target?cssQuery(this.target,attach):[attach];if(target.length)this.dynamicPseudoClass.apply(attach,target,this);}}});var DynamicPseudoClass=Base.extend({constructor:function(name,apply){this.name=name;this.apply=apply;this.instances={};IE7.CSS.dynamicPseudoClasses[name]=this;},register:function(instance){var _class=instance[2];instance.id=_class.id+instance[0].uniqueID;if(!this.instances[instance.id]){var target=instance[1],j;for(j=0;j*:"+(type=="marginTop"?"first":"last")+"-child",element,true);if(child&&child.currentStyle.styleFloat=="none"&&IE7.hasLayout(child)){collapseMargin(child,type);margin=_getMargin(element,element.currentStyle[type]);childMargin=_getMargin(child,child.currentStyle[type]);if(margin<0||childMargin<0){element.runtimeStyle[type]=margin+childMargin;}else{element.runtimeStyle[type]=Math.max(childMargin,margin);} -child.runtimeStyle[type]="0px";}}};function _getMargin(element,value){return value=="auto"?0:getPixelValue(element,value);};var UNIT=/^[.\d][\w%]*$/,AUTO=/^(auto|0cm)$/;var applyWidth,applyHeight;IE7.Layout.borderBox=function(element){applyWidth(element);applyHeight(element);};var fixWidth=function(HEIGHT){applyWidth=function(element){if(!PERCENT.test(element.currentStyle.width))fixWidth(element);collapseMargins(element);};function fixWidth(element,value){if(!element.runtimeStyle.fixedWidth){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;setOverrideStyle(element,"width",element.runtimeStyle.fixedWidth);}};function layoutWidth(element){if(!isFixed(element)){var layoutParent=element.offsetParent;while(layoutParent&&!IE7.hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;} -return(layoutParent||viewport).clientWidth;};function getPixelWidth(element,value){if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutWidth(element));return getPixelValue(element,value);};var getFixedWidth=function(element,value){var borderBox=element.currentStyle["box-sizing"]=="border-box";var adjustment=0;if(quirksMode&&!borderBox) -adjustment+=getBorderWidth(element)+getWidth(element,"padding");else if(!quirksMode&&borderBox) -adjustment-=getBorderWidth(element)+getWidth(element,"padding");return getPixelWidth(element,value)+adjustment;};function getBorderWidth(element){return element.offsetWidth-element.clientWidth;};function getWidth(element,type){return getPixelWidth(element,element.currentStyle[type+"Left"])+getPixelWidth(element,element.currentStyle[type+"Right"]);};HEADER+="*{minWidth:none;maxWidth:none;min-width:none;max-width:none}";layout.minWidth=function(element){if(element.currentStyle["min-width"]!=null){element.style.minWidth=element.currentStyle["min-width"];} -if(register(arguments.callee,element,element.currentStyle.minWidth!="none")){layout.boxSizing(element);fixWidth(element);resizeWidth(element);}};eval("IE7.Layout.maxWidth="+String(layout.minWidth).replace(/min/g,"max"));function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.minWidth!="none"&&width<=getFixedWidth(element,element.currentStyle.minWidth)){element.runtimeStyle.width=element.currentStyle.minWidth;}else if(element.currentStyle.maxWidth!="none"&&width>=getFixedWidth(element,element.currentStyle.maxWidth)){element.runtimeStyle.width=element.currentStyle.maxWidth;}else{element.runtimeStyle.width=element.runtimeStyle.fixedWidth;}};function fixRight(element){if(register(fixRight,element,/^(fixed|absolute)$/.test(element.currentStyle.position)&&getDefinedStyle(element,"left")!="auto"&&getDefinedStyle(element,"right")!="auto"&&AUTO.test(getDefinedStyle(element,"width")))){resizeRight(element);IE7.Layout.boxSizing(element);}};IE7.Layout.fixRight=fixRight;function resizeRight(element){var left=getPixelWidth(element,element.runtimeStyle._left||element.currentStyle.left);var width=layoutWidth(element)-getPixelWidth(element,element.currentStyle.right)-left-getWidth(element,"margin");if(parseInt(element.runtimeStyle.width)==width)return;element.runtimeStyle.width="";if(isFixed(element)||HEIGHT||element.offsetWidth=5.5&&appVersion<7){IE7.CSS.addFix(/background(-image)?\s*:\s*([^};]*)?url\(([^\)]+)\)([^;}]*)?/,function(match,$1,$2,url,$4){url=getString(url);return PNG.test(url)?"filter:"+format(PNG_FILTER,url,"crop")+";zoom:1;background"+($1||"")+":"+($2||"")+"none"+($4||""):match;});IE7.HTML.addRecalc("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImage(element);addEventHandler(element,"onpropertychange",function(){if(!printing&&event.propertyName=="src"&&element.src.indexOf(BLANK_GIF)==-1)fixImage(element);});});var printing=false;addEventHandler(window,"onbeforeprint",function(){printing=true;for(var i=0;i=7)return;IE7.CSS.addRecalc("position","fixed",_positionFixed,"absolute");IE7.CSS.addRecalc("background(-attachment)?","[^};]*fixed",_backgroundFixed);var $viewport=quirksMode?"body":"documentElement";function _fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundRepeat="no-repeat";body.runtimeStyle.backgroundImage="url("+BLANK_GIF+")";} -body.runtimeStyle.backgroundAttachment="fixed";} -_fixBackground=Undefined;};var _tmp=createTempElement("img");function _isFixed(element){return element?isFixed(element)||_isFixed(element.parentElement):false;};function _setExpression(element,propertyName,expression){setTimeout("document.all."+element.uniqueID+".runtimeStyle.setExpression('"+propertyName+"','"+expression+"')",0);};function _backgroundFixed(element){if(register(_backgroundFixed,element,element.currentStyle.backgroundAttachment=="fixed"&&!element.contains(body))){_fixBackground();bgLeft(element);bgTop(element);_backgroundPosition(element);}};function _backgroundPosition(element){_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=element.canHaveChildren?element:element.parentElement;parentElement.appendChild(_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(_tmp);};function bgLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!_isFixed(element)){_setExpression(element,"backgroundPositionX","(parseInt(runtimeStyle.offsetLeft)+document."+$viewport+".scrollLeft)||0");}};eval(rotate(bgLeft));function setOffsetLeft(element){var propertyName=_isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)- -element.getBoundingClientRect().left-element.clientLeft+2;};eval(rotate(setOffsetLeft));function getOffsetLeft(element,position){switch(position){case"left":case"top":return 0;case"right":case"bottom":return viewport.clientWidth-_tmp.offsetWidth;case"center":return(viewport.clientWidth-_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-_tmp.offsetWidth)*parseFloat(position)/100);} -_tmp.style.left=position;return _tmp.offsetLeft;}};eval(rotate(getOffsetLeft));function _positionFixed(element){if(register(_positionFixed,element,isFixed(element))){setOverrideStyle(element,"position","absolute");setOverrideStyle(element,"left",element.currentStyle.left);setOverrideStyle(element,"top",element.currentStyle.top);_fixBackground();IE7.Layout.fixRight(element);_foregroundPosition(element);}};function _foregroundPosition(element,recalc){positionTop(element,recalc);positionLeft(element,recalc,true);if(!element.runtimeStyle.autoLeft&&element.currentStyle.marginLeft=="auto"&&element.currentStyle.right!="auto"){var left=viewport.clientWidth-getPixelWidth(element,element.currentStyle.right)- -getPixelWidth(element,element.runtimeStyle._left)-element.clientWidth;if(element.currentStyle.marginRight=="auto")left=parseInt(left/2);if(_isFixed(element.offsetParent))element.runtimeStyle.pixelLeft+=left;else element.runtimeStyle.shiftLeft=left;} -clipWidth(element);clipHeight(element);};function clipWidth(element){var fixWidth=element.runtimeStyle.fixWidth;element.runtimeStyle.borderRightWidth="";element.runtimeStyle.width=fixWidth?getPixelWidth(element,fixWidth):"";if(element.currentStyle.width!="auto"){var rect=element.getBoundingClientRect();var width=element.offsetWidth-viewport.clientWidth+rect.left-2;if(width>=0){element.runtimeStyle.borderRightWidth="0px";width=Math.max(getPixelValue(element,element.currentStyle.width)-width,0);setOverrideStyle(element,"width",width);return width;}}};eval(rotate(clipWidth));function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width)){element.runtimeStyle.fixWidth=element.currentStyle.width;} -if(element.runtimeStyle.fixWidth){element.runtimeStyle.width=getPixelWidth(element,element.runtimeStyle.fixWidth);} -element.runtimeStyle.shiftLeft=0;element.runtimeStyle._left=element.currentStyle.left;element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto";element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;if(!recalc&&!_isFixed(element.offsetParent)){_setExpression(element,"pixelLeft","runtimeStyle.screenLeft+runtimeStyle.shiftLeft+document."+$viewport+".scrollLeft");}};eval(rotate(positionLeft));function getScreenLeft(element){var screenLeft=element.offsetLeft,nested=1;if(element.runtimeStyle.autoLeft){screenLeft=viewport.clientWidth-element.offsetWidth-getPixelWidth(element,element.currentStyle.right);} -if(element.currentStyle.marginLeft!="auto"){screenLeft-=getPixelWidth(element,element.currentStyle.marginLeft);} -while(element=element.offsetParent){if(element.currentStyle.position!="static")nested=-1;screenLeft+=element.offsetLeft*nested;} -return screenLeft;};eval(rotate(getScreenLeft));function getPixelWidth(element,value){return PERCENT.test(value)?parseInt(parseFloat(value)/100*viewport.clientWidth):getPixelValue(element,value);};eval(rotate(getPixelWidth));function _resize(){var elements=_backgroundFixed.elements;for(var i in elements)_backgroundPosition(elements[i]);elements=_positionFixed.elements;for(i in elements){_foregroundPosition(elements[i],true);_foregroundPosition(elements[i],true);} -_timer=0;};var _timer;addResize(function(){if(!_timer)_timer=setTimeout(_resize,0);});};var WRAPPER_STYLE={backgroundColor:"transparent",backgroundImage:"none",backgroundPositionX:null,backgroundPositionY:null,backgroundRepeat:null,borderTopWidth:0,borderRightWidth:0,borderBottomWidth:0,borderLeftStyle:"none",borderTopStyle:"none",borderRightStyle:"none",borderBottomStyle:"none",borderLeftWidth:0,height:null,marginTop:0,marginBottom:0,marginRight:0,marginLeft:0,width:"100%"};IE7.CSS.addRecalc("overflow","visible",function(element){if(element.parentNode.ie7_wrapped)return;if(IE7.Layout&&element.currentStyle["max-height"]!="auto"){IE7.Layout.maxHeight(element);} -if(element.currentStyle.marginLeft=="auto")element.style.marginLeft=0;if(element.currentStyle.marginRight=="auto")element.style.marginRight=0;var wrapper=document.createElement(ANON);wrapper.ie7_wrapped=element;for(var propertyName in WRAPPER_STYLE){wrapper.style[propertyName]=element.currentStyle[propertyName];if(WRAPPER_STYLE[propertyName]!=null){element.runtimeStyle[propertyName]=WRAPPER_STYLE[propertyName];}} -wrapper.style.display="block";wrapper.style.position="relative";element.runtimeStyle.position="absolute";element.parentNode.insertBefore(wrapper,element);wrapper.appendChild(element);});function ie7Quirks(){var FONT_SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i":"","\\/\\*[^*]*\\*+([^\\/][^*]*\\*+)*\\/":"","@(namespace|import)[^;\\n]+[;\\n]":"","'(\\\\.|[^'\\\\])*'":encodeString,'"(\\\\.|[^"\\\\])*"':encodeString,"\\s+":" "});function encode(cssText){return encoder.exec(cssText);};function decode(cssText){return cssText.replace(ENCODED,function(match,index){return _strings[index-1];});};function encodeString(string){return"\x01"+_strings.push(string.replace(UNICODE,function(match,chr){return eval("'\\u"+"0000".slice(chr.length)+chr+"'");}).slice(1,-1).replace(QUOTES,"\\'"));};function getString(value){return STRING.test(value)?_strings[value.slice(1)-1]:value;};var rotater=new RegGrp({Width:"Height",width:"height",Left:"Top",left:"top",Right:"Bottom",right:"bottom",onX:"onY"});function rotate(fn){return rotater.exec(fn);};var eventHandlers=[];function addResize(handler){addRecalc(handler);addEventHandler(window,"onresize",handler);};function addEventHandler(element,type,handler){element.attachEvent(type,handler);eventHandlers.push(arguments);};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler);}catch(ignore){}};addEventHandler(window,"onunload",function(){var handler;while(handler=eventHandlers.pop()){removeEventHandler(handler[0],handler[1],handler[2]);}});function register(handler,element,condition){if(!handler.elements)handler.elements={};if(condition)handler.elements[element.uniqueID]=element;else delete handler.elements[element.uniqueID];return condition;};addEventHandler(window,"onbeforeprint",function(){if(!IE7.CSS.print)new StyleSheet("print");IE7.CSS.print.recalc();});var PIXEL=/^\d+(px)?$/i;var PERCENT=/^\d+%$/;var getPixelValue=function(element,value){if(PIXEL.test(value))return parseInt(value);var style=element.style.left;var runtimeStyle=element.runtimeStyle.left;element.runtimeStyle.left=element.currentStyle.left;element.style.left=value||0;value=element.style.pixelLeft;element.style.left=style;element.runtimeStyle.left=runtimeStyle;return value;};var $IE7="ie7-";var Fix=Base.extend({constructor:function(){this.fixes=[];this.recalcs=[];},init:Undefined});var recalcs=[];function addRecalc(recalc){recalcs.push(recalc);};IE7.recalc=function(){IE7.HTML.recalc();IE7.CSS.recalc();for(var i=0;i1?2:0;var block=cssParser.exec(selectors[i])||"if(0){";if(_wild){block+=format("if(e%1.nodeName!='!'){",_index);} -var store=_duplicate>1?_TEST:"";block+=format(store+_STORE,_index);block+=Array(match(block,/\{/g).length+1).join("}");fn+=block;} -eval(format(_FN,reg)+cssParser.unescape(fn)+"return s?null:r}");_cache[selector]=_selectorFunction;} -return _cache[selector](context||document,single);};var _MSIE5=appVersion<6;var _EVALUATED=/^(href|src)$/;var _ATTRIBUTES={"class":"className","for":"htmlFor"};IE7._indexed=1;IE7._byId=function(document,id){var result=document.all[id]||null;if(!result||result.id==id)return result;for(var i=0;i+~,]|[^(]\+|^)([#.:\[])/g,IMPLIED_SPACE=/(^|,)([^\s>+~])/g,WHITESPACE=/\s*([\s>+~(),]|^|$)\s*/g,WILD_CARD=/\s\*\s/g;;var CSSParser=RegGrp.extend({constructor:function(items){this.base(items);this.sorter=new RegGrp;this.sorter.add(/:not\([^)]*\)/,RegGrp.IGNORE);this.sorter.add(/([ >](\*|[\w-]+))([^: >+~]*)(:\w+-child(\([^)]+\))?)([^: >+~]*)/,"$1$3$6$4");},ignoreCase:true,escape:function(selector){return this.optimise(this.format(selector));},format:function(selector){return selector.replace(WHITESPACE,"$1").replace(IMPLIED_SPACE,"$1 $2").replace(IMPLIED_ASTERISK,"$1*$2");},optimise:function(selector){return this.sorter.exec(selector.replace(WILD_CARD,">* "));},unescape:function(selector){return decode(selector);}});var _OPERATORS={"":"%1!=null","=":"%1=='%2'","~=":/(^| )%1( |$)/,"|=":/^%1(-|$)/,"^=":/^%1/,"$=":/%1$/,"*=":/%1/};var _PSEUDO_CLASSES={"first-child":"!IE7._getPreviousElementSibling(e%1)","link":"e%1.currentStyle['ie7-link']=='link'","visited":"e%1.currentStyle['ie7-link']=='visited'"};var _VAR="var p%2=0,i%2,e%2,n%2=e%1.";var _ID="e%1.sourceIndex";var _TEST="var g="+_ID+";if(!p[g]){p[g]=1;";var _STORE="r[r.length]=e%1;if(s)return e%1;";var _FN="var _selectorFunction=function(e0,s){IE7._indexed++;var r=[],p={},reg=[%1],d=document;";var reg;var _index;var _wild;var _list;var _duplicate;var _cache={};var cssParser=new CSSParser({" (\\*|[\\w-]+)#([\\w-]+)":function(match,tagName,id){_wild=false;var replacement="var e%2=IE7._byId(d,'%4');if(e%2&&";if(tagName!="*")replacement+="e%2.nodeName=='%3'&&";replacement+="(e%1==d||e%1.contains(e%2))){";if(_list)replacement+=format("i%1=n%1.length;",_list);return format(replacement,_index++,_index,tagName.toUpperCase(),id);}," (\\*|[\\w-]+)":function(match,tagName){_duplicate++;_wild=tagName=="*";var replacement=_VAR;replacement+=(_wild&&_MSIE5)?"all":"getElementsByTagName('%3')";replacement+=";for(i%2=0;(e%2=n%2[i%2]);i%2++){";return format(replacement,_index++,_list=_index,tagName.toUpperCase());},">(\\*|[\\w-]+)":function(match,tagName){var children=_list;_wild=tagName=="*";var replacement=_VAR;replacement+=children?"children":"childNodes";if(!_wild&&children)replacement+=".tags('%3')";replacement+=";for(i%2=0;(e%2=n%2[i%2]);i%2++){";if(_wild){replacement+="if(e%2.nodeType==1){";_wild=_MSIE5;}else{if(!children)replacement+="if(e%2.nodeName=='%3'){";} -return format(replacement,_index++,_list=_index,tagName.toUpperCase());},"\\+(\\*|[\\w-]+)":function(match,tagName){var replacement="";if(_wild)replacement+="if(e%1.nodeName!='!'){";_wild=false;replacement+="e%1=IE7._getNextElementSibling(e%1);if(e%1";if(tagName!="*")replacement+="&&e%1.nodeName=='%2'";replacement+="){";return format(replacement,_index,tagName.toUpperCase());},"~(\\*|[\\w-]+)":function(match,tagName){var replacement="";if(_wild)replacement+="if(e%1.nodeName!='!'){";_wild=false;_duplicate=2;replacement+="while(e%1=e%1.nextSibling){if(e%1.ie7_adjacent==IE7._indexed)break;if(";if(tagName=="*"){replacement+="e%1.nodeType==1";if(_MSIE5)replacement+="&&e%1.nodeName!='!'";}else replacement+="e%1.nodeName=='%2'";replacement+="){e%1.ie7_adjacent=IE7._indexed;";return format(replacement,_index,tagName.toUpperCase());},"#([\\w-]+)":function(match,id){_wild=false;var replacement="if(e%1.id=='%2'){";if(_list)replacement+=format("i%1=n%1.length;",_list);return format(replacement,_index,id);},"\\.([\\w-]+)":function(match,className){_wild=false;reg.push(new RegExp("(^|\\s)"+rescape(className)+"(\\s|$)"));return format("if(e%1.className&®[%2].test(e%1.className)){",_index,reg.length-1);},"\\[([\\w-]+)\\s*([^=]?=)?\\s*([^\\]]*)\\]":function(match,attr,operator,value){var alias=_ATTRIBUTES[attr]||attr;if(operator){var getAttribute="e%1.getAttribute('%2',2)";if(!_EVALUATED.test(attr)){getAttribute="e%1.%3||"+getAttribute;} -attr=format("("+getAttribute+")",_index,attr,alias);}else{attr=format("IE7._getAttribute(e%1,'%2')",_index,attr);} -var replacement=_OPERATORS[operator||""]||"0";if(replacement&&replacement.source){reg.push(new RegExp(format(replacement.source,rescape(cssParser.unescape(value)))));replacement="reg[%2].test(%1)";value=reg.length-1;} -return"if("+format(replacement,attr,value)+"){";},":+([\\w-]+)(\\(([^)]+)\\))?":function(match,pseudoClass,$2,args){pseudoClass=_PSEUDO_CLASSES[pseudoClass];return"if("+(pseudoClass?format(pseudoClass,_index,args||""):"0")+"){";}});var HYPERLINK=/a(#[\w-]+)?(\.[\w-]+)?:(hover|active)/i;var BRACE1=/\s*\{\s*/,BRACE2=/\s*\}\s*/,COMMA=/\s*\,\s*/;var FIRST_LINE_LETTER=/(.*)(:first-(line|letter))/;var styleSheets=document.styleSheets;IE7.CSS=new(Fix.extend({parser:new Parser,screen:"",print:"",styles:[],rules:[],pseudoClasses:appVersion<7?"first\\-child":"",dynamicPseudoClasses:{toString:function(){var strings=[];for(var pseudoClass in this)strings.push(pseudoClass);return strings.join("|");}},init:function(){var NONE="^\x01$";var CLASS="\\[class=?[^\\]]*\\]";var pseudoClasses=[];if(this.pseudoClasses)pseudoClasses.push(this.pseudoClasses);var dynamicPseudoClasses=this.dynamicPseudoClasses.toString();if(dynamicPseudoClasses)pseudoClasses.push(dynamicPseudoClasses);pseudoClasses=pseudoClasses.join("|");var unknown=appVersion<7?["[>+~[(]|([:.])\\w+\\1"]:[CLASS];if(pseudoClasses)unknown.push(":("+pseudoClasses+")");this.UNKNOWN=new RegExp(unknown.join("|")||NONE,"i");var complex=appVersion<7?["\\[[^\\]]+\\]|[^\\s(\\[]+\\s*[+~]"]:[CLASS];var complexRule=complex.concat();if(pseudoClasses)complexRule.push(":("+pseudoClasses+")");Rule.COMPLEX=new RegExp(complexRule.join("|")||NONE,"ig");if(this.pseudoClasses)complex.push(":("+this.pseudoClasses+")");DynamicRule.COMPLEX=new RegExp(complex.join("|")||NONE,"i");DynamicRule.MATCH=new RegExp(dynamicPseudoClasses?"(.*):("+dynamicPseudoClasses+")(.*)":NONE,"i");this.createStyleSheet();this.refresh();},addEventHandler:function(){addEventHandler.apply(null,arguments);},addFix:function(expression,replacement){this.parser.add(expression,replacement);},addRecalc:function(propertyName,test,handler,replacement){test=new RegExp("([{;\\s])"+propertyName+"\\s*:\\s*"+test+"[^;}]*");var id=this.recalcs.length;if(replacement)replacement=propertyName+":"+replacement;this.addFix(test,function(match,$1){return(replacement?$1+replacement:match)+";ie7-"+match.slice(1)+";ie7_recalc"+id+":1";});this.recalcs.push(arguments);return id;},apply:function(){this.getInlineStyles();new StyleSheet("screen");this.trash();},createStyleSheet:function(){this.styleSheet=document.createStyleSheet();this.styleSheet.ie7=true;this.styleSheet.owningElement.ie7=true;this.styleSheet.cssText=HEADER;},getInlineStyles:function(){var styleSheets=document.getElementsByTagName("style"),styleSheet;for(var i=styleSheets.length-1;(styleSheet=styleSheets[i]);i--){if(!styleSheet.disabled&&!styleSheet.ie7){this.styles.push(styleSheet.innerHTML);}}},getText:function(styleSheet,path){try{var cssText=styleSheet.cssText;}catch(e){cssText="";} -if(httpRequest)cssText=loadFile(styleSheet.href,path)||cssText;return cssText;},recalc:function(){this.screen.recalc();var RECALCS=/ie7_recalc\d+/g;var start=HEADER.match(/[{,]/g).length;var stop=start+(this.screen.cssText.match(/\{/g)||"").length;var rules=this.styleSheet.rules,rule;var calcs,calc,elements,element,i,j,k,id;for(i=start;i0&&Rule.CLASS.test(simple)){simple=simple.replace(Rule.CLASS,"");classes--;} -while(tags>0&&Rule.TAG.test(simple)){simple=simple.replace(Rule.TAG,"$1*");tags--;} -simple+="."+this.className;classes=Math.min(classes,2);tags=Math.min(tags,2);var score=-10*classes-tags;if(score>0){simple=simple+","+Rule.MAP[score]+" "+simple;} -return simple;},remove:function(element){element.className=element.className.replace(this.MATCH,"$1");},toString:function(){return format("%1 {%2}",this.selectorText,this.cssText);}},{CHILD:/>/g,CLASS:/\.[\w-]+/,CLASSES:/[.:\[]/g,MULTI:/(\.[\w-]+)+/g,PREFIX:"ie7_class",TAG:/^\w+|([\s>+~])\w+/,TAGS:/^\w|[\s>+~]\w/g,MAP:{1:"html",2:"html body",10:".ie7_html",11:"html.ie7_html",12:"html.ie7_html body",20:".ie7_html .ie7_body",21:"html.ie7_html .ie7_body",22:"html.ie7_html body.ie7_body"}});var DynamicRule=Rule.extend({constructor:function(selector,attach,dynamicPseudoClass,target,cssText){this.attach=attach||"*";this.dynamicPseudoClass=IE7.CSS.dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.base(selector,cssText);},recalc:function(){var attaches=cssQuery(this.attach),attach;for(var i=0;attach=attaches[i];i++){var target=this.target?cssQuery(this.target,attach):[attach];if(target.length)this.dynamicPseudoClass.apply(attach,target,this);}}});var DynamicPseudoClass=Base.extend({constructor:function(name,apply){this.name=name;this.apply=apply;this.instances={};IE7.CSS.dynamicPseudoClasses[name]=this;},register:function(instance){var _class=instance[2];instance.id=_class.id+instance[0].uniqueID;if(!this.instances[instance.id]){var target=instance[1],j;for(j=0;j*:"+(type=="marginTop"?"first":"last")+"-child",element,true);if(child&&child.currentStyle.styleFloat=="none"&&IE7.hasLayout(child)){collapseMargin(child,type);margin=_getMargin(element,element.currentStyle[type]);childMargin=_getMargin(child,child.currentStyle[type]);if(margin<0||childMargin<0){element.runtimeStyle[type]=margin+childMargin;}else{element.runtimeStyle[type]=Math.max(childMargin,margin);} -child.runtimeStyle[type]="0px";}}};function _getMargin(element,value){return value=="auto"?0:getPixelValue(element,value);};var UNIT=/^[.\d][\w%]*$/,AUTO=/^(auto|0cm)$/;var applyWidth,applyHeight;IE7.Layout.borderBox=function(element){applyWidth(element);applyHeight(element);};var fixWidth=function(HEIGHT){applyWidth=function(element){if(!PERCENT.test(element.currentStyle.width))fixWidth(element);collapseMargins(element);};function fixWidth(element,value){if(!element.runtimeStyle.fixedWidth){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;setOverrideStyle(element,"width",element.runtimeStyle.fixedWidth);}};function layoutWidth(element){if(!isFixed(element)){var layoutParent=element.offsetParent;while(layoutParent&&!IE7.hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;} -return(layoutParent||viewport).clientWidth;};function getPixelWidth(element,value){if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutWidth(element));return getPixelValue(element,value);};var getFixedWidth=function(element,value){var borderBox=element.currentStyle["box-sizing"]=="border-box";var adjustment=0;if(quirksMode&&!borderBox) -adjustment+=getBorderWidth(element)+getWidth(element,"padding");else if(!quirksMode&&borderBox) -adjustment-=getBorderWidth(element)+getWidth(element,"padding");return getPixelWidth(element,value)+adjustment;};function getBorderWidth(element){return element.offsetWidth-element.clientWidth;};function getWidth(element,type){return getPixelWidth(element,element.currentStyle[type+"Left"])+getPixelWidth(element,element.currentStyle[type+"Right"]);};HEADER+="*{minWidth:none;maxWidth:none;min-width:none;max-width:none}";layout.minWidth=function(element){if(element.currentStyle["min-width"]!=null){element.style.minWidth=element.currentStyle["min-width"];} -if(register(arguments.callee,element,element.currentStyle.minWidth!="none")){layout.boxSizing(element);fixWidth(element);resizeWidth(element);}};eval("IE7.Layout.maxWidth="+String(layout.minWidth).replace(/min/g,"max"));function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.minWidth!="none"&&width<=getFixedWidth(element,element.currentStyle.minWidth)){element.runtimeStyle.width=element.currentStyle.minWidth;}else if(element.currentStyle.maxWidth!="none"&&width>=getFixedWidth(element,element.currentStyle.maxWidth)){element.runtimeStyle.width=element.currentStyle.maxWidth;}else{element.runtimeStyle.width=element.runtimeStyle.fixedWidth;}};function fixRight(element){if(register(fixRight,element,/^(fixed|absolute)$/.test(element.currentStyle.position)&&getDefinedStyle(element,"left")!="auto"&&getDefinedStyle(element,"right")!="auto"&&AUTO.test(getDefinedStyle(element,"width")))){resizeRight(element);IE7.Layout.boxSizing(element);}};IE7.Layout.fixRight=fixRight;function resizeRight(element){var left=getPixelWidth(element,element.runtimeStyle._left||element.currentStyle.left);var width=layoutWidth(element)-getPixelWidth(element,element.currentStyle.right)-left-getWidth(element,"margin");if(parseInt(element.runtimeStyle.width)==width)return;element.runtimeStyle.width="";if(isFixed(element)||HEIGHT||element.offsetWidth=5.5&&appVersion<7){IE7.CSS.addFix(/background(-image)?\s*:\s*([^};]*)?url\(([^\)]+)\)([^;}]*)?/,function(match,$1,$2,url,$4){url=getString(url);return PNG.test(url)?"filter:"+format(PNG_FILTER,url,"crop")+";zoom:1;background"+($1||"")+":"+($2||"")+"none"+($4||""):match;});IE7.HTML.addRecalc("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImage(element);addEventHandler(element,"onpropertychange",function(){if(!printing&&event.propertyName=="src"&&element.src.indexOf(BLANK_GIF)==-1)fixImage(element);});});var printing=false;addEventHandler(window,"onbeforeprint",function(){printing=true;for(var i=0;i=7)return;IE7.CSS.addRecalc("position","fixed",_positionFixed,"absolute");IE7.CSS.addRecalc("background(-attachment)?","[^};]*fixed",_backgroundFixed);var $viewport=quirksMode?"body":"documentElement";function _fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundRepeat="no-repeat";body.runtimeStyle.backgroundImage="url("+BLANK_GIF+")";} -body.runtimeStyle.backgroundAttachment="fixed";} -_fixBackground=Undefined;};var _tmp=createTempElement("img");function _isFixed(element){return element?isFixed(element)||_isFixed(element.parentElement):false;};function _setExpression(element,propertyName,expression){setTimeout("document.all."+element.uniqueID+".runtimeStyle.setExpression('"+propertyName+"','"+expression+"')",0);};function _backgroundFixed(element){if(register(_backgroundFixed,element,element.currentStyle.backgroundAttachment=="fixed"&&!element.contains(body))){_fixBackground();bgLeft(element);bgTop(element);_backgroundPosition(element);}};function _backgroundPosition(element){_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=element.canHaveChildren?element:element.parentElement;parentElement.appendChild(_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(_tmp);};function bgLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!_isFixed(element)){_setExpression(element,"backgroundPositionX","(parseInt(runtimeStyle.offsetLeft)+document."+$viewport+".scrollLeft)||0");}};eval(rotate(bgLeft));function setOffsetLeft(element){var propertyName=_isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)- -element.getBoundingClientRect().left-element.clientLeft+2;};eval(rotate(setOffsetLeft));function getOffsetLeft(element,position){switch(position){case"left":case"top":return 0;case"right":case"bottom":return viewport.clientWidth-_tmp.offsetWidth;case"center":return(viewport.clientWidth-_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-_tmp.offsetWidth)*parseFloat(position)/100);} -_tmp.style.left=position;return _tmp.offsetLeft;}};eval(rotate(getOffsetLeft));function _positionFixed(element){if(register(_positionFixed,element,isFixed(element))){setOverrideStyle(element,"position","absolute");setOverrideStyle(element,"left",element.currentStyle.left);setOverrideStyle(element,"top",element.currentStyle.top);_fixBackground();IE7.Layout.fixRight(element);_foregroundPosition(element);}};function _foregroundPosition(element,recalc){positionTop(element,recalc);positionLeft(element,recalc,true);if(!element.runtimeStyle.autoLeft&&element.currentStyle.marginLeft=="auto"&&element.currentStyle.right!="auto"){var left=viewport.clientWidth-getPixelWidth(element,element.currentStyle.right)- -getPixelWidth(element,element.runtimeStyle._left)-element.clientWidth;if(element.currentStyle.marginRight=="auto")left=parseInt(left/2);if(_isFixed(element.offsetParent))element.runtimeStyle.pixelLeft+=left;else element.runtimeStyle.shiftLeft=left;} -clipWidth(element);clipHeight(element);};function clipWidth(element){var fixWidth=element.runtimeStyle.fixWidth;element.runtimeStyle.borderRightWidth="";element.runtimeStyle.width=fixWidth?getPixelWidth(element,fixWidth):"";if(element.currentStyle.width!="auto"){var rect=element.getBoundingClientRect();var width=element.offsetWidth-viewport.clientWidth+rect.left-2;if(width>=0){element.runtimeStyle.borderRightWidth="0px";width=Math.max(getPixelValue(element,element.currentStyle.width)-width,0);setOverrideStyle(element,"width",width);return width;}}};eval(rotate(clipWidth));function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width)){element.runtimeStyle.fixWidth=element.currentStyle.width;} -if(element.runtimeStyle.fixWidth){element.runtimeStyle.width=getPixelWidth(element,element.runtimeStyle.fixWidth);} -element.runtimeStyle.shiftLeft=0;element.runtimeStyle._left=element.currentStyle.left;element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto";element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;if(!recalc&&!_isFixed(element.offsetParent)){_setExpression(element,"pixelLeft","runtimeStyle.screenLeft+runtimeStyle.shiftLeft+document."+$viewport+".scrollLeft");}};eval(rotate(positionLeft));function getScreenLeft(element){var screenLeft=element.offsetLeft,nested=1;if(element.runtimeStyle.autoLeft){screenLeft=viewport.clientWidth-element.offsetWidth-getPixelWidth(element,element.currentStyle.right);} -if(element.currentStyle.marginLeft!="auto"){screenLeft-=getPixelWidth(element,element.currentStyle.marginLeft);} -while(element=element.offsetParent){if(element.currentStyle.position!="static")nested=-1;screenLeft+=element.offsetLeft*nested;} -return screenLeft;};eval(rotate(getScreenLeft));function getPixelWidth(element,value){return PERCENT.test(value)?parseInt(parseFloat(value)/100*viewport.clientWidth):getPixelValue(element,value);};eval(rotate(getPixelWidth));function _resize(){var elements=_backgroundFixed.elements;for(var i in elements)_backgroundPosition(elements[i]);elements=_positionFixed.elements;for(i in elements){_foregroundPosition(elements[i],true);_foregroundPosition(elements[i],true);} -_timer=0;};var _timer;addResize(function(){if(!_timer)_timer=setTimeout(_resize,0);});};var WRAPPER_STYLE={backgroundColor:"transparent",backgroundImage:"none",backgroundPositionX:null,backgroundPositionY:null,backgroundRepeat:null,borderTopWidth:0,borderRightWidth:0,borderBottomWidth:0,borderLeftStyle:"none",borderTopStyle:"none",borderRightStyle:"none",borderBottomStyle:"none",borderLeftWidth:0,height:null,marginTop:0,marginBottom:0,marginRight:0,marginLeft:0,width:"100%"};IE7.CSS.addRecalc("overflow","visible",function(element){if(element.parentNode.ie7_wrapped)return;if(IE7.Layout&&element.currentStyle["max-height"]!="auto"){IE7.Layout.maxHeight(element);} -if(element.currentStyle.marginLeft=="auto")element.style.marginLeft=0;if(element.currentStyle.marginRight=="auto")element.style.marginRight=0;var wrapper=document.createElement(ANON);wrapper.ie7_wrapped=element;for(var propertyName in WRAPPER_STYLE){wrapper.style[propertyName]=element.currentStyle[propertyName];if(WRAPPER_STYLE[propertyName]!=null){element.runtimeStyle[propertyName]=WRAPPER_STYLE[propertyName];}} -wrapper.style.display="block";wrapper.style.position="relative";element.runtimeStyle.position="absolute";element.parentNode.insertBefore(wrapper,element);wrapper.appendChild(element);});function ie7Quirks(){var FONT_SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i=%2",a,b,position,last,"&&","%","==");if(negate)query="!("+query+")";return query;};_PSEUDO_CLASSES={"link":"e%1.currentStyle['ie7-link']=='link'","visited":"e%1.currentStyle['ie7-link']=='visited'","checked":"e%1.checked","contains":"e%1.innerText.indexOf('%2')!=-1","disabled":"e%1.isDisabled","empty":"IE7._isEmpty(e%1)","enabled":"e%1.disabled===false","first-child":"!IE7._getPreviousElementSibling(e%1)","lang":"IE7._isLang(e%1,'%2')","last-child":"!IE7._getNextElementSibling(e%1)","only-child":"!IE7._getPreviousElementSibling(e%1)&&!IE7._getNextElementSibling(e%1)","target":"e%1.id==location.hash.slice(1)","indeterminate":"e%1.indeterminate"};IE7._register=function(element){if(element.rows){element.ie7_length=element.rows.length;element.ie7_lookup="rowIndex";}else if(element.cells){element.ie7_length=element.cells.length;element.ie7_lookup="cellIndex";}else if(element.ie7_indexed!=IE7._indexed){var index=0;var child=element.firstChild;while(child){if(child.nodeType==1&&child.nodeName!="!"){child.ie7_index=++index;} -child=child.nextSibling;} -element.ie7_length=index;element.ie7_lookup="ie7_index";} -element.ie7_indexed=IE7._indexed;return element;};var keys=cssParser[_KEYS];var pseudoClass=keys[keys.length-1];keys.length--;cssParser.merge({":not\\((\\*|[\\w-]+)?([^)]*)\\)":function(match,tagName,filters){var replacement=(tagName&&tagName!="*")?format("if(e%1.nodeName=='%2'){",_index,tagName.toUpperCase()):"";replacement+=cssParser.exec(filters);return"if(!"+replacement.slice(2,-1).replace(/\)\{if\(/g,"&&")+"){";},":nth(-last)?-child\\(([^)]+)\\)":function(match,last,args){_wild=false;last=format("e%1.parentNode.ie7_length",_index);var replacement="if(p%1!==e%1.parentNode)p%1=IE7._register(e%1.parentNode);";replacement+="var i=e%1[p%1.ie7_lookup];if(p%1.ie7_lookup!='ie7_index')i++;if(";return format(replacement,_index)+_nthChild(match,args,"i",last)+"){";}});keys.push(pseudoClass);var BRACKETS="\\([^)]*\\)";if(IE7.CSS.pseudoClasses)IE7.CSS.pseudoClasses+="|";IE7.CSS.pseudoClasses+="before|after|last\\-child|only\\-child|empty|root|"+"not|nth\\-child|nth\\-last\\-child|contains|lang".split("|").join(BRACKETS+"|")+BRACKETS;encoder.add(/::/,":");var Focus=new DynamicPseudoClass("focus",function(element){var instance=arguments;IE7.CSS.addEventHandler(element,"onfocus",function(){Focus.unregister(instance);Focus.register(instance);});IE7.CSS.addEventHandler(element,"onblur",function(){Focus.unregister(instance);});if(element==document.activeElement){Focus.register(instance)}});var Active=new DynamicPseudoClass("active",function(element){var instance=arguments;IE7.CSS.addEventHandler(element,"onmousedown",function(){Active.register(instance);});});addEventHandler(document,"onmouseup",function(){var instances=Active.instances;for(var i in instances)Active.unregister(instances[i]);});var Checked=new DynamicPseudoClass("checked",function(element){if(typeof element.checked!="boolean")return;var instance=arguments;IE7.CSS.addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="checked"){if(element.checked)Checked.register(instance);else Checked.unregister(instance);}});if(element.checked)Checked.register(instance);});var Enabled=new DynamicPseudoClass("enabled",function(element){if(typeof element.disabled!="boolean")return;var instance=arguments;IE7.CSS.addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="disabled"){if(!element.isDisabled)Enabled.register(instance);else Enabled.unregister(instance);}});if(!element.isDisabled)Enabled.register(instance);});var Disabled=new DynamicPseudoClass("disabled",function(element){if(typeof element.disabled!="boolean")return;var instance=arguments;IE7.CSS.addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="disabled"){if(element.isDisabled)Disabled.register(instance);else Disabled.unregister(instance);}});if(element.isDisabled)Disabled.register(instance);});var Indeterminate=new DynamicPseudoClass("indeterminate",function(element){if(typeof element.indeterminate!="boolean")return;var instance=arguments;IE7.CSS.addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="indeterminate"){if(element.indeterminate)Indeterminate.register(instance);else Indeterminate.unregister(instance);}});IE7.CSS.addEventHandler(element,"onclick",function(){Indeterminate.unregister(instance);});});var Target=new DynamicPseudoClass("target",function(element){var instance=arguments;if(!element.tabIndex)element.tabIndex=0;IE7.CSS.addEventHandler(document,"onpropertychange",function(){if(event.propertyName=="activeElement"){if(element.id&&element.id==location.hash.slice(1))Target.register(instance);else Target.unregister(instance);}});if(element.id&&element.id==location.hash.slice(1))Target.register(instance);});var ATTR=/^attr/;var URL=/^url\s*\(\s*([^)]*)\)$/;var POSITION_MAP={before0:"beforeBegin",before1:"afterBegin",after0:"afterEnd",after1:"beforeEnd"};var PseudoElement=IE7.PseudoElement=Rule.extend({constructor:function(selector,position,cssText){this.position=position;var content=cssText.match(PseudoElement.CONTENT),match,entity;if(content){content=content[1];match=content.split(/\s+/);for(var i=0;(entity=match[i]);i++){match[i]=ATTR.test(entity)?{attr:entity.slice(5,-1)}:(entity.charAt(0)=="'")?getString(entity):decode(entity);} -content=match;} -this.content=content;this.base(selector,decode(cssText));},init:function(){this.match=cssQuery(this.selector);for(var i=0;i%4",MATCH:/(.*):(before|after).*/,count:0});var UNSUCCESSFUL=/^(submit|reset|button)$/;IE7.HTML.addRecalc("button,input",function(button){if(button.tagName=="BUTTON"){var match=button.outerHTML.match(/ value="([^"]*)"/i);button.runtimeStyle.value=(match)?match[1]:"";} -if(button.type=="submit"){addEventHandler(button,"onclick",function(){button.runtimeStyle.clicked=true;setTimeout("document.all."+button.uniqueID+".runtimeStyle.clicked=false",1);});}});IE7.HTML.addRecalc("form",function(form){addEventHandler(form,"onsubmit",function(){for(var element,i=0;element=form[i];i++){if(UNSUCCESSFUL.test(element.type)&&!element.disabled&&!element.runtimeStyle.clicked){element.disabled=true;setTimeout("document.all."+element.uniqueID+".disabled=false",1);}else if(element.tagName=="BUTTON"&&element.type=="submit"){setTimeout("document.all."+element.uniqueID+".value='"+ -element.value+"'",1);element.value=element.runtimeStyle.value;}}});});IE7.HTML.addRecalc("img",function(img){if(img.alt&&!img.title)img.title="";});IE7.CSS.addRecalc("border-spacing",NUMERIC,function(element){if(element.currentStyle.borderCollapse!="collapse"){element.cellSpacing=getPixelValue(element,element.currentStyle["border-spacing"]);}});IE7.CSS.addRecalc("box-sizing","content-box",IE7.Layout.boxSizing);IE7.CSS.addRecalc("box-sizing","border-box",IE7.Layout.borderBox);IE7.CSS.addFix(/opacity\s*:\s*([\d.]+)/,function(match,value){return"zoom:1;filter:Alpha(opacity="+((value*100)||1)+")";});var IMAGE=/^image/i;IE7.HTML.addRecalc("object",function(element){if(IMAGE.test(element.type)){element.body.style.cssText="margin:0;padding:0;border:none;overflow:hidden";return element;}});IE7.loaded=true;(function(){try{documentElement.doScroll("left");}catch(e){setTimeout(arguments.callee,1);return;} -try{eval(script.innerHTML);}catch(e){} -PNG=new RegExp(rescape(typeof IE7_PNG_SUFFIX=="string"?IE7_PNG_SUFFIX:"-trans.png")+"$","i");body=document.body;viewport=quirksMode?body:documentElement;body.className+=" ie7_body";documentElement.className+=" ie7_html";if(quirksMode)ie7Quirks();IE7.CSS.init();IE7.HTML.init();IE7.HTML.apply();IE7.CSS.apply();IE7.recalc();})();})(); \ No newline at end of file diff --git a/v2/dotclear/admin/js/ie7/blank.gif b/v2/dotclear/admin/js/ie7/blank.gif deleted file mode 100644 index a4fe2e6297c7a013637b0e15f842dca1ef3128c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48 wcmZ?wbhEHbWMp7un83&Y1poj4SNzEWWHK`7fcPL81|}vSMh3-y@(c{t0P2MZQ2+n{ diff --git a/v2/dotclear/admin/js/ie7/ie7-recalc.js b/v2/dotclear/admin/js/ie7/ie7-recalc.js deleted file mode 100644 index 3acd0cb..0000000 --- a/v2/dotclear/admin/js/ie7/ie7-recalc.js +++ /dev/null @@ -1,5 +0,0 @@ - -(function(){if(!IE7.loaded)return;CLASSES=/\sie7_class\d+/g;IE7.CSS.extend({elements:{},handlers:[],reset:function(){this.removeEventHandlers();var elements=this.elements;for(var i in elements)elements[i].runtimeStyle.cssText="";this.elements={};var elements=IE7.Rule.elements;for(var i in elements){with(elements[i])className=className.replace(CLASSES,"");} -IE7.Rule.elements={};},reload:function(){this.rules=[];this.getInlineStyles();this.screen.load();if(this.print)this.print.load();this.refresh();this.trash();},addRecalc:function(propertyName,test,handler,replacement){this.base(propertyName,test,function(element){handler(element);IE7.CSS.elements[element.uniqueID]=element;},replacement);},recalc:function(){this.reset();this.base();},addEventHandler:function(element,type,handler){element.attachEvent(type,handler);this.handlers.push(arguments);},removeEventHandlers:function(){var handler;while(handler=this.handlers.pop()){handler[0].detachEvent(handler[1],handler[2]);}},getInlineStyles:function(){var styleSheets=document.getElementsByTagName("style"),styleSheet;for(var i=styleSheets.length-1;(styleSheet=styleSheets[i]);i--){if(!styleSheet.disabled&&!styleSheet.ie7){var cssText=styleSheet.cssText||styleSheet.innerHTML;this.styles.push(cssText);styleSheet.cssText=cssText;}}},trash:function(){var styleSheets=document.styleSheets,styleSheet,i;for(i=0;i=6)IE7.CSS.addRecalc("float","(left|right)",function(element){IE7.Layout.boxSizing(element.parentElement);element.style.display="inline";});IE7.CSS.addRecalc("position","absolute|fixed",function(element){if(element.offsetParent&&element.offsetParent.currentStyle.position=="relative") -IE7.Layout.boxSizing(element.offsetParent);});} \ No newline at end of file diff --git a/v2/dotclear/admin/js/jquery/jquery-ui-1.8.12.custom.min.js b/v2/dotclear/admin/js/jquery/jquery-ui-1.8.12.custom.min.js deleted file mode 100644 index b99518d..0000000 --- a/v2/dotclear/admin/js/jquery/jquery-ui-1.8.12.custom.min.js +++ /dev/null @@ -1,8 +0,0 @@ - -(function(c,j){function k(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.12",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,l,m){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(l)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(m)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){var b=a.nodeName.toLowerCase(),d=c.attr(a,"tabindex");if("area"===b){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&k(a)}return(/input|select|textarea|button|object/.test(b)?!a.disabled:"a"==b?a.href||!isNaN(d):!isNaN(d))&&k(a)},tabbable:function(a){var b=c.attr(a,"tabindex");return(isNaN(b)||b>=0)&&c(a).is(":focusable")}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;a.target==this._mouseDownEvent.target&&b.data(a.target,this.widgetName+".preventClickEvent",true);this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);;(function(d){d.widget("ui.sortable",d.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:false,connectWith:false,containment:false,cursor:"auto",cursorAt:false,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){this.containerCache={};this.element.addClass("ui-sortable");this.refresh();this.floating=this.items.length?/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var a=this.items.length-1;a>=0;a--)this.items[a].item.removeData("sortable-item");return this},_setOption:function(a,b){if(a==="disabled"){this.options[a]=b;this.widget()[b?"addClass":"removeClass"]("ui-sortable-disabled")}else d.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(a,b){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(a);var c=null,e=this;d(a.target).parents().each(function(){if(d.data(this,"sortable-item")==e){c=d(this);return false}});if(d.data(a.target,"sortable-item")==e)c=d(a.target);if(!c)return false;if(this.options.handle&&!b){var f=false;d(this.options.handle,c).find("*").andSelf().each(function(){if(this==a.target)f=true});if(!f)return false}this.currentItem=c;this._removeCurrentsFromItems();return true},_mouseStart:function(a,b,c){b=this.options;var e=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(a);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left- -this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();b.containment&&this._setContainment();if(b.cursor){if(d("body").css("cursor"))this._storedCursor=d("body").css("cursor");d("body").css("cursor",b.cursor)}if(b.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",b.opacity)}if(b.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",b.zIndex)}if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",a,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!c)for(c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("activate",a,e._uiHash(this));if(d.ui.ddmanager)d.ui.ddmanager.current=this;d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(a);return true},_mouseDrag:function(a){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var b=this.options,c=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-a.pageY=0;b--){c=this.items[b];var e=c.item[0],f=this._intersectsWithPointer(c);if(f)if(e!=this.currentItem[0]&&this.placeholder[f==1?"next":"prev"]()[0]!=e&&!d.ui.contains(this.placeholder[0],e)&&(this.options.type=="semi-dynamic"?!d.ui.contains(this.element[0],e):true)){this.direction=f==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(c))this._rearrange(a,c);else break;this._trigger("change",a,this._uiHash());break}}this._contactContainers(a);d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);this._trigger("sort",a,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(a,b){if(a){d.ui.ddmanager&&!this.options.dropBehaviour&&d.ui.ddmanager.drop(this,a);if(this.options.revert){var c=this;b=c.placeholder.offset();c.reverting=true;d(this.helper).animate({left:b.left-this.offset.parent.left-c.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:b.top-this.offset.parent.top-c.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){c._clear(a)})}else this._clear(a,b);return false}},cancel:function(){var a=this;if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var b=this.containers.length-1;b>=0;b--){this.containers[b]._trigger("deactivate",null,a._uiHash(this));if(this.containers[b].containerCache.over){this.containers[b]._trigger("out",null,a._uiHash(this));this.containers[b].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();d.extend(this,{helper:null,dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?d(this.domPosition.prev).after(this.currentItem):d(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};d(b).each(function(){var e=(d(a.item||this).attr(a.attribute||"id")||"").match(a.expression||/(.+)[-=_](.+)/);if(e)c.push((a.key||e[1]+"[]")+"="+(a.key&&a.expression?e[1]:e[2]))});!c.length&&a.key&&c.push(a.key+"=");return c.join("&")},toArray:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};b.each(function(){c.push(d(a.item||this).attr(a.attribute||"id")||"")});return c},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,e=this.positionAbs.top,f=e+this.helperProportions.height,g=a.left,h=g+a.width,i=a.top,k=i+a.height,j=this.offset.click.top,l=this.offset.click.left;j=e+j>i&&e+jg&&b+la[this.floating?"width":"height"]?j:g0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a);this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(a){var b=[],c=[],e=this._connectWith();if(e&&a)for(a=e.length-1;a>=0;a--)for(var f=d(e[a]),g=f.length-1;g>=0;g--){var h=d.data(f[g],"sortable");if(h&&h!=this&&!h.options.disabled)c.push([d.isFunction(h.options.items)?h.options.items.call(h.element):d(h.options.items,h.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),h])}c.push([d.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):d(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]);for(a=c.length-1;a>=0;a--)c[a][0].each(function(){b.push(this)});return d(b)},_removeCurrentsFromItems:function(){for(var a=this.currentItem.find(":data(sortable-item)"),b=0;b=0;f--)for(var g=d(e[f]),h=g.length-1;h>=0;h--){var i=d.data(g[h],"sortable");if(i&&i!=this&&!i.options.disabled){c.push([d.isFunction(i.options.items)?i.options.items.call(i.element[0],a,{item:this.currentItem}):d(i.options.items,i.element),i]);this.containers.push(i)}}for(f=c.length-1;f>=0;f--){a=c[f][1];e=c[f][0];h=0;for(g=e.length;h=0;b--){var c=this.items[b];if(!(c.instance!=this.currentContainer&&this.currentContainer&&c.item[0]!=this.currentItem[0])){var e=this.options.toleranceElement?d(this.options.toleranceElement,c.item):c.item;if(!a){c.width=e.outerWidth();c.height=e.outerHeight()}e=e.offset();c.left=e.left;c.top=e.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(b=this.containers.length-1;b>=0;b--){e=this.containers[b].element.offset();this.containers[b].containerCache.left=e.left;this.containers[b].containerCache.top=e.top;this.containers[b].containerCache.width=this.containers[b].element.outerWidth();this.containers[b].containerCache.height=this.containers[b].element.outerHeight()}return this},_createPlaceholder:function(a){var b=a||this,c=b.options;if(!c.placeholder||c.placeholder.constructor==String){var e=c.placeholder;c.placeholder={element:function(){var f=d(document.createElement(b.currentItem[0].nodeName)).addClass(e||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!e)f.style.visibility="hidden";return f},update:function(f,g){if(!(e&&!c.forcePlaceholderSize)){g.height()||g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10));g.width()||g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||0,10))}}}}b.placeholder=d(c.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);c.placeholder.update(b,b.placeholder)},_contactContainers:function(a){for(var b=null,c=null,e=this.containers.length-1;e>=0;e--)if(!d.ui.contains(this.currentItem[0],this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(!(b&&d.ui.contains(this.containers[e].element[0],b.element[0]))){b=this.containers[e];c=e}}else if(this.containers[e].containerCache.over){this.containers[e]._trigger("out",a,this._uiHash(this));this.containers[e].containerCache.over=0}if(b)if(this.containers.length===1){this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}else if(this.currentContainer!=this.containers[c]){b=1E4;e=null;for(var f=this.positionAbs[this.containers[c].floating?"left":"top"],g=this.items.length-1;g>=0;g--)if(d.ui.contains(this.containers[c].element[0],this.items[g].item[0])){var h=this.items[g][this.containers[c].floating?"left":"top"];if(Math.abs(h- -f)this.containment[2])f=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g- -this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.topthis.containment[3])?g:!(g-this.offset.click.topthis.containment[2])?f:!(f-this.offset.click.left=0;e--)if(d.ui.contains(this.containers[e].element[0],this.currentItem[0])&&!b){c.push(function(f){return function(g){f._trigger("receive",g,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(g){f._trigger("update",g,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){b||c.push(function(f){return function(g){f._trigger("deactivate",g,this._uiHash(this))}}.call(this,this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(g){f._trigger("out",g,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over=0}}this._storedCursor&&d("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!b){this._trigger("beforeStop",a,this._uiHash());for(e=0;e li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var a=this,b=a.options;a.running=0;a.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix");a.headers=a.element.find(b.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){b.disabled||c(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){b.disabled||c(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){b.disabled||c(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){b.disabled||c(this).removeClass("ui-state-focus")});a.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");if(b.navigation){var d=a.element.find("a").filter(b.navigationFilter).eq(0);if(d.length){var h=d.closest(".ui-accordion-header");a.active=h.length?h:d.closest(".ui-accordion-content").prev()}}a.active=a._findActive(a.active||b.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");a.active.next().addClass("ui-accordion-content-active");a._createIcons();a.resize();a.element.attr("role","tablist");a.headers.attr("role","tab").bind("keydown.accordion",function(f){return a._keydown(f)}).next().attr("role","tabpanel");a.headers.not(a.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide();a.active.length?a.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):a.headers.eq(0).attr("tabIndex",0);c.browser.safari||a.headers.find("a").attr("tabIndex",-1);b.event&&a.headers.bind(b.event.split(" ").join(".accordion ")+".accordion",function(f){a._clickHandler.call(a,f,this);f.preventDefault()})},_createIcons:function(){var a=this.options;if(a.icons){c("").addClass("ui-icon "+a.icons.header).prependTo(this.headers);this.active.children(".ui-icon").toggleClass(a.icons.header).toggleClass(a.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var a=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex");this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(a.autoHeight||a.fillHeight)b.css("height","");return c.Widget.prototype.destroy.call(this)},_setOption:function(a,b){c.Widget.prototype._setOption.apply(this,arguments);a=="active"&&this.activate(b);if(a=="icons"){this._destroyIcons();b&&this._createIcons()}if(a=="disabled")this.headers.add(this.headers.next())[b?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(a){if(!(this.options.disabled||a.altKey||a.ctrlKey)){var b=c.ui.keyCode,d=this.headers.length,h=this.headers.index(a.target),f=false;switch(a.keyCode){case b.RIGHT:case b.DOWN:f=this.headers[(h+1)%d];break;case b.LEFT:case b.UP:f=this.headers[(h-1+d)%d];break;case b.SPACE:case b.ENTER:this._clickHandler({target:a.target},a.target);a.preventDefault()}if(f){c(a.target).attr("tabIndex",-1);c(f).attr("tabIndex",0);f.focus();return false}return true}},resize:function(){var a=this.options,b;if(a.fillSpace){if(c.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}b=this.element.parent().height();c.browser.msie&&this.element.parent().css("overflow",d);this.headers.each(function(){b-=c(this).outerHeight(true)});this.headers.next().each(function(){c(this).height(Math.max(0,b-c(this).innerHeight()+ -c(this).height()))}).css("overflow","auto")}else if(a.autoHeight){b=0;this.headers.next().each(function(){b=Math.max(b,c(this).height("").height())}).height(b)}return this},activate:function(a){this.options.active=a;a=this._findActive(a)[0];this._clickHandler({target:a},a);return this},_findActive:function(a){return a?typeof a==="number"?this.headers.filter(":eq("+a+")"):this.headers.not(this.headers.not(a)):a===false?c([]):this.headers.filter(":eq(0)")},_clickHandler:function(a,b){var d=this.options;if(!d.disabled)if(a.target){a=c(a.currentTarget||b);b=a[0]===this.active[0];d.active=d.collapsible&&b?false:this.headers.index(a);if(!(this.running||!d.collapsible&&b)){var h=this.active;j=a.next();g=this.active.next();e={options:d,newHeader:b&&d.collapsible?c([]):a,oldHeader:this.active,newContent:b&&d.collapsible?c([]):j,oldContent:g};var f=this.headers.index(this.active[0])>this.headers.index(a[0]);this.active=b?c([]):a;this._toggle(j,g,e,b,f);h.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);if(!b){a.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected);a.next().addClass("ui-accordion-content-active")}}}else if(d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");var g=this.active.next(),e={options:d,newHeader:c([]),oldHeader:d.active,newContent:c([]),oldContent:g},j=this.active=c([]);this._toggle(j,g,e)}},_toggle:function(a,b,d,h,f){var g=this,e=g.options;g.toShow=a;g.toHide=b;g.data=d;var j=function(){if(g)return g._completed.apply(g,arguments)};g._trigger("changestart",null,g.data);g.running=b.size()===0?a.size():b.size();if(e.animated){d={};d=e.collapsible&&h?{toShow:c([]),toHide:b,complete:j,down:f,autoHeight:e.autoHeight||e.fillSpace}:{toShow:a,toHide:b,complete:j,down:f,autoHeight:e.autoHeight||e.fillSpace};if(!e.proxied)e.proxied=e.animated;if(!e.proxiedDuration)e.proxiedDuration=e.duration;e.animated=c.isFunction(e.proxied)?e.proxied(d):e.proxied;e.duration=c.isFunction(e.proxiedDuration)?e.proxiedDuration(d):e.proxiedDuration;h=c.ui.accordion.animations;var i=e.duration,k=e.animated;if(k&&!h[k]&&!c.easing[k])k="slide";h[k]||(h[k]=function(l){this.slide(l,{easing:k,duration:i||700})});h[k](d)}else{if(e.collapsible&&h)a.toggle();else{b.hide();a.show()}j(true)}b.prev().attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).blur();a.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");if(this.toHide.length)this.toHide.parent()[0].className=this.toHide.parent()[0].className;this._trigger("change",null,this.data)}}});c.extend(c.ui.accordion,{version:"1.8.12",animations:{slide:function(a,b){a=c.extend({easing:"swing",duration:300},a,b);if(a.toHide.size())if(a.toShow.size()){var d=a.toShow.css("overflow"),h=0,f={},g={},e;b=a.toShow;e=b[0].style.width;b.width(parseInt(b.parent().width(),10)-parseInt(b.css("paddingLeft"),10)-parseInt(b.css("paddingRight"),10)-(parseInt(b.css("borderLeftWidth"),10)||0)-(parseInt(b.css("borderRightWidth"),10)||0));c.each(["height","paddingTop","paddingBottom"],function(j,i){g[i]="hide";j=(""+c.css(a.toShow[0],i)).match(/^([\d+-.]+)(.*)$/);f[i]={value:j[1],unit:j[2]||"px"}});a.toShow.css({height:0,overflow:"hidden"}).show();a.toHide.filter(":hidden").each(a.complete).end().filter(":visible").animate(g,{step:function(j,i){if(i.prop=="height")h=i.end-i.start===0?0:(i.now-i.start)/(i.end-i.start);a.toShow[0].style[i.prop]=h*f[i.prop].value+f[i.prop].unit},duration:a.duration,easing:a.easing,complete:function(){a.autoHeight||a.toShow.css("height","");a.toShow.css({width:e,overflow:d});a.complete()}})}else a.toHide.animate({height:"hide",paddingTop:"hide",paddingBottom:"hide"},a);else a.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},a)},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1E3:200})}}})})(jQuery);; \ No newline at end of file diff --git a/v2/dotclear/admin/js/jquery/jquery.bgFade.js b/v2/dotclear/admin/js/jquery/jquery.bgFade.js deleted file mode 100644 index cdf201a..0000000 --- a/v2/dotclear/admin/js/jquery/jquery.bgFade.js +++ /dev/null @@ -1,7 +0,0 @@ - -jQuery.fn.backgroundFade=function(s,callback){var defaults={sColor:[255,0,0],eColor:[255,255,255],fColor:null,steps:200,intervals:5,powr:4},params=jQuery.extend(defaults,s);return this.each(function(){this.bgFade_sColor=jQuery.backgroundFade.parseHexColor(params.sColor);this.bgFade_eColor=jQuery.backgroundFade.parseHexColor(params.eColor);this.bgFade_fColor=params.fColor?params.fColor:jQuery(this).css('backgroundColor');this.bgFade_steps=params.steps;this.bgFade_intervals=params.intervals;this.bgFade_powr=params.powr;this.bgFade_fn=callback;jQuery.backgroundFade.doFade(this);});};jQuery.backgroundFade={parseHexColor:function(c){if(c.constructor==String&&c.substr(0,1)=='#'){return[parseInt(c.substr(1,2),16),parseInt(c.substr(3,2),16),parseInt(c.substr(5,2),16)];} -return c;},easeInOut:function(minValue,maxValue,totalSteps,actualStep,powr){var delta=maxValue-minValue;var stepp=minValue+(Math.pow(((1/totalSteps)*actualStep),powr)*delta);return Math.ceil(stepp);},doFade:function(e){if(e.bgFadeInt)window.clearInterval(e.bgFadeInt);var act_step=0;e.bgFadeInt=window.setInterval(function(){e.style.backgroundColor="rgb("+ -jQuery.backgroundFade.easeInOut(e.bgFade_sColor[0],e.bgFade_eColor[0],e.bgFade_steps,act_step,e.bgFade_powr)+","+ -jQuery.backgroundFade.easeInOut(e.bgFade_sColor[1],e.bgFade_eColor[1],e.bgFade_steps,act_step,e.bgFade_powr)+","+ -jQuery.backgroundFade.easeInOut(e.bgFade_sColor[2],e.bgFade_eColor[2],e.bgFade_steps,act_step,e.bgFade_powr)+")";act_step++;if(act_step>e.bgFade_steps){window.clearInterval(e.bgFadeInt);e.bgFade_sColor=undefined;e.bgFade_eColor=undefined;e.bgFade_fColor=undefined;e.bgFade_steps=undefined;e.bgFade_intervals=undefined;e.bgFade_powr=undefined;if(typeof(e.bgFade_fn)=='function'){e.bgFade_fn.call(e);} -e.style.backgroundColor=e.bgFade_fColor;}},e.bgFade_intervals);}}; \ No newline at end of file diff --git a/v2/dotclear/admin/js/jquery/jquery.biscuit.js b/v2/dotclear/admin/js/jquery/jquery.biscuit.js deleted file mode 100644 index 8b74194..0000000 --- a/v2/dotclear/admin/js/jquery/jquery.biscuit.js +++ /dev/null @@ -1,5 +0,0 @@ - -jQuery.cookie=function(name,value,options){if(typeof value!='undefined'){options=options||{};var expires='';if(options.expires&&(typeof options.expires=='number'||options.expires.toGMTString)){var date;if(typeof options.expires=='number'){date=new Date();date.setTime(date.getTime()+(options.expires*24*60*60*1000));}else{date=options.expires;} -expires='; expires='+date.toGMTString();} -var path=options.path?'; path='+options.path:'';var domain=options.domain?'; domain='+options.domain:'';var secure=options.secure?'; secure':'';document.cookie=[name,'=',encodeURIComponent(value),expires,path,domain,secure].join('');return null;}else{var cookieValue=null;if(document.cookie&&document.cookie!=''){var cookies=document.cookie.split(';');for(var i=0;i'+''+''+''+''+''+'';this.container=$('');if(this.params.target_element==null){this.container.css({display:'block',position:'absolute',left:$(document).scrollLeft()+'px',top:$(document).scrollTop()+'px',width:'30px',height:'30px',background:'#f00'});$('body').append(this.container);}else{$(this.params.target_element).append(this.container);this.container.css({display:'block',position:'absolute',top:0,left:0,zIndex:1});} -this.container[0].innerHTML=flash;this.movie=document.getElementById(this.params.movie_name);return this;},addFlashVar:function(fv,n,v){if(v!=null){fv.push(n+'='+encodeURIComponent(v));}},flashBind:function(){_this=this;var events={flashReady:function(){if(window[_this.params.movie_name]==undefined){window[_this.params.movie_name]=_this.movie;} -_this.flashBindEvent('flashReady',arguments);},fileDialogComplete:function(){_this.flashBindEvent('fileDialogComplete',arguments);},fileDialogStart:function(){_this.flashBindEvent('fileDialogStart',arguments);},fileQueued:function(file_object){_this.flashBindEvent('fileQueued',arguments);},fileQueueError:function(file_object,error_code,error_msg){_this.flashBindEvent('fileQueueError',arguments);},uploadStart:function(){_this.flashBindEvent('uploadStart',arguments);},uploadProgress:function(){_this.flashBindEvent('uploadProgress',arguments);},uploadError:function(){_this.flashBindEvent('uploadError',arguments);},uploadSuccess:function(){_this.flashBindEvent('uploadSuccess',arguments);},uploadComplete:function(){_this.flashBindEvent('uploadComplete',arguments);},debug:function(){_this.flashBindEvent('debug',arguments);}};window.SWFUpload.instances[this.params.movie_name]=events;window.SWFUpload.movieCount++;},flashEventQueue:[],flashBindEvent:function(evt,a){a=a||new Array();var _this=this;if($.isFunction(this.callbacks[evt])){this.flashEventQueue.push(function(){this.callbacks[evt].apply(this,a);});setTimeout(function(){_this.flashExecuteNextEvent();},0);}else if(this.callbacks[evt]!==null){throw'Event handler '+evt+' is unknown or is not a function';}},flashExecuteNextEvent:function(){var f=this.flashEventQueue?this.flashEventQueue.shift():null;if($.isFunction(f)){f.apply(this);}},destroy:function(){try{this.StopUpload();$(this.movie).remove();SWFUpload.instances[this.params.movie_name]=null;SWFUpload.movieCount--;delete SWFUpload.instances[this.movieName];delete window[this.movieName];return true;}catch(e){return false;}},StartUpload:function(file_id){return this.movie.StartUpload(file_id);},ReturnUploadStart:function(value){return this.movie.ReturnUploadStart(value);},StopUpload:function(){return this.movie.StopUpload();},CancelUpload:function(file_id){return this.movie.CancelUpload(file_id);},GetStats:function(){return this.movie.GetStats();},SetStats:function(stats){return this.movie.SetStats(stats);},GetFile:function(file_id){return this.movie.GetFile(file_id);},GetFileByIndex:function(file_index){return this.movie.GetFileByIndex(file_index);},getFileSizeLimit:function(size){var value=0;var unit='kb';size=$.trim(size.toLowerCase());var values=size.match(/^\d+/);if(values!=null&&values.length>0){value=parseInt(values[0]);} -var units=size.match(/(b|kb|mb|gb)/);if(units!=null&&units.length>0){unit=units[0];} -var multiplier=1024;if(unit==="b"){multiplier=1;}else if(unit==="mb"){multiplier=1048576;}else if(unit==="gb"){multiplier=1073741824;} -return value*multiplier;}};})(jQuery);(function($){$.fn.candyUpload=function(settings,callbacks){new $._candyUpload(this,settings,callbacks);return this;};$._candyUpload=function(target,settings,callbacks){var defaults={debug:false,upload_url:'',params:null,flash_movie:'',file_types:'*.*',file_types_description:'All files',file_size_limit:0,file_upload_limit:0,file_queue_limit:-1,callbacks:{}};this.params=$.extend(defaults,settings);this.params.movie_name='SWFU-'+(window.SWFUpload.instances.length+1);this.target=target;this.createControls();this.target.hide().after(this.ctrl.block).hide();this.params.target_element=this.ctrl.btn_browse.parent().get(0);var _this=this;this.upldr=$.uploader(this.params,{debug:function(msg){$('body').append('
    '+msg+'
    ');_this.bindEvent('debug',arguments);},flashReady:function(){_this.initControls(this);_this.bindEvent('flashReady',arguments);this.movie.style.width=_this.ctrl.btn_browse.width()+'px';this.movie.style.height=_this.ctrl.btn_browse.height()+'px';},fileDialogComplete:function(num_ref_files,num_queue_files){_this.bindEvent('fileDialogComplete',arguments);},fileDialogStart:function(){_this.bindEvent('fileQueued',arguments);},fileQueued:function(o){_this.appendFile(this,o);_this.refreshControls(this);_this.bindEvent('fileQueued',arguments);},fileQueueError:function(o,code,msg){var codes=window.SWFUpload.QUEUE_ERROR;switch(code){case codes.QUEUE_LIMIT_EXCEEDED:_this.queueErrorMsg(_this.locales.limit_exceeded);break;case codes.FILE_EXCEEDS_SIZE_LIMIT:_this.queueErrorMsg(_this.locales.size_limit_exceeded);break;case codes.ZERO_BYTE_FILE:case codes.INVALID_FILETYPE:_this.queueErrorMsg(msg);break;} -_this.bindEvent('fileQueueError',arguments);},uploadStart:function(){this.ReturnUploadStart(true);_this.bindEvent('uploadStart',arguments);},uploadProgress:function(o,bytes,total){_this.fileProgressBar(o.id,bytes,total);_this.bindEvent('uploadProgress',arguments);},uploadError:function(o,code,msg){var codes=window.SWFUpload.UPLOAD_ERROR;switch(code){case codes.FILE_CANCELLED:_this.fileErrorMsg(o.id,_this.locales.canceled);break;case codes.HTTP_ERROR:_this.fileErrorMsg(o.id,_this.locales.http_error+' '+msg);break;case codes.MISSING_UPLOAD_URL:case codes.IO_ERROR:case codes.SECURITY_ERROR:case codes.UPLOAD_LIMIT_EXCEEDED:case codes.UPLOAD_FAILED:case codes.SPECIFIED_FILE_ID_NOT_FOUND:case codes.FILE_VALIDATION_FAILED:case codes.FILE_CANCELLED:case codes.UPLOAD_STOPPED:_this.fileErrorMsg(o.id,_this.locales.error+' '+msg);break;} -_this.refreshControls(this);_this.removeFileCancel(o);_this.bindEvent('uploadError',arguments);},uploadSuccess:function(o,data){_this.fileProgressBar(o.id,1,1);_this.refreshControls(this);_this.removeFileCancel(o);_this.bindEvent('uploadSuccess',arguments);},uploadComplete:function(o){this.StartUpload();_this.refreshControls(this);_this.bindEvent('uploadComplete',arguments);}});};$._candyUpload.prototype={locales:{max_file_size:'Maximum file size allowed:',limit_exceeded:'Limit exceeded.',size_limit_exceeded:'File size exceeds allowed limit.',canceled:'Canceled.',http_error:'HTTP Error:',error:'Error:',choose_file:'Choose file',choose_files:'Choose files',cancel:'Cancel',clean:'Clean',upload:'Upload',no_file_in_queue:'No file in queue.',file_in_queue:'1 file in queue.',files_in_queue:'%d files in queue.',queue_error:'Queue error:'},ctrl:{block:$('
    '),files:null},createControls:function(){this.ctrl.btn_browse=$(' ').click(function(){return false;});this.ctrl.btn_cancel=$(''+this.locales.cancel+'').click(function(){return false;});this.ctrl.btn_clean=$(''+this.locales.clean+'').click(function(){return false;});this.ctrl.btn_upload=$(''+this.locales.upload+'').click(function(){return false;});this.ctrl.msg=$('
    '+this.locales.no_file_in_queue+'
    ').appendTo(this.ctrl.block);var btn=$('
    ').appendTo(this.ctrl.block);var brw=$('').append(this.ctrl.btn_browse).appendTo(btn);$('').append(this.ctrl.btn_upload).appendTo(btn).hide();$('').append(this.ctrl.btn_cancel).appendTo(btn).hide();$('').append(this.ctrl.btn_clean).appendTo(btn).hide();this.bindEvent('createControls');},initControls:function(upldr){if(this.params.file_queue_limit==1){this.ctrl.btn_browse.text(this.locales.choose_file);}else{this.ctrl.btn_browse.text(this.locales.choose_files);} -var _this=this;this.ctrl.btn_cancel.click(function(){_this.cancelQueue(upldr);return false;});this.ctrl.btn_clean.click(function(){_this.cleanQueue(upldr);return false;});this.ctrl.btn_upload.click(function(){_this.uploadQueue(upldr);return false;});var size=this.formatSize(upldr.params.file_size_limit);$('

    '+this.locales.max_file_size+' '+size+'

    ').appendTo(this.ctrl.block);},refreshControls:function(upldr){if(!this.ctrl.files||this.ctrl.files.length==0){return;} -var stats=upldr.GetStats();if(stats.files_queued>0){this.ctrl.btn_cancel.parent().show();this.ctrl.btn_upload.parent().show();if(this.params.file_queue_limit>0&&this.params.file_queue_limit==stats.files_queued){this.ctrl.btn_browse.hide();}else{this.ctrl.btn_browse.show();} -if(stats.files_queued>1){var msg=this.locales.files_in_queue.replace(/%d/,stats.files_queued);}else{var msg=this.locales.file_in_queue;}}else{this.ctrl.btn_browse.show();this.ctrl.btn_cancel.parent().hide();this.ctrl.btn_upload.parent().hide();var msg=this.locales.no_file_in_queue;} -this.ctrl.msg.removeClass('cu-error').text(msg);if(stats.successful_uploads>0||stats.upload_errors>0||stats.upload_cancelled>0){this.ctrl.btn_clean.parent().show();}else{this.ctrl.btn_clean.parent().hide();}},removeFileCancel:function(o){$('#'+o.id+' span.cu-filecancel',this.ctrl.files).remove();},appendFile:function(upldr,o){if(!this.ctrl.files){this.ctrl.files=$('
    ');this.ctrl.msg.after(this.ctrl.files);} -var fileblock=$('
    '+'
    '+o.name+' '+'('+this.formatSize(o.size)+') '+'cancel '+''+'
    ');$('span.cu-filecancel a',fileblock).click(function(){upldr.CancelUpload(o.id);return false;});this.ctrl.files.append(fileblock);},fileProgressBar:function(file_id,bytes,total){var bar=$('#'+file_id+' div.cu-progress>div',this.ctrl.files);if(bar.length==0){$('#'+file_id,this.ctrl.files).append('
     
    ');bar=$('#'+file_id+' div.cu-progress>div',this.ctrl.files);} -var percent=Math.round((bytes*100)/total);bar.css('width',percent+'%').text(percent+'%');},fileMsg:function(file_id,msg,error){error=error||false;var span=$('#'+file_id+' span.cu-filemsg',this.ctrl.files).attr('class','cu-filemsg');if(error){span.addClass('cu-error');} -span.text(msg);},fileErrorMsg:function(file_id,msg){this.fileMsg(file_id,msg,true);},cancelQueue:function(upldr){if(!this.ctrl.files||this.ctrl.files.length==0){return;} -this.ctrl.files.children('div').each(function(){upldr.CancelUpload(this.id);});},uploadQueue:function(upldr){if(!this.ctrl.files||this.ctrl.files.length==0){return;} -upldr.StartUpload();},cleanQueue:function(upldr){var _this=this;var e=$('div.cu-file',this.ctrl.files).not(':has(span.cu-filecancel a)');e.filter(':last').slideUp(200,function(){$(this).remove();if(e.length==1){upldr.SetStats({successful_uploads:0,upload_errors:0,upload_cancelled:0});_this.refreshControls(upldr);}else if(e.length>1){_this.cleanQueue(upldr);}});},queueErrorMsg:function(msg){this.ctrl.msg.addClass('cu-error').text(this.locales.queue_error+' '+msg);},formatSize:function(s){var a_size=Array('B','KB','MB','GB','TB');var i_index=0;while(s>1024){i_index++;s/=1024;} -return(Math.round(s*100)/100)+' '+a_size[i_index];},bindEvent:function(evt,a){if(this.params.callbacks[evt]!=undefined&&$.isFunction(this.params.callbacks[evt])){a=a||new Array();this.params.callbacks[evt].apply(this,a);}}};})(jQuery); \ No newline at end of file diff --git a/v2/dotclear/admin/js/jquery/jquery.farbtastic.js b/v2/dotclear/admin/js/jquery/jquery.farbtastic.js deleted file mode 100644 index 26103df..0000000 --- a/v2/dotclear/admin/js/jquery/jquery.farbtastic.js +++ /dev/null @@ -1,22 +0,0 @@ - -jQuery.fn.farbtastic=function(callback){$.farbtastic(this,callback);return this;};jQuery.farbtastic=function(container,callback){var container=$(container).get(0);return container.farbtastic||(container.farbtastic=new jQuery._farbtastic(container,callback));};jQuery._farbtastic=function(container,callback){var fb=this;$(container).html('
    ');var e=$('.farbtastic',container);fb.wheel=$('.wheel',container).get(0);fb.radius=84;fb.square=100;fb.width=194;if(navigator.appVersion.match(/MSIE [0-6]\./)){$('*',e).each(function(){if(this.currentStyle.backgroundImage!='none'){var image=this.currentStyle.backgroundImage;image=this.currentStyle.backgroundImage.substring(5,image.length-2);$(this).css({'backgroundImage':'none','filter':"progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='"+image+"')"});}});} -fb.linkTo=function(callback){if(typeof fb.callback=='object'){$(fb.callback).unbind('keyup',fb.updateValue);} -fb.color=null;if(typeof callback=='function'){fb.callback=callback;} -else if(typeof callback=='object'||typeof callback=='string'){fb.callback=$(callback);fb.callback.bind('keyup',fb.updateValue);if(fb.callback.get(0).value){fb.setColor(fb.callback.get(0).value);}} -return this;};fb.updateValue=function(event){if(this.value&&this.value!=fb.color){fb.setColor(this.value);}};fb.setColor=function(color){var unpack=fb.unpack(color);if(fb.color!=color&&unpack){fb.color=color;fb.rgb=unpack;fb.hsl=fb.RGBToHSL(fb.rgb);fb.updateDisplay();} -return this;};fb.setHSL=function(hsl){fb.hsl=hsl;fb.rgb=fb.HSLToRGB(hsl);fb.color=fb.pack(fb.rgb);fb.updateDisplay();return this;};fb.widgetCoords=function(event){var x,y;var el=event.target||event.srcElement;var reference=fb.wheel;if(typeof event.offsetX!='undefined'){var pos={x:event.offsetX,y:event.offsetY};var e=el;while(e){e.mouseX=pos.x;e.mouseY=pos.y;pos.x+=e.offsetLeft;pos.y+=e.offsetTop;e=e.offsetParent;} -var e=reference;var offset={x:0,y:0};while(e){if(typeof e.mouseX!='undefined'){x=e.mouseX-offset.x;y=e.mouseY-offset.y;break;} -offset.x+=e.offsetLeft;offset.y+=e.offsetTop;e=e.offsetParent;} -e=el;while(e){e.mouseX=undefined;e.mouseY=undefined;e=e.offsetParent;}} -else{var pos=fb.absolutePosition(reference);x=(event.pageX||0*(event.clientX+$('html').get(0).scrollLeft))-pos.x;y=(event.pageY||0*(event.clientY+$('html').get(0).scrollTop))-pos.y;} -return{x:x-fb.width/2,y:y-fb.width/2};};fb.mousedown=function(event){if(!document.dragging){$(document).bind('mousemove',fb.mousemove).bind('mouseup',fb.mouseup);document.dragging=true;} -var pos=fb.widgetCoords(event);fb.circleDrag=Math.max(Math.abs(pos.x),Math.abs(pos.y))*2>fb.square;fb.mousemove(event);return false;};fb.mousemove=function(event){var pos=fb.widgetCoords(event);if(fb.circleDrag){var hue=Math.atan2(pos.x,-pos.y)/6.28;if(hue<0)hue+=1;fb.setHSL([hue,fb.hsl[1],fb.hsl[2]]);} -else{var sat=Math.max(0,Math.min(1,-(pos.x/fb.square)+.5));var lum=Math.max(0,Math.min(1,-(pos.y/fb.square)+.5));fb.setHSL([fb.hsl[0],sat,lum]);} -return false;};fb.mouseup=function(){$(document).unbind('mousemove',fb.mousemove);$(document).unbind('mouseup',fb.mouseup);document.dragging=false;};fb.updateDisplay=function(){var angle=fb.hsl[0]*6.28;$('.h-marker',e).css({left:Math.round(Math.sin(angle)*fb.radius+fb.width/2)+'px',top:Math.round(-Math.cos(angle)*fb.radius+fb.width/2)+'px'});$('.sl-marker',e).css({left:Math.round(fb.square*(.5-fb.hsl[1])+fb.width/2)+'px',top:Math.round(fb.square*(.5-fb.hsl[2])+fb.width/2)+'px'});$('.color',e).css('backgroundColor',fb.pack(fb.HSLToRGB([fb.hsl[0],1,0.5])));if(typeof fb.callback=='object'){$(fb.callback).css({backgroundColor:fb.color,color:fb.hsl[2]>0.5?'#000':'#fff'});$(fb.callback).each(function(){if(this.value!=fb.color){this.value=fb.color;}});$(fb.callback).change();} -else if(typeof fb.callback=='function'){fb.callback.call(fb,fb.color);}};fb.absolutePosition=function(el){var r={x:el.offsetLeft,y:el.offsetTop};if(el.offsetParent){var tmp=fb.absolutePosition(el.offsetParent);r.x+=tmp.x;r.y+=tmp.y;} -return r;};fb.pack=function(rgb){var r=Math.round(rgb[0]*255);var g=Math.round(rgb[1]*255);var b=Math.round(rgb[2]*255);return'#'+(r<16?'0':'')+r.toString(16)+ -(g<16?'0':'')+g.toString(16)+ -(b<16?'0':'')+b.toString(16);};fb.unpack=function(color){if(color.length==7){return[parseInt('0x'+color.substring(1,3))/255,parseInt('0x'+color.substring(3,5))/255,parseInt('0x'+color.substring(5,7))/255];} -else if(color.length==4){return[parseInt('0x'+color.substring(1,2))/15,parseInt('0x'+color.substring(2,3))/15,parseInt('0x'+color.substring(3,4))/15];}};fb.HSLToRGB=function(hsl){var m1,m2,r,g,b;var h=hsl[0],s=hsl[1],l=hsl[2];m2=(l<=0.5)?l*(s+1):l+s-l*s;m1=l*2-m2;return[this.hueToRGB(m1,m2,h+0.33333),this.hueToRGB(m1,m2,h),this.hueToRGB(m1,m2,h-0.33333)];};fb.hueToRGB=function(m1,m2,h){h=(h<0)?h+1:((h>1)?h-1:h);if(h*6<1)return m1+(m2-m1)*h*6;if(h*2<1)return m2;if(h*3<2)return m1+(m2-m1)*(0.66666-h)*6;return m1;};fb.RGBToHSL=function(rgb){var min,max,delta,h,s,l;var r=rgb[0],g=rgb[1],b=rgb[2];min=Math.min(r,Math.min(g,b));max=Math.max(r,Math.max(g,b));delta=max-min;l=(min+max)/2;s=0;if(l>0&&l<1){s=delta/(l<0.5?(2*l):(2-2*l));} -h=0;if(delta>0){if(max==r&&max!=g)h+=(g-b)/delta;if(max==g&&max!=b)h+=(2+(b-r)/delta);if(max==b&&max!=r)h+=(4+(r-g)/delta);h/=6;} -return[h,s,l];};$('*',e).mousedown(fb.mousedown);fb.setColor('#000000');if(callback){fb.linkTo(callback);}}; \ No newline at end of file diff --git a/v2/dotclear/admin/js/jquery/jquery.js b/v2/dotclear/admin/js/jquery/jquery.js deleted file mode 100644 index 772d440..0000000 --- a/v2/dotclear/admin/js/jquery/jquery.js +++ /dev/null @@ -1,471 +0,0 @@ - -(function(window,undefined){var jQuery=function(selector,context){return new jQuery.fn.init(selector,context);},_jQuery=window.jQuery,_$=window.$,document=window.document,rootjQuery,quickExpr=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,isSimple=/^.[^:#\[\.,]*$/,rnotwhite=/\S/,rtrim=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,rsingleTag=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,userAgent=navigator.userAgent,browserMatch,readyBound=false,readyList=[],DOMContentLoaded,toString=Object.prototype.toString,hasOwnProperty=Object.prototype.hasOwnProperty,push=Array.prototype.push,slice=Array.prototype.slice,indexOf=Array.prototype.indexOf;jQuery.fn=jQuery.prototype={init:function(selector,context){var match,elem,ret,doc;if(!selector){return this;} -if(selector.nodeType){this.context=this[0]=selector;this.length=1;return this;} -if(selector==="body"&&!context){this.context=document;this[0]=document.body;this.selector="body";this.length=1;return this;} -if(typeof selector==="string"){match=quickExpr.exec(selector);if(match&&(match[1]||!context)){if(match[1]){doc=(context?context.ownerDocument||context:document);ret=rsingleTag.exec(selector);if(ret){if(jQuery.isPlainObject(context)){selector=[document.createElement(ret[1])];jQuery.fn.attr.call(selector,context,true);}else{selector=[doc.createElement(ret[1])];}}else{ret=buildFragment([match[1]],[doc]);selector=(ret.cacheable?ret.fragment.cloneNode(true):ret.fragment).childNodes;} -return jQuery.merge(this,selector);}else{elem=document.getElementById(match[2]);if(elem){if(elem.id!==match[2]){return rootjQuery.find(selector);} -this.length=1;this[0]=elem;} -this.context=document;this.selector=selector;return this;}}else if(!context&&/^\w+$/.test(selector)){this.selector=selector;this.context=document;selector=document.getElementsByTagName(selector);return jQuery.merge(this,selector);}else if(!context||context.jquery){return(context||rootjQuery).find(selector);}else{return jQuery(context).find(selector);}}else if(jQuery.isFunction(selector)){return rootjQuery.ready(selector);} -if(selector.selector!==undefined){this.selector=selector.selector;this.context=selector.context;} -return jQuery.makeArray(selector,this);},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length;},toArray:function(){return slice.call(this,0);},get:function(num){return num==null?this.toArray():(num<0?this.slice(num)[0]:this[num]);},pushStack:function(elems,name,selector){var ret=jQuery();if(jQuery.isArray(elems)){push.apply(ret,elems);}else{jQuery.merge(ret,elems);} -ret.prevObject=this;ret.context=this.context;if(name==="find"){ret.selector=this.selector+(this.selector?" ":"")+selector;}else if(name){ret.selector=this.selector+"."+name+"("+selector+")";} -return ret;},each:function(callback,args){return jQuery.each(this,callback,args);},ready:function(fn){jQuery.bindReady();if(jQuery.isReady){fn.call(document,jQuery);}else if(readyList){readyList.push(fn);} -return this;},eq:function(i){return i===-1?this.slice(i):this.slice(i,+i+1);},first:function(){return this.eq(0);},last:function(){return this.eq(-1);},slice:function(){return this.pushStack(slice.apply(this,arguments),"slice",slice.call(arguments).join(","));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},end:function(){return this.prevObject||jQuery(null);},push:push,sort:[].sort,splice:[].splice};jQuery.fn.init.prototype=jQuery.fn;jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options,name,src,copy;if(typeof target==="boolean"){deep=target;target=arguments[1]||{};i=2;} -if(typeof target!=="object"&&!jQuery.isFunction(target)){target={};} -if(length===i){target=this;--i;} -for(;i
    a";var all=div.getElementsByTagName("*"),a=div.getElementsByTagName("a")[0];if(!all||!all.length||!a){return;} -jQuery.support={leadingWhitespace:div.firstChild.nodeType===3,tbody:!div.getElementsByTagName("tbody").length,htmlSerialize:!!div.getElementsByTagName("link").length,style:/red/.test(a.getAttribute("style")),hrefNormalized:a.getAttribute("href")==="/a",opacity:/^0.55$/.test(a.style.opacity),cssFloat:!!a.style.cssFloat,checkOn:div.getElementsByTagName("input")[0].value==="on",optSelected:document.createElement("select").appendChild(document.createElement("option")).selected,parentNode:div.removeChild(div.appendChild(document.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};script.type="text/javascript";try{script.appendChild(document.createTextNode("window."+id+"=1;"));}catch(e){} -root.insertBefore(script,root.firstChild);if(window[id]){jQuery.support.scriptEval=true;delete window[id];} -try{delete script.test;}catch(e){jQuery.support.deleteExpando=false;} -root.removeChild(script);if(div.attachEvent&&div.fireEvent){div.attachEvent("onclick",function click(){jQuery.support.noCloneEvent=false;div.detachEvent("onclick",click);});div.cloneNode(true).fireEvent("onclick");} -div=document.createElement("div");div.innerHTML="";var fragment=document.createDocumentFragment();fragment.appendChild(div.firstChild);jQuery.support.checkClone=fragment.cloneNode(true).cloneNode(true).lastChild.checked;jQuery(function(){var div=document.createElement("div");div.style.width=div.style.paddingLeft="1px";document.body.appendChild(div);jQuery.boxModel=jQuery.support.boxModel=div.offsetWidth===2;document.body.removeChild(div).style.display='none';div=null;});var eventSupported=function(eventName){var el=document.createElement("div");eventName="on"+eventName;var isSupported=(eventName in el);if(!isSupported){el.setAttribute(eventName,"return;");isSupported=typeof el[eventName]==="function";} -el=null;return isSupported;};jQuery.support.submitBubbles=eventSupported("submit");jQuery.support.changeBubbles=eventSupported("change");root=script=div=all=a=null;})();jQuery.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var expando="jQuery"+now(),uuid=0,windowData={};jQuery.extend({cache:{},expando:expando,noData:{"embed":true,"object":true,"applet":true},data:function(elem,name,data){if(elem.nodeName&&jQuery.noData[elem.nodeName.toLowerCase()]){return;} -elem=elem==window?windowData:elem;var id=elem[expando],cache=jQuery.cache,thisCache;if(!id&&typeof name==="string"&&data===undefined){return null;} -if(!id){id=++uuid;} -if(typeof name==="object"){elem[expando]=id;thisCache=cache[id]=jQuery.extend(true,{},name);}else if(!cache[id]){elem[expando]=id;cache[id]={};} -thisCache=cache[id];if(data!==undefined){thisCache[name]=data;} -return typeof name==="string"?thisCache[name]:thisCache;},removeData:function(elem,name){if(elem.nodeName&&jQuery.noData[elem.nodeName.toLowerCase()]){return;} -elem=elem==window?windowData:elem;var id=elem[expando],cache=jQuery.cache,thisCache=cache[id];if(name){if(thisCache){delete thisCache[name];if(jQuery.isEmptyObject(thisCache)){jQuery.removeData(elem);}}}else{if(jQuery.support.deleteExpando){delete elem[jQuery.expando];}else if(elem.removeAttribute){elem.removeAttribute(jQuery.expando);} -delete cache[id];}}});jQuery.fn.extend({data:function(key,value){if(typeof key==="undefined"&&this.length){return jQuery.data(this[0]);}else if(typeof key==="object"){return this.each(function(){jQuery.data(this,key);});} -var parts=key.split(".");parts[1]=parts[1]?"."+parts[1]:"";if(value===undefined){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data===undefined&&this.length){data=jQuery.data(this[0],key);} -return data===undefined&&parts[1]?this.data(parts[0]):data;}else{return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});}},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});}});jQuery.extend({queue:function(elem,type,data){if(!elem){return;} -type=(type||"fx")+"queue";var q=jQuery.data(elem,type);if(!data){return q||[];} -if(!q||jQuery.isArray(data)){q=jQuery.data(elem,type,jQuery.makeArray(data));}else{q.push(data);} -return q;},dequeue:function(elem,type){type=type||"fx";var queue=jQuery.queue(elem,type),fn=queue.shift();if(fn==="inprogress"){fn=queue.shift();} -if(fn){if(type==="fx"){queue.unshift("inprogress");} -fn.call(elem,function(){jQuery.dequeue(elem,type);});}}});jQuery.fn.extend({queue:function(type,data){if(typeof type!=="string"){data=type;type="fx";} -if(data===undefined){return jQuery.queue(this[0],type);} -return this.each(function(i,elem){var queue=jQuery.queue(this,type,data);if(type==="fx"&&queue[0]!=="inprogress"){jQuery.dequeue(this,type);}});},dequeue:function(type){return this.each(function(){jQuery.dequeue(this,type);});},delay:function(time,type){time=jQuery.fx?jQuery.fx.speeds[time]||time:time;type=type||"fx";return this.queue(type,function(){var elem=this;setTimeout(function(){jQuery.dequeue(elem,type);},time);});},clearQueue:function(type){return this.queue(type||"fx",[]);}});var rclass=/[\n\t]/g,rspace=/\s+/,rreturn=/\r/g,rspecialurl=/href|src|style/,rtype=/(button|input)/i,rfocusable=/(button|input|object|select|textarea)/i,rclickable=/^(a|area)$/i,rradiocheck=/radio|checkbox/;jQuery.fn.extend({attr:function(name,value){return access(this,name,value,true,jQuery.attr);},removeAttr:function(name,fn){return this.each(function(){jQuery.attr(this,name,"");if(this.nodeType===1){this.removeAttribute(name);}});},addClass:function(value){if(jQuery.isFunction(value)){return this.each(function(i){var self=jQuery(this);self.addClass(value.call(this,i,self.attr("class")));});} -if(value&&typeof value==="string"){var classNames=(value||"").split(rspace);for(var i=0,l=this.length;i-1){return true;}} -return false;},val:function(value){if(value===undefined){var elem=this[0];if(elem){if(jQuery.nodeName(elem,"option")){return(elem.attributes.value||{}).specified?elem.value:elem.text;} -if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type==="select-one";if(index<0){return null;} -for(var i=one?index:0,max=one?index+1:options.length;i=0;}else if(jQuery.nodeName(this,"select")){var values=jQuery.makeArray(val);jQuery("option",this).each(function(){this.selected=jQuery.inArray(jQuery(this).val(),values)>=0;});if(!values.length){this.selectedIndex=-1;}}else{this.value=val;}});}});jQuery.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(elem,name,value,pass){if(!elem||elem.nodeType===3||elem.nodeType===8){return undefined;} -if(pass&&name in jQuery.attrFn){return jQuery(elem)[name](value);} -var notxml=elem.nodeType!==1||!jQuery.isXMLDoc(elem),set=value!==undefined;name=notxml&&jQuery.props[name]||name;if(elem.nodeType===1){var special=rspecialurl.test(name);if(name==="selected"&&!jQuery.support.optSelected){var parent=elem.parentNode;if(parent){parent.selectedIndex;if(parent.parentNode){parent.parentNode.selectedIndex;}}} -if(name in elem&¬xml&&!special){if(set){if(name==="type"&&rtype.test(elem.nodeName)&&elem.parentNode){jQuery.error("type property can't be changed");} -elem[name]=value;} -if(jQuery.nodeName(elem,"form")&&elem.getAttributeNode(name)){return elem.getAttributeNode(name).nodeValue;} -if(name==="tabIndex"){var attributeNode=elem.getAttributeNode("tabIndex");return attributeNode&&attributeNode.specified?attributeNode.value:rfocusable.test(elem.nodeName)||rclickable.test(elem.nodeName)&&elem.href?0:undefined;} -return elem[name];} -if(!jQuery.support.style&¬xml&&name==="style"){if(set){elem.style.cssText=""+value;} -return elem.style.cssText;} -if(set){elem.setAttribute(name,""+value);} -var attr=!jQuery.support.hrefNormalized&¬xml&&special?elem.getAttribute(name,2):elem.getAttribute(name);return attr===null?undefined:attr;} -return jQuery.style(elem,name,value);}});var rnamespaces=/\.(.*)$/,fcleanup=function(nm){return nm.replace(/[^\w\s\.\|`]/g,function(ch){return"\\"+ch;});};jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType===3||elem.nodeType===8){return;} -if(elem.setInterval&&(elem!==window&&!elem.frameElement)){elem=window;} -var handleObjIn,handleObj;if(handler.handler){handleObjIn=handler;handler=handleObjIn.handler;} -if(!handler.guid){handler.guid=jQuery.guid++;} -var elemData=jQuery.data(elem);if(!elemData){return;} -var events=elemData.events=elemData.events||{},eventHandle=elemData.handle,eventHandle;if(!eventHandle){elemData.handle=eventHandle=function(){return typeof jQuery!=="undefined"&&!jQuery.event.triggered?jQuery.event.handle.apply(eventHandle.elem,arguments):undefined;};} -eventHandle.elem=elem;types=types.split(" ");var type,i=0,namespaces;while((type=types[i++])){handleObj=handleObjIn?jQuery.extend({},handleObjIn):{handler:handler,data:data};if(type.indexOf(".")>-1){namespaces=type.split(".");type=namespaces.shift();handleObj.namespace=namespaces.slice(0).sort().join(".");}else{namespaces=[];handleObj.namespace="";} -handleObj.type=type;handleObj.guid=handler.guid;var handlers=events[type],special=jQuery.event.special[type]||{};if(!handlers){handlers=events[type]=[];if(!special.setup||special.setup.call(elem,data,namespaces,eventHandle)===false){if(elem.addEventListener){elem.addEventListener(type,eventHandle,false);}else if(elem.attachEvent){elem.attachEvent("on"+type,eventHandle);}}} -if(special.add){special.add.call(elem,handleObj);if(!handleObj.handler.guid){handleObj.handler.guid=handler.guid;}} -handlers.push(handleObj);jQuery.event.global[type]=true;} -elem=null;},global:{},remove:function(elem,types,handler,pos){if(elem.nodeType===3||elem.nodeType===8){return;} -var ret,type,fn,i=0,all,namespaces,namespace,special,eventType,handleObj,origType,elemData=jQuery.data(elem),events=elemData&&elemData.events;if(!elemData||!events){return;} -if(types&&types.type){handler=types.handler;types=types.type;} -if(!types||typeof types==="string"&&types.charAt(0)==="."){types=types||"";for(type in events){jQuery.event.remove(elem,type+types);} -return;} -types=types.split(" ");while((type=types[i++])){origType=type;handleObj=null;all=type.indexOf(".")<0;namespaces=[];if(!all){namespaces=type.split(".");type=namespaces.shift();namespace=new RegExp("(^|\\.)"+ -jQuery.map(namespaces.slice(0).sort(),fcleanup).join("\\.(?:.*\\.)?")+"(\\.|$)")} -eventType=events[type];if(!eventType){continue;} -if(!handler){for(var j=0;j=0){event.type=type=type.slice(0,-1);event.exclusive=true;} -if(!elem){event.stopPropagation();if(jQuery.event.global[type]){jQuery.each(jQuery.cache,function(){if(this.events&&this.events[type]){jQuery.event.trigger(event,data,this.handle.elem);}});}} -if(!elem||elem.nodeType===3||elem.nodeType===8){return undefined;} -event.result=undefined;event.target=elem;data=jQuery.makeArray(data);data.unshift(event);} -event.currentTarget=elem;var handle=jQuery.data(elem,"handle");if(handle){handle.apply(elem,data);} -var parent=elem.parentNode||elem.ownerDocument;try{if(!(elem&&elem.nodeName&&jQuery.noData[elem.nodeName.toLowerCase()])){if(elem["on"+type]&&elem["on"+type].apply(elem,data)===false){event.result=false;}}}catch(e){} -if(!event.isPropagationStopped()&&parent){jQuery.event.trigger(event,data,parent,true);}else if(!event.isDefaultPrevented()){var target=event.target,old,isClick=jQuery.nodeName(target,"a")&&type==="click",special=jQuery.event.special[type]||{};if((!special._default||special._default.call(elem,event)===false)&&!isClick&&!(target&&target.nodeName&&jQuery.noData[target.nodeName.toLowerCase()])){try{if(target[type]){old=target["on"+type];if(old){target["on"+type]=null;} -jQuery.event.triggered=true;target[type]();}}catch(e){} -if(old){target["on"+type]=old;} -jQuery.event.triggered=false;}}},handle:function(event){var all,handlers,namespaces,namespace,events;event=arguments[0]=jQuery.event.fix(event||window.event);event.currentTarget=this;all=event.type.indexOf(".")<0&&!event.exclusive;if(!all){namespaces=event.type.split(".");event.type=namespaces.shift();namespace=new RegExp("(^|\\.)"+namespaces.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)");} -var events=jQuery.data(this,"events"),handlers=events[event.type];if(events&&handlers){handlers=handlers.slice(0);for(var j=0,l=handlers.length;j-1?jQuery.map(elem.options,function(elem){return elem.selected;}).join("-"):"";}else if(elem.nodeName.toLowerCase()==="select"){val=elem.selectedIndex;} -return val;},testChange=function testChange(e){var elem=e.target,data,val;if(!formElems.test(elem.nodeName)||elem.readOnly){return;} -data=jQuery.data(elem,"_change_data");val=getVal(elem);if(e.type!=="focusout"||elem.type!=="radio"){jQuery.data(elem,"_change_data",val);} -if(data===undefined||val===data){return;} -if(data!=null||val){e.type="change";return jQuery.event.trigger(e,arguments[1],elem);}};jQuery.event.special.change={filters:{focusout:testChange,click:function(e){var elem=e.target,type=elem.type;if(type==="radio"||type==="checkbox"||elem.nodeName.toLowerCase()==="select"){return testChange.call(this,e);}},keydown:function(e){var elem=e.target,type=elem.type;if((e.keyCode===13&&elem.nodeName.toLowerCase()!=="textarea")||(e.keyCode===32&&(type==="checkbox"||type==="radio"))||type==="select-multiple"){return testChange.call(this,e);}},beforeactivate:function(e){var elem=e.target;jQuery.data(elem,"_change_data",getVal(elem));}},setup:function(data,namespaces){if(this.type==="file"){return false;} -for(var type in changeFilters){jQuery.event.add(this,type+".specialChange",changeFilters[type]);} -return formElems.test(this.nodeName);},teardown:function(namespaces){jQuery.event.remove(this,".specialChange");return formElems.test(this.nodeName);}};changeFilters=jQuery.event.special.change.filters;} -function trigger(type,elem,args){args[0].type=type;return jQuery.event.handle.apply(elem,args);} -if(document.addEventListener){jQuery.each({focus:"focusin",blur:"focusout"},function(orig,fix){jQuery.event.special[fix]={setup:function(){this.addEventListener(orig,handler,true);},teardown:function(){this.removeEventListener(orig,handler,true);}};function handler(e){e=jQuery.event.fix(e);e.type=fix;return jQuery.event.handle.call(this,e);}});} -jQuery.each(["bind","one"],function(i,name){jQuery.fn[name]=function(type,data,fn){if(typeof type==="object"){for(var key in type){this[name](key,data,type[key],fn);} -return this;} -if(jQuery.isFunction(data)){fn=data;data=undefined;} -var handler=name==="one"?jQuery.proxy(fn,function(event){jQuery(this).unbind(event,handler);return fn.apply(this,arguments);}):fn;if(type==="unload"&&name!=="one"){this.one(type,data,fn);}else{for(var i=0,l=this.length;i+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,done=0,toString=Object.prototype.toString,hasDuplicate=false,baseHasDuplicate=true;[0,0].sort(function(){baseHasDuplicate=false;return 0;});var Sizzle=function(selector,context,results,seed){results=results||[];var origContext=context=context||document;if(context.nodeType!==1&&context.nodeType!==9){return[];} -if(!selector||typeof selector!=="string"){return results;} -var parts=[],m,set,checkSet,extra,prune=true,contextXML=isXML(context),soFar=selector;while((chunker.exec(""),m=chunker.exec(soFar))!==null){soFar=m[3];parts.push(m[1]);if(m[2]){extra=m[3];break;}} -if(parts.length>1&&origPOS.exec(selector)){if(parts.length===2&&Expr.relative[parts[0]]){set=posProcess(parts[0]+parts[1],context);}else{set=Expr.relative[parts[0]]?[context]:Sizzle(parts.shift(),context);while(parts.length){selector=parts.shift();if(Expr.relative[selector]){selector+=parts.shift();} -set=posProcess(selector,set);}}}else{if(!seed&&parts.length>1&&context.nodeType===9&&!contextXML&&Expr.match.ID.test(parts[0])&&!Expr.match.ID.test(parts[parts.length-1])){var ret=Sizzle.find(parts.shift(),context,contextXML);context=ret.expr?Sizzle.filter(ret.expr,ret.set)[0]:ret.set[0];} -if(context){var ret=seed?{expr:parts.pop(),set:makeArray(seed)}:Sizzle.find(parts.pop(),parts.length===1&&(parts[0]==="~"||parts[0]==="+")&&context.parentNode?context.parentNode:context,contextXML);set=ret.expr?Sizzle.filter(ret.expr,ret.set):ret.set;if(parts.length>0){checkSet=makeArray(set);}else{prune=false;} -while(parts.length){var cur=parts.pop(),pop=cur;if(!Expr.relative[cur]){cur="";}else{pop=parts.pop();} -if(pop==null){pop=context;} -Expr.relative[cur](checkSet,pop,contextXML);}}else{checkSet=parts=[];}} -if(!checkSet){checkSet=set;} -if(!checkSet){Sizzle.error(cur||selector);} -if(toString.call(checkSet)==="[object Array]"){if(!prune){results.push.apply(results,checkSet);}else if(context&&context.nodeType===1){for(var i=0;checkSet[i]!=null;i++){if(checkSet[i]&&(checkSet[i]===true||checkSet[i].nodeType===1&&contains(context,checkSet[i]))){results.push(set[i]);}}}else{for(var i=0;checkSet[i]!=null;i++){if(checkSet[i]&&checkSet[i].nodeType===1){results.push(set[i]);}}}}else{makeArray(checkSet,results);} -if(extra){Sizzle(extra,origContext,results,seed);Sizzle.uniqueSort(results);} -return results;};Sizzle.uniqueSort=function(results){if(sortOrder){hasDuplicate=baseHasDuplicate;results.sort(sortOrder);if(hasDuplicate){for(var i=1;i":function(checkSet,part){var isPartStr=typeof part==="string";if(isPartStr&&!/\W/.test(part)){part=part.toLowerCase();for(var i=0,l=checkSet.length;i=0)){if(!inplace){result.push(elem);}}else if(inplace){curLoop[i]=false;}}} -return false;},ID:function(match){return match[1].replace(/\\/g,"");},TAG:function(match,curLoop){return match[1].toLowerCase();},CHILD:function(match){if(match[1]==="nth"){var test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(match[2]==="even"&&"2n"||match[2]==="odd"&&"2n+1"||!/\D/.test(match[2])&&"0n+"+match[2]||match[2]);match[2]=(test[1]+(test[2]||1))-0;match[3]=test[3]-0;} -match[0]=done++;return match;},ATTR:function(match,curLoop,inplace,result,not,isXML){var name=match[1].replace(/\\/g,"");if(!isXML&&Expr.attrMap[name]){match[1]=Expr.attrMap[name];} -if(match[2]==="~="){match[4]=" "+match[4]+" ";} -return match;},PSEUDO:function(match,curLoop,inplace,result,not){if(match[1]==="not"){if((chunker.exec(match[3])||"").length>1||/^\w/.test(match[3])){match[3]=Sizzle(match[3],null,null,curLoop);}else{var ret=Sizzle.filter(match[3],curLoop,inplace,true^not);if(!inplace){result.push.apply(result,ret);} -return false;}}else if(Expr.match.POS.test(match[0])||Expr.match.CHILD.test(match[0])){return true;} -return match;},POS:function(match){match.unshift(true);return match;}},filters:{enabled:function(elem){return elem.disabled===false&&elem.type!=="hidden";},disabled:function(elem){return elem.disabled===true;},checked:function(elem){return elem.checked===true;},selected:function(elem){elem.parentNode.selectedIndex;return elem.selected===true;},parent:function(elem){return!!elem.firstChild;},empty:function(elem){return!elem.firstChild;},has:function(elem,i,match){return!!Sizzle(match[3],elem).length;},header:function(elem){return/h\d/i.test(elem.nodeName);},text:function(elem){return"text"===elem.type;},radio:function(elem){return"radio"===elem.type;},checkbox:function(elem){return"checkbox"===elem.type;},file:function(elem){return"file"===elem.type;},password:function(elem){return"password"===elem.type;},submit:function(elem){return"submit"===elem.type;},image:function(elem){return"image"===elem.type;},reset:function(elem){return"reset"===elem.type;},button:function(elem){return"button"===elem.type||elem.nodeName.toLowerCase()==="button";},input:function(elem){return/input|select|textarea|button/i.test(elem.nodeName);}},setFilters:{first:function(elem,i){return i===0;},last:function(elem,i,match,array){return i===array.length-1;},even:function(elem,i){return i%2===0;},odd:function(elem,i){return i%2===1;},lt:function(elem,i,match){return imatch[3]-0;},nth:function(elem,i,match){return match[3]-0===i;},eq:function(elem,i,match){return match[3]-0===i;}},filter:{PSEUDO:function(elem,match,i,array){var name=match[1],filter=Expr.filters[name];if(filter){return filter(elem,i,match,array);}else if(name==="contains"){return(elem.textContent||elem.innerText||getText([elem])||"").indexOf(match[3])>=0;}else if(name==="not"){var not=match[3];for(var i=0,l=not.length;i=0);}}},ID:function(elem,match){return elem.nodeType===1&&elem.getAttribute("id")===match;},TAG:function(elem,match){return(match==="*"&&elem.nodeType===1)||elem.nodeName.toLowerCase()===match;},CLASS:function(elem,match){return(" "+(elem.className||elem.getAttribute("class"))+" ").indexOf(match)>-1;},ATTR:function(elem,match){var name=match[1],result=Expr.attrHandle[name]?Expr.attrHandle[name](elem):elem[name]!=null?elem[name]:elem.getAttribute(name),value=result+"",type=match[2],check=match[4];return result==null?type==="!=":type==="="?value===check:type==="*="?value.indexOf(check)>=0:type==="~="?(" "+value+" ").indexOf(check)>=0:!check?value&&result!==false:type==="!="?value!==check:type==="^="?value.indexOf(check)===0:type==="$="?value.substr(value.length-check.length)===check:type==="|="?value===check||value.substr(0,check.length+1)===check+"-":false;},POS:function(elem,match,i,array){var name=match[2],filter=Expr.setFilters[name];if(filter){return filter(elem,i,match,array);}}}};var origPOS=Expr.match.POS;for(var type in Expr.match){Expr.match[type]=new RegExp(Expr.match[type].source+/(?![^\[]*\])(?![^\(]*\))/.source);Expr.leftMatch[type]=new RegExp(/(^(?:.|\r|\n)*?)/.source+Expr.match[type].source.replace(/\\(\d+)/g,function(all,num){return"\\"+(num-0+1);}));} -var makeArray=function(array,results){array=Array.prototype.slice.call(array,0);if(results){results.push.apply(results,array);return results;} -return array;};try{Array.prototype.slice.call(document.documentElement.childNodes,0)[0].nodeType;}catch(e){makeArray=function(array,results){var ret=results||[];if(toString.call(array)==="[object Array]"){Array.prototype.push.apply(ret,array);}else{if(typeof array.length==="number"){for(var i=0,l=array.length;i";var root=document.documentElement;root.insertBefore(form,root.firstChild);if(document.getElementById(id)){Expr.find.ID=function(match,context,isXML){if(typeof context.getElementById!=="undefined"&&!isXML){var m=context.getElementById(match[1]);return m?m.id===match[1]||typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id").nodeValue===match[1]?[m]:undefined:[];}};Expr.filter.ID=function(elem,match){var node=typeof elem.getAttributeNode!=="undefined"&&elem.getAttributeNode("id");return elem.nodeType===1&&node&&node.nodeValue===match;};} -root.removeChild(form);root=form=null;})();(function(){var div=document.createElement("div");div.appendChild(document.createComment(""));if(div.getElementsByTagName("*").length>0){Expr.find.TAG=function(match,context){var results=context.getElementsByTagName(match[1]);if(match[1]==="*"){var tmp=[];for(var i=0;results[i];i++){if(results[i].nodeType===1){tmp.push(results[i]);}} -results=tmp;} -return results;};} -div.innerHTML="";if(div.firstChild&&typeof div.firstChild.getAttribute!=="undefined"&&div.firstChild.getAttribute("href")!=="#"){Expr.attrHandle.href=function(elem){return elem.getAttribute("href",2);};} -div=null;})();if(document.querySelectorAll){(function(){var oldSizzle=Sizzle,div=document.createElement("div");div.innerHTML="

    ";if(div.querySelectorAll&&div.querySelectorAll(".TEST").length===0){return;} -Sizzle=function(query,context,extra,seed){context=context||document;if(!seed&&context.nodeType===9&&!isXML(context)){try{return makeArray(context.querySelectorAll(query),extra);}catch(e){}} -return oldSizzle(query,context,extra,seed);};for(var prop in oldSizzle){Sizzle[prop]=oldSizzle[prop];} -div=null;})();} -(function(){var div=document.createElement("div");div.innerHTML="
    ";if(!div.getElementsByClassName||div.getElementsByClassName("e").length===0){return;} -div.lastChild.className="e";if(div.getElementsByClassName("e").length===1){return;} -Expr.order.splice(1,0,"CLASS");Expr.find.CLASS=function(match,context,isXML){if(typeof context.getElementsByClassName!=="undefined"&&!isXML){return context.getElementsByClassName(match[1]);}};div=null;})();function dirNodeCheck(dir,cur,doneName,checkSet,nodeCheck,isXML){for(var i=0,l=checkSet.length;i0){match=elem;break;}} -elem=elem[dir];} -checkSet[i]=match;}}} -var contains=document.compareDocumentPosition?function(a,b){return!!(a.compareDocumentPosition(b)&16);}:function(a,b){return a!==b&&(a.contains?a.contains(b):true);};var isXML=function(elem){var documentElement=(elem?elem.ownerDocument||elem:0).documentElement;return documentElement?documentElement.nodeName!=="HTML":false;};var posProcess=function(selector,context){var tmpSet=[],later="",match,root=context.nodeType?[context]:context;while((match=Expr.match.PSEUDO.exec(selector))){later+=match[0];selector=selector.replace(Expr.match.PSEUDO,"");} -selector=Expr.relative[selector]?selector+"*":selector;for(var i=0,l=root.length;i=0)===keep;});};jQuery.fn.extend({find:function(selector){var ret=this.pushStack("","find",selector),length=0;for(var i=0,l=this.length;i0){for(var n=length;n0;},closest:function(selectors,context){if(jQuery.isArray(selectors)){var ret=[],cur=this[0],match,matches={},selector;if(cur&&selectors.length){for(var i=0,l=selectors.length;i-1:jQuery(cur).is(match)){ret.push({selector:selector,elem:cur});delete matches[selector];}} -cur=cur.parentNode;}} -return ret;} -var pos=jQuery.expr.match.POS.test(selectors)?jQuery(selectors,context||this.context):null;return this.map(function(i,cur){while(cur&&cur.ownerDocument&&cur!==context){if(pos?pos.index(cur)>-1:jQuery(cur).is(selectors)){return cur;} -cur=cur.parentNode;} -return null;});},index:function(elem){if(!elem||typeof elem==="string"){return jQuery.inArray(this[0],elem?jQuery(elem):this.parent().children());} -return jQuery.inArray(elem.jquery?elem[0]:elem,this);},add:function(selector,context){var set=typeof selector==="string"?jQuery(selector,context||this.context):jQuery.makeArray(selector),all=jQuery.merge(this.get(),set);return this.pushStack(isDisconnected(set[0])||isDisconnected(all[0])?all:jQuery.unique(all));},andSelf:function(){return this.add(this.prevObject);}});function isDisconnected(node){return!node||!node.parentNode||node.parentNode.nodeType===11;} -jQuery.each({parent:function(elem){var parent=elem.parentNode;return parent&&parent.nodeType!==11?parent:null;},parents:function(elem){return jQuery.dir(elem,"parentNode");},parentsUntil:function(elem,i,until){return jQuery.dir(elem,"parentNode",until);},next:function(elem){return jQuery.nth(elem,2,"nextSibling");},prev:function(elem){return jQuery.nth(elem,2,"previousSibling");},nextAll:function(elem){return jQuery.dir(elem,"nextSibling");},prevAll:function(elem){return jQuery.dir(elem,"previousSibling");},nextUntil:function(elem,i,until){return jQuery.dir(elem,"nextSibling",until);},prevUntil:function(elem,i,until){return jQuery.dir(elem,"previousSibling",until);},siblings:function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},children:function(elem){return jQuery.sibling(elem.firstChild);},contents:function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}},function(name,fn){jQuery.fn[name]=function(until,selector){var ret=jQuery.map(this,fn,until);if(!runtil.test(name)){selector=until;} -if(selector&&typeof selector==="string"){ret=jQuery.filter(selector,ret);} -ret=this.length>1?jQuery.unique(ret):ret;if((this.length>1||rmultiselector.test(selector))&&rparentsprev.test(name)){ret=ret.reverse();} -return this.pushStack(ret,name,slice.call(arguments).join(","));};});jQuery.extend({filter:function(expr,elems,not){if(not){expr=":not("+expr+")";} -return jQuery.find.matches(expr,elems);},dir:function(elem,dir,until){var matched=[],cur=elem[dir];while(cur&&cur.nodeType!==9&&(until===undefined||cur.nodeType!==1||!jQuery(cur).is(until))){if(cur.nodeType===1){matched.push(cur);} -cur=cur[dir];} -return matched;},nth:function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir]){if(cur.nodeType===1&&++num===result){break;}} -return cur;},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType===1&&n!==elem){r.push(n);}} -return r;}});var rinlinejQuery=/ jQuery\d+="(?:\d+|null)"/g,rleadingWhitespace=/^\s+/,rxhtmlTag=/(<([\w:]+)[^>]*?)\/>/g,rselfClosing=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,rtagName=/<([\w:]+)/,rtbody=/";},wrapMap={option:[1,""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]};wrapMap.optgroup=wrapMap.option;wrapMap.tbody=wrapMap.tfoot=wrapMap.colgroup=wrapMap.caption=wrapMap.thead;wrapMap.th=wrapMap.td;if(!jQuery.support.htmlSerialize){wrapMap._default=[1,"div
    ","
    "];} -jQuery.fn.extend({text:function(text){if(jQuery.isFunction(text)){return this.each(function(i){var self=jQuery(this);self.text(text.call(this,i,self.text()));});} -if(typeof text!=="object"&&text!==undefined){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));} -return jQuery.text(this);},wrapAll:function(html){if(jQuery.isFunction(html)){return this.each(function(i){jQuery(this).wrapAll(html.call(this,i));});} -if(this[0]){var wrap=jQuery(html,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){wrap.insertBefore(this[0]);} -wrap.map(function(){var elem=this;while(elem.firstChild&&elem.firstChild.nodeType===1){elem=elem.firstChild;} -return elem;}).append(this);} -return this;},wrapInner:function(html){if(jQuery.isFunction(html)){return this.each(function(i){jQuery(this).wrapInner(html.call(this,i));});} -return this.each(function(){var self=jQuery(this),contents=self.contents();if(contents.length){contents.wrapAll(html);}else{self.append(html);}});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},unwrap:function(){return this.parent().each(function(){if(!jQuery.nodeName(this,"body")){jQuery(this).replaceWith(this.childNodes);}}).end();},append:function(){return this.domManip(arguments,true,function(elem){if(this.nodeType===1){this.appendChild(elem);}});},prepend:function(){return this.domManip(arguments,true,function(elem){if(this.nodeType===1){this.insertBefore(elem,this.firstChild);}});},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(elem){this.parentNode.insertBefore(elem,this);});}else if(arguments.length){var set=jQuery(arguments[0]);set.push.apply(set,this.toArray());return this.pushStack(set,"before",arguments);}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});}else if(arguments.length){var set=this.pushStack(this,"after",arguments);set.push.apply(set,jQuery(arguments[0]).toArray());return set;}},remove:function(selector,keepData){for(var i=0,elem;(elem=this[i])!=null;i++){if(!selector||jQuery.filter(selector,[elem]).length){if(!keepData&&elem.nodeType===1){jQuery.cleanData(elem.getElementsByTagName("*"));jQuery.cleanData([elem]);} -if(elem.parentNode){elem.parentNode.removeChild(elem);}}} -return this;},empty:function(){for(var i=0,elem;(elem=this[i])!=null;i++){if(elem.nodeType===1){jQuery.cleanData(elem.getElementsByTagName("*"));} -while(elem.firstChild){elem.removeChild(elem.firstChild);}} -return this;},clone:function(events){var ret=this.map(function(){if(!jQuery.support.noCloneEvent&&!jQuery.isXMLDoc(this)){var html=this.outerHTML,ownerDocument=this.ownerDocument;if(!html){var div=ownerDocument.createElement("div");div.appendChild(this.cloneNode(true));html=div.innerHTML;} -return jQuery.clean([html.replace(rinlinejQuery,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(rleadingWhitespace,"")],ownerDocument)[0];}else{return this.cloneNode(true);}});if(events===true){cloneCopyEvent(this,ret);cloneCopyEvent(this.find("*"),ret.find("*"));} -return ret;},html:function(value){if(value===undefined){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(rinlinejQuery,""):null;}else if(typeof value==="string"&&!rnocache.test(value)&&(jQuery.support.leadingWhitespace||!rleadingWhitespace.test(value))&&!wrapMap[(rtagName.exec(value)||["",""])[1].toLowerCase()]){value=value.replace(rxhtmlTag,fcloseTag);try{for(var i=0,l=this.length;i0||results.cacheable||this.length>1?fragment.cloneNode(true):fragment);}} -if(scripts.length){jQuery.each(scripts,evalScript);}} -return this;function root(elem,cur){return jQuery.nodeName(elem,"table")?(elem.getElementsByTagName("tbody")[0]||elem.appendChild(elem.ownerDocument.createElement("tbody"))):elem;}}});function cloneCopyEvent(orig,ret){var i=0;ret.each(function(){if(this.nodeName!==(orig[i]&&orig[i].nodeName)){return;} -var oldData=jQuery.data(orig[i++]),curData=jQuery.data(this,oldData),events=oldData&&oldData.events;if(events){delete curData.handle;curData.events={};for(var type in events){for(var handler in events[type]){jQuery.event.add(this,type,events[type][handler],events[type][handler].data);}}}});} -function buildFragment(args,nodes,scripts){var fragment,cacheable,cacheresults,doc=(nodes&&nodes[0]?nodes[0].ownerDocument||nodes[0]:document);if(args.length===1&&typeof args[0]==="string"&&args[0].length<512&&doc===document&&!rnocache.test(args[0])&&(jQuery.support.checkClone||!rchecked.test(args[0]))){cacheable=true;cacheresults=jQuery.fragments[args[0]];if(cacheresults){if(cacheresults!==1){fragment=cacheresults;}}} -if(!fragment){fragment=doc.createDocumentFragment();jQuery.clean(args,doc,fragment,scripts);} -if(cacheable){jQuery.fragments[args[0]]=cacheresults?fragment:1;} -return{fragment:fragment,cacheable:cacheable};} -jQuery.fragments={};jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(selector){var ret=[],insert=jQuery(selector),parent=this.length===1&&this[0].parentNode;if(parent&&parent.nodeType===11&&parent.childNodes.length===1&&insert.length===1){insert[original](this[0]);return this;}else{for(var i=0,l=insert.length;i0?this.clone(true):this).get();jQuery.fn[original].apply(jQuery(insert[i]),elems);ret=ret.concat(elems);} -return this.pushStack(ret,name,insert.selector);}};});jQuery.extend({clean:function(elems,context,fragment,scripts){context=context||document;if(typeof context.createElement==="undefined"){context=context.ownerDocument||context[0]&&context[0].ownerDocument||document;} -var ret=[];for(var i=0,elem;(elem=elems[i])!=null;i++){if(typeof elem==="number"){elem+="";} -if(!elem){continue;} -if(typeof elem==="string"&&!rhtml.test(elem)){elem=context.createTextNode(elem);}else if(typeof elem==="string"){elem=elem.replace(rxhtmlTag,fcloseTag);var tag=(rtagName.exec(elem)||["",""])[1].toLowerCase(),wrap=wrapMap[tag]||wrapMap._default,depth=wrap[0],div=context.createElement("div");div.innerHTML=wrap[1]+elem+wrap[2];while(depth--){div=div.lastChild;} -if(!jQuery.support.tbody){var hasBody=rtbody.test(elem),tbody=tag==="table"&&!hasBody?div.firstChild&&div.firstChild.childNodes:wrap[1]===""&&!hasBody?div.childNodes:[];for(var j=tbody.length-1;j>=0;--j){if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length){tbody[j].parentNode.removeChild(tbody[j]);}}} -if(!jQuery.support.leadingWhitespace&&rleadingWhitespace.test(elem)){div.insertBefore(context.createTextNode(rleadingWhitespace.exec(elem)[0]),div.firstChild);} -elem=div.childNodes;} -if(elem.nodeType){ret.push(elem);}else{ret=jQuery.merge(ret,elem);}} -if(fragment){for(var i=0;ret[i];i++){if(scripts&&jQuery.nodeName(ret[i],"script")&&(!ret[i].type||ret[i].type.toLowerCase()==="text/javascript")){scripts.push(ret[i].parentNode?ret[i].parentNode.removeChild(ret[i]):ret[i]);}else{if(ret[i].nodeType===1){ret.splice.apply(ret,[i+1,0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))));} -fragment.appendChild(ret[i]);}}} -return ret;},cleanData:function(elems){var data,id,cache=jQuery.cache,special=jQuery.event.special,deleteExpando=jQuery.support.deleteExpando;for(var i=0,elem;(elem=elems[i])!=null;i++){id=elem[jQuery.expando];if(id){data=cache[id];if(data.events){for(var type in data.events){if(special[type]){jQuery.event.remove(elem,type);}else{removeEvent(elem,type,data.handle);}}} -if(deleteExpando){delete elem[jQuery.expando];}else if(elem.removeAttribute){elem.removeAttribute(jQuery.expando);} -delete cache[id];}}}});var rexclude=/z-?index|font-?weight|opacity|zoom|line-?height/i,ralpha=/alpha\([^)]*\)/,ropacity=/opacity=([^)]*)/,rfloat=/float/i,rdashAlpha=/-([a-z])/ig,rupper=/([A-Z])/g,rnumpx=/^-?\d+(?:px)?$/i,rnum=/^-?\d/,cssShow={position:"absolute",visibility:"hidden",display:"block"},cssWidth=["Left","Right"],cssHeight=["Top","Bottom"],getComputedStyle=document.defaultView&&document.defaultView.getComputedStyle,styleFloat=jQuery.support.cssFloat?"cssFloat":"styleFloat",fcamelCase=function(all,letter){return letter.toUpperCase();};jQuery.fn.css=function(name,value){return access(this,name,value,true,function(elem,name,value){if(value===undefined){return jQuery.curCSS(elem,name);} -if(typeof value==="number"&&!rexclude.test(name)){value+="px";} -jQuery.style(elem,name,value);});};jQuery.extend({style:function(elem,name,value){if(!elem||elem.nodeType===3||elem.nodeType===8){return undefined;} -if((name==="width"||name==="height")&&parseFloat(value)<0){value=undefined;} -var style=elem.style||elem,set=value!==undefined;if(!jQuery.support.opacity&&name==="opacity"){if(set){style.zoom=1;var opacity=parseInt(value,10)+""==="NaN"?"":"alpha(opacity="+value*100+")";var filter=style.filter||jQuery.curCSS(elem,"filter")||"";style.filter=ralpha.test(filter)?filter.replace(ralpha,opacity):opacity;} -return style.filter&&style.filter.indexOf("opacity=")>=0?(parseFloat(ropacity.exec(style.filter)[1])/100)+"":"";} -if(rfloat.test(name)){name=styleFloat;} -name=name.replace(rdashAlpha,fcamelCase);if(set){style[name]=value;} -return style[name];},css:function(elem,name,force,extra){if(name==="width"||name==="height"){var val,props=cssShow,which=name==="width"?cssWidth:cssHeight;function getWH(){val=name==="width"?elem.offsetWidth:elem.offsetHeight;if(extra==="border"){return;} -jQuery.each(which,function(){if(!extra){val-=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;} -if(extra==="margin"){val+=parseFloat(jQuery.curCSS(elem,"margin"+this,true))||0;}else{val-=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;}});} -if(elem.offsetWidth!==0){getWH();}else{jQuery.swap(elem,props,getWH);} -return Math.max(0,Math.round(val));} -return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret,style=elem.style,filter;if(!jQuery.support.opacity&&name==="opacity"&&elem.currentStyle){ret=ropacity.test(elem.currentStyle.filter||"")?(parseFloat(RegExp.$1)/100)+"":"";return ret===""?"1":ret;} -if(rfloat.test(name)){name=styleFloat;} -if(!force&&style&&style[name]){ret=style[name];}else if(getComputedStyle){if(rfloat.test(name)){name="float";} -name=name.replace(rupper,"-$1").toLowerCase();var defaultView=elem.ownerDocument.defaultView;if(!defaultView){return null;} -var computedStyle=defaultView.getComputedStyle(elem,null);if(computedStyle){ret=computedStyle.getPropertyValue(name);} -if(name==="opacity"&&ret===""){ret="1";}}else if(elem.currentStyle){var camelCase=name.replace(rdashAlpha,fcamelCase);ret=elem.currentStyle[name]||elem.currentStyle[camelCase];if(!rnumpx.test(ret)&&rnum.test(ret)){var left=style.left,rsLeft=elem.runtimeStyle.left;elem.runtimeStyle.left=elem.currentStyle.left;style.left=camelCase==="fontSize"?"1em":(ret||0);ret=style.pixelLeft+"px";style.left=left;elem.runtimeStyle.left=rsLeft;}} -return ret;},swap:function(elem,options,callback){var old={};for(var name in options){old[name]=elem.style[name];elem.style[name]=options[name];} -callback.call(elem);for(var name in options){elem.style[name]=old[name];}}});if(jQuery.expr&&jQuery.expr.filters){jQuery.expr.filters.hidden=function(elem){var width=elem.offsetWidth,height=elem.offsetHeight,skip=elem.nodeName.toLowerCase()==="tr";return width===0&&height===0&&!skip?true:width>0&&height>0&&!skip?false:jQuery.curCSS(elem,"display")==="none";};jQuery.expr.filters.visible=function(elem){return!jQuery.expr.filters.hidden(elem);};} -var jsc=now(),rscript=//gi,rselectTextarea=/select|textarea/i,rinput=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,jsre=/=\?(&|$)/,rquery=/\?/,rts=/(\?|&)_=.*?(&|$)/,rurl=/^(\w+:)?\/\/([^\/?#]+)/,r20=/%20/g,_load=jQuery.fn.load;jQuery.fn.extend({load:function(url,params,callback){if(typeof url!=="string"){return _load.call(this,url);}else if(!this.length){return this;} -var off=url.indexOf(" ");if(off>=0){var selector=url.slice(off,url.length);url=url.slice(0,off);} -var type="GET";if(params){if(jQuery.isFunction(params)){callback=params;params=null;}else if(typeof params==="object"){params=jQuery.param(params,jQuery.ajaxSettings.traditional);type="POST";}} -var self=this;jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status==="success"||status==="notmodified"){self.html(selector?jQuery("
    ").append(res.responseText.replace(rscript,"")).find(selector):res.responseText);} -if(callback){self.each(callback,[res.responseText,status,res]);}}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return this.elements?jQuery.makeArray(this.elements):this;}).filter(function(){return this.name&&!this.disabled&&(this.checked||rselectTextarea.test(this.nodeName)||rinput.test(this.type));}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:jQuery.isArray(val)?jQuery.map(val,function(val,i){return{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});jQuery.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);};});jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){type=type||callback;callback=data;data=null;} -return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},post:function(url,data,callback,type){if(jQuery.isFunction(data)){type=type||callback;callback=data;data={};} -return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:window.XMLHttpRequest&&(window.location.protocol!=="file:"||!window.ActiveXObject)?function(){return new window.XMLHttpRequest();}:function(){try{return new window.ActiveXObject("Microsoft.XMLHTTP");}catch(e){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(origSettings){var s=jQuery.extend(true,{},jQuery.ajaxSettings,origSettings);var jsonp,status,data,callbackContext=origSettings&&origSettings.context||s,type=s.type.toUpperCase();if(s.data&&s.processData&&typeof s.data!=="string"){s.data=jQuery.param(s.data,s.traditional);} -if(s.dataType==="jsonp"){if(type==="GET"){if(!jsre.test(s.url)){s.url+=(rquery.test(s.url)?"&":"?")+(s.jsonp||"callback")+"=?";}}else if(!s.data||!jsre.test(s.data)){s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";} -s.dataType="json";} -if(s.dataType==="json"&&(s.data&&jsre.test(s.data)||jsre.test(s.url))){jsonp=s.jsonpCallback||("jsonp"+jsc++);if(s.data){s.data=(s.data+"").replace(jsre,"="+jsonp+"$1");} -s.url=s.url.replace(jsre,"="+jsonp+"$1");s.dataType="script";window[jsonp]=window[jsonp]||function(tmp){data=tmp;success();complete();window[jsonp]=undefined;try{delete window[jsonp];}catch(e){} -if(head){head.removeChild(script);}};} -if(s.dataType==="script"&&s.cache===null){s.cache=false;} -if(s.cache===false&&type==="GET"){var ts=now();var ret=s.url.replace(rts,"$1_="+ts+"$2");s.url=ret+((ret===s.url)?(rquery.test(s.url)?"&":"?")+"_="+ts:"");} -if(s.data&&type==="GET"){s.url+=(rquery.test(s.url)?"&":"?")+s.data;} -if(s.global&&!jQuery.active++){jQuery.event.trigger("ajaxStart");} -var parts=rurl.exec(s.url),remote=parts&&(parts[1]&&parts[1]!==location.protocol||parts[2]!==location.host);if(s.dataType==="script"&&type==="GET"&&remote){var head=document.getElementsByTagName("head")[0]||document.documentElement;var script=document.createElement("script");script.src=s.url;if(s.scriptCharset){script.charset=s.scriptCharset;} -if(!jsonp){var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){done=true;success();complete();script.onload=script.onreadystatechange=null;if(head&&script.parentNode){head.removeChild(script);}}};} -head.insertBefore(script,head.firstChild);return undefined;} -var requestDone=false;var xhr=s.xhr();if(!xhr){return;} -if(s.username){xhr.open(type,s.url,s.async,s.username,s.password);}else{xhr.open(type,s.url,s.async);} -try{if(s.data||origSettings&&origSettings.contentType){xhr.setRequestHeader("Content-Type",s.contentType);} -if(s.ifModified){if(jQuery.lastModified[s.url]){xhr.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]);} -if(jQuery.etag[s.url]){xhr.setRequestHeader("If-None-Match",jQuery.etag[s.url]);}} -if(!remote){xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");} -xhr.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){} -if(s.beforeSend&&s.beforeSend.call(callbackContext,xhr,s)===false){if(s.global&&!--jQuery.active){jQuery.event.trigger("ajaxStop");} -xhr.abort();return false;} -if(s.global){trigger("ajaxSend",[xhr,s]);} -var onreadystatechange=xhr.onreadystatechange=function(isTimeout){if(!xhr||xhr.readyState===0||isTimeout==="abort"){if(!requestDone){complete();} -requestDone=true;if(xhr){xhr.onreadystatechange=jQuery.noop;}}else if(!requestDone&&xhr&&(xhr.readyState===4||isTimeout==="timeout")){requestDone=true;xhr.onreadystatechange=jQuery.noop;status=isTimeout==="timeout"?"timeout":!jQuery.httpSuccess(xhr)?"error":s.ifModified&&jQuery.httpNotModified(xhr,s.url)?"notmodified":"success";var errMsg;if(status==="success"){try{data=jQuery.httpData(xhr,s.dataType,s);}catch(err){status="parsererror";errMsg=err;}} -if(status==="success"||status==="notmodified"){if(!jsonp){success();}}else{jQuery.handleError(s,xhr,status,errMsg);} -complete();if(isTimeout==="timeout"){xhr.abort();} -if(s.async){xhr=null;}}};try{var oldAbort=xhr.abort;xhr.abort=function(){if(xhr){oldAbort.call(xhr);} -onreadystatechange("abort");};}catch(e){} -if(s.async&&s.timeout>0){setTimeout(function(){if(xhr&&!requestDone){onreadystatechange("timeout");}},s.timeout);} -try{xhr.send(type==="POST"||type==="PUT"||type==="DELETE"?s.data:null);}catch(e){jQuery.handleError(s,xhr,null,e);complete();} -if(!s.async){onreadystatechange();} -function success(){if(s.success){s.success.call(callbackContext,data,status,xhr);} -if(s.global){trigger("ajaxSuccess",[xhr,s]);}} -function complete(){if(s.complete){s.complete.call(callbackContext,xhr,status);} -if(s.global){trigger("ajaxComplete",[xhr,s]);} -if(s.global&&!--jQuery.active){jQuery.event.trigger("ajaxStop");}} -function trigger(type,args){(s.context?jQuery(s.context):jQuery.event).trigger(type,args);} -return xhr;},handleError:function(s,xhr,status,e){if(s.error){s.error.call(s.context||s,xhr,status,e);} -if(s.global){(s.context?jQuery(s.context):jQuery.event).trigger("ajaxError",[xhr,s,e]);}},active:0,httpSuccess:function(xhr){try{return!xhr.status&&location.protocol==="file:"||(xhr.status>=200&&xhr.status<300)||xhr.status===304||xhr.status===1223||xhr.status===0;}catch(e){} -return false;},httpNotModified:function(xhr,url){var lastModified=xhr.getResponseHeader("Last-Modified"),etag=xhr.getResponseHeader("Etag");if(lastModified){jQuery.lastModified[url]=lastModified;} -if(etag){jQuery.etag[url]=etag;} -return xhr.status===304||xhr.status===0;},httpData:function(xhr,type,s){var ct=xhr.getResponseHeader("content-type")||"",xml=type==="xml"||!type&&ct.indexOf("xml")>=0,data=xml?xhr.responseXML:xhr.responseText;if(xml&&data.documentElement.nodeName==="parsererror"){jQuery.error("parsererror");} -if(s&&s.dataFilter){data=s.dataFilter(data,type);} -if(typeof data==="string"){if(type==="json"||!type&&ct.indexOf("json")>=0){data=jQuery.parseJSON(data);}else if(type==="script"||!type&&ct.indexOf("javascript")>=0){jQuery.globalEval(data);}} -return data;},param:function(a,traditional){var s=[];if(traditional===undefined){traditional=jQuery.ajaxSettings.traditional;} -if(jQuery.isArray(a)||a.jquery){jQuery.each(a,function(){add(this.name,this.value);});}else{for(var prefix in a){buildParams(prefix,a[prefix]);}} -return s.join("&").replace(r20,"+");function buildParams(prefix,obj){if(jQuery.isArray(obj)){jQuery.each(obj,function(i,v){if(traditional||/\[\]$/.test(prefix)){add(prefix,v);}else{buildParams(prefix+"["+(typeof v==="object"||jQuery.isArray(v)?i:"")+"]",v);}});}else if(!traditional&&obj!=null&&typeof obj==="object"){jQuery.each(obj,function(k,v){buildParams(prefix+"["+k+"]",v);});}else{add(prefix,obj);}} -function add(key,value){value=jQuery.isFunction(value)?value():value;s[s.length]=encodeURIComponent(key)+"="+encodeURIComponent(value);}}});var elemdisplay={},rfxtypes=/toggle|show|hide/,rfxnum=/^([+-]=)?([\d+-.]+)(.*)$/,timerId,fxAttrs=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];jQuery.fn.extend({show:function(speed,callback){if(speed||speed===0){return this.animate(genFx("show",3),speed,callback);}else{for(var i=0,l=this.length;i").appendTo("body");display=elem.css("display");if(display==="none"){display="block";} -elem.remove();elemdisplay[nodeName]=display;} -jQuery.data(this[i],"olddisplay",display);}} -for(var j=0,k=this.length;j=0;i--){if(timers[i].elem===this){if(gotoEnd){timers[i](true);} -timers.splice(i,1);}}});if(!gotoEnd){this.dequeue();} -return this;}});jQuery.each({slideDown:genFx("show",1),slideUp:genFx("hide",1),slideToggle:genFx("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(name,props){jQuery.fn[name]=function(speed,callback){return this.animate(props,speed,callback);};});jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&typeof speed==="object"?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&!jQuery.isFunction(easing)&&easing};opt.duration=jQuery.fx.off?0:typeof opt.duration==="number"?opt.duration:jQuery.fx.speeds[opt.duration]||jQuery.fx.speeds._default;opt.old=opt.complete;opt.complete=function(){if(opt.queue!==false){jQuery(this).dequeue();} -if(jQuery.isFunction(opt.old)){opt.old.call(this);}};return opt;},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;if(!options.orig){options.orig={};}}});jQuery.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this);} -(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style){this.elem.style.display="block";}},cur:function(force){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop];} -var r=parseFloat(jQuery.css(this.elem,this.prop,force));return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;},custom:function(from,to,unit){this.startTime=now();this.start=from;this.end=to;this.unit=unit||this.unit||"px";this.now=this.start;this.pos=this.state=0;var self=this;function t(gotoEnd){return self.step(gotoEnd);} -t.elem=this.elem;if(t()&&jQuery.timers.push(t)&&!timerId){timerId=setInterval(jQuery.fx.tick,13);}},show:function(){this.options.orig[this.prop]=jQuery.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());jQuery(this.elem).show();},hide:function(){this.options.orig[this.prop]=jQuery.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0);},step:function(gotoEnd){var t=now(),done=true;if(gotoEnd||t>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var i in this.options.curAnim){if(this.options.curAnim[i]!==true){done=false;}} -if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;var old=jQuery.data(this.elem,"olddisplay");this.elem.style.display=old?old:this.options.display;if(jQuery.css(this.elem,"display")==="none"){this.elem.style.display="block";}} -if(this.options.hide){jQuery(this.elem).hide();} -if(this.options.hide||this.options.show){for(var p in this.options.curAnim){jQuery.style(this.elem,p,this.options.orig[p]);}} -this.options.complete.call(this.elem);} -return false;}else{var n=t-this.startTime;this.state=n/this.options.duration;var specialEasing=this.options.specialEasing&&this.options.specialEasing[this.prop];var defaultEasing=this.options.easing||(jQuery.easing.swing?"swing":"linear");this.pos=jQuery.easing[specialEasing||defaultEasing](this.state,n,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update();} -return true;}};jQuery.extend(jQuery.fx,{tick:function(){var timers=jQuery.timers;for(var i=0;i
    ";jQuery.extend(container.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});container.innerHTML=html;body.insertBefore(container,body.firstChild);innerDiv=container.firstChild;checkDiv=innerDiv.firstChild;td=innerDiv.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(checkDiv.offsetTop!==5);this.doesAddBorderForTableAndCells=(td.offsetTop===5);checkDiv.style.position="fixed",checkDiv.style.top="20px";this.supportsFixedPosition=(checkDiv.offsetTop===20||checkDiv.offsetTop===15);checkDiv.style.position=checkDiv.style.top="";innerDiv.style.overflow="hidden",innerDiv.style.position="relative";this.subtractsBorderForOverflowNotVisible=(checkDiv.offsetTop===-5);this.doesNotIncludeMarginInBodyOffset=(body.offsetTop!==bodyMarginTop);body.removeChild(container);body=container=innerDiv=checkDiv=table=td=null;jQuery.offset.initialize=jQuery.noop;},bodyOffset:function(body){var top=body.offsetTop,left=body.offsetLeft;jQuery.offset.initialize();if(jQuery.offset.doesNotIncludeMarginInBodyOffset){top+=parseFloat(jQuery.curCSS(body,"marginTop",true))||0;left+=parseFloat(jQuery.curCSS(body,"marginLeft",true))||0;} -return{top:top,left:left};},setOffset:function(elem,options,i){if(/static/.test(jQuery.curCSS(elem,"position"))){elem.style.position="relative";} -var curElem=jQuery(elem),curOffset=curElem.offset(),curTop=parseInt(jQuery.curCSS(elem,"top",true),10)||0,curLeft=parseInt(jQuery.curCSS(elem,"left",true),10)||0;if(jQuery.isFunction(options)){options=options.call(elem,i,curOffset);} -var props={top:(options.top-curOffset.top)+curTop,left:(options.left-curOffset.left)+curLeft};if("using"in options){options.using.call(elem,props);}else{curElem.css(props);}}};jQuery.fn.extend({position:function(){if(!this[0]){return null;} -var elem=this[0],offsetParent=this.offsetParent(),offset=this.offset(),parentOffset=/^body|html$/i.test(offsetParent[0].nodeName)?{top:0,left:0}:offsetParent.offset();offset.top-=parseFloat(jQuery.curCSS(elem,"marginTop",true))||0;offset.left-=parseFloat(jQuery.curCSS(elem,"marginLeft",true))||0;parentOffset.top+=parseFloat(jQuery.curCSS(offsetParent[0],"borderTopWidth",true))||0;parentOffset.left+=parseFloat(jQuery.curCSS(offsetParent[0],"borderLeftWidth",true))||0;return{top:offset.top-parentOffset.top,left:offset.left-parentOffset.left};},offsetParent:function(){return this.map(function(){var offsetParent=this.offsetParent||document.body;while(offsetParent&&(!/^body|html$/i.test(offsetParent.nodeName)&&jQuery.css(offsetParent,"position")==="static")){offsetParent=offsetParent.offsetParent;} -return offsetParent;});}});jQuery.each(["Left","Top"],function(i,name){var method="scroll"+name;jQuery.fn[method]=function(val){var elem=this[0],win;if(!elem){return null;} -if(val!==undefined){return this.each(function(){win=getWindow(this);if(win){win.scrollTo(!i?val:jQuery(win).scrollLeft(),i?val:jQuery(win).scrollTop());}else{this[method]=val;}});}else{win=getWindow(elem);return win?("pageXOffset"in win)?win[i?"pageYOffset":"pageXOffset"]:jQuery.support.boxModel&&win.document.documentElement[method]||win.document.body[method]:elem[method];}};});function getWindow(elem){return("scrollTo"in elem&&elem.document)?elem:elem.nodeType===9?elem.defaultView||elem.parentWindow:false;} -jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase();jQuery.fn["inner"+name]=function(){return this[0]?jQuery.css(this[0],type,false,"padding"):null;};jQuery.fn["outer"+name]=function(margin){return this[0]?jQuery.css(this[0],type,false,margin?"margin":"border"):null;};jQuery.fn[type]=function(size){var elem=this[0];if(!elem){return size==null?null:this;} -if(jQuery.isFunction(size)){return this.each(function(i){var self=jQuery(this);self[type](size.call(this,i,self[type]()));});} -return("scrollTo"in elem&&elem.document)?elem.document.compatMode==="CSS1Compat"&&elem.document.documentElement["client"+name]||elem.document.body["client"+name]:(elem.nodeType===9)?Math.max(elem.documentElement["client"+name],elem.body["scroll"+name],elem.documentElement["scroll"+name],elem.body["offset"+name],elem.documentElement["offset"+name]):size===undefined?jQuery.css(elem,type):this.css(type,typeof size==="string"?size:size+"px");};});window.jQuery=window.$=jQuery;})(window); \ No newline at end of file diff --git a/v2/dotclear/admin/js/jquery/jquery.modal.js b/v2/dotclear/admin/js/jquery/jquery.modal.js deleted file mode 100644 index 03703e9..0000000 --- a/v2/dotclear/admin/js/jquery/jquery.modal.js +++ /dev/null @@ -1,17 +0,0 @@ - -(function($){if(/^1\.(0|1)\./.test($.fn.jquery)||/^1\.2\.(0|1|2|3|4|5)/.test($.fn.jquery)){throw('Modal requieres jQuery v1.2.6 or later. You are using v'+$.fn.jquery);return;} -$.modal=function(data,params){this.params=$.extend(this.params,params);return this.build(data);};$.modal.version='1.0';$.modal.prototype={params:{width:null,height:null,speed:300,opacity:0.9,loader_img:'loader.gif',loader_txt:'loading...',close_img:'close.png',close_txt:'close',on_close:function(){}},ctrl:{box:$(),loader:$(),overlay:$('
    '),hidden:$()},build:function(data){this.ctrl.loader=$('
    '+this.params.loader_txt+'
    ');this.addOverlay();var size=this.getBoxSize(this.ctrl.loading);this.ctrl.box=this.getBox(this.ctrl.loading,{top:Math.round($(window).height()/2+$(window).scrollTop()-size.h/2),left:Math.round($(window).width()/2+$(window).scrollLeft()-size.w/2),visibility:'hidden'});this.ctrl.overlay.after(this.ctrl.box);if(data!=undefined){this.updateBox(data);this.data=data;} -return this;},updateBox:function(data,fn){var This=this;this.hideCloser();fn=$.isFunction(fn)?fn:function(){};var content=$('div.jq-modal-content',this.ctrl.box);content.empty().append(this.ctrl.loader);var size=this.getBoxSize(data,this.params.width,this.params.height);var top=Math.round($(window).height()/2+$(window).scrollTop()-size.h/2);var left=Math.round($(window).width()/2+$(window).scrollLeft()-size.w/2);this.ctrl.box.css('visibility','visible').animate({top:top<0?0:top,left:left<0?0:left,width:size.w,height:size.h},this.params.speed,function(){This.setContentSize(content,This.params.width,This.params.height);content.empty().append(data).css('opacity',0).fadeTo(This.params.speed,1,function(){fn.call(This,content);});This.showCloser();});},getBox:function(data,css,content_w,content_h){var box=$('
    '+'
    '+'
    ').css($.extend({position:'absolute',top:0,left:0,zIndex:100},css));if(data!=undefined){$('div.jq-modal-content',box).append(data);} -this.setContentSize($('div.jq-modal-content',box),content_w,content_h);return box;},getBoxSize:function(data,content_w,content_h){var box=this.getBox(data,{visibility:'hidden'},content_w,content_h);this.ctrl.overlay.after(box);var size={w:box.width(),h:box.height()};box.remove();box=null;return size;},setContentSize:function(content,w,h){content.css({width:w>0?w:'auto',height:h>0?h:'auto'});},showCloser:function(){if($('div.jq-modal-closer',this.ctrl.box).length>0){$('div.jq-modal-closer',this.ctrl.box).show();return;} -$('div.jq-modal-container',this.ctrl.box).append('');var This=this;var close=$('div.jq-modal-closer a',this.ctrl.box) -close.css({background:'transparent url('+this.params.close_img+') no-repeat'}).click(function(){This.removeOverlay();return false;});if(document.all){close[0].runtimeStyle.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+this.params.close_img+'", sizingMethod="crop")';close[0].runtimeStyle.backgroundImage="none"}},hideCloser:function(){$('div.jq-modal-closer',this.ctrl.box).hide();},addOverlay:function(){var This=this;if(document.all){this.ctrl.hidden=$('select:visible, object:visible, embed:visible').css('visibility','hidden');} -this.ctrl.overlay.css({backgroundColor:'#000',position:'absolute',top:0,left:0,zIndex:90,opacity:this.params.opacity}).appendTo('body').dblclick(function(){This.removeOverlay();});this.resizeOverlay({data:this.ctrl});$(window).bind('resize.modal',this.ctrl,this.resizeOverlay);$(document).bind('keypress.modal',this,this.keyRemove);},resizeOverlay:function(e){e.data.overlay.css({width:$(window).width(),height:$(document).height()});if(e.data.box.parents('body').length>0){var top=Math.round($(window).height()/2+$(window).scrollTop()-e.data.box.height()/2);var left=Math.round($(window).width()/2+$(window).scrollLeft()-e.data.box.width()/2);e.data.box.css({top:top<0?0:top,left:left<0?0:left});}},keyRemove:function(e){if(e.keyCode==27){e.data.removeOverlay();} -return true;},removeOverlay:function(){$(window).unbind('resize.modal');$(document).unbind('keypress');this.params.on_close.apply(this);this.ctrl.overlay.remove();this.ctrl.hidden.css('visibility','visible');this.ctrl.box.remove();this.ctrl.box=$();}};})(jQuery);(function($){$.fn.modalImages=function(params){params=$.extend(this.params,params);var links=new Array();this.each(function(){if($(this).attr('href')==''||$(this).attr('href')==undefined||$(this).attr('href')=='#'){return false;} -var index=links.length;links.push($(this));$(this).click(function(){new $.modalImages(index,links,params);return false;});return true;});return this;};$.modalImages=function(index,links,params){this.links=links;this.modal=new $.modal(null,params);this.showImage(index);};$.modalImages.prototype={params:{prev_txt:'previous',next_txt:'next',prev_img:'prev.png',next_img:'next.png',blank_img:'blank.gif'},showImage:function(index){var This=this;$(document).unbind('keypress.modalImage');if(this.links[index]==undefined){this.modal.removeOverlay();} -var link=this.links[index];var modal=this.modal;var res=$('
    ');res.append('');var thumb=$('img:first',link);if(thumb.length>0&&thumb.attr('title')){res.append(''+thumb.attr('title')+'');}else if(link.attr('title')){res.append(''+link.attr('title')+'');} -if(index!=0){$('prev').appendTo(res);} -if(index+1next').appendTo(res);} -var img=new Image();if(this.modal.ctrl.box.css('visibility')=='visible'){$('div.jq-modal-content',this.modal.ctrl.box).empty().append(this.modal.ctrl.loader);}else{this.modal.updateBox(this.modal.ctrl.loader);} -img.onload=function(){modal.updateBox(res,function(){var Img=$('div.jq-modal-content img',this.ctrl.box);This.navBtnStyle($('a.jq-modal-next',this.ctrl.box),true).css('height',Img.height()).bind('click',index+1,navClick);This.navBtnStyle($('a.jq-modal-prev',this.ctrl.box),false).css('height',Img.height()).bind('click',index-1,navClick);Img.click(function(){This.modal.removeOverlay();});$(document).bind('keypress.modalImage',navKey);});this.onload=function(){};};img.src=link.attr('href');var navClick=function(e){This.showImage(e.data);return false;};var navKey=function(e){var key=String.fromCharCode(e.which).toLowerCase();if((key=='n'||e.keyCode==39)&&index+1').css({border:'none',width:w,height:h});return new $.modal(iframe);};$.fn.modalWeb=function(w,h){this.click(function(){if(this.href!=undefined){$.modalWeb(this.href,w,h);} -return false;});};})(jQuery); \ No newline at end of file diff --git a/v2/dotclear/admin/js/jquery/jquery.pageTabs.js b/v2/dotclear/admin/js/jquery/jquery.pageTabs.js deleted file mode 100644 index 5cca2c3..0000000 --- a/v2/dotclear/admin/js/jquery/jquery.pageTabs.js +++ /dev/null @@ -1,4 +0,0 @@ - -jQuery.pageTabs=function(start_tab,settings){return new jQuery._pageTabs(start_tab,settings);};jQuery._pageTabs=function(start_tab,settings){var defaults={className:'multi-part',listClassName:'part-tabs',breakerClassName:'clear'};var index=start_tab?start_tab:0;this.params=jQuery.extend(defaults,settings);this.divs=jQuery('div.'+this.params.className);this.createList();this.showDiv(index);};jQuery._pageTabs.prototype={items:new Array(),createList:function(){if(this.divs.length<=0){return;} -this.block=document.createElement('div');this.block.className=this.params.listClassName;this.list=document.createElement('ul');this.block.appendChild(this.list);var li,a;var This=this;var i=0;jQuery('.'+this.params.className).each(function(){if(this.tagName=="DIV"){li=document.createElement('li');a=document.createElement('a');a.appendChild(document.createTextNode(this.title));this.title='';a.href='#';a.fn=This.showDiv;a.index=this.id||i;a.obj=This;jQuery(a).click(function(){this.fn.call(this.obj,this.index);return false;});li.appendChild(a);This.list.appendChild(li);This.items[i]=li;i++;}else{li=document.createElement('li');li.className=This.params.listClassName+'-link';li.appendChild(this);This.list.appendChild(li);}});this.breaker=document.createElement('br');this.breaker.className=this.params.breakerClassName;jQuery(this.divs.get(0)).before(this.block);jQuery(this.block).after(this.breaker);},showDiv:function(index){var This=this;var i=0;var to_trigger=null;this.divs.each(function(){if((this.id!=''&&this.id==index)||i==index){jQuery(this).show(0,positionFooter);This.items[i].className=This.params.listClassName+'-active';to_trigger=i;}else{jQuery(this).hide(0,positionFooter);This.items[i].className='';} -i++;});if(to_trigger!=null){jQuery(this.divs[to_trigger]).onetabload();jQuery(this.divs[to_trigger]).tabload();}}};jQuery.fn.tabload=function(f){this.each(function(){if(f){chainHandler(this,'tabload',f)}else{var h=this.tabload;if(h){h.apply(this);}}});return this;};jQuery.fn.onetabload=function(f){this.each(function(){if(f){chainHandler(this,'onetabload',f);}else{var h=this.onetabload;if(h!=null){h.apply(this);this.onetabload=null;}}});return this;}; \ No newline at end of file diff --git a/v2/dotclear/admin/js/jsToolBar/jsToolBar.dotclear.js b/v2/dotclear/admin/js/jsToolBar/jsToolBar.dotclear.js deleted file mode 100644 index 83dd320..0000000 --- a/v2/dotclear/admin/js/jsToolBar/jsToolBar.dotclear.js +++ /dev/null @@ -1,35 +0,0 @@ - -jsToolBar.prototype.elements.link.data={};jsToolBar.prototype.elements.link.fncall={};jsToolBar.prototype.elements.link.open_url='popup_link.php';jsToolBar.prototype.elements.link.popup=function(args){window.the_toolbar=this;args=args||'';this.elements.link.data={};var url=this.elements.link.open_url+args;var p_win=window.open(url,'dc_popup','alwaysRaised=yes,dependent=yes,toolbar=yes,height=420,width=520,'+'menubar=no,resizable=yes,scrollbars=yes,status=no');};jsToolBar.prototype.elements.link.fn.wiki=function(){this.elements.link.popup.call(this,'?hreflang='+this.elements.link.default_hreflang);};jsToolBar.prototype.elements.link.fncall.wiki=function(){var data=this.elements.link.data;if(data.href==''){return;} -var etag='|'+data.href;if(data.hreflang){etag+='|'+data.hreflang;} -if(data.title){if(!data.hreflang){etag+='|';} -etag+='|'+data.title;} -if(data.content){this.encloseSelection('['+data.content,etag+']');}else{this.encloseSelection('[',etag+']');}};jsToolBar.prototype.elements.link.fn.xhtml=function(){this.elements.link.popup.call(this,'?hreflang='+this.elements.link.default_hreflang);};jsToolBar.prototype.elements.link.fncall.xhtml=function(){var data=this.elements.link.data;if(data.href==''){return;} -var stag='','>').replace('<','<').replace('"','"')+'"';} -res+=' />';if(d.link){var ltitle=(alt)?' title="'+alt.replace('&','&').replace('>','>').replace('<','<').replace('"','"')+'"':'';res=''+res+'';} -return res;});};jsToolBar.prototype.elements.img.fn.wysiwyg=function(){var src=this.elements.img.prompt.call(this);if(!src){return;} -var img=this.iwin.document.createElement('img');img.src=src;img.setAttribute('alt',this.getSelectedText());this.insertNode(img);};jsToolBar.prototype.elements.img_select.fn.wysiwyg=function(){this.elements.img_select.popup.call(this);};jsToolBar.prototype.elements.img_select.fncall.wysiwyg=function(){var d=this.elements.img_select.data;var alt=(this.getSelectedText())?this.getSelectedText():d.title;if(d.src==undefined){return;} -var img=this.iwin.document.createElement('img');img.src=d.src;img.setAttribute('alt',alt);if(d.alignment=='left'){if(img.style.styleFloat!=undefined){img.style.styleFloat='left';}else{img.style.cssFloat='left';} -img.style.marginTop=0;img.style.marginRight='1em';img.style.marginBottom='1em';img.style.marginLeft=0;}else if(d.alignment=='right'){if(img.style.styleFloat!=undefined){img.style.styleFloat='right';}else{img.style.cssFloat='right';} -img.style.marginTop=0;img.style.marginRight=0;img.style.marginBottom='1em';img.style.marginLeft='1em';}else if(d.alignment=='center'){img.style.marginTop=0;img.style.marginRight='auto';img.style.marginBottom=0;img.style.marginLeft='auto';img.style.display='block';} -if(d.description){img.setAttribute('title',d.description);} -if(d.link){var a=this.iwin.document.createElement('a');a.href=d.url;if(alt){a.setAttribute('title',alt);} -a.appendChild(img);this.insertNode(a);}else{this.insertNode(img);}};jsToolBar.prototype.elements.mp3_insert={fncall:{},data:{}};jsToolBar.prototype.elements.mp3_insert.fncall.wiki=function(){var d=this.elements.mp3_insert.data;if(d.player==undefined){return;} -this.encloseSelection('','',function(str){return'\n///html\n'+d.player+'///\n';});};jsToolBar.prototype.elements.mp3_insert.fncall.xhtml=function(){var d=this.elements.mp3_insert.data;if(d.player==undefined){return;} -this.encloseSelection('','',function(str){return'\n'+d.player+'\n';});};jsToolBar.prototype.elements.mp3_insert.fncall.wysiwyg=function(){return;};jsToolBar.prototype.elements.flv_insert={fncall:{},data:{}};jsToolBar.prototype.elements.flv_insert.fncall.wiki=function(){var d=this.elements.flv_insert.data;if(d.player==undefined){return;} -this.encloseSelection('','',function(str){return'\n///html\n'+d.player+'///\n';});};jsToolBar.prototype.elements.flv_insert.fncall.xhtml=function(){var d=this.elements.flv_insert.data;if(d.player==undefined){return;} -this.encloseSelection('','',function(str){return'\n'+d.player+'\n';});};jsToolBar.prototype.elements.flv_insert.fncall.wysiwyg=function(){return;};jsToolBar.prototype.elements.post_link={type:'button',title:'Link to an entry',fn:{},open_url:'popup_posts.php',data:{},popup:function(){window.the_toolbar=this;this.elements.img_select.data={};var p_win=window.open(this.elements.post_link.open_url,'dc_popup','alwaysRaised=yes,dependent=yes,toolbar=yes,height=500,width=760,'+'menubar=no,resizable=yes,scrollbars=yes,status=no');}};jsToolBar.prototype.elements.post_link.fn.wiki=function(){this.elements.post_link.popup.call(this);};jsToolBar.prototype.elements.post_link.fn.xhtml=function(){this.elements.post_link.popup.call(this);};jsToolBar.prototype.elements.post_link.fn.wysiwyg=function(){this.elements.post_link.popup.call(this);};jsToolBar.prototype.elements.space3={type:'space'}; \ No newline at end of file diff --git a/v2/dotclear/admin/js/jsToolBar/jsToolBar.js b/v2/dotclear/admin/js/jsToolBar/jsToolBar.js deleted file mode 100644 index 091df72..0000000 --- a/v2/dotclear/admin/js/jsToolBar/jsToolBar.js +++ /dev/null @@ -1,29 +0,0 @@ - -function jsToolBar(textarea){if(!document.createElement){return;} -if(!textarea){return;} -if((typeof(document["selection"])=="undefined")&&(typeof(textarea["setSelectionRange"])=="undefined")){return;} -this.textarea=textarea;this.editor=document.createElement('div');this.editor.className='jstEditor';this.textarea.parentNode.insertBefore(this.editor,this.textarea);this.editor.appendChild(this.textarea);this.toolbar=document.createElement("div");this.toolbar.className='jstElements';this.editor.parentNode.insertBefore(this.toolbar,this.editor);if(navigator.appName=='Microsoft Internet Explorer') -{if(this.editor.addEventListener) -{this.handle=document.createElement('div');this.handle.className='jstHandle';var dragStart=this.resizeDragStart;var This=this;this.handle.addEventListener('mousedown',function(event){dragStart.call(This,event);},false);this.editor.parentNode.insertBefore(this.handle,this.editor.nextSibling);}} -this.context=null;this.toolNodes={};};function jsButton(title,fn,scope,className){this.title=title||null;this.fn=fn||function(){};this.scope=scope||null;this.className=className||null;};jsButton.prototype.draw=function(){if(!this.scope)return null;var button=document.createElement('button');button.setAttribute('type','button');if(this.className)button.className=this.className;button.title=this.title;var span=document.createElement('span');span.appendChild(document.createTextNode(this.title));button.appendChild(span);if(this.icon!=undefined){button.style.backgroundImage='url('+this.icon+')';} -if(typeof(this.fn)=='function'){var This=this;button.onclick=function(){try{This.fn.apply(This.scope,arguments)}catch(e){}return false;};} -return button;};function jsSpace(id){this.id=id||null;this.width=null;};jsSpace.prototype.draw=function(){var span=document.createElement('span');if(this.id)span.id=this.id;span.appendChild(document.createTextNode(String.fromCharCode(160)));span.className='jstSpacer';if(this.width)span.style.marginRight=this.width+'px';return span;};function jsCombo(title,options,scope,fn,className){this.title=title||null;this.options=options||null;this.scope=scope||null;this.fn=fn||function(){};this.className=className||null;};jsCombo.prototype.draw=function(){if(!this.scope||!this.options)return null;var select=document.createElement('select');if(this.className)select.className=className;select.title=this.title;for(var o in this.options){var option=document.createElement('option');option.value=o;option.appendChild(document.createTextNode(this.options[o]));select.appendChild(option);} -var This=this;select.onchange=function(){try{This.fn.call(This.scope,this.value);}catch(e){alert(e);} -return false;};return select;};jsToolBar.prototype={base_url:'',mode:'xhtml',elements:{},getMode:function(){return this.mode;},setMode:function(mode){this.mode=mode||'xhtml';},switchMode:function(mode){mode=mode||'xhtml';this.draw(mode);},button:function(toolName){var tool=this.elements[toolName];if(typeof tool.fn[this.mode]!='function')return null;var b=new jsButton(tool.title,tool.fn[this.mode],this,'jstb_'+toolName);if(tool.icon!=undefined){b.icon=tool.icon;} -return b;},space:function(toolName){var tool=new jsSpace(toolName);if(this.elements[toolName].width!==undefined){tool.width=this.elements[toolName].width;} -return tool;},combo:function(toolName){var tool=this.elements[toolName];var length=tool[this.mode].list.length;if(typeof tool[this.mode].fn!='function'||length==0){return null;}else{var options={};for(var i=0;i','');}catch(e){};this.toolNodes.blocks.value='nonebis';}},wiki:{list:['nonebis','h2','h3','h4','h5'],fn:function(opt){switch(opt){case'nonebis':this.textarea.focus();break;case'h2':this.encloseSelection('!!!!');break;case'h3':this.encloseSelection('!!!');break;case'h4':this.encloseSelection('!!');break;case'h5':this.encloseSelection('!');break;} -this.toolNodes.blocks.value='nonebis';}}};jsToolBar.prototype.elements.space0={type:'space'};jsToolBar.prototype.elements.strong={type:'button',title:'Strong emphasis',fn:{wiki:function(){this.singleTag('__')},xhtml:function(){this.singleTag('','')}}};jsToolBar.prototype.elements.em={type:'button',title:'Emphasis',fn:{wiki:function(){this.singleTag("''")},xhtml:function(){this.singleTag('','')}}};jsToolBar.prototype.elements.ins={type:'button',title:'Inserted',fn:{wiki:function(){this.singleTag('++')},xhtml:function(){this.singleTag('','')}}};jsToolBar.prototype.elements.del={type:'button',title:'Deleted',fn:{wiki:function(){this.singleTag('--')},xhtml:function(){this.singleTag('','')}}};jsToolBar.prototype.elements.quote={type:'button',title:'Inline quote',fn:{wiki:function(){this.singleTag('{{','}}')},xhtml:function(){this.singleTag('','')}}};jsToolBar.prototype.elements.code={type:'button',title:'Code',fn:{wiki:function(){this.singleTag('@@')},xhtml:function(){this.singleTag('','')}}};jsToolBar.prototype.elements.space1={type:'space'};jsToolBar.prototype.elements.br={type:'button',title:'Line break',fn:{wiki:function(){this.encloseSelection("%%%\n",'')},xhtml:function(){this.encloseSelection("
    \n",'')}}};jsToolBar.prototype.elements.space2={type:'space'};jsToolBar.prototype.elements.blockquote={type:'button',title:'Blockquote',fn:{xhtml:function(){this.singleTag('
    ','
    ')},wiki:function(){this.encloseSelection("\n",'',function(str){str=str.replace(/\r/g,'');return'> '+str.replace(/\n/g,"\n> ");});}}};jsToolBar.prototype.elements.pre={type:'button',title:'Preformated text',fn:{wiki:function(){this.singleTag("///\n","\n///")},xhtml:function(){this.singleTag('
    ','
    ')}}};jsToolBar.prototype.elements.ul={type:'button',title:'Unordered list',fn:{wiki:function(){this.encloseSelection('','',function(str){str=str.replace(/\r/g,'');return'* '+str.replace(/\n/g,"\n* ");});},xhtml:function(){this.encloseSelection('','',function(str){str=str.replace(/\r/g,'');str=str.replace(/\n/g,"\n
  • ");return"
      \n
    • "+str+"
    • \n
    ";});}}};jsToolBar.prototype.elements.ol={type:'button',title:'Ordered list',fn:{wiki:function(){this.encloseSelection('','',function(str){str=str.replace(/\r/g,'');return'# '+str.replace(/\n/g,"\n# ");});},xhtml:function(){this.encloseSelection('','',function(str){str=str.replace(/\r/g,'');str=str.replace(/\n/g,"
  • \n
  • ");return"
      \n
    1. "+str+"
    2. \n
    ";});}}};jsToolBar.prototype.elements.space3={type:'space'};jsToolBar.prototype.elements.link={type:'button',title:'Link',fn:{},href_prompt:'Please give page URL:',hreflang_prompt:'Language of this page:',default_hreflang:'',prompt:function(href,hreflang){href=href||'';hreflang=hreflang||this.elements.link.default_hreflang;href=window.prompt(this.elements.link.href_prompt,href);if(!href){return false;} -hreflang=window.prompt(this.elements.link.hreflang_prompt,hreflang);return{href:this.stripBaseURL(href),hreflang:hreflang};}};jsToolBar.prototype.elements.link.fn.xhtml=function(){var link=this.elements.link.prompt.call(this);if(link){var stag='';var etag='';this.encloseSelection(stag,etag);}};jsToolBar.prototype.elements.link.fn.wiki=function(){var link=this.elements.link.prompt.call(this);if(link){var stag='[';var etag='|'+link.href;if(link.hreflang){etag=etag+'|'+link.hreflang;} -etag=etag+']';this.encloseSelection(stag,etag);}};jsToolBar.prototype.elements.img={type:'button',title:'External image',src_prompt:'Please give image URL:',fn:{},prompt:function(src){src=src||'';return this.stripBaseURL(window.prompt(this.elements.img.src_prompt,src));}};jsToolBar.prototype.elements.img.fn.xhtml=function(){var src=this.elements.img.prompt.call(this);if(src){this.encloseSelection('','',function(str){if(str){return''+str+'';}else{return'';}});}};jsToolBar.prototype.elements.img.fn.wiki=function(){var src=this.elements.img.prompt.call(this);if(src){this.encloseSelection('','',function(str){if(str){return'(('+src+'|'+str+'))';}else{return'(('+src+'))';}});}}; \ No newline at end of file diff --git a/v2/dotclear/admin/js/jsToolBar/jsToolBar.wysiwyg.js b/v2/dotclear/admin/js/jsToolBar/jsToolBar.wysiwyg.js deleted file mode 100644 index c1e0b0a..0000000 --- a/v2/dotclear/admin/js/jsToolBar/jsToolBar.wysiwyg.js +++ /dev/null @@ -1,47 +0,0 @@ - -jsToolBar.prototype.can_wwg=(document.designMode!=undefined);jsToolBar.prototype.iframe=null;jsToolBar.prototype.iwin=null;jsToolBar.prototype.ibody=null;jsToolBar.prototype.iframe_css=null;jsToolBar.prototype.drawToolBar=jsToolBar.prototype.draw;jsToolBar.prototype.draw=function(mode){mode=mode||'xhtml';if(this.can_wwg){this.mode='wysiwyg';this.drawToolBar('wysiwyg');this.initWindow();}else{this.drawToolBar(mode);}};jsToolBar.prototype.switchMode=function(mode){mode=mode||'xhtml';if(mode=='xhtml'){this.draw(mode);}else{if(this.wwg_mode){this.syncContents('iframe');} -this.removeEditor();this.textarea.style.display='';this.drawToolBar(mode);}};jsToolBar.prototype.syncContents=function(from){from=from||'textarea';var This=this;if(from=='textarea'){initContent();}else{this.validBlockquote();var html=this.applyHtmlFilters(this.ibody.innerHTML);if(html=='
    '){html='

    ';} -this.textarea.value=html;} -function initContent(){if(!This.iframe.contentWindow.document||!This.iframe.contentWindow.document.body){setTimeout(initContent,1);return;} -This.ibody=This.iframe.contentWindow.document.body;if(This.textarea.value!=''&&This.textarea.value!='

    '){This.ibody.innerHTML=This.applyWysiwygFilters(This.textarea.value);if(This.ibody.createTextRange){var IErange=This.ibody.createTextRange();IErange.execCommand("SelectAll");IErange.collapse();IErange.select();}}else if(window.navigator.product!=undefined&&window.navigator.product=='Gecko'){This.ibody.innerHTML='


    ';}else{var idoc=This.iwin.document;var para=idoc.createElement('p');para.appendChild(idoc.createTextNode(''));while(idoc.body.hasChildNodes()){idoc.body.removeChild(idoc.body.lastChild);} -idoc.body.appendChild(para);}}};jsToolBar.prototype.htmlFilters={tagsoup:function(str){return this.tagsoup2xhtml(str);}};jsToolBar.prototype.applyHtmlFilters=function(str){for(var fn in this.htmlFilters){str=this.htmlFilters[fn].call(this,str);} -return str;};jsToolBar.prototype.wysiwygFilters={};jsToolBar.prototype.applyWysiwygFilters=function(str){for(var fn in this.wysiwygFilters){str=this.wysiwygFilters[fn].call(this,str);} -return str;};jsToolBar.prototype.switchEdit=function(){if(this.wwg_mode){this.textarea.style.display='';this.iframe.style.display='none';this.syncContents('iframe');this.drawToolBar('xhtml');this.wwg_mode=false;this.focusEditor();}else{this.iframe.style.display='';this.textarea.style.display='none';this.syncContents('textarea');this.drawToolBar('wysiwyg');this.wwg_mode=true;this.focusEditor();} -this.setSwitcher();};jsToolBar.prototype.initWindow=function(){var This=this;this.iframe=document.createElement('iframe');this.textarea.parentNode.insertBefore(this.iframe,this.textarea.nextSibling);this.switcher=document.createElement('ul');this.switcher.className='jstSwitcher';this.editor.appendChild(this.switcher);this.iframe.height=this.textarea.offsetHeight+0;this.iframe.width=this.textarea.offsetWidth+0;if(this.textarea.tabIndex!=undefined){this.iframe.tabIndex=this.textarea.tabIndex;} -function initIframe(){var doc=This.iframe.contentWindow.document;if(!doc){setTimeout(initIframe,1);return false;} -doc.open();var html='\n'+'\n'+'\n'+ -(This.base_url!=''?'':'')+'\n'+'\n'+'\n'+'';doc.write(html);doc.close();if(document.all){doc.designMode='on';} -This.iwin=This.iframe.contentWindow;This.syncContents('textarea');if(This.wwg_mode==undefined){This.wwg_mode=true;} -if(This.wwg_mode){This.textarea.style.display='none';}else{This.iframe.style.display='none';} -if(This.textarea.form){chainHandler(This.textarea.form,'onsubmit',function(){if(This.wwg_mode){This.syncContents('iframe');}});} -for(var evt in This.iwinEvents){var event=This.iwinEvents[evt];This.addIwinEvent(This.iframe.contentWindow.document,event.type,event.fn,This);} -This.setSwitcher();setTimeout(function(){This.focusEditor();},1);return true;} -initIframe();};jsToolBar.prototype.addIwinEvent=function(target,type,fn,scope){var myFn=function(e){fn.call(scope,e)};addEvent(target,type,myFn,true);addEvent(scope.iwin,'unload',function(){removeEvent(target,type,myFn,true);},true);};jsToolBar.prototype.iwinEvents={block1:{type:'mouseup',fn:function(){this.adjustBlockLevelCombo()}},block2:{type:'keyup',fn:function(){this.adjustBlockLevelCombo()}}};jsToolBar.prototype.switcher_visual_title='visual';jsToolBar.prototype.switcher_source_title='source';jsToolBar.prototype.setSwitcher=function(){while(this.switcher.hasChildNodes()){this.switcher.removeChild(this.switcher.firstChild);} -var This=this;function setLink(title,link){var li=document.createElement('li');if(link){var a=document.createElement('a');a.href='#';a.editor=This;a.onclick=function(){this.editor.switchEdit();return false;};a.appendChild(document.createTextNode(title));}else{li.className='jstSwitcherCurrent';a=document.createTextNode(title);} -li.appendChild(a);This.switcher.appendChild(li);} -setLink(this.switcher_visual_title,!this.wwg_mode);setLink(this.switcher_source_title,this.wwg_mode);};jsToolBar.prototype.removeEditor=function(){if(this.iframe!=null){this.iframe.parentNode.removeChild(this.iframe);this.iframe=null;} -if(this.switcher!=undefined&&this.switcher.parentNode!=undefined){this.switcher.parentNode.removeChild(this.switcher);}};jsToolBar.prototype.focusEditor=function(){if(this.wwg_mode){try{this.iwin.document.designMode='on';}catch(e){};var This=this;setTimeout(function(){This.iframe.contentWindow.focus()},1);}else{this.textarea.focus();}};jsToolBar.prototype.resizeSetStartH=function(){if(this.wwg_mode&&this.iframe!=undefined){this.dragStartH=this.iframe.offsetHeight;return;} -this.dragStartH=this.textarea.offsetHeight+0;};jsToolBar.prototype.resizeDragMove=function(event){var new_height=(this.dragStartH+event.clientY-this.dragStartY)+'px';if(this.iframe!=undefined){this.iframe.style.height=new_height;} -this.textarea.style.height=new_height;};jsToolBar.prototype.insertNode=function(node){var range;if(this.iwin.getSelection){var sel=this.iwin.getSelection();range=sel.getRangeAt(0);sel.removeAllRanges();range.deleteContents();range.insertNode(node);range.selectNodeContents(node);range.setEndAfter(node);if(range.endContainer.childNodes.length>range.endOffset&&range.endContainer.nodeType!=Node.TEXT_NODE){range.setEnd(range.endContainer.childNodes[range.endOffset],0);}else{range.setEnd(range.endContainer.childNodes[0]);} -sel.addRange(range);sel.collapseToEnd();}else{var p=this.iwin.document.createElement('div');p.appendChild(node);range=this.iwin.document.selection.createRange();range.execCommand('delete');range.pasteHTML(p.innerHTML);range.collapse(false);range.select();} -this.iwin.focus();};jsToolBar.prototype.getSelectedNode=function(){if(this.iwin.getSelection){var sel=this.iwin.getSelection();var range=sel.getRangeAt(0);var content=range.cloneContents();}else{var sel=this.iwin.document.selection;var d=this.iwin.document.createElement('div');d.innerHTML=sel.createRange().htmlText;var content=this.iwin.document.createDocumentFragment();for(var i=0;i/gim,''],[/[\w\W]*?<\/style>/gim,''],[/<\/?font[\w\W]*?>/gim,''],[/<(\/?)(B|b|STRONG)([\s>\/])/g,"<$1strong$3"],[/<(\/?)(I|i|EM)([\s>\/])/g,"<$1em$3"],[/]*?[^\/])>/gi,""],[/]*?[^\/])>/gi,""],[/]*?[^\/])>/gi,""],[/]*?[^\/])>/gi,""],[/]*?[^\/])>/gi,""],[/
    ]*?[^\/])>/gi,"
    "],[/
    ]*?[^\/])>/gi,"
    "],[/<(\/?)U([\s>\/])/gi,"<$1ins$2"],[/<(\/?)STRIKE([\s>\/])/gi,"<$1del$2"],[/([\w\W]*?)<\/span>/gm,"$1"],[/([\w\W]*?)<\/span>/gm,"$1"],[/([\w\W]*?)<\/span>/gm,"$1"],[/([\w\W]*?)<\/span>/gm,"$1"],[/([\w\W]*?)<\/span>/gm,"$1"],[/([\w\W]*?)<\/span>/gm,"$1"],[/([\w\W]*?)<\/span>/gm,"$2"],[/([\w\W]*?)<\/span>/gm,"$2"],[/([\w\W]*?)<\/span>/gm,"$2"],[/([\w\W]*?)<\/span>/gm,"$2"],[/([\w\W]*?)<\/span>/gm,"$2"],[/([\w\W]*?)<\/span>/gm,"$2"],[/([\w\W]*?)<\/span>/gm,"$2"],[/([\w\W]*?)<\/span>/gm,"$2"],[/([\w\W]*?)<\/strong>/gm,"$1"],[/<([a-z]+) style="font-weight: normal;">([\w\W]*?)<\/\1>/gm,"<$1>$2"],[/<([a-z]+) style="font-weight: bold;">([\w\W]*?)<\/\1>/gm,"<$1>$2"],[/<([a-z]+) style="font-style: italic;">([\w\W]*?)<\/\1>/gm,"<$1>$2"],[/<([a-z]+) style="text-decoration: underline;">([\w\W]*?)<\/\1>/gm,"<$1>$2"],[/<([a-z]+) style="text-decoration: line-through;">([\w\W]*?)<\/\1>/gm,"<$1>$2"],[/<([a-z]+) style="text-decoration: underline line-through;">([\w\W]*?)<\/\1>/gm,"<$1>$2"],[/<([a-z]+) style="(font-weight: bold; ?|font-style: italic; ?){2}">([\w\W]*?)<\/\1>/gm,"<$1>$3"],[/<([a-z]+) style="(font-weight: bold; ?|text-decoration: underline; ?){2}">([\w\W]*?)<\/\1>/gm,"<$1>$3"],[/<([a-z]+) style="(font-weight: italic; ?|text-decoration: underline; ?){2}">([\w\W]*?)<\/\1>/gm,"<$1>$3"],[/<([a-z]+) style="(font-weight: bold; ?|text-decoration: line-through; ?){2}">([\w\W]*?)<\/\1>/gm,"<$1>$3"],[/<([a-z]+) style="(font-weight: italic; ?|text-decoration: line-through; ?){2}">([\w\W]*?)<\/\1>/gm,"<$1>$3"],[/<([a-z]+) style="(font-weight: bold; ?|font-style: italic; ?|text-decoration: underline; ?){3}">([\w\W]*?)<\/\1>/gm,"<$1>$3"],[/<([a-z]+) style="(font-weight: bold; ?|font-style: italic; ?|text-decoration: line-through; ?){3}">([\w\W]*?)<\/\1>/gm,"<$1>$3"],[/<([a-z]+) style="(font-weight: bold; ?|font-style: italic; ?|text-decoration: underline line-through; ?){3}">([\w\W]*?)<\/\1>/gm,"<$1>$3"],[/

    (.*)(\n)+<\/blockquote><\/p>/i,"
    $1
    \n"],[/<\/(strong|em|ins|del|q|code)>(\s*?)<\1>/gim,"$2"],[/<(br|BR)>/g,"
    "],[/([^\s])\/>/g,"$1 />"],[/
    \s*<\/(h1|h2|h3|h4|h5|h6|ul|ol|li|p|blockquote|div)/gi,"([^\n\u000B\r\f])/gi,"\n$2"],[/
    /g,"
    "]);jsToolBar.prototype.tagsoup2xhtml=function(html){for(var reg in this.simpleCleanRegex){html=html.replace(this.simpleCleanRegex[reg][0],this.simpleCleanRegex[reg][1]);} -while(/(<[^\/!]>|<[^\/!][^>]*[^\/]>)\s*<\/[^>]*[^-]>/.test(html)){html=html.replace(/(<[^\/!]>|<[^\/!][^>]*[^\/]>)\s*<\/[^>]*[^-]>/g,"");} -html=html.replace(/<(\/?)([A-Z0-9]+)/g,function(match0,match1,match2){return"<"+match1+match2.toLowerCase();});var myRegexp=/<[^>]+((\s+\w+\s*=\s*)([^"'][\w~@+$,%\/:.#?=&;!*()-]*))[^>]*?>/;while(myRegexp.test(html)){html=html.replace(myRegexp,function(str,val1,val2,val3){var tamponRegex=new RegExp(regexpEscape(val1));return str.replace(tamponRegex,val2+'"'+val3+'"');})} -while(/(<[^>]+style=(["'])[^>]+[\s:]+)0(pt|px)(\2|\s|;)/.test(html)){html=html.replace(/(<[^>]+style=(["'])[^>]+[\s:]+)0(pt|px)(\2|\s|;)/gi,"$1"+"0$4");} -html=html.replace(/\r\n/g,"\n");html=html.replace(/^\s+/gm,'');html=html.replace(/\s+$/gm,'');return html;};jsToolBar.prototype.validBlockquote=function(){var blockElts=['address','blockquote','dl','div','fieldset','form','h1','h2','h3','h4','h5','h6','hr','ol','p','pre','table','ul'];var BQs=this.iwin.document.getElementsByTagName('blockquote');var bqChilds;for(var bq=0;bq=0;i--){if(bqChilds[i].nodeType==1&&arrayIndexOf(blockElts,bqChilds[i].tagName.toLowerCase())>=0) -{if(frag.childNodes.length>0){var p=this.iwin.document.createElement('p');p.appendChild(frag);BQs[bq].replaceChild(p,bqChilds[i+1]);frag=this.iwin.document.createDocumentFragment();}}else{if(frag.childNodes.length>0)BQs[bq].removeChild(bqChilds[i+1]);frag.insertBefore(bqChilds[i].cloneNode(true),frag.firstChild);}} -if(frag.childNodes.length>0){var p=this.iwin.document.createElement('p');p.appendChild(frag);BQs[bq].replaceChild(p,bqChilds[0]);}}};jsToolBar.prototype.removeFormatRegexp=new Array([/(<[a-z][^>]*)margin\s*:[^;]*;/mg,"$1"],[/(<[a-z][^>]*)margin-bottom\s*:[^;]*;/mg,"$1"],[/(<[a-z][^>]*)margin-left\s*:[^;]*;/mg,"$1"],[/(<[a-z][^>]*)margin-right\s*:[^;]*;/mg,"$1"],[/(<[a-z][^>]*)margin-top\s*:[^;]*;/mg,"$1"],[/(<[a-z][^>]*)padding\s*:[^;]*;/mg,"$1"],[/(<[a-z][^>]*)padding-bottom\s*:[^;]*;/mg,"$1"],[/(<[a-z][^>]*)padding-left\s*:[^;]*;/mg,"$1"],[/(<[a-z][^>]*)padding-right\s*:[^;]*;/mg,"$1"],[/(<[a-z][^>]*)padding-top\s*:[^;]*;/mg,"$1"],[/(<[a-z][^>]*)font\s*:[^;]*;/mg,"$1"],[/(<[a-z][^>]*)font-family\s*:[^;]*;/mg,"$1"],[/(<[a-z][^>]*)font-size\s*:[^;]*;/mg,"$1"],[/(<[a-z][^>]*)font-style\s*:[^;]*;/mg,"$1"],[/(<[a-z][^>]*)font-variant\s*:[^;]*;/mg,"$1"],[/(<[a-z][^>]*)font-weight\s*:[^;]*;/mg,"$1"],[/(<[a-z][^>]*)color\s*:[^;]*;/mg,"$1"]);jsToolBar.prototype.removeTextFormating=function(html){for(var reg in this.removeFormatRegexp){html=html.replace(this.removeFormatRegexp[reg][0],this.removeFormatRegexp[reg][1]);} -html=this.tagsoup2xhtml(html);html=html.replace(/style="\s*?"/mgi,'');return html;};jsToolBar.prototype.elements.blocks.wysiwyg={list:['none','p','h1','h2','h3','h4','h5','h6'],fn:function(opt){if(opt=='none'){var blockLevel=this.getBlockLevel();if(blockLevel!==null){this.replaceNodeByContent(blockLevel);} -this.iwin.focus();}else{try{this.iwin.document.execCommand('formatblock',false,'<'+opt+'>');}catch(e){};this.iwin.focus();}}};jsToolBar.prototype.elements.strong.fn.wysiwyg=function(){this.iwin.document.execCommand('bold',false,null);this.iwin.focus();};jsToolBar.prototype.elements.em.fn.wysiwyg=function(){this.iwin.document.execCommand('italic',false,null);this.iwin.focus();};jsToolBar.prototype.elements.ins.fn.wysiwyg=function(){this.iwin.document.execCommand('underline',false,null);this.iwin.focus();};jsToolBar.prototype.elements.del.fn.wysiwyg=function(){this.iwin.document.execCommand('strikethrough',false,null);this.iwin.focus();};jsToolBar.prototype.elements.quote.fn.wysiwyg=function(){var n=this.getSelectedNode();var q=this.iwin.document.createElement('q');q.appendChild(n);this.insertNode(q);};jsToolBar.prototype.elements.code.fn.wysiwyg=function(){var n=this.getSelectedNode();var code=this.iwin.document.createElement('code');code.appendChild(n);this.insertNode(code);};jsToolBar.prototype.elements.br.fn.wysiwyg=function(){var n=this.iwin.document.createElement('br');this.insertNode(n);};jsToolBar.prototype.elements.blockquote.fn.wysiwyg=function(){var n=this.getSelectedNode();var q=this.iwin.document.createElement('blockquote');q.appendChild(n);this.insertNode(q);};jsToolBar.prototype.elements.pre.fn.wysiwyg=function(){this.iwin.document.execCommand('formatblock',false,'
    ');this.iwin.focus();};jsToolBar.prototype.elements.ul.fn.wysiwyg=function(){this.iwin.document.execCommand('insertunorderedlist',false,null);this.iwin.focus();};jsToolBar.prototype.elements.ol.fn.wysiwyg=function(){this.iwin.document.execCommand('insertorderedlist',false,null);this.iwin.focus();};jsToolBar.prototype.elements.link.fn.wysiwyg=function(){var href,hreflang;var range,commonAncestorContainer;if(this.iwin.getSelection){var selection=this.iwin.getSelection();range=selection.getRangeAt(0);commonAncestorContainer=range.commonAncestorContainer;while(commonAncestorContainer.nodeType!=1){commonAncestorContainer=commonAncestorContainer.parentNode;}}else{range=this.iwin.document.selection.createRange();commonAncestorContainer=range.parentElement();}
    -var ancestorTagName=commonAncestorContainer.tagName.toLowerCase();while(ancestorTagName!='a'&&ancestorTagName!='body'){commonAncestorContainer=commonAncestorContainer.parentNode;ancestorTagName=commonAncestorContainer.tagName.toLowerCase();}
    -if(ancestorTagName=='a'){href=commonAncestorContainer.href||'';hreflang=commonAncestorContainer.hreflang||'';}
    -href=window.prompt(this.elements.link.href_prompt,href);if(ancestorTagName=='a'&&href==''){this.replaceNodeByContent(commonAncestorContainer);}
    -if(!href)return;hreflang=window.prompt(this.elements.link.hreflang_prompt,hreflang);if(ancestorTagName=='a'&&href){commonAncestorContainer.setAttribute('href',href);if(hreflang){commonAncestorContainer.setAttribute('hreflang',hreflang);}else{commonAncestorContainer.removeAttribute('hreflang');}
    -return;}
    -var n=this.getSelectedNode();var a=this.iwin.document.createElement('a');a.href=href;if(hreflang)a.setAttribute('hreflang',hreflang);a.appendChild(n);this.insertNode(a);};jsToolBar.prototype.elements.removeFormat={type:'button',title:'Remove text formating',fn:{}};jsToolBar.prototype.elements.removeFormat.disabled=!jsToolBar.prototype.can_wwg;jsToolBar.prototype.elements.removeFormat.fn.xhtml=function(){var html=this.textarea.value;html=this.removeTextFormating(html);this.textarea.value=html;};jsToolBar.prototype.elements.removeFormat.fn.wysiwyg=function(){var html=this.iwin.document.body.innerHTML;html=this.removeTextFormating(html);this.iwin.document.body.innerHTML=html;};function arrayIndexOf(aArray,aValue){if(typeof Array.indexOf=='function'){return aArray.indexOf(aValue);}else{var index=-1;var l=aArray.length;for(var i=0;i'+player+'
  • ';} -tb.elements.mp3_insert.data.player=player.replace(/>/g,'>\n');tb.elements.mp3_insert.fncall[tb.mode].call(tb);} -else if(type=='flv') -{var oplayer=$('
    '+$('#public_player').val()+'
    ');var flashvars=$("[name=FlashVars]",oplayer).val();var align=$('input[name="alignment"]:checked',insert_form).val();var title=insert_form.elements.title.value;if(title){flashvars='title='+encodeURI(title)+'&'+flashvars;} -$('object',oplayer).attr('width',$('#video_w').val());$('object',oplayer).attr('height',$('#video_h').val());flashvars=flashvars.replace(/(width=\d*)/,'width='+$('#video_w').val());flashvars=flashvars.replace(/(height=\d*)/,'height='+$('#video_h').val());$("[name=FlashVars]",oplayer).val(flashvars);var player=oplayer.html();if(align!=undefined&&align!='none'){player='
    '+player+'
    ';} -tb.elements.flv_insert.data.player=player.replace(/>/g,'>\n');tb.elements.flv_insert.fncall[tb.mode].call(tb);} -else -{tb.elements.link.data.href=tb.stripBaseURL(insert_form.elements.url.value);tb.elements.link.data.content=insert_form.elements.title.value;tb.elements.link.fncall[tb.mode].call(tb);}};function playerFormat(s){s=s.replace(/</g,'<');s=s.replace(/>/g,'>\n');s=s.replace(/&/g,'&');return s;};}); \ No newline at end of file diff --git a/v2/dotclear/admin/js/jsToolBar/popup_posts.js b/v2/dotclear/admin/js/jsToolBar/popup_posts.js deleted file mode 100644 index 0fbb77d..0000000 --- a/v2/dotclear/admin/js/jsToolBar/popup_posts.js +++ /dev/null @@ -1,2 +0,0 @@ - -$(function(){$('#link-insert-cancel').click(function(){window.close();});$('#form-entries tr>td.maximal>a').click(function(){var tb=window.opener.the_toolbar;var data=tb.elements.link.data;data.href=tb.stripBaseURL($(this).attr('title'));tb.elements.link.fncall[tb.mode].call(tb);window.close();});}); \ No newline at end of file diff --git a/v2/dotclear/admin/js/meta-editor.js b/v2/dotclear/admin/js/meta-editor.js deleted file mode 100644 index e9a3be3..0000000 --- a/v2/dotclear/admin/js/meta-editor.js +++ /dev/null @@ -1,14 +0,0 @@ - -function metaEditor(target,meta_field,meta_type){this.target=target;this.meta_field=meta_field;this.meta_type=meta_type;};metaEditor.prototype={meta_url:'',text_confirm_remove:'Are you sure you want to remove this %s?',text_add_meta:'Add a %s to this entry',text_choose:'Choose from list',text_all:'all',text_separation:'Separate each %s by comas',target:null,meta_type:null,meta_dialog:null,meta_field:null,submit_button:null,post_id:false,service_uri:'services.php',displayMeta:function(type,post_id){this.meta_type=type;this.post_id=post_id;this.target.empty();this.meta_dialog=$('');this.meta_dialog.attr('title',this.text_add_meta.replace(/%s/,this.meta_type));this.meta_dialog.attr('id','post_meta_input');this.meta_dialog.keypress(function(evt){if(evt.keyCode==13){This.addMeta(this.value);return false;} -return true;});var This=this;this.submit_button=$('');this.submit_button.click(function(){var v=This.meta_dialog.val();This.addMeta(v);return false;});this.addMetaDialog();if(this.post_id==false){this.target.append(this.meta_field);} -this.displayMetaList();},displayMetaList:function(){var li;if(this.meta_list==undefined){this.meta_list=$('
      ');this.target.prepend(this.meta_list);} -if(this.post_id==false){var meta=this.splitMetaValues(this.meta_field.val());this.meta_list.empty();for(var i=0;i'+meta[i]+'');a_remove=$('[x]');a_remove.get(0).caller=this;a_remove.get(0).meta_id=meta[i];a_remove.click(function(){this.caller.removeMeta(this.meta_id);return false;});li.append(' ').append(a_remove);this.meta_list.append(li);}}else{var This=this;var params={f:'getMeta',metaType:this.meta_type,sortby:'metaId,asc',postId:this.post_id};$.get(this.service_uri,params,function(data){data=$(data);if(data.find('rsp').attr('status')!='ok'){return;} -This.meta_list.empty();data.find('meta').each(function(){var meta_id=$(this).text();li=$('
    • '+meta_id+'
    • ');a_remove=$('[x]');a_remove.get(0).caller=This;a_remove.get(0).meta_id=meta_id;a_remove.click(function(){this.caller.removeMeta(this.meta_id);return false;});li.append(' ').append(a_remove);This.meta_list.append(li);});});}},addMetaDialog:function(){var This=this;if(this.submit_button==null){this.target.append($('

      ').append(this.meta_dialog));}else{this.target.append($('

      ').append(this.meta_dialog).append(' ').append(this.submit_button));} -var a=$(''+this.text_choose+'');a.click(function(){This.showMetaList(metaEditor.prototype.meta_type,$(this).parent());return false;});if(this.text_separation!=''){this.target.append($('

      ').addClass('form-note').append(this.text_separation.replace(/%s/,this.meta_type)));} -this.target.append($('

      ').append(a));},showMetaList:function(type,target){target.empty();target.append('...');target.addClass('addMeta');var params={f:'getMeta',metaType:this.meta_type,sortby:'metaId,asc'};if(type=='more'){params.limit='30';} -var This=this;$.get(this.service_uri,params,function(data){if($(data).find('meta').length>0){target.empty();var meta_link;$(data).find('meta').each(function(i){meta_link=$(''+$(this).text()+'');meta_link.get(0).meta_id=$(this).text();meta_link.click(function(){var v=This.splitMetaValues(This.meta_dialog.val()+','+this.meta_id);This.meta_dialog.val(v.join(','));return false;});if(i>0){target.append(', ');} -target.append(meta_link);});if(type=='more'){var a_more=$('');a_more.append(This.text_all+String.fromCharCode(160)+String.fromCharCode(187));a_more.click(function(){This.showMetaList('all',target);return false;});target.append(', ').append(a_more);}}else{target.empty();}});},addMeta:function(str){str=this.splitMetaValues(str).join(',');if(this.post_id==false){str=this.splitMetaValues(this.meta_field.val()+','+str);this.meta_field.val(str);this.meta_dialog.val('');this.displayMetaList();}else{var params={xd_check:dotclear.nonce,f:'setPostMeta',postId:this.post_id,metaType:this.meta_type,meta:str};var This=this;$.post(this.service_uri,params,function(data){if($(data).find('rsp').attr('status')=='ok'){This.meta_dialog.val('');This.displayMetaList();}else{alert($(data).find('message').text());}});}},removeMeta:function(meta_id){if(this.post_id==false){var meta=this.splitMetaValues(this.meta_field.val());for(var i=0;i=0){return this.create(document.body.scrollLeft,document.body.scrollTop)}else{return this.create(0,0)}},clientSize:function(){if(window.innerHeight>=0){return this.create(window.innerWidth,window.innerHeight)}else if(document.documentElement){return this.create(document.documentElement.clientWidth,document.documentElement.clientHeight)}else if(document.body.clientHeight>=0){return this.create(document.body.clientWidth,document.body.clientHeight)}else{return this.create(0,0)}},mousePosition:function(event){event=ToolMan.events().fix(event) -return this.create(event.clientX,event.clientY)},mouseOffset:function(event){event=ToolMan.events().fix(event) -if(event.pageX>=0||event.pageX<0){return this.create(event.pageX,event.pageY)}else if(event.clientX>=0||event.clientX<0){return this.mousePosition(event).plus(this.scrollOffset())}},_size:function(element){return this.create(element.offsetWidth,element.offsetHeight)},_offset:function(element){return this.create(element.offsetLeft,element.offsetTop)}} -function _ToolManCoordinate(factory,x,y){this.factory=factory -this.x=isNaN(x)?0:x -this.y=isNaN(y)?0:y} -_ToolManCoordinate.prototype={toString:function(){return"("+this.x+","+this.y+")"},plus:function(that){return this.factory.create(this.x+that.x,this.y+that.y)},minus:function(that){return this.factory.create(this.x-that.x,this.y-that.y)},min:function(that){return this.factory.create(Math.min(this.x,that.x),Math.min(this.y,that.y))},max:function(that){return this.factory.create(Math.max(this.x,that.x),Math.max(this.y,that.y))},constrainTo:function(one,two){var min=one.min(two) -var max=one.max(two) -return this.max(min).min(max)},distance:function(that){return Math.sqrt(Math.pow(this.x-that.x,2)+Math.pow(this.y-that.y,2))},reposition:function(element){element.style["top"]=this.y+"px" -element.style["left"]=this.x+"px"}} \ No newline at end of file diff --git a/v2/dotclear/admin/js/tool-man/core.js b/v2/dotclear/admin/js/tool-man/core.js deleted file mode 100644 index 7a46341..0000000 --- a/v2/dotclear/admin/js/tool-man/core.js +++ /dev/null @@ -1,35 +0,0 @@ - -var ToolMan={events:function(){if(!ToolMan._eventsFactory)throw"ToolMan Events module isn't loaded";return ToolMan._eventsFactory},css:function(){if(!ToolMan._cssFactory)throw"ToolMan CSS module isn't loaded";return ToolMan._cssFactory},coordinates:function(){if(!ToolMan._coordinatesFactory)throw"ToolMan Coordinates module isn't loaded";return ToolMan._coordinatesFactory},drag:function(){if(!ToolMan._dragFactory)throw"ToolMan Drag module isn't loaded";return ToolMan._dragFactory},dragsort:function(){if(!ToolMan._dragsortFactory)throw"ToolMan DragSort module isn't loaded";return ToolMan._dragsortFactory},helpers:function(){return ToolMan._helpers},cookies:function(){if(!ToolMan._cookieOven)throw"ToolMan Cookie module isn't loaded";return ToolMan._cookieOven},junkdrawer:function(){return ToolMan._junkdrawer}} -ToolMan._helpers={map:function(array,func){for(var i=0,n=array.length;i0)return identifier;identifier=trim(item.getAttribute("itemID")) -if(identifier!=null&&identifier.length>0)return identifier;return trim(item.innerHTML)},_itemsByID:function(list){var array=new Array() -var items=list.getElementsByTagName('li') -for(var i=0,n=items.length;isetCacheDir(DC_TPL_CACHE); -$feed_reader->setTimeout(5); -$feed_reader->setUserAgent('Dotclear - http://www.dotclear.org/'); -try { - $dc_langs = $feed_reader->parse(sprintf(DC_L10N_UPDATE_URL,DC_VERSION)); - if ($dc_langs !== false) { - $dc_langs = $dc_langs->items; - } -} catch (Exception $e) {} - -# Delete a language pack -if ($is_writable && !empty($_POST['delete']) && !empty($_POST['locale_id'])) -{ - try - { - $locale_id = $_POST['locale_id']; - if (!isset($iso_codes[$locale_id]) || !is_dir(DC_L10N_ROOT.'/'.$locale_id)) { - throw new Exception(__('No such installed language')); - } - - if ($locale_id == 'en') { - throw new Exception(__("You can't remove English language.")); - } - - if (!files::deltree(DC_L10N_ROOT.'/'.$locale_id)) { - throw new Exception(__('Permissions to delete language denied.')); - } - - http::redirect('langs.php?removed=1'); - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } -} - -# Download a language pack -if ($is_writable && !empty($_POST['pkg_url'])) -{ - try - { - if (empty($_POST['your_pwd']) || !$core->auth->checkPassword(crypt::hmac(DC_MASTER_KEY,$_POST['your_pwd']))) { - throw new Exception(__('Password verification failed')); - } - - $url = html::escapeHTML($_POST['pkg_url']); - $dest = DC_L10N_ROOT.'/'.basename($url); - if (!preg_match('#^http://[^.]+\.dotclear\.(net|org)/.*\.zip$#',$url)) { - throw new Exception(__('Invalid language file URL.')); - } - - $client = netHttp::initClient($url,$path); - $client->setUserAgent('Dotclear - http://www.dotclear.org/'); - $client->useGzip(false); - $client->setPersistReferers(false); - $client->setOutput($dest); - $client->get($path); - - try { - $ret_code = dc_lang_install($dest); - } catch (Exception $e) { - @unlink($dest); - throw $e; - } - - @unlink($dest); - http::redirect('langs.php?added='.$ret_code); - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } -} - -# Upload a language pack -if ($is_writable && !empty($_POST['upload_pkg'])) -{ - try - { - if (empty($_POST['your_pwd']) || !$core->auth->checkPassword(crypt::hmac(DC_MASTER_KEY,$_POST['your_pwd']))) { - throw new Exception(__('Password verification failed')); - } - - files::uploadStatus($_FILES['pkg_file']); - $dest = DC_L10N_ROOT.'/'.$_FILES['pkg_file']['name']; - if (!move_uploaded_file($_FILES['pkg_file']['tmp_name'],$dest)) { - throw new Exception(__('Unable to move uploaded file.')); - } - - try { - $ret_code = dc_lang_install($dest); - } catch (Exception $e) { - @unlink($dest); - throw $e; - } - - @unlink($dest); - http::redirect('langs.php?added='.$ret_code); - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } -} - -/* DISPLAY Main page --------------------------------------------------------- */ -dcPage::open(__('Languages management'), - dcPage::jsLoad('js/_langs.js') -); - -echo -'

      '.__('Languages management').'

      '; - -if (!empty($_GET['removed'])) { - echo '

      '.__('Language has been successfully deleted.').'

      '; -} - -if (!empty($_GET['added'])) { - echo '

      '. - ($_GET['added'] == 2 ? __('Language has been successfully upgraded') : __('Language has been successfully installed.')). - '

      '; -} - -echo -'

      '.__('Here you can install, upgrade or remove languages for your Dotclear '. -'installation.').'

      '. -'

      '.sprintf(__('You can change your user language in your preferences or '. -'change your blog\'s main language in your blog settings.'), -'preferences.php','blog_pref.php').'

      '; - -echo -'

      '.__('Installed languages').'

      '; - -$locales_content = scandir(DC_L10N_ROOT); -$tmp = array(); -foreach ($locales_content as $v) { - $c = ($v == '.' || $v == '..' || $v == 'en' || !is_dir(DC_L10N_ROOT.'/'.$v) || !isset($iso_codes[$v])); - - if (!$c) { - $tmp[$v] = DC_L10N_ROOT.'/'.$v; - } -} -$locales_content = $tmp; - -if (empty($locales_content)) -{ - echo '

      '.__('No additional language is installed.').'

      '; -} -else -{ - echo - ''. - ''. - ''. - ''; - - foreach ($locales_content as $k => $v) - { - $is_deletable = $is_writable && is_writable($v); - - echo - ''. - ''. - ''; - } - echo '
      '.__('Language').''.__('Action').'
      ('.$k.') '. - ''.html::escapeHTML($iso_codes[$k]).''; - - if ($is_deletable) - { - echo - '
      '. - '
      '. - $core->formNonce(). - form::hidden(array('locale_id'),html::escapeHTML($k)). - ' '. - '
      '. - '
      '; - } - - echo '
      '; -} - -echo '

      '.__('Install or upgrade languages').'

      '; - -if (!$is_writable) { - echo '

      '.sprintf(__('You can install or remove a language by adding or '. - 'removing the relevant directory in your %s folder.'),'locales').'

      '; -} - -if (!empty($dc_langs) && $is_writable) -{ - $dc_langs_combo = array(); - foreach ($dc_langs as $k => $v) { - if ($v->link && isset($iso_codes[$v->title])) { - $dc_langs_combo[html::escapeHTML('('.$v->title.') '.$iso_codes[$v->title])] = html::escapeHTML($v->link); - } - } - - echo - '
      '. - '
      '. - ''.__('Available languages').''. - '

      '.sprintf(__('You can download and install a additional language directly from Dotclear.net. '. - 'Proposed languages are based on your version: %s.'),''.DC_VERSION.'').'

      '. - '

      '. - '

      '. - ''. - $core->formNonce(). - '
      '. - '
      '; -} - -if ($is_writable) -{ - # 'Upload language pack' form - echo - '
      '. - '
      '. - ''.__('Upload a zip file').''. - '

      '.__('You can install languages by uploading zip files.').'

      '. - '

      '. - '

      '. - ''. - $core->formNonce(). - '
      '. - '
      '; -} - -dcPage::close(); - - -# Language installation function -function dc_lang_install($file) -{ - $zip = new fileUnzip($file); - $zip->getList(false,'#(^|/)(__MACOSX|\.svn|\.DS_Store|\.directory|Thumbs\.db)(/|$)#'); - - if (!preg_match('/^[a-z]{2,3}(-[a-z]{2})?$/',$zip->getRootDir())) { - throw new Exception(__('Invalid language zip file.')); - } - - if ($zip->isEmpty() || !$zip->hasFile($zip->getRootDir().'/main.po')) { - throw new Exception(__('The zip file does not appear to be a valid Dotclear language pack.')); - } - - - $target = dirname($file); - $destination = $target.'/'.$zip->getRootDir(); - $res = 1; - - if (is_dir($destination)) { - if (!files::deltree($destination)) { - throw new Exception(__('An error occurred during language upgrade.')); - } - $res = 2; - } - - $zip->unzipAll($target); - return $res; -} -?> \ No newline at end of file diff --git a/v2/dotclear/admin/media.php b/v2/dotclear/admin/media.php deleted file mode 100644 index 8270131..0000000 --- a/v2/dotclear/admin/media.php +++ /dev/null @@ -1,472 +0,0 @@ -auth->check('media,media_admin',$core->blog->id)) { - throw new Exception('Permission denied.'); - } - - $d = isset($_POST['d']) ? $_POST['d'] : null; - $core->media = new dcMedia($core); - $core->media->chdir($d); - $core->media->getDir(); - $dir =& $core->media->dir; - - if (empty($_FILES['Filedata'])) { - throw new Exception('No file to upload.'); - } - - files::uploadStatus($_FILES['Filedata']); - $core->media->uploadFile($_FILES['Filedata']['tmp_name'],$_FILES['Filedata']['name']); - - echo 'ok'; - } - catch (Exception $e) { - echo __('Error:').' '.__($e->getMessage()); - } - exit; -} - - -/* HTML page --------------------------------------------------------- */ -require dirname(__FILE__).'/../inc/admin/prepend.php'; - -dcPage::check('media,media_admin'); - -$post_id = !empty($_GET['post_id']) ? (integer) $_GET['post_id'] : null; -if ($post_id) { - $post = $core->blog->getPosts(array('post_id'=>$post_id,'post_type'=>'')); - if ($post->isEmpty()) { - $post_id = null; - } - $post_title = $post->post_title; - $post_type = $post->post_type; - unset($post); -} -$d = isset($_REQUEST['d']) ? $_REQUEST['d'] : null; -$dir = null; - -$page = !empty($_GET['page']) ? $_GET['page'] : 1; -$nb_per_page = 30; - -# We are on home not comming from media manager -if ($d === null && isset($_SESSION['media_manager_dir'])) { - # We get session information - $d = $_SESSION['media_manager_dir']; -} - -if (!isset($_GET['page']) && isset($_SESSION['media_manager_page'])) { - $page = $_SESSION['media_manager_page']; -} - -# We set session information about directory and page -if ($d) { - $_SESSION['media_manager_dir'] = $d; -} else { - unset($_SESSION['media_manager_dir']); -} -if ($page != 1) { - $_SESSION['media_manager_page'] = $page; -} else { - unset($_SESSION['media_manager_page']); -} - -# Sort combo -$sort_combo = array( - __('By names, in ascending order') => 'name-asc', - __('By names, in descending order') => 'name-desc', - __('By dates, in ascending order') => 'date-asc', - __('By dates, in descending order') => 'date-desc' -); - -if (!empty($_GET['file_sort']) && in_array($_GET['file_sort'],$sort_combo)) { - $_SESSION['media_file_sort'] = $_GET['file_sort']; -} -$file_sort = !empty($_SESSION['media_file_sort']) ? $_SESSION['media_file_sort'] : null; - -$popup = (integer) !empty($_GET['popup']); - -$page_url = 'media.php?popup='.$popup.'&post_id='.$post_id; - -if ($popup) { - $open_f = array('dcPage','openPopup'); - $close_f = array('dcPage','closePopup'); -} else { - $open_f = array('dcPage','open'); - $close_f = create_function('',"dcPage::helpBlock('core_media'); dcPage::close();"); -} - -$core_media_writable = false; -try { - $core->media = new dcMedia($core); - if ($file_sort) { - $core->media->setFileSort($file_sort); - } - $core->media->chdir($d); - $core->media->getDir(); - $core_media_writable = $core->media->writable(); - $dir =& $core->media->dir; - if (!$core_media_writable) { - throw new Exception('you do not have sufficient permissions to write to this folder: '); - } -} catch (Exception $e) { - $core->error->add($e->getMessage()); -} - -# Zip download -if (!empty($_GET['zipdl']) && $core->auth->check('media_admin',$core->blog->id)) -{ - try - { - @set_time_limit(300); - $fp = fopen('php://output','wb'); - $zip = new fileZip($fp); - $zip->addExclusion('#(^|/).(.*?)_(m|s|sq|t).jpg$#'); - $zip->addDirectory($core->media->root.'/'.$d,'',true); - - header('Content-Disposition: attachment;filename='.($d ? $d : 'media').'.zip'); - header('Content-Type: application/x-zip'); - $zip->write(); - unset($zip); - exit; - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } -} - -# New directory -if ($dir && !empty($_POST['newdir'])) -{ - try { - $core->media->makeDir($_POST['newdir']); - http::redirect($page_url.'&d='.rawurlencode($d).'&mkdok=1'); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } -} - -# Adding a file -if ($dir && !empty($_FILES['upfile'])) -{ - try - { - files::uploadStatus($_FILES['upfile']); - - $f_title = (isset($_POST['upfiletitle']) ? $_POST['upfiletitle'] : ''); - $f_private = (isset($_POST['upfilepriv']) ? $_POST['upfilepriv'] : false); - - $core->media->uploadFile($_FILES['upfile']['tmp_name'],$_FILES['upfile']['name'],$f_title,$f_private); - http::redirect($page_url.'&d='.rawurlencode($d).'&upok=1'); - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } -} - - -# Removing item -if ($dir && !empty($_POST['rmyes']) && !empty($_POST['remove'])) -{ - $_POST['remove'] = rawurldecode($_POST['remove']); - - try { - $core->media->removeItem($_POST['remove']); - http::redirect($page_url.'&d='.rawurlencode($d).'&rmfok=1'); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } -} - -# Rebuild directory -if ($dir && $core->auth->isSuperAdmin() && !empty($_POST['rebuild'])) -{ - try { - $core->media->rebuild($d); - http::redirect($page_url.'&d='.rawurlencode($d).'&rebuildok=1'); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } -} - - -# DISPLAY confirm page for rmdir & rmfile -if ($dir && !empty($_GET['remove'])) -{ - call_user_func($open_f,__('Media manager')); - - echo '

      '.html::escapeHTML($core->blog->name).' › '.__('Media manager').' › '.__('confirm removal').'

      '; - - echo - '
      '. - '

      '.sprintf(__('Are you sure you want to remove %s?'), - html::escapeHTML($_GET['remove'])).'

      '. - '

      '. - '   '. - form::hidden('d',$d). - $core->formNonce(). - form::hidden('remove',html::escapeHTML($_GET['remove'])).'

      '. - '
      '; - - call_user_func($close_f); - exit; -} - -/* DISPLAY Main page --------------------------------------------------------- */ -$core->auth->user_prefs->addWorkspace('interface'); -$user_ui_enhanceduploader = $core->auth->user_prefs->interface->enhanceduploader; - -call_user_func($open_f,__('Media manager'), - '". - dcPage::jsLoad('js/_media.js'). - (($user_ui_enhanceduploader && $core_media_writable) ? dcPage::jsCandyUpload(array('d='.$d)) : '') - ); - -if (!empty($_GET['mkdok'])) { - echo '

      '.__('Directory has been successfully created.').'

      '; -} - -if (!empty($_GET['upok'])) { - echo '

      '.__('Files have been successfully uploaded.').'

      '; -} - -if (!empty($_GET['rmfok'])) { - echo '

      '.__('File has been successfully removed.').'

      '; -} - -if (!empty($_GET['rmdok'])) { - echo '

      '.__('Directory has been successfully removed.').'

      '; -} - -if (!empty($_GET['rebuildok'])) { - echo '

      '.__('Directory has been successfully rebuilt.').'

      '; -} - -if (!empty($_GET['unzipok'])) { - echo '

      '.__('Zip file has been successfully extracted.').'

      '; -} - -echo '

      '.html::escapeHTML($core->blog->name).' › '; -if (!isset($core->media)) { - echo ''.__('Media manager').'

      '; -} else { - $breadcrumb = $core->media->breadCrumb(html::escapeURL($page_url).'&d=%s','%s'); - if ($breadcrumb == '') { - echo ''.__('Media manager').''; - } else { - echo ''.__('Media manager').''.' / '.$breadcrumb.''; - } -} - -if (!$dir) { - call_user_func($close_f); - exit; -} - -if ($post_id) { - echo '

      '.sprintf(__('Choose a file to attach to entry %s by clicking on %s.'), - ''.html::escapeHTML($post_title).'', - ''.__('Attach this file to entry').'').'

      '; -} -if ($popup) { - echo '

      '.sprintf(__('Choose a file to insert into entry by clicking on %s.'), - ''.__('Attach this file to entry').'').'

      '; -} - - -$items = array_values(array_merge($dir['dirs'],$dir['files'])); -if (count($items) == 0) -{ - echo '

      '.__('No file.').'

      '; -} -else -{ - $pager = new pager($page,count($items),$nb_per_page,10); - $pager->html_prev = __($pager->html_prev); - $pager->html_next = __($pager->html_next); - - echo - '
      '. - '

      '. - form::hidden(array('popup'),$popup). - form::hidden(array('post_id'),$post_id). - '

      '. - '
      '. - - '
      '. - '

      '.__('Page(s)').' : '.$pager->getLinks().'

      '; - - for ($i=$pager->index_start, $j=0; $i<=$pager->index_end; $i++, $j++) - { - echo mediaItemLine($items[$i],$j); - } - - echo - '

      '.__('Page(s)').' : '.$pager->getLinks().'

      '. - '
      '; -} - -if ($core_media_writable) -{ - echo '
      '; - - echo - '
      '. - '
      '.__('Add files').''. - '

      '.__('Please take care to publish media that you own and that are not protected by copyright.').'

      '. - '
      '. - '
      '.form::hidden(array('MAX_FILE_SIZE'),DC_MAX_UPLOAD_SIZE). - $core->formNonce().'
      '. - '

      '. - '

      '. - '

      '. - '

      '.__('To send several files at the same time, you can activate the enhanced uploader in'). - ' '.__('My preferences').'

      '. - '

      '. - form::hidden(array('d'),$d).'

      '. - '
      '. - ''. - '
      '; - - echo - '
      '. - '
      '. - '
      '. - ''.__('New directory').''. - $core->formNonce(). - '

      '. - '

      '. - form::hidden(array('d'),html::escapeHTML($d)).'

      '. - '
      '. - '
      '; - - echo '
      '; -} - -# Empty remove form (for javascript actions) -echo -'
      '. -form::hidden('rmyes',1).form::hidden('d',html::escapeHTML($d)). -form::hidden('remove',''). -$core->formNonce(). -'
      '; - -# Get zip directory -if ($core->auth->check('media_admin',$core->blog->id) && - !(count($items) == 0 || (count($items) == 1 && $items[0]->parent))) -{ - echo - '

      '. - __('Download this directory as a zip file').'

      '; -} - -call_user_func($close_f); - -/* ----------------------------------------------------- */ -function mediaItemLine($f,$i) -{ - global $core, $page_url, $popup, $post_id; - - $fname = $f->basename; - - if ($f->d) { - $link = html::escapeURL($page_url).'&d='.html::sanitizeURL($f->relname); - if ($f->parent) { - $fname = '..'; - } - } else { - $link = - 'media_item.php?id='.$f->media_id.'&popup='.$popup.'&post_id='.$post_id; - } - - $class = 'media-item media-col-'.($i%2); - - $res = - '
      '. - ''. - '
        '. - '
      • '.$fname.'
      • '; - - if (!$f->d) { - $res .= - '
      • '.$f->media_title.'
      • '. - '
      • '. - $f->media_dtstr.' - '. - files::size($f->size).' - '. - ''.__('open').''. - '
      • '; - } - - $res .= '
      •  '; - - if ($post_id && !$f->d) { - $res .= '
        '. - ' '. - form::hidden('media_id',$f->media_id). - form::hidden('post_id',$post_id). - form::hidden('attach',1). - $core->formNonce(). - '
        '; - } - - if ($popup && !$f->d) { - $res .= ''.__('Insert this file into entry').' '; - } - - if ($f->del) { - $res .= ''. - ''.__('Delete').''; - } - - $res .= '
      • '; - - if ($f->type == 'audio/mpeg3') { - $res .= '
      • '.dcMedia::mp3player($f->file_url,'index.php?pf=player_mp3.swf').'
      • '; - } - - $res .= '
      '; - - return $res; -} -?> \ No newline at end of file diff --git a/v2/dotclear/admin/media_item.php b/v2/dotclear/admin/media_item.php deleted file mode 100644 index 3b4ffd0..0000000 --- a/v2/dotclear/admin/media_item.php +++ /dev/null @@ -1,528 +0,0 @@ -blog->getPosts(array('post_id'=>$post_id)); - if ($post->isEmpty()) { - $post_id = null; - } - $post_title = $post->post_title; - unset($post); -} - -$file = null; -$popup = (integer) !empty($_GET['popup']); -$page_url = 'media_item.php?popup='.$popup.'&post_id='.$post_id; -$media_page_url = 'media.php?popup='.$popup.'&post_id='.$post_id; - -$id = !empty($_REQUEST['id']) ? (integer) $_REQUEST['id'] : ''; - -if ($popup) { - $open_f = array('dcPage','openPopup'); - $close_f = array('dcPage','closePopup'); -} else { - $open_f = array('dcPage','open'); - $close_f = create_function('',"dcPage::helpBlock('core_media'); dcPage::close();"); -} - -$core_media_writable = false; -try -{ - $core->media = new dcMedia($core); - - if ($id) { - $file = $core->media->getFile($id); - } - - if ($file === null) { - throw new Exception(__('Not a valid file')); - } - - $core->media->chdir(dirname($file->relname)); - $core_media_writable = $core->media->writable(); - - # Prepare directories combo box - $dirs_combo = array(); - foreach ($core->media->getRootDirs() as $v) { - if ($v->w) { - $dirs_combo['/'.$v->relname] = $v->relname; - } - } - ksort($dirs_combo); -} -catch (Exception $e) -{ - $core->error->add($e->getMessage()); -} - -# Upload a new file -if ($file && !empty($_FILES['upfile']) && $file->editable && $core_media_writable) -{ - try { - files::uploadStatus($_FILES['upfile']); - $core->media->uploadFile($_FILES['upfile']['tmp_name'],$file->basename,null,false,true); - http::redirect($page_url.'&id='.$id.'&fupl=1'); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } -} - -# Update file -if ($file && !empty($_POST['media_file']) && $file->editable && $core_media_writable) -{ - $newFile = clone $file; - - $newFile->basename = $_POST['media_file']; - - if ($_POST['media_path']) { - $newFile->dir = $_POST['media_path']; - $newFile->relname = $_POST['media_path'].'/'.$newFile->basename; - } else { - $newFile->dir = ''; - $newFile->relname = $newFile->basename; - } - $newFile->media_title = $_POST['media_title']; - $newFile->media_dt = strtotime($_POST['media_dt']); - $newFile->media_dtstr = $_POST['media_dt']; - $newFile->media_priv = !empty($_POST['media_private']); - - try { - $core->media->updateFile($file,$newFile); - http::redirect($page_url.'&id='.$id.'&fupd=1'); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } -} - -# Update thumbnails -if (!empty($_POST['thumbs']) && $file->media_type == 'image' && $file->editable && $core_media_writable) -{ - try { - $foo = null; - $core->media->mediaFireRecreateEvent($file); - http::redirect($page_url.'&id='.$id.'&thumbupd=1'); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } -} - -# Unzip file -if (!empty($_POST['unzip']) && $file->type == 'application/zip' && $file->editable && $core_media_writable) -{ - try { - $unzip_dir = $core->media->inflateZipFile($file,$_POST['inflate_mode'] == 'new'); - http::redirect($media_page_url.'&d='.$unzip_dir.'&unzipok=1'); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } -} - -# Function to get image title based on meta -function dcGetImageTitle($file,$pattern) -{ - $res = array(); - $pattern = preg_split('/\s*;;\s*/',$pattern); - $sep = ', '; - - foreach ($pattern as $v) { - if ($v == 'Title') { - $res[] = $file->media_title; - } elseif ($file->media_meta->{$v}) { - $res[] = (string) $file->media_meta->{$v}; - } elseif (preg_match('/^Date\((.+?)\)$/u',$v,$m)) { - $res[] = dt::str($m[1],$file->media_dt); - } elseif (preg_match('/^DateTimeOriginal\((.+?)\)$/u',$v,$m) && $file->media_meta->DateTimeOriginal) { - $res[] = dt::dt2str($m[1],(string) $file->media_meta->DateTimeOriginal); - } elseif (preg_match('/^separator\((.*?)\)$/u',$v,$m)) { - $sep = $m[1]; - } - } - return implode($sep,$res); -} - -/* DISPLAY Main page --------------------------------------------------------- */ -$starting_scripts = dcPage::jsLoad('js/_media_item.js'); -if ($popup) { - $starting_scripts .= - dcPage::jsLoad('js/jsToolBar/popup_media.js'); -} -call_user_func($open_f,__('Media manager'), - $starting_scripts. - dcPage::jsDatePicker(). - dcPage::jsPageTabs() -); - -if ($file === null) { - call_user_func($close_f); - exit; -} - -if (!empty($_GET['fupd']) || !empty($_GET['fupl'])) { - echo '

      '.__('File has been successfully updated.').'

      '; -} -if (!empty($_GET['thumbupd'])) { - echo '

      '.__('Thumbnails have been successfully updated.').'

      '; -} - -echo '

      '.__('Media manager').''. -' / '.$core->media->breadCrumb(html::escapeURL($media_page_url).'&d=%s'). -''.$file->basename.'

      '; - -# Insertion popup -if ($popup) -{ - $media_desc = $file->media_title; - - echo - '
      '. - '
      '; - - if ($file->media_type == 'image') - { - $media_type = 'image'; - $media_desc = dcGetImageTitle($file,$core->blog->settings->system->media_img_title_pattern); - if ($media_desc == $file->basename) { - $media_desc = ''; - } - - echo - '

      '.__('Image size:').'

      '; - - $s_checked = false; - echo '

      '; - foreach (array_reverse($file->media_thumb) as $s => $v) { - $s_checked = ($s == 'm'); - echo '
      '; - } - $s_checked = (!isset($file->media_thumb['m'])); - echo '
      '; - echo '

      '; - - - echo '

      '.__('Image alignment').'

      '; - $i_align = array( - 'none' => array(__('None'),1), - 'left' => array(__('Left'),0), - 'right' => array(__('Right'),0), - 'center' => array(__('Center'),0) - ); - - echo '

      '; - foreach ($i_align as $k => $v) { - echo '
      '; - } - echo '

      '; - - echo - '

      '.__('Image insertion').'

      '. - '

      '. - '
      '. - ''. - '

      '; - } - elseif ($file->type == 'audio/mpeg3') - { - $media_type = 'mp3'; - - echo '

      '.__('MP3 disposition').'

      '. - '

      '.__("Please note that you cannot insert mp3 files with visual editor.").'

      '; - - $i_align = array( - 'none' => array(__('None'),0), - 'left' => array(__('Left'),0), - 'right' => array(__('Right'),0), - 'center' => array(__('Center'),1) - ); - - echo '

      '; - foreach ($i_align as $k => $v) { - echo '
      '; - } - - $public_player_style = unserialize($core->blog->settings->themes->mp3player_style); - $public_player = dcMedia::mp3player($file->file_url,$core->blog->getQmarkURL().'pf=player_mp3.swf',$public_player_style); - echo form::hidden('public_player',html::escapeHTML($public_player)); - echo '

      '; - } - elseif ($file->type == 'video/x-flv' || $file->type == 'video/mp4' || $file->type == 'video/x-m4v') - { - $media_type = 'flv'; - - echo - '

      '.__("Please note that you cannot insert video files with visual editor.").'

      '; - - echo - '

      '.__('Video size').'

      '. - '

      '; - - echo '

      '.__('Video disposition').'

      '; - - $i_align = array( - 'none' => array(__('None'),0), - 'left' => array(__('Left'),0), - 'right' => array(__('Right'),0), - 'center' => array(__('Center'),1) - ); - - echo '

      '; - foreach ($i_align as $k => $v) { - echo '
      '; - } - - $public_player_style = unserialize($core->blog->settings->themes->flvplayer_style); - $public_player = dcMedia::flvplayer($file->file_url,$core->blog->getQmarkURL().'pf=player_flv.swf',$public_player_style); - echo form::hidden('public_player',html::escapeHTML($public_player)); - echo '

      '; - } - else - { - $media_type = 'default'; - echo '

      '.__('Media item will be inserted as a link.').'

      '; - } - - echo - '

      '.__('Cancel').' - '. - ''.__('Insert').''. - form::hidden(array('type'),html::escapeHTML($media_type)). - form::hidden(array('title'),html::escapeHTML($file->media_title)). - form::hidden(array('description'),html::escapeHTML($media_desc)). - form::hidden(array('url'),$file->file_url). - '

      '; - - echo '
      '; -} - -echo -'
      '. -'

      '; - -echo -'
      '; - -if ($file->media_image) -{ - $thumb_size = !empty($_GET['size']) ? $_GET['size'] : 's'; - - if (!isset($core->media->thumb_sizes[$thumb_size]) && $thumb_size != 'o') { - $thumb_size = 's'; - } - - echo '

      '.__('Available sizes:').' '; - foreach (array_reverse($file->media_thumb) as $s => $v) - { - $strong_link = ($s == $thumb_size) ? '%s' : '%s'; - printf($strong_link,''.$core->media->thumb_sizes[$s][2].' | '); - } - echo ''.__('original').''; - echo '

      '; - - if (isset($file->media_thumb[$thumb_size])) { - echo '

      '; - } elseif ($thumb_size == 'o') { - $S = getimagesize($file->file); - $class = ($S[1] > 500) ? ' class="overheight"' : ''; - unset($S); - echo '

      '; - } -} - -if ($file->type == 'audio/mpeg3') -{ - echo dcMedia::mp3player($file->file_url,'index.php?pf=player_mp3.swf'); -} - -if ($file->type == 'video/x-flv' || $file->type == 'video/mp4' || $file->type == 'video/x-m4v') -{ - echo dcMedia::flvplayer($file->file_url,'index.php?pf=player_flv.swf'); -} - -echo -'

      '.__('Media details').'

      '. -'
        '. - '
      • '.__('File owner:').' '.$file->media_user.'
      • '. - '
      • '.__('File type:').' '.$file->type.'
      • '. - '
      • '.__('File size:').' '.files::size($file->size).'
      • '. - '
      • '.__('File URL:').' '.$file->file_url.'
      • '. -'
      '; - -if (empty($_GET['find_posts'])) -{ - echo - '

      '. - __('Show entries containing this media').'

      '; -} -else -{ - echo '

      '.__('Entries containing this media').'

      '; - $params = array( - 'post_type' => '', - 'from' => 'LEFT OUTER JOIN '.$core->prefix.'post_media PM ON P.post_id = PM.post_id ', - 'sql' => 'AND ('. - 'PM.media_id = '.(integer) $id.' '. - "OR post_content_xhtml LIKE '%".$core->con->escape($file->relname)."%' ". - "OR post_excerpt_xhtml LIKE '%".$core->con->escape($file->relname)."%' " - ); - - if ($file->media_image) - { # We look for thumbnails too - if (preg_match('#^http(s)?://#',$core->blog->settings->system->public_url)) { - $media_root = $core->blog->settings->system->public_url; - } else { - $media_root = $core->blog->host.path::clean($core->blog->settings->system->public_url).'/'; - } - foreach ($file->media_thumb as $v) { - $v = preg_replace('/^'.preg_quote($media_root,'/').'/','',$v); - $params['sql'] .= "OR post_content_xhtml LIKE '%".$core->con->escape($v)."%' "; - $params['sql'] .= "OR post_excerpt_xhtml LIKE '%".$core->con->escape($v)."%' "; - } - } - - $params['sql'] .= ') '; - - $rs = $core->blog->getPosts($params); - - if ($rs->isEmpty()) - { - echo '

      '.__('No entry seems contain this media.').'

      '; - } - else - { - echo '
        '; - while ($rs->fetch()) { - echo '
      • '. - $rs->post_title.''. - ($rs->post_type != 'post' ? ' ('.html::escapeHTML($rs->post_type).')' : ''). - ' - '.dt::dt2str(__('%Y-%m-%d %H:%M'),$rs->post_dt).'
      • '; - } - echo '
      '; - } -} - -if ($file->type == 'image/jpeg') -{ - echo '

      '.__('Image details').'

      '; - - if (count($file->media_meta) == 0) - { - echo '

      '.__('No detail').'

      '; - } - else - { - echo '
        '; - foreach ($file->media_meta as $k => $v) - { - if ((string) $v) { - echo '
      • '.$k.': '.html::escapeHTML($v).'
      • '; - } - } - echo '
      '; - } -} - -if ($file->editable && $core_media_writable) -{ - if ($file->media_type == 'image') - { - echo - '
      '. - '
      '.__('Update thumbnails').''. - '

      '.__('This will create or update thumbnails for this image.').'

      '. - '

      '. - form::hidden(array('id'),$id). - $core->formNonce().'

      '. - '
      '; - } - - if ($file->type == 'application/zip') - { - $inflate_combo = array( - __('Extract in a new directory') => 'new', - __('Extract in current directory') => 'current' - ); - - echo - '
      '. - '
      '.__('Extract archive').''. - '
        '. - '
      • '.__('Extract in a new directory').' : '. - __('This will extract archive in a new directory that should not exist yet.').'
      • '. - '
      • '.__('Extract in current directory').' : '. - __('This will extract archive in current directory and will overwrite existing files or directory.').'
      • '. - '
      '. - '

      '. - ''. - form::hidden(array('id'),$id). - $core->formNonce().'

      '. - '
      '; - } - - echo - '
      '. - '
      '.__('Change media properties').''. - '

      '. - '

      '. - '

      '. - '

      '. - '

      '. - '

      '. - form::hidden(array('id'),$id). - $core->formNonce().'

      '. - '
      '; - - echo - '
      '. - '
      '.__('Change file').''. - '
      '.form::hidden(array('MAX_FILE_SIZE'),DC_MAX_UPLOAD_SIZE).'
      '. - '

      '. - '

      '. - form::hidden(array('id'),$id). - $core->formNonce().'

      '. - '
      '; - - # --BEHAVIOR-- adminMediaItemForm - $core->callBehavior('adminMediaItemForm',$file); -} - -echo -'
      '. -'
      '; - -call_user_func($close_f); -?> \ No newline at end of file diff --git a/v2/dotclear/admin/permissions.php b/v2/dotclear/admin/permissions.php deleted file mode 100644 index a0dd0a6..0000000 --- a/v2/dotclear/admin/permissions.php +++ /dev/null @@ -1,160 +0,0 @@ -userExists($u)) { - $users[] = $u; - } - } -} - -# Check blogs -if (!empty($_REQUEST['blog_id']) && is_array($_REQUEST['blog_id'])) -{ - foreach ($_REQUEST['blog_id'] as $b) - { - if ($core->blogExists($b)) { - $blogs[] = $b; - } - } -} - -# Update permissions -if (!empty($_POST['upd_perm']) && !empty($users) && !empty($blogs)) -{ - $redir = 'permissions.php?upd=1'; - - try - { - if (empty($_POST['your_pwd']) || !$core->auth->checkPassword(crypt::hmac(DC_MASTER_KEY,$_POST['your_pwd']))) { - throw new Exception(__('Password verification failed')); - } - - foreach ($users as $u) - { - foreach ($blogs as $b) - { - $set_perms = array(); - - if (!empty($_POST['perm'][$b])) - { - foreach ($_POST['perm'][$b] as $perm_id => $v) - { - if ($v) { - $set_perms[$perm_id] = true; - } - } - } - - $core->setUserBlogPermissions($u, $b, $set_perms, true); - } - - $redir .= '&user_id[]='.$u; - } - - foreach ($blogs as $b) { - $redir .= '&blog_id[]='.$b; - } - http::redirect($redir); - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } -} - - - -if (empty($blogs) || empty($users)) { - $core->error->add(__('No blog or user given.')); -} - - -/* DISPLAY --------------------------------------------------------- */ -dcPage::open(__('permissions'), - dcPage::jsLoad('js/_permissions.js') -); - -echo '

      '.__('Users').''.__('Permissions').'

      '; - -if (!empty($_GET['upd'])) { - echo '

      '.__('The permissions have been successfully updated.').'

      '; -} - -if (!empty($blogs) && !empty($users)) -{ - $perm_form = ''; - - if (count($users) == 1) { - $user_perm = $core->getUserPermissions($users[0]); - } - - foreach ($users as $u) { - $user_list[] = ''.$u.''; - } - - echo '

      '.sprintf(__('You are about to change permissions on the following blogs for users %s.'), - implode(', ',$user_list)); - - echo '

      '; - - foreach ($blogs as $b) - { - echo '

      '.html::escapeHTML($b).''. - form::hidden(array('blog_id[]'),$b).'

      '; - - foreach ($core->auth->getPermissionsTypes() as $perm_id => $perm) - { - $checked = false; - - if (count($users) == 1) { - $checked = isset($user_perm[$b]['p'][$perm_id]) && $user_perm[$b]['p'][$perm_id]; - } - - echo - '

      '; - } - } - - echo - '
      '.__('Validate permissions').''. - '

      '. - '
      '. - '

      '. - $core->formNonce(); - - foreach ($users as $u) { - echo form::hidden(array('user_id[]'),$u); - } - - echo form::hidden('upd_perm',1).'

      '; -} - -dcPage::close(); -?> \ No newline at end of file diff --git a/v2/dotclear/admin/permissions_blog.php b/v2/dotclear/admin/permissions_blog.php deleted file mode 100644 index 3757788..0000000 --- a/v2/dotclear/admin/permissions_blog.php +++ /dev/null @@ -1,196 +0,0 @@ - 'B.blog_id', -__('Blog name') => 'blog_name' -); - -$order_combo = array( -__('Descending') => 'desc', -__('Ascending') => 'asc' -); - -$q = !empty($_GET['q']) ? $_GET['q'] : ''; -$sortby = !empty($_GET['sortby']) ? $_GET['sortby'] : 'blog_id'; -$order = !empty($_GET['order']) ? $_GET['order'] : 'asc'; - - -# Check users -if (!empty($_REQUEST['user_id']) && is_array($_REQUEST['user_id'])) -{ - foreach ($_REQUEST['user_id'] as $u) - { - if ($core->userExists($u)) { - $users[] = $u; - } - } -} - -if (empty($users)) -{ - $core->error->add(__('No blog or user given.')); -} -else -{ - $page = !empty($_GET['page']) ? $_GET['page'] : 1; - $nb_per_page = 30; - - if (!empty($_GET['nb']) && (integer) $_GET['nb'] > 0) { - $nb_per_page = $_GET['nb']; - } - - $show_filters = false; - - # - Search filter - if ($q) { - $params['q'] = $q; - $show_filters = true; - } - - # - Sortby and order filter - if ($sortby !== '' && in_array($sortby,$sortby_combo)) { - if ($order !== '' && in_array($order,$order_combo)) { - $params['order'] = $sortby.' '.$order; - $show_filters = true; - } - } - - $params['limit'] = array((($page-1)*$nb_per_page),$nb_per_page); - - try { - $rs = $core->getBlogs($params); - $counter = $core->getBlogs($params,1); - $nb_blog = $counter->f(0); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } -} - -/* DISPLAY --------------------------------------------------------- */ -$starting_script = dcPage::jsLoad('js/_permissions_blog.js'); -if (!$show_filters) { - $starting_script .= dcPage::jsLoad('js/filter-controls.js'); -} -dcPage::open(__('choose a blog'),$starting_script); - -echo '

      '.__('Users').''.__('Choose a blog').'

      '; - -if (!$core->error->flag()) -{ - $hidden_fields = ''; - foreach ($users as $u) { - $hidden_fields .= form::hidden(array('user_id[]'),$u); - } - - if (!$show_filters) { - echo '

      '.__('Filters').'

      '; - } - - echo - '
      '. - '
      '.__('Filters').''. - - '
      '. - '

      '. - '

      '. - '
      '. - - '
      '. - '

      '. - '

      '. - ''. - $hidden_fields.'

      '. - '
      '. - - '
      '. //Opera sucks - '
      '. - '
      '; - - echo - '

      '. - sprintf(__('Choose one or more blogs to which you want to give permissions to users %s.'), - ''.implode(', ',$users).'').'

      '; - - # Show blogs - if ($nb_blog == 0) - { - echo '

      '.__('No blog').'

      '; - } - else - { - $pager = new pager($page,$nb_blog,$nb_per_page,10); - $pager->var_page = 'page'; - - echo '

      '.__('Page(s)').' : '.$pager->getLinks().'

      '; - - echo - '
      '. - ''. - ''. - ''. - ''. - ''. - ''; - - while ($rs->fetch()) { - echo blogLine($rs); - } - - echo - '
      '.__('Blog ID').''.__('Blog name').''.__('Entries').''.__('Status').'
      '. - - '

      '. - - '

      '. - $hidden_fields. - $core->formNonce().'

      '. - '
      '; - - echo '

      '.__('Page(s)').' : '.$pager->getLinks().'

      '; - } -} - -dcPage::close(); - -function blogLine($rs) -{ - global $core; - - $img_status = $rs->blog_status == 1 ? 'check-on' : 'check-off'; - $txt_status = $GLOBALS['core']->getBlogStatus($rs->blog_status); - $img_status = sprintf('%2$s',$img_status,$txt_status); - - return - ''. - ''. - form::checkbox(array('blog_id[]'),$rs->blog_id,'','','',false,'title="'.__('select').' '.$rs->blog_id.'"').''. - ''.$rs->blog_id.''. - ''.html::escapeHTML($rs->blog_name).''. - ''.$core->countBlogPosts($rs->blog_id).''. - ''.$img_status.''. - ''; -} -?> \ No newline at end of file diff --git a/v2/dotclear/admin/plugin.php b/v2/dotclear/admin/plugin.php deleted file mode 100644 index cea46d5..0000000 --- a/v2/dotclear/admin/plugin.php +++ /dev/null @@ -1,91 +0,0 @@ -plugins->moduleExists($p)) { - $p_file = $core->plugins->moduleRoot($p).'/index.php'; -} - -if (file_exists($p_file)) -{ - # Loading plugin - $p_info = $core->plugins->getModules($p); - - $p_url = 'plugin.php?p='.$p; - - $p_title = 'no content - plugin'; - $p_head = ''; - $p_content = '

      '.__('No content found on this plugin.').'

      '; - - ob_start(); - include $p_file; - $res = ob_get_contents(); - ob_end_clean(); - - if (preg_match('|(.*?)(.*?)|ms',$m[1],$mt)) { - $p_title = $mt[1]; - } - - if (preg_match_all('|(.*?)|ms',$m[1],$ms)) { - foreach ($ms[1] as $v) { - $p_head .= $v."\n"; - } - } - - if (preg_match_all('|(.*?)|ms',$m[1],$ms)) { - foreach ($ms[1] as $v) { - $p_head .= $v."\n"; - } - } - - if (preg_match_all('|()|ms',$m[1],$ms)) { - foreach ($ms[1] as $v) { - $p_head .= $v."\n"; - } - } - } - - if (preg_match('|(.+)|ms',$res,$m)) { - $p_content = $m[1]; - } - - call_user_func($open_f,$p_title,$p_head); - echo $p_content; - call_user_func($close_f); -} -else -{ - call_user_func($open_f,__('Plugin not found')); - - echo '

      '.__('Plugin not found').'

      '; - - echo '

      '.__('The plugin you reached does not exist or does not have an admin page.').'

      '; - - call_user_func($close_f); -} -?> \ No newline at end of file diff --git a/v2/dotclear/admin/plugins.php b/v2/dotclear/admin/plugins.php deleted file mode 100644 index cdc7a61..0000000 --- a/v2/dotclear/admin/plugins.php +++ /dev/null @@ -1,364 +0,0 @@ -plugins->moduleExists($plugin_id)) { - throw new Exception(__('No such plugin.')); - } - - $plugin = $core->plugins->getModules($plugin_id); - $plugin['id'] = $plugin_id; - - if (!preg_match('!^'.$p_path_pat.'!', $plugin['root'])) { - throw new Exception(__('You don\'t have permissions to delete this plugin.')); - } - - # --BEHAVIOR-- pluginBeforeDelete - $core->callBehavior('pluginsBeforeDelete', $plugin); - - $core->plugins->deleteModule($plugin_id); - - # --BEHAVIOR-- pluginAfterDelete - $core->callBehavior('pluginsAfterDelete', $plugin); - } - else - { - $core->plugins->deleteModule($plugin_id,true); - } - - http::redirect('plugins.php?removed=1'); - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } - } - # Deactivate plugin - elseif ($plugin_id && !empty($_POST['deactivate'])) - { - try - { - if (!$core->plugins->moduleExists($plugin_id)) { - throw new Exception(__('No such plugin.')); - } - - $plugin = $core->plugins->getModules($plugin_id); - $plugin['id'] = $plugin_id; - - if (!$plugin['root_writable']) { - throw new Exception(__('You don\'t have permissions to deactivate this plugin.')); - } - - $core->plugins->deactivateModule($plugin_id); - http::redirect('plugins.php'); - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } - } - # Activate plugin - elseif ($plugin_id && !empty($_POST['activate'])) - { - try - { - $p = $core->plugins->getDisabledModules(); - if (!isset($p[$plugin_id])) { - throw new Exception(__('No such plugin.')); - } - $core->plugins->activateModule($plugin_id); - http::redirect('plugins.php'); - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } - } - # Plugin upload - elseif ((!empty($_POST['upload_pkg']) && !empty($_FILES['pkg_file'])) || - (!empty($_POST['fetch_pkg']) && !empty($_POST['pkg_url']))) - { - try - { - if (empty($_POST['your_pwd']) || !$core->auth->checkPassword(crypt::hmac(DC_MASTER_KEY,$_POST['your_pwd']))) { - throw new Exception(__('Password verification failed')); - } - - if (!empty($_POST['upload_pkg'])) - { - files::uploadStatus($_FILES['pkg_file']); - - $dest = $p_path.'/'.$_FILES['pkg_file']['name']; - if (!move_uploaded_file($_FILES['pkg_file']['tmp_name'],$dest)) { - throw new Exception(__('Unable to move uploaded file.')); - } - } - else - { - $url = urldecode($_POST['pkg_url']); - $dest = $p_path.'/'.basename($url); - - try - { - $client = netHttp::initClient($url,$path); - $client->setUserAgent('Dotclear - http://www.dotclear.org/'); - $client->useGzip(false); - $client->setPersistReferers(false); - $client->setOutput($dest); - $client->get($path); - } - catch( Exception $e) - { - throw new Exception(__('An error occurred while downloading the file.')); - } - - unset($client); - } - - $ret_code = $core->plugins->installPackage($dest,$core->plugins); - http::redirect('plugins.php?added='.$ret_code); - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - $default_tab = 'addplugin'; - } - } -} - -# Plugin install -$plugins_install = $core->plugins->installModules(); - -/* DISPLAY Main page --------------------------------------------------------- */ -dcPage::open(__('Plugins management'), - dcPage::jsLoad('js/_plugins.js'). - dcPage::jsPageTabs($default_tab) -); - -echo -'

      '.__('Plugins management').'

      '; - -if (!empty($_GET['removed'])) { - echo - '

      '.__('Plugin has been successfully deleted.').'

      '; -} -if (!empty($_GET['added'])) { - echo '

      '. - ($_GET['added'] == 2 ? __('Plugin has been successfully upgraded') : __('Plugin has been successfully installed.')). - '

      '; -} - -# Plugins install messages -if (!empty($plugins_install['success'])) -{ - echo '
      '.__('Following plugins have been installed:').'
        '; - foreach ($plugins_install['success'] as $k => $v) { - echo '
      • '.$k.'
      • '; - } - echo '
      '; -} -if (!empty($plugins_install['failure'])) -{ - echo '
      '.__('Following plugins have not been installed:').'
        '; - foreach ($plugins_install['failure'] as $k => $v) { - echo '
      • '.$k.' ('.$v.')
      • '; - } - echo '
      '; -} - -# List all active plugins -echo '

      '.__('Plugins add new functionalities to Dotclear. '. -'Here you can activate or deactivate installed plugins.').'

      '; - -echo '

      '.sprintf(__('You can find additional plugins for your blog on %s.'), -'Dotaddict').' '; - -if ($is_writable) { - echo __('To install or upgrade a plugin you generally just need to upload it '. - 'in "Install or upgrade a plugin" section.'); -} else { - echo __('To install or upgrade a plugin you just need to extract it in your plugins directory.'); -} -echo '

      '; - -echo -'
      '; - -$p_available = $core->plugins->getModules(); -uasort($p_available,create_function('$a,$b','return strcasecmp($a["name"],$b["name"]);')); -if (!empty($p_available)) -{ - echo - '

      '.__('Activated plugins').'

      '. - ''. - ''. - ''. - ''. - ''. - ''; - - foreach ($p_available as $k => $v) - { - $is_deletable = $is_writable && preg_match('!^'.$p_path_pat.'!',$v['root']); - $is_deactivable = $v['root_writable']; - - echo - ''. - ''. - ''. - ''. - ''. - ''; - } - echo - '
      '.__('Plugin').''.__('Version').''.__('Details').''.__('Action').'
      '.html::escapeHTML($k).''.html::escapeHTML($v['version']).''.html::escapeHTML($v['name']).' '. - '
      '.html::escapeHTML($v['desc']).'
      '; - - if ($is_deletable || $is_deactivable) - { - echo - '
      '. - '
      '. - $core->formNonce(). - form::hidden(array('plugin_id'),html::escapeHTML($k)). - ($is_deactivable ? ' ' : ''). - ($is_deletable ? ' ' : ''). - '
      '. - '
      '; - } - - echo - '
      '; -} - -$p_disabled = $core->plugins->getDisabledModules(); -uksort($p_disabled,create_function('$a,$b','return strcasecmp($a,$b);')); -if (!empty($p_disabled)) -{ - echo - '

      '.__('Deactivated plugins').'

      '. - ''. - ''. - ''. - ''; - - foreach ($p_disabled as $k => $v) - { - $is_deletable = $is_writable && preg_match('!^'.$p_path_pat.'!',$v['root']); - $is_activable = $v['root_writable']; - - echo - ''. - ''. - ''. - ''; - } - echo - '
      '.__('Plugin').''.__('Action').'
      '.html::escapeHTML($k).''; - - if ($is_deletable || $is_activable) - { - echo - '
      '. - '
      '. - $core->formNonce(). - form::hidden(array('plugin_id'),html::escapeHTML($k)). - form::hidden(array('deactivated'),1). - ($is_activable ? ' ' : ''). - ($is_deletable ? ' ' : ''). - '
      '. - '
      '; - } - - echo - '
      '; -} - -echo '
      '; - -# Add a new plugin -echo -'
      '; - -if ($is_writable) -{ - echo '

      '.__('You can install plugins by uploading or downloading zip files.').'

      '; - - # 'Upload plugin' form - echo - '
      '. - '
      '. - ''.__('Upload a zip file').''. - '

      '. - '

      '. - ''. - $core->formNonce(). - '
      '. - '
      '; - - # 'Fetch plugin' form - echo - '
      '. - '
      '. - ''.__('Download a zip file').''. - '

      '. - '

      '. - ''. - $core->formNonce(). - '
      '. - '
      '; -} -else -{ - echo - '

      '. - __('To enable this function, please give write access to your plugins directory.'). - '

      '; -} -echo '
      '; - -# --BEHAVIOR-- pluginsToolsTabs -$core->callBehavior('pluginsToolsTabs',$core); - -dcPage::close(); -?> \ No newline at end of file diff --git a/v2/dotclear/admin/popup_link.php b/v2/dotclear/admin/popup_link.php deleted file mode 100644 index 5f3bddd..0000000 --- a/v2/dotclear/admin/popup_link.php +++ /dev/null @@ -1,62 +0,0 @@ -'.__('Add a link').''; - -# Languages combo -$rs = $core->blog->getLangs(array('order'=>'asc')); -$all_langs = l10n::getISOcodes(0,1); -$lang_combo = array('' => '', __('Most used') => array(), __('Available') => l10n::getISOcodes(1,1)); -while ($rs->fetch()) { - if (isset($all_langs[$rs->post_lang])) { - $lang_combo[__('Most used')][$all_langs[$rs->post_lang]] = $rs->post_lang; - unset($lang_combo[__('Available')][$all_langs[$rs->post_lang]]); - } else { - $lang_combo[__('Most used')][$rs->post_lang] = $rs->post_lang; - } -} -unset($all_langs); -unset($rs); - -echo -''. - -'

      '.__('Cancel').' - '. -''.__('Insert').'

      '."\n". - -''."\n"; - -dcPage::closePopup(); -?> \ No newline at end of file diff --git a/v2/dotclear/admin/popup_posts.php b/v2/dotclear/admin/popup_posts.php deleted file mode 100644 index 46591f4..0000000 --- a/v2/dotclear/admin/popup_posts.php +++ /dev/null @@ -1,57 +0,0 @@ -'.__('Add a link to an entry').''; - -echo '
      '. -'

      '. -'

      '. -'
      '; - -try { - $posts = $core->blog->getPosts($params); - $counter = $core->blog->getPosts($params,true); - $post_list = new adminPostMiniList($core,$posts,$counter->f(0)); -} catch (Exception $e) { - $core->error->add($e->getMessage()); -} - -echo '
      '; # I know it's not a form but we just need the ID -$post_list->display($page,$nb_per_page); -echo '
      '; - -echo '

      '.__('cancel').'

      '; - -dcPage::closePopup(); -?> \ No newline at end of file diff --git a/v2/dotclear/admin/post.php b/v2/dotclear/admin/post.php deleted file mode 100644 index 02493ec..0000000 --- a/v2/dotclear/admin/post.php +++ /dev/null @@ -1,624 +0,0 @@ -auth->getOption('post_format'); -$post_password = ''; -$post_url = ''; -$post_lang = $core->auth->getInfo('user_lang'); -$post_title = ''; -$post_excerpt = ''; -$post_excerpt_xhtml = ''; -$post_content = ''; -$post_content_xhtml = ''; -$post_notes = ''; -$post_status = $core->auth->getInfo('user_post_status'); -$post_selected = false; -$post_open_comment = $core->blog->settings->system->allow_comments; -$post_open_tb = $core->blog->settings->system->allow_trackbacks; - -$page_title = __('New entry'); - -$can_view_page = true; -$can_edit_post = $core->auth->check('usage,contentadmin',$core->blog->id); -$can_publish = $core->auth->check('publish,contentadmin',$core->blog->id); -$can_delete = false; - -$post_headlink = ''; -$post_link = '%s'; - -$next_link = $prev_link = $next_headlink = $prev_headlink = null; - -# If user can't publish -if (!$can_publish) { - $post_status = -2; -} - -# Getting categories -$categories_combo = array(' ' => ''); -try { - $categories = $core->blog->getCategories(array('post_type'=>'post')); - while ($categories->fetch()) { - $categories_combo[] = new formSelectOption( - str_repeat('  ',$categories->level-1).($categories->level-1 == 0 ? '' : '• ').html::escapeHTML($categories->cat_title), - $categories->cat_id - ); - } -} catch (Exception $e) { } - -# Status combo -foreach ($core->blog->getAllPostStatus() as $k => $v) { - $status_combo[$v] = (string) $k; -} - -# Formaters combo -foreach ($core->getFormaters() as $v) { - $formaters_combo[$v] = $v; -} - -# Languages combo -$rs = $core->blog->getLangs(array('order'=>'asc')); -$all_langs = l10n::getISOcodes(0,1); -$lang_combo = array('' => '', __('Most used') => array(), __('Available') => l10n::getISOcodes(1,1)); -while ($rs->fetch()) { - if (isset($all_langs[$rs->post_lang])) { - $lang_combo[__('Most used')][$all_langs[$rs->post_lang]] = $rs->post_lang; - unset($lang_combo[__('Available')][$all_langs[$rs->post_lang]]); - } else { - $lang_combo[__('Most used')][$rs->post_lang] = $rs->post_lang; - } -} -unset($all_langs); -unset($rs); - - -# Get entry informations -if (!empty($_REQUEST['id'])) -{ - $params['post_id'] = $_REQUEST['id']; - - $post = $core->blog->getPosts($params); - - if ($post->isEmpty()) - { - $core->error->add(__('This entry does not exist.')); - $can_view_page = false; - } - else - { - $post_id = $post->post_id; - $cat_id = $post->cat_id; - $post_dt = date('Y-m-d H:i',strtotime($post->post_dt)); - $post_format = $post->post_format; - $post_password = $post->post_password; - $post_url = $post->post_url; - $post_lang = $post->post_lang; - $post_title = $post->post_title; - $post_excerpt = $post->post_excerpt; - $post_excerpt_xhtml = $post->post_excerpt_xhtml; - $post_content = $post->post_content; - $post_content_xhtml = $post->post_content_xhtml; - $post_notes = $post->post_notes; - $post_status = $post->post_status; - $post_selected = (boolean) $post->post_selected; - $post_open_comment = (boolean) $post->post_open_comment; - $post_open_tb = (boolean) $post->post_open_tb; - - $page_title = __('Edit entry'); - - $can_edit_post = $post->isEditable(); - $can_delete= $post->isDeletable(); - - $next_rs = $core->blog->getNextPost($post,1); - $prev_rs = $core->blog->getNextPost($post,-1); - - if ($next_rs !== null) { - $next_link = sprintf($post_link,$next_rs->post_id, - html::escapeHTML($next_rs->post_title),__('next entry').' »'); - $next_headlink = sprintf($post_headlink,'next', - html::escapeHTML($next_rs->post_title),$next_rs->post_id); - } - - if ($prev_rs !== null) { - $prev_link = sprintf($post_link,$prev_rs->post_id, - html::escapeHTML($prev_rs->post_title),'« '.__('previous entry')); - $prev_headlink = sprintf($post_headlink,'previous', - html::escapeHTML($prev_rs->post_title),$prev_rs->post_id); - } - - try { - $core->media = new dcMedia($core); - } catch (Exception $e) {} - } -} - -# Format excerpt and content -if (!empty($_POST) && $can_edit_post) -{ - $post_format = $_POST['post_format']; - $post_excerpt = $_POST['post_excerpt']; - $post_content = $_POST['post_content']; - - $post_title = $_POST['post_title']; - - $cat_id = (integer) $_POST['cat_id']; - - if (isset($_POST['post_status'])) { - $post_status = (integer) $_POST['post_status']; - } - - if (empty($_POST['post_dt'])) { - $post_dt = ''; - } else { - $post_dt = strtotime($_POST['post_dt']); - $post_dt = date('Y-m-d H:i',$post_dt); - } - - $post_open_comment = !empty($_POST['post_open_comment']); - $post_open_tb = !empty($_POST['post_open_tb']); - $post_selected = !empty($_POST['post_selected']); - $post_lang = $_POST['post_lang']; - $post_password = !empty($_POST['post_password']) ? $_POST['post_password'] : null; - - $post_notes = $_POST['post_notes']; - - if (isset($_POST['post_url'])) { - $post_url = $_POST['post_url']; - } - - $core->blog->setPostContent( - $post_id,$post_format,$post_lang, - $post_excerpt,$post_excerpt_xhtml,$post_content,$post_content_xhtml - ); -} - -# Create or update post -if (!empty($_POST) && !empty($_POST['save']) && $can_edit_post) -{ - $cur = $core->con->openCursor($core->prefix.'post'); - - $cur->post_title = $post_title; - $cur->cat_id = ($cat_id ? $cat_id : null); - $cur->post_dt = $post_dt ? date('Y-m-d H:i:00',strtotime($post_dt)) : ''; - $cur->post_format = $post_format; - $cur->post_password = $post_password; - $cur->post_lang = $post_lang; - $cur->post_title = $post_title; - $cur->post_excerpt = $post_excerpt; - $cur->post_excerpt_xhtml = $post_excerpt_xhtml; - $cur->post_content = $post_content; - $cur->post_content_xhtml = $post_content_xhtml; - $cur->post_notes = $post_notes; - $cur->post_status = $post_status; - $cur->post_selected = (integer) $post_selected; - $cur->post_open_comment = (integer) $post_open_comment; - $cur->post_open_tb = (integer) $post_open_tb; - - if (isset($_POST['post_url'])) { - $cur->post_url = $post_url; - } - - # Update post - if ($post_id) - { - try - { - # --BEHAVIOR-- adminBeforePostUpdate - $core->callBehavior('adminBeforePostUpdate',$cur,$post_id); - - $core->blog->updPost($post_id,$cur); - - # --BEHAVIOR-- adminAfterPostUpdate - $core->callBehavior('adminAfterPostUpdate',$cur,$post_id); - - http::redirect('post.php?id='.$post_id.'&upd=1'); - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } - } - else - { - $cur->user_id = $core->auth->userID(); - - try - { - # --BEHAVIOR-- adminBeforePostCreate - $core->callBehavior('adminBeforePostCreate',$cur); - - $return_id = $core->blog->addPost($cur); - - # --BEHAVIOR-- adminAfterPostCreate - $core->callBehavior('adminAfterPostCreate',$cur,$return_id); - - http::redirect('post.php?id='.$return_id.'&crea=1'); - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } - } -} - -if (!empty($_POST['delete']) && $can_delete) -{ - try { - # --BEHAVIOR-- adminBeforePostDelete - $core->callBehavior('adminBeforePostDelete',$post_id); - $core->blog->delPost($post_id); - http::redirect('posts.php'); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } -} - -/* DISPLAY --------------------------------------------------------- */ -$default_tab = 'edit-entry'; -if (!$can_edit_post) { - $default_tab = ''; -} -if (!empty($_GET['co'])) { - $default_tab = 'comments'; -} - -dcPage::open($page_title.' - '.__('Entries'), - dcPage::jsDatePicker(). - dcPage::jsToolBar(). - dcPage::jsModal(). - dcPage::jsMetaEditor(). - dcPage::jsLoad('js/_post.js'). - dcPage::jsConfirmClose('entry-form','comment-form'). - # --BEHAVIOR-- adminPostHeaders - $core->callBehavior('adminPostHeaders'). - dcPage::jsPageTabs($default_tab). - $next_headlink."\n".$prev_headlink -); - -if (!empty($_GET['upd'])) { - echo '

      '.__('Entry has been successfully updated.').'

      '; -} -elseif (!empty($_GET['crea'])) { - echo '

      '.__('Entry has been successfully created.').'

      '; -} -elseif (!empty($_GET['attached'])) { - echo '

      '.__('File has been successfully attached.').'

      '; -} -elseif (!empty($_GET['rmattach'])) { - echo '

      '.__('Attachment has been successfully removed.').'

      '; -} - -if (!empty($_GET['creaco'])) { - echo '

      '.__('Comment has been successfully created.').'

      '; - } - -# XHTML conversion -if (!empty($_GET['xconv'])) -{ - $post_excerpt = $post_excerpt_xhtml; - $post_content = $post_content_xhtml; - $post_title = $post_title_xhtml; - $post_format = 'xhtml'; - - echo '

      '.__('Don\'t forget to validate your XHTML conversion by saving your post.').'

      '; -} - -echo '

      '.html::escapeHTML($core->blog->name).' › '.''.__('Entries').''.$page_title; - - if ($post_id) { - echo ' “'.$post_title.'”'; - } -echo '

      '; - -if ($post_id && $post->post_status == 1) { - echo '

      '.__('Go to this entry on the site').'

      '; -} -if ($post_id) -{ - echo '

      '; - if ($prev_link) { echo $prev_link; } - if ($next_link && $prev_link) { echo ' - '; } - if ($next_link) { echo $next_link; } - - # --BEHAVIOR-- adminPostNavLinks - $core->callBehavior('adminPostNavLinks',isset($post) ? $post : null); - - echo '

      '; -} - -# Exit if we cannot view page -if (!$can_view_page) { - dcPage::helpBlock('core_post'); - dcPage::close(); - exit; -} - -/* Post form if we can edit post --------------------------------------------------------- */ -if ($can_edit_post) -{ - echo '
      '; - echo '
      '; - echo '
      '; - echo '
      '; - - echo - '

      '. - - '

      '. - form::textarea('post_excerpt',50,5,html::escapeHTML($post_excerpt)). - '

      '. - - '

      '. - form::textarea('post_content',50,$core->auth->getOption('edit_size'),html::escapeHTML($post_content)). - '

      '. - - '

      '. - form::textarea('post_notes',50,5,html::escapeHTML($post_notes)). - '

      '; - - # --BEHAVIOR-- adminPostForm - $core->callBehavior('adminPostForm',isset($post) ? $post : null); - - echo - '

      '. - ($post_id ? form::hidden('id',$post_id) : ''). - ' '; - if ($post_id) { - $preview_url = - $core->blog->url.$core->url->getURLFor('preview',$core->auth->userID().'/'. - http::browserUID(DC_MASTER_KEY.$core->auth->userID().$core->auth->getInfo('user_pwd')). - '/'.$post->post_url); - echo ''.__('Preview').' '; - } - echo - ($can_delete ? '' : ''). - $core->formNonce(). - '

      '; - - echo '
      '; // End #entry-content - echo '
      '; // End #entry-wrapper - - echo '
      '; - - echo - '

      '. - - '

      '. - - '

      '. - - '

      '. - '

      '. - '

      '.($post_id && $post_format != 'xhtml' ? ''.__('Convert to XHTML').'' : '').'

      '. - - '

      '. - '

      '. - '

      '. - - '

      '. - - '

      '. - - '
      '. - '

      '. - '

      '. - __('Warning: If you set the URL manually, it may conflict with another entry.'). - '

      '. - '
      '; - - # --BEHAVIOR-- adminPostFormSidebar - $core->callBehavior('adminPostFormSidebar',isset($post) ? $post : null); - - echo '
      '; // End #entry-sidebar - - echo '
      '; - - # --BEHAVIOR-- adminPostForm - $core->callBehavior('adminPostAfterForm',isset($post) ? $post : null); - - echo '
      '; - - if ($post_id && $post->post_status == 1) { - echo '

      '. - __('Ping blogs').'

      '; - } - -} - - -/* Comments and trackbacks --------------------------------------------------------- */ -if ($post_id) -{ - $params = array('post_id' => $post_id, 'order' => 'comment_dt ASC'); - - $comments = $core->blog->getComments(array_merge($params,array('comment_trackback'=>0))); - $trackbacks = $core->blog->getComments(array_merge($params,array('comment_trackback'=>1))); - - # Actions combo box - $combo_action = array(); - if ($can_edit_post && $core->auth->check('publish,contentadmin',$core->blog->id)) - { - $combo_action[__('publish')] = 'publish'; - $combo_action[__('unpublish')] = 'unpublish'; - $combo_action[__('mark as pending')] = 'pending'; - $combo_action[__('mark as junk')] = 'junk'; - } - - if ($can_edit_post && $core->auth->check('delete,contentadmin',$core->blog->id)) - { - $combo_action[__('Delete')] = 'delete'; - } - - # --BEHAVIOR-- adminCommentsActionsCombo - $core->callBehavior('adminCommentsActionsCombo',array(&$combo_action)); - - $has_action = !empty($combo_action) && (!$trackbacks->isEmpty() || !$comments->isEmpty()); - - echo - '
      '; - - if ($has_action) { - echo '
      '; - } - - echo '

      '.__('Trackbacks').'

      '; - - if (!$trackbacks->isEmpty()) { - showComments($trackbacks,$has_action,true); - } else { - echo '

      '.__('No trackback').'

      '; - } - - echo '

      '.__('Comments').'

      '; - if (!$comments->isEmpty()) { - showComments($comments,$has_action); - } else { - echo '

      '.__('No comment').'

      '; - } - - if ($has_action) { - echo - '
      '. - '

      '. - - '

      '. - form::combo('action',$combo_action). - form::hidden('redir','post.php?id='.$post_id.'&co=1'). - $core->formNonce(). - '

      '. - '
      '. - '
      '; - } - - echo '
      '; -} - -/* Add a comment --------------------------------------------------------- */ -if ($post_id) -{ - echo - '
      '. - '

      '.__('Add a comment').'

      '. - - '
      '. - '
      '. - '

      '. - - '

      '. - - '

      '. - - '

      '. - form::textarea('comment_content',50,8,html::escapeHTML('')). - '

      '. - - '

      '.form::hidden('post_id',$post_id). - $core->formNonce(). - '

      '. - '
      '. - '
      '. - '
      '; -} - - -# Show comments or trackbacks -function showComments($rs,$has_action,$tb=false) -{ - echo - ''. - ''. - ''. - ''. - ''. - ''. - ''; - - while($rs->fetch()) - { - $comment_url = 'comment.php?id='.$rs->comment_id; - - $img = '%1$s'; - switch ($rs->comment_status) { - case 1: - $img_status = sprintf($img,__('published'),'check-on.png'); - break; - case 0: - $img_status = sprintf($img,__('unpublished'),'check-off.png'); - break; - case -1: - $img_status = sprintf($img,__('pending'),'check-wrn.png'); - break; - case -2: - $img_status = sprintf($img,__('junk'),'junk.png'); - break; - } - - echo - ''. - - ''. - ''. - ''. - ''. - ''. - ''. - - ''; - } - - echo '
      '.__('Author').''.__('Date').''.__('IP address').''.__('Status').' 
      '. - ($has_action ? form::checkbox(array('comments[]'),$rs->comment_id,'','','',0,'title="'.($tb ? __('select this trackback') : __('select this comment')).'"') : '').''.html::escapeHTML($rs->comment_author).''.dt::dt2str(__('%Y-%m-%d %H:%M'),$rs->comment_dt).''.$rs->comment_ip.''.$img_status.''. - '
      '; -} - -dcPage::helpBlock('core_post','core_wiki'); -dcPage::close(); -?> \ No newline at end of file diff --git a/v2/dotclear/admin/post_media.php b/v2/dotclear/admin/post_media.php deleted file mode 100644 index 1ed7d22..0000000 --- a/v2/dotclear/admin/post_media.php +++ /dev/null @@ -1,79 +0,0 @@ -blog->getPosts(array('post_id' => $post_id,'post_type'=>'')); -if ($rs->isEmpty()) { - exit; -} - -if ($post_id && $media_id && !empty($_POST['attach'])) -{ - $core->media = new dcMedia($core); - $core->media->addPostMedia($post_id,$media_id); - http::redirect($core->getPostAdminURL($rs->post_type,$post_id,false)); -} - -try { - $core->media = new dcMedia($core); - $f = $core->media->getPostMedia($post_id,$media_id); - if (empty($f)) { - $post_id = $media_id = null; - throw new Exception(__('This attachment does not exist')); - } - $f = $f[0]; -} catch (Exception $e) { - $core->error->add($e->getMessage()); -} - -# Remove a media from en -if (($post_id && $media_id) || $core->error->flag()) -{ - if (!empty($_POST['remove'])) - { - $core->media->removePostMedia($post_id,$media_id); - http::redirect($core->getPostAdminURL($rs->post_type,$post_id,false).'&rmattach=1'); - } - elseif (isset($_POST['post_id'])) { - http::redirect($core->getPostAdminURL($rs->post_type,$post_id,false)); - } - - if (!empty($_GET['remove'])) - { - dcPage::open(__('Remove attachment')); - - echo '

      '.__('Attachment').' › '.__('confirm removal').'

      '; - - echo - '
      '. - '

      '.__('Are you sure you want to remove this attachment?').'

      '. - '

      '. - '   '. - form::hidden('post_id',$post_id). - form::hidden('media_id',$media_id). - $core->formNonce().'

      '. - '
      '; - - dcPage::close(); - exit; - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/admin/posts.php b/v2/dotclear/admin/posts.php deleted file mode 100644 index f861074..0000000 --- a/v2/dotclear/admin/posts.php +++ /dev/null @@ -1,324 +0,0 @@ -blog->getCategories(array('post_type'=>'post')); -} catch (Exception $e) { - $core->error->add($e->getMessage()); -} - -# Getting authors -try { - $users = $core->blog->getPostsUsers(); -} catch (Exception $e) { - $core->error->add($e->getMessage()); -} - -# Getting dates -try { - $dates = $core->blog->getDates(array('type'=>'month')); -} catch (Exception $e) { - $core->error->add($e->getMessage()); -} - -# Getting langs -try { - $langs = $core->blog->getLangs(); -} catch (Exception $e) { - $core->error->add($e->getMessage()); -} - -# Creating filter combo boxes -if (!$core->error->flag()) -{ - # Filter form we'll put in html_block - $users_combo = $categories_combo = array(); - $users_combo['-'] = $categories_combo['-'] = ''; - while ($users->fetch()) - { - $user_cn = dcUtils::getUserCN($users->user_id,$users->user_name, - $users->user_firstname,$users->user_displayname); - - if ($user_cn != $users->user_id) { - $user_cn .= ' ('.$users->user_id.')'; - } - - $users_combo[$user_cn] = $users->user_id; - } - - $categories_combo[__('None')] = 'NULL'; - while ($categories->fetch()) { - $categories_combo[str_repeat('  ',$categories->level-1).($categories->level-1 == 0 ? '' : '• '). - html::escapeHTML($categories->cat_title). - ' ('.$categories->nb_post.')'] = $categories->cat_id; - } - - $status_combo = array( - '-' => '' - ); - foreach ($core->blog->getAllPostStatus() as $k => $v) { - $status_combo[$v] = (string) $k; - } - - $selected_combo = array( - '-' => '', - __('selected') => '1', - __('not selected') => '0' - ); - - # Months array - $dt_m_combo['-'] = ''; - while ($dates->fetch()) { - $dt_m_combo[dt::str('%B %Y',$dates->ts())] = $dates->year().$dates->month(); - } - - $lang_combo['-'] = ''; - while ($langs->fetch()) { - $lang_combo[$langs->post_lang] = $langs->post_lang; - } - - $sortby_combo = array( - __('Date') => 'post_dt', - __('Title') => 'post_title', - __('Category') => 'cat_title', - __('Author') => 'user_id', - __('Status') => 'post_status', - __('Selected') => 'post_selected' - ); - - $order_combo = array( - __('Descending') => 'desc', - __('Ascending') => 'asc' - ); -} - -# Actions combo box -$combo_action = array(); -if ($core->auth->check('publish,contentadmin',$core->blog->id)) -{ - $combo_action[__('Status')] = array( - __('Publish') => 'publish', - __('Unpublish') => 'unpublish', - __('Schedule') => 'schedule', - __('Mark as pending') => 'pending' - ); -} -$combo_action[__('Mark')] = array( - __('Mark as selected') => 'selected', - __('Mark as unselected') => 'unselected' -); -$combo_action[__('Change')] = array(__('Change category') => 'category'); -if ($core->auth->check('admin',$core->blog->id)) -{ - $combo_action[__('Change')] = array_merge($combo_action[__('Change')], - array(__('Change author') => 'author')); -} -if ($core->auth->check('delete,contentadmin',$core->blog->id)) -{ - $combo_action[__('Delete')] = array(__('Delete') => 'delete'); -} - -# --BEHAVIOR-- adminPostsActionsCombo -$core->callBehavior('adminPostsActionsCombo',array(&$combo_action)); - -/* Get posts --------------------------------------------------------- */ -$user_id = !empty($_GET['user_id']) ? $_GET['user_id'] : ''; -$cat_id = !empty($_GET['cat_id']) ? $_GET['cat_id'] : ''; -$status = isset($_GET['status']) ? $_GET['status'] : ''; -$selected = isset($_GET['selected']) ? $_GET['selected'] : ''; -$month = !empty($_GET['month']) ? $_GET['month'] : ''; -$lang = !empty($_GET['lang']) ? $_GET['lang'] : ''; -$sortby = !empty($_GET['sortby']) ? $_GET['sortby'] : 'post_dt'; -$order = !empty($_GET['order']) ? $_GET['order'] : 'desc'; - -$show_filters = false; - -$page = !empty($_GET['page']) ? (integer) $_GET['page'] : 1; -$nb_per_page = 30; - -if (!empty($_GET['nb']) && (integer) $_GET['nb'] > 0) { - if ($nb_per_page != $_GET['nb']) { - $show_filters = true; - } - $nb_per_page = (integer) $_GET['nb']; -} - -$params['limit'] = array((($page-1)*$nb_per_page),$nb_per_page); -$params['no_content'] = true; - -# - User filter -if ($user_id !== '' && in_array($user_id,$users_combo)) { - $params['user_id'] = $user_id; - $show_filters = true; -} else { - $user_id=''; -} - -# - Categories filter -if ($cat_id !== '' && in_array($cat_id,$categories_combo)) { - $params['cat_id'] = $cat_id; - $show_filters = true; -} else { - $cat_id=''; -} - -# - Status filter -if ($status !== '' && in_array($status,$status_combo)) { - $params['post_status'] = $status; - $show_filters = true; -} else { - $status=''; -} - -# - Selected filter -if ($selected !== '' && in_array($selected,$selected_combo)) { - $params['post_selected'] = $selected; - $show_filters = true; -} else { - $selected=''; -} - -# - Month filter -if ($month !== '' && in_array($month,$dt_m_combo)) { - $params['post_month'] = substr($month,4,2); - $params['post_year'] = substr($month,0,4); - $show_filters = true; -} else { - $month=''; -} - -# - Lang filter -if ($lang !== '' && in_array($lang,$lang_combo)) { - $params['post_lang'] = $lang; - $show_filters = true; -} else { - $lang=''; -} - -# - Sortby and order filter -if ($sortby !== '' && in_array($sortby,$sortby_combo)) { - if ($order !== '' && in_array($order,$order_combo)) { - $params['order'] = $sortby.' '.$order; - } else { - $order='desc'; - } - - if ($sortby != 'post_dt' || $order != 'desc') { - $show_filters = true; - } -} else { - $sortby='post_dt'; - $order='desc'; -} - -# Get posts -try { - $posts = $core->blog->getPosts($params); - $counter = $core->blog->getPosts($params,true); - $post_list = new adminPostList($core,$posts,$counter->f(0)); -} catch (Exception $e) { - $core->error->add($e->getMessage()); -} - -/* DISPLAY --------------------------------------------------------- */ -$starting_script = dcPage::jsLoad('js/_posts_list.js'); -if (!$show_filters) { - $starting_script .= dcPage::jsLoad('js/filter-controls.js'); -} - -dcPage::open(__('Entries'),$starting_script); - -if (!$core->error->flag()) -{ - echo - '

      '.html::escapeHTML($core->blog->name).' › '.__('Entries').'

      '. - '

      '.__('New entry').'

      '; - - if (!$show_filters) { - echo '

      '. - __('Filters').'

      '; - } - - echo - '
      '. - '
      '.__('Filters').''. - '
      '. - '
      '. - ' '. - ' '. - ' '. - '
      '. - - '
      '. - ' '. - ' '. - ' '. - '
      '. - - '
      '. - '

      '. - '

      '. - '

      '. - '

      '. - '
      '. - '
      '. - '
      '. //Opera sucks - '
      '. - '
      '; - - # Show posts - $post_list->display($page,$nb_per_page, - '
      '. - - '%s'. - - '
      '. - '

      '. - - '

      '. - form::combo('action',$combo_action). - '

      '. - form::hidden(array('user_id'),$user_id). - form::hidden(array('cat_id'),$cat_id). - form::hidden(array('status'),$status). - form::hidden(array('selected'),$selected). - form::hidden(array('month'),$month). - form::hidden(array('lang'),$lang). - form::hidden(array('sortby'),$sortby). - form::hidden(array('order'),$order). - form::hidden(array('page'),$page). - form::hidden(array('nb'),$nb_per_page). - $core->formNonce(). - '
      '. - '
      ' - ); -} - -dcPage::helpBlock('core_posts'); -dcPage::close(); -?> diff --git a/v2/dotclear/admin/posts_actions.php b/v2/dotclear/admin/posts_actions.php deleted file mode 100644 index e2e03d8..0000000 --- a/v2/dotclear/admin/posts_actions.php +++ /dev/null @@ -1,259 +0,0 @@ - $v) { - $entries[$k] = (integer) $v; - } - - $params['sql'] = 'AND P.post_id IN('.implode(',',$entries).') '; - - if (!isset($_POST['full_content']) || empty($_POST['full_content'])) { - $params['no_content'] = true; - } - - if (isset($_POST['post_type'])) { - $params['post_type'] = $_POST['post_type']; - } - - $posts = $core->blog->getPosts($params); - - # --BEHAVIOR-- adminPostsActions - $core->callBehavior('adminPostsActions',$core,$posts,$action,$redir); - - if (preg_match('/^(publish|unpublish|schedule|pending)$/',$action)) - { - switch ($action) { - case 'unpublish' : $status = 0; break; - case 'schedule' : $status = -1; break; - case 'pending' : $status = -2; break; - default : $status = 1; break; - } - - try - { - while ($posts->fetch()) { - $core->blog->updPostStatus($posts->post_id,$status); - } - - http::redirect($redir); - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } - } - elseif ($action == 'selected' || $action == 'unselected') - { - try - { - while ($posts->fetch()) { - $core->blog->updPostSelected($posts->post_id,$action == 'selected'); - } - - http::redirect($redir); - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } - } - elseif ($action == 'delete') - { - try - { - while ($posts->fetch()) { - # --BEHAVIOR-- adminBeforePostDelete - $core->callBehavior('adminBeforePostDelete',$posts->post_id); - $core->blog->delPost($posts->post_id); - } - - http::redirect($redir); - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } - - } - elseif ($action == 'category' && isset($_POST['new_cat_id'])) - { - try - { - while ($posts->fetch()) - { - $new_cat_id = (integer) $_POST['new_cat_id']; - $core->blog->updPostCategory($posts->post_id,$new_cat_id); - } - http::redirect($redir); - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } - } - elseif ($action == 'author' && isset($_POST['new_auth_id']) - && $core->auth->check('admin',$core->blog->id)) - { - $new_user_id = $_POST['new_auth_id']; - - try - { - if ($core->getUser($new_user_id)->isEmpty()) { - throw new Exception(__('This user does not exist')); - } - - while ($posts->fetch()) - { - $cur = $core->con->openCursor($core->prefix.'post'); - $cur->user_id = $new_user_id; - $cur->update('WHERE post_id = '.(integer) $posts->post_id); - } - - http::redirect($redir); - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } - } -} - -/* DISPLAY --------------------------------------------------------- */ -dcPage::open( - __('Entries'), - dcPage::jsMetaEditor(). - # --BEHAVIOR-- adminBeforePostDelete - $core->callBehavior('adminPostsActionsHeaders') -); - -if (!isset($action)) { - dcPage::close(); - exit; -} - -$hidden_fields = ''; -while ($posts->fetch()) { - $hidden_fields .= form::hidden(array('entries[]'),$posts->post_id); -} - -if (isset($_POST['redir']) && strpos($_POST['redir'],'://') === false) -{ - $hidden_fields .= form::hidden(array('redir'),html::escapeURL($_POST['redir'])); -} -else -{ - $hidden_fields .= - form::hidden(array('user_id'),$_POST['user_id']). - form::hidden(array('cat_id'),$_POST['cat_id']). - form::hidden(array('status'),$_POST['status']). - form::hidden(array('selected'),$_POST['selected']). - form::hidden(array('month'),$_POST['month']). - form::hidden(array('lang'),$_POST['lang']). - form::hidden(array('sortby'),$_POST['sortby']). - form::hidden(array('order'),$_POST['order']). - form::hidden(array('page'),$_POST['page']). - form::hidden(array('nb'),$_POST['nb']); -} - -if (isset($_POST['post_type'])) { - $hidden_fields .= form::hidden(array('post_type'),$_POST['post_type']); -} - -# --BEHAVIOR-- adminPostsActionsContent -$core->callBehavior('adminPostsActionsContent',$core,$action,$hidden_fields); - -if ($action == 'category') -{ - echo '

      '.__('Change category for entries').'

      '; - - # categories list - # Getting categories - $categories_combo = array(' ' => ''); - try { - $categories = $core->blog->getCategories(array('post_type'=>'post')); - while ($categories->fetch()) { - $categories_combo[] = new formSelectOption( - str_repeat('  ',$categories->level-1). - ($categories->level-1 == 0 ? '' : '• ').html::escapeHTML($categories->cat_title), - $categories->cat_id - ); - } - } catch (Exception $e) { } - - echo - '
      '. - '

      '; - - echo - $hidden_fields. - $core->formNonce(). - form::hidden(array('action'),'category'). - '

      '. - '
      '; -} -elseif ($action == 'author' && $core->auth->check('admin',$core->blog->id)) -{ - echo '

      '.__('Change author for entries').'

      '; - - echo - '
      '. - '

      '; - - echo - $hidden_fields. - $core->formNonce(). - form::hidden(array('action'),'author'). - '

      '. - '
      '; -} - -echo '

      '.__('back').'

      '; - -dcPage::close(); -?> \ No newline at end of file diff --git a/v2/dotclear/admin/preferences.php b/v2/dotclear/admin/preferences.php deleted file mode 100644 index 30420ab..0000000 --- a/v2/dotclear/admin/preferences.php +++ /dev/null @@ -1,631 +0,0 @@ -auth->getInfo('user_name'); -$user_firstname = $core->auth->getInfo('user_firstname'); -$user_displayname = $core->auth->getInfo('user_displayname'); -$user_email = $core->auth->getInfo('user_email'); -$user_url = $core->auth->getInfo('user_url'); -$user_lang = $core->auth->getInfo('user_lang'); -$user_tz = $core->auth->getInfo('user_tz'); -$user_post_status = $core->auth->getInfo('user_post_status'); - -$user_options = $core->auth->getOptions(); - -$core->auth->user_prefs->addWorkspace('dashboard'); -$user_dm_doclinks = $core->auth->user_prefs->dashboard->doclinks; -$user_dm_dcnews = $core->auth->user_prefs->dashboard->dcnews; -$user_dm_quickentry = $core->auth->user_prefs->dashboard->quickentry; - -$core->auth->user_prefs->addWorkspace('accessibility'); -$user_acc_nodragdrop = $core->auth->user_prefs->accessibility->nodragdrop; - -$core->auth->user_prefs->addWorkspace('interface'); -$user_ui_enhanceduploader = $core->auth->user_prefs->interface->enhanceduploader; -if ($core->auth->isSuperAdmin()) { - $user_ui_hide_std_favicon = $core->auth->user_prefs->interface->hide_std_favicon; -} -$user_ui_iconset = @$core->auth->user_prefs->interface->iconset; -$user_ui_nofavmenu = $core->auth->user_prefs->interface->nofavmenu; - -$default_tab = !empty($_GET['tab']) ? html::escapeHTML($_GET['tab']) : 'user-profile'; - -if (!empty($_GET['append']) || !empty($_GET['removed']) || !empty($_GET['neworder']) || - !empty($_GET['replaced']) || !empty($_POST['appendaction']) || !empty($_POST['removeaction'])) { - $default_tab = 'user-favorites'; -} elseif (!empty($_GET['updated'])) { - $default_tab = 'user-options'; -} -if (($default_tab != 'user-profile') && ($default_tab != 'user-options') && ($default_tab != 'user-favorites')) { - $default_tab = 'user-profile'; -} - -foreach ($core->getFormaters() as $v) { - $formaters_combo[$v] = $v; -} - -foreach ($core->blog->getAllPostStatus() as $k => $v) { - $status_combo[$v] = $k; -} - -$iconsets_combo = array(__('Default') => ''); -$iconsets_root = dirname(__FILE__).'/images/iconset/'; -if (is_dir($iconsets_root) && is_readable($iconsets_root)) { - if (($d = @dir($iconsets_root)) !== false) { - while (($entry = $d->read()) !== false) { - if ($entry != '.' && $entry != '..' && is_dir($iconsets_root.'/'.$entry)) { - $iconsets_combo[$entry] = $entry; - } - } - } -} - -# Language codes -$langs = l10n::getISOcodes(1,1); -foreach ($langs as $k => $v) { - $lang_avail = $v == 'en' || is_dir(DC_L10N_ROOT.'/'.$v); - $lang_combo[] = new formSelectOption($k,$v,$lang_avail ? 'avail10n' : ''); -} - -# Add or update user -if (isset($_POST['user_name'])) -{ - try - { - $pwd_check = !empty($_POST['cur_pwd']) && $core->auth->checkPassword(crypt::hmac(DC_MASTER_KEY,$_POST['cur_pwd'])); - - if ($core->auth->allowPassChange() && !$pwd_check && $user_email != $_POST['user_email']) { - throw new Exception(__('If you want to change your email or password you must provide your current password.')); - } - - $cur = $core->con->openCursor($core->prefix.'user'); - - $cur->user_name = $user_name = $_POST['user_name']; - $cur->user_firstname = $user_firstname = $_POST['user_firstname']; - $cur->user_displayname = $user_displayname = $_POST['user_displayname']; - $cur->user_email = $user_email = $_POST['user_email']; - $cur->user_url = $user_url = $_POST['user_url']; - $cur->user_lang = $user_lang = $_POST['user_lang']; - $cur->user_tz = $user_tz = $_POST['user_tz']; - - $cur->user_options = new ArrayObject($user_options); - - if ($core->auth->allowPassChange() && !empty($_POST['new_pwd'])) - { - if (!$pwd_check) { - throw new Exception(__('If you want to change your email or password you must provide your current password.')); - } - - if ($_POST['new_pwd'] != $_POST['new_pwd_c']) { - throw new Exception(__("Passwords don't match")); - } - - $cur->user_pwd = $_POST['new_pwd']; - } - - # --BEHAVIOR-- adminBeforeUserUpdate - $core->callBehavior('adminBeforeUserProfileUpdate',$cur,$core->auth->userID()); - - # Udate user - $core->updUser($core->auth->userID(),$cur); - - # --BEHAVIOR-- adminAfterUserUpdate - $core->callBehavior('adminAfterUserProfileUpdate',$cur,$core->auth->userID()); - - http::redirect('preferences.php?upd=1'); - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } -} - -# Update user options -if (isset($_POST['user_post_format'])) -{ - try - { - $cur = $core->con->openCursor($core->prefix.'user'); - - $cur->user_name = $user_name; - $cur->user_firstname = $user_firstname; - $cur->user_displayname = $user_displayname; - $cur->user_email = $user_email; - $cur->user_url = $user_url; - $cur->user_lang = $user_lang; - $cur->user_tz = $user_tz; - - $cur->user_post_status = $user_post_status = $_POST['user_post_status']; - - $user_options['edit_size'] = (integer) $_POST['user_edit_size']; - if ($user_options['edit_size'] < 1) { - $user_options['edit_size'] = 10; - } - $user_options['post_format'] = $_POST['user_post_format']; - $user_options['enable_wysiwyg'] = !empty($_POST['user_wysiwyg']); - - $cur->user_options = new ArrayObject($user_options); - - # --BEHAVIOR-- adminBeforeUserUpdate - $core->callBehavior('adminBeforeUserUpdate',$cur,$core->auth->userID()); - - # Update user prefs - $core->auth->user_prefs->dashboard->put('doclinks',!empty($_POST['user_dm_doclinks']),'boolean'); - $core->auth->user_prefs->dashboard->put('dcnews',!empty($_POST['user_dm_dcnews']),'boolean'); - $core->auth->user_prefs->dashboard->put('quickentry',!empty($_POST['user_dm_quickentry']),'boolean'); - $core->auth->user_prefs->accessibility->put('nodragdrop',!empty($_POST['user_acc_nodragdrop']),'boolean'); - $core->auth->user_prefs->interface->put('enhanceduploader',!empty($_POST['user_ui_enhanceduploader']),'boolean'); - if ($core->auth->isSuperAdmin()) { - # Applied to all users - $core->auth->user_prefs->interface->put('hide_std_favicon',!empty($_POST['user_ui_hide_std_favicon']),'boolean',null,true,true); - } - $core->auth->user_prefs->interface->put('iconset',(!empty($_POST['user_ui_iconset']) ? $_POST['user_ui_iconset'] : '')); - $core->auth->user_prefs->interface->put('nofavmenu',!empty($_POST['user_ui_nofavmenu']),'boolean'); - - # Udate user - $core->updUser($core->auth->userID(),$cur); - - # --BEHAVIOR-- adminAfterUserUpdate - $core->callBehavior('adminAfterUserUpdate',$cur,$core->auth->userID()); - - http::redirect('preferences.php?updated=1'); - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } -} - -# Add selected favorites -if (!empty($_POST['appendaction'])) -{ - try { - if (empty($_POST['append'])) { - throw new Exception(__('No favorite selected')); - } - - $ws = $core->auth->user_prefs->addWorkspace('favorites'); - $user_favs = $ws->DumpLocalPrefs(); - $count = count($user_favs); - foreach ($_POST['append'] as $k => $v) - { - try { - $found = false; - foreach ($user_favs as $f) { - $f = unserialize($f['value']); - if ($f['name'] == $v) { - $found = true; - break; - } - } - if (!$found) { - $uid = sprintf("u%03s",$count); - $fav = array('name' => $_fav[$v][0],'title' => $_fav[$v][1],'url' => $_fav[$v][2],'small-icon' => $_fav[$v][3], - 'large-icon' => $_fav[$v][4],'permissions' => $_fav[$v][5],'id' => $_fav[$v][6],'class' => $_fav[$v][7]); - $core->auth->user_prefs->favorites->put($uid,serialize($fav),'string'); - $count++; - } - } catch (Exception $e) { - $core->error->add($e->getMessage()); - break; - } - } - - if (!$core->error->flag()) { - http::redirect('preferences.php?append=1'); - } - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } -} - -# Delete selected favorites -if (!empty($_POST['removeaction'])) -{ - try { - if (empty($_POST['remove'])) { - throw new Exception(__('No favorite selected')); - } - - $ws = $core->auth->user_prefs->addWorkspace('favorites'); - foreach ($_POST['remove'] as $k => $v) - { - try { - $core->auth->user_prefs->favorites->drop($v); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - break; - } - } - // Update pref_id values - try { - $user_favs = $ws->DumpLocalPrefs(); - $core->auth->user_prefs->favorites->dropAll(); - $count = 0; - foreach ($user_favs as $k => $v) - { - $uid = sprintf("u%03s",$count); - $f = unserialize($v['value']); - $fav = array('name' => $f['name'],'title' => $f['title'],'url' => $f['url'],'small-icon' => $f['small-icon'], - 'large-icon' => $f['large-icon'],'permissions' => $f['permissions'],'id' => $f['id'],'class' => $f['class']); - $core->auth->user_prefs->favorites->put($uid,serialize($fav),'string'); - $count++; - } - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } - - if (!$core->error->flag()) { - http::redirect('preferences.php?removed=1'); - } - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } -} - -# Order favs -$order = array(); -if (empty($_POST['favs_order']) && !empty($_POST['order'])) { - $order = $_POST['order']; - asort($order); - $order = array_keys($order); -} elseif (!empty($_POST['favs_order'])) { - $order = explode(',',$_POST['favs_order']); -} - -if (!empty($_POST['saveorder']) && !empty($order)) -{ - try { - $ws = $core->auth->user_prefs->addWorkspace('favorites'); - $user_favs = $ws->DumpLocalPrefs(); - $core->auth->user_prefs->favorites->dropAll(); - $count = 0; - foreach ($order as $i => $k) { - $uid = sprintf("u%03s",$count); - $f = unserialize($user_favs[$k]['value']); - $fav = array('name' => $f['name'],'title' => $f['title'],'url' => $f['url'],'small-icon' => $f['small-icon'], - 'large-icon' => $f['large-icon'],'permissions' => $f['permissions'],'id' => $f['id'],'class' => $f['class']); - $core->auth->user_prefs->favorites->put($uid,serialize($fav),'string'); - $count++; - } - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } - - if (!$core->error->flag()) { - http::redirect('preferences.php?&neworder=1'); - } -} - -# Replace default favorites by current set (super admin only) -if (!empty($_POST['replace']) && $core->auth->isSuperAdmin()) { - try { - $ws = $core->auth->user_prefs->addWorkspace('favorites'); - $user_favs = $ws->DumpLocalPrefs(); - $core->auth->user_prefs->favorites->dropAll(true); - $count = 0; - foreach ($user_favs as $k => $v) - { - $uid = sprintf("g%03s",$count); - $f = unserialize($v['value']); - $fav = array('name' => $f['name'],'title' => $f['title'],'url' => $f['url'],'small-icon' => $f['small-icon'], - 'large-icon' => $f['large-icon'],'permissions' => $f['permissions'],'id' => $f['id'],'class' => $f['class']); - $core->auth->user_prefs->favorites->put($uid,serialize($fav),'string',null,null,true); - $count++; - } - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } - - if (!$core->error->flag()) { - http::redirect('preferences.php?&replaced=1'); - } -} - -/* DISPLAY --------------------------------------------------------- */ -dcPage::open($page_title, - dcPage::jsLoad('js/_preferences.js'). - ($user_acc_nodragdrop ? '' : dcPage::jsLoad('js/_preferences-dragdrop.js')). - dcPage::jsLoad('js/jquery/jquery-ui-1.8.12.custom.min.js'). - dcPage::jsPageTabs($default_tab). - dcPage::jsConfirmClose('user-form'). - - # --BEHAVIOR-- adminPreferencesHeaders - $core->callBehavior('adminPreferencesHeaders') -); - -if (!empty($_GET['upd'])) { - echo '

      '.__('Personal information has been successfully updated.').'

      '; -} -if (!empty($_GET['updated'])) { - echo '

      '.__('Personal options has been successfully updated.').'

      '; -} -if (!empty($_GET['append'])) { - echo '

      '.__('Favorites have been successfully added.').'

      '; -} -if (!empty($_GET['neworder'])) { - echo '

      '.__('Favorites have been successfully updated.').'

      '; -} -if (!empty($_GET['removed'])) { - echo '

      '.__('Favorites have been successfully removed.').'

      '; -} -if (!empty($_GET['replaced'])) { - echo '

      '.__('Default favorites have been successfully updated.').'

      '; -} - -echo '

      '.html::escapeHTML($core->blog->name).' › '.$page_title.'

      '; - -# User profile -echo '
      '; - -echo -'
      '. -'
      '.__('My profile').''. -'
      '. -'
      '. -'

      '. - -'

      '. - -'

      '. - -'

      '. - -'

      '. - -'
      '. - -'
      '. - -'

      '. - -'

      '. - -'
      '. -'
      '. -'
      '. //Opera sucks -'
      '; - -if ($core->auth->allowPassChange()) -{ - echo - '
      '. - ''.__('Change your password').''. - - '

      '. - - '

      '. - '
      '. - - '

      '.__('If you have changed this user email or password you must provide your current password to save these modifications.').'

      '. - '

      '; -} - -echo -'

      '. -$core->formNonce(). -'

      '. -'
      '; - -echo '
      '; - -# User options : some from actual user profile, dashboard modules, ... -echo '
      '; - -echo -'
      '. -'
      '.__('My options').''. - -'

      '. - -'

      '. - -'

      '. - -'

      '. - -'

      '. - -'

      '; - -if (count($iconsets_combo) > 1) { - echo - '

      '; -} else { - form::hidden('user_ui_iconset',''); -} - -if ($core->auth->isSuperAdmin()) { - echo - '

      '. - '

      '.__('This will be applied for all users').'

      '; -} - -echo -'
      '. //Opera sucks -'
      '; - -echo -'
      '.__('Accessibility options').''. - -'

      '. - -'

      '.__('Numeric fields will allow to type the elements\' ordering number.').'

      '. -'
      '; - -echo -'
      '.__('Dashboard modules').''. - -'

      '. - -'

      '. - -'

      '. - -'
      '. //Opera sucks -'
      '; - -# --BEHAVIOR-- adminPreferencesForm -$core->callBehavior('adminPreferencesForm',$core); - -echo -'

      '. -$core->formNonce(). -'

      '. -'
      '; - -echo '
      '; - -# User favorites -echo '
      '; -$ws = $core->auth->user_prefs->addWorkspace('favorites'); -echo '
      '; -echo '
      '; -echo '
      '; -echo '
      '.__('My favorites').''; - -$count = 0; -foreach ($ws->dumpPrefs() as $k => $v) { - // User favorites only - if (!$v['global']) { - $fav = unserialize($v['value']); - if (($fav['permissions'] == '*') || $core->auth->check($fav['permissions'],$core->blog->id)) { - if ($count == 0) echo '
        '; - $count++; - echo '
      • '. - ' '. - form::field(array('order['.$k.']'),2,3,$count,'position','',false,'title="'.sprintf(__('position of %s'),$fav['title']).'"'). - form::hidden(array('dynorder[]','dynorder-'.$k.''),$k). - ''. - '
      • '; - } - } -} -if ($count > 0) echo '
      '; -if ($count > 0) { - echo - '
      '. - '

      '.form::hidden('favs_order',''). - $core->formNonce(). - ' '. - - '

      '. - - ($core->auth->isSuperAdmin() ? - '
      '. - '

      '.__('If you are a super administrator, you may define this set of favorites to be used by default on all blogs of this installation:').'

      '. - '

      ' : - ''). - '

      '. - '
      '; -} else { - echo - '

      '.__('Currently no personal favorites.').'

      '; -} - -echo '
      '; - -echo '

      '.__('Default favorites').'

      '; -echo '

      '.__('Those favorites are displayed when My Favorites list is empty.').'

      '; -$count = 0; -foreach ($ws->dumpPrefs() as $k => $v) { - // Global favorites only - if ($v['global']) { - $fav = unserialize($v['value']); - if (($fav['permissions'] == '*') || $core->auth->check($fav['permissions'],$core->blog->id)) { - if ($count == 0) echo '
        '; - $count++; - echo '
      • '. - ' '.__($fav['title']).'
      • '; - } - } -} -if ($count > 0) echo '
      '; -echo '
      '; -echo '
      '; -echo '
      '; -# Available favorites -echo '
      '.__('Available favorites').''; -$count = 0; -$array = $_fav; -function cmp($a,$b) { - if (__($a[1]) == __($b[1])) { - return 0; - } - return (__($a[1]) < __($b[1])) ? -1 : 1; -} -$array=$array->getArrayCopy(); -uasort($array,'cmp'); -foreach ($array as $k => $fav) { - if (($fav[5] == '*') || $core->auth->check($fav[5],$core->blog->id)) { - if ($count == 0) echo '
        '; - $count++; - echo '
      • '.''.'
      • '; - } -} -if ($count > 0) echo '
      '; -echo -'

      '. -$core->formNonce(). -'

      '; -echo '
      '; -echo '
      '; -echo '
      '; # Two-cols -echo '
      '; -echo '
      '; # user-favorites - -dcPage::helpBlock('core_user_pref'); -dcPage::close(); -?> \ No newline at end of file diff --git a/v2/dotclear/admin/search.php b/v2/dotclear/admin/search.php deleted file mode 100644 index a6fc234..0000000 --- a/v2/dotclear/admin/search.php +++ /dev/null @@ -1,180 +0,0 @@ -blog->getPosts($params); - $counter = $core->blog->getPosts($params,true); - $post_list = new adminPostList($core,$posts,$counter->f(0)); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } - } - # Get comments - elseif ($qtype == 'c') - { - $starting_scripts .= dcPage::jsLoad('js/_comments.js'); - - $params['search'] = $q; - $params['limit'] = array((($page-1)*$nb_per_page),$nb_per_page); - $params['no_content'] = true; - $params['order'] = 'comment_dt DESC'; - - try { - $comments = $core->blog->getComments($params); - $counter = $core->blog->getComments($params,true); - $comment_list = new adminCommentList($core,$comments,$counter->f(0)); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } - } -} - - -dcPage::open(__('Search'),$starting_scripts); - -echo -'

      '.html::escapeHTML($core->blog->name).' › '.__('Search').'

      '. -'
      '. -'

      '.__('Search options').'

      '. -'

      '.form::field('q',30,255,html::escapeHTML($q)).'

      '. -'

      '. -'

      '. -'

      '. -'
      '. -'
      '; - -if ($q && !$core->error->flag()) -{ - $redir = html::escapeHTML($_SERVER['REQUEST_URI']); - - # Show posts - if ($qtype == 'p') - { - # Actions combo box - $combo_action = array(); - if ($core->auth->check('publish,contentadmin',$core->blog->id)) - { - $combo_action[__('publish')] = 'publish'; - $combo_action[__('unpublish')] = 'unpublish'; - $combo_action[__('schedule')] = 'schedule'; - $combo_action[__('mark as pending')] = 'pending'; - } - $combo_action[__('change category')] = 'category'; - if ($core->auth->check('admin',$core->blog->id)) { - $combo_action[__('change author')] = 'author'; - } - if ($core->auth->check('delete,contentadmin',$core->blog->id)) - { - $combo_action[__('Delete')] = 'delete'; - } - - # --BEHAVIOR-- adminPostsActionsCombo - $core->callBehavior('adminPostsActionsCombo',array(&$combo_action)); - - if ($counter->f(0) > 0) { - printf('

      '. - ($counter->f(0) == 1 ? __('%d entry found') : __('%d entries found')). - '

      ',$counter->f(0)); - } - - $post_list->display($page,$nb_per_page, - '
      '. - - '%s'. - - '
      '. - '

      '. - - '

      '. - form::combo(array('action','action1'),$combo_action). - '

      '. - form::hidden('redir',preg_replace('/%/','%%',$redir)). - $core->formNonce(). - '
      '. - '
      ' - ); - } - # Show posts - elseif ($qtype == 'c') - { - # Actions combo box - $combo_action = array(); - if ($core->auth->check('publish,contentadmin',$core->blog->id)) - { - $combo_action[__('publish')] = 'publish'; - $combo_action[__('unpublish')] = 'unpublish'; - $combo_action[__('mark as pending')] = 'pending'; - $combo_action[__('mark as junk')] = 'junk'; - } - if ($core->auth->check('delete,contentadmin',$core->blog->id)) - { - $combo_action[__('Delete')] = 'delete'; - } - - if ($counter->f(0) > 0) { - printf('

      '. - ($counter->f(0) == 1 ? __('%d comment found') : __('%d comments found')). - '

      ',$counter->f(0)); - } - - $comment_list->display($page,$nb_per_page, - '
      '. - - '%s'. - - '
      '. - '

      '. - - '

      '. - form::combo(array('action','action2'),$combo_action). - '

      '. - form::hidden('redir',preg_replace('/%/','%%',$redir)). - $core->formNonce(). - '
      '. - '
      ' - ); - } -} - - -dcPage::close(); -?> \ No newline at end of file diff --git a/v2/dotclear/admin/services.php b/v2/dotclear/admin/services.php deleted file mode 100644 index 1d1a301..0000000 --- a/v2/dotclear/admin/services.php +++ /dev/null @@ -1,395 +0,0 @@ -rest->addFunction('getPostById',array('dcRestMethods','getPostById')); -$core->rest->addFunction('getCommentById',array('dcRestMethods','getCommentById')); -$core->rest->addFunction('quickPost',array('dcRestMethods','quickPost')); -$core->rest->addFunction('validatePostMarkup',array('dcRestMethods','validatePostMarkup')); -$core->rest->addFunction('getZipMediaContent',array('dcRestMethods','getZipMediaContent')); -$core->rest->addFunction('getMeta',array('dcRestMethods','getMeta')); -$core->rest->addFunction('delMeta',array('dcRestMethods','delMeta')); -$core->rest->addFunction('setPostMeta',array('dcRestMethods','setPostMeta')); -$core->rest->addFunction('searchMeta',array('dcRestMethods','searchMeta')); - -$core->rest->serve(); - -/* Common REST methods */ -class dcRestMethods -{ - public static function getPostById($core,$get) - { - if (empty($get['id'])) { - throw new Exception('No post ID'); - } - - $params = array('post_id' => (integer) $get['id']); - - if (isset($get['post_type'])) { - $params['post_type'] = $get['post_type']; - } - - $rs = $core->blog->getPosts($params); - - if ($rs->isEmpty()) { - throw new Exception('No post for this ID'); - } - - $rsp = new xmlTag('post'); - $rsp->id = $rs->post_id; - - $rsp->blog_id($rs->blog_id); - $rsp->user_id($rs->user_id); - $rsp->cat_id($rs->cat_id); - $rsp->post_dt($rs->post_dt); - $rsp->post_creadt($rs->post_creadt); - $rsp->post_upddt($rs->post_upddt); - $rsp->post_format($rs->post_format); - $rsp->post_url($rs->post_url); - $rsp->post_lang($rs->post_lang); - $rsp->post_title($rs->post_title); - $rsp->post_excerpt($rs->post_excerpt); - $rsp->post_excerpt_xhtml($rs->post_excerpt_xhtml); - $rsp->post_content($rs->post_content); - $rsp->post_content_xhtml($rs->post_content_xhtml); - $rsp->post_notes($rs->post_notes); - $rsp->post_status($rs->post_status); - $rsp->post_selected($rs->post_selected); - $rsp->post_open_comment($rs->post_open_comment); - $rsp->post_open_tb($rs->post_open_tb); - $rsp->nb_comment($rs->nb_comment); - $rsp->nb_trackback($rs->nb_trackback); - $rsp->user_name($rs->user_name); - $rsp->user_firstname($rs->user_firstname); - $rsp->user_displayname($rs->user_displayname); - $rsp->user_email($rs->user_email); - $rsp->user_url($rs->user_url); - $rsp->cat_title($rs->cat_title); - $rsp->cat_url($rs->cat_url); - - $rsp->post_display_content($rs->getContent(true)); - $rsp->post_display_excerpt($rs->getExcerpt(true)); - - $metaTag = new xmlTag('meta'); - if (($meta = @unserialize($rs->post_meta)) !== false) - { - foreach ($meta as $K => $V) - { - foreach ($V as $v) { - $metaTag->$K($v); - } - } - } - $rsp->post_meta($metaTag); - - return $rsp; - } - - public static function getCommentById($core,$get) - { - if (empty($get['id'])) { - throw new Exception('No comment ID'); - } - - $rs = $core->blog->getComments(array('comment_id' => (integer) $get['id'])); - - if ($rs->isEmpty()) { - throw new Exception('No comment for this ID'); - } - - $rsp = new xmlTag('post'); - $rsp->id = $rs->comment_id; - - $rsp->comment_dt($rs->comment_dt); - $rsp->comment_upddt($rs->comment_upddt); - $rsp->comment_author($rs->comment_author); - $rsp->comment_site($rs->comment_site); - $rsp->comment_content($rs->comment_content); - $rsp->comment_trackback($rs->comment_trackback); - $rsp->comment_status($rs->comment_status); - $rsp->post_title($rs->post_title); - $rsp->post_url($rs->post_url); - $rsp->post_id($rs->post_id); - $rsp->post_dt($rs->post_dt); - $rsp->user_id($rs->user_id); - - $rsp->comment_display_content($rs->getContent(true)); - - if ($core->auth->userID()) { - $rsp->comment_ip($rs->comment_ip); - $rsp->comment_email($rs->comment_email); - $rsp->comment_spam_disp(dcAntispam::statusMessage($rs)); - } - - return $rsp; - } - - public static function quickPost($core,$get,$post) - { - $cur = $core->con->openCursor($core->prefix.'post'); - - $cur->post_title = !empty($post['post_title']) ? $post['post_title'] : ''; - $cur->user_id = $core->auth->userID(); - $cur->post_content = !empty($post['post_content']) ? $post['post_content'] : ''; - $cur->cat_id = !empty($post['cat_id']) ? (integer) $post['cat_id'] : null; - $cur->post_format = !empty($post['post_format']) ? $post['post_format'] : 'xhtml'; - $cur->post_lang = !empty($post['post_lang']) ? $post['post_lang'] : ''; - $cur->post_status = !empty($post['post_status']) ? (integer) $post['post_status'] : 0; - $cur->post_open_comment = (integer) $core->blog->settings->system->allow_comments; - $cur->post_open_tb = (integer) $core->blog->settings->system->allow_trackbacks; - - # --BEHAVIOR-- adminBeforePostCreate - $core->callBehavior('adminBeforePostCreate',$cur); - - $return_id = $core->blog->addPost($cur); - - # --BEHAVIOR-- adminAfterPostCreate - $core->callBehavior('adminAfterPostCreate',$cur,$return_id); - - $rsp = new xmlTag('post'); - $rsp->id = $return_id; - - $post = $core->blog->getPosts(array('post_id' => $return_id)); - - $rsp->post_status = $post->post_status; - $rsp->post_url = $post->getURL(); - return $rsp; - } - - public static function validatePostMarkup($core,$get,$post) - { - if (!isset($post['excerpt'])) { - throw new Exception('No entry excerpt'); - } - - if (!isset($post['content'])) { - throw new Exception('No entry content'); - } - - if (empty($post['format'])) { - throw new Exception('No entry format'); - } - - if (!isset($post['lang'])) { - throw new Exception('No entry lang'); - } - - $excerpt = $post['excerpt']; - $excerpt_xhtml = ''; - $content = $post['content']; - $content_xhtml = ''; - $format = $post['format']; - $lang = $post['lang']; - - $core->blog->setPostContent(0,$format,$lang,$excerpt,$excerpt_xhtml,$content,$content_xhtml); - - $rsp = new xmlTag('result'); - - $v = htmlValidator::validate($excerpt_xhtml.$content_xhtml); - - $rsp->valid($v['valid']); - $rsp->errors($v['errors']); - - return $rsp; - } - - public static function getZipMediaContent($core,$get,$post) - { - if (empty($get['id'])) { - throw new Exception('No media ID'); - } - - $id = (integer) $get['id']; - - if (!$core->auth->check('media,media_admin',$core->blog)) { - throw new Exception('Permission denied'); - } - - $core->media = new dcMedia($core); - $file = $core->media->getFile($id); - - if ($file === null || $file->type != 'application/zip' || !$file->editable) { - throw new Exception('Not a valid file'); - } - - $rsp = new xmlTag('result'); - $content = $core->media->getZipContent($file); - - foreach ($content as $k => $v) { - $rsp->file($k); - } - - return $rsp; - } - - public static function getMeta($core,$get) - { - $postid = !empty($get['postId']) ? $get['postId'] : null; - $limit = !empty($get['limit']) ? $get['limit'] : null; - $metaId = !empty($get['metaId']) ? $get['metaId'] : null; - $metaType = !empty($get['metaType']) ? $get['metaType'] : null; - - $sortby = !empty($get['sortby']) ? $get['sortby'] : 'meta_type,asc'; - - $rs = $core->meta->getMetadata(array( - 'meta_type' => $metaType, - 'limit' => $limit, - 'meta_id' => $metaId, - 'post_id' => $postid)); - $rs = $core->meta->computeMetaStats($rs); - - $sortby = explode(',',$sortby); - $sort = $sortby[0]; - $order = isset($sortby[1]) ? $sortby[1] : 'asc'; - - switch ($sort) { - case 'metaId': - $sort = 'meta_id_lower'; - break; - case 'count': - $sort = 'count'; - break; - case 'metaType': - $sort = 'meta_type'; - break; - default: - $sort = 'meta_type'; - } - - $rs->sort($sort,$order); - - $rsp = new xmlTag(); - - while ($rs->fetch()) - { - $metaTag = new xmlTag('meta'); - $metaTag->type = $rs->meta_type; - $metaTag->uri = rawurlencode($rs->meta_id); - $metaTag->count = $rs->count; - $metaTag->percent = $rs->percent; - $metaTag->roundpercent = $rs->roundpercent; - $metaTag->CDATA($rs->meta_id); - - $rsp->insertNode($metaTag); - } - - return $rsp; - } - - public static function setPostMeta($core,$get,$post) - { - if (empty($post['postId'])) { - throw new Exception('No post ID'); - } - - if (empty($post['meta']) && $post['meta'] != '0') { - throw new Exception('No meta'); - } - - if (empty($post['metaType'])) { - throw new Exception('No meta type'); - } - - # Get previous meta for post - $post_meta = $core->meta->getMetadata(array( - 'meta_type' => $post['metaType'], - 'post_id' => $post['postId'])); - $pm = array(); - while ($post_meta->fetch()) { - $pm[] = $post_meta->meta_id; - } - - foreach ($core->meta->splitMetaValues($post['meta']) as $m) - { - if (!in_array($m,$pm)) { - $core->meta->setPostMeta($post['postId'],$post['metaType'],$m); - } - } - - return true; - } - - public static function delMeta($core,$get,$post) - { - if (empty($post['postId'])) { - throw new Exception('No post ID'); - } - - if (empty($post['metaId']) && $post['metaId'] != '0') { - throw new Exception('No meta ID'); - } - - if (empty($post['metaType'])) { - throw new Exception('No meta type'); - } - - $core->meta->delPostMeta($post['postId'],$post['metaType'],$post['metaId']); - - return true; - } - - public static function searchMeta($core,$get) - { - $q = !empty($get['q']) ? $get['q'] : null; - $metaType = !empty($get['metaType']) ? $get['metaType'] : null; - - $sortby = !empty($get['sortby']) ? $get['sortby'] : 'meta_type,asc'; - - $rs = $core->meta->getMetadata(array('meta_type' => $metaType)); - $rs = $core->meta->computeMetaStats($rs); - - $sortby = explode(',',$sortby); - $sort = $sortby[0]; - $order = isset($sortby[1]) ? $sortby[1] : 'asc'; - - switch ($sort) { - case 'metaId': - $sort = 'meta_id_lower'; - break; - case 'count': - $sort = 'count'; - break; - case 'metaType': - $sort = 'meta_type'; - break; - default: - $sort = 'meta_type'; - } - - $rs->sort($sort,$order); - - $rsp = new xmlTag(); - - while ($rs->fetch()) - { - if (preg_match('/'.$q.'/i',$rs->meta_id)) { - $metaTag = new xmlTag('meta'); - $metaTag->type = $rs->meta_type; - $metaTag->uri = rawurlencode($rs->meta_id); - $metaTag->count = $rs->count; - $metaTag->percent = $rs->percent; - $metaTag->roundpercent = $rs->roundpercent; - $metaTag->CDATA($rs->meta_id); - - $rsp->insertNode($metaTag); - } - } - - return $rsp; - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/admin/style/add.png b/v2/dotclear/admin/style/add.png deleted file mode 100644 index dab4ead233b8fc4fa87a1ef2fdde5cfa15cfac21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1113 zcmbVLO-K|`93N3gB+;l#c6p6`S?kGg4UIyOHk5IggNinF^)2k8sCrG$ z58}a0uc#u!uXq^0YgmL$QC;1xrKm-S!6+Qp%^1D$YJ~>67NZA388%}jU_tMx*s#CS zmscxARnX|}^PtNWiGTsI0$ihHI-(n+tGXiDd)EvNst{a^(c4Z9X0jlGYzRVr)~B*z z7KAxJ7YIfokxsy~9Lumg!|^^YA_jPoWx>uv6Kl3MCg$YSjxBPE(FKexkzvZ^vcDYg zBYT|T1VQjLc-}`4K4;3rit96-_L_nW9o5z?tRoY6ipnUOz%iP5x*dXHWiq?Mrn8eM zk}}3sEQa&5jA3|jRnZR4!9Q;7iFWc+7G!eJK@+x0>M_<{Ba__iZ^#1@Z^VnXPKu(G zWTZ|Q(8OsuMw35&P1i`40?}Y99^ey_kYqV7E=WNkCB?&1AejinLp6=PxKSw-mE+N< zB=9MYOR`ctCn>HP+m@2H<)rs95Ze(Asn6ROOk)21VRO^6j0b%46 zkOdO`Auynu8Y(+pakgWXp{-9sEoCDERI@AUdszQ>)Z1L`e=^1pXBe+F{%V!l73n{3 zyW9BWusb@?B=cgE!8rXTe2om%iEM8^d8+c_*yU+3ey?-xeaFmd$Mv<7Q_s)dc++k# zo|}EwIsaj6Yb&+Ti3xrM~8w+%iR@q?(4?PrR<&D(6VoKb7^Gm*TPmK XOI4mW8i$A0U2oXa$v$~0er5VMqWNal diff --git a/v2/dotclear/admin/style/candyUpload/cancel.png b/v2/dotclear/admin/style/candyUpload/cancel.png deleted file mode 100644 index b1a59471c3f21f2329931fe4a589a861c2b36d19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=%3?!FCJ6-`&%*9TgAsieWw;%dH0CE)rd_r9R z|NsB*-@o7Q-~WF1?)CinZ|2W`J#XIqgoOL?@mCED&M+{D@#={J6*H9t`33)Hc)H!d z3&`Uv@Q5sCVBi)4Va7{$>;3=*#Y$WwN}P*Q6H7Al^Atidb5j|N4fG96^$jdmhR^R+>#4|r8huuglz u;=QMdC4aJ7^QN50^v`E@TsZvrqI~=ssfn9+&+G&m&*16m=d#Wzp$P!Nf^V<@ diff --git a/v2/dotclear/admin/style/candyUpload/loader.png b/v2/dotclear/admin/style/candyUpload/loader.png deleted file mode 100644 index 267f54111eae4c93e3629b643bb5a61609e2769c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 858 zcmV-g1Eu_lP)RGReGUQd7@Bypi^|BM|q!9a-l6z7Pj;M8 zbDc_Yo<($OmUh?a+pkTnMiS$N^6@taF|GMmPl!uH*S?kZ|hkTqqGJ7$bPWsE*!jXGVBDq@Q|UXCtYk11Y@Fj|c#Uy3wgi8@(}CRmFl zU57MQi6d5sB~^$bRE8o|h9y&mAXJ4URD&f^gdS6YB~*bZQh_2?fGksgCr^SLPJbLt zfErAH8B2W`N_`hidLT=C8%TQMgsr<02XvbSad^jWnpw_ zZ*Cw|X>DZyGC40WH7_tY@MYc30003kNklUHWeNNLtF5Z;u+0Us$1 zKHu0jRryJ6@K@~7Vm4_S^0yA9ow6KB*D!TPJ$a;SxS-uas?#-GQbRHA>l&`58U}fi7AzZCsS>Jir4~tLR`Oo{Q_iWzR2GJq=Y?P978H@B_&9(E=~~PQDNXP ZU|?=xU|j9!cmgQR;OXk;vd$@?2>^wZBV7Oh diff --git a/v2/dotclear/admin/style/dc_logo.png b/v2/dotclear/admin/style/dc_logo.png deleted file mode 100644 index d7204e2b08d01128e9a67cbdcc62a24633f6a134..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 825 zcmV-91IGM`P)Cd?|Nr&%^n!zf)z;Rm ztgQ9*^gu+(w&394jE#-U%gc3kcDlQ|iHeEq>*{}i zfNX7Sla!O4ot@$0;l#wm*x1*wv9N{vnsfjF0&+=2K~#9!?3sy|GcVHpg%pWDs*oPFM-aJqLp#&m5mjBGE9@MF_;uF$`T?VbF+OF#=t6 zv08TAkCBxy9-8@Jlt1^*x(sKIQ>W=tQH7eaq|32l1Xm_Cp_rvdNzV)f7UP=Vd+7~NW!-TSug5i47jih@oFei@r z_gpY&3O63AGbfi*n$&f1{}V>bhG&f2Mw9N@fHRB;In^>EMf7ZJgP~dmNUCDh2Ewvx z!<{fJKy5iR8GD}GCK#cK+_Nrx6$jPr+@3e~8Yq=Awb(o_RlpfG!JzzVg)@~LZ#mRp zXLN~aB23&jNDB)e3kLTJ@>6#)ypl)E@CXKVB2^?6`0RQ!VVkTtb;&GR8>O3f>8y*| zsraQ?yRXg4GvUT*=9`g4s+Bo{1F|;39+yLWKUIGt{1LMFr zFb<6WALI8fFkZ(!V7$ID#*_cY`15mQ6XP!IuK)u8a8?(dzEu+Y00000NkvXXu0mjf DU7m%; diff --git a/v2/dotclear/admin/style/dc_logo_small.png b/v2/dotclear/admin/style/dc_logo_small.png deleted file mode 100644 index 3ec22c9191c0c829235729a9afd298082fcba919..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 839 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 N002ovPDHLkV1naWGX4Mn diff --git a/v2/dotclear/admin/style/drag.png b/v2/dotclear/admin/style/drag.png deleted file mode 100644 index 28410fcf92bcb7d0df3e26e36bf508bb6e098395..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 611 zcmV-p0-XJcP)K6@CDXY!T=( zzrm1_F*u1cckZ3%<+K#1BGVr}gM zdDbC>KnMZf?Xtf9o+L^8SXIS<5@SR)Vy$6&dxyQfZ?v+E!Z`}(Xm>gs9DHYM>l4N# zsP_066*)XSR%_GC*;E4}kd_iwR^DKZ;mNb-jE!9<&kNFY_B4{0<`xO?wD?N)05C&^x$002ovPDHLkV1m;I5^ewh diff --git a/v2/dotclear/admin/style/farbtastic/farbtastic.css b/v2/dotclear/admin/style/farbtastic/farbtastic.css deleted file mode 100644 index 07d953f..0000000 --- a/v2/dotclear/admin/style/farbtastic/farbtastic.css +++ /dev/null @@ -1,33 +0,0 @@ -.farbtastic { - position: relative; -} -.farbtastic * { - position: absolute; - cursor: crosshair; -} -.farbtastic, .farbtastic .wheel { - width: 195px; - height: 195px; -} -.farbtastic .color, .farbtastic .overlay { - top: 47px; - left: 47px; - width: 101px; - height: 101px; -} -.farbtastic .wheel { - background: url(wheel.png) no-repeat; - width: 195px; - height: 195px; -} -.farbtastic .overlay { - background: url(mask.png) no-repeat; -} -.farbtastic .marker { - width: 17px; - height: 17px; - margin: -8px 0 0 -8px; - overflow: hidden; - background: url(marker.png) no-repeat; -} - diff --git a/v2/dotclear/admin/style/farbtastic/marker.png b/v2/dotclear/admin/style/farbtastic/marker.png deleted file mode 100644 index db7da5560eb0ee83f8192aebfdbdd391f94c9dcf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 614 zcmV-s0-61ZP)WdL?^ATcx`YISTNGB7YUATcvKGch_cGaxH4F)%P5@X*F?RI-D8jVuDUT4t{IO*2|EJCN$zrkGAS4gz{ca!- z(E9VBm+%|!-h*!V!44Zs`qB38T!ZpCe$9?P%e7c!L_t(|+U;H2Qsg=eY^etR|BH|J2?_?=>XzhWIK@;^%f>gUTQ@tI z0Q`Mk?qh%Y{3&r#4*S0lYA-a`9pmlA`d)U0-b2PdfxGLy%k402=K1` zO42&VT(L&GlDj^3aQzI3W72MiWRd2z24Jhgv2#||?&@>Nwa0-(p8?<`XeY@%qSsvl z+F|9N!xN+D%jk0__^$#&)Mif=S7ZRQv64)x1!a}BWPb#6DBzBbOoN=)ipEEcS4g=+ zpsUxYjJLpmRz_h9ud`jES2jg<(eEaBO&0;I94z_H%J4X_Pq3o5F?~BiW5yHg0J)}+ zf{q0WN_MVU0oe{1Uzrpmgk``~fmaF2w9RB3n?5R0mg$q(Jem-?T7*o@o0;DhzoT)@ z6e*RX{FA`F!rUk2{PwRkS$vnGmIyt+`QK^VS5H~(SkblEi;T?}%1N2Gq%cPf3{h8u z81*%x*sw&TI7Zfrl;>lI5hz$COG&y$&hd4_7F~YB2790h>7tw|*&@=AqBBZ?BM7+G}o#g@yeCqM*xRV8|ogsk!G`m4rCkrL$z zRv0Cuu^TystOy{VkUGmJ9*|!F-ZJ6Kf}`mH?FN}Dyd^_{CoH)lBMQGS=V8N_5ocLe zXv?&-WbP^~-;g@kIv-O> zv<6Z<0LTmEsbon+t&Ulk$_Wk0_zFNWq_A>kJR_9<5mZfsC<2%qf&+y3Q^k}`tW{FF zLNA@@cb1?WT|`PiAP!9)Myo_IcT|7Au44^rNe@m8ajKL~JCFG3P<~P z3mWH(@d)!)#U{D*)vUVZ;M4PUzVYCO`KnZ;J`OS~ikkIa%4Lm5vk1IjVRn z`J~H0rv=K6l+y_iA~25pe!__pVHQwNmeVZR6e%cL#;(N7l$Mziw(A(h3vvU(G0U3> zuCka1)sjO$pXw$OjgbJtn!Y3Dov0MhY!!~$IZ<`|>a475?^2TK!&54!n%&3UD}!*M zfA=Y`H|w{{XVdV7CQv(%yE8}cND$Tuc2?dIc?zRwbX1ZB0mS+!kapK?WiWRh-!6FK zUS5y`n@4nK zFHiW9=(}E*F{?%xQXtAuB`#y>o_s=-^`hm`J%})dCO1aG{UHEe@&1lBcD-r%LeiR4 zC9x?JJJtkISg7+V4=4KO8Ms~B4^KhCk~_y%f$x0N5Q_S#vQ10k>_PzlPOXlYq$%T& z2!9=h7J1ClQ{EE-DFU!BX{!K%q7KR!CIptQt-_a`TvTYgLLQa~yGX{NogKYZXowc-J_)7z+Bz)UiOOgM4ylp6c*|RMh!vi*o+J(^&hiDpP3j9Aa_}6=e!kz z%o@PdQ@R1|0)x#V9mGF>&vOU{QN;q!`xKB$caeev#?Vc^8ZoM}eG6Y1r5Q_$#_n8x z)qf-uA7YqRfsb+!{Wk=@dP>G>x~#9;iZkt_7#6$6e0oZkVjb}?dyleMou9&y|fee8ossFdLuV^6Sir6Gr zrHvs4g|Teg9czqdQX=J}3TD?=8H)k|RiIVl+f6 z;w#!ujokq}uE6E%=CLAtRNAuh@50__Ao=coOy3ca66FtO!9kXxAl6{zr~-HAI4XQy zDbUIJtYPf9K;N<2r@Z3FZZL*BKEnX~hriEDef|N;IdkP@&ox^B0000osA@PAd+XJ#_lLqgc2Ng&Fivgo}K76S^hh!Sps zfQslR>P6IxirkBkiy{})h{~cYMixPq?~^M+L_iQlP(TD_4@-hTfCLlBB$>=~SABn+ zGc#v;s=BND^qHAVx}K+>)2F)6(%tW`-lg8Eg0hsQEM+N6S;|tDvXrGPWpNi#-h$$b z0SS|*LS;JWtwB$LXmWMalR=MyXbeOOqE;}Y5GF#>fyAI#i=q?7Y9uRBtU&TQidPUU zMX`(*=@ekfyIsOC90Xp#Hf=C|2QWK9xHIS-A({z#8t5?)0lKzD^u4d&ue}!r6dol3%B4WX@CM@ z$O4F<1I3?_+=1XWT6m0G=_=tUVMqaBzW~~10rNl~3}#n|Dt?0R0>O4X0fwT0Z~-ED z3CVAf+{ha4;BMBIV3aV_0GOvBnhs_jL`OpOE-=zA$l62DQ-t1Cmj*)-K=g+KBr8zd zg5)~Z^LueK>q;0lN$2-N<6+ccpg#e6U(l8Ot-sC)LQWVO0Y#=d<;xKK9L1Hqz!Gsc zVF|;CH-o0_2;$Qa%>zBv-RkQMPH+~}$Z@P52A6OL{e*X5UC*oSJePI|V&@6EQT!gs zB3ijgTtr6+!-#_5xHf3p2cnZe9|XE(pdjmv!krb4j4;@M2q@l^k^?kE{re?IE+ybf ze#mPh-M0`U8-f$sAvg@o$)Mj;jRd&_UwfKAjY8l!Ck{gpYr*3%sDi?i+g&0{7oYV?!2LWe*-rXGu$^(IqqnuQi0!tDMSp+_C2z^#_DOp>rLU0KI z-xp`{N(sZTf?$D!XeTgdf<7Fya)(8IT78{EptYxoQ~(S~fMhYH(jrW**S>R?V)zDY zxLzz|?Zz%ga^nZ#TT?)u4f2m5j{u>njMs0HfpsJtb8TS%ZaFmVitBF(%il@63=z8w zpIaz+3jvGRj9bh(>}{?`l`ssENo4reT+sJ`_!`Ku>C%z@bo~HuN!&2h`@WYhJ@)Hw zYyWfhLvR}}@ICWwwkTm3GzbuebGL_WE(du%$Q`mlkY~dp{CU2k34%Qon++DpCg=|~G&=e4UunkPU6y&8Kr`mM2zgCb93V)-me?jI|qZVG4TO<=+2i7UzBUHG{ z{Di~I0)i5TLLiu@3_tz=1b2e?C`g%Z7Re0S!S)?RHM2Q^Nc*_&&&dpepLPq=Zl|=i zNiz`Kz*{-TT*Sl@hK4}6xE&7sD#-r}YJ1lm&(@UL&WFZ*2ydx2KsV3{tgUTt0&8mf z>wvCW%+>vMMVLv_5kX2bhlGby-FI#qk}orcUzn?yHQeJ3!xV&{ZUJH;L`PTCD2%1Q zK$G0DmZvYlvtPiug%L#SAzTl7Ekw&8dLF`;A^azVs~~y<^cv{ute($$ph7?^3Wa10 z0pn4OCtwl*QwW$wzzh_dp=d+VPC$hKk=VbGrN5%SuR@ZoV@{^*_hiPx=TO`x=38Jd zVX%R4&90y?gJ?Im@cZ;GrvcDFCs}pV5Uzu0HAGK9_#o&fp!<2yOW~R2f?^-Kna+4B zY=>kz6=tG%2a0#2m`cD{0xG#X?y@BJCFL?D1JVKfH*2_198YHngF9LzVdsM&ybSbK z>B65!GvrCD=-mv2oe-^n=zh?5LHG!)e@yVm>LI&t`w`H^OcXn#*b~M6D5jwpM}SJy z8nOW(k~G6Wtx#X55nP1fba4c$OBe=#@L&a&eG;N?gBh0&K*T`PsnN7-7XZ;Zh+cr` z7SO+ewSN)ZvufCynEMe>;q6qIO@+Bg-i2Zk0m{pSO3Q-n5$?bPf+Vv^a5IL_iVyNq z2}3UkH?@O4wYF8#O{1iIqa-Mj#wZVfpcBI9s{ll|Ky<(0=8bMxqyfQPW}-L%$y@?< zM=^n*7645%m3;jN+k2VlKlIc;gy5s%K%Us-VKCe^20G3LePVU&aU&39$wsw;ph2&M z=xzwFhK@T0H?3iW6a$iD*ojt-L^2P>OcX7d{Rkfrlotp+8e$0nM~V0H*G(1%!|mgt z`#dn8=s)nLXEPqAQW^+e+99f$LD#~Ds{~g)!3ZzrSjI7iLs6W7;@t$aqiT^USL(OS z0EaIS^^qpQG3>{ELp7pK3>^r!P6G8K(DVJwqAU)xw`PbyKL^oe&~=sIlI3h-#mu9H zt(b%2iv;Y8WVF+<_DS>hccN|EawH#TFMc}|K!~9M;r8*ME~$cG3IxG>gqjAu45CG_ z{xZQuuds<1a{?76@qQ#H*CJBwnL$t?-|=mX*&6m!K6tk~#bs7~ehmk)xt8qAnv)5zr1 z3IiNw4bkIOE%f?t1ZS4(6%_F-&u1%I_yz&Tpcv)V&yYQ$RFz8A4~U;LhEIzvn>*>i zAi(hWZV)YoXsVx|-~&Wb$6MG5(G8$a6P#E&$j#6at$Y;80wmk@_D%Rkld|{?eHy|b zIG1IdF6K0E4p`A#5T2b18-5LXSAVm}2MA|G={3;bfU%bf=698%+r(#kIq#r_9}=)P z66FO$RuKA|OB)b;ify?@i01S`h~|OtU^|Rm1p25x;r4|gD-e+Z{TPH_5PagUQd9>C zh^v`Q3umD?4n2-qn|Csa|nR=A{+QC3lW@z#c~*!O}B9fk{_ekHc_DSm`VN3rHFvfFpfn<<}k@( zK`<4loC|7Ja)4QoU!O`qZUA*2bbYx5VHjzN16hpZV@RGwVhW8c^%o_D;D1=dPQ%zt zdhHlcN4w_^NgDy;bywDb_!e}WE||Z*6v1Hz#Qxlk;b;_(qhdg~daHfSrvB~e6ap?V zhS9^$Ofvj)8t8kgW0y^WS(Fq}GAX8!-T=|rAkG%dDbp&3v&nQnyCS#_$xI}ofgb3A zopAkMze0uY6%lR~#eiS}SbaH|W9<+aPY|L6{~_uEb1uAmR!<*-F{bQU9wG(cJRn5x zG4lZLA>ijIraMNsrN>o7%D!L~irGRmK5Vog7~cFa=o^4wpzx%JnG z(>uM0F{W!cT>lXL_E3J_3kCr5F#A*CY9w3a>RWI*(zRD3zz7ygm@5PuhEx~~Z)^tY zJ}}$cg+GgSu)z}PYU*|8@q)ekjYl@dtR2K_7X_Rn2KoOK_20bzdmIJ;^B6~=xCF(x zx>ZH}Vk(aLT#e{^)u1&T-zvCr$Y3xS0bSn&eVSVn*tCQTiny5+ndI7G|>cM6+;M0v#vi=ofQTUJi|!{&h6Jz?W-B=+8{1jOS|Ab<3#@K)&^nd+!5q` z)p?GROd}sHVbu=L0EY^8eA@c^#;nM2O=1us5rg#mKIb<3`$Wu4lJ;jsz)}_xaAI#R zlPyyp-iT%zP_*!0PTI2`81i5M)0;M%p=oh5)F{5y8Vt2W=|6QZBSw8#vCl+ zCV>g6Uy@fVSkt(>K>sJqI4`M((HOHd>A@87aC3ZTmh(k}|D{>Kll!wtFaVerm`N*( zQEcx8LG9b(+91II|J5WoLWt~h+=`r9q0$9+O4z$6-Mso`hWt*nsrM7EhpyuUJ0wO2 zj4?|x2u~3p+$MyEISMa z!5Yp*aB?lRVgLvRe-JECES?I7XVnfOk5*URZKum57q zBRPaY43c0K`MDy`b$!;S5lMRWh5^8=VgfDPf@04e|H0)TX91yB7aG`qYr!9~$adzn zw%&vTfxYShFm)hQ_eEXOld3^cf2NMT3aX)EaXDQ0t4yv-_Li(@fypYcd4DU9fX2@? zj`#8X`rk1rb@iY3Z-pna+N|YdB)>*6(O68PtPs@I2O9p<82%^(x+$8$VALwOUBDcl zC52_od`i{|(bEv@Cm7>ByPYxSzKq%+&ud;Y!xywX-z75sXW!pVt8*Q%cc3#ZjBX5P zX*kt@Y6JvJT^Pdb8G`$pq8V1eUIO-YX@&Ya+3%RB0U_(OL_e*t0o2z8?OCUJ?9R~A zXA#1zf|lj;-h$EywI+;2{AmS(XiUuf5spWd9T7 z{sQqxW@p}*TbrTkaW5(>G6E!0gg5QG^M0R5xo+Rj3eW#m??9{U&k@xD*BUrdS6j!# z@Tms`y~lwI-X=JyP|Xm+aV`+zO^i&?6n(D(0a_szP&_@*M{X4hclh4X!yQ{l|IW)`YcUZcX6LwVA5qhm1ctx z&%n(B4#~OzeR8;!mjvuK7V%o%n`eyqS%bE^Pn{^JwU;@6JMBD~;j_)!dao^y&(O~b zF)Y;ZA3fT^rV+@d8ERHO@7zuBctd8=ldz?L1G3(6=`fv4Unk=g6B_`bR=Nrl)+_?( z``P;A+Vi}ux7y?sUK9JhM*5}-^B>m3k1Oy=0~4}@REdE?|Kovyj{s*hWF|#0S3|4M zGJ!fleZ}fl8Mvf?d)J*~OEY)El+XB@QlZ66a@9pSH{U7C6O+MG%%!*q6hBs|sWelt zB!d4Jf=ODK*k^Hq*f#%qgUYQL3`RT(^P(KivT$n#BjCCzh-C%95M~TZ=4t(XTl1vv z(2hEr7SJAw)^*EmT|n`^P-4F!V@|akXvzp#SFb|-(_W2#Q zf?a_JbHVTkyhXsCG$1jSr?y_gPYb$l-5KNHjS9ca;18tLrI}9Bqn(isf!7YdLVMKN zfG~~-c~eZKx4I~GsY)xV7baiHA*5+Gy~uEm%ik~zOfJ?5njsE^iGdIoep94&5CZe4;R*wDG*lXaAZFKn z$QVv>rDr6-V1$8#jHBt57BFlQ5qnypfkgtL3)Bo*Tkj$wFET@mFB41`7aTeT80j#H zuypODK}`w}!r~*u>zXm;&P^e_Y+za*0JJ3*Y+%M6us!f}CKw)sQ4#Fp(gY@@uHMM3 zdm^s^Hx_uqx-;1DK6Nr95O}ok5q=pfE_28@G=j1C0tS1|q>Od4#myuvngE9rEsE9z zwz9LJ<1dD5A~==0Fl*M%kk~P);r*Fm=z_g~ad9o+dY=SF-Ttq4K)g}lJqw#0W0#)C zT`jq`?8}$~?IZZ{_wmqZ{C3Nj7BH5_6xS4Sg-)ICDhINYWR|YQNE^-BeYr% z$$`LynP7Zw$~xTz+WA>Df_=1W@^S5PtX`;fLMNFkx+5*2Pa706W**t zA}J*!OZr7x%0^PQYDjXLhAkOblb-SFT6Ehr?AWK{w<+47zRVGXA>83}Gt%noZq{D5 zEY`rGn%-?|`IG8W{EJ6tBVHXM&5+gn@zEZV^Z|W3!6eeLbB*J;O$)eMePaoa+Io_0 z4WP7W4Bseb)2H><@H+#?*Tyw_Inj`qT($WOmW%t`6DyHArk;gTD~tWx?@s~_0%bg04F78#=qYejHYXc5bihC$YJ2)B$EP0wUe7& zQejvOW4o(4NdtsFZHffP6cV9?KQ$4CEY5J6Mj$4fcnWi5sf!D&%Yl{_r`aa#^#UIE zAL7qlrkKGNH?g0e5C_ZF3q2?x02~g_{sNW*Gm=_;4~RhZM_qRl)3ky} zfk8m$`h?`Df?&w&l2zzMR*hiO4z@^^w!pz)noAMfE8v)(hB{5~O+w7Kb}{KN7}#FpHwR)840YP#?{)np zLjgmQ`IANXU4DSgoRS{Cfy+m*K_E$=6-8y#1aalAQ-ClTLA4lJPq={Q#VyfGw?I~@cwDM|R#%%ny&L>dUT1zufH)E~2* z2i}>?PP;#8M#8KU1Qe|qo{p-|+Z%=yTHCgUt$-JuFld-=JcXYGXmsy2_|0aPvvfIx z)K~b)A@EruLuswQ%_Oo#jgmUj>K}z7+mKA#EYL{+Bx#DKmXE+HT?E}%J?Vs- zAYpnU3=vFES{NW{enE>l6`EN1stKCGSNMI*pGF3$xD5^*0G6e1XnhKboi7m zc}ZGvNIJ|Vkz#r^uLw+JSORR5q4iJn^mP@6-&?ic%g~6 zC?tCloy_4dXElXvP-sh?NzfQc8bQY3utk;X_epqEu5|Nwmr794dW=a`& zy~!|i7vLx4F_C=ygtR)JO zv{^tP7Ls7-V8~+{V^u1%fnl$vE0M7YOlj88XF0Yv#jVE$ZalqzHW4 zpVCP%2pHq@CBox)4W@rK-;B)UGsujZ!lzDo`V7i)Tv?9$!Vq_!Rf49dH<^f8y>Uy} zHhV|X;GaPYv4*fpdcu&V9cpDvl4fWZenRf$l??(6T^T~ANgZi+#y+QLC)`4lI zxY0x=c5mX*q_IWzk!V;u3}9$9uP7;6l;j_XI-$1JxgaqP0Ft6hSRzbmf~qX0Q4$EQ zVW5Ln+F@-s=mNho(Pt>E2#WpJ*544-X)28|!qLjQCJHx>*4Q?1Cf*tg(r1o{#~ECS zy*7aoIl6Sxmbua?AyeUL8W976!3H8~;&;b=hK>TiTT)A^+Q`eGjPosvmzgx$Vn49n7CuRXc3Y4M{Mp zGk!vzdQNSdR6f756c{a;AZuolXaIt`W9w3VhDLyhd4welWhtzLFj0aO9)b?`Ro`Q> z+TnyDgcZKQW8(pXuw=oOr7R6ZGA2ZIFeCwC8*&iW7zS22VKA^F{slTC46*U3B@AUL ztZ0}>ESeSW1L}XKLPAmKFYE* zS_JG6LPc7H+%?NV(#()R=PYC`ItE z3t|r)mZeMq~bNVzY7kY6Qo;hqKE^T9&*ef_DpO@mM=> zfCg~Xna~1*bo}@OwzX1|)>=*Jf7p5dvM0JM`C)jku38vgSrIl_jn%z&J1p~pp&RbW z+r{lTuU)`<%g0)l9R5NO!TWrAo-?Ek-HRBQgKC9gEj*~9(?wSriIy$U@V@fNmL+T1 z72XxW77_khz~#%<$)|NGW-AQ0!@39_(jGsUA;fyfJ20cm$6J;xC4>(~(3Uqb&jv>b z_jtolb)xx$Z_<;eH$Qna%qbslSu&VNO2gd9lBudQ$Ye}AyzvS=oB;+1;f_37A;Fw# z(eUB&375sU>;SuInBnUSq{(RQ{oT)q{u2SD!mtwV4QuJ#I)%y%j?2NjW5$<{xhy_K z!x3>4DNWXNO5@xOx4C}L3BzAty@o%e*Ye402*%A z(5*c}SQ$M1-DbgV<>M|(g5xYS92Y?)?+{O0!yLjd5$;J}5@GlQEDhnlMnbBVKQ&6j z@#PaQi_=7ccZM)KOHN#pxm4SXf$NffH^p2LM#Bv``V^8J8xg@#Z^29}AA4DBC4|pw zX!l9a_JO2!?CD40uMNNe8{iiaY;gGmX}L=dS|@5ap?vIRiI=g4?F}56*0+$gAr9es zMDmRGsWAK%mPhbgpU6=Lb4o^V+*Hiw<>N0)e|Le;Mle3f)ON{SLSkNM;M%m`_K4~T zqv5AXKk8$*S?aa~{=IzsW$BF|8D@m=F%2TEQ`ZHEwu5r-Gw@^qFu<#@IE0sdw1ZDl zU+tLGaKa?aHl-MprRFPqNyFqU19g1D`yni{WvS+ZVL4)*hO2dgHt@+&vRv3y4PPw9 zpez`6*0D~uv~kRyePAos!i_$ELHhq!u85#3O+{%x2j z<7QGC=xhHec(YI#o`5GbEKYJ>e0!%Yk);J-f>J6r)uIjtbtou7&7RSo)`cdq!>zL$ zF7*8u8PXzzj$mN~QC`!?5p@z84pC*!(x$2vCP3vIphnfN3T$dnL>Zv4fbqYt!&6Ow z0iJ{V4E)|FCnPBxW`U#Cz*%6nD5YalD`UR`>K#=G;#+_UqJmkC{+)@z%}E=fQhivOmq#mzX=a!`8$~f?9k1Otff zE;uKOX@|5<5Zf_BtRYa0M)4imOu44R$o3NijQTH7|59C|&7~ET<5l!dcj~Z2ZtH}5 zv;M7ICdtY=?T}^`xqv`euDiO;q{6qsw3bpcQp?tdfcjjYc_bMKgh~OT3WY`9!l zaR~S2`D?kI)m3nN1i$hHp;sHYuD5@E3jwDwg@a1z8A%|_90#K=gka{tR#0X%mDB(& zVW7jn>3Ot5Lok2{HGI8(4LBDF1GIs3nn?BAL;}udE3-o>MI*vb2q5?-$OHQP1nCfL z9}sNkh#z5@Lv;{ffDU*fg!5evbgzS)bR7zJBM~rzfXmpzOev*lV|SQ$IT6$eAeFmy zmkIAvO{Jw^zLTY2p->n=m<@1V1WTMIk#qpB67EHR|6w+x`4O|s*ix!C*0Sq-klz5+ z=GF+V{Ukx^{T>Z!0iyp>wu1}2t^B$ zQ)uJVGQ)La0Ab%a0TIjcZ0qh%-cZ=_fRmCq8(h?qWAS~SaB$VwZjhvOodi{g5qONp|3Za zR0XiC?sU!0G3_617Gq8M7BcaqL z`3!Ysomh_KBqZycJ?siUGcu`?i;FD0 z57n=42@N7Vm`z8#M#|ZcWzYuqo z5;|BQ96cG-Sr8rvrY(79ttiD&_A;4PLU;(``3IVDInB)q-P}w?@oN;jW{M#BfM7SD zUPJN?;8JcVBTdZ(;ZyH`=!c;9hDiAVkOhbVFl+$*DR}CdqRpehfdODkvl{`6QB2JR zgDZc_-7(pT;sz?5#^vH4rPLM;!3h=MqhJ<5v|TlH8hHx8FAxLj3`FO`6Q?5xn{{c; zA8)*zzXB&9=*Z+xC4rFqnKmTHVpz=a=HPNnb&(*PxD`}>1nNSN)2i90jjDOC4ybFP za#k}z7#z*e<517wb4b3AtaZpK4=s@;q0w$Sy+OcL7|!8h@lq+xjc9{0b0In%^xHv8 z_dFFo;nXzkQ2#!<2h3c=!z-G7nS(fz%v6}gH&L8|MC9s$_JLtw>W4=01d;_j!Y{d7 zgr#(6d2C;q0crv0BOz)}Ubo42T54~H`DxGxBOZKiFfMg)hgD8BqnXS?6raiDJESE$ zrsY9Z_tzr15y5x(uJ~Iixg{_@aZ zUGm_MF`jA0F`Dy{e7q?zB!QtYC|*T!1#ltXDjn>B5d5GOIu3>CtDtuWT}hqr-D}@? zm`}Z_7B50{6ym;n2lLX0X2AXKW;}2SlKBle(LS&CF(aCQWhfTW%4M7)UMV5CxB?yT zhv;O8_NRR#@EEln;rxUT43@V&|d_-FGQo0*JJWo89Xlt(Q=4B2EV(rS$zq^6NVlQ(aQHw z9N+6yXUk8@rWGU*SkH+F_y>w>kzC1%;)#(D!Nuc29tzP3p!cXb$0FS%N;8+zI^0|x zZP79?#~^OIcc^a3(9cV>pBaPUY$PYvhIr=l9nyx@*2CZ$R1~0*ypG~`1YC{gPX3Qr zGlH~$gza|%b0mcGLC=7w#c#E~JpMvbD79a1(h>-dLfrb-p}alAW0J1jO*`W`70Ib6 zDh;P)q&w36>+FDZ67W2VTWH}HTDhOY#k!3T00jJMCUhSF;amuJ2R#8InZ6*DkH3&5 zAIZ8s1ktgGo1Yx&TQz)UtlQmGn8YWMe4BuA*6dZ^)Ql`3q;CerIutJua0?Y~!|))7 ziB-cFfV%<+-wxe-gFXVHcY&S+q4HY?$9KiFEM}5zgj;koZ1^nVmSNE$I?SeTG?Ifk z2+3tAw(`~pK0VSw3Lt4)&66eGMJ`)a0#6swtJDfon{xAUCAR>MyZbh>{ zf}bJKsn09vxyy{Q;R}H4I}2CX@gFY=k}NkT4T9dfXF<+`r%pv&vue1D+Qu{REINkFa#@k22C zAQoPaxT14oldO$*eDL{V0~d&25V1FKE`l|7v$e@S!tic53f34-wR<<11L2vI5#QZt z)8RM%!Sd&e6^!P;fZ4T?Y*D5Ltth`?SO|WSjpuuzGK=ZmGH&a5WrCcj`AL_Y^{B|NzV zapopB+1e%wLtVMvD7u-BWFCqmQM?O@%;iI5^(kal7?SGqq+mxYAi4$2bx`>|;_!8w zvM7`=)R((Vz)EIO;op!PTpL_e$vg#3o;s-;Z25hrdyD}6B7}E>xe?ah0rS?5bYGx^ zpZqu3w8`;p8+F%5;tJYc9PFnEto?ttjeU~Y%*+hEmWFu!{!<|Qg&7)j>T z6t<mVD@%R%1{(Y;{qf#_k_v$JgdOBkA|IRr~-Wfikf z>_ouMNOnXrv!+4DWCBEL4-L?JECT&9M9+bK3c4Qy^C*Om!i_6OYCk{;!^Uc2En_M$ zomRF6rl6RNVltA+1dKv528BY$kEM+N6S;|tD!6^S9A?5w!>}mzV00000NkvXXu0mjf+GChC diff --git a/v2/dotclear/admin/style/grid.png b/v2/dotclear/admin/style/grid.png deleted file mode 100644 index cf9402d8adecb487701a55a7ebe22bd23564883e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202 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 LNkvXXu0mjf)S&N? diff --git a/v2/dotclear/admin/style/install/process_warning.png b/v2/dotclear/admin/style/install/process_warning.png deleted file mode 100644 index b1dbe7d168688f5540f12e1c3de0c7c0a5e9add8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4937 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 Hu0mjf2x&U# diff --git a/v2/dotclear/admin/style/install/w-logo.png b/v2/dotclear/admin/style/install/w-logo.png deleted file mode 100644 index 7295297cd320a482a6ae27d0e736cdf72d70cec3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1615 zcmV-V2C(^wP)QGEnMZUhf%gDa)@b8|Uncv>s_xJXs zrKE<1fX>d$udb@+=jE1_k*21ix3;s6jfmIQ)bH=^#>T^8Vq$%Nf6B_r=I7>-k&K#~ zn{94v&C9{Py0L0(Y}3@!t*)(JU|)1~b+@;-gM)wF-Q2{%xR8>O>FMU#*U*-imw|(W zVq;^Bjg9p6_2S{()Y8h;)z#3=#M02mwX>_<+}GgW+S}UGpq`kDiiOwJ&A`FIz`?-h z=Hq5(W`~G~cX)WAqN00zd9}8-Y;JC=tgOn*%j)Xt>+9)sb#kt(rKhEy*4ERQmy&*c zcUM_i|NsB_wC%|N00jFGmNG<0m+^UAU}V8J^8j;FP~1I&MF7~eYKUm|4}jUVVl@u*!)d4RHl>Xz5rfJvrL+O*J>VUr&m=C)D z9BNpu@3h|%_-S>(S*+>fP@{5vu4xByR;(m=|1ihaKAaCUZ7N4m6~S5VTjX!;VYMIN zH#zp;`5qr$_5-|IgvrqbK6C}7YuvR}}nTO}jX{9jxKr3~t88{|`PK zoIhVt>|uYkFW}P;MU-d{)78F!H|Kw7lnftU6#aPx!Dr*%YWnwMx7+>FSC4Mh1MiJz zD%fVLXZ2dmGVrhgK+W6;?xNe!jpg8G4S z-~j*b8At*N90usKx|8W(2~B(+M$htJTrx40wc=%rv?NS_GDc z3N-L-usp^g@|>T=f{AYQ^80EC7r^`jhj|#;YBb6wAWjf>FFzTL+XZ-yQAf`FQgA;O zL%IM*+>A4^4llPp_KL^}3LPLuW<=$q8=ph;CF_4H2X{GcvMMM6N3W%(%qo6tb6YQ> z)#0||GfG?zL69VpT2fiUxKvwh_cLV&iA?5xZ!DqTIbzW`#FT6SP ziol3X9JTf4B#hYI2D4op{Gnfxi*^EEbuguvXhs;^<7-FeUbss-L~#UBezqgt_y*4Y z^;d#_l!ClRqNh~1lM-)VfN+@sMkv$*NXm`*I&hQ^TfDRYU94+sO`*ed@+QFH?1i4G0zXxeFLixEqos*vIMOVBrKmZf=@k{b z#uV=jg9PrtbL(BNpv4nLJ`bVHqXfTHP7=!w8iAH0G%!y(bg1~5E3Zdr-LQt>8295* zrkIV_j&7vZ<9XP{Iv6jL<|QyQ<&H8`k`pEQsI61UX1MS9b9O#oI-E~!epq(Y!!j=S z`HadZm|S_iq28Ry*(de9JhIvgz0;m#o#HX8-NEklBcV5kCgXAO>j~kDeTa0}aoqr+ z)DaTpPWGh+D0vuPJ3HC#Z~3dwNp&PO=JIrle?d6DOezPyhw`5Q0{~0>Rj?xr*xvvE N002ovPDHLkV1naWGX4Mn diff --git a/v2/dotclear/admin/style/jsToolBar/bt_bquote.png b/v2/dotclear/admin/style/jsToolBar/bt_bquote.png deleted file mode 100644 index bb6be88d2f96346012b1ab114f07a444e426d9ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAf3?x51|2hvyF&8^|hH!9j+JSPRm`9SRG|P;5uBe^Ql40p%HW%rT$G=inv$8Q z;FejGTAp8&U98|6v3sJH3Q(=Fr;B3dH r_3{R8_7YjMk9EybP0l+XkKU!zYW diff --git a/v2/dotclear/admin/style/jsToolBar/bt_br.png b/v2/dotclear/admin/style/jsToolBar/bt_br.png deleted file mode 100644 index 717ff6cfd854e477355cd699005f991bbc86dac6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 243 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAf3?x51|2hvyF&8^|hH!9j+QJYD@<);T3K0RT6!MF0Q* diff --git a/v2/dotclear/admin/style/jsToolBar/bt_clean.png b/v2/dotclear/admin/style/jsToolBar/bt_clean.png deleted file mode 100644 index 3973a2c3066464f889896da9b4c11b74fa5fa70e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 576 zcmV-G0>AxxN#00003b3#c}2nYz< z;ZNWI008h%OjJcJAPM^8Xy(XFq>oKnUtH|!-iV2ny1KHddjwE60lc3t|Nq3$!kk`Q zRFi&Kd~#YvI4RVsc(Sjd;Lv}SOa%Y=sg{U&(ZjJLD>ncC|8HPIGcz;X)QZJ{K8A#Z zxTt*k+-z1oAK1*W(YQskV;QQVm9dX$@1)VFg*RKEn*2clH%*>hN&VC^&Lfg)o|M_qn>vRMF000Jb zQchF<|NsC00JFcOzW@LL32;bRa{vGf5&!@T5&_cPe*6Fc02XvbSad^jWnpw_Z*Cw| zX>DZyFflJMI4>|XdUF6G0000WbVXQnQ*UN;cVTj608L?Ia&K*AWNBd_Mrm?ocW-iQ zb0AGvyOAm+0001oNkl#(k<>Gga7Gc7ck)nW)7Fwk7UXgAmD*1?- zn`QK$!8;-MT+OL9r6oh!W?b)Wnj^{5*w_%-mE414DfS z3w;BVs$vEupb7<$is1aTlJdl&R0iL~|zDqh}{#lRDf#3 zJzX3_IA$jA;AZD>F$`_?KIb%pm4}CCPr@@%w!6~O3TIa9l)t~%V!-gTe~DWM4fqSJW3 diff --git a/v2/dotclear/admin/style/jsToolBar/bt_del.png b/v2/dotclear/admin/style/jsToolBar/bt_del.png deleted file mode 100644 index 87c3c6604b2e97dc6b8025b08527e592f04a26b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 351 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc3?z4jzqJQa%*9TgAsieWw;%dH0CJ53d_r7- z^qW`rCQs^$2oKiQ);xFiP+4g{A0O|=^~*dxT+`Ch?%ux8(p+<3-xgUJX)7!9MGI#L z`5w^%YGW!1@(cdY@N~O@7m&wU;1OBOz`!j8!i<;h*8Kqrij}xVlsFfqCYEI8=P86_ z=B6?j80s5X=o^?+6*DLSRVaW|1m~xflqVLYGWaGY7v<-srer26xMdclmgg5`7c2Ni z?4GEl0#uvs>Eak7ae3*5(|m^vcw7SS&r%DP=KBACtB!yubB@4fo341yeJXXwL$$Xg z<~w^&<1ucuvvgy;BlBG3z|jJika{0^!Ow3b-0w}lE|>X~>4h!N>x&gqapDbY|D;a) jvgL8vgkSytYtG76Ph#dy`?zy2&`JhRS3j3^P6%y{W;-5;Q!Scz*yiE~kEVo7Fxo?nB7grmi9 hy1$0%y@>)04F6{cv!Bj>_7rFqgQu&X%Q~loCII%_U2OmW diff --git a/v2/dotclear/admin/style/jsToolBar/bt_img.png b/v2/dotclear/admin/style/jsToolBar/bt_img.png deleted file mode 100644 index b991a527aa2d7cb8274152b4f7db01846e564112..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 899 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc3?z4jzqJQa%*9TgAsieWw;%dHU|?Wu2=EDU z1qvVdSX#6mQ1j)k}Go|ts9zhGJJ|NsA&>^Xht?1Ps6`GNHpw_TXp zyXtsMOJLf}w2*{+X$3X=yeFB{c1hUT&pGm6D|&bJ{DYZm_pCkjBz5kl7r#$-uRa%$ zq#ID=;!=GnZRX6`mzEy5xcPcC~X=mR4yb{qDu9vV%G*EQs zgE>yc*NlygHy^xGJ9X36llPk!A9XG}ZRTfm`1Zp$ukK08%1>EycHi-R6BZuHo3K?- zOiD>j!@d1TWMZ*j{hhR#XYzVtHXl3Nz5aUcjKdtf>{^<7ItknF+_|Q5G3E*|4suI^ z{DOf&K{vplyX}fM&|=O4kH}&M25un`X1sK_?hjBAI6tkVJh3R1!8b9vC_gtfB{NaMEwd=KJijQrSiv`9_e3of zpxVoxE{-7*my=H%WRm#6k<}sk;>u#KuHDirZqMAkLy_WZ|FG8TIy}`cuQ)o#aSVtn-7{Uotv|6-n4sKzs|@w798B;v#_XAes@A`Aa~-9 zgjGF0kyGcd(&P|%ZsfqS)8g>zLJiMhPGMBm*Z2R106fG(}YjZTW+eYz2EX7}# zBD!;Vy)SRlo@(s#@ZOhDA5Z?k$CJChnH#!tO}G`{uB*)H{#b`i#qr;a9|nTT6SGvy0fr%dE3Oro{`1hzI|J=V`WI`l8&xc*O0ubwi%nYY@EMxcY0}mU|`^zSNHz^ z|8MS|bmZdtwmJI~>sRM?ZeFzc+`G@GO+2zHCheTM;<&z3(zc_U7H&S=v+!VQ^ZJW- zHa2$6n!EnEZ9rlFvh{!dzWe^`zJ+68boGk8`}SnCtg`UQYn-*iF{I?t>wUGIbEm95 zTGYF(Z}E|%=e9QXE}FIGl&^HdX`pKbN`m}?fwm(9h6l>Al0Z4m0*}aI1_o{+5N5n| zx9$&6P^`o?qQtoGlds7@p!MOd1szt~a)Mk|J!)%W zOTPdAs!OC*%dhx4@yTZtwSAxPFH2kgrCsf9%C(G*W~Va@3h&;&u-ET&MEB-L77_k7 z{v3@4n>A}w=6rT~_(OEA|89#i8TN%XF5kjVrAsJ%S)K4?@$7D`hP_VHYHkZOa38Yq vf9J@M%5nd+TI(%y-VoapG3Im2p47?9Jdji@HB(pubRdJLtDnm{r-UW|&l>1o diff --git a/v2/dotclear/admin/style/jsToolBar/bt_ins.png b/v2/dotclear/admin/style/jsToolBar/bt_ins.png deleted file mode 100644 index f690b90d4f94b31315c4a6f7c8a011d3af305c3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAd3?%E9GuQzs=3*z$5DpHG+YkL80J#PMJ|V6^ z`pv6*EzLC%;lWl`<_Gp|*|>h$-fqJ=X&JzUe$(qv_%CyJ@g z2I^rd3Gxg6&+v4+ffta+S>O>_%)r1c1j3A$?$-SQ3W}AuMwB=gr6!hS=I1GdWag$a z7#QjsSm+y=R24HQ0aYk~R0QXzm6RtIr84*?CKu)Brlw>jD!649rIzOxWfv>>M(m!b zr2z0KOr60h&AL?HX@;=~>rx>_pNsL9 p&kW2vmL*!bH!!kD6z&#hV`x;9cy(l#s{qg_22WQ%mvv4FO#uJIUXK6( diff --git a/v2/dotclear/admin/style/jsToolBar/bt_link.png b/v2/dotclear/admin/style/jsToolBar/bt_link.png deleted file mode 100644 index 07a2b0e5bddac5c7f5cf627f891e50fe64a32fce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 833 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc3?z4jzqJQa%*9TgAsieWw;%dHU|?V@4DbnY z6_QbT`uKX$-iYezYH61xN3QR7s5$cO+qcMwkj%AvrcUXxceFk5v2^vSg%{pD=TR&1 znyFmBcJ=n{+tX)kiC)xUS9rjpyh74bw`FeOl{dR)ZoHhoX=2#aHEC&SItkmiU6^WY zY<&CXxj9Gv14Tp>9Rgd=7c4n!8eA~@(o!I>5A|;8pRXIadF`&##%X7!tT{XXO6sAr z51#zEXP@_E(#d`aJNs2T=e~J$uY3LVJ9n~w5wM8l3n?(Ii9 z7M3jAa!M~@)#ig&-u}GeSAXaK|Nr;yT)cPho}sbzi)XjBqId5*zOT8t+0Dma#&;pm z@B<&})~;Q-L1;G39Sl%JcLl9{OBmRXcqo?nz*tl%55d!m*KQ0-Mu7sn8Z@MMGIOcEbB zc1^#f9=(VwZPTgUoYPyQl(~0Rdx-ruT-nL-M3Iv#Y-iPH5BHT_md1xzd4+v18U3(G z?Fm*o`=BXkn~{{8*Q-81t4E#%j(;u8#8B#=bM8pU+L^JdwXvR!d4IZU%!G@M ze)?u7><=5-M2Ai57R=h6x6p5$Sb1BTn}eHA9Z$%GnA_f}4VKNa9L7$Ij1%wigq`5n ze42}gXUpe}fi1sd6`8qOHgIhE?V`+*`q@;`VH&gI3`xQBjBFqGa5ye75Yc${fTNP( Y-@aIjLe{0hKo2r_y85}Sb4q9e04Ly+QK$!8;-MT+OL9r6oh!W?b)Wnj^ z{5*w_%-mE414DfS3w;BVs$vEupb7<$is1aTlJdl&R0iL~|zDqh}{#lRDf#rJY5_^IHHq({Qu9)%u~<)=()nKg$!rd9v*iv^Z92e@Sp8dz4Oz1 g%s2TbeqlCbsGMc`zR~Z`I-pJlPgg&ebxsLQ0DVDCO#lD@ diff --git a/v2/dotclear/admin/style/jsToolBar/bt_paragraph.png b/v2/dotclear/admin/style/jsToolBar/bt_paragraph.png deleted file mode 100644 index 5de086ecf20245f05569becf2def4153790d6828..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAd3?%E9GuQzs=3*z$5DpHG+YkL80J$mwJ|V6^ z`sw5AWu^I>H?A-?Hdawl3JmnUee;}v0RQo$yAuKD>8!cHX*u%e{N|{{R1f=FFMZ zs}`1)mfpK_ap}^fFP`1@^Yx632Dzu^B2Pq!O*0ePGS9+AZi4BSE>%y{W;-5&-97QqtN zh>{3jAFJg2T)o7U{G?R9irfMQ8~cia#N_PM5{0DH^vpb4B?ScqC56lsTcvPQUjyF) z=hTc$kE){7;3~h6MhJ1(0FE1>4w)RIJnirk#MVyg;UC9s)RKsHENUr7P1 zq$Jx`$q{6kLWFOCf^&XRs)C80p>DE)v5A6-nVylkk)^qrjzVx^iGo*Ro`R9Nf{}p% zkT9|`G_*1?1Ud!`l`9GBGM0zyk)Oennz|zM-ChKHOxWMjN1@m2**QVo82cNPd2f9mM-?nMJAP`9;~q z3eLgCHXxlSiV(IU^ryNcmZaK&!b2B`jLbp|jjc>9txV0Mkn}?op=tNcPsvQHglV_X zH89aNG7T{_wK6cbGPQ(iM^XgUZlezh2&8}khdRhlXySwdEF~EpUInE^IpAnXN!Cxz zNzF~oD=7wsnIUSJr6gOW!ks3@Lky**B{}~E>VYMO7^rXnCt6T;2+7P%WiT+*H?Yt*FsUkLPy(uu0jUVi zPb(=;EJ|g-lBQ=|a|4x&Gd*1#LnOj;&%YLGQV?iMoYtxtxb2FKidyg8|F+8(am(JD zf4*ij57R%D177EhydI@AWxW^v%e}K{x`e-i{=_qJM^ZBn{pQR&9m%u*wDD6T*WG&2 zQcJf#tJa)z`JAnJh;*9e)hmIWPd}Ec+)Z6_LLhcl-9gh3<+*#ldLK^qDp;SO^TEN? ugq`WdPQI6BNu}kvFQfz)tarN1d+%Kx@2c3)+24SUWbkzLb6Mw<&;$U$sl*Zh diff --git a/v2/dotclear/admin/style/jsToolBar/bt_pre.png b/v2/dotclear/admin/style/jsToolBar/bt_pre.png deleted file mode 100644 index b765759a6b9d242d0013d9e4a6579961300a42bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAj3?#R^_xk}U=3*z$5DpHG+YkL80J&@dJ|V6^ z`pv6*2U1J+0a;8XL4Lvi8J=!8@B;EU3p^r=85p>QK$!8;-MT+OL9r6oh!W?b)Wnj^ z{5*w_%-mE414DfS3w;BVs$vEupb7<$is1aTlJdl&R0iL~|zDqh}{#lRDfzVJzX3_IHHq({Qu9)tXEUv%Xs+iO=*dD?+g-l?3O-pKlwm`yhfe; bb~%Pb3Da%wR@r?7YGUwo^>bP0l+XkK?Hx*6 diff --git a/v2/dotclear/admin/style/jsToolBar/bt_quote.png b/v2/dotclear/admin/style/jsToolBar/bt_quote.png deleted file mode 100644 index 6cd98e118f5a14a707a636ec105a843149ba8aa3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 322 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAd3?%E9GuQzs=3*z$5DpHG+YkL80J-V`J|V6^ z`sw5AGiS~W4D>yIbhnC%QdehFS!w>}jVo^7JZEfdoR|>(=G8p`@BNuTrMx9Ue!>5d z0E6udr8b}hXMsm#F#`j)5C}6~x?A@LC@5Cq8d2h0l$uzQnV+W+l9`*zU|^_kV4-hd zQdP{L1XQ5_QW2b=R#Ki=l*-_nm|T>fo0^iDsNj}alvbz##9pI7yO^$>2?DzAdj=aBeIx*fm;ZK886+f`vVjdD{+k|aV|5mEPyne2&QB{TPb^Ah@J&oE%Fj(r$xKvm%PdMQ&o9a@R`8A3 zJyA;qs5ZjW#W6(U^4bZz#TpcNobxlEDk}W@f8AQK$!8;-MT+OL9r6oh!W?b)Wnj^ z{5*w_%-mE414DfS3w;BVs$vEupb7<$is1aTlJdl&R0iL~|zDqh}{#lRDfz#JY5_^IHHq({Qu9)Z1j)k2){I!gq+jO|BX2!l`CW- p:first-child { - margin-top: 0; -} \ No newline at end of file diff --git a/v2/dotclear/admin/style/jsToolBar/resize.png b/v2/dotclear/admin/style/jsToolBar/resize.png deleted file mode 100644 index 1b212709db2a3bf3158b90a32a15aed916f10d27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1267 zcmcIk&ubGw6y6w-7%8X+527%v2QTiOqC=I%|WFH3tpT8g#9qEiRU`Moa+gGEPzK_PmJ1C2_<_V4S$Ih(;m2 zTN0O&WN5p-fhvB;kS?o|rQ~#^&&ygtD;DN&p(f?%F7=RBK$@aJrx8^px(bUKHL;up zYlL>2Y*tq%Ibl{3cR3FT#{GU@?&oAb>|nK6EMi5&nkGSn6zzMQ#*!D^7?T|GR9R$& zPQV@CLkTZ!`Fp%1ib_({4%oz#tSkNr%49}{RvvQ(`1dldvsyU(;Nxtyl2!0%N0$%rRr@em&Uyu}C z((_eGmyEL|jWEntq%2X~=}X)b!I&tI36Ru~uC&GuN%3!$+wz azZZe}S^Djp7tdeAH=(xDsJ>i&`1lV+B|r@T diff --git a/v2/dotclear/admin/style/magnifier.png b/v2/dotclear/admin/style/magnifier.png deleted file mode 100644 index 1578a8d114883a5e0fc8a9f47636f9f4a9c2eaa0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 499 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 OhM#~I&wK(i`}3bHw&zm- diff --git a/v2/dotclear/admin/style/modal/modal.css b/v2/dotclear/admin/style/modal/modal.css deleted file mode 100644 index 8524e7c..0000000 --- a/v2/dotclear/admin/style/modal/modal.css +++ /dev/null @@ -1,52 +0,0 @@ -div.jq-modal { - line-height: 1; - background: #fff; -} -div.jq-modal-container { - padding: 1px; - position: relative; -} -div.jq-modal-content { - position: relative; - overflow: auto; -} -div.jq-modal-closer { - position: absolute; - top: -12px; - right: -12px; - width: 25px; - height: 25px; -} -div.jq-modal-closer a { - display: block; - text-indent: -5000px; - width: 25px; - height: 25px; - outline: none; - border: none; -} - -/* modalImage */ -div.jq-modal-content img { - display: block; -} -span.jq-modal-legend { - display: block; - padding: 3px 0; -} -a.jq-modal-next, a.jq-modal-prev { - display: block; - position: absolute; - top: 0; - width: 50%; - bottom: 0; - outline: none; - border: none; - text-indent: -5000px; -} -a.jq-modal-next { - right: 0; -} -a.jq-modal-prev { - left: 0; -} \ No newline at end of file diff --git a/v2/dotclear/admin/style/msg-error.png b/v2/dotclear/admin/style/msg-error.png deleted file mode 100644 index 43894f10d6456ab103a3c075a40eb46fc4a6a39a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4159 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 JPDHLkV1k%<`Gx=h diff --git a/v2/dotclear/admin/style/msg-std.png b/v2/dotclear/admin/style/msg-std.png deleted file mode 100644 index 3b6e1072d5e6a03465d5117633a06924097492b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1135 zcmV-#1d#iQP)FVU=g##jss#)7IqSdHpY^fVRwBaxDgMm@U;E~0u(EGqFDS1RS4z*XUQxRlKXttf zwjVs?Z&)<=WTzi&(@L)a=>*c9+ zWX@t6SgjO+*5tH@Af?G9dHJd3OWwa}g7;1iKiAXIu{*Vn%UOyDC%rAtW)iOgR%kZ=YKtxc$(BeM&!W>`yI>Ja~DRkuV zm7+VJ=TegF+`ekrt25*2nIA75K2{8aV9!L7G8QMKB1Fa#8A~}e^mm4=oY%$tLI+#! zSVC!Xf>dBC%eW9l+Qj*{)1@4M1wT@rP6-r6UynK$I z{~9Or0&1B-#8J%*B2e&yH-MqG5^ekPh<|r?_xa4pKx{2)8UcxQ%n5vo`G8O>s%grF zT1pTEFr&ntQgjBsT#VwuUF+8jw`5QZ!@H`+4%Cck=}BxI8y57iabYk0ogvmaK0kY& z)1@+VwQeDBfJKy6>LFmbr3X$}T23=+*0!icI5s}X&Y#XQT8;6vX4CBhki=B2Yr#gg z-mA#k!L}a6)^-_p^*b?=8LSf=b^BzJP;o+FEy}qTY>Wk%(?(D+cFbMl(xuihFsHzR zLI(h+FP11-;TB_BO4JmEDzy=$&YjDw6S&gfrj*l+M;7;?Ro(R6=tW}fk;}|%C;(ci zlhfzsVc(_)My$vQBf@NTzYm{Xy3PkR^$iZ*5*Isgsz;=)};&R$>;cUs>0W!V~nO|dRH}SzvbX#5AMA# z0lA_9C*lkp!6t)kagbQiQ%wpr*@`cv?SmaPzuPX2-hbd$8%qsbVx$ep5uA zM(I2VO{{86Q)9#K4|4e(2Ohrn%+=y35y4lg02F}`$N|0u15_71zV)8&``163o8Q06 z>j-;M%5zCFkxi7&lu!J4;J1%<9|p7sdB6fG5CIcLq}C+JQ@?$AAOJkT6VMKlhJ)82 zSB)SB$SDYQy;8QJ8FinE5lOE5CjS?rZw&c&@;82iBF{NF6X5^=002ovPDHLkV1oZX B7fb*E diff --git a/v2/dotclear/admin/style/package.png b/v2/dotclear/admin/style/package.png deleted file mode 100644 index f138df426616a114de712f4094c77ddebec62d97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 771 zcmV+e1N{7nP)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ;iAh93RCwB?l1pn{WfX>=wZDBi&DkNXCh?M^rxCm%g_c$jqyxta3IPW}JL$wp zi_)LbnLY!M9qP0o%q^7y-voGKN*6QG-Nt&q(Ue;*6yzj#j zGvohE3{Vu?FI83b74TM)B;o4i%ODYTUAa8Zf0>z?J@1^Osw?_0_fb^odyP?jSmx?N^wXK|5ZFu1p{ zv^4leRTDGgiFPYI?JTrypbagfqTuaQr|9+OP_wf$)6=6o&(E95(+mtl*hv8Rrojxn z_e|tnj-NO|&_E<^K8{nWFg##jV;d2{fHt(Wt;c&$2m#-CgcOOB>W}rWscoIqJ;Raw z+?aux?sjr6;-A%3T;%8+>YyPINy6{zm$-WW%;{Uh?|v%%qj!QRY7(cl4Tily&jYKBxaxl+R&v5 zQ(!`?9q%>XOAtapgAzg@w1K8+==YBjCo$f8L?h}pW#m)JHly&NxwCeAFF{?`IOmAt zv8(r-o@Jlf^hw>-!A6av(E!xMmwLFlx0a(RWwb524!V=nbByQ zL(vrd&b$2iaD)FgBGxuweKSgqWUu@P5XB;-X?m@yDl5y9q9_2EnmSAzCv0v%;^g5E zcyIbMR)#QKOK!iAA3L48Y$+B&9LVD0;;SDmEPT<)vN_B|qDVwU%nVaSh@@<)t#5B! z8m->{`{u3h@B9ip1eV3^|KTxI*{A(u2c!Ux2LM{CNbV6Px5oeg002ovPDHLkV1kst BWAp$3 diff --git a/v2/dotclear/admin/style/page-bg.png b/v2/dotclear/admin/style/page-bg.png deleted file mode 100644 index a048e81318ef31d2db442383a749b11760b8c5f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1254 zcmcIkzi-n(6u#1`grG{mzjR6MEPMV|@f~hCny}Rf4eed1(PJX(vzA}@&mIVOJ z)K;sT!XAj3otPBs!!I{q2{Rcj)~rk>^X}8#kK#DJv1ToO`}*O<^JlLYets983&HBW z2!M-Mk~#6_{o~)ld7Uq9^9F129tkN}a9ESVWjCZf7Iq?7Y2**zE+qeSmKctQQb<5uG*oGs`m$PP!1=ypUz}V~h5sphz%8A83aU%()A-q$P`c-e& zH(-T@6c%JPXDj&vEX>MUQ8S9Ow_t;Cc!&5UOgUgX%n8=R?;t3g1Oai3J3K}vCpedXX6i}J92>V-=n-CaJ<_Hq@Y^ODIsaK-ziRO; z#Ir=hcX?d;u$5=B8R>o|^nKE^OfvQ3a8CR_F4d|FR_1~2+&+Kqpt6zy_%nE^A9bh2 OH&9zzuO2Nvdh!Q!$2|=I diff --git a/v2/dotclear/admin/style/warning.png b/v2/dotclear/admin/style/warning.png deleted file mode 100644 index 5765d0c2eac8ee167c4fd2bff30faaff0b2dfae4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 678 zcmV;X0$KfuP)Lk~?TrQ4of|Irov>Y)Cf7WJQ#y*ouXPg(yN$P>5LC z*rgK!Vx?#kh>ch%X$;tiNCN46R7$iFvCt-9A&Q9@#3Z`A+1=dd8H<~}n1_Wp-8nPo zH|k$j!R6b$0`1O9YzXyL*ZK=bLqNsO7* zUQr{HK#{I94-l_J`0*tgE`xaM z*)h>Kx)^UrVds_QX^qT`jSLz)*tL|_>pQgG+`~3&XzXQ4MCNU>GBCdFM*^shS0>Vw zOF*`LwU}ZV5R74__i+D3hUbC}09T|ND5sgF=Gdw3p<{#I`M#n#C?cjB*!g#h@w3ZM zYL5Zm0Siblog->getPosts($params); - - if ($post->isEmpty()) { - $core->error->add(__('This entry does not exist or is not published')); - $can_view_page = false; - } else { - $TB = new dcTrackback($core); - $tb_excerpt = $post->post_excerpt_xhtml.' '.$post->post_content_xhtml; - $post_title = $post->post_title; - $post_url = $post->getURL(); - } -} -else -{ - $core->error->add(__('This entry does not exist.')); - $can_view_page = false; -} - -# Change excerpt -if (!empty($_POST['tb_excerpt'])) { - $tb_excerpt = $_POST['tb_excerpt']; -} - -# Sanitize excerpt -$tb_excerpt = html::clean($tb_excerpt); -$tb_excerpt = html::decodeEntities($tb_excerpt); -$tb_excerpt = text::cutString(html::escapeHTML($tb_excerpt),255); -$tb_excerpt = preg_replace('/\s+/ms',' ',$tb_excerpt); - -# Send pings -if ($post && !$post->isEmpty() && !empty($_POST['tb_urls'])) -{ - $tb_urls = $_POST['tb_urls']; - $tb_urls = str_replace("\r",'',$tb_urls); - - $post_title = html::escapeHTML(trim(html::clean($post_title))); - - foreach (explode("\n",$tb_urls) as $tb_url) - { - try { - $TB->ping($tb_url,$id,$post_title,$tb_excerpt,$post_url); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } - } - - if (!$core->error->flag()) { - http::redirect('trackbacks.php?id='.$id.'&sent=1'); - } -} - -$page_title = __('Ping blogs'); - -/* DISPLAY --------------------------------------------------------- */ -dcPage::open($page_title,dcPage::jsLoad('js/_trackbacks.js')); - -# Exit if we cannot view page -if (!$can_view_page) { - dcPage::close(); - exit; -} - -if (!empty($_GET['sent'])) { - echo '

      '.__('All pings sent.').'

      '; -} - -echo '

      '.html::escapeHTML($core->blog->name).' › '.$page_title.'

      '; - -echo '

      '. - sprintf(__('Back to "%s"'),html::escapeHTML($post->post_title)).'

      '; - -echo -'

      '. -html::escapeHTML($post->post_title).'

      '. -'
      '. -($post->post_excerpt_xhtml ? $post->post_excerpt_xhtml.'
      ' : ''). -$post->post_content_xhtml. -'
      '; - -if (!empty($_GET['auto'])) { - flush(); - $tb_urls = implode("\n",$TB->discover($post->post_excerpt_xhtml.' '.$post->post_content_xhtml)); -} else { - $auto_link = ''. - __('Auto discover ping URLs').''; -} - -echo -'

      '.__('Ping blogs').'

      '. -'
      '. -'

      '. - -'

      '. - -'

      '.form::hidden('id',$id). -$core->formNonce(). -'  '. -$auto_link.'

      '. -'
      '; - -$pings = $TB->getPostPings($id); - -if (!$pings->isEmpty()) -{ - echo '

      '.__('Previously sent pings').'

      '; - - echo '
        '; - while ($pings->fetch()) { - echo - '
      • '.dt::dt2str(__('%Y-%m-%d %H:%M'),$pings->ping_dt).' - '. - $pings->ping_url.'
      • '; - } - echo '
      '; -} - -dcPage::close(); -?> \ No newline at end of file diff --git a/v2/dotclear/admin/update.php b/v2/dotclear/admin/update.php deleted file mode 100644 index 4759c85..0000000 --- a/v2/dotclear/admin/update.php +++ /dev/null @@ -1,222 +0,0 @@ -Access denied'; - dcPage::close(); - exit; -} - -$updater = new dcUpdate(DC_UPDATE_URL,'dotclear',DC_UPDATE_VERSION,DC_TPL_CACHE.'/versions'); -$new_v = $updater->check(DC_VERSION); -$zip_file = $new_v ? DC_BACKUP_PATH.'/'.basename($updater->getFileURL()) : ''; -$version_info = $new_v ? $updater->getInfoURL() : ''; - -# Hide "update me" message -if (!empty($_GET['hide_msg'])) { - $updater->setNotify(false); - http::redirect('index.php'); -} - -$p_url = 'update.php'; - -$step = isset($_GET['step']) ? $_GET['step'] : ''; -$step = in_array($step,array('check','download','backup','unzip')) ? $step : ''; - -$archives = array(); -foreach (files::scanDir(DC_BACKUP_PATH) as $v) { - if (preg_match('/backup-([0-9A-Za-z\.-]+).zip/',$v)) { - $archives[] = $v; - } -} - -# Revert or delete backup file -if (!empty($_POST['backup_file']) && in_array($_POST['backup_file'],$archives)) -{ - $b_file = $_POST['backup_file']; - - try - { - if (!empty($_POST['b_del'])) - { - if (!@unlink(DC_BACKUP_PATH.'/'.$b_file)) { - throw new Exception(sprintf(__('Unable to delete file %s'),html::escapeHTML($b_file))); - } - http::redirect($p_url); - } - - if (!empty($_POST['b_revert'])) - { - $zip = new fileUnzip(DC_BACKUP_PATH.'/'.$b_file); - $zip->unzipAll(DC_BACKUP_PATH.'/'); - @unlink(DC_BACKUP_PATH.'/'.$b_file); - http::redirect($p_url); - } - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } -} - -# Upgrade process -if ($new_v && $step) -{ - try - { - $updater->setForcedFiles('inc/digests'); - - switch ($step) - { - case 'check': - $updater->checkIntegrity(DC_ROOT.'/inc/digests',DC_ROOT); - http::redirect($p_url.'?step=download'); - break; - case 'download': - $updater->download($zip_file); - if (!$updater->checkDownload($zip_file)) { - throw new Exception( - sprintf(__('Downloaded Dotclear archive seems to be corrupted. '. - 'Try download it again.'),'href="'.$p_url.'?step=download"') - ); - } - http::redirect($p_url.'?step=backup'); - break; - case 'backup': - $updater->backup( - $zip_file, 'dotclear/inc/digests', - DC_ROOT, DC_ROOT.'/inc/digests', - DC_BACKUP_PATH.'/backup-'.DC_VERSION.'.zip' - ); - http::redirect($p_url.'?step=unzip'); - break; - case 'unzip': - $updater->performUpgrade( - $zip_file, 'dotclear/inc/digests', 'dotclear', - DC_ROOT, DC_ROOT.'/inc/digests' - ); - break; - } - } - catch (Exception $e) - { - $msg = $e->getMessage(); - - if ($e->getCode() == dcUpdate::ERR_FILES_CHANGED) - { - $msg = - __('The following files of your Dotclear installation '. - 'have been modified so we won\'t try to update your installation. '. - 'Please try to update manually.'); - } - elseif ($e->getCode() == dcUpdate::ERR_FILES_UNREADABLE) - { - $msg = - sprintf(__('The following files of your Dotclear installation are not readable. '. - 'Please fix this or try to make a backup file named %s manually.'), - 'backup-'.DC_VERSION.'.zip'); - } - elseif ($e->getCode() == dcUpdate::ERR_FILES_UNWRITALBE) - { - $msg = - __('The following files of your Dotclear installation cannot be written. '. - 'Please fix this or try to update manually.'); - } - - if (isset($e->bad_files)) { - $msg .= - '
      • '. - implode('
      • ',$e->bad_files). - '
      '; - } - - $core->error->add($msg); - - $core->callBehavior('adminDCUpdateException',$e); - } -} - -/* DISPLAY Main page --------------------------------------------------------- */ -dcPage::open(__('Dotclear update')); - -if (!$core->error->flag()) { - echo '

      '.__('Dotclear update').'

      '; -} - -if (!$step) -{ - if (empty($new_v)) - { - echo '

      '.__('No newer Dotclear version available.').'

      '; - } - else - { - echo - '

      '.sprintf(__('Dotclear %s is available.'),$new_v). - ($version_info ? ' ('.__('information about this version').')' : ''). - '

      '. - - '

      '.__('To upgrade your Dotclear installation simply click on the following button. '. - 'A backup file of your current installation will be created in your root directory.').'

      '. - '
      '. - '

      '. - '

      '. - '
      '; - } - - if (!empty($archives)) - { - echo - '

      '.__('Update backup files').'

      '. - '

      '.__('The following files are backups of previously updates. '. - 'You can revert your previous installation or delete theses files.').'

      '; - - echo '
      '; - - foreach ($archives as $v) { - echo - '

      '; - } - - echo - '

      '.__('Please note that reverting your Dotclear version may have some '. - 'unwanted side-effects. Consider reverting only if you experience strong issues with this new version.').' '. - sprintf(__('You should not revert to version prior to last one (%s).'),end($archives)). - '

      '. - '

      '. - ''. - $core->formNonce().'

      '. - '
      '; - } -} -elseif ($step == 'unzip' && !$core->error->flag()) -{ - echo - '

      '. - __("Congratulations, you're one click away from the end of the update."). - ' '.__('Finish the update.').''. - '

      '; -} - -dcPage::close(); -?> \ No newline at end of file diff --git a/v2/dotclear/admin/user.php b/v2/dotclear/admin/user.php deleted file mode 100644 index 3af0c90..0000000 --- a/v2/dotclear/admin/user.php +++ /dev/null @@ -1,331 +0,0 @@ -auth->getInfo('user_lang'); -$user_tz = $core->auth->getInfo('user_tz'); -$user_post_status = ''; - -$user_options = $core->userDefaults(); - -foreach ($core->getFormaters() as $v) { - $formaters_combo[$v] = $v; -} - -foreach ($core->blog->getAllPostStatus() as $k => $v) { - $status_combo[$v] = $k; -} - -# Language codes -$langs = l10n::getISOcodes(1,1); -foreach ($langs as $k => $v) { - $lang_avail = $v == 'en' || is_dir(DC_L10N_ROOT.'/'.$v); - $lang_combo[] = new formSelectOption($k,$v,$lang_avail ? 'avail10n' : ''); -} - -# Get user if we have an ID -if (!empty($_REQUEST['id'])) -{ - try { - $rs = $core->getUser($_REQUEST['id']); - - $user_id = $rs->user_id; - $user_super = $rs->user_super; - $user_pwd = $rs->user_pwd; - $user_change_pwd = $rs->user_change_pwd; - $user_name = $rs->user_name; - $user_firstname = $rs->user_firstname; - $user_displayname = $rs->user_displayname; - $user_email = $rs->user_email; - $user_url = $rs->user_url; - $user_lang = $rs->user_lang; - $user_tz = $rs->user_tz; - $user_post_status = $rs->user_post_status; - - $user_options = array_merge($user_options,$rs->options()); - - $page_title = $user_id; - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } -} - -# Add or update user -if (isset($_POST['user_name'])) -{ - try - { - if (empty($_POST['your_pwd']) || !$core->auth->checkPassword(crypt::hmac(DC_MASTER_KEY,$_POST['your_pwd']))) { - throw new Exception(__('Password verification failed')); - } - - $cur = $core->con->openCursor($core->prefix.'user'); - - $cur->user_id = $_POST['user_id']; - $cur->user_super = $user_super = !empty($_POST['user_super']) ? 1 : 0; - $cur->user_name = $user_name = $_POST['user_name']; - $cur->user_firstname = $user_firstname = $_POST['user_firstname']; - $cur->user_displayname = $user_displayname = $_POST['user_displayname']; - $cur->user_email = $user_email = $_POST['user_email']; - $cur->user_url = $user_url = $_POST['user_url']; - $cur->user_lang = $user_lang = $_POST['user_lang']; - $cur->user_tz = $user_tz = $_POST['user_tz']; - $cur->user_post_status = $user_post_status = $_POST['user_post_status']; - - if ($cur->user_id == $core->auth->userID() && $core->auth->isSuperAdmin()) { - // force super_user to true if current user - $cur->user_super = $user_super = true; - } - if ($core->auth->allowPassChange()) { - $cur->user_change_pwd = !empty($_POST['user_change_pwd']) ? 1 : 0; - } - - if (!empty($_POST['new_pwd'])) { - if ($_POST['new_pwd'] != $_POST['new_pwd_c']) { - throw new Exception(__("Passwords don't match")); - } else { - $cur->user_pwd = $_POST['new_pwd']; - } - } - - $user_options['post_format'] = $_POST['user_post_format']; - $user_options['edit_size'] = (integer) $_POST['user_edit_size']; - - if ($user_options['edit_size'] < 1) { - $user_options['edit_size'] = 10; - } - - $cur->user_options = new ArrayObject($user_options); - - # Udate user - if ($user_id) - { - # --BEHAVIOR-- adminBeforeUserUpdate - $core->callBehavior('adminBeforeUserUpdate',$cur,$user_id); - - $new_id = $core->updUser($user_id,$cur); - - # --BEHAVIOR-- adminAfterUserUpdate - $core->callBehavior('adminAfterUserUpdate',$cur,$new_id); - - if ($user_id == $core->auth->userID() && - $user_id != $new_id) { - $core->session->destroy(); - } - - http::redirect('user.php?id='.$new_id.'&upd=1'); - } - # Add user - else - { - if ($core->getUsers(array('user_id' => $cur->user_id),true)->f(0) > 0) { - throw new Exception(sprintf(__('User "%s" already exists.'),html::escapeHTML($cur->user_id))); - } - - # --BEHAVIOR-- adminBeforeUserCreate - $core->callBehavior('adminBeforeUserCreate',$cur); - - $new_id = $core->addUser($cur); - - # --BEHAVIOR-- adminAfterUserCreate - $core->callBehavior('adminAfterUserCreate',$cur,$new_id); - - if (!empty($_POST['saveplus'])) { - http::redirect('user.php?add=1'); - } else { - http::redirect('user.php?id='.$new_id.'&add=1'); - } - } - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } -} - - -/* DISPLAY --------------------------------------------------------- */ -dcPage::open($page_title, - dcPage::jsConfirmClose('user-form'). - - # --BEHAVIOR-- adminUserHeaders - $core->callBehavior('adminUserHeaders') -); - -if (!empty($_GET['upd'])) { - echo '

      '.__('User has been successfully updated.').'

      '; -} - -if (!empty($_GET['add'])) { - echo '

      '.__('User has been successfully created.').'

      '; -} - -echo '

      '.__('Users').''.$page_title.'

      '; - -if ($user_id == $core->auth->userID()) { - echo - '

      '.__('Warning:').' '. - __('If you change your username, you will have to log in again.').'

      '; -} - -echo -'
      '. -'
      '.__('User information').''. -'
      '. -'
      '. -'

      '. -'

      '.__('At least 2 characters using letters, numbers or symbols.').'

      '. - -'

      '. -'

      '.__('Password must contain at least 6 characters.').'

      '. - -'

      '. - -'

      '. - -'

      '. - -'

      '. - -'

      '. -'

      '.__('Mandatory for password recovering procedure.').'

      '. -'
      '. - -'
      '. -'

      '. -'

      '. - -'

      '. - -'

      '. - -'

      '. - -'

      '; - -if ($core->auth->allowPassChange()) { - echo - '

      '; -} - -$super_disabled = $user_super && $user_id == $core->auth->userID(); - -echo -'

      '. -'
      '. -'
      '. -'
      '; - -# --BEHAVIOR-- adminUserForm -$core->callBehavior('adminUserForm',isset($rs) ? $rs : null); - -echo -'

      '. -'

      '. -($user_id != '' ? '' : ' '). -($user_id != '' ? form::hidden('id',$user_id) : ''). -$core->formNonce(). -'

      '. - -'
      '; - -if ($user_id) -{ - echo '

      '.__('Permissions').'

      '; - - $permissions = $core->getUserPermissions($user_id); - $perm_types = $core->auth->getPermissionsTypes(); - - if (count($permissions) == 0) - { - echo '

      '.__('No permissions.').'

      '; - } - else - { - foreach ($permissions as $k => $v) - { - if (count($v['p']) > 0) - { - echo '

      '. - html::escapeHTML($v['name']).' ('.html::escapeHTML($k).') - '. - '' - .__('Change permissions').'

      '; - - echo '
        '; - foreach ($v['p'] as $p => $V) { - if (isset($perm_types[$p])) { - echo '
      • '.__($perm_types[$p]).'
      • '; - } - } - echo '
      '; - } - } - } - - echo - '

      '. - __('Add new permissions').'

      '. - '
      '; -} - -dcPage::helpBlock('core_user'); -dcPage::close(); -?> \ No newline at end of file diff --git a/v2/dotclear/admin/users.php b/v2/dotclear/admin/users.php deleted file mode 100644 index 2f61820..0000000 --- a/v2/dotclear/admin/users.php +++ /dev/null @@ -1,174 +0,0 @@ -callBehavior('adminBeforeUserDelete',$u); - if ($u != $core->auth->userID()) { - $core->delUser($u); - } - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } - } - if (!$core->error->flag()) { - http::redirect('users.php?del=1'); - } -} - - -# Creating filter combo boxes -$sortby_combo = array( -__('Username') => 'U.user_id', -__('Last Name') => 'user_name', -__('First Name') => 'user_firstname', -__('Display name') => 'user_displayname', -__('Number of entries') => 'nb_post' -); - -$order_combo = array( -__('Descending') => 'desc', -__('Ascending') => 'asc' -); - -# Actions combo box -$combo_action = array( - __('Set permissions') => 'setpermissions', - __('Delete') => 'deleteuser' -); - -# --BEHAVIOR-- adminUsersActionsCombo -$core->callBehavior('adminUsersActionsCombo',array(&$combo_action)); - - -# Get users -$page = !empty($_GET['page']) ? $_GET['page'] : 1; -$nb_per_page = 30; - -if (!empty($_GET['nb']) && (integer) $_GET['nb'] > 0) { - $nb_per_page = $_GET['nb']; -} - -$q = !empty($_GET['q']) ? $_GET['q'] : ''; -$sortby = !empty($_GET['sortby']) ? $_GET['sortby'] : 'user_id'; -$order = !empty($_GET['order']) ? $_GET['order'] : 'asc'; - -$params['limit'] = array((($page-1)*$nb_per_page),$nb_per_page); - -$show_filters = false; - -# - Search filter -if ($q) { - $params['q'] = $q; - $show_filters = true; -} - -# - Sortby and order filter -if ($sortby !== '' && in_array($sortby,$sortby_combo)) { - if ($order !== '' && in_array($order,$order_combo)) { - $params['order'] = $sortby.' '.$order; - $show_filters = true; - } -} - -try { - $rs = $core->getUsers($params); - $counter = $core->getUsers($params,1); - $user_list = new adminUserList($core,$rs,$counter->f(0)); -} catch (Exception $e) { - $core->error->add($e->getMessage()); -} - - -/* DISPLAY --------------------------------------------------------- */ -$starting_script = dcPage::jsLoad('js/_users.js'); -if (!$show_filters) { - $starting_script .= dcPage::jsLoad('js/filter-controls.js'); -} - -dcPage::open(__('users'),$starting_script); - -if (!$core->error->flag()) -{ - if (!empty($_GET['del'])) { - echo '

      '.__('User has been successfully removed.').'

      '; - } - - echo - '

      '.__('Users').'

      '. - '

      '.__('Create a new user').'

      '; - - if (!$show_filters) { - echo '

      '.__('Filters').'

      '; - } - - echo - '
      '. - '
      '.__('Filters').''. - - '
      '. - '

      '. - '

      '. - '
      '. - - '
      '. - '

      '. - '

      '. - '

      '. - '
      '. - - '
      '. //Opera sucks - '
      '. - '
      '; - - # Show users - $user_list->display($page,$nb_per_page, - '
      '. - - '%s'. - - '
      '. - '

      '. - - '

      '. - ''. - '

      '. - '
      '. - '
      ' - ); -} - -dcPage::close(); -?> \ No newline at end of file diff --git a/v2/dotclear/admin/xmlrpc.php b/v2/dotclear/admin/xmlrpc.php deleted file mode 100644 index 75195f3..0000000 --- a/v2/dotclear/admin/xmlrpc.php +++ /dev/null @@ -1,35 +0,0 @@ -plugins->loadModules(DC_PLUGINS_ROOT); - -# Start XML-RPC server -$server = new dcXmlRpc($core,$blog_id); -$server->serve(); -?> \ No newline at end of file diff --git a/v2/dotclear/cache/.htaccess b/v2/dotclear/cache/.htaccess deleted file mode 100644 index 14249c5..0000000 --- a/v2/dotclear/cache/.htaccess +++ /dev/null @@ -1 +0,0 @@ -Deny from all \ No newline at end of file diff --git a/v2/dotclear/db/.htaccess b/v2/dotclear/db/.htaccess deleted file mode 100644 index 14249c5..0000000 --- a/v2/dotclear/db/.htaccess +++ /dev/null @@ -1 +0,0 @@ -Deny from all \ No newline at end of file diff --git a/v2/dotclear/inc/.htaccess b/v2/dotclear/inc/.htaccess deleted file mode 100644 index 14249c5..0000000 --- a/v2/dotclear/inc/.htaccess +++ /dev/null @@ -1 +0,0 @@ -Deny from all \ No newline at end of file diff --git a/v2/dotclear/inc/admin/class.dc.menu.php b/v2/dotclear/inc/admin/class.dc.menu.php deleted file mode 100644 index 9a016dd..0000000 --- a/v2/dotclear/inc/admin/class.dc.menu.php +++ /dev/null @@ -1,88 +0,0 @@ -id = $id; - $this->title = $title; - $this->itemSpace = $itemSpace; - $this->items = array(); - } - - public function addItem($title,$url,$img,$active,$show=true,$id=null,$class=null) - { - if($show) { - $this->items[] = $this->itemDef($title,$url,$img,$active,$id,$class); - } - } - - public function prependItem($title,$url,$img,$active,$show=true,$id=null,$class=null) - { - if ($show) { - array_unshift($this->items,$this->itemDef($title,$url,$img,$active,$id,$class)); - } - } - - public function draw() - { - if (count($this->items) == 0) { - return ''; - } - - $res = - '
      '. - ($this->title ? '

      '.$this->title.'

      ' : ''). - '
        '."\n"; - - for ($i=0; $iitems); $i++) - { - if ($i+1 < count($this->items) && $this->itemSpace != '') { - $res .= preg_replace('|$|',$this->itemSpace.'',$this->items[$i]); - $res .= "\n"; - } else { - $res .= $this->items[$i]."\n"; - } - } - - $res .= '
      '."\n"; - - return $res; - } - - protected function itemDef($title,$url,$img,$active,$id=null,$class=null) - { - if (is_array($url)) { - $link = $url[0]; - $ahtml = (!empty($url[1])) ? ' '.$url[1] : ''; - } else { - $link = $url; - $ahtml = ''; - } - - $img = dc_admin_icon_url($img); - - return - ''. - - ''.$title.''."\n"; - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/admin/lib.dc.page.php b/v2/dotclear/inc/admin/lib.dc.page.php deleted file mode 100644 index a3b013a..0000000 --- a/v2/dotclear/inc/admin/lib.dc.page.php +++ /dev/null @@ -1,709 +0,0 @@ -blog && $core->auth->check($permissions,$core->blog->id)) - { - return; - } - - if (session_id()) { - $core->session->destroy(); - } - http::redirect(DC_AUTH_PAGE); - } - - # Check super admin - public static function checkSuper() - { - global $core; - - if (!$core->auth->isSuperAdmin()) - { - if (session_id()) { - $core->session->destroy(); - } - http::redirect(DC_AUTH_PAGE); - } - } - - # Top of admin page - public static function open($title='', $head='') - { - global $core; - - # List of user's blogs - if ($core->auth->blog_count == 1 || $core->auth->blog_count > 20) - { - $blog_box = - __('Blog:').' '. - html::escapeHTML($core->blog->name).''; - - if ($core->auth->blog_count > 20) { - $blog_box .= ' - '.__('Change blog').''; - } - } - else - { - $rs_blogs = $core->getBlogs(array('order'=>'LOWER(blog_name)','limit'=>20)); - $blogs = array(); - while ($rs_blogs->fetch()) { - $blogs[html::escapeHTML($rs_blogs->blog_name.' - '.$rs_blogs->blog_url)] = $rs_blogs->blog_id; - } - $blog_box = - ''. - ''; - } - - $safe_mode = isset($_SESSION['sess_safe_mode']) && $_SESSION['sess_safe_mode']; - - # Display - header('Content-Type: text/html; charset=UTF-8'); - echo - ''."\n". - ''."\n". - "\n". - ' '."\n". - ' '.$title.' - '.html::escapeHTML($core->blog->name).' - '.html::escapeHTML(DC_VENDOR_NAME).' - '.DC_VERSION.''."\n". - - ' '."\n". - ' '."\n". - - self::jsLoadIE7(). - ' '."\n"; - if (l10n::getTextDirection($GLOBALS['_lang']) == 'rtl') { - echo - ' '."\n"; - } - - $core->auth->user_prefs->addWorkspace('interface'); - $user_ui_hide_std_favicon = $core->auth->user_prefs->interface->hide_std_favicon; - if (!$user_ui_hide_std_favicon) { - echo ''; - } - - echo - self::jsCommon(). - $head; - - # --BEHAVIOR-- adminPageHTMLHead - $core->callBehavior('adminPageHTMLHead'); - - echo - "\n". - ''."\n". - - ''; - - echo - '
      '."\n". - '
      '."\n". - '
      '."\n"; - - # Safe mode - if ($safe_mode) - { - echo - '

      '.__('Safe mode').'

      '. - '

      '.__('You are in safe mode. All plugins have been temporarily disabled. Remind to log out then log in again normally to get back all functionalities').'

      '. - '
      '; - } - - if ($core->error->flag()) { - echo - '
      '.__('Errors:').''. - $core->error->toHTML(). - '
      '; - } - } - - public static function close() - { - $menu =& $GLOBALS['_menu']; - - echo - "
      \n". // End of #content - "
      \n". // End of #main - - ''."\n". // End of #main-menu - ''."\n". - "
      \n"; // End of #wrapper - - if (defined('DC_DEV') && DC_DEV === true) { - echo self::debugInfo(); - } - - echo - ''; - } - - public static function openPopup($title='', $head='') - { - global $core; - - # Display - header('Content-Type: text/html; charset=UTF-8'); - echo - ''."\n". - ''."\n". - "\n". - ' '."\n". - ' '.$title.' - '.html::escapeHTML($core->blog->name).' - '.html::escapeHTML(DC_VENDOR_NAME).' - '.DC_VERSION.''."\n". - - ' '."\n". - ' '."\n". - - self::jsLoadIE7(). - ' '."\n"; - if (l10n::getTextDirection($GLOBALS['_lang']) == 'rtl') { - echo - ' '."\n"; - } - - echo - self::jsCommon(). - $head; - - # --BEHAVIOR-- adminPageHTMLHead - $core->callBehavior('adminPageHTMLHead'); - - echo - "\n". - ''."\n". - - '

      '.DC_VENDOR_NAME.'

      '."\n"; - - echo - '
      '."\n". - '
      '."\n". - '
      '."\n"; - - if ($core->error->flag()) { - echo - '
      '.__('Errors:').''. - $core->error->toHTML(). - '
      '; - } - } - - public static function closePopup() - { - echo - "
      \n". // End of #content - "
      \n". // End of #main - ''."\n". - "
      \n". // End of #wrapper - ''; - } - - private static function debugInfo() - { - $global_vars = implode(', ',array_keys($GLOBALS)); - - $res = - '
      '. - '

      memory usage: '.memory_get_usage().' ('.files::size(memory_get_usage()).')

      '; - - if (function_exists('xdebug_get_profiler_filename')) - { - $res .= '

      Elapsed time: '.xdebug_time_index().' seconds

      '; - - $prof_file = xdebug_get_profiler_filename(); - if ($prof_file) { - $res .= '

      Profiler file : '.xdebug_get_profiler_filename().'

      '; - } else { - $prof_url = http::getSelfURI(); - $prof_url .= (strpos($prof_url,'?') === false) ? '?' : '&'; - $prof_url .= 'XDEBUG_PROFILE'; - $res .= '

      Trigger profiler

      '; - } - - /* xdebug configuration: - zend_extension = /.../xdebug.so - xdebug.auto_trace = On - xdebug.trace_format = 0 - xdebug.trace_options = 1 - xdebug.show_mem_delta = On - xdebug.profiler_enable = 0 - xdebug.profiler_enable_trigger = 1 - xdebug.profiler_output_dir = /tmp - xdebug.profiler_append = 0 - xdebug.profiler_output_name = timestamp - */ - } - - $res .= - '

      Global vars: '.$global_vars.'

      '. - '
      '; - - return $res; - } - - public static function help($page,$index='') - { - # Deprecated but we keep this for plugins. - } - - public static function helpBlock() - { - $args = func_get_args(); - if (empty($args)) { - return; - }; - - global $__resources; - if (empty($__resources['help'])) { - return; - } - - $content = ''; - foreach ($args as $v) - { - if (is_object($v) && isset($v->content)) { - $content .= $v->content; - continue; - } - - if (!isset($__resources['help'][$v])) { - continue; - } - $f = $__resources['help'][$v]; - if (!file_exists($f) || !is_readable($f)) { - continue; - } - - $fc = file_get_contents($f); - if (preg_match('|]*?>(.*?)|ms',$fc,$matches)) { - $content .= $matches[1]; - } else { - $content .= $fc; - } - } - - if (trim($content) == '') { - return; - } - - echo - '

      '.__('Help').'

      '. - $content. - '
      '; - } - - public static function jsLoad($src) - { - $escaped_src = html::escapeHTML($src); - if (!isset(self::$loaded_js[$escaped_src])) { - self::$loaded_js[$escaped_src]=true; - return ''."\n"; - } - } - - public static function jsVar($n,$v) - { - return $n." = '".html::escapeJS($v)."';\n"; - } - - public static function jsCommon() - { - return - self::jsLoad('js/jquery/jquery.js'). - self::jsLoad('js/jquery/jquery.biscuit.js'). - self::jsLoad('js/jquery/jquery.bgFade.js'). - self::jsLoad('js/common.js'). - self::jsLoad('js/prelude.js'). - - '\n"; - } - - public static function jsLoadIE7() - { - return - ''."\n"; - } - - public static function jsConfirmClose() - { - $args = func_get_args(); - if (count($args) > 0) { - foreach ($args as $k => $v) { - $args[$k] = "'".html::escapeJS($v)."'"; - } - $args = implode(',',$args); - } else { - $args = ''; - } - - return - self::jsLoad('js/confirm-close.js'). - '\n"; - } - - public static function jsPageTabs($default=null) - { - if ($default) { - $default = "'".html::escapeJS($default)."'"; - } - - return - self::jsLoad('js/jquery/jquery.pageTabs.js'). - '\n"; - } - - public static function jsModal() - { - return - ''."\n". - self::jsLoad('js/jquery/jquery.modal.js'). - '\n"; - } - - public static function jsColorPicker() - { - return - ''."\n". - self::jsLoad('js/jquery/jquery.farbtastic.js'). - self::jsLoad('js/color-picker.js'); - } - - public static function jsDatePicker() - { - return - ''."\n". - self::jsLoad('js/date-picker.js'). - '\n"; - } - - public static function jsToolBar() - { - $res = - ''. - ''; - - if (isset($GLOBALS['core']->auth) && $GLOBALS['core']->auth->getOption('enable_wysiwyg')) { - $res .= ''; - } - - $res .= - ''. - '\n"; - - return $res; - } - - public static function jsCandyUpload($params=array(),$base_url=null) - { - if (!$base_url) { - $base_url = path::clean(dirname(preg_replace('/(\?.*$)?/','',$_SERVER['REQUEST_URI']))).'/'; - } - - $params = array_merge($params,array( - 'sess_id='.session_id(), - 'sess_uid='.$_SESSION['sess_browser_uid'], - 'xd_check='.$GLOBALS['core']->getNonce() - )); - - return - ''."\n". - self::jsLoad('js/jquery/jquery.candyUpload.js'). - - '\n"; - } - - public static function jsToolMan() - { - return - ''. - ''. - ''. - ''. - ''. - ''. - ''; - } - - public static function jsMetaEditor() - { - return - ''; - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/admin/lib.pager.php b/v2/dotclear/inc/admin/lib.pager.php deleted file mode 100644 index 488e091..0000000 --- a/v2/dotclear/inc/admin/lib.pager.php +++ /dev/null @@ -1,420 +0,0 @@ -core =& $core; - $this->rs =& $rs; - $this->rs_count = $rs_count; - $this->html_prev = __('«prev.'); - $this->html_next = __('next»'); - } -} - -class adminPostList extends adminGenericList -{ - public function display($page,$nb_per_page,$enclose_block='') - { - if ($this->rs->isEmpty()) - { - echo '

      '.__('No entry').'

      '; - } - else - { - $pager = new pager($page,$this->rs_count,$nb_per_page,10); - $pager->html_prev = $this->html_prev; - $pager->html_next = $this->html_next; - $pager->var_page = 'page'; - - $html_block = - ''. - ''. - ''. - ''. - ''. - ''. - ''. - ''. - '%s
      '.__('Title').''.__('Date').''.__('Category').''.__('Author').''.__('Comments').''.__('Trackbacks').''.__('Status').'
      '; - - if ($enclose_block) { - $html_block = sprintf($enclose_block,$html_block); - } - - echo '

      '.__('Page(s)').' : '.$pager->getLinks().'

      '; - - $blocks = explode('%s',$html_block); - - echo $blocks[0]; - - while ($this->rs->fetch()) - { - echo $this->postLine(); - } - - echo $blocks[1]; - - echo '

      '.__('Page(s)').' : '.$pager->getLinks().'

      '; - } - } - - private function postLine() - { - if ($this->core->auth->check('categories',$this->core->blog->id)) { - $cat_link = '%s'; - } else { - $cat_link = '%2$s'; - } - - if ($this->rs->cat_title) { - $cat_title = sprintf($cat_link,$this->rs->cat_id, - html::escapeHTML($this->rs->cat_title)); - } else { - $cat_title = __('None'); - } - - $img = '%1$s'; - switch ($this->rs->post_status) { - case 1: - $img_status = sprintf($img,__('published'),'check-on.png'); - break; - case 0: - $img_status = sprintf($img,__('unpublished'),'check-off.png'); - break; - case -1: - $img_status = sprintf($img,__('scheduled'),'scheduled.png'); - break; - case -2: - $img_status = sprintf($img,__('pending'),'check-wrn.png'); - break; - } - - $protected = ''; - if ($this->rs->post_password) { - $protected = sprintf($img,__('protected'),'locker.png'); - } - - $selected = ''; - if ($this->rs->post_selected) { - $selected = sprintf($img,__('selected'),'selected.png'); - } - - $attach = ''; - $nb_media = $this->rs->countMedia(); - if ($nb_media > 0) { - $attach_str = $nb_media == 1 ? __('%d attachment') : __('%d attachments'); - $attach = sprintf($img,sprintf($attach_str,$nb_media),'attach.png'); - } - - $res = ''; - - $res .= - ''. - form::checkbox(array('entries[]'),$this->rs->post_id,'','','',!$this->rs->isEditable()).''. - ''. - html::escapeHTML($this->rs->post_title).''. - ''.dt::dt2str(__('%Y-%m-%d %H:%M'),$this->rs->post_dt).''. - ''.$cat_title.''. - ''.$this->rs->user_id.''. - ''.$this->rs->nb_comment.''. - ''.$this->rs->nb_trackback.''. - ''.$img_status.' '.$selected.' '.$protected.' '.$attach.''. - ''; - - return $res; - } -} - -class adminPostMiniList extends adminGenericList -{ - public function display($page,$nb_per_page,$enclose_block='') - { - if ($this->rs->isEmpty()) - { - echo '

      '.__('No entry').'

      '; - } - else - { - $pager = new pager($page,$this->rs_count,$nb_per_page,10); - $pager->html_prev = $this->html_prev; - $pager->html_next = $this->html_next; - $pager->var_page = 'page'; - - $html_block = - ''. - ''. - ''. - ''. - ''. - '%s
      '.__('Title').''.__('Date').''.__('Author').''.__('Status').'
      '; - - if ($enclose_block) { - $html_block = sprintf($enclose_block,$html_block); - } - - echo '

      '.__('Page(s)').' : '.$pager->getLinks().'

      '; - - $blocks = explode('%s',$html_block); - - echo $blocks[0]; - - while ($this->rs->fetch()) - { - echo $this->postLine(); - } - - echo $blocks[1]; - - echo '

      '.__('Page(s)').' : '.$pager->getLinks().'

      '; - } - } - - private function postLine() - { - $img = '%1$s'; - switch ($this->rs->post_status) { - case 1: - $img_status = sprintf($img,__('published'),'check-on.png'); - break; - case 0: - $img_status = sprintf($img,__('unpublished'),'check-off.png'); - break; - case -1: - $img_status = sprintf($img,__('scheduled'),'scheduled.png'); - break; - case -2: - $img_status = sprintf($img,__('pending'),'check-wrn.png'); - break; - } - - $protected = ''; - if ($this->rs->post_password) { - $protected = sprintf($img,__('protected'),'locker.png'); - } - - $selected = ''; - if ($this->rs->post_selected) { - $selected = sprintf($img,__('selected'),'selected.png'); - } - - $attach = ''; - $nb_media = $this->rs->countMedia(); - if ($nb_media > 0) { - $attach_str = $nb_media == 1 ? __('%d attachment') : __('%d attachments'); - $attach = sprintf($img,sprintf($attach_str,$nb_media),'attach.png'); - } - - $res = ''; - - $res .= - ''. - html::escapeHTML($this->rs->post_title).''. - ''.dt::dt2str(__('%Y-%m-%d %H:%M'),$this->rs->post_dt).''. - ''.$this->rs->user_id.''. - ''.$img_status.' '.$selected.' '.$protected.' '.$attach.''. - ''; - - return $res; - } -} - -class adminCommentList extends adminGenericList -{ - public function display($page,$nb_per_page,$enclose_block='') - { - if ($this->rs->isEmpty()) - { - echo '

      '.__('No comment').'

      '; - } - else - { - $pager = new pager($page,$this->rs_count,$nb_per_page,10); - $pager->html_prev = $this->html_prev; - $pager->html_next = $this->html_next; - $pager->var_page = 'page'; - - $html_block = - ''. - ''. - ''. - ''. - ''. - ''. - ''. - '%s
      '.__('Title').''.__('Date').''.__('Author').''.__('Type').''.__('Status').' 
      '; - - if ($enclose_block) { - $html_block = sprintf($enclose_block,$html_block); - } - - echo '

      '.__('Page(s)').' : '.$pager->getLinks().'

      '; - - $blocks = explode('%s',$html_block); - - echo $blocks[0]; - - while ($this->rs->fetch()) - { - echo $this->commentLine(); - } - - echo $blocks[1]; - - echo '

      '.__('Page(s)').' : '.$pager->getLinks().'

      '; - } - } - - private function commentLine() - { - global $author, $status, $sortby, $order, $nb_per_page; - - $author_url = - 'comments.php?n='.$nb_per_page. - '&status='.$status. - '&sortby='.$sortby. - '&order='.$order. - '&author='.rawurlencode($this->rs->comment_author); - - $post_url = $this->core->getPostAdminURL($this->rs->post_type,$this->rs->post_id); - - $comment_url = 'comment.php?id='.$this->rs->comment_id; - - $comment_dt = - dt::dt2str($this->core->blog->settings->system->date_format.' - '. - $this->core->blog->settings->system->time_format,$this->rs->comment_dt); - - $img = '%1$s'; - switch ($this->rs->comment_status) { - case 1: - $img_status = sprintf($img,__('published'),'check-on.png'); - break; - case 0: - $img_status = sprintf($img,__('unpublished'),'check-off.png'); - break; - case -1: - $img_status = sprintf($img,__('pending'),'check-wrn.png'); - break; - case -2: - $img_status = sprintf($img,__('junk'),'junk.png'); - break; - } - - $comment_author = html::escapeHTML($this->rs->comment_author); - if (mb_strlen($comment_author) > 20) { - $comment_author = mb_strcut($comment_author,0,17).'...'; - } - - $res = ''; - - $res .= - ''. - form::checkbox(array('comments[]'),$this->rs->comment_id,'','','',0).''. - ''. - html::escapeHTML($this->rs->post_title).''. - ($this->rs->post_type != 'post' ? ' ('.html::escapeHTML($this->rs->post_type).')' : '').''. - ''.dt::dt2str(__('%Y-%m-%d %H:%M'),$this->rs->comment_dt).''. - ''.$comment_author.''. - ''.($this->rs->comment_trackback ? __('trackback') : __('comment')).''. - ''.$img_status.''. - ''. - ''; - - $res .= ''; - - return $res; - } -} - -class adminUserList extends adminGenericList -{ - public function display($page,$nb_per_page,$enclose_block='') - { - if ($this->rs->isEmpty()) - { - echo '

      '.__('No user').'

      '; - } - else - { - $pager = new pager($page,$this->rs_count,$nb_per_page,10); - $pager->html_prev = $this->html_prev; - $pager->html_next = $this->html_next; - $pager->var_page = 'page'; - - $html_block = - ''. - ''. - ''. - ''. - ''. - ''. - '%s
      '.__('Username').''.__('First Name').''.__('Last Name').''.__('Display name').''.__('Entries').'
      '; - - if ($enclose_block) { - $html_block = sprintf($enclose_block,$html_block); - } - - echo '

      '.__('Page(s)').' : '.$pager->getLinks().'

      '; - - $blocks = explode('%s',$html_block); - - echo $blocks[0]; - - while ($this->rs->fetch()) - { - echo $this->userLine(); - } - - echo $blocks[1]; - - echo '

      '.__('Page(s)').' : '.$pager->getLinks().'

      '; - } - } - - private function userLine() - { - $img = '%1$s'; - $img_status = ''; - - $p = $this->core->getUserPermissions($this->rs->user_id); - - if (isset($p[$this->core->blog->id]['p']['admin'])) { - $img_status = sprintf($img,__('admin'),'admin.png'); - } - if ($this->rs->user_super) { - $img_status = sprintf($img,__('superadmin'),'superadmin.png'); - } - return - ''. - ''.form::hidden(array('nb_post[]'),(integer) $this->rs->nb_post). - form::checkbox(array('user_id[]'),$this->rs->user_id).''. - ''. - $this->rs->user_id.' '.$img_status.''. - ''.$this->rs->user_firstname.''. - ''.$this->rs->user_name.''. - ''.$this->rs->user_displayname.''. - ''. - $this->rs->nb_post.''. - ''; - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/admin/prepend.php b/v2/dotclear/inc/admin/prepend.php deleted file mode 100644 index b1413c5..0000000 --- a/v2/dotclear/inc/admin/prepend.php +++ /dev/null @@ -1,376 +0,0 @@ -plugins->moduleExists($matches[1])) { - return false; - } - } - } - return true; -} - -function dc_prepare_url($url) { - - $u = str_replace(array('?','&'),array('\?','&'),$url); - return (!strpos($u,'\?') ? - '/'.$u.'$/' : - (!strpos($u,'&') ? - '/'.$u.'(\?.*)?$/' : - '/'.$u.'(&.*)?$/')); -} - -function dc_load_locales() { - global $_lang, $core; - - $_lang = $core->auth->getInfo('user_lang'); - $_lang = preg_match('/^[a-z]{2}(-[a-z]{2})?$/',$_lang) ? $_lang : 'en'; - - if (l10n::set(dirname(__FILE__).'/../../locales/'.$_lang.'/date') === false && $_lang != 'en') { - l10n::set(dirname(__FILE__).'/../../locales/en/date'); - } - l10n::set(dirname(__FILE__).'/../../locales/'.$_lang.'/main'); - l10n::set(dirname(__FILE__).'/../../locales/'.$_lang.'/plugins'); -} - -function dc_admin_icon_url($img) -{ - global $core; - - $core->auth->user_prefs->addWorkspace('interface'); - $user_ui_iconset = @$core->auth->user_prefs->interface->iconset; - if (($user_ui_iconset) && ($img)) { - $icon = false; - if ((preg_match('/^images\/menu\/(.+)$/',$img,$m)) || - (preg_match('/^index\.php\?pf=(.+)$/',$img,$m))) { - if ($m[1]) { - $icon = path::real(dirname(__FILE__).'/../../admin/images/iconset/'.$user_ui_iconset.'/'.$m[1],false); - if ($icon !== false) { - $allow_types = array('png','jpg','jpeg','gif'); - if (is_file($icon) && is_readable($icon) && in_array(files::getExtension($icon),$allow_types)) { - return DC_ADMIN_URL.'images/iconset/'.$user_ui_iconset.'/'.$m[1]; - } - } - } - } - } - return $img; -} - -if (defined('DC_AUTH_SESS_ID') && defined('DC_AUTH_SESS_UID')) -{ - # We have session information in constants - $_COOKIE[DC_SESSION_NAME] = DC_AUTH_SESS_ID; - - if (!$core->auth->checkSession(DC_AUTH_SESS_UID)) { - throw new Exception('Invalid session data.'); - } - - # Check nonce from POST requests - if (!empty($_POST)) - { - if (empty($_POST['xd_check']) || !$core->checkNonce($_POST['xd_check'])) { - throw new Exception('Precondition Failed.'); - } - } - - if (empty($_SESSION['sess_blog_id'])) { - throw new Exception('Permission denied.'); - } - - # Loading locales - dc_load_locales(); - - $core->setBlog($_SESSION['sess_blog_id']); - if (!$core->blog->id) { - throw new Exception('Permission denied.'); - } -} -elseif ($core->auth->sessionExists()) -{ - # If we have a session we launch it now - try { - if (!$core->auth->checkSession()) - { - # Avoid loop caused by old cookie - $p = $core->session->getCookieParameters(false,-600); - $p[3] = '/'; - call_user_func_array('setcookie',$p); - - http::redirect('auth.php'); - } - } catch (Exception $e) { - __error(__('Database error') - ,__('There seems to be no Session table in your database. Is Dotclear completly installed?') - ,20); - } - - # Check nonce from POST requests - if (!empty($_POST)) - { - if (empty($_POST['xd_check']) || !$core->checkNonce($_POST['xd_check'])) { - http::head(412); - header('Content-Type: text/plain'); - echo 'Precondition Failed'; - exit; - } - } - - - if (!empty($_REQUEST['switchblog']) - && $core->auth->getPermissions($_REQUEST['switchblog']) !== false) - { - $_SESSION['sess_blog_id'] = $_REQUEST['switchblog']; - if (isset($_SESSION['media_manager_dir'])) { - unset($_SESSION['media_manager_dir']); - } - if (isset($_SESSION['media_manager_page'])) { - unset($_SESSION['media_manager_page']); - } - - # Removing switchblog from URL - $redir = $_SERVER['REQUEST_URI']; - $redir = preg_replace('/switchblog=(.*?)(&|$)/','',$redir); - $redir = preg_replace('/\?$/','',$redir); - http::redirect($redir); - exit; - } - - # Check blog to use and log out if no result - if (isset($_SESSION['sess_blog_id'])) - { - if ($core->auth->getPermissions($_SESSION['sess_blog_id']) === false) { - unset($_SESSION['sess_blog_id']); - } - } - else - { - if (($b = $core->auth->findUserBlog($core->auth->getInfo('user_default_blog'))) !== false) { - $_SESSION['sess_blog_id'] = $b; - unset($b); - } - } - - # Loading locales - dc_load_locales(); - - if (isset($_SESSION['sess_blog_id'])) { - $core->setBlog($_SESSION['sess_blog_id']); - } else { - $core->session->destroy(); - http::redirect('auth.php'); - } - -/* - # Check add to my fav fired - if (!empty($_REQUEST['add-favorite'])) { - $redir = $_SERVER['REQUEST_URI']; - # Extract admin page from URI - # TO BE COMPLETED - } -*/ -} - -if ($core->auth->userID() && $core->blog !== null) -{ - # Loading resources and help files - $locales_root = dirname(__FILE__).'/../../locales/'; - require $locales_root.'/en/resources.php'; - if (($f = l10n::getFilePath($locales_root,'resources.php',$_lang))) { - require $f; - } - unset($f); - - if (($hfiles = @scandir($locales_root.$_lang.'/help')) !== false) - { - foreach ($hfiles as $hfile) { - if (preg_match('/^(.*)\.html$/',$hfile,$m)) { - $GLOBALS['__resources']['help'][$m[1]] = $locales_root.$_lang.'/help/'.$hfile; - } - } - } - unset($hfiles,$locales_root); - - $core->auth->user_prefs->addWorkspace('interface'); - $user_ui_nofavmenu = $core->auth->user_prefs->interface->nofavmenu; - - # Standard favorites - $_fav = new ArrayObject(); - - # [] : Title, URL, small icon, large icon, permissions, id, class - # NB : '*' in permissions means any, null means super admin only - - $_fav['prefs'] = new ArrayObject(array('prefs','My preferences','preferences.php', - 'images/menu/user-pref.png','images/menu/user-pref-b.png', - '*',null,null)); - - $_fav['new_post'] = new ArrayObject(array('new_post','New entry','post.php', - 'images/menu/edit.png','images/menu/edit-b.png', - 'usage,contentadmin',null,'menu-new-post')); - $_fav['posts'] = new ArrayObject(array('posts','Entries','posts.php', - 'images/menu/entries.png','images/menu/entries-b.png', - 'usage,contentadmin',null,null)); - $_fav['comments'] = new ArrayObject(array('comments','Comments','comments.php', - 'images/menu/comments.png','images/menu/comments-b.png', - 'usage,contentadmin',null,null)); - $_fav['search'] = new ArrayObject(array('search','Search','search.php', - 'images/menu/search.png','images/menu/search-b.png', - 'usage,contentadmin',null,null)); - $_fav['categories'] = new ArrayObject(array('categories','Categories','categories.php', - 'images/menu/categories.png','images/menu/categories-b.png', - 'categories',null,null)); - $_fav['media'] = new ArrayObject(array('media','Media manager','media.php', - 'images/menu/media.png','images/menu/media-b.png', - 'media,media_admin',null,null)); - $_fav['blog_pref'] = new ArrayObject(array('blog_pref','Blog settings','blog_pref.php', - 'images/menu/blog-pref.png','images/menu/blog-pref-b.png', - 'admin',null,null)); - $_fav['blog_theme'] = new ArrayObject(array('blog_theme','Blog appearance','blog_theme.php', - 'images/menu/themes.png','images/menu/blog-theme-b.png', - 'admin',null,null)); - - $_fav['blogs'] = new ArrayObject(array('blogs','Blogs','blogs.php', - 'images/menu/blogs.png','images/menu/blogs-b.png', - 'usage,contentadmin',null,null)); - $_fav['users'] = new ArrayObject(array('users','Users','users.php', - 'images/menu/users.png','images/menu/users-b.png', - null,null,null)); - $_fav['plugins'] = new ArrayObject(array('plugins','Plugins','plugins.php', - 'images/menu/plugins.png','images/menu/plugins-b.png', - null,null,null)); - $_fav['langs'] = new ArrayObject(array('langs','Languages','langs.php', - 'images/menu/langs.png','images/menu/langs-b.png', - null,null,null)); - - # Menus creation - $_menu['Dashboard'] = new dcMenu('dashboard-menu',null); - if (!$user_ui_nofavmenu) - $_menu['Favorites'] = new dcMenu('favorites-menu','My favorites'); - $_menu['Blog'] = new dcMenu('blog-menu','Blog'); - $_menu['System'] = new dcMenu('system-menu','System'); - $_menu['Plugins'] = new dcMenu('plugins-menu','Plugins'); - - # Loading plugins - $core->plugins->loadModules(DC_PLUGINS_ROOT,'admin',$_lang); - - # Loading favorites info from plugins - $core->callBehavior('adminDashboardFavs', $core, $_fav); - - # Set menu titles - - $_menu['System']->title = __('System'); - $_menu['Blog']->title = __('Blog'); - $_menu['Plugins']->title = __('Plugins'); - if (!$user_ui_nofavmenu) - $_menu['Favorites']->title = __('My favorites'); - -/* - if (!preg_match('/index.php$/',$_SERVER['REQUEST_URI'])) { - # Admin index can't be add in fav's - $_menu['Dashboard']->prependItem(__('Add this page to my favorites'),'#','images/menu/add_to_favorites.png', - false,$core->auth->check('usage,contentadmin',$core->blog->id),'fav-add'); - } -*/ - $_menu['Blog']->prependItem(__('Blog appearance'),'blog_theme.php','images/menu/themes.png', - preg_match('/blog_theme.php(\?.*)?$/',$_SERVER['REQUEST_URI']), - $core->auth->check('admin',$core->blog->id)); - $_menu['Blog']->prependItem(__('Blog settings'),'blog_pref.php','images/menu/blog-pref.png', - preg_match('/blog_pref.php(\?.*)?$/',$_SERVER['REQUEST_URI']), - $core->auth->check('admin',$core->blog->id)); - $_menu['Blog']->prependItem(__('Media manager'),'media.php','images/menu/media.png', - preg_match('/media(_item)?.php(\?.*)?$/',$_SERVER['REQUEST_URI']), - $core->auth->check('media,media_admin',$core->blog->id)); - $_menu['Blog']->prependItem(__('Categories'),'categories.php','images/menu/categories.png', - preg_match('/categories.php(\?.*)?$/',$_SERVER['REQUEST_URI']), - $core->auth->check('categories',$core->blog->id)); - $_menu['Blog']->prependItem(__('Search'),'search.php','images/menu/search.png', - preg_match('/search.php(\?.*)?$/',$_SERVER['REQUEST_URI']), - $core->auth->check('usage,contentadmin',$core->blog->id)); - $_menu['Blog']->prependItem(__('Comments'),'comments.php','images/menu/comments.png', - preg_match('/comments.php(\?.*)?$/',$_SERVER['REQUEST_URI']), - $core->auth->check('usage,contentadmin',$core->blog->id)); - $_menu['Blog']->prependItem(__('Entries'),'posts.php','images/menu/entries.png', - preg_match('/posts.php(\?.*)?$/',$_SERVER['REQUEST_URI']), - $core->auth->check('usage,contentadmin',$core->blog->id)); - $_menu['Blog']->prependItem(__('New entry'),'post.php','images/menu/edit.png', - preg_match('/post.php$/',$_SERVER['REQUEST_URI']), - $core->auth->check('usage,contentadmin',$core->blog->id),'menu-new-post'); - - $_menu['System']->prependItem(__('Updates'),'update.php','images/menu/update.png', - preg_match('/update.php(\?.*)?$/',$_SERVER['REQUEST_URI']), - $core->auth->isSuperAdmin() && is_readable(DC_DIGESTS)); - $_menu['System']->prependItem(__('Languages'),'langs.php','images/menu/langs.png', - preg_match('/langs.php(\?.*)?$/',$_SERVER['REQUEST_URI']), - $core->auth->isSuperAdmin()); - $_menu['System']->prependItem(__('Plugins'),'plugins.php','images/menu/plugins.png', - preg_match('/plugins.php(\?.*)?$/',$_SERVER['REQUEST_URI']), - $core->auth->isSuperAdmin()); - $_menu['System']->prependItem(__('Users'),'users.php','images/menu/users.png', - preg_match('/users.php$/',$_SERVER['REQUEST_URI']), - $core->auth->isSuperAdmin()); - $_menu['System']->prependItem(__('Blogs'),'blogs.php','images/menu/blogs.png', - preg_match('/blogs.php$/',$_SERVER['REQUEST_URI']), - $core->auth->isSuperAdmin() || - $core->auth->check('usage,contentadmin',$core->blog->id) && $core->auth->blog_count > 1); - - if (!$user_ui_nofavmenu) { - // Set favorites menu - $ws = $core->auth->user_prefs->addWorkspace('favorites'); - $count = 0; - foreach ($ws->dumpPrefs() as $k => $v) { - // User favorites only - if (!$v['global']) { - $fav = unserialize($v['value']); - if (dc_valid_fav($fav['url'])) { - $count++; - $_menu['Favorites']->addItem(__($fav['title']),$fav['url'],$fav['small-icon'], - preg_match(dc_prepare_url($fav['url']),$_SERVER['REQUEST_URI']), - (($fav['permissions'] == '*') || $core->auth->check($fav['permissions'],$core->blog->id)),$fav['id'],$fav['class']); - } - } - } - if (!$count) { - // Global favorites if any - foreach ($ws->dumpPrefs() as $k => $v) { - $fav = unserialize($v['value']); - if (dc_valid_fav($fav['url'])) { - $count++; - $_menu['Favorites']->addItem(__($fav['title']),$fav['url'],$fav['small-icon'], - preg_match(dc_prepare_url($fav['url']),$_SERVER['REQUEST_URI']), - (($fav['permissions'] == '*') || $core->auth->check($fav['permissions'],$core->blog->id)),$fav['id'],$fav['class']); - } - } - } - if (!$count) { - // No user or global favorites, add "new entry" fav - $_menu['Favorites']->addItem(__('New entry'),'post.php','images/menu/edit.png', - preg_match('/post.php$/',$_SERVER['REQUEST_URI']), - $core->auth->check('usage,contentadmin',$core->blog->id),'menu-new-post',null); - } - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/config.php.in b/v2/dotclear/inc/config.php.in deleted file mode 100644 index 65bea68..0000000 --- a/v2/dotclear/inc/config.php.in +++ /dev/null @@ -1,70 +0,0 @@ - \ No newline at end of file diff --git a/v2/dotclear/inc/core/class.dc.auth.php b/v2/dotclear/inc/core/class.dc.auth.php deleted file mode 100644 index 60eedc0..0000000 --- a/v2/dotclear/inc/core/class.dc.auth.php +++ /dev/null @@ -1,632 +0,0 @@ -core =& $core; - $this->con =& $core->con; - $this->blog_table = $core->prefix.'blog'; - $this->user_table = $core->prefix.'user'; - $this->perm_table = $core->prefix.'permissions'; - - $this->perm_types = array( - 'admin' => __('administrator'), - 'usage' => __('manage their own entries and comments'), - 'publish' => __('publish entries and comments'), - 'delete' => __('delete entries and comments'), - 'contentadmin' => __('manage all entries and comments'), - 'categories' => __('manage categories'), - 'media' => __('manage their own media items'), - 'media_admin' => __('manage all media items') - ); - } - - /// @name Credentials and user permissions - //@{ - /** - * Checks if user exists and can log in. $pwd argument is optionnal - * while you may need to check user without password. This method will create - * credentials and populate all needed object properties. - * - * @param string $user_id User ID - * @param string $pwd User password - * @param string $user_key User key check - * @param boolean $check_blog checks if user is associated to a blog or not. - * @return boolean - */ - public function checkUser($user_id, $pwd=null, $user_key=null, $check_blog=true) - { - # Check user and password - $strReq = 'SELECT user_id, user_super, user_pwd, user_change_pwd, '. - 'user_name, user_firstname, user_displayname, user_email, '. - 'user_url, user_default_blog, user_options, '. - 'user_lang, user_tz, user_post_status, user_creadt, user_upddt '. - 'FROM '.$this->con->escapeSystem($this->user_table).' '. - "WHERE user_id = '".$this->con->escape($user_id)."' "; - - try { - $rs = $this->con->select($strReq); - } catch (Exception $e) { - $err = $e->getMessage(); - return false; - } - - if ($rs->isEmpty()) { - return false; - } - - $rs->extend('rsExtUser'); - - if ($pwd != '') - { - if (crypt::hmac(DC_MASTER_KEY,$pwd) != $rs->user_pwd) { - sleep(rand(2,5)); - return false; - } - } - elseif ($user_key != '') - { - if (http::browserUID(DC_MASTER_KEY.$rs->user_id.$rs->user_pwd) != $user_key) { - return false; - } - } - - $this->user_id = $rs->user_id; - $this->user_change_pwd = (boolean) $rs->user_change_pwd; - $this->user_admin = (boolean) $rs->user_super; - - $this->user_info['user_pwd'] = $rs->user_pwd; - $this->user_info['user_name'] = $rs->user_name; - $this->user_info['user_firstname'] = $rs->user_firstname; - $this->user_info['user_displayname'] = $rs->user_displayname; - $this->user_info['user_email'] = $rs->user_email; - $this->user_info['user_url'] = $rs->user_url; - $this->user_info['user_default_blog'] = $rs->user_default_blog; - $this->user_info['user_lang'] = $rs->user_lang; - $this->user_info['user_tz'] = $rs->user_tz; - $this->user_info['user_post_status'] = $rs->user_post_status; - $this->user_info['user_creadt'] = $rs->user_creadt; - $this->user_info['user_upddt'] = $rs->user_upddt; - - $this->user_info['user_cn'] = dcUtils::getUserCN($rs->user_id, $rs->user_name, - $rs->user_firstname, $rs->user_displayname); - - $this->user_options = array_merge($this->core->userDefaults(),$rs->options()); - - $this->user_prefs = new dcPrefs($this->core,$this->user_id); - - # Get permissions on blogs - if ($check_blog && ($this->findUserBlog() === false)) { - return false; - } - return true; - } - - /** - * This method only check current user password. - * - * @param string $pwd User password - * @return boolean - */ - public function checkPassword($pwd) - { - if (!empty($this->user_info['user_pwd'])) { - return $pwd == $this->user_info['user_pwd']; - } - - return false; - } - - /** - * This method checks if user session cookie exists - * - * @return boolean - */ - public function sessionExists() - { - return isset($_COOKIE[DC_SESSION_NAME]); - } - - /** - * This method checks user session validity. - * - * @return boolean - */ - public function checkSession($uid=null) - { - $this->core->session->start(); - - # If session does not exist, logout. - if (!isset($_SESSION['sess_user_id'])) { - $this->core->session->destroy(); - return false; - } - - # Check here for user and IP address - $this->checkUser($_SESSION['sess_user_id']); - $uid = $uid ? $uid : http::browserUID(DC_MASTER_KEY); - - $user_can_log = $this->userID() !== null && $uid == $_SESSION['sess_browser_uid']; - - if (!$user_can_log) { - $this->core->session->destroy(); - return false; - } - - return true; - } - - /** - * Checks if user must change his password in order to login. - * - * @return boolean - */ - public function mustChangePassword() - { - return $this->user_change_pwd; - } - - /** - * Checks if user is super admin - * - * @return boolean - */ - public function isSuperAdmin() - { - return $this->user_admin; - } - - /** - * Checks if user has permissions given in $permissions for blog - * $blog_id. $permissions is a coma separated list of - * permissions. - * - * @param string $permissions Permissions list - * @param string $blog_id Blog ID - * @return boolean - */ - public function check($permissions,$blog_id) - { - if ($this->user_admin) { - return true; - } - - $p = explode(',',$permissions); - $b = $this->getPermissions($blog_id); - - if ($b != false) - { - if (isset($b['admin'])) { - return true; - } - - foreach ($p as $v) - { - if (isset($b[$v])) { - return true; - } - } - } - - return false; - } - - /** - * Returns true if user is allowed to change its password. - * - * @return boolean - */ - public function allowPassChange() - { - return $this->allow_pass_change; - } - //@} - - /// @name User code handlers - //@{ - public function getUserCode() - { - $code = - pack('a32',$this->userID()). - pack('H*',crypt::hmac(DC_MASTER_KEY,$this->getInfo('user_pwd'))); - return bin2hex($code); - } - - public function checkUserCode($code) - { - $code = @pack('H*',$code); - - $user_id = trim(@pack('a32',substr($code,0,32))); - $pwd = @unpack('H40hex',substr($code,32,40)); - - if ($user_id === false || $pwd === false) { - return false; - } - - $pwd = $pwd['hex']; - - $strReq = 'SELECT user_id, user_pwd '. - 'FROM '.$this->user_table.' '. - "WHERE user_id = '".$this->con->escape($user_id)."' "; - - $rs = $this->con->select($strReq); - - if ($rs->isEmpty()) { - return false; - } - - if (crypt::hmac(DC_MASTER_KEY,$rs->user_pwd) != $pwd) { - return false; - } - - return $rs->user_id; - } - //@} - - - /// @name Sudo - //@{ - /** - * Calls $f function with super admin rights. - * Returns the function result. - * - * @param callback $f Callback function - * @return mixed - */ - public function sudo($f) - { - if (!is_callable($f)) { - throw new Exception($f.' function doest not exist'); - } - - $args = func_get_args(); - array_shift($args); - - if ($this->user_admin) { - $res = call_user_func_array($f,$args); - } else { - $this->user_admin = true; - try { - $res = call_user_func_array($f,$args); - $this->user_admin = false; - } catch (Exception $e) { - $this->user_admin = false; - throw $e; - } - } - - return $res; - } - //@} - - /// @name User information and options - //@{ - /** - * Returns user permissions for a blog as an array which looks like: - * - * - [blog_id] - * - [permission] => true - * - ... - * - * @param string $blog_id Blog ID - * @return array - */ - public function getPermissions($blog_id) - { - if (isset($this->blogs[$blog_id])) { - return $this->blogs[$blog_id]; - } - - if ($this->blog_count === null) { - $this->blog_count = $this->core->getBlogs(array(),true)->f(0); - } - - if ($this->user_admin) { - $strReq = 'SELECT blog_id '. - 'from '.$this->blog_table.' '. - "WHERE blog_id = '".$this->con->escape($blog_id)."' "; - $rs = $this->con->select($strReq); - - $this->blogs[$blog_id] = $rs->isEmpty() ? false : array('admin' => true); - - return $this->blogs[$blog_id]; - } - - $strReq = 'SELECT permissions '. - 'FROM '.$this->perm_table.' '. - "WHERE user_id = '".$this->con->escape($this->user_id)."' ". - "AND blog_id = '".$this->con->escape($blog_id)."' ". - "AND (permissions LIKE '%|usage|%' OR permissions LIKE '%|admin|%' OR permissions LIKE '%|contentadmin|%') "; - $rs = $this->con->select($strReq); - - $this->blogs[$blog_id] = $rs->isEmpty() ? false : $this->parsePermissions($rs->permissions); - - return $this->blogs[$blog_id]; - } - - public function findUserBlog($blog_id=null) - { - if ($blog_id && $this->getPermissions($blog_id) !== false) - { - return $blog_id; - } - else - { - if ($this->user_admin) - { - $strReq = 'SELECT blog_id '. - 'FROM '.$this->blog_table.' '. - 'ORDER BY blog_id ASC '. - $this->con->limit(1); - } - else - { - $strReq = 'SELECT blog_id '. - 'FROM '.$this->perm_table.' '. - "WHERE user_id = '".$this->con->escape($this->user_id)."' ". - "AND (permissions LIKE '%|usage|%' OR permissions LIKE '%|admin|%' OR permissions LIKE '%|contentadmin|%') ". - 'ORDER BY blog_id ASC '. - $this->con->limit(1); - } - - $rs = $this->con->select($strReq); - if (!$rs->isEmpty()) { - return $rs->blog_id; - } - } - - return false; - } - - /** - * Returns current user ID - * - * @return string - */ - public function userID() - { - return $this->user_id; - } - - /** - * Returns information about a user . - * - * @param string $n Information name - * @return string - */ - public function getInfo($n) - { - if (isset($this->user_info[$n])) { - return $this->user_info[$n]; - } - - return null; - } - - /** - * Returns a specific user option - * - * @param string $n Option name - * @return string - */ - public function getOption($n) - { - if (isset($this->user_options[$n])) { - return $this->user_options[$n]; - } - return null; - } - - /** - * Returns all user options in an associative array. - * - * @return array - */ - public function getOptions() - { - return $this->user_options; - } - //@} - - /// @name Permissions - //@{ - /** - * Returns an array with permissions parsed from the string $level - * - * @param string $level Permissions string - * @return array - */ - public function parsePermissions($level) - { - $level = preg_replace('/^\|/','',$level); - $level = preg_replace('/\|$/','',$level); - - $res = array(); - foreach (explode('|',$level) as $v) { - $res[$v] = true; - } - return $res; - } - - /** - * Returns perm_types property content. - * - * @return array - */ - public function getPermissionsTypes() - { - return $this->perm_types; - } - - /** - * Adds a new permission type. - * - * @param string $name Permission name - * @param string $title Permission title - */ - public function setPermissionType($name,$title) - { - $this->perm_types[$name] = $title; - } - //@} - - /// @name Password recovery - //@{ - /** - * Add a recover key to a specific user identified by its email and - * password. - * - * @param string $user_id User ID - * @param string $user_email User Email - * @return string - */ - public function setRecoverKey($user_id,$user_email) - { - $strReq = 'SELECT user_id '. - 'FROM '.$this->user_table.' '. - "WHERE user_id = '".$this->con->escape($user_id)."' ". - "AND user_email = '".$this->con->escape($user_email)."' "; - - $rs = $this->con->select($strReq); - - if ($rs->isEmpty()) { - throw new Exception(__('That user does not exist in the database.')); - } - - $key = md5(uniqid()); - - $cur = $this->con->openCursor($this->user_table); - $cur->user_recover_key = $key; - - $cur->update("WHERE user_id = '".$this->con->escape($user_id)."'"); - - return $key; - } - - /** - * Creates a new user password using recovery key. Returns an array: - * - * - user_email - * - user_id - * - new_pass - * - * @param string $recover_key Recovery key - * @return array - */ - public function recoverUserPassword($recover_key) - { - $strReq = 'SELECT user_id, user_email '. - 'FROM '.$this->user_table.' '. - "WHERE user_recover_key = '".$this->con->escape($recover_key)."' "; - - $rs = $this->con->select($strReq); - - if ($rs->isEmpty()) { - throw new Exception(__('That key does not exist in the database.')); - } - - $new_pass = crypt::createPassword(); - - $cur = $this->con->openCursor($this->user_table); - $cur->user_pwd = crypt::hmac(DC_MASTER_KEY,$new_pass); - $cur->user_recover_key = null; - - $cur->update("WHERE user_recover_key = '".$this->con->escape($recover_key)."'"); - - return array('user_email' => $rs->user_email, 'user_id' => $rs->user_id, 'new_pass' => $new_pass); - } - //@} - - /** @name User management callbacks - This 3 functions only matter if you extend this class and use - DC_AUTH_CLASS constant. - These are called after core user management functions. - Could be useful if you need to add/update/remove stuff in your - LDAP directory or other third party authentication database. - */ - //@{ - - /** - * Called after core->addUser - * @see dcCore::addUser - * @param cursor $cur User cursor - */ - public function afterAddUser($cur) {} - - /** - * Called after core->updUser - * @see dcCore::updUser - * @param string $id User ID - * @param cursor $cur User cursor - */ - public function afterUpdUser($id,$cur) {} - - /** - * Called after core->delUser - * @see dcCore::delUser - * @param string $id User ID - */ - public function afterDelUser($id) {} - //@} -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/core/class.dc.blog.php b/v2/dotclear/inc/core/class.dc.blog.php deleted file mode 100644 index 3509c3f..0000000 --- a/v2/dotclear/inc/core/class.dc.blog.php +++ /dev/null @@ -1,2089 +0,0 @@ -dcCore Dotclear core reference - @param id string Blog ID - */ - public function __construct($core, $id) - { - $this->con =& $core->con; - $this->prefix = $core->prefix; - $this->core =& $core; - - if (($b = $this->core->getBlog($id)) !== false) - { - $this->id = $id; - $this->uid = $b->blog_uid; - $this->name = $b->blog_name; - $this->desc = $b->blog_desc; - $this->url = $b->blog_url; - $this->host = preg_replace('|^([a-z]{3,}://)(.*?)/.*$|','$1$2',$this->url); - $this->creadt = strtotime($b->blog_creadt); - $this->upddt = strtotime($b->blog_upddt); - $this->status = $b->blog_status; - - $this->settings = new dcSettings($this->core,$this->id); - - $this->themes_path = path::fullFromRoot($this->settings->system->themes_path,DC_ROOT); - $this->public_path = path::fullFromRoot($this->settings->system->public_path,DC_ROOT); - - $this->post_status['-2'] = __('pending'); - $this->post_status['-1'] = __('scheduled'); - $this->post_status['0'] = __('unpublished'); - $this->post_status['1'] = __('published'); - - $this->comment_status['-2'] = __('junk'); - $this->comment_status['-1'] = __('pending'); - $this->comment_status['0'] = __('unpublished'); - $this->comment_status['1'] = __('published'); - - # --BEHAVIOR-- coreBlogConstruct - $this->core->callBehavior('coreBlogConstruct',$this); - } - } - - /// @name Common public methods - //@{ - /** - Returns blog URL ending with a question mark. - */ - public function getQmarkURL() - { - if (substr($this->url,-1) != '?') { - return $this->url.'?'; - } - - return $this->url; - } - - /** - Returns an entry status name given to a code. Status are translated, never - use it for tests. If status code does not exist, returns unpublished. - - @param s integer Status code - @return string Blog status name - */ - public function getPostStatus($s) - { - if (isset($this->post_status[$s])) { - return $this->post_status[$s]; - } - return $this->post_status['0']; - } - - /** - Returns an array of available entry status codes and names. - - @return array Simple array with codes in keys and names in value - */ - public function getAllPostStatus() - { - return $this->post_status; - } - - /** - Returns an array of available comment status codes and names. - - @return array Simple array with codes in keys and names in value - */ - public function getAllCommentStatus() - { - return $this->comment_status; - } - - /** - Disallows entries password protection. You need to set it to - false while serving a public blog. - - @param v boolean - */ - public function withoutPassword($v) - { - $this->without_password = (boolean) $v; - } - //@} - - /// @name Triggers methods - //@{ - /** - Updates blog last update date. Should be called every time you change - an element related to the blog. - */ - public function triggerBlog() - { - $cur = $this->con->openCursor($this->prefix.'blog'); - - $cur->blog_upddt = date('Y-m-d H:i:s'); - - $cur->update("WHERE blog_id = '".$this->con->escape($this->id)."' "); - - # --BEHAVIOR-- coreBlogAfterTriggerBlog - $this->core->callBehavior('coreBlogAfterTriggerBlog',$cur); - } - - /** - Updates comment and trackback counters in post table. Should be called - every time a comment or trackback is added, removed or changed its status. - - @param id integer Comment ID - @param del boolean If comment is delete, set this to true - */ - public function triggerComment($id,$del=false) - { - $id = (integer) $id; - - $strReq = 'SELECT post_id, comment_trackback '. - 'FROM '.$this->prefix.'comment '. - 'WHERE comment_id = '.$id.' '; - - $rs = $this->con->select($strReq); - - $post_id = $rs->post_id; - $tb = (boolean) $rs->comment_trackback; - - $strReq = 'SELECT COUNT(post_id) '. - 'FROM '.$this->prefix.'comment '. - 'WHERE post_id = '.(integer) $post_id.' '. - 'AND comment_trackback = '.(integer) $tb.' '. - 'AND comment_status = 1 '; - - if ($del) { - $strReq .= 'AND comment_id <> '.$id.' '; - } - - $rs = $this->con->select($strReq); - - $cur = $this->con->openCursor($this->prefix.'post'); - - if ($rs->isEmpty()) { - return; - } - - if ($tb) { - $cur->nb_trackback = (integer) $rs->f(0); - } else { - $cur->nb_comment = (integer) $rs->f(0); - } - - $cur->update('WHERE post_id = '.(integer) $post_id); - } - //@} - - /// @name Categories management methods - //@{ - public function categories() - { - if (!($this->categories instanceof dcCategories)) { - $this->categories = new dcCategories($this->core); - } - - return $this->categories; - } - - /** - Retrieves categories. $params is an associative array which can - take the following parameters: - - - post_type: Get only entries with given type (default "post") - - cat_url: filter on cat_url field - - cat_id: filter on cat_id field - - start: start with a given category - - level: categories level to retrieve - - @param params array Parameters - @return record - */ - public function getCategories($params=array()) - { - $c_params = array(); - if (isset($params['post_type'])) { - $c_params['post_type'] = $params['post_type']; - unset($params['post_type']); - } - $counter = $this->getCategoriesCounter($c_params); - - $without_empty = $this->core->auth->userID() == false; # For public display - - $start = isset($params['start']) ? (integer) $params['start'] : 0; - $l = isset($params['level']) ? (integer) $params['level'] : 0; - - $rs = $this->categories()->getChildren($start,null,'desc'); - - # Get each categories total posts count - $data = array(); - $stack = array(); - $level = 0; - $cols = $rs->columns(); - while ($rs->fetch()) - { - $nb_post = isset($counter[$rs->cat_id]) ? (integer) $counter[$rs->cat_id] : 0; - - if ($rs->level > $level) { - $nb_total = $nb_post; - $stack[$rs->level] = (integer) $nb_post; - } elseif ($rs->level == $level) { - $nb_total = $nb_post; - $stack[$rs->level] += $nb_post; - } else { - $nb_total = $stack[$rs->level+1] + $nb_post; - if (isset($stack[$rs->level])) { - $stack[$rs->level] += $nb_total; - } else { - $stack[$rs->level] = $nb_total; - } - unset($stack[$rs->level+1]); - } - - if ($nb_total == 0 && $without_empty) { - continue; - } - - $level = $rs->level; - - $t = array(); - foreach ($cols as $c) { - $t[$c] = $rs->f($c); - } - $t['nb_post'] = $nb_post; - $t['nb_total'] = $nb_total; - - if ($l == 0 || ($l > 0 && $l == $rs->level)) { - array_unshift($data,$t); - } - } - - # We need to apply filter after counting - if (isset($params['cat_id']) && $params['cat_id'] !== '') - { - $found = false; - foreach ($data as $v) { - if ($v['cat_id'] == $params['cat_id']) { - $found = true; - $data = array($v); - break; - } - } - if (!$found) { - $data = array(); - } - } - - if (isset($params['cat_url']) && ($params['cat_url'] !== '') - && !isset($params['cat_id'])) - { - $found = false; - foreach ($data as $v) { - if ($v['cat_url'] == $params['cat_url']) { - $found = true; - $data = array($v); - break; - } - } - if (!$found) { - $data = array(); - } - } - - return staticRecord::newFromArray($data); - } - - /** - Retrieves a category by its ID. - - @param id integer Category ID - @return record - */ - public function getCategory($id) - { - return $this->getCategories(array('cat_id' => $id)); - } - - /** - Retrieves parents of a given category. - - @param id integer Category ID - @return record - */ - public function getCategoryParents($id) - { - return $this->categories()->getParents($id); - } - - /** - Retrieves first parent of a given category. - - @param id integer Category ID - @return record - */ - public function getCategoryParent($id) - { - return $this->categories()->getParent($id); - } - - /** - Retrieves all category's first children - - @param id integer Category ID - @return record - */ - public function getCategoryFirstChildren($id) - { - return $this->getCategories(array('start' => $id,'level' => $id == 0 ? 1 : 2)); - } - - private function getCategoriesCounter($params=array()) - { - $strReq = - 'SELECT C.cat_id, COUNT(P.post_id) AS nb_post '. - 'FROM '.$this->prefix.'category AS C '. - 'JOIN '.$this->prefix."post P ON (C.cat_id = P.cat_id AND P.blog_id = '".$this->con->escape($this->id)."' ) ". - "WHERE C.blog_id = '".$this->con->escape($this->id)."' "; - - if (!$this->core->auth->userID()) { - $strReq .= 'AND P.post_status = 1 '; - } - - if (!empty($params['post_type'])) { - $strReq .= 'AND P.post_type '.$this->con->in($params['post_type']); - } - - $strReq .= 'GROUP BY C.cat_id '; - - $rs = $this->con->select($strReq); - $counters = array(); - while ($rs->fetch()) { - $counters[$rs->cat_id] = $rs->nb_post; - } - - return $counters; - } - - /** - Creates a new category. Takes a cursor as input and returns the new category - ID. - - @param cur cursor Category cursor - @return integer New category ID - */ - public function addCategory($cur,$parent=0) - { - if (!$this->core->auth->check('categories',$this->id)) { - throw new Exception(__('You are not allowed to add categories')); - } - - $url = array(); - if ($parent != 0) - { - $rs = $this->getCategory($parent); - if ($rs->isEmpty()) { - $url = array(); - } else { - $url[] = $rs->cat_url; - } - } - - if ($cur->cat_url == '') { - $url[] = text::tidyURL($cur->cat_title,false); - } else { - $url[] = $cur->cat_url; - } - - $cur->cat_url = implode('/',$url); - - $this->getCategoryCursor($cur); - $cur->blog_id = (string) $this->id; - - # --BEHAVIOR-- coreBeforeCategoryCreate - $this->core->callBehavior('coreBeforeCategoryCreate',$this,$cur); - - $this->categories()->addNode($cur,$parent); - - # --BEHAVIOR-- coreAfterCategoryCreate - $this->core->callBehavior('coreAfterCategoryCreate',$this,$cur); - $this->triggerBlog(); - - return $cur->cat_id; - } - - /** - Updates an existing category. - - @param id integer Category ID - @param cur cursor Category cursor - */ - public function updCategory($id,$cur) - { - if (!$this->core->auth->check('categories',$this->id)) { - throw new Exception(__('You are not allowed to update categories')); - } - - if ($cur->cat_url == '') - { - $url = array(); - $rs = $this->categories()->getParents($id); - while ($rs->fetch()) { - if ($rs->index() == $rs->count()-1) { - $url[] = $rs->cat_url; - } - } - - - $url[] = text::tidyURL($cur->cat_title,false); - $cur->cat_url = implode('/',$url); - } - - $this->getCategoryCursor($cur,$id); - - # --BEHAVIOR-- coreBeforeCategoryUpdate - $this->core->callBehavior('coreBeforeCategoryUpdate',$this,$cur); - - $cur->update( - 'WHERE cat_id = '.(integer) $id.' '. - "AND blog_id = '".$this->con->escape($this->id)."' "); - - # --BEHAVIOR-- coreAfterCategoryUpdate - $this->core->callBehavior('coreAfterCategoryUpdate',$this,$cur); - - $this->triggerBlog(); - } - - /** - DEPRECATED METHOD. Use dcBlog::setCategoryParent and dcBlog::moveCategory - instead. - - @param id integer Category ID - @param order integer Category position - */ - public function updCategoryOrder($id,$order) - { - return; - } - - /** - Set a category parent - - @param id integer Category ID - @param parent integer Parent Category ID - */ - public function setCategoryParent($id,$parent) - { - $this->categories()->setNodeParent($id,$parent); - $this->triggerBlog(); - } - - /** - Set category position - - @param id integer Category ID - @param sibling integer Sibling Category ID - @param move integer Order (before|after) - */ - public function setCategoryPosition($id,$sibling,$move) - { - $this->categories()->setNodePosition($id,$sibling,$move); - $this->triggerBlog(); - } - - /** - Deletes a category. - - @param id integer Category ID - */ - public function delCategory($id) - { - if (!$this->core->auth->check('categories',$this->id)) { - throw new Exception(__('You are not allowed to delete categories')); - } - - $strReq = 'SELECT COUNT(post_id) AS nb_post '. - 'FROM '.$this->prefix.'post '. - 'WHERE cat_id = '.(integer) $id.' '. - "AND blog_id = '".$this->con->escape($this->id)."' "; - - $rs = $this->con->select($strReq); - - if ($rs->nb_post > 0) { - throw new Exception(__('This category is not empty.')); - } - - $this->categories()->deleteNode($id,true); - $this->triggerBlog(); - } - - /** - Reset categories order and relocate them to first level - */ - public function resetCategoriesOrder() - { - if (!$this->core->auth->check('categories',$this->id)) { - throw new Exception(__('You are not allowed to reset categories order')); - } - - $this->categories()->resetOrder(); - $this->triggerBlog(); - } - - private function checkCategory($title,$url,$id=null) - { - $strReq = 'SELECT cat_id '. - 'FROM '.$this->prefix.'category '. - "WHERE cat_url = '".$this->con->escape($url)."' ". - "AND blog_id = '".$this->con->escape($this->id)."' "; - - if ($id !== null) { - $strReq .= 'AND cat_id <> '.(integer) $id.' '; - } - - $rs = $this->con->select($strReq); - - if (!$rs->isEmpty()) { - throw new Exception(__('Category URL must be unique.')); - } - } - - private function getCategoryCursor($cur,$id=null) - { - if ($cur->cat_title == '') { - throw new Exception(__('You must provide a category title')); - } - - # If we don't have any cat_url, let's do one - if ($cur->cat_url == '') { - $cur->cat_url = text::tidyURL($cur->cat_title,false); - } - - # Still empty ? - if ($cur->cat_url == '') { - throw new Exception(__('You must provide a category URL')); - } else { - $cur->cat_url = text::tidyURL($cur->cat_url,true); - } - - # Check if title or url are unique - $this->checkCategory($cur->cat_title,$cur->cat_url,$id); - - if ($cur->cat_desc !== null) { - $cur->cat_desc = $this->core->HTMLfilter($cur->cat_desc); - } - } - //@} - - /// @name Entries management methods - //@{ - /** - Retrieves entries. $params is an array taking the following - optionnal parameters: - - - no_content: Don't retrieve entry content (excerpt and content) - - post_type: Get only entries with given type (default "post", array for many types and '' for no type) - - post_id: (integer) Get entry with given post_id - - post_url: Get entry with given post_url field - - user_id: (integer) Get entries belonging to given user ID - - cat_id: (string or array) Get entries belonging to given category ID - - cat_id_not: deprecated (use cat_id with "id ?not" instead) - - cat_url: (string or array) Get entries belonging to given category URL - - cat_url_not: deprecated (use cat_url with "url ?not" instead) - - post_status: (integer) Get entries with given post_status - - post_selected: (boolean) Get select flaged entries - - post_year: (integer) Get entries with given year - - post_month: (integer) Get entries with given month - - post_day: (integer) Get entries with given day - - post_lang: Get entries with given language code - - search: Get entries corresponding of the following search string - - columns: (array) More columns to retrieve - - sql: Append SQL string at the end of the query - - from: Append SQL string after "FROM" statement in query - - order: Order of results (default "ORDER BY post_dt DES") - - limit: Limit parameter - - sql_only : return the sql request instead of results. Only ids are selected - - Please note that on every cat_id or cat_url, you can add ?not to exclude - the category and ?sub to get subcategories. - - @param params array Parameters - @param count_only boolean Only counts results - @return record A record with some more capabilities or the SQL request - */ - public function getPosts($params=array(),$count_only=false) - { - # --BEHAVIOR-- coreBlogBeforeGetPosts - $params = new ArrayObject($params); - $this->core->callBehavior('coreBlogBeforeGetPosts',$params); - - if ($count_only) - { - $strReq = 'SELECT count(P.post_id) '; - } - elseif (!empty($params['sql_only'])) - { - $strReq = 'SELECT P.post_id '; - } - else - { - if (!empty($params['no_content'])) { - $content_req = ''; - } else { - $content_req = - 'post_excerpt, post_excerpt_xhtml, '. - 'post_content, post_content_xhtml, post_notes, '; - } - - if (!empty($params['columns']) && is_array($params['columns'])) { - $content_req .= implode(', ',$params['columns']).', '; - } - - $strReq = - 'SELECT P.post_id, P.blog_id, P.user_id, P.cat_id, post_dt, '. - 'post_tz, post_creadt, post_upddt, post_format, post_password, '. - 'post_url, post_lang, post_title, '.$content_req. - 'post_type, post_meta, post_status, post_selected, post_position, '. - 'post_open_comment, post_open_tb, nb_comment, nb_trackback, '. - 'U.user_name, U.user_firstname, U.user_displayname, U.user_email, '. - 'U.user_url, '. - 'C.cat_title, C.cat_url, C.cat_desc '; - } - - $strReq .= - 'FROM '.$this->prefix.'post P '. - 'INNER JOIN '.$this->prefix.'user U ON U.user_id = P.user_id '. - 'LEFT OUTER JOIN '.$this->prefix.'category C ON P.cat_id = C.cat_id '; - - if (!empty($params['from'])) { - $strReq .= $params['from'].' '; - } - - $strReq .= - "WHERE P.blog_id = '".$this->con->escape($this->id)."' "; - - if (!$this->core->auth->check('contentadmin',$this->id)) { - $strReq .= 'AND ((post_status = 1 '; - - if ($this->without_password) { - $strReq .= 'AND post_password IS NULL '; - } - $strReq .= ') '; - - if ($this->core->auth->userID()) { - $strReq .= "OR P.user_id = '".$this->con->escape($this->core->auth->userID())."')"; - } else { - $strReq .= ') '; - } - } - - #Adding parameters - if (isset($params['post_type'])) - { - if (is_array($params['post_type']) || $params['post_type'] != '') { - $strReq .= 'AND post_type '.$this->con->in($params['post_type']); - } - } - else - { - $strReq .= "AND post_type = 'post' "; - } - - if (isset($params['post_id']) && $params['post_id'] !== '') { - if (is_array($params['post_id'])) { - array_walk($params['post_id'],create_function('&$v,$k','if($v!==null){$v=(integer)$v;}')); - } else { - $params['post_id'] = array((integer) $params['post_id']); - } - $strReq .= 'AND P.post_id '.$this->con->in($params['post_id']); - } - - if (isset($params['post_url']) && $params['post_url'] !== '') { - $strReq .= "AND post_url = '".$this->con->escape($params['post_url'])."' "; - } - - if (!empty($params['user_id'])) { - $strReq .= "AND U.user_id = '".$this->con->escape($params['user_id'])."' "; - } - - if (isset($params['cat_id']) && $params['cat_id'] !== '') - { - if (!is_array($params['cat_id'])) { - $params['cat_id'] = array($params['cat_id']); - } - if (!empty($params['cat_id_not'])) { - array_walk($params['cat_id'],create_function('&$v,$k','$v=$v." ?not";')); - } - $strReq .= 'AND '.$this->getPostsCategoryFilter($params['cat_id'],'cat_id').' '; - } - elseif (isset($params['cat_url']) && $params['cat_url'] !== '') - { - if (!is_array($params['cat_url'])) { - $params['cat_url'] = array($params['cat_url']); - } - if (!empty($params['cat_url_not'])) { - array_walk($params['cat_url'],create_function('&$v,$k','$v=$v." ?not";')); - } - $strReq .= 'AND '.$this->getPostsCategoryFilter($params['cat_url'],'cat_url').' '; - } - - /* Other filters */ - if (isset($params['post_status'])) { - $strReq .= 'AND post_status = '.(integer) $params['post_status'].' '; - } - - if (isset($params['post_selected'])) { - $strReq .= 'AND post_selected = '.(integer) $params['post_selected'].' '; - } - - if (!empty($params['post_year'])) { - $strReq .= 'AND '.$this->con->dateFormat('post_dt','%Y').' = '. - "'".sprintf('%04d',$params['post_year'])."' "; - } - - if (!empty($params['post_month'])) { - $strReq .= 'AND '.$this->con->dateFormat('post_dt','%m').' = '. - "'".sprintf('%02d',$params['post_month'])."' "; - } - - if (!empty($params['post_day'])) { - $strReq .= 'AND '.$this->con->dateFormat('post_dt','%d').' = '. - "'".sprintf('%02d',$params['post_day'])."' "; - } - - if (!empty($params['post_lang'])) { - $strReq .= "AND P.post_lang = '".$this->con->escape($params['post_lang'])."' "; - } - - if (!empty($params['search'])) - { - $words = text::splitWords($params['search']); - - if (!empty($words)) - { - # --BEHAVIOR-- corePostSearch - if ($this->core->hasBehavior('corePostSearch')) { - $this->core->callBehavior('corePostSearch',$this->core,array(&$words,&$strReq,&$params)); - } - - if ($words) - { - foreach ($words as $i => $w) { - $words[$i] = "post_words LIKE '%".$this->con->escape($w)."%'"; - } - $strReq .= 'AND '.implode(' AND ',$words).' '; - } - } - } - - if (!empty($params['sql'])) { - $strReq .= $params['sql'].' '; - } - - if (!$count_only) - { - if (!empty($params['order'])) { - $strReq .= 'ORDER BY '.$this->con->escape($params['order']).' '; - } else { - $strReq .= 'ORDER BY post_dt DESC '; - } - } - - if (!$count_only && !empty($params['limit'])) { - $strReq .= $this->con->limit($params['limit']); - } - - if (!empty($params['sql_only'])) { - return $strReq; - } - - $rs = $this->con->select($strReq); - $rs->core = $this->core; - $rs->_nb_media = array(); - $rs->extend('rsExtPost'); - - # --BEHAVIOR-- coreBlogGetPosts - $this->core->callBehavior('coreBlogGetPosts',$rs); - - return $rs; - } - - /** - Returns a record with post id, title and date for next or previous post - according to the post ID. - $dir could be 1 (next post) or -1 (previous post). - - @param post_id integer Post ID - @param dir integer Search direction - @param restrict_to_category boolean Restrict to post with same category - @param restrict_to_lang boolean Restrict to post with same lang - @return record - */ - public function getNextPost($post,$dir,$restrict_to_category=false, $restrict_to_lang=false) - { - $dt = $post->post_dt; - $post_id = (integer) $post->post_id; - - if($dir > 0) { - $sign = '>'; - $order = 'ASC'; - } - else { - $sign = '<'; - $order = 'DESC'; - } - - $params['post_type'] = $post->post_type; - $params['limit'] = 1; - $params['order'] = 'post_dt '.$order.', P.post_id '.$order; - $params['sql'] = - 'AND ( '. - " (post_dt = '".$this->con->escape($dt)."' AND P.post_id ".$sign." ".$post_id.") ". - " OR post_dt ".$sign." '".$this->con->escape($dt)."' ". - ') '; - - if ($restrict_to_category) { - $params['sql'] .= $post->cat_id ? 'AND P.cat_id = '.(integer) $post->cat_id.' ' : 'AND P.cat_id IS NULL '; - } - - if ($restrict_to_lang) { - $params['sql'] .= $post->post_lang ? 'AND P.post_lang = \''. $this->con->escape($post->post_lang) .'\' ': 'AND P.post_lang IS NULL '; - } - - $rs = $this->getPosts($params); - - if ($rs->isEmpty()) { - return null; - } - - return $rs; - } - - /** - Retrieves different languages and post count on blog, based on post_lang - field. $params is an array taking the following optionnal - parameters: - - - post_type: Get only entries with given type (default "post", '' for no type) - - lang: retrieve post count for selected lang - - order: order statement (default post_lang DESC) - - @param params array Parameters - @return record - */ - public function getLangs($params=array()) - { - $strReq = 'SELECT COUNT(post_id) as nb_post, post_lang '. - 'FROM '.$this->prefix.'post '. - "WHERE blog_id = '".$this->con->escape($this->id)."' ". - "AND post_lang <> '' ". - "AND post_lang IS NOT NULL "; - - if (!$this->core->auth->check('contentadmin',$this->id)) { - $strReq .= 'AND ((post_status = 1 '; - - if ($this->without_password) { - $strReq .= 'AND post_password IS NULL '; - } - $strReq .= ') '; - - if ($this->core->auth->userID()) { - $strReq .= "OR user_id = '".$this->con->escape($this->core->auth->userID())."')"; - } else { - $strReq .= ') '; - } - } - - if (isset($params['post_type'])) { - if ($params['post_type'] != '') { - $strReq .= "AND post_type = '".$this->con->escape($params['post_type'])."' "; - } - } else { - $strReq .= "AND post_type = 'post' "; - } - - if (isset($params['lang'])) { - $strReq .= "AND post_lang = '".$this->con->escape($params['lang'])."' "; - } - - $strReq .= 'GROUP BY post_lang '; - - $order = 'desc'; - if (!empty($params['order']) && preg_match('/^(desc|asc)$/i',$params['order'])) { - $order = $params['order']; - } - $strReq .= 'ORDER BY post_lang '.$order.' '; - - return $this->con->select($strReq); - } - - /** - Returns a record with all distinct blog dates and post count. - $params is an array taking the following optionnal parameters: - - - type: (day|month|year) Get days, months or years - - year: (integer) Get dates for given year - - month: (integer) Get dates for given month - - day: (integer) Get dates for given day - - cat_id: (integer) Category ID filter - - cat_url: Category URL filter - - post_lang: lang of the posts - - next: Get date following match - - previous: Get date before match - - order: Sort by date "ASC" or "DESC" - - @param params array Parameters array - @return record - */ - public function getDates($params=array()) - { - $dt_f = '%Y-%m-%d'; - $dt_fc = '%Y%m%d'; - if (isset($params['type'])) { - if ($params['type'] == 'year') { - $dt_f = '%Y-01-01'; - $dt_fc = '%Y0101'; - } elseif ($params['type'] == 'month') { - $dt_f = '%Y-%m-01'; - $dt_fc = '%Y%m01'; - } - } - $dt_f .= ' 00:00:00'; - $dt_fc .= '000000'; - - $cat_field = $catReq = $limit = ''; - - if (isset($params['cat_id']) && $params['cat_id'] !== '') { - $catReq = 'AND P.cat_id = '.(integer) $params['cat_id'].' '; - $cat_field = ', C.cat_url '; - } elseif (isset($params['cat_url']) && $params['cat_url'] !== '') { - $catReq = "AND C.cat_url = '".$this->con->escape($params['cat_url'])."' "; - $cat_field = ', C.cat_url '; - } - if (!empty($params['post_lang'])) { - $catReq = 'AND P.post_lang = \''. $params['post_lang'].'\' '; - } - - $strReq = 'SELECT DISTINCT('.$this->con->dateFormat('post_dt',$dt_f).') AS dt '. - $cat_field. - ',COUNT(P.post_id) AS nb_post '. - 'FROM '.$this->prefix.'post P LEFT JOIN '.$this->prefix.'category C '. - 'ON P.cat_id = C.cat_id '. - "WHERE P.blog_id = '".$this->con->escape($this->id)."' ". - $catReq; - - if (!$this->core->auth->check('contentadmin',$this->id)) { - $strReq .= 'AND ((post_status = 1 '; - - if ($this->without_password) { - $strReq .= 'AND post_password IS NULL '; - } - $strReq .= ') '; - - if ($this->core->auth->userID()) { - $strReq .= "OR P.user_id = '".$this->con->escape($this->core->auth->userID())."')"; - } else { - $strReq .= ') '; - } - } - - if (!empty($params['post_type'])) { - $strReq .= "AND post_type ".$this->con->in($params['post_type'])." "; - } else { - $strReq .= "AND post_type = 'post' "; - } - - if (!empty($params['year'])) { - $strReq .= 'AND '.$this->con->dateFormat('post_dt','%Y')." = '".sprintf('%04d',$params['year'])."' "; - } - - if (!empty($params['month'])) { - $strReq .= 'AND '.$this->con->dateFormat('post_dt','%m')." = '".sprintf('%02d',$params['month'])."' "; - } - - if (!empty($params['day'])) { - $strReq .= 'AND '.$this->con->dateFormat('post_dt','%d')." = '".sprintf('%02d',$params['day'])."' "; - } - - # Get next or previous date - if (!empty($params['next']) || !empty($params['previous'])) - { - if (!empty($params['next'])) { - $pdir = ' > '; - $params['order'] = 'asc'; - $dt = $params['next']; - } else { - $pdir = ' < '; - $params['order'] = 'desc'; - $dt = $params['previous']; - } - - $dt = date('YmdHis',strtotime($dt)); - - $strReq .= 'AND '.$this->con->dateFormat('post_dt',$dt_fc).$pdir."'".$dt."' "; - $limit = $this->con->limit(1); - } - - $strReq .= 'GROUP BY dt '.$cat_field; - - $order = 'desc'; - if (!empty($params['order']) && preg_match('/^(desc|asc)$/i',$params['order'])) { - $order = $params['order']; - } - - $strReq .= - 'ORDER BY dt '.$order.' '. - $limit; - - $rs = $this->con->select($strReq); - $rs->extend('rsExtDates'); - return $rs; - } - - /** - Creates a new entry. Takes a cursor as input and returns the new entry - ID. - - @param cur cursor Post cursor - @return integer New post ID - */ - public function addPost($cur) - { - if (!$this->core->auth->check('usage,contentadmin',$this->id)) { - throw new Exception(__('You are not allowed to create an entry')); - } - - $this->con->writeLock($this->prefix.'post'); - try - { - # Get ID - $rs = $this->con->select( - 'SELECT MAX(post_id) '. - 'FROM '.$this->prefix.'post ' - ); - - $cur->post_id = (integer) $rs->f(0) + 1; - $cur->blog_id = (string) $this->id; - $cur->post_creadt = date('Y-m-d H:i:s'); - $cur->post_upddt = date('Y-m-d H:i:s'); - $cur->post_tz = $this->core->auth->getInfo('user_tz'); - - # Post excerpt and content - $this->getPostContent($cur,$cur->post_id); - - $this->getPostCursor($cur); - - $cur->post_url = $this->getPostURL($cur->post_url,$cur->post_dt,$cur->post_title,$cur->post_id); - - if (!$this->core->auth->check('publish,contentadmin',$this->id)) { - $cur->post_status = -2; - } - - # --BEHAVIOR-- coreBeforePostCreate - $this->core->callBehavior('coreBeforePostCreate',$this,$cur); - - $cur->insert(); - $this->con->unlock(); - } - catch (Exception $e) - { - $this->con->unlock(); - throw $e; - } - - # --BEHAVIOR-- coreAfterPostCreate - $this->core->callBehavior('coreAfterPostCreate',$this,$cur); - - $this->triggerBlog(); - - return $cur->post_id; - } - - /** - Updates an existing post. - - @param id integer Post ID - @param cur cursor Post cursor - */ - public function updPost($id,$cur) - { - if (!$this->core->auth->check('usage,contentadmin',$this->id)) { - throw new Exception(__('You are not allowed to update entries')); - } - - $id = (integer) $id; - - if (empty($id)) { - throw new Exception(__('No such entry ID')); - } - - # Post excerpt and content - $this->getPostContent($cur,$id); - - $this->getPostCursor($cur); - - if ($cur->post_url !== null) { - $cur->post_url = $this->getPostURL($cur->post_url,$cur->post_dt,$cur->post_title,$id); - } - - if (!$this->core->auth->check('publish,contentadmin',$this->id)) { - $cur->unsetField('post_status'); - } - - $cur->post_upddt = date('Y-m-d H:i:s'); - - #If user is only "usage", we need to check the post's owner - if (!$this->core->auth->check('contentadmin',$this->id)) - { - $strReq = 'SELECT post_id '. - 'FROM '.$this->prefix.'post '. - 'WHERE post_id = '.$id.' '. - "AND user_id = '".$this->con->escape($this->core->auth->userID())."' "; - - $rs = $this->con->select($strReq); - - if ($rs->isEmpty()) { - throw new Exception(__('You are not allowed to edit this entry')); - } - } - - # --BEHAVIOR-- coreBeforePostUpdate - $this->core->callBehavior('coreBeforePostUpdate',$this,$cur); - - $cur->update('WHERE post_id = '.$id.' '); - - # --BEHAVIOR-- coreAfterPostUpdate - $this->core->callBehavior('coreAfterPostUpdate',$this,$cur); - - $this->triggerBlog(); - } - - /** - Updates post status. - - @param id integer Post ID - @param status integer Post status - */ - public function updPostStatus($id,$status) - { - if (!$this->core->auth->check('publish,contentadmin',$this->id)) { - throw new Exception(__('You are not allowed to change this entry status')); - } - - $id = (integer) $id; - $status = (integer) $status; - - #If user can only publish, we need to check the post's owner - if (!$this->core->auth->check('contentadmin',$this->id)) - { - $strReq = 'SELECT post_id '. - 'FROM '.$this->prefix.'post '. - 'WHERE post_id = '.$id.' '. - "AND blog_id = '".$this->con->escape($this->id)."' ". - "AND user_id = '".$this->con->escape($this->core->auth->userID())."' "; - - $rs = $this->con->select($strReq); - - if ($rs->isEmpty()) { - throw new Exception(__('You are not allowed to change this entry status')); - } - } - - $cur = $this->con->openCursor($this->prefix.'post'); - - $cur->post_status = $status; - $cur->post_upddt = date('Y-m-d H:i:s'); - - $cur->update( - 'WHERE post_id = '.$id.' '. - "AND blog_id = '".$this->con->escape($this->id)."' " - ); - $this->triggerBlog(); - } - - public function updPostSelected($id,$selected) - { - if (!$this->core->auth->check('usage,contentadmin',$this->id)) { - throw new Exception(__('You are not allowed to change this entry category')); - } - - $id = (integer) $id; - $selected = (boolean) $selected; - - # If user is only usage, we need to check the post's owner - if (!$this->core->auth->check('contentadmin',$this->id)) - { - $strReq = 'SELECT post_id '. - 'FROM '.$this->prefix.'post '. - 'WHERE post_id = '.$id.' '. - "AND blog_id = '".$this->con->escape($this->id)."' ". - "AND user_id = '".$this->con->escape($this->core->auth->userID())."' "; - - $rs = $this->con->select($strReq); - - if ($rs->isEmpty()) { - throw new Exception(__('You are not allowed to mark this entry as selected')); - } - } - - $cur = $this->con->openCursor($this->prefix.'post'); - - $cur->post_selected = (integer) $selected; - $cur->post_upddt = date('Y-m-d H:i:s'); - - $cur->update( - 'WHERE post_id = '.$id.' '. - "AND blog_id = '".$this->con->escape($this->id)."' " - ); - $this->triggerBlog(); - } - - /** - Updates post category. $cat_id can be null. - - @param id integer Post ID - @param cat_id integer Category ID - */ - public function updPostCategory($id,$cat_id) - { - if (!$this->core->auth->check('usage,contentadmin',$this->id)) { - throw new Exception(__('You are not allowed to change this entry category')); - } - - $id = (integer) $id; - $cat_id = (integer) $cat_id; - - # If user is only usage, we need to check the post's owner - if (!$this->core->auth->check('contentadmin',$this->id)) - { - $strReq = 'SELECT post_id '. - 'FROM '.$this->prefix.'post '. - 'WHERE post_id = '.$id.' '. - "AND blog_id = '".$this->con->escape($this->id)."' ". - "AND user_id = '".$this->con->escape($this->core->auth->userID())."' "; - - $rs = $this->con->select($strReq); - - if ($rs->isEmpty()) { - throw new Exception(__('You are not allowed to change this entry category')); - } - } - - $cur = $this->con->openCursor($this->prefix.'post'); - - $cur->cat_id = ($cat_id ? $cat_id : null); - $cur->post_upddt = date('Y-m-d H:i:s'); - - $cur->update( - 'WHERE post_id = '.$id.' '. - "AND blog_id = '".$this->con->escape($this->id)."' " - ); - $this->triggerBlog(); - } - - /** - Deletes a post. - - @param id integer Post ID - */ - public function delPost($id) - { - if (!$this->core->auth->check('delete,contentadmin',$this->id)) { - throw new Exception(__('You are not allowed to delete entries')); - } - - $id = (integer) $id; - - if (empty($id)) { - throw new Exception(__('No such entry ID')); - } - - #If user can only delete, we need to check the post's owner - if (!$this->core->auth->check('contentadmin',$this->id)) - { - $strReq = 'SELECT post_id '. - 'FROM '.$this->prefix.'post '. - 'WHERE post_id = '.$id.' '. - "AND blog_id = '".$this->con->escape($this->id)."' ". - "AND user_id = '".$this->con->escape($this->core->auth->userID())."' "; - - $rs = $this->con->select($strReq); - - if ($rs->isEmpty()) { - throw new Exception(__('You are not allowed to delete this entry')); - } - } - - - $strReq = 'DELETE FROM '.$this->prefix.'post '. - 'WHERE post_id = '.$id.' '. - "AND blog_id = '".$this->con->escape($this->id)."' "; - - $this->con->execute($strReq); - $this->triggerBlog(); - } - - /** - Publishes all entries flaged as "scheduled". - */ - public function publishScheduledEntries() - { - $strReq = 'SELECT post_id, post_dt, post_tz '. - 'FROM '.$this->prefix.'post '. - 'WHERE post_status = -1 '. - "AND blog_id = '".$this->con->escape($this->id)."' "; - - $rs = $this->con->select($strReq); - - $now = dt::toUTC(time()); - $to_change = new ArrayObject(); - - if ($rs->isEmpty()) { - return; - } - - while ($rs->fetch()) - { - # Now timestamp with post timezone - $now_tz = $now + dt::getTimeOffset($rs->post_tz,$now); - - # Post timestamp - $post_ts = strtotime($rs->post_dt); - - # If now_tz >= post_ts, we publish the entry - if ($now_tz >= $post_ts) { - $to_change[] = (integer) $rs->post_id; - } - } - if (count($to_change)) - { - # --BEHAVIOR-- coreBeforeScheduledEntriesPublish - $this->core->callBehavior('coreBeforeScheduledEntriesPublish',$this,$to_change); - - $strReq = - 'UPDATE '.$this->prefix.'post SET '. - 'post_status = 1 '. - "WHERE blog_id = '".$this->con->escape($this->id)."' ". - 'AND post_id '.$this->con->in((array)$to_change).' '; - $this->con->execute($strReq); - $this->triggerBlog(); - - # --BEHAVIOR-- coreAfterScheduledEntriesPublish - $this->core->callBehavior('coreAfterScheduledEntriesPublish',$this,$to_change); - } - - } - - /** - Retrieves all users having posts on current blog. - - @param post_type string post_type filter (post) - @return record - */ - public function getPostsUsers($post_type='post') - { - $strReq = 'SELECT P.user_id, user_name, user_firstname, '. - 'user_displayname, user_email '. - 'FROM '.$this->prefix.'post P, '.$this->prefix.'user U '. - 'WHERE P.user_id = U.user_id '. - "AND blog_id = '".$this->con->escape($this->id)."' "; - - if ($post_type) { - $strReq .= "AND post_type = '".$this->con->escape($post_type)."' "; - } - - $strReq .= 'GROUP BY P.user_id, user_name, user_firstname, user_displayname, user_email '; - - return $this->con->select($strReq); - } - - private function getPostsCategoryFilter($arr,$field='cat_id') - { - $field = $field == 'cat_id' ? 'cat_id' : 'cat_url'; - - $sub = array(); - $not = array(); - $queries = array(); - - foreach ($arr as $v) - { - $v = trim($v); - $args = preg_split('/\s*[?]\s*/',$v,-1,PREG_SPLIT_NO_EMPTY); - $id = array_shift($args); - $args = array_flip($args); - - if (isset($args['not'])) { $not[$id] = 1; } - if (isset($args['sub'])) { $sub[$id] = 1; } - if ($field == 'cat_id') { - if (preg_match('/^null$/i',$id)) { - $queries[$id] = 'P.cat_id IS NULL'; - } - else { - $queries[$id] = 'P.cat_id = '.(integer) $id; - } - } else { - $queries[$id] = "C.cat_url = '".$this->con->escape($id)."' "; - } - } - - if (!empty($sub)) { - $rs = $this->con->select( - 'SELECT cat_id, cat_url, cat_lft, cat_rgt FROM '.$this->prefix.'category '. - "WHERE blog_id = '".$this->con->escape($this->id)."' ". - 'AND '.$field.' '.$this->con->in(array_keys($sub)) - ); - - while ($rs->fetch()) { - $queries[$rs->f($field)] = '(C.cat_lft BETWEEN '.$rs->cat_lft.' AND '.$rs->cat_rgt.')'; - } - } - - # Create queries - $sql = array( - 0 => array(), # wanted categories - 1 => array() # excluded categories - ); - - foreach ($queries as $id => $q) { - $sql[(integer) isset($not[$id])][] = $q; - } - - $sql[0] = implode(' OR ',$sql[0]); - $sql[1] = implode(' OR ',$sql[1]); - - if ($sql[0]) { - $sql[0] = '('.$sql[0].')'; - } else { - unset($sql[0]); - } - - if ($sql[1]) { - $sql[1] = '(P.cat_id IS NULL OR NOT('.$sql[1].'))'; - } else { - unset($sql[1]); - } - - return implode(' AND ',$sql); - } - - private function getPostCursor($cur,$post_id=null) - { - if ($cur->post_title == '') { - throw new Exception(__('No entry title')); - } - - if ($cur->post_content == '') { - throw new Exception(__('No entry content')); - } - - if ($cur->post_password === '') { - $cur->post_password = null; - } - - if ($cur->post_dt == '') { - $offset = dt::getTimeOffset($this->core->auth->getInfo('user_tz')); - $now = time() + $offset; - $cur->post_dt = date('Y-m-d H:i:00',$now); - } - - $post_id = is_int($post_id) ? $post_id : $cur->post_id; - - if ($cur->post_content_xhtml == '') { - throw new Exception(__('No entry content')); - } - - # Words list - if ($cur->post_title !== null && $cur->post_excerpt_xhtml !== null - && $cur->post_content_xhtml !== null) - { - $words = - $cur->post_title.' '. - $cur->post_excerpt_xhtml.' '. - $cur->post_content_xhtml; - - $cur->post_words = implode(' ',text::splitWords($words)); - } - } - - private function getPostContent($cur,$post_id) - { - $post_excerpt = $cur->post_excerpt; - $post_excerpt_xhtml = $cur->post_excerpt_xhtml; - $post_content = $cur->post_content; - $post_content_xhtml = $cur->post_content_xhtml; - - $this->setPostContent( - $post_id,$cur->post_format,$cur->post_lang, - $post_excerpt,$post_excerpt_xhtml, - $post_content,$post_content_xhtml - ); - - $cur->post_excerpt = $post_excerpt; - $cur->post_excerpt_xhtml = $post_excerpt_xhtml; - $cur->post_content = $post_content; - $cur->post_content_xhtml = $post_content_xhtml; - } - - /** - Creates post HTML content, taking format and lang into account. - - @param post_id integer Post ID - @param format string Post format - @param lang string Post lang - @param excerpt string Post excerpt - @param[out] excerpt_xhtml string Post excerpt HTML - @param content string Post content - @param[out] content_xhtml string Post content HTML - */ - public function setPostContent($post_id,$format,$lang,&$excerpt,&$excerpt_xhtml,&$content,&$content_xhtml) - { - if ($format == 'wiki') - { - $this->core->initWikiPost(); - $this->core->wiki2xhtml->setOpt('note_prefix','pnote-'.$post_id); - if (strpos($lang,'fr') === 0) { - $this->core->wiki2xhtml->setOpt('active_fr_syntax',1); - } - } - - if ($excerpt) { - $excerpt_xhtml = $this->core->callFormater($format,$excerpt); - $excerpt_xhtml = $this->core->HTMLfilter($excerpt_xhtml); - } else { - $excerpt_xhtml = ''; - } - - if ($content) { - $content_xhtml = $this->core->callFormater($format,$content); - $content_xhtml = $this->core->HTMLfilter($content_xhtml); - } else { - $content_xhtml = ''; - } - - # --BEHAVIOR-- coreAfterPostContentFormat - $this->core->callBehavior('coreAfterPostContentFormat',array( - 'excerpt' => &$excerpt, - 'content' => &$content, - 'excerpt_xhtml' => &$excerpt_xhtml, - 'content_xhtml' => &$content_xhtml - )); - } - - /** - Returns URL for a post according to blog setting post_url_format. - It will try to guess URL and append some figures if needed. - - @param url string Origin URL, could be empty - @param post_dt string Post date (in YYYY-MM-DD HH:mm:ss) - @param post_title string Post title - @param post_id integer Post ID - @return string result URL - */ - public function getPostURL($url,$post_dt,$post_title,$post_id) - { - $url = trim($url); - - $url_patterns = array( - '{y}' => date('Y',strtotime($post_dt)), - '{m}' => date('m',strtotime($post_dt)), - '{d}' => date('d',strtotime($post_dt)), - '{t}' => text::tidyURL($post_title), - '{id}' => (integer) $post_id - ); - - # If URL is empty, we create a new one - if ($url == '') - { - # Transform with format - $url = str_replace( - array_keys($url_patterns), - array_values($url_patterns), - $this->settings->system->post_url_format - ); - } - else - { - $url = text::tidyURL($url); - } - - # Let's check if URL is taken... - $strReq = 'SELECT post_url FROM '.$this->prefix.'post '. - "WHERE post_url = '".$this->con->escape($url)."' ". - 'AND post_id <> '.(integer) $post_id. ' '. - "AND blog_id = '".$this->con->escape($this->id)."' ". - 'ORDER BY post_url DESC'; - - $rs = $this->con->select($strReq); - - if (!$rs->isEmpty()) - { - if ($this->con->driver() == 'mysql') { - $clause = "REGEXP '^".$this->con->escape($url)."[0-9]+$'"; - } elseif ($this->con->driver() == 'pgsql') { - $clause = "~ '^".$this->con->escape($url)."[0-9]+$'"; - } else { - $clause = "LIKE '".$this->con->escape($url)."%'"; - } - $strReq = 'SELECT post_url FROM '.$this->prefix.'post '. - "WHERE post_url ".$clause.' '. - 'AND post_id <> '.(integer) $post_id.' '. - "AND blog_id = '".$this->con->escape($this->id)."' ". - 'ORDER BY post_url DESC '; - - $rs = $this->con->select($strReq); - $a = array(); - while ($rs->fetch()) { - $a[] = $rs->post_url; - } - - natsort($a); - $t_url = end($a); - - if (preg_match('/(.*?)([0-9]+)$/',$t_url,$m)) { - $i = (integer) $m[2]; - $url = $m[1]; - } else { - $i = 1; - } - - return $url.($i+1); - } - - # URL is empty? - if ($url == '') { - throw new Exception(__('Empty entry URL')); - } - - return $url; - } - //@} - - /// @name Comments management methods - //@{ - /** - Retrieves comments. $params is an array taking the following - optionnal parameters: - - - no_content: Don't retrieve comment content - - post_type: Get only entries with given type (default no type, array for many types) - - post_id: (integer) Get comments belonging to given post_id - - cat_id: (integer or array) Get comments belonging to entries of given category ID - - comment_id: (integer) Get comment with given ID - - comment_status: (integer) Get comments with given comment_status - - comment_trackback: (integer) Get only comments (0) or trackbacks (1) - - comment_ip: (string) Get comments with given IP address - - post_url: Get entry with given post_url field - - user_id: (integer) Get entries belonging to given user ID - - q_author: Search comments by author - - sql: Append SQL string at the end of the query - - from: Append SQL string after "FROM" statement in query - - order: Order of results (default "ORDER BY comment_dt DES") - - limit: Limit parameter - - sql_only : return the sql request instead of results. Only ids are selected - - @param params array Parameters - @param count_only boolean Only counts results - @return record A record with some more capabilities - */ - public function getComments($params=array(),$count_only=false) - { - if ($count_only) - { - $strReq = 'SELECT count(comment_id) '; - } - elseif (!empty($params['sql_only'])) - { - $strReq = 'SELECT P.post_id '; - } - else - { - if (!empty($params['no_content'])) { - $content_req = ''; - } else { - $content_req = 'comment_content, '; - } - - if (!empty($params['columns']) && is_array($params['columns'])) { - $content_req .= implode(', ',$params['columns']).', '; - } - - $strReq = - 'SELECT C.comment_id, comment_dt, comment_tz, comment_upddt, '. - 'comment_author, comment_email, comment_site, '. - $content_req.' comment_trackback, comment_status, '. - 'comment_spam_status, comment_spam_filter, comment_ip, '. - 'P.post_title, P.post_url, P.post_id, P.post_password, P.post_type, '. - 'P.post_dt, P.user_id, U.user_email, U.user_url '; - } - - $strReq .= - 'FROM '.$this->prefix.'comment C '. - 'INNER JOIN '.$this->prefix.'post P ON C.post_id = P.post_id '. - 'INNER JOIN '.$this->prefix.'user U ON P.user_id = U.user_id '; - - if (!empty($params['from'])) { - $strReq .= $params['from'].' '; - } - - $strReq .= - "WHERE P.blog_id = '".$this->con->escape($this->id)."' "; - - if (!$this->core->auth->check('contentadmin',$this->id)) { - $strReq .= 'AND ((comment_status = 1 AND P.post_status = 1 '; - - if ($this->without_password) { - $strReq .= 'AND post_password IS NULL '; - } - $strReq .= ') '; - - if ($this->core->auth->userID()) { - $strReq .= "OR P.user_id = '".$this->con->escape($this->core->auth->userID())."')"; - } else { - $strReq .= ') '; - } - } - - if (!empty($params['post_type'])) - { - $strReq .= 'AND post_type '.$this->con->in($params['post_type']); - } - - if (isset($params['post_id']) && $params['post_id'] !== '') { - $strReq .= 'AND P.post_id = '.(integer) $params['post_id'].' '; - } - - if (isset($params['cat_id']) && $params['cat_id'] !== '') { - $strReq .= 'AND P.cat_id = '.(integer) $params['cat_id'].' '; - } - - if (isset($params['comment_id']) && $params['comment_id'] !== '') { - $strReq .= 'AND comment_id = '.(integer) $params['comment_id'].' '; - } - - if (isset($params['comment_status'])) { - $strReq .= 'AND comment_status = '.(integer) $params['comment_status'].' '; - } - - if (!empty($params['comment_status_not'])) - { - $strReq .= 'AND comment_status <> '.(integer) $params['comment_status_not'].' '; - } - - if (isset($params['comment_trackback'])) { - $strReq .= 'AND comment_trackback = '.(integer) (boolean) $params['comment_trackback'].' '; - } - - if (isset($params['comment_ip'])) { - $strReq .= "AND comment_ip = '".$this->con->escape($params['comment_ip'])."' "; - } - - if (isset($params['q_author'])) { - $q_author = $this->con->escape(str_replace('*','%',strtolower($params['q_author']))); - $strReq .= "AND LOWER(comment_author) LIKE '".$q_author."' "; - } - - if (!empty($params['search'])) - { - $words = text::splitWords($params['search']); - - if (!empty($words)) - { - # --BEHAVIOR coreCommentSearch - if ($this->core->hasBehavior('coreCommentSearch')) { - $this->core->callBehavior('coreCommentSearch',$this->core,array(&$words,&$strReq,&$params)); - } - - if ($words) - { - foreach ($words as $i => $w) { - $words[$i] = "comment_words LIKE '%".$this->con->escape($w)."%'"; - } - $strReq .= 'AND '.implode(' AND ',$words).' '; - } - } - } - - if (!empty($params['sql'])) { - $strReq .= $params['sql'].' '; - } - - if (!$count_only) - { - if (!empty($params['order'])) { - $strReq .= 'ORDER BY '.$this->con->escape($params['order']).' '; - } else { - $strReq .= 'ORDER BY comment_dt DESC '; - } - } - - if (!$count_only && !empty($params['limit'])) { - $strReq .= $this->con->limit($params['limit']); - } - - if (!empty($params['sql_only'])) { - return $strReq; - } - - $rs = $this->con->select($strReq); - $rs->core = $this->core; - $rs->extend('rsExtComment'); - - # --BEHAVIOR-- coreBlogGetComments - $this->core->callBehavior('coreBlogGetComments',$rs); - - return $rs; - } - - /** - Creates a new comment. Takes a cursor as input and returns the new comment - ID. - - @param cur cursor Comment cursor - @return integer New comment ID - */ - public function addComment($cur) - { - $this->con->writeLock($this->prefix.'comment'); - try - { - # Get ID - $rs = $this->con->select( - 'SELECT MAX(comment_id) '. - 'FROM '.$this->prefix.'comment ' - ); - - $cur->comment_id = (integer) $rs->f(0) + 1; - $cur->comment_upddt = date('Y-m-d H:i:s'); - - $offset = dt::getTimeOffset($this->settings->system->blog_timezone); - $cur->comment_dt = date('Y-m-d H:i:s',time() + $offset); - $cur->comment_tz = $this->settings->system->blog_timezone; - - $this->getCommentCursor($cur); - - if ($cur->comment_ip === null) { - $cur->comment_ip = http::realIP(); - } - - # --BEHAVIOR-- coreBeforeCommentCreate - $this->core->callBehavior('coreBeforeCommentCreate',$this,$cur); - - $cur->insert(); - $this->con->unlock(); - } - catch (Exception $e) - { - $this->con->unlock(); - throw $e; - } - - # --BEHAVIOR-- coreAfterCommentCreate - $this->core->callBehavior('coreAfterCommentCreate',$this,$cur); - - $this->triggerComment($cur->comment_id); - if ($cur->comment_status != -2) { - $this->triggerBlog(); - } - return $cur->comment_id; - } - - /** - Updates an existing comment. - - @param id integer Comment ID - @param cur cursor Comment cursor - */ - public function updComment($id,$cur) - { - if (!$this->core->auth->check('usage,contentadmin',$this->id)) { - throw new Exception(__('You are not allowed to update comments')); - } - - $id = (integer) $id; - - if (empty($id)) { - throw new Exception(__('No such comment ID')); - } - - $rs = $this->getComments(array('comment_id' => $id)); - - if ($rs->isEmpty()) { - throw new Exception(__('No such comment ID')); - } - - #If user is only usage, we need to check the post's owner - if (!$this->core->auth->check('contentadmin',$this->id)) - { - if ($rs->user_id != $this->core->auth->userID()) { - throw new Exception(__('You are not allowed to update this comment')); - } - } - - $this->getCommentCursor($cur); - - $cur->comment_upddt = date('Y-m-d H:i:s'); - - if (!$this->core->auth->check('publish,contentadmin',$this->id)) { - $cur->unsetField('comment_status'); - } - - # --BEHAVIOR-- coreBeforeCommentUpdate - $this->core->callBehavior('coreBeforeCommentUpdate',$this,$cur,$rs); - - $cur->update('WHERE comment_id = '.$id.' '); - - # --BEHAVIOR-- coreAfterCommentUpdate - $this->core->callBehavior('coreAfterCommentUpdate',$this,$cur,$rs); - - $this->triggerComment($id); - $this->triggerBlog(); - } - - /** - Updates comment status. - - @param id integer Comment ID - @param status integer Comment status - */ - public function updCommentStatus($id,$status) - { - if (!$this->core->auth->check('publish,contentadmin',$this->id)) { - throw new Exception(__("You are not allowed to change this comment's status")); - } - - $cur = $this->con->openCursor($this->prefix.'comment'); - $cur->comment_status = (integer) $status; - $this->updComment($id,$cur); - } - - /** - Delete a comment - - @param id integer Comment ID - */ - public function delComment($id) - { - if (!$this->core->auth->check('delete,contentadmin',$this->id)) { - throw new Exception(__('You are not allowed to delete comments')); - } - - $id = (integer) $id; - - if (empty($id)) { - throw new Exception(__('No such comment ID')); - } - - #If user can only delete, we need to check the post's owner - if (!$this->core->auth->check('contentadmin',$this->id)) - { - $strReq = 'SELECT P.post_id '. - 'FROM '.$this->prefix.'post P, '.$this->prefix.'comment C '. - 'WHERE P.post_id = C.post_id '. - "AND P.blog_id = '".$this->con->escape($this->id)."' ". - 'AND comment_id = '.$id.' '. - "AND user_id = '".$this->con->escape($this->core->auth->userID())."' "; - - $rs = $this->con->select($strReq); - - if ($rs->isEmpty()) { - throw new Exception(__('You are not allowed to delete this comment')); - } - } - - $strReq = 'DELETE FROM '.$this->prefix.'comment '. - 'WHERE comment_id = '.$id.' '; - - $this->triggerComment($id,true); - $this->con->execute($strReq); - $this->triggerBlog(); - } - - private function getCommentCursor($cur) - { - if ($cur->comment_content !== null && $cur->comment_content == '') { - throw new Exception(__('You must provide a comment')); - } - - if ($cur->comment_author !== null && $cur->comment_author == '') { - throw new Exception(__('You must provide an author name')); - } - - if ($cur->comment_email != '' && !text::isEmail($cur->comment_email)) { - throw new Exception(__('Email address is not valid.')); - } - - if ($cur->comment_site !== null && $cur->comment_site != '') { - if (!preg_match('|^http(s?)://|',$cur->comment_site)) { - $cur->comment_site = 'http://'.$cur->comment_site; - } - } - - if ($cur->comment_status === null) { - $cur->comment_status = (integer) $this->settings->system->comments_pub; - } - - # Words list - if ($cur->comment_content !== null) - { - $cur->comment_words = implode(' ',text::splitWords($cur->comment_content)); - } - } - //@} -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/core/class.dc.categories.php b/v2/dotclear/inc/core/class.dc.categories.php deleted file mode 100644 index 1dacf94..0000000 --- a/v2/dotclear/inc/core/class.dc.categories.php +++ /dev/null @@ -1,483 +0,0 @@ -core =& $core; - $this->con =& $core->con; - $this->blog_id = $core->blog->id; - $this->table = $core->prefix.'category'; - $this->add_condition = array('blog_id' => "'".$this->con->escape($this->blog_id)."'"); - } - - public function getChildren($start=0,$id=null,$sort='asc',$fields=array()) - { - $fields = array_merge(array('cat_title','cat_url','cat_desc'),$fields); - return parent::getChildren($start,$id,$sort,$fields); - } - - public function getParents($id,$fields=array()) - { - $fields = array_merge(array('cat_title','cat_url','cat_desc'),$fields); - return parent::getParents($id,$fields); - } - - public function getParent($id,$fields=array()) - { - $fields = array_merge(array('cat_title','cat_url','cat_desc'),$fields); - return parent::getParent($id,$fields); - } -} - -abstract class nestedTree -{ - protected $con; - - protected $table; - protected $f_left; - protected $f_right; - protected $f_id; - - protected $add_condition = array(); - - protected $parents; - - public function __construct($con) - { - $this->con =& $con; - } - - public function getChildren($start=0,$id=null,$sort='asc',$fields=array()) - { - $fields = count($fields) > 0 ? ', C2.'.implode(', C2.',$fields) : ''; - - $sql = 'SELECT C2.'.$this->f_id.', C2.'.$this->f_left.', C2.'.$this->f_right.', COUNT(C1.'.$this->f_id.') AS level ' - . $fields.' ' - . 'FROM '.$this->table.' AS C1, '.$this->table.' AS C2 %s ' - . 'WHERE C2.'.$this->f_left.' BETWEEN C1.'.$this->f_left.' AND C1.'.$this->f_right.' ' - . ' %s ' - . $this->getCondition('AND','C2.') - . $this->getCondition('AND','C1.') - . 'GROUP BY C2.'.$this->f_id.', C2.'.$this->f_left.', C2.'.$this->f_right.' '.$fields.' ' - . ' %s ' - . 'ORDER BY C2.'.$this->f_left.' '.($sort == 'asc' ? 'ASC' : 'DESC').' '; - - $from = $where = ''; - if ($start > 0) { - $from = ', '.$this->table.' AS C3'; - $where = 'AND C3.'.$this->f_id.' = '.(integer) $start.' AND C1.'.$this->f_left.' >= C3.'.$this->f_left.' AND C1.'.$this->f_right.' <= C3.'.$this->f_right; - $where .= $this->getCondition('AND','C3.'); - } - - $having = ''; - if ($id !== null) { - $having = ' HAVING C2.'.$this->f_id.' = '.(integer) $id; - } - - $sql = sprintf($sql,$from,$where,$having); - - return $this->con->select($sql); - } - - public function getParents($id,$fields=array()) - { - $fields = count($fields) > 0 ? ', C1.'.implode(', C1.',$fields) : ''; - - return $this->con->select( - 'SELECT C1.'.$this->f_id.' '.$fields.' ' - . 'FROM '.$this->table.' C1, '.$this->table.' C2 ' - . 'WHERE C2.'.$this->f_id.' = '.(integer) $id.' ' - . 'AND C1.'.$this->f_left.' < C2.'.$this->f_left.' ' - . 'AND C1.'.$this->f_right.' > C2.'.$this->f_right.' ' - . $this->getCondition('AND','C2.') - . $this->getCondition('AND','C1.') - . 'ORDER BY C1.'.$this->f_left.' ASC ' - ); - } - - public function getParent($id,$fields=array()) - { - $fields = count($fields) > 0 ? ', C1.'.implode(', C1.',$fields) : ''; - - return $this->con->select( - 'SELECT C1.'.$this->f_id.' '.$fields.' ' - . 'FROM '.$this->table.' C1, '.$this->table.' C2 ' - . 'WHERE C2.'.$this->f_id.' = '.(integer) $id.' ' - . 'AND C1.'.$this->f_left.' < C2.'.$this->f_left.' ' - . 'AND C1.'.$this->f_right.' > C2.'.$this->f_right.' ' - . $this->getCondition('AND','C2.') - . $this->getCondition('AND','C1.') - . 'ORDER BY C1.'.$this->f_left.' DESC ' - . $this->con->limit(1) - ); - } - - /* ------------------------------------------------ - * Tree manipulations - * ---------------------------------------------- */ - public function addNode($data,$target=0) - { - if (!is_array($data) && !($data instanceof cursor)) { - throw new Exception('Invalid data block'); - } - - if (is_array($data)) - { - $D = $data; - $data = $this->con->openCursor($this->table); - foreach ($D as $k => $v) { - $data->{$k} = $v; - } - unset($D); - } - - # We want to put it at the end - $this->con->writeLock($this->table); - try - { - $rs = $this->con->select('SELECT MAX('.$this->f_id.') as n_id FROM '.$this->table); - $id = $rs->n_id; - - $rs = $this->con->select( - 'SELECT MAX('.$this->f_right.') as n_r '. - 'FROM '.$this->table. - $this->getCondition('WHERE') - ); - $last = $rs->n_r == 0 ? 1 : $rs->n_r; - - $data->{$this->f_id} = $id+1; - $data->{$this->f_left} = $last+1; - $data->{$this->f_right} = $last+2; - - $data->insert(); - $this->con->unlock(); - try { - $this->setNodeParent($id+1,$target); - return $data->{$this->f_id}; - } catch (Exception $e) {} # We don't mind error in this case - } - catch (Exception $e) - { - $this->con->unlock(); - throw $e; - } - } - - public function deleteNode($node,$keep_children=true) - { - $node = (integer) $node; - - $rs = $this->getChildren(0,$node); - if ($rs->isEmpty()) { - throw new Exception('Node does not exist.'); - } - $node_left = (integer) $rs->{$this->f_left}; - $node_right = (integer) $rs->{$this->f_right}; - - try - { - $this->con->begin(); - - if ($keep_children) - { - $this->con->execute('DELETE FROM '.$this->table.' WHERE '.$this->f_id.' = '.$node); - - $sql = 'UPDATE '.$this->table.' SET ' - . $this->f_right.' = CASE ' - . 'WHEN '.$this->f_right.' BETWEEN '.$node_left.' AND '.$node_right.' ' - . 'THEN '.$this->f_right.' - 1 ' - . 'WHEN '.$this->f_right.' > '.$node_right.' ' - . 'THEN '.$this->f_right.' - 2 ' - . 'ELSE '.$this->f_right.' ' - . 'END, ' - . $this->f_left.' = CASE ' - . 'WHEN '.$this->f_left.' BETWEEN '.$node_left.' AND '.$node_right.' ' - . 'THEN '.$this->f_left.' - 1 ' - . 'WHEN '.$this->f_left.' > '.$node_right.' ' - . 'THEN '.$this->f_left.' - 2 ' - . 'ELSE '.$this->f_left.' ' - . 'END ' - . 'WHERE '.$this->f_right.' > '.$node_left - . $this->getCondition(); - - $this->con->execute($sql); - } - else - { - $this->con->execute('DELETE FROM '.$this->table.' WHERE '.$this->f_left.' BETWEEN '.$node_left.' AND '.$node_right); - - $node_delta = $node_right - $node_left + 1; - $sql = 'UPDATE '.$this->table.' SET ' - . $this->f_left.' = CASE ' - . 'WHEN '.$this->f_left.' > '.$node_left.' ' - . 'THEN '.$this->f_left.' - ('.$node_delta.') ' - . 'ELSE '.$this->f_left.' ' - . 'END, ' - . $this->f_right.' = CASE ' - . 'WHEN '.$this->f_right.' > '.$node_left.' ' - . 'THEN '.$this->f_right.' - ('.$node_delta.') ' - . 'ELSE '.$this->f_right.' ' - . 'END ' - . 'WHERE '.$this->f_right.' > '.$node_right - . $this->getCondition(); - } - - $this->con->commit(); - } - catch (Exception $e) - { - $this->con->rollback(); - throw $e; - } - } - - public function resetOrder() - { - $rs = $this->con->select( - 'SELECT '.$this->f_id.' ' - .'FROM '.$this->table.' ' - .$this->getCondition('WHERE') - .'ORDER BY '.$this->f_left.' ASC ' - ); - - $lft = 2; - $this->con->begin(); - try - { - while ($rs->fetch()) { - $this->con->execute( - 'UPDATE '.$this->table.' SET ' - .$this->f_left.' = '.($lft++).', ' - .$this->f_right.' = '.($lft++).' ' - .'WHERE '.$this->f_id .' = '.(integer) $rs->{$this->f_id}.' ' - .$this->getCondition() - ); - } - $this->con->commit(); - } - catch (Exception $e) - { - $this->con->rollback(); - throw $e; - } - } - - public function setNodeParent($node,$target=0) - { - if ($node == $target) { - return; - } - $node = (integer) $node; - $target = (integer) $target; - - $rs = $this->getChildren(0,$node); - if ($rs->isEmpty()) { - throw new Exception('Node does not exist.'); - } - $node_left = (integer) $rs->{$this->f_left}; - $node_right = (integer) $rs->{$this->f_right}; - $node_level = (integer) $rs->level; - - if ($target > 0) - { - $rs = $this->getChildren(0,$target); - } - else - { - $rs = $this->con->select( - 'SELECT MIN('.$this->f_left.')-1 AS '.$this->f_left.', MAX('.$this->f_right.')+1 AS '.$this->f_right.', 0 AS level '. - 'FROM '.$this->table.' '. - $this->getCondition('WHERE') - ); - } - $target_left = (integer) $rs->{$this->f_left}; - $target_right = (integer) $rs->{$this->f_right}; - $target_level = (integer) $rs->level; - - if ($node_left == $target_left - || ($target_left >= $node_left && $target_left <= $node_right) - || ($node_level == $target_level+1 && $node_left > $target_left && $node_right < $target_right) - ) - { - throw new Exception('Cannot move tree'); - } - - if ($target_left < $node_left && $target_right > $node_right && $target_level < $node_level -1) - { - $sql = 'UPDATE '.$this->table.' SET ' - . $this->f_right.' = CASE ' - . 'WHEN '.$this->f_right.' BETWEEN '.($node_right+1).' AND '.($target_right-1).' ' - . 'THEN '.$this->f_right.'-('.($node_right-$node_left+1).') ' - . 'WHEN '.$this->f_left.' BETWEEN '.$node_left.' AND '.$node_right.' ' - . 'THEN '.$this->f_right.'+'.((($target_right-$node_right-$node_level+$target_level)/2)*2+$node_level-$target_level-1).' ' - . 'ELSE ' - . $this->f_right.' ' - . 'END, ' - . $this->f_left.' = CASE ' - . 'WHEN '.$this->f_left.' BETWEEN '.($node_right+1).' AND '.($target_right-1).' ' - . 'THEN '.$this->f_left.'-('.($node_right-$node_left+1).') ' - . 'WHEN '.$this->f_left.' BETWEEN '.$node_left.' AND '.$node_right.' ' - . 'THEN '.$this->f_left.'+'.((($target_right-$node_right-$node_level+$target_level)/2)*2+$node_level-$target_level-1).' ' - . 'ELSE '.$this->f_left.' ' - . 'END ' - . 'WHERE '.$this->f_left.' BETWEEN '.($target_left+1).' AND '.($target_right-1).''; - } - elseif ($target_left < $node_left) - { - $sql = 'UPDATE '.$this->table.' SET ' - . $this->f_left.' = CASE ' - . 'WHEN '.$this->f_left.' BETWEEN '.$target_right.' AND '.($node_left-1).' ' - . 'THEN '.$this->f_left.'+'.($node_right-$node_left+1).' ' - . 'WHEN '.$this->f_left.' BETWEEN '.$node_left.' AND '.$node_right.' ' - . 'THEN '.$this->f_left.'-('.($node_left-$target_right).') ' - . 'ELSE '.$this->f_left .' ' - . 'END, ' - . $this->f_right.' = CASE ' - . 'WHEN '.$this->f_right.' BETWEEN '.$target_right.' AND '.$node_left.' ' - . 'THEN '.$this->f_right.'+'.($node_right-$node_left+1).' ' - . 'WHEN '.$this->f_right.' BETWEEN '.$node_left.' AND '.$node_right.' ' - . 'THEN '.$this->f_right.'-('.($node_left-$target_right).') ' - . 'ELSE '.$this->f_right.' ' - . 'END ' - . 'WHERE ('.$this->f_left.' BETWEEN '.$target_left.' AND '.$node_right. ' ' - . 'OR '.$this->f_right.' BETWEEN '.$target_left.' AND '.$node_right.')'; - } - else - { - $sql = 'UPDATE '.$this->table.' SET ' - . $this->f_left.' = CASE ' - . 'WHEN '.$this->f_left.' BETWEEN '.$node_right.' AND '.$target_right.' ' - . 'THEN '.$this->f_left.'-'.($node_right-$node_left+1).' ' - . 'WHEN '.$this->f_left.' BETWEEN '.$node_left.' AND '.$node_right.' ' - . 'THEN '.$this->f_left.'+'.($target_right-1-$node_right).' ' - . 'ELSE '.$this->f_left.' ' - . 'END, ' - . $this->f_right.' = CASE ' - . 'WHEN '.$this->f_right.' BETWEEN '.($node_right+1).' AND '.($target_right-1).' ' - . 'THEN '.$this->f_right.'-'.($node_right-$node_left+1).' ' - . 'WHEN '.$this->f_right.' BETWEEN '.$node_left.' AND '.$node_right.' ' - . 'THEN '.$this->f_right.'+'.($target_right-1-$node_right).' ' - . 'ELSE '.$this->f_right.' ' - . 'END ' - . 'WHERE ('.$this->f_left.' BETWEEN '.$node_left.' AND '.$target_right.' ' - . 'OR '.$this->f_right.' BETWEEN '.$node_left.' AND '.$target_right.')'; - } - - $sql .= ' '.$this->getCondition(); - - $this->con->execute($sql); - } - - public function setNodePosition($nodeA,$nodeB,$position='after') - { - $nodeA = (integer) $nodeA; - $nodeB = (integer) $nodeB; - - $rs = $this->getChildren(0,$nodeA); - if ($rs->isEmpty()) { - throw new Exception('Node does not exist.'); - } - $A_left = $rs->{$this->f_left}; - $A_right = $rs->{$this->f_right}; - $A_level = $rs->level; - - $rs = $this->getChildren(0,$nodeB); - if ($rs->isEmpty()) { - throw new Exception('Node does not exist.'); - } - $B_left = $rs->{$this->f_left}; - $B_right = $rs->{$this->f_right}; - $B_level = $rs->level; - - if ($A_level != $B_level) { - throw new Exception('Cannot change position'); - } - - $rs = $this->getParents($nodeA); - $parentA = $rs->isEmpty() ? 0 : $rs->{$this->f_id}; - $rs = $this->getParents($nodeB); - $parentB = $rs->isEmpty() ? 0 : $rs->{$this->f_id}; - - if ($parentA != $parentB) { - throw new Exception('Cannot change position'); - } - - if ($position == 'before') - { - if ($A_left > $B_left) { - $sql = 'UPDATE '.$this->table.' SET ' - . $this->f_right.' = CASE WHEN '.$this->f_left.' BETWEEN '.$A_left.' AND '.$A_right.' THEN '.$this->f_right.' - ('.($A_left - $B_left).') ' - . 'WHEN '.$this->f_left.' BETWEEN '.$B_left.' AND '.($A_left - 1).' THEN '.$this->f_right.' + '.($A_right - $A_left + 1).' ELSE '.$this->f_right.' END, ' - . $this->f_left.' = CASE WHEN '.$this->f_left.' BETWEEN '.$A_left.' AND '.$A_right.' THEN '.$this->f_left.' - ('.($A_left - $B_left).') ' - . 'WHEN '.$this->f_left.' BETWEEN '.$B_left.' AND '.($A_left - 1).' THEN '.$this->f_left.' + '.($A_right - $A_left + 1).' ELSE '.$this->f_left.' END ' - . 'WHERE '.$this->f_left.' BETWEEN '.$B_left.' AND '.$A_right; - } else { - $sql = 'UPDATE '.$this->table.' SET ' - . $this->f_right.' = CASE WHEN '.$this->f_left.' BETWEEN '.$A_left.' AND '.$A_right.' THEN '.$this->f_right.' + '.(($B_left - $A_left) - ($A_right - $A_left + 1)).' ' - . 'WHEN '.$this->f_left.' BETWEEN '.($A_right + 1).' AND '.($B_left - 1).' THEN '.$this->f_right.' - ('.(($A_right - $A_left + 1)).') ELSE '.$this->f_right.' END, ' - . $this->f_left.' = CASE WHEN '.$this->f_left.' BETWEEN '.$A_left.' AND '.$A_right.' THEN '.$this->f_left.' + '.(($B_left - $A_left) - ($A_right - $A_left + 1)).' ' - . 'WHEN '.$this->f_left.' BETWEEN '.($A_right + 1).' AND '.($B_left - 1).' THEN '.$this->f_left.' - ('.($A_right - $A_left + 1).') ELSE '.$this->f_left.' END ' - . 'WHERE '.$this->f_left.' BETWEEN '.$A_left.' AND '.($B_left - 1); - } - } - else - { - if ($A_left > $B_left) { - $sql = 'UPDATE '.$this->table.' SET ' - . $this->f_right.' = CASE WHEN '.$this->f_left.' BETWEEN '.$A_left.' AND '.$A_right.' THEN '.$this->f_right.' - ('.($A_left - $B_left - ($B_right - $B_left + 1)).') ' - . 'WHEN '.$this->f_left.' BETWEEN '.($B_right + 1).' AND '.($A_left - 1).' THEN '.$this->f_right.' + '.($A_right - $A_left + 1).' ELSE '.$this->f_right.' END, ' - . $this->f_left.' = CASE WHEN '.$this->f_left.' BETWEEN '.$A_left.' AND '.$A_right.' THEN '.$this->f_left.' - ('.($A_left - $B_left - ($B_right - $B_left + 1)).') ' - . 'WHEN '.$this->f_left.' BETWEEN '.($B_right + 1).' AND '.($A_left - 1).' THEN '.$this->f_left.' + '.($A_right - $A_left + 1).' ELSE '.$this->f_left.' END ' - . 'WHERE '.$this->f_left.' BETWEEN '.($B_right + 1).' AND '.$A_right; - } else { - $sql = 'UPDATE '.$this->table.' SET ' - . $this->f_right.' = CASE WHEN '.$this->f_left.' BETWEEN '.$A_left.' AND '.$A_right.' THEN '.$this->f_right.' + '.($B_right - $A_right).' ' - . 'WHEN '.$this->f_left.' BETWEEN '.($A_right + 1).' AND '.$B_right.' THEN '.$this->f_right.' - ('.(($A_right - $A_left + 1)).') ELSE '.$this->f_right.' END, ' - . $this->f_left.' = CASE WHEN '.$this->f_left.' BETWEEN '.$A_left.' AND '.$A_right.' THEN '.$this->f_left.' + '.($B_right - $A_right).' ' - . 'WHEN '.$this->f_left.' BETWEEN '.($A_right + 1).' AND '.$B_right.' THEN '.$this->f_left.' - ('.($A_right - $A_left + 1).') ELSE '.$this->f_left.' END ' - . 'WHERE '.$this->f_left.' BETWEEN '.$A_left.' AND '.$B_right; - } - } - - $sql .= $this->getCondition(); - $this->con->execute($sql); - } - - protected function getCondition($start='AND',$prefix='') - { - if (empty($this->add_condition)) { - return ''; - } - - $w = array(); - foreach ($this->add_condition as $c => $n) { - $w[] = $prefix.$c.' = '.$n; - } - return ' '.$start.' '.implode(' AND ',$w).' '; - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/core/class.dc.core.php b/v2/dotclear/inc/core/class.dc.core.php deleted file mode 100644 index d7d5acf..0000000 --- a/v2/dotclear/inc/core/class.dc.core.php +++ /dev/null @@ -1,1467 +0,0 @@ -connection Database connection object - public $prefix; ///< string Database tables prefix - public $blog; ///< dcBlog dcBlog object - public $error; ///< dcError dcError object - public $auth; ///< dcAuth dcAuth object - public $session; ///< sessionDB sessionDB object - public $url; ///< urlHandler urlHandler object - public $wiki2xhtml; ///< wiki2xhtml wiki2xhtml object - public $plugins; ///< dcModules dcModules object - public $media; ///< dcMedia dcMedia object - public $postmedia; ///< dcPostMedia dcPostMedia object - public $rest; ///< dcRestServer dcRestServer object - public $log; ///< dcLog dcLog object - - private $versions = null; - private $formaters = array(); - private $behaviors = array(); - private $post_types = array(); - - /** - dcCore constructor inits everything related to Dotclear. It takes arguments - to init database connection. - - @param driver string Database driver name - @param host string Database hostname - @param db string Database name - @param user string Database username - @param password string Database password - @param prefix string DotClear tables prefix - @param persist boolean Persistent database connection - */ - public function __construct($driver, $host, $db, $user, $password, $prefix, $persist) - { - $this->con = dbLayer::init($driver,$host,$db,$user,$password,$persist); - - # define weak_locks for mysql - if ($this->con instanceof mysqlConnection) { - mysqlConnection::$weak_locks = true; - } - - # define searchpath for postgresql - if ($this->con instanceof pgsqlConnection) - { - $searchpath = explode ('.',$prefix,2); - if (count($searchpath) > 1) - { - $prefix = $searchpath[1]; - $sql = 'SET search_path TO '.$searchpath[0].',public;'; - $this->con->execute($sql); - } - } - - $this->prefix = $prefix; - - $this->error = new dcError(); - $this->auth = $this->authInstance(); - $this->session = new sessionDB($this->con,$this->prefix.'session',DC_SESSION_NAME,'',null,DC_ADMIN_SSL); - $this->url = new dcUrlHandlers(); - - $this->plugins = new dcModules($this); - - $this->rest = new dcRestServer($this); - - $this->meta = new dcMeta($this); - - $this->log = new dcLog($this); - - $this->addFormater('xhtml', create_function('$s','return $s;')); - $this->addFormater('wiki', array($this,'wikiTransform')); - } - - private function authInstance() - { - # You can set DC_AUTH_CLASS to whatever you want. - # Your new class *should* inherits dcAuth. - if (!defined('DC_AUTH_CLASS')) { - $c = 'dcAuth'; - } else { - $c = DC_AUTH_CLASS; - } - - if (!class_exists($c)) { - throw new Exception('Authentication class '.$c.' does not exist.'); - } - - if ($c != 'dcAuth' && !is_subclass_of($c,'dcAuth')) { - throw new Exception('Authentication class '.$c.' does not inherit dcAuth.'); - } - - return new $c($this); - } - - - /// @name Blog init methods - //@{ - /** - Sets a blog to use in blog property. - - @param id string Blog ID - */ - public function setBlog($id) - { - $this->blog = new dcBlog($this, $id); - } - - /** - Unsets blog property. - */ - public function unsetBlog() - { - $this->blog = null; - } - //@} - - - /// @name Blog status methods - //@{ - /** - Returns an array of available blog status codes and names. - - @return array Simple array with codes in keys and names in value - */ - public function getAllBlogStatus() - { - return array( - 1 => __('online'), - 0 => __('offline'), - -1 => __('removed') - ); - } - - /** - Returns a blog status name given to a code. This is intended to be - human-readable and will be translated, so never use it for tests. - If status code does not exist, returns offline. - - @param s integer Status code - @return string Blog status name - */ - public function getBlogStatus($s) - { - $r = $this->getAllBlogStatus(); - if (isset($r[$s])) { - return $r[$s]; - } - return $r[0]; - } - //@} - - /// @name Admin nonce secret methods - //@{ - - public function getNonce() - { - return crypt::hmac(DC_MASTER_KEY,session_id()); - } - - public function checkNonce($secret) - { - if (!preg_match('/^([0-9a-f]{40,})$/i',$secret)) { - return false; - } - - return $secret == crypt::hmac(DC_MASTER_KEY,session_id()); - } - - public function formNonce() - { - if (!session_id()) { - return; - } - - return form::hidden(array('xd_check'),$this->getNonce()); - } - //@} - - - /// @name Text Formatters methods - //@{ - /** - Adds a new text formater which will call the function $func to - transform text. The function must be a valid callback and takes one - argument: the string to transform. It returns the transformed string. - - @param name string Formater name - @param func callback Function to use, must be a valid and callable callback - */ - public function addFormater($name,$func) - { - if (is_callable($func)) { - $this->formaters[$name] = $func; - } - } - - /** - Returns formaters list. - - @return array An array of formaters names in values. - */ - public function getFormaters() - { - return array_keys($this->formaters); - } - - /** - If $name is a valid formater, it returns $str - transformed using that formater. - - @param name string Formater name - @param str string String to transform - @return string String transformed - */ - public function callFormater($name,$str) - { - if (isset($this->formaters[$name])) { - return call_user_func($this->formaters[$name],$str); - } - - return $str; - } - //@} - - - /// @name Behaviors methods - //@{ - /** - Adds a new behavior to behaviors stack. $func must be a valid - and callable callback. - - @param behavior string Behavior name - @param func callback Function to call - */ - public function addBehavior($behavior,$func) - { - if (is_callable($func)) { - $this->behaviors[$behavior][] = $func; - } - } - - /** - Tests if a particular behavior exists in behaviors stack. - - @param behavior string Behavior name - @return boolean - */ - public function hasBehavior($behavior) - { - return isset($this->behaviors[$behavior]); - } - - /** - Get behaviors stack (or part of). - - @param behavior string Behavior name - @return array - */ - public function getBehaviors($behavior='') - { - if (empty($this->behaviors)) return null; - - if ($behavior == '') { - return $this->behaviors; - } elseif (isset($this->behaviors[$behavior])) { - return $this->behaviors[$behavior]; - } - - return array(); - } - - /** - Calls every function in behaviors stack for a given behavior and returns - concatened result of each function. - - Every parameters added after $behavior will be pass to - behavior calls. - - @param behavior string Behavior name - @return string Behavior concatened result - */ - public function callBehavior($behavior) - { - if (isset($this->behaviors[$behavior])) - { - $args = func_get_args(); - array_shift($args); - - $res = ''; - - foreach ($this->behaviors[$behavior] as $f) { - $res .= call_user_func_array($f,$args); - } - - return $res; - } - } - //@} - - /// @name Post types URLs management - //@{ - public function getPostAdminURL($type,$post_id,$escaped=true) - { - if (!isset($this->post_types[$type])) { - $type = 'post'; - } - - $url = sprintf($this->post_types[$type]['admin_url'],$post_id); - return $escaped ? html::escapeURL($url) : $url; - } - - public function getPostPublicURL($type,$post_url,$escaped=true) - { - if (!isset($this->post_types[$type])) { - $type = 'post'; - } - - $url = sprintf($this->post_types[$type]['public_url'],$post_url); - return $escaped ? html::escapeURL($url) : $url; - } - - public function setPostType($type,$admin_url,$public_url) - { - $this->post_types[$type] = array( - 'admin_url' => $admin_url, - 'public_url' => $public_url - ); - } - - public function getPostTypes() - { - return $this->post_types; - } - //@} - - /// @name Versions management methods - //@{ - /** - Returns a given $module version. - - @param module string Module name - @return string Module version - */ - public function getVersion($module='core') - { - # Fetch versions if needed - if (!is_array($this->versions)) - { - $strReq = 'SELECT module, version FROM '.$this->prefix.'version'; - $rs = $this->con->select($strReq); - - while ($rs->fetch()) { - $this->versions[$rs->module] = $rs->version; - } - } - - if (isset($this->versions[$module])) { - return $this->versions[$module]; - } else { - return null; - } - } - - /** - Sets $version to given $module. - - @param module string Module name - @param version string Module version - */ - public function setVersion($module,$version) - { - $cur_version = $this->getVersion($module); - - $cur = $this->con->openCursor($this->prefix.'version'); - $cur->module = (string) $module; - $cur->version = (string) $version; - - if ($cur_version === null) { - $cur->insert(); - } else { - $cur->update("WHERE module='".$this->con->escape($module)."'"); - } - - $this->versions[$module] = $version; - } - - /** - Removes given $module version entry. - - @param module string Module name - */ - public function delVersion($module) - { - $strReq = - 'DELETE FROM '.$this->prefix.'version '. - "WHERE module = '".$this->con->escape($module)."' "; - - $this->con->execute($strReq); - - if (is_array($this->versions)) { - unset($this->versions[$module]); - } - } - - //@} - - /// @name Users management methods - //@{ - /** - Returns a user by its ID. - - @param id string User ID - @return record - */ - public function getUser($id) - { - $params['user_id'] = $id; - - return $this->getUsers($params); - } - - /** - Returns a users list. $params is an array with the following - optionnal parameters: - - - q: search string (on user_id, user_name, user_firstname) - - user_id: user ID - - order: ORDER BY clause (default: user_id ASC) - - limit: LIMIT clause (should be an array ![limit,offset]) - - @param params array Parameters - @param count_only boolean Only counts results - @return record - */ - public function getUsers($params=array(),$count_only=false) - { - if ($count_only) - { - $strReq = - 'SELECT count(U.user_id) '. - 'FROM '.$this->prefix.'user U '. - 'WHERE NULL IS NULL '; - } - else - { - $strReq = - 'SELECT U.user_id,user_super,user_status,user_pwd,user_change_pwd,'. - 'user_name,user_firstname,user_displayname,user_email,user_url,'. - 'user_desc, user_lang,user_tz, user_post_status,user_options, '. - 'count(P.post_id) AS nb_post '. - 'FROM '.$this->prefix.'user U '. - 'LEFT JOIN '.$this->prefix.'post P ON U.user_id = P.user_id '. - 'WHERE NULL IS NULL '; - } - - if (!empty($params['q'])) { - $q = $this->con->escape(str_replace('*','%',strtolower($params['q']))); - $strReq .= 'AND ('. - "LOWER(U.user_id) LIKE '".$q."' ". - "OR LOWER(user_name) LIKE '".$q."' ". - "OR LOWER(user_firstname) LIKE '".$q."' ". - ') '; - } - - if (!empty($params['user_id'])) { - $strReq .= "AND U.user_id = '".$this->con->escape($params['user_id'])."' "; - } - - if (!$count_only) { - $strReq .= 'GROUP BY U.user_id,user_super,user_status,user_pwd,user_change_pwd,'. - 'user_name,user_firstname,user_displayname,user_email,user_url,'. - 'user_desc, user_lang,user_tz,user_post_status,user_options '; - - if (!empty($params['order']) && !$count_only) { - $strReq .= 'ORDER BY '.$this->con->escape($params['order']).' '; - } else { - $strReq .= 'ORDER BY U.user_id ASC '; - } - } - - if (!$count_only && !empty($params['limit'])) { - $strReq .= $this->con->limit($params['limit']); - } - - $rs = $this->con->select($strReq); - $rs->extend('rsExtUser'); - return $rs; - } - - /** - Create a new user. Takes a cursor as input and returns the new user ID. - - @param cur cursor User cursor - @return string - */ - public function addUser($cur) - { - if (!$this->auth->isSuperAdmin()) { - throw new Exception(__('You are not an administrator')); - } - - if ($cur->user_id == '') { - throw new Exception(__('No user ID given')); - } - - if ($cur->user_pwd == '') { - throw new Exception(__('No password given')); - } - - $this->getUserCursor($cur); - - if ($cur->user_creadt === null) { - $cur->user_creadt = date('Y-m-d H:i:s'); - } - - $cur->insert(); - - $this->auth->afterAddUser($cur); - - return $cur->user_id; - } - - /** - Updates an existing user. Returns the user ID. - - @param id string User ID - @param cur cursor User cursor - @return string - */ - public function updUser($id,$cur) - { - $this->getUserCursor($cur); - - if (($cur->user_id !== null || $id != $this->auth->userID()) && - !$this->auth->isSuperAdmin()) { - throw new Exception(__('You are not an administrator')); - } - - $cur->update("WHERE user_id = '".$this->con->escape($id)."' "); - - $this->auth->afterUpdUser($id,$cur); - - if ($cur->user_id !== null) { - $id = $cur->user_id; - } - - # Updating all user's blogs - $rs = $this->con->select( - 'SELECT DISTINCT(blog_id) FROM '.$this->prefix.'post '. - "WHERE user_id = '".$this->con->escape($id)."' " - ); - - while ($rs->fetch()) { - $b = new dcBlog($this,$rs->blog_id); - $b->triggerBlog(); - unset($b); - } - - return $id; - } - - /** - Deletes a user. - - @param id string User ID - */ - public function delUser($id) - { - if (!$this->auth->isSuperAdmin()) { - throw new Exception(__('You are not an administrator')); - } - - if ($id == $this->auth->userID()) { - return; - } - - $rs = $this->getUser($id); - - if ($rs->nb_post > 0) { - return; - } - - $strReq = 'DELETE FROM '.$this->prefix.'user '. - "WHERE user_id = '".$this->con->escape($id)."' "; - - $this->con->execute($strReq); - - $this->auth->afterDelUser($id); - } - - /** - Checks whether a user exists. - - @param id string User ID - @return boolean - */ - public function userExists($id) - { - $strReq = 'SELECT user_id '. - 'FROM '.$this->prefix.'user '. - "WHERE user_id = '".$this->con->escape($id)."' "; - - $rs = $this->con->select($strReq); - - return !$rs->isEmpty(); - } - - /** - Returns all user permissions as an array which looks like: - - - [blog_id] - - [name] => Blog name - - [url] => Blog URL - - [p] - - [permission] => true - - ... - - @param id string User ID - @return array - */ - public function getUserPermissions($id) - { - $strReq = 'SELECT B.blog_id, blog_name, blog_url, permissions '. - 'FROM '.$this->prefix.'permissions P '. - 'INNER JOIN '.$this->prefix.'blog B ON P.blog_id = B.blog_id '. - "WHERE user_id = '".$this->con->escape($id)."' "; - - $rs = $this->con->select($strReq); - - $res = array(); - - while ($rs->fetch()) - { - $res[$rs->blog_id] = array( - 'name' => $rs->blog_name, - 'url' => $rs->blog_url, - 'p' => $this->auth->parsePermissions($rs->permissions) - ); - } - - return $res; - } - - /** - Sets user permissions. The $perms array looks like: - - - [blog_id] => '|perm1|perm2|' - - ... - - @param id string User ID - @param perms array Permissions array - */ - public function setUserPermissions($id,$perms) - { - if (!$this->auth->isSuperAdmin()) { - throw new Exception(__('You are not an administrator')); - } - - $strReq = 'DELETE FROM '.$this->prefix.'permissions '. - "WHERE user_id = '".$this->con->escape($id)."' "; - - $this->con->execute($strReq); - - foreach ($perms as $blog_id => $p) { - $this->setUserBlogPermissions($id, $blog_id, $p, false); - } - } - - /** - Sets user permissions for a given blog. $perms is an array with - permissions in values - - @param id string User ID - @param blog_id string Blog ID - @param perms array Permissions - @param delete_first boolean Delete permissions before - */ - public function setUserBlogPermissions($id, $blog_id, $perms, $delete_first=true) - { - if (!$this->auth->isSuperAdmin()) { - throw new Exception(__('You are not an administrator')); - } - - $no_perm = empty($perms); - - $perms = '|'.implode('|',array_keys($perms)).'|'; - - $cur = $this->con->openCursor($this->prefix.'permissions'); - - $cur->user_id = (string) $id; - $cur->blog_id = (string) $blog_id; - $cur->permissions = $perms; - - if ($delete_first || $no_perm) - { - $strReq = 'DELETE FROM '.$this->prefix.'permissions '. - "WHERE blog_id = '".$this->con->escape($blog_id)."' ". - "AND user_id = '".$this->con->escape($id)."' "; - - $this->con->execute($strReq); - } - - if (!$no_perm) { - $cur->insert(); - } - } - - /** - Sets a user default blog. This blog will be selected when user log in. - - @param id string User ID - @param blog_id string Blog ID - */ - public function setUserDefaultBlog($id, $blog_id) - { - $cur = $this->con->openCursor($this->prefix.'user'); - - $cur->user_default_blog = (string) $blog_id; - - $cur->update("WHERE user_id = '".$this->con->escape($id)."'"); - } - - private function getUserCursor($cur) - { - if ($cur->isField('user_id') - && !preg_match('/^[A-Za-z0-9@._-]{2,}$/',$cur->user_id)) { - throw new Exception(__('User ID must contain at least 2 characters using letters, numbers or symbols.')); - } - - if ($cur->user_url !== null && $cur->user_url != '') { - if (!preg_match('|^http(s?)://|',$cur->user_url)) { - $cur->user_url = 'http://'.$cur->user_url; - } - } - - if ($cur->isField('user_pwd')) { - if (strlen($cur->user_pwd) < 6) { - throw new Exception(__('Password must contain at least 6 characters.')); - } - $cur->user_pwd = crypt::hmac(DC_MASTER_KEY,$cur->user_pwd); - } - - if ($cur->user_lang !== null && !preg_match('/^[a-z]{2}(-[a-z]{2})?$/',$cur->user_lang)) { - throw new Exception(__('Invalid user language code')); - } - - if ($cur->user_upddt === null) { - $cur->user_upddt = date('Y-m-d H:i:s'); - } - - if ($cur->user_options !== null) { - $cur->user_options = serialize((array) $cur->user_options); - } - } - - /** - Returns user default settings in an associative array with setting names in - keys. - - @return array - */ - public function userDefaults() - { - return array( - 'edit_size' => 24, - 'enable_wysiwyg' => true, - 'post_format' => 'wiki' - ); - } - //@} - - /// @name Blog management methods - //@{ - /** - Returns all blog permissions (users) as an array which looks like: - - - [user_id] - - [name] => User name - - [firstname] => User firstname - - [displayname] => User displayname - - [super] => (true|false) super admin - - [p] - - [permission] => true - - ... - - @param id string Blog ID - @param with_super boolean Includes super admins in result - @return array - */ - public function getBlogPermissions($id,$with_super=true) - { - $strReq = - 'SELECT U.user_id AS user_id, user_super, user_name, user_firstname, '. - 'user_displayname, permissions '. - 'FROM '.$this->prefix.'user U '. - 'JOIN '.$this->prefix.'permissions P ON U.user_id = P.user_id '. - "WHERE blog_id = '".$this->con->escape($id)."' "; - - if ($with_super) { - $strReq .= - 'UNION '. - 'SELECT U.user_id AS user_id, user_super, user_name, user_firstname, '. - "user_displayname, NULL AS permissions ". - 'FROM '.$this->prefix.'user U '. - 'WHERE user_super = 1 '; - } - - $rs = $this->con->select($strReq); - - $res = array(); - - while ($rs->fetch()) - { - $res[$rs->user_id] = array( - 'name' => $rs->user_name, - 'firstname' => $rs->user_firstname, - 'displayname' => $rs->user_displayname, - 'super' => (boolean) $rs->user_super, - 'p' => $this->auth->parsePermissions($rs->permissions) - ); - } - - return $res; - } - - /** - Returns a blog of given ID. - - @param id string Blog ID - @return record - */ - public function getBlog($id) - { - $blog = $this->getBlogs(array('blog_id'=>$id)); - - if ($blog->isEmpty()) { - return false; - } - - return $blog; - } - - /** - Returns a record of blogs. $params is an array with the following - optionnal parameters: - - - blog_id: Blog ID - - q: Search string on blog_id, blog_name and blog_url - - limit: limit results - - @param params array Parameters - @param count_only boolean Count only results - @return record - */ - public function getBlogs($params=array(),$count_only=false) - { - $join = ''; // %1$s - $where = ''; // %2$s - - if ($count_only) - { - $strReq = 'SELECT count(B.blog_id) '. - 'FROM '.$this->prefix.'blog B '. - '%1$s '. - 'WHERE NULL IS NULL '. - '%2$s '; - } - else - { - $strReq = - 'SELECT B.blog_id, blog_uid, blog_url, blog_name, blog_desc, blog_creadt, '. - 'blog_upddt, blog_status '. - 'FROM '.$this->prefix.'blog B '. - '%1$s '. - 'WHERE NULL IS NULL '. - '%2$s '; - - if (!empty($params['order'])) { - $strReq .= 'ORDER BY '.$this->con->escape($params['order']).' '; - } else { - $strReq .= 'ORDER BY B.blog_id ASC '; - } - - if (!empty($params['limit'])) { - $strReq .= $this->con->limit($params['limit']); - } - } - - if ($this->auth->userID() && !$this->auth->isSuperAdmin()) - { - $join = 'INNER JOIN '.$this->prefix.'permissions PE ON B.blog_id = PE.blog_id '; - $where = - "AND PE.user_id = '".$this->con->escape($this->auth->userID())."' ". - "AND (permissions LIKE '%|usage|%' OR permissions LIKE '%|admin|%' OR permissions LIKE '%|contentadmin|%') ". - "AND blog_status IN (1,0) "; - } elseif (!$this->auth->userID()) { - $where = 'AND blog_status IN (1,0) '; - } - - if (!empty($params['blog_id'])) { - $where .= "AND B.blog_id = '".$this->con->escape($params['blog_id'])."' "; - } - - if (!empty($params['q'])) { - $params['q'] = str_replace('*','%',$params['q']); - $where .= - 'AND ('. - "LOWER(B.blog_id) LIKE '".$this->con->escape($params['q'])."' ". - "OR LOWER(B.blog_name) LIKE '".$this->con->escape($params['q'])."' ". - "OR LOWER(B.blog_url) LIKE '".$this->con->escape($params['q'])."' ". - ') '; - } - - $strReq = sprintf($strReq,$join,$where); - return $this->con->select($strReq); - } - - /** - Creates a new blog. - - @param cur cursor Blog cursor - */ - public function addBlog($cur) - { - if (!$this->auth->isSuperAdmin()) { - throw new Exception(__('You are not an administrator')); - } - - $this->getBlogCursor($cur); - - $cur->blog_creadt = date('Y-m-d H:i:s'); - $cur->blog_upddt = date('Y-m-d H:i:s'); - $cur->blog_uid = md5(uniqid()); - - $cur->insert(); - } - - /** - Updates a given blog. - - @param id string Blog ID - @param cur cursor Blog cursor - */ - public function updBlog($id,$cur) - { - $this->getBlogCursor($cur); - - $cur->blog_upddt = date('Y-m-d H:i:s'); - - $cur->update("WHERE blog_id = '".$this->con->escape($id)."'"); - } - - private function getBlogCursor($cur) - { - if ($cur->blog_id !== null - && !preg_match('/^[A-Za-z0-9._-]{2,}$/',$cur->blog_id)) { - throw new Exception(__('Blog ID must contain at least 2 characters using letters, numbers or symbols.')); - } - - if ($cur->blog_name !== null && $cur->blog_name == '') { - throw new Exception(__('No blog name')); - } - - if ($cur->blog_url !== null && $cur->blog_url == '') { - throw new Exception(__('No blog URL')); - } - - if ($cur->blog_desc !== null) { - $cur->blog_desc = html::clean($cur->blog_desc); - } - } - - /** - Removes a given blog. - @warning This will remove everything related to the blog (posts, - categories, comments, links...) - - @param id string Blog ID - */ - public function delBlog($id) - { - if (!$this->auth->isSuperAdmin()) { - throw new Exception(__('You are not an administrator')); - } - - $strReq = 'DELETE FROM '.$this->prefix.'blog '. - "WHERE blog_id = '".$this->con->escape($id)."' "; - - $this->con->execute($strReq); - } - - /** - Checks if a blog exist. - - @param id string Blog ID - @return boolean - */ - public function blogExists($id) - { - $strReq = 'SELECT blog_id '. - 'FROM '.$this->prefix.'blog '. - "WHERE blog_id = '".$this->con->escape($id)."' "; - - $rs = $this->con->select($strReq); - - return !$rs->isEmpty(); - } - - /** - Count posts on a blog - - @param id string Blog ID - @param type string Post type - @return boolean - */ - public function countBlogPosts($id,$type=null) - { - $strReq = 'SELECT COUNT(post_id) '. - 'FROM '.$this->prefix.'post '. - "WHERE blog_id = '".$this->con->escape($id)."' "; - - if ($type) { - $strReq .= "AND post_type = '".$this->con->escape($type)."' "; - } - - return $this->con->select($strReq)->f(0); - } - //@} - - /// @name HTML Filter methods - //@{ - /** - Calls HTML filter to drop bad tags and produce valid XHTML output (if - tidy extension is present). If enable_html_filter blog setting is - false, returns not filtered string. - - @param str string String to filter - @return string Filtered string. - */ - public function HTMLfilter($str) - { - if ($this->blog instanceof dcBlog && !$this->blog->settings->system->enable_html_filter) { - return $str; - } - - $filter = new htmlFilter; - $str = trim($filter->apply($str)); - return $str; - } - //@} - - /// @name wiki2xhtml methods - //@{ - private function initWiki() - { - $this->wiki2xhtml = new wiki2xhtml; - } - - /** - Returns a transformed string with wiki2xhtml. - - @param str string String to transform - @return string Transformed string - */ - public function wikiTransform($str) - { - if (!($this->wiki2xhtml instanceof wiki2xhtml)) { - $this->initWiki(); - } - return $this->wiki2xhtml->transform($str); - } - - /** - Inits wiki2xhtml property for blog post. - */ - public function initWikiPost() - { - $this->initWiki(); - - $this->wiki2xhtml->setOpts(array( - 'active_title' => 1, - 'active_setext_title' => 0, - 'active_hr' => 1, - 'active_lists' => 1, - 'active_quote' => 1, - 'active_pre' => 1, - 'active_empty' => 1, - 'active_auto_br' => 0, - 'active_auto_urls' => 0, - 'active_urls' => 1, - 'active_auto_img' => 0, - 'active_img' => 1, - 'active_anchor' => 1, - 'active_em' => 1, - 'active_strong' => 1, - 'active_br' => 1, - 'active_q' => 1, - 'active_code' => 1, - 'active_acronym' => 1, - 'active_ins' => 1, - 'active_del' => 1, - 'active_footnotes' => 1, - 'active_wikiwords' => 0, - 'active_macros' => 1, - 'parse_pre' => 1, - 'active_fr_syntax' => 0, - 'first_title_level' => 3, - 'note_prefix' => 'wiki-footnote', - 'note_str' => '

      Notes

      %s
      ' - )); - - $this->wiki2xhtml->registerFunction('url:post',array($this,'wikiPostLink')); - - # --BEHAVIOR-- coreWikiPostInit - $this->callBehavior('coreInitWikiPost',$this->wiki2xhtml); - } - - /** - Inits wiki2xhtml property for simple blog comment (basic syntax). - */ - public function initWikiSimpleComment() - { - $this->initWiki(); - - $this->wiki2xhtml->setOpts(array( - 'active_title' => 0, - 'active_setext_title' => 0, - 'active_hr' => 0, - 'active_lists' => 0, - 'active_quote' => 0, - 'active_pre' => 0, - 'active_empty' => 0, - 'active_auto_br' => 1, - 'active_auto_urls' => 1, - 'active_urls' => 0, - 'active_auto_img' => 0, - 'active_img' => 0, - 'active_anchor' => 0, - 'active_em' => 0, - 'active_strong' => 0, - 'active_br' => 0, - 'active_q' => 0, - 'active_code' => 0, - 'active_acronym' => 0, - 'active_ins' => 0, - 'active_del' => 0, - 'active_footnotes' => 0, - 'active_wikiwords' => 0, - 'active_macros' => 0, - 'parse_pre' => 0, - 'active_fr_syntax' => 0 - )); - - # --BEHAVIOR-- coreInitWikiSimpleComment - $this->callBehavior('coreInitWikiSimpleComment',$this->wiki2xhtml); - } - - /** - Inits wiki2xhtml property for blog comment. - */ - public function initWikiComment() - { - $this->initWiki(); - - $this->wiki2xhtml->setOpts(array( - 'active_title' => 0, - 'active_setext_title' => 0, - 'active_hr' => 0, - 'active_lists' => 1, - 'active_quote' => 0, - 'active_pre' => 1, - 'active_empty' => 0, - 'active_auto_br' => 1, - 'active_auto_urls' => 1, - 'active_urls' => 1, - 'active_auto_img' => 0, - 'active_img' => 0, - 'active_anchor' => 0, - 'active_em' => 1, - 'active_strong' => 1, - 'active_br' => 1, - 'active_q' => 1, - 'active_code' => 1, - 'active_acronym' => 1, - 'active_ins' => 1, - 'active_del' => 1, - 'active_footnotes' => 0, - 'active_wikiwords' => 0, - 'active_macros' => 0, - 'parse_pre' => 0, - 'active_fr_syntax' => 0 - )); - - # --BEHAVIOR-- coreInitWikiComment - $this->callBehavior('coreInitWikiComment',$this->wiki2xhtml); - } - - public function wikiPostLink($url,$content) - { - if (!($this->blog instanceof dcBlog)) { - return array(); - } - - $post_id = abs((integer) substr($url,5)); - if (!$post_id) { - return array(); - } - - $post = $this->blog->getPosts(array('post_id'=>$post_id)); - if ($post->isEmpty()) { - return array(); - } - - $res = array('url' => $post->getURL()); - $post_title = $post->post_title; - - if ($content != $url) { - $res['title'] = html::escapeHTML($post->post_title); - } - - if ($content == '' || $content == $url) { - $res['content'] = html::escapeHTML($post->post_title); - } - - if ($post->post_lang) { - $res['lang'] = $post->post_lang; - } - - return $res; - } - //@} - - /// @name Maintenance methods - //@{ - /** - Creates default settings for active blog. Optionnal parameter - defaults replaces default params while needed. - - @param defaults array Default parameters - */ - public function blogDefaults($defaults=null) - { - if (!is_array($defaults)) - { - $defaults = array( - array('allow_comments','boolean',true, - 'Allow comments on blog'), - array('allow_trackbacks','boolean',true, - 'Allow trackbacks on blog'), - array('blog_timezone','string','Europe/London', - 'Blog timezone'), - array('comments_nofollow','boolean',true, - 'Add rel="nofollow" to comments URLs'), - array('comments_pub','boolean',true, - 'Publish comments immediately'), - array('comments_ttl','integer',0, - 'Number of days to keep comments open (0 means no ttl)'), - array('copyright_notice','string','','Copyright notice (simple text)'), - array('date_format','string','%A, %B %e %Y', - 'Date format. See PHP strftime function for patterns'), - array('editor','string','', - 'Person responsible of the content'), - array('enable_html_filter','boolean',0, - 'Enable HTML filter'), - array('enable_xmlrpc','boolean',0, - 'Enable XML/RPC interface'), - array('lang','string','en', - 'Default blog language'), - array('media_exclusion','string','/\.php$/i', - 'File name exclusion pattern in media manager. (PCRE value)'), - array('media_img_m_size','integer',448, - 'Image medium size in media manager'), - array('media_img_s_size','integer',240, - 'Image small size in media manager'), - array('media_img_t_size','integer',100, - 'Image thumbnail size in media manager'), - array('media_img_title_pattern','string','Title ;; Date(%b %Y) ;; separator(, )', - 'Pattern to set image title when you insert it in a post'), - array('nb_post_per_page','integer',20, - 'Number of entries on home page and category pages'), - array('nb_post_per_feed','integer',20, - 'Number of entries on feeds'), - array('nb_comment_per_feed','integer',20, - 'Number of comments on feeds'), - array('post_url_format','string','{y}/{m}/{d}/{t}', - 'Post URL format. {y}: year, {m}: month, {d}: day, {id}: post id, {t}: entry title'), - array('public_path','string','public', - 'Path to public directory, begins with a / for a full system path'), - array('public_url','string','/public', - 'URL to public directory'), - array('robots_policy','string','INDEX,FOLLOW', - 'Search engines robots policy'), - array('short_feed_items','boolean',false, - 'Display short feed items'), - array('theme','string','default', - 'Blog theme'), - array('themes_path','string','themes', - 'Themes root path'), - array('themes_url','string','/themes', - 'Themes root URL'), - array('time_format','string','%H:%M', - 'Time format. See PHP strftime function for patterns'), - array('tpl_allow_php','boolean',false, - 'Allow PHP code in templates'), - array('tpl_use_cache','boolean',true, - 'Use template caching'), - array('trackbacks_pub','boolean',true, - 'Publish trackbacks immediately'), - array('trackbacks_ttl','integer',0, - 'Number of days to keep trackbacks open (0 means no ttl)'), - array('url_scan','string','query_string', - 'URL handle mode (path_info or query_string)'), - array('use_smilies','boolean',false, - 'Show smilies on entries and comments'), - array('wiki_comments','boolean',false, - 'Allow commenters to use a subset of wiki syntax') - ); - } - - $settings = new dcSettings($this,null); - $settings->addNamespace('system'); - - foreach ($defaults as $v) { - $settings->system->put($v[0],$v[2],$v[1],$v[3],false,true); - } - } - - /** - Recreates entries search engine index. - - @param start integer Start entry index - @param limit integer Number of entry to index - - @return integer $start and $limit sum - */ - public function indexAllPosts($start=null,$limit=null) - { - $strReq = 'SELECT COUNT(post_id) '. - 'FROM '.$this->prefix.'post'; - $rs = $this->con->select($strReq); - $count = $rs->f(0); - - $strReq = 'SELECT post_id, post_title, post_excerpt_xhtml, post_content_xhtml '. - 'FROM '.$this->prefix.'post '; - - if ($start !== null && $limit !== null) { - $strReq .= $this->con->limit($start,$limit); - } - - $rs = $this->con->select($strReq,true); - - $cur = $this->con->openCursor($this->prefix.'post'); - - while ($rs->fetch()) - { - $words = $rs->post_title.' '. $rs->post_excerpt_xhtml.' '. - $rs->post_content_xhtml; - - $cur->post_words = implode(' ',text::splitWords($words)); - $cur->update('WHERE post_id = '.(integer) $rs->post_id); - $cur->clean(); - } - - if ($start+$limit > $count) { - return null; - } - return $start+$limit; - } - - /** - Recreates comments search engine index. - - @param start integer Start comment index - @param limit integer Number of comments to index - - @return integer $start and $limit sum - */ - public function indexAllComments($start=null,$limit=null) - { - $strReq = 'SELECT COUNT(comment_id) '. - 'FROM '.$this->prefix.'comment'; - $rs = $this->con->select($strReq); - $count = $rs->f(0); - - $strReq = 'SELECT comment_id, comment_content '. - 'FROM '.$this->prefix.'comment '; - - if ($start !== null && $limit !== null) { - $strReq .= $this->con->limit($start,$limit); - } - - $rs = $this->con->select($strReq); - - $cur = $this->con->openCursor($this->prefix.'comment'); - - while ($rs->fetch()) - { - $cur->comment_words = implode(' ',text::splitWords($rs->comment_content)); - $cur->update('WHERE comment_id = '.(integer) $rs->comment_id); - $cur->clean(); - } - - if ($start+$limit > $count) { - return null; - } - return $start+$limit; - } - - /** - Reinits nb_comment and nb_trackback in post table. - */ - public function countAllComments() - { - - $updCommentReq = 'UPDATE '.$this->prefix.'post P '. - 'SET nb_comment = ('. - 'SELECT COUNT(C.comment_id) from '.$this->prefix.'comment C '. - 'WHERE C.post_id = P.post_id AND C.comment_trackback <> 1 '. - 'AND C.comment_status = 1 '. - ')'; - $updTrackbackReq = 'UPDATE '.$this->prefix.'post P '. - 'SET nb_trackback = ('. - 'SELECT COUNT(C.comment_id) from '.$this->prefix.'comment C '. - 'WHERE C.post_id = P.post_id AND C.comment_trackback = 1 '. - 'AND C.comment_status = 1 '. - ')'; - $this->con->execute($updCommentReq); - $this->con->execute($updTrackbackReq); - } - - /** - Empty templates cache directory - */ - public function emptyTemplatesCache() - { - if (is_dir(DC_TPL_CACHE.'/cbtpl')) { - files::deltree(DC_TPL_CACHE.'/cbtpl'); - } - } - //@} -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/core/class.dc.error.php b/v2/dotclear/inc/core/class.dc.error.php deleted file mode 100644 index f72c251..0000000 --- a/v2/dotclear/inc/core/class.dc.error.php +++ /dev/null @@ -1,133 +0,0 @@ -\n%s\n"; - /** @var string HTML error item pattern */ - protected $html_item = "
    • %s
    • \n"; - - /** - * Object constructor. - */ - public function __construct() - { - $this->code = 0; - $this->msg = ''; - } - - /** - * Object string representation. Returns errors stack. - * - * @return string - */ - public function __toString() - { - $res = ''; - - foreach ($this->errors as $msg) - { - $res .= $msg."\n"; - } - - return $res; - } - - /** - * Adds an error to stack. - * - * @param string $msg Error message - */ - public function add($msg) - { - $this->flag = true; - $this->errors[] = $msg; - } - - /** - * Returns the value of flag property. True if errors stack is not empty - * - * @return boolean - */ - public function flag() - { - return $this->flag; - } - - /** - * Resets errors stack. - */ - public function reset() - { - $this->flag = false; - $this->errors = array(); - } - - /** - * Returns errors property. - * - * @return array - */ - public function getErrors() - { - return $this->errors; - } - - /** - * Sets list and item properties. - * - * @param string $list HTML errors list pattern - * @param string $item HTML error item pattern - */ - public function setHTMLFormat($list,$item) - { - $this->html_list = $list; - $this->html_item = $item; - } - - /** - * Returns errors stack as HTML. - * - * @return string - */ - public function toHTML() - { - $res = ''; - - if ($this->flag) - { - foreach ($this->errors as $msg) - { - $res .= sprintf($this->html_item,$msg); - } - - $res = sprintf($this->html_list,$res); - } - - return $res; - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/core/class.dc.log.php b/v2/dotclear/inc/core/class.dc.log.php deleted file mode 100644 index 9c93d09..0000000 --- a/v2/dotclear/inc/core/class.dc.log.php +++ /dev/null @@ -1,204 +0,0 @@ -dcCore dcCore instance - */ - public function __construct($core) - { - $this->core =& $core; - $this->prefix = $core->prefix; - } - - /** - Retrieves logs. $params is an array taking the following - optionnal parameters: - - - blog_id: Get logs belonging to given blog ID - - user_id: Get logs belonging to given user ID - - log_ip: Get logs belonging to given IP address - - log_table: Get logs belonging to given log table - - order: Order of results (default "ORDER BY log_dt DESC") - - limit: Limit parameter - - @param params array Parameters - @param count_only boolean Only counts results - @return record A record with some more capabilities - */ - public function getLogs($params = array(),$count_only = false) - { - if ($count_only) { - $f = 'COUNT(log_id)'; - } - else { - $f = - 'L.log_id, L.user_id, L.log_table, L.log_dt, '. - 'L.log_ip, L.log_msg, L.blog_id, U.user_name, '. - 'U.user_firstname, U.user_displayname, U.user_url'; - } - - $strReq = 'SELECT '.$f.' FROM '.$this->prefix.'log L '; - - if (!$count_only) { - $strReq .= - 'LEFT JOIN '.$this->prefix.'user U '. - 'ON U.user_id = L.user_id '; - } - - if (!empty($params['blog_id'])) { - if ($params['blog_id'] === 'all') { - $strReq .= "WHERE NULL IS NULL "; - } - else { - $strReq .= "WHERE L.blog_id = '".$this->core->con->escape($params['blog_id'])."' "; - } - } - else { - $strReq .= "WHERE L.blog_id = '".$this->core->blog->id."' "; - } - - if (!empty($params['user_id'])) { - $strReq .= 'AND L.user_id'.$this->core->con->in($params['user_id']); - } - if (!empty($params['log_ip'])) { - $strReq .= 'AND log_ip'.$this->core->con->in($params['log_ip']); - } - if (!empty($params['log_table'])) { - $strReq .= 'AND log_table'.$this->core->con->in($params['log_table']); - } - - if (!$count_only) - { - if (!empty($params['order'])) { - $strReq .= 'ORDER BY '.$this->core->con->escape($params['order']).' '; - } else { - $strReq .= 'ORDER BY log_dt DESC '; - } - } - - if (!empty($params['limit'])) { - $strReq .= $this->core->con->limit($params['limit']); - } - - $rs = $this->core->con->select($strReq); - $rs->extend('rsExtLog'); - - return $rs; - } - - /** - Creates a new log. Takes a cursor as input and returns the new log - ID. - - @param cur cursor Log cursor - @return integer New log ID - */ - public function addLog($cur) - { - $this->core->con->writeLock($this->prefix.'log'); - - try - { - # Get ID - $rs = $this->core->con->select( - 'SELECT MAX(log_id) '. - 'FROM '.$this->prefix.'log ' - ); - - $cur->log_id = (integer) $rs->f(0) + 1; - $cur->blog_id = (string) $this->core->blog->id; - $cur->log_dt = date('Y-m-d H:i:s'); - - $this->getLogCursor($cur,$cur->log_id); - - # --BEHAVIOR-- coreBeforeLogCreate - $this->core->callBehavior('coreBeforeLogCreate',$this,$cur); - - $cur->insert(); - $this->core->con->unlock(); - } - catch (Exception $e) - { - $this->core->con->unlock(); - throw $e; - } - - # --BEHAVIOR-- coreAfterLogCreate - $this->core->callBehavior('coreAfterLogCreate',$this,$cur); - - return $cur->log_id; - } - - /** - Deletes a log. - - @param id integer Log ID - */ - public function delLogs($id,$all = false) - { - $strReq = $all ? - 'TRUNCATE TABLE '.$this->prefix.'log' : - 'DELETE FROM '.$this->prefix.'log WHERE log_id'.$this->core->con->in($id); - - $this->core->con->execute($strReq); - } - - private function getLogCursor($cur,$log_id = null) - { - if ($cur->log_msg === '') { - throw new Exception(__('No log message')); - } - - if ($cur->log_table === null) { - $cur->log_table = 'none'; - } - - if ($cur->user_id === null) { - $cur->user_id = 'unknown'; - } - - if ($cur->log_dt === '' || $cur->log_dt === null) { - $cur->log_dt = date('Y-m-d H:i:s'); - } - - if ($cur->log_ip === null) { - $cur->log_ip = http::realIP(); - } - - $log_id = is_int($log_id) ? $log_id : $cur->log_id; - } -} - -class rsExtLog -{ - public static function getUserCN($rs) - { - $user = dcUtils::getUserCN($rs->user_id, $rs->user_name, - $rs->user_firstname, $rs->user_displayname); - - if ($user === 'unknown') { - $user = __('unknown'); - } - - return $user; - } -} - -?> \ No newline at end of file diff --git a/v2/dotclear/inc/core/class.dc.media.php b/v2/dotclear/inc/core/class.dc.media.php deleted file mode 100644 index ded3834..0000000 --- a/v2/dotclear/inc/core/class.dc.media.php +++ /dev/null @@ -1,1093 +0,0 @@ -dcCore dcCore instance - protected $con; ///< connection Database connection - protected $table; ///< string Media table name - protected $type; ///< string Media type filter - protected $postmedia; - protected $file_sort = 'name-asc'; - - protected $file_handler = array(); ///< array Array of callbacks - - public $thumb_tp = '%s/.%s_%s.jpg'; ///< string Thumbnail file pattern - - /** - array Tubmnail sizes: - - m: medium image - - s: small image - - t: thumbnail image - - sq: square image - */ - public $thumb_sizes = array( - 'm' => array(448,'ratio','medium'), - 's' => array(240,'ratio','small'), - 't' => array(100,'ratio','thumbnail'), - 'sq' => array(48,'crop','square') - ); - - public $icon_img = 'images/media/%s.png'; ///< string Icon file pattern - - /** - Object constructor. - - @param core dcCore dcCore instance - @param type string Media type filter - */ - public function __construct($core,$type='') - { - $this->core =& $core; - $this->con =& $core->con; - $this->postmedia = new dcPostMedia($core); - - if ($this->core->blog == null) { - throw new Exception(__('No blog defined.')); - } - - $this->table = $this->core->prefix.'media'; - $root = $this->core->blog->public_path; - - if (preg_match('#^http(s)?://#',$this->core->blog->settings->system->public_url)) { - $root_url = rawurldecode($this->core->blog->settings->system->public_url); - } else { - $root_url = rawurldecode($this->core->blog->host.path::clean($this->core->blog->settings->system->public_url)); - } - - if (!is_dir($root)) { - throw new Exception(sprintf(__('Directory %s does not exist.'),$root)); - } - - $this->type = $type; - - parent::__construct($root,$root_url); - $this->chdir(''); - - $this->path = $this->core->blog->settings->system->public_path; - - $this->addExclusion(DC_RC_PATH); - $this->addExclusion(dirname(__FILE__).'/../'); - - $this->exclude_pattern = $core->blog->settings->system->media_exclusion; - - # Event handlers - $this->addFileHandler('image/jpeg','create',array($this,'imageThumbCreate')); - $this->addFileHandler('image/png','create',array($this,'imageThumbCreate')); - $this->addFileHandler('image/gif','create',array($this,'imageThumbCreate')); - - $this->addFileHandler('image/png','update',array($this,'imageThumbUpdate')); - $this->addFileHandler('image/jpeg','update',array($this,'imageThumbUpdate')); - $this->addFileHandler('image/gif','update',array($this,'imageThumbUpdate')); - - $this->addFileHandler('image/png','remove',array($this,'imageThumbRemove')); - $this->addFileHandler('image/jpeg','remove',array($this,'imageThumbRemove')); - $this->addFileHandler('image/gif','remove',array($this,'imageThumbRemove')); - - $this->addFileHandler('image/jpeg','create',array($this,'imageMetaCreate')); - - $this->addFileHandler('image/jpeg','recreate',array($this,'imageThumbCreate')); - $this->addFileHandler('image/png','recreate',array($this,'imageThumbCreate')); - $this->addFileHandler('image/gif','recreate',array($this,'imageThumbCreate')); - - $this->addFileHandler('image/jpeg','recreate',array($this,'imageThumbCreate')); - $this->addFileHandler('image/png','recreate',array($this,'imageThumbCreate')); - $this->addFileHandler('image/gif','recreate',array($this,'imageThumbCreate')); - - # Thumbnails sizes - $this->thumb_sizes['m'][0] = abs($core->blog->settings->system->media_img_m_size); - $this->thumb_sizes['s'][0] = abs($core->blog->settings->system->media_img_s_size); - $this->thumb_sizes['t'][0] = abs($core->blog->settings->system->media_img_t_size); - - # Thumbnails sizes names - $this->thumb_sizes['m'][2] = __($this->thumb_sizes['m'][2]); - $this->thumb_sizes['s'][2] = __($this->thumb_sizes['s'][2]); - $this->thumb_sizes['t'][2] = __($this->thumb_sizes['t'][2]); - $this->thumb_sizes['sq'][2] = __($this->thumb_sizes['sq'][2]); - - # --BEHAVIOR-- coreMediaConstruct - $this->core->callBehavior('coreMediaConstruct',$this); - } - - /** - Changes working directory. - - @param dir string Directory name. - */ - public function chdir($dir) - { - parent::chdir($dir); - $this->relpwd = preg_replace('/^'.preg_quote($this->root,'/').'\/?/','',$this->pwd); - } - - /** - Adds a new file handler for a given media type and event. - - Available events are: - - create: file creation - - update: file update - - remove: file deletion - - @param type string Media type - @param event string Event - @param function callback - */ - public function addFileHandler($type,$event,$function) - { - if (is_callable($function)) { - $this->file_handler[$type][$event][] = $function; - } - } - - protected function callFileHandler($type,$event) - { - if (!empty($this->file_handler[$type][$event])) - { - $args = func_get_args(); - array_shift($args); - array_shift($args); - - foreach ($this->file_handler[$type][$event] as $f) - { - call_user_func_array($f,$args); - } - } - } - - /** - Returns HTML breadCrumb for media manager navigation. - - @param href string URL pattern - @param last string Last item pattern - @return string HTML code - */ - public function breadCrumb($href,$last='') - { - $res = ''; - if ($this->relpwd && $this->relpwd != '.') { - $pwd = ''; - $arr = explode('/',$this->relpwd); - $count = count($arr); - foreach ($arr as $v) { - if (($last != '') && (0 === --$count)) { - $res .= sprintf($last,$v); - } else { - $pwd .= rawurlencode($v).'/'; - $res .= ''.$v.' / '; - } - } - } - return $res; - - } - - protected function fileRecord($rs) - { - if ($rs->isEmpty()) { return null; } - - if (!$this->isFileExclude($this->root.'/'.$rs->media_file) && is_file($this->root.'/'.$rs->media_file)) - { - $f = new fileItem($this->root.'/'.$rs->media_file,$this->root,$this->root_url); - - if ($this->type && $f->type_prefix != $this->type) { - return null; - } - - $meta = @simplexml_load_string($rs->media_meta); - - $f->editable = true; - $f->media_id = $rs->media_id; - $f->media_title = $rs->media_title; - $f->media_meta = $meta instanceof SimpleXMLElement ? $meta : simplexml_load_string(''); - $f->media_user = $rs->user_id; - $f->media_priv = (boolean) $rs->media_private; - $f->media_dt = strtotime($rs->media_dt); - $f->media_dtstr = dt::str('%Y-%m-%d %H:%M',$f->media_dt); - - $f->media_image = false; - - if (!$this->core->auth->check('media_admin',$this->core->blog->id) - && $this->core->auth->userID() != $f->media_user) { - $f->del = false; - $f->editable = false; - } - - $type_prefix = explode('/',$f->type); - $type_prefix = $type_prefix[0]; - - switch ($type_prefix) { - case 'image': - $f->media_image = true; - $f->media_icon = 'image'; - break; - case 'audio': - $f->media_icon = 'audio'; - break; - case 'text': - $f->media_icon = 'text'; - break; - case 'video': - $f->media_icon = 'video'; - break; - default: - $f->media_icon = 'blank'; - } - switch ($f->type) { - case 'application/msword': - case 'application/vnd.oasis.opendocument.text': - case 'application/vnd.sun.xml.writer': - case 'application/pdf': - case 'application/postscript': - $f->media_icon = 'document'; - break; - case 'application/msexcel': - case 'application/vnd.oasis.opendocument.spreadsheet': - case 'application/vnd.sun.xml.calc': - $f->media_icon = 'spreadsheet'; - break; - case 'application/mspowerpoint': - case 'application/vnd.oasis.opendocument.presentation': - case 'application/vnd.sun.xml.impress': - $f->media_icon = 'presentation'; - break; - case 'application/x-debian-package': - case 'application/x-bzip': - case 'application/x-gzip': - case 'application/x-java-archive': - case 'application/rar': - case 'application/x-redhat-package-manager': - case 'application/x-tar': - case 'application/x-gtar': - case 'application/zip': - $f->media_icon = 'package'; - break; - case 'application/octet-stream': - $f->media_icon = 'executable'; - break; - case 'application/x-shockwave-flash': - $f->media_icon = 'video'; - break; - case 'application/ogg': - $f->media_icon = 'audio'; - break; - case 'text/html': - $f->media_icon = 'html'; - break; - } - - $f->media_type = $f->media_icon; - $f->media_icon = sprintf($this->icon_img,$f->media_icon); - - # Thumbnails - $f->media_thumb = array(); - $p = path::info($f->relname); - $thumb = sprintf($this->thumb_tp,$this->root.'/'.$p['dirname'],$p['base'],'%s'); - $thumb_url = sprintf($this->thumb_tp,$this->root_url.$p['dirname'],$p['base'],'%s'); - - # Cleaner URLs - $thumb_url = preg_replace('#\./#','/',$thumb_url); - $thumb_url = preg_replace('#(?thumb_sizes as $suffix => $s) { - if (file_exists(sprintf($thumb,$suffix))) { - $f->media_thumb[$suffix] = sprintf($thumb_url,$suffix); - } - } - - if (isset($f->media_thumb['sq']) && $f->media_type == 'image') { - $f->media_icon = $f->media_thumb['sq']; - } - - return $f; - } - - return null; - } - - - public function setFileSort($type='name') - { - if (in_array($type,array('name-asc','name-desc','date-asc','date-desc'))) { - $this->file_sort = $type; - } - } - - protected function sortFileHandler($a,$b) - { - switch ($this->file_sort) - { - case 'date-asc': - if ($a->media_dt == $b->media_dt) { - return 0; - } - return ($a->media_dt < $b->media_dt) ? -1 : 1; - case 'date-desc': - if ($a->media_dt == $b->media_dt) { - return 0; - } - return ($a->media_dt > $b->media_dt) ? -1 : 1; - case 'name-desc': - return strcasecmp($b->basename,$a->basename); - case 'name-asc': - default: - return strcasecmp($a->basename,$b->basename); - } - - } - - /** - Gets current working directory content. - - @param type string Media type filter - */ - public function getDir($type=null) - { - if ($type) { - $this->type = $type; - } - - $media_dir = $this->relpwd ? $this->relpwd : '.'; - - $strReq = - 'SELECT media_file, media_id, media_path, media_title, media_meta, media_dt, '. - 'media_creadt, media_upddt, media_private, user_id '. - 'FROM '.$this->table.' '. - "WHERE media_path = '".$this->path."' ". - "AND media_dir = '".$this->con->escape($media_dir)."' "; - - if (!$this->core->auth->check('media_admin',$this->core->blog->id)) - { - $strReq .= 'AND (media_private <> 1 '; - - if ($this->core->auth->userID()) { - $strReq .= "OR user_id = '".$this->con->escape($this->core->auth->userID())."'"; - } - $strReq .= ') '; - } - - $rs = $this->con->select($strReq); - - parent::getDir(); - - $f_res = array(); - $p_dir = $this->dir; - - # If type is set, remove items from p_dir - if ($this->type) - { - foreach ($p_dir['files'] as $k => $f) { - if ($f->type_prefix != $this->type) { - unset($p_dir['files'][$k]); - } - } - } - - $f_reg = array(); - - while ($rs->fetch()) - { - # File in subdirectory, forget about it! - if (dirname($rs->media_file) != '.' && dirname($rs->media_file) != $this->relpwd) { - continue; - } - - if ($this->inFiles($rs->media_file)) - { - $f = $this->fileRecord($rs); - if ($f !== null) { - if (isset($f_reg[$rs->media_file])) - { - # That media is duplicated in the database, - # time to do a bit of house cleaning. - $this->con->execute( - 'DELETE FROM '.$this->table.' '. - "WHERE media_id = ".$this->fileRecord($rs)->media_id - ); - } else { - $f_res[] = $this->fileRecord($rs); - $f_reg[$rs->media_file] = 1; - } - } - } - elseif (!empty($p_dir['files']) && $this->relpwd == '') - { - # Physical file does not exist remove it from DB - # Because we don't want to erase everything on - # dotclear upgrade, do it only if there are files - # in directory and directory is root - $this->con->execute( - 'DELETE FROM '.$this->table.' '. - "WHERE media_path = '".$this->con->escape($this->path)."' ". - "AND media_file = '".$this->con->escape($rs->media_file)."' " - ); - $this->callFileHandler(files::getMimeType($rs->media_file),'remove',$this->pwd.'/'.$rs->media_file); - } - } - - $this->dir['files'] = $f_res; - foreach ($this->dir['dirs'] as $k => $v) { - $v->media_icon = sprintf($this->icon_img,'folder'); - } - - # Check files that don't exist in database and create them - if ($this->core->auth->check('media,media_admin',$this->core->blog->id)) - { - foreach ($p_dir['files'] as $f) - { - if (!isset($f_reg[$f->relname])) { - if (($id = $this->createFile($f->basename,null,false,null,false)) !== false) { - $this->dir['files'][] = $this->getFile($id); - } - } - } - } - usort($this->dir['files'],array($this,'sortFileHandler')); - } - - /** - Gets file by its id. Returns a filteItem object. - - @param id integer File ID - @return fileItem - */ - public function getFile($id) - { - $strReq = - 'SELECT media_id, media_path, media_title, '. - 'media_file, media_meta, media_dt, media_creadt, '. - 'media_upddt, media_private, user_id '. - 'FROM '.$this->table.' '. - "WHERE media_path = '".$this->path."' ". - 'AND media_id = '.(integer) $id.' '; - - if (!$this->core->auth->check('media_admin',$this->core->blog->id)) - { - $strReq .= 'AND (media_private <> 1 '; - - if ($this->core->auth->userID()) { - $strReq .= "OR user_id = '".$this->con->escape($this->core->auth->userID())."'"; - } - $strReq .= ') '; - } - - $rs = $this->con->select($strReq); - return $this->fileRecord($rs); - } - - /** - Returns media items attached to a blog post. Result is an array containing - fileItems objects. - - @param post_id integer Post ID - @param media_id integer Optionnal media ID - @return array Array of fileItems - */ - public function getPostMedia($post_id,$media_id=null) - { - $params = array( - 'post_id' => $post_id, - 'media_path' => $this->path - ); - if ($media_id) { - $params['media_id'] = (integer) $media_id; - } - $rs = $this->postmedia->getPostMedia($params); - - $res = array(); - - while ($rs->fetch()) { - $f = $this->fileRecord($rs); - if ($f !== null) { - $res[] = $f; - } - } - - return $res; - } - - /** - @deprecated since version 2.4 - @see dcPostMedia::addPostMedia - */ - public function addPostMedia($post_id,$media_id) - { - $this->postmedia->addPostMedia($post_id,$media_id); - } - - /** - @deprecated since version 2.4 - @see dcPostMedia::removePostMedia - */ - public function removePostMedia($post_id,$media_id) - { - $this->postmedia->removePostMedia($post_id,$media_id,"attachment"); - } - - /** - Rebuilds database items collection. Optional $pwd parameter is - the path where to start rebuild. - - @param pwd string Directory to rebuild - */ - public function rebuild($pwd='') - { - if (!$this->core->auth->isSuperAdmin()) { - throw new Exception(__('You are not a super administrator.')); - } - - $this->chdir($pwd); - parent::getDir(); - - $dir = $this->dir; - - foreach ($dir['dirs'] as $d) { - if (!$d->parent) { - $this->rebuild($d->relname,false); - } - } - - foreach ($dir['files'] as $f) { - $this->chdir(dirname($f->relname)); - $this->createFile($f->basename); - } - - $this->rebuildDB($pwd); - } - - protected function rebuildDB($pwd) - { - $media_dir = $pwd ? $pwd : '.'; - - $strReq = - 'SELECT media_file, media_id '. - 'FROM '.$this->table.' '. - "WHERE media_path = '".$this->path."' ". - "AND media_dir = '".$this->con->escape($media_dir)."' "; - - $rs = $this->con->select($strReq); - - $delReq = 'DELETE FROM '.$this->table.' '. - 'WHERE media_id IN (%s) '; - $del_ids = array(); - - while ($rs->fetch()) - { - if (!is_file($this->root.'/'.$rs->media_file)) { - $del_ids[] = (integer) $rs->media_id; - } - } - - if (!empty($del_ids)) { - $this->con->execute(sprintf($delReq,implode(',',$del_ids))); - } - } - - public function makeDir($d) - { - $d = files::tidyFileName($d); - parent::makeDir($d); - } - - /** - Creates or updates a file in database. Returns new media ID or false if - file does not exist. - - @param name string File name (relative to working directory) - @param title string File title - @param private boolean File is private - @param dt string File date - @return integer New media ID - */ - public function createFile($name,$title=null,$private=false,$dt=null,$force=true) - { - if (!$this->core->auth->check('media,media_admin',$this->core->blog->id)) { - throw new Exception(__('Permission denied.')); - } - - $file = $this->pwd.'/'.$name; - if (!file_exists($file)) { - return false; - } - - $media_file = $this->relpwd ? path::clean($this->relpwd.'/'.$name) : path::clean($name); - $media_type = files::getMimeType($name); - - $cur = $this->con->openCursor($this->table); - - $strReq = 'SELECT media_id '. - 'FROM '.$this->table.' '. - "WHERE media_path = '".$this->con->escape($this->path)."' ". - "AND media_file = '".$this->con->escape($media_file)."' "; - - $rs = $this->con->select($strReq); - - if ($rs->isEmpty()) - { - $this->con->writeLock($this->table); - try - { - $rs = $this->con->select('SELECT MAX(media_id) FROM '.$this->table); - $media_id = (integer) $rs->f(0) + 1; - - $cur->media_id = $media_id; - $cur->user_id = (string) $this->core->auth->userID(); - $cur->media_path = (string) $this->path; - $cur->media_file = (string) $media_file; - $cur->media_dir = (string) dirname($media_file); - $cur->media_creadt = date('Y-m-d H:i:s'); - $cur->media_upddt = date('Y-m-d H:i:s'); - - $cur->media_title = !$title ? (string) $name : (string) $title; - $cur->media_private = (integer) (boolean) $private; - - if ($dt) { - $cur->media_dt = (string) $dt; - } else { - $cur->media_dt = strftime('%Y-%m-%d %H:%M:%S',filemtime($file)); - } - - try { - $cur->insert(); - } catch (Exception $e) { - @unlink($name); - throw $e; - } - $this->con->unlock(); - } - catch (Exception $e) - { - $this->con->unlock(); - throw $e; - } - } - else - { - $media_id = (integer) $rs->media_id; - - $cur->media_upddt = date('Y-m-d H:i:s'); - - $cur->update('WHERE media_id = '.$media_id); - } - - $this->callFileHandler($media_type,'create',$cur,$name,$media_id,$force); - - return $media_id; - } - - /** - Updates a file in database. - - @param file fileItem Current fileItem object - @param newFile fileItem New fileItem object - */ - public function updateFile($file,$newFile) - { - if (!$this->core->auth->check('media,media_admin',$this->core->blog->id)) { - throw new Exception(__('Permission denied.')); - } - - $id = (integer) $file->media_id; - - if (!$id) { - throw new Exception('No file ID'); - } - - if (!$this->core->auth->check('media_admin',$this->core->blog->id) - && $this->core->auth->userID() != $file->media_user) { - throw new Exception(__('You are not the file owner.')); - } - - $cur = $this->con->openCursor($this->table); - - # We need to tidy newFile basename. If dir isn't empty, concat to basename - $newFile->relname = files::tidyFileName($newFile->basename); - if ($newFile->dir) { - $newFile->relname = $newFile->dir.'/'.$newFile->relname; - } - - if ($file->relname != $newFile->relname) { - $newFile->file = $this->root.'/'.$newFile->relname; - - if ($this->isFileExclude($newFile->relname)) { - throw new Exception(__('This file is not allowed.')); - } - - if (file_exists($newFile->file)) { - throw new Exception(__('New file already exists.')); - } - - $this->moveFile($file->relname,$newFile->relname); - - $cur->media_file = (string) $newFile->relname; - $cur->media_dir = (string) dirname($newFile->relname); - } - - $cur->media_title = (string) $newFile->media_title; - $cur->media_dt = (string) $newFile->media_dtstr; - $cur->media_upddt = date('Y-m-d H:i:s'); - $cur->media_private = (integer) $newFile->media_priv; - - $cur->update('WHERE media_id = '.$id); - - $this->callFileHandler($file->type,'update',$file,$newFile); - } - - /** - Uploads a file. - - @param tmp string Full path of temporary uploaded file - @param name string File name (relative to working directory) - @param title string File title - @param private boolean File is private - */ - public function uploadFile($tmp,$name,$title=null,$private=false,$overwrite=false) - { - if (!$this->core->auth->check('media,media_admin',$this->core->blog->id)) { - throw new Exception(__('Permission denied.')); - } - - $name = files::tidyFileName($name); - - parent::uploadFile($tmp,$name,$overwrite); - - return $this->createFile($name,$title,$private); - } - - /** - Creates a file from binary content. - - @param name string File name (relative to working directory) - @param bits string Binary file content - */ - public function uploadBits($name,$bits) - { - if (!$this->core->auth->check('media,media_admin',$this->core->blog->id)) { - throw new Exception(__('Permission denied.')); - } - - $name = files::tidyFileName($name); - - parent::uploadBits($name,$bits); - - return $this->createFile($name,null,null); - } - - /** - Removes a file. - - @param f fileItem fileItem object - */ - public function removeFile($f) - { - if (!$this->core->auth->check('media,media_admin',$this->core->blog->id)) { - throw new Exception(__('Permission denied.')); - } - - $media_file = $this->relpwd ? path::clean($this->relpwd.'/'.$f) : path::clean($f); - - $strReq = 'DELETE FROM '.$this->table.' '. - "WHERE media_path = '".$this->con->escape($this->path)."' ". - "AND media_file = '".$this->con->escape($media_file)."' "; - - if (!$this->core->auth->check('media_admin',$this->core->blog->id)) - { - $strReq .= "AND user_id = '".$this->con->escape($this->core->auth->userID())."'"; - } - - $this->con->execute($strReq); - - if ($this->con->changes() == 0) { - throw new Exception(__('File does not exist in the database.')); - } - - parent::removeFile($f); - - $this->callFileHandler(files::getMimeType($media_file),'remove',$f); - } - - /** - Extract zip file in current location - - @param f fileRecord fileRecord object - */ - public function inflateZipFile($f,$create_dir=true) - { - $zip = new fileUnzip($f->file); - $zip->setExcludePattern($this->exclude_pattern); - $zip->getList(false,'#(^|/)(__MACOSX|\.svn|\.DS_Store|\.directory|Thumbs\.db)(/|$)#'); - - if ($create_dir) - { - $zip_root_dir = $zip->getRootDir(); - if ($zip_root_dir != false) { - $destination = $zip_root_dir; - $target = $f->dir; - } else { - $destination = preg_replace('/\.([^.]+)$/','',$f->basename); - $target = $f->dir.'/'.$destination; - } - - if (is_dir($f->dir.'/'.$destination)) { - throw new Exception(sprintf(__('Extract destination directory %s already exists.'),dirname($f->relname).'/'.$destination)); - } - } - else - { - $target = $f->dir; - $destination = ''; - } - - $zip->unzipAll($target); - $zip->close(); - return dirname($f->relname).'/'.$destination; - } - - /** - Returns zip file content - - @param f fileRecord fileRecord object - @return array - */ - public function getZipContent($f) - { - $zip = new fileUnzip($f->file); - $list = $zip->getList(false,'#(^|/)(__MACOSX|\.svn|\.DS_Store|\.directory|Thumbs\.db)(/|$)#'); - $zip->close(); - return $list; - } - - /** - Calls file handlers registered for recreate event - - @param f fileItem fileItem object - */ - public function mediaFireRecreateEvent($f) - { - $media_type = files::getMimeType($f->basename); - $this->callFileHandler($media_type,'recreate',null,$f->basename); // Args list to be completed as necessary (Franck) - } - - /* Image handlers - ------------------------------------------------------- */ - public function imageThumbCreate($cur,$f,$force=true) - { - $file = $this->pwd.'/'.$f; - - if (!file_exists($file)) { - return false; - } - - $p = path::info($file); - $thumb = sprintf($this->thumb_tp,$p['dirname'],$p['base'],'%s'); - - try - { - $img = new imageTools(); - $img->loadImage($file); - - $w = $img->getW(); - $h = $img->getH(); - - if ($force) $this->imageThumbRemove($f); - - foreach ($this->thumb_sizes as $suffix => $s) { - $thumb_file = sprintf($thumb,$suffix); - if (!file_exists($thumb_file) && $s[0] > 0 && - ($suffix == 'sq' || $w > $s[0] || $h > $s[0])) - { - $img->resize($s[0],$s[0],$s[1]); - $img->output('jpeg',$thumb_file,80); - } - } - $img->close(); - } - catch (Exception $e) - { - if ($cur === null) { # Called only if cursor is null (public call) - throw $e; - } - } - } - - protected function imageThumbUpdate($file,$newFile) - { - if ($file->relname != $newFile->relname) - { - $p = path::info($file->relname); - $thumb_old = sprintf($this->thumb_tp,$p['dirname'],$p['base'],'%s'); - - $p = path::info($newFile->relname); - $thumb_new = sprintf($this->thumb_tp,$p['dirname'],$p['base'],'%s'); - - foreach ($this->thumb_sizes as $suffix => $s) { - try { - parent::moveFile(sprintf($thumb_old,$suffix),sprintf($thumb_new,$suffix)); - } catch (Exception $e) {} - } - } - } - - protected function imageThumbRemove($f) - { - $p = path::info($f); - $thumb = sprintf($this->thumb_tp,'',$p['base'],'%s'); - - foreach ($this->thumb_sizes as $suffix => $s) { - try { - parent::removeFile(sprintf($thumb,$suffix)); - } catch (Exception $e) {} - } - } - - protected function imageMetaCreate($cur,$f,$id) - { - $file = $this->pwd.'/'.$f; - - if (!file_exists($file)) { - return false; - } - - $xml = new xmlTag('meta'); - $meta = imageMeta::readMeta($file); - $xml->insertNode($meta); - - $c = $this->core->con->openCursor($this->table); - $c->media_meta = $xml->toXML(); - - if ($cur->media_title !== null && $cur->media_title == basename($cur->media_file)) - { - if ($meta['Title']) { - $c->media_title = $meta['Title']; - } - } - - if ($meta['DateTimeOriginal'] && $cur->media_dt === '') - { - # We set picture time to user timezone - $media_ts = strtotime($meta['DateTimeOriginal']); - if ($media_ts !== false) { - $o = dt::getTimeOffset($this->core->auth->getInfo('user_tz'),$media_ts); - $c->media_dt = dt::str('%Y-%m-%d %H:%M:%S',$media_ts+$o); - } - } - - $c->update('WHERE media_id = '.$id); - } - - /** - Returns HTML code for MP3 player - - @param url string MP3 URL to play - @param player string Player URL - @param args array Player parameters - @return string - */ - public static function mp3player($url,$player=null,$args=null) - { - if (!$player) { - $player = 'player_mp3.swf'; - } - - if (!is_array($args)) - { - $args = array( - 'showvolume' => 1, - 'loadingcolor' => 'ff9900', - 'bgcolor1' => 'eeeeee', - 'bgcolor2' => 'cccccc', - 'buttoncolor' => '0066cc', - 'buttonovercolor' => 'ff9900', - 'slidercolor1' => 'cccccc', - 'slidercolor2' => '999999', - 'sliderovercolor' => '0066cc' - ); - } - - $args['mp3'] = $url; - - if (empty($args['width'])) { - $args['width'] = 200; - } - if (empty($args['height'])) { - $args['height'] = 20; - } - - $vars = array(); - foreach ($args as $k => $v) { - $vars[] = $k.'='.$v; - } - - return - ''. - ''. - ''. - ''. - __('Embedded Audio Player'). - ''; - } - - public static function flvplayer($url,$player=null,$args=null) - { - if (!$player) { - $player = 'player_flv.swf'; - } - - if (!is_array($args)) - { - $args = array( - 'margin' => 1, - 'showvolume' => 1, - 'showtime' => 1, - 'showfullscreen' => 1, - 'buttonovercolor' => 'ff9900', - 'slidercolor1' => 'cccccc', - 'slidercolor2' => '999999', - 'sliderovercolor' => '0066cc' - ); - } - - $args['flv'] = $url; - - if (empty($args['width'])) { - $args['width'] = 400; - } - if (empty($args['height'])) { - $args['height'] = 300; - } - - $vars = array(); - foreach ($args as $k => $v) { - $vars[] = $k.'='.$v; - } - - return - ''. - ''. - ''. - ''. - ''. - __('Embedded Video Player'). - ''; - } -} -?> diff --git a/v2/dotclear/inc/core/class.dc.meta.php b/v2/dotclear/inc/core/class.dc.meta.php deleted file mode 100644 index 9108d44..0000000 --- a/v2/dotclear/inc/core/class.dc.meta.php +++ /dev/null @@ -1,615 +0,0 @@ -dcCore dcCore instance - private $con; ///< connection Database connection object - private $table; ///< string Media table name - - /** - Object constructor. - - @param core dcCore dcCore instance - */ - public function __construct($core) - { - $this->core =& $core; - $this->con =& $this->core->con; - $this->table = $this->core->prefix.'meta'; - } - - /** - Splits up comma-separated values into an array of - unique, URL-proof metadata values. - - @param str string Comma-separated metadata. - - @return Array The array of sanitized metadata - */ - public function splitMetaValues($str) - { - $res = array(); - foreach (explode(',',$str) as $i => $tag) - { - $tag = trim($tag); - $tag = self::sanitizeMetaID($tag); - - if ($tag != false) { - $res[$i] = $tag; - } - } - - return array_unique($res); - } - - /** - Make a metadata ID URL-proof. - - @param str string the metadata ID. - - @return string The sanitized metadata - */ - public static function sanitizeMetaID($str) - { - return text::tidyURL($str,false,true); - } - - /** - Converts serialized metadata (for instance in dc_post post_meta) - into a meta array. - - @param str string the serialized metadata. - - @return Array the resulting array of post meta - */ - public function getMetaArray($str) - { - $meta = @unserialize($str); - - if (!is_array($meta)) { - return array(); - } - - return $meta; - } - - /** - Converts serialized metadata (for instance in dc_post post_meta) - into a comma-separated meta list for a given type. - - @param str string the serialized metadata. - @param type string meta type to retrieve metaIDs from. - - @return string the comma-separated list of meta - */ - public function getMetaStr($str,$type) - { - $meta = $this->getMetaArray($str); - - if (!isset($meta[$type])) { - return ''; - } - - return implode(', ',$meta[$type]); - } - - /** - Converts serialized metadata (for instance in dc_post post_meta) - into a "fetchable" metadata record. - - @param str string the serialized metadata. - @param type string meta type to retrieve metaIDs from. - - @return record the meta recordset - */ - public function getMetaRecordset($str,$type) - { - $meta = $this->getMetaArray($str); - $data = array(); - - if (isset($meta[$type])) - { - foreach ($meta[$type] as $v) - { - $data[] = array( - 'meta_id' => $v, - 'meta_type' => $type, - 'meta_id_lower' => mb_strtolower($v), - 'count' => 0, - 'percent' => 0, - 'roundpercent' => 0 - ); - } - } - - return staticRecord::newFromArray($data); - } - - /** - @deprecated since version 2.2 : $core->meta is always defined - @see getMetaRecordset - static version of getMetaRecordset - */ - public static function getMetaRecord($core,$str,$type) - { - $meta = new self($core); - return $meta->getMetaRecordset($str,$type); - } - - /** - Checks whether the current user is allowed to change post meta - An exception is thrown if user is not allowed. - - @param post_id string the post_id to check. - */ - private function checkPermissionsOnPost($post_id) - { - $post_id = (integer) $post_id; - - if (!$this->core->auth->check('usage,contentadmin',$this->core->blog->id)) { - throw new Exception(__('You are not allowed to change this entry status')); - } - - #�If user can only publish, we need to check the post's owner - if (!$this->core->auth->check('contentadmin',$this->core->blog->id)) - { - $strReq = 'SELECT post_id '. - 'FROM '.$this->core->prefix.'post '. - 'WHERE post_id = '.$post_id.' '. - "AND user_id = '".$this->con->escape($this->core->auth->userID())."' "; - - $rs = $this->con->select($strReq); - - if ($rs->isEmpty()) { - throw new Exception(__('You are not allowed to change this entry status')); - } - } - } - - /** - Updates serialized post_meta information with dc_meta table information. - - @param post_id string the post_id to update. - */ - private function updatePostMeta($post_id) - { - $post_id = (integer) $post_id; - - $strReq = 'SELECT meta_id, meta_type '. - 'FROM '.$this->table.' '. - 'WHERE post_id = '.$post_id.' '; - - $rs = $this->con->select($strReq); - - $meta = array(); - while ($rs->fetch()) { - $meta[$rs->meta_type][] = $rs->meta_id; - } - - $post_meta = serialize($meta); - - $cur = $this->con->openCursor($this->core->prefix.'post'); - $cur->post_meta = $post_meta; - - $cur->update('WHERE post_id = '.$post_id); - $this->core->blog->triggerBlog(); - } - - /** - Retrieves posts corresponding to given meta criteria. - $params is an array taking the following optional parameters: - - meta_id : get posts having meta id - - meta_type : get posts having meta type - - @param params array Parameters - @param count_only boolean Only counts results - - @return record the resulting posts record - */ - public function getPostsByMeta($params=array(),$count_only=false) - { - if (!isset($params['meta_id'])) { - return null; - } - - $params['from'] = ', '.$this->table.' META '; - $params['sql'] = 'AND META.post_id = P.post_id '; - - $params['sql'] .= "AND META.meta_id = '".$this->con->escape($params['meta_id'])."' "; - - if (!empty($params['meta_type'])) { - $params['sql'] .= "AND META.meta_type = '".$this->con->escape($params['meta_type'])."' "; - unset($params['meta_type']); - } - - unset($params['meta_id']); - - return $this->core->blog->getPosts($params,$count_only); - } - - /** - Retrieves comments to posts corresponding to given meta criteria. - $params is an array taking the following optional parameters: - - meta_id : get comments to posts having meta id - - meta_type : get comments to posts having meta type - - @param params array Parameters - @param count_only boolean Only counts results - - @return record the resulting comments record - */ - public function getCommentsByMeta($params=array(),$count_only=false) - { - if (!isset($params['meta_id'])) { - return null; - } - - $params['from'] = ', '.$this->table.' META '; - $params['sql'] = 'AND META.post_id = P.post_id '; - $params['sql'] .= "AND META.meta_id = '".$this->con->escape($params['meta_id'])."' "; - - if (!empty($params['meta_type'])) { - $params['sql'] .= "AND META.meta_type = '".$this->con->escape($params['meta_type'])."' "; - unset($params['meta_type']); - } - - return $this->core->blog->getComments($params,$count_only); - } - - /** - @deprecated since 2.2. Use getMetadata and computeMetaStats instead. - Generic-purpose metadata retrieval : gets metadatas according to given - criteria. Metadata get enriched with stastistics columns (only relevant - if limit parameter is not set). Metadata are sorted by post count - descending - - @param type string if not null, get metas having the given type - @param limit string if not null, number of max fetched metas - @param meta_id string if not null, get metas having the given id - @param post_id string if not null, get metas for the given post id - - @return record the meta recordset - */ - public function getMeta($type=null,$limit=null,$meta_id=null,$post_id=null) { - $params = array(); - - if ($type != null) - $params['meta_type'] = $type; - if ($limit != null) - $params['limit'] = $limit; - if ($meta_id != null) - $params['meta_id'] = $meta_id; - if ($meta_id != null) - $params['post_id'] = $post_id; - $rs = $this->getMetadata($params, false); - return $this->computeMetaStats($rs); - } - - /** - Generic-purpose metadata retrieval : gets metadatas according to given - criteria. $params is an array taking the following - optionnal parameters: - - - type: get metas having the given type - - meta_id: if not null, get metas having the given id - - post_id: get metas for the given post id - - limit: number of max fetched metas - - order: results order (default : posts count DESC) - - @param params array Parameters - @param count_only boolean Only counts results - - @return record the resulting comments record - */ - public function getMetadata($params=array(), $count_only=false) - { - if ($count_only) { - $strReq = 'SELECT count(distinct M.meta_id) '; - } else { - $strReq = 'SELECT M.meta_id, M.meta_type, COUNT(M.post_id) as count '; - } - - $strReq .= - 'FROM '.$this->table.' M LEFT JOIN '.$this->core->prefix.'post P '. - 'ON M.post_id = P.post_id '. - "WHERE P.blog_id = '".$this->con->escape($this->core->blog->id)."' "; - - if (isset($params['meta_type'])) { - $strReq .= " AND meta_type = '".$this->con->escape($params['meta_type'])."' "; - } - - if (isset($params['meta_id'])) { - $strReq .= " AND meta_id = '".$this->con->escape($params['meta_id'])."' "; - } - - if (isset($params['post_id'])) { - $strReq .= ' AND P.post_id '.$this->con->in($params['post_id']).' '; - } - - if (!$this->core->auth->check('contentadmin',$this->core->blog->id)) { - $strReq .= 'AND ((post_status = 1 '; - - if ($this->core->blog->without_password) { - $strReq .= 'AND post_password IS NULL '; - } - $strReq .= ') '; - - if ($this->core->auth->userID()) { - $strReq .= "OR P.user_id = '".$this->con->escape($this->core->auth->userID())."')"; - } else { - $strReq .= ') '; - } - } - - if (!$count_only) { - if (!isset($params['order'])) { - $params['order'] = 'count DESC'; - } - - $strReq .= - 'GROUP BY meta_id,meta_type,P.blog_id '. - 'ORDER BY '.$params['order']; - - if (isset($params['limit'])) { - $strReq .= $this->con->limit($params['limit']); - } - } - - $rs = $this->con->select($strReq); - return $rs; - } - - /** - Computes statistics from a metadata recordset. - Each record gets enriched with lowercase name, percent and roundpercent columns - - @param rs record recordset to enrich - - @return record the enriched recordset - */ - public function computeMetaStats($rs) { - $rs_static = $rs->toStatic(); - - $max = array(); - while ($rs_static->fetch()) - { - $type = $rs_static->meta_type; - if (!isset($max[$type])) { - $max[$type] = $rs_static->count; - } else { - if ($rs_static->count > $max[$type]) { - $max[$type] = $rs_static->count; - } - } - } - - while ($rs_static->fetch()) - { - $rs_static->set('meta_id_lower',mb_strtolower($rs_static->meta_id)); - - $count = $rs_static->count; - $percent = ((integer) $rs_static->count) * 100 / $max[$rs_static->meta_type]; - - $rs_static->set('percent',(integer) round($percent)); - $rs_static->set('roundpercent',round($percent/10)*10); - } - - return $rs_static; - } - - /** - Adds a metadata to a post. - - @param post_id integer the post id - @param type string meta type - @param value integer meta value - */ - public function setPostMeta($post_id,$type,$value) - { - $this->checkPermissionsOnPost($post_id); - - $value = trim($value); - if ($value === false) { return; } - - $cur = $this->con->openCursor($this->table); - - $cur->post_id = (integer) $post_id; - $cur->meta_id = (string) $value; - $cur->meta_type = (string) $type; - - $cur->insert(); - $this->updatePostMeta((integer) $post_id); - } - - /** - Removes metadata from a post. - - @param post_id integer the post id - @param type string meta type (if null, delete all types) - @param value integer meta value (if null, delete all values) - */ - public function delPostMeta($post_id,$type=null,$meta_id=null) - { - $post_id = (integer) $post_id; - - $this->checkPermissionsOnPost($post_id); - - $strReq = 'DELETE FROM '.$this->table.' '. - 'WHERE post_id = '.$post_id; - - if ($type !== null) { - $strReq .= " AND meta_type = '".$this->con->escape($type)."' "; - } - - if ($meta_id !== null) { - $strReq .= " AND meta_id = '".$this->con->escape($meta_id)."' "; - } - - $this->con->execute($strReq); - $this->updatePostMeta((integer) $post_id); - } - - /** - Mass updates metadata for a given post_type. - - @param meta_id integer old value - @param new_meta integer new value - @param type string meta type (if null, select all types) - @param post_type integer impacted post_type (if null, select all types) - @return boolean true if at least 1 post has been impacted - */ - public function updateMeta($meta_id,$new_meta_id,$type=null,$post_type=null) - { - $new_meta_id = self::sanitizeMetaID($new_meta_id); - - if ($new_meta_id == $meta_id) { - return true; - } - - $getReq = 'SELECT M.post_id '. - 'FROM '.$this->table.' M, '.$this->core->prefix.'post P '. - 'WHERE P.post_id = M.post_id '. - "AND P.blog_id = '".$this->con->escape($this->core->blog->id)."' ". - "AND meta_id = '%s' "; - - if (!$this->core->auth->check('contentadmin',$this->core->blog->id)) { - $getReq .= "AND P.user_id = '".$this->con->escape($this->core->auth->userID())."' "; - } - if ($post_type !== null) { - $getReq .= "AND P.post_type = '".$this->con->escape($post_type)."' "; - } - - $delReq = 'DELETE FROM '.$this->table.' '. - 'WHERE post_id IN (%s) '. - "AND meta_id = '%s' "; - - $updReq = 'UPDATE '.$this->table.' '. - "SET meta_id = '%s' ". - 'WHERE post_id IN (%s) '. - "AND meta_id = '%s' "; - - if ($type !== null) { - $plus = " AND meta_type = '%s' "; - $getReq .= $plus; - $delReq .= $plus; - $updReq .= $plus; - } - - $to_update = $to_remove = array(); - - $rs = $this->con->select(sprintf($getReq,$this->con->escape($meta_id), - $this->con->escape($type))); - - while ($rs->fetch()) { - $to_update[] = $rs->post_id; - } - - if (empty($to_update)) { - return false; - } - - $rs = $this->con->select(sprintf($getReq,$new_meta_id,$type)); - while ($rs->fetch()) { - if (in_array($rs->post_id,$to_update)) { - $to_remove[] = $rs->post_id; - unset($to_update[array_search($rs->post_id,$to_update)]); - } - } - - # Delete duplicate meta - if (!empty($to_remove)) - { - $this->con->execute(sprintf($delReq,implode(',',$to_remove), - $this->con->escape($meta_id), - $this->con->escape($type))); - - foreach ($to_remove as $post_id) { - $this->updatePostMeta($post_id); - } - } - - # Update meta - if (!empty($to_update)) - { - $this->con->execute(sprintf($updReq,$this->con->escape($new_meta_id), - implode(',',$to_update), - $this->con->escape($meta_id), - $this->con->escape($type))); - - foreach ($to_update as $post_id) { - $this->updatePostMeta($post_id); - } - } - - return true; - } - - /** - Mass delete metadata for a given post_type. - - @param meta_id integer meta value - @param type string meta type (if null, select all types) - @param post_type integer impacted post_type (if null, select all types) - @return Array the list of impacted post_ids - */ - public function delMeta($meta_id,$type=null,$post_type=null) - { - $strReq = 'SELECT M.post_id '. - 'FROM '.$this->table.' M, '.$this->core->prefix.'post P '. - 'WHERE P.post_id = M.post_id '. - "AND P.blog_id = '".$this->con->escape($this->core->blog->id)."' ". - "AND meta_id = '".$this->con->escape($meta_id)."' "; - - if ($type !== null) { - $strReq .= " AND meta_type = '".$this->con->escape($type)."' "; - } - - if ($post_type !== null) { - $strReq .= " AND P.post_type = '".$this->con->escape($post_type)."' "; - } - - $rs = $this->con->select($strReq); - - if ($rs->isEmpty()) return array(); - - $ids = array(); - while ($rs->fetch()) { - $ids[] = $rs->post_id; - } - - $strReq = 'DELETE FROM '.$this->table.' '. - 'WHERE post_id IN ('.implode(',',$ids).') '. - "AND meta_id = '".$this->con->escape($meta_id)."' "; - - if ($type !== null) { - $strReq .= " AND meta_type = '".$this->con->escape($type)."' "; - } - - $rs = $this->con->execute($strReq); - - foreach ($ids as $post_id) { - $this->updatePostMeta($post_id); - } - - return $ids; - } -} -?> diff --git a/v2/dotclear/inc/core/class.dc.modules.php b/v2/dotclear/inc/core/class.dc.modules.php deleted file mode 100644 index efe87e2..0000000 --- a/v2/dotclear/inc/core/class.dc.modules.php +++ /dev/null @@ -1,563 +0,0 @@ -dcCore dcCore instance - - /** - Object constructor. - - @param core dcCore dcCore instance - */ - public function __construct($core) - { - $this->core =& $core; - } - - /** - Loads modules. $path could be a separated list of paths - (path separator depends on your OS). - - $ns indicates if an additionnal file needs to be loaded on plugin - load, value could be: - - admin (loads module's _admin.php) - - public (loads module's _public.php) - - xmlrpc (loads module's _xmlrpc.php) - - $lang indicates if we need to load a lang file on plugin - loading. - */ - public function loadModules($path,$ns=null,$lang=null) - { - $this->path = explode(PATH_SEPARATOR,$path); - $this->ns = $ns; - - $disabled = isset($_SESSION['sess_safe_mode']) && $_SESSION['sess_safe_mode']; - $disabled = $disabled && !get_parent_class($this) ? true : false; - - foreach ($this->path as $root) - { - if (!is_dir($root) || !is_readable($root)) { - continue; - } - - if (substr($root,-1) != '/') { - $root .= '/'; - } - - if (($d = @dir($root)) === false) { - continue; - } - - while (($entry = $d->read()) !== false) - { - $full_entry = $root.'/'.$entry; - - if ($entry != '.' && $entry != '..' && is_dir($full_entry) - && file_exists($full_entry.'/_define.php')) - { - if (!file_exists($full_entry.'/_disabled') && !$disabled) - { - $this->id = $entry; - $this->mroot = $full_entry; - require $full_entry.'/_define.php'; - $this->id = null; - $this->mroot = null; - } - else - { - $this->disabled[$entry] = array( - 'root' => $full_entry, - 'root_writable' => is_writable($full_entry) - ); - } - } - } - $d->close(); - } - - # Sort plugins - uasort($this->modules,array($this,'sortModules')); - - # Load translation, _prepend and ns_file - foreach ($this->modules as $id => $m) - { - if (file_exists($m['root'].'/_prepend.php')) - { - $r = require $m['root'].'/_prepend.php'; - - # If _prepend.php file returns null (ie. it has a void return statement) - if (is_null($r)) { - continue; - } - unset($r); - } - - $this->loadModuleL10N($id,$lang,'main'); - if ($ns == 'admin') { - $this->loadModuleL10Nresources($id,$lang); - } - $this->loadNsFile($id,$ns); - } - } - - public function requireDefine($dir,$id) - { - if (file_exists($dir.'/_define.php')) { - $this->id = $id; - require $dir.'/_define.php'; - $this->id = null; - } - } - - /** - This method registers a module in modules list. You should use this to - register a new module. - - $permissions is a comma separated list of permissions for your - module. If $permissions is null, only super admin has access to - this module. - - $priority is an integer. Modules are sorted by priority and name. - Lowest priority comes first. - - @param name string Module name - @param desc string Module description - @param author string Module author name - @param version string Module version - @param properties array extra properties (currently available keys : permissions, priority) - */ - public function registerModule($name,$desc,$author,$version, $properties = array()) - { - if (!is_array($properties)) { - //Fallback to legacy registerModule parameters - $args = func_get_args(); - $properties = array(); - if (isset($args[4])) { - $properties['permissions']=$args[4]; - } - if (isset($args[5])) { - $properties['priority']= (integer)$args[5]; - } - } - $properties = array_merge( - array( - 'permissions' => null, - 'priority' => 1000 - ), $properties - ); - $permissions = $properties['permissions']; - if ($this->ns == 'admin') { - if ($permissions == '' && !$this->core->auth->isSuperAdmin()) { - return; - } elseif (!$this->core->auth->check($permissions,$this->core->blog->id)) { - return; - } - } - - if ($this->id) { - $module_exists = array_key_exists($name,$this->modules_names); - $module_overwrite = $module_exists ? version_compare($this->modules_names[$name],$version,'<') : false; - if (!$module_exists || ($module_exists && $module_overwrite)) { - $this->modules_names[$name] = $version; - $this->modules[$this->id] = array_merge( - $properties, - array( - 'root' => $this->mroot, - 'name' => $name, - 'desc' => $desc, - 'author' => $author, - 'version' => $version, - 'root_writable' => is_writable($this->mroot) - ) - ); - } - else { - $path1 = path::real($this->moduleInfo($name,'root')); - $path2 = path::real($this->mroot); - $this->errors[] = sprintf( - __('%s: in [%s] and [%s]'), - ''.$name.'', - ''.$path1.'', - ''.$path2.'' - ); - } - } - } - - public function resetModulesList() - { - $this->modules = array(); - $this->modules_names = array(); - } - - public static function installPackage($zip_file,dcModules &$modules) - { - $zip = new fileUnzip($zip_file); - $zip->getList(false,'#(^|/)(__MACOSX|\.svn|\.DS_Store|\.directory|Thumbs\.db)(/|$)#'); - - $zip_root_dir = $zip->getRootDir(); - $define = ''; - if ($zip_root_dir != false) { - $target = dirname($zip_file); - $destination = $target.'/'.$zip_root_dir; - $define = $zip_root_dir.'/_define.php'; - $has_define = $zip->hasFile($define); - } else { - $target = dirname($zip_file).'/'.preg_replace('/\.([^.]+)$/','',basename($zip_file)); - $destination = $target; - $define = '_define.php'; - $has_define = $zip->hasFile($define); - } - - if ($zip->isEmpty()) { - $zip->close(); - unlink($zip_file); - throw new Exception(__('Empty module zip file.')); - } - - if (!$has_define) { - $zip->close(); - unlink($zip_file); - throw new Exception(__('The zip file does not appear to be a valid Dotclear module.')); - } - - $ret_code = 1; - - if (is_dir($destination)) - { - # test for update - $sandbox = clone $modules; - $zip->unzip($define, $target.'/_define.php'); - - $sandbox->resetModulesList(); - $sandbox->requireDefine($target,basename($destination)); - unlink($target.'/_define.php'); - $new_modules = $sandbox->getModules(); - - if (!empty($new_modules)) - { - $tmp = array_keys($new_modules); - $id = $tmp[0]; - $cur_module = $modules->getModules($id); - if (!empty($cur_module) && $new_modules[$id]['version'] != $cur_module['version']) - { - # delete old module - if (!files::deltree($destination)) { - throw new Exception(__('An error occurred during module deletion.')); - } - $ret_code = 2; - } - else - { - $zip->close(); - unlink($zip_file); - throw new Exception(sprintf(__('Unable to upgrade "%s". (same version)'),basename($destination))); - } - } - else - { - $zip->close(); - unlink($zip_file); - throw new Exception(sprintf(__('Unable to read new _define.php file'))); - } - } - $zip->unzipAll($target); - $zip->close(); - unlink($zip_file); - return $ret_code; - } - - /** - This method installs all modules having a _install file. - - @see dcModules::installModule - */ - public function installModules() - { - $res = array('success'=>array(),'failure'=>array()); - foreach ($this->modules as $id => &$m) - { - $i = $this->installModule($id,$msg); - if ($i === true) { - $res['success'][$id] = true; - } elseif ($i === false) { - $res['failure'][$id] = $msg; - } - } - - return $res; - } - - /** - This method installs module with ID $id and having a _install - file. This file should throw exception on failure or true if it installs - successfully. - - $msg is an out parameter that handle installer message. - - @param id string Module ID - @param msg string Module installer message - @return boolean - */ - public function installModule($id,&$msg) - { - try { - $i = $this->loadModuleFile($this->modules[$id]['root'].'/_install.php'); - if ($i === true) { - return true; - } - } catch (Exception $e) { - $msg = $e->getMessage(); - return false; - } - - return null; - } - - public function deleteModule($id,$disabled=false) - { - if ($disabled) { - $p =& $this->disabled; - } else { - $p =& $this->modules; - } - - if (!isset($p[$id])) { - throw new Exception(__('No such module.')); - } - - if (!files::deltree($p[$id]['root'])) { - throw new Exception(__('Cannot remove module files')); - } - } - - public function deactivateModule($id) - { - if (!isset($this->modules[$id])) { - throw new Exception(__('No such module.')); - } - - if (!$this->modules[$id]['root_writable']) { - throw new Exception(__('Cannot deactivate plugin.')); - } - - if (@file_put_contents($this->modules[$id]['root'].'/_disabled','')) { - throw new Exception(__('Cannot deactivate plugin.')); - } - } - - public function activateModule($id) - { - if (!isset($this->disabled[$id])) { - throw new Exception(__('No such module.')); - } - - if (!$this->disabled[$id]['root_writable']) { - throw new Exception(__('Cannot activate plugin.')); - } - - if (@unlink($this->disabled[$id]['root'].'/_disabled') === false) { - throw new Exception(__('Cannot activate plugin.')); - } - } - - /** - This method will search for file $file in language - $lang for module $id. - - $file should not have any extension. - - @param id string Module ID - @param lang string Language code - @param file string File name (without extension) - */ - public function loadModuleL10N($id,$lang,$file) - { - if (!$lang || !isset($this->modules[$id])) { - return; - } - - $lfile = $this->modules[$id]['root'].'/locales/%s/%s'; - if (l10n::set(sprintf($lfile,$lang,$file)) === false && $lang != 'en') { - l10n::set(sprintf($lfile,'en',$file)); - } - } - - public function loadModuleL10Nresources($id,$lang) - { - if (!$lang || !isset($this->modules[$id])) { - return; - } - - $f = l10n::getFilePath($this->modules[$id]['root'].'/locales','resources.php',$lang); - if ($f) { - $this->loadModuleFile($f); - } - } - - /** - Returns all modules associative array or only one module if $id - is present. - - @param id string Optionnal module ID - @return array - */ - public function getModules($id=null) - { - if ($id && isset($this->modules[$id])) { - return $this->modules[$id]; - } - return $this->modules; - } - - /** - Returns true if the module with ID $id exists. - - @param id string Module ID - @return boolean - */ - public function moduleExists($id) - { - return isset($this->modules[$id]); - } - - /** - Returns all disabled modules in an array - - @return array - */ - public function getDisabledModules() - { - return $this->disabled; - } - - /** - Returns root path for module with ID $id. - - @param id string Module ID - @return string - */ - public function moduleRoot($id) - { - return $this->moduleInfo($id,'root'); - } - - /** - Returns a module information that could be: - - root - - name - - desc - - author - - version - - permissions - - priority - - @param id string Module ID - @param info string Information to retrieve - @return string - */ - public function moduleInfo($id,$info) - { - return isset($this->modules[$id][$info]) ? $this->modules[$id][$info] : null; - } - - /** - Loads namespace $ns specific files for all modules. - - @param ns string Namespace name - */ - public function loadNsFiles($ns=null) - { - foreach ($this->modules as $k => $v) { - $this->loadNsFile($k,$ns); - } - } - - /** - Loads namespace $ns specific file for module with ID - $id - - @param id string Module ID - @param ns string Namespace name - */ - public function loadNsFile($id,$ns=null) - { - switch ($ns) { - case 'admin': - $this->loadModuleFile($this->modules[$id]['root'].'/_admin.php'); - break; - case 'public': - $this->loadModuleFile($this->modules[$id]['root'].'/_public.php'); - break; - case 'xmlrpc': - $this->loadModuleFile($this->modules[$id]['root'].'/_xmlrpc.php'); - break; - } - } - - public function getErrors() - { - return $this->errors; - } - - protected function loadModuleFile($________) - { - if (!file_exists($________)) { - return; - } - - self::$_k = array_keys($GLOBALS); - - foreach (self::$_k as self::$_n) { - if (!in_array(self::$_n,self::$superglobals)) { - global ${self::$_n}; - } - } - - return require $________; - } - - private function sortModules($a,$b) - { - if ($a['priority'] == $b['priority']) { - return strcasecmp($a['name'],$b['name']); - } - - return ($a['priority'] < $b['priority']) ? -1 : 1; - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/core/class.dc.namespace.php b/v2/dotclear/inc/core/class.dc.namespace.php deleted file mode 100644 index cb81f6b..0000000 --- a/v2/dotclear/inc/core/class.dc.namespace.php +++ /dev/null @@ -1,308 +0,0 @@ -connection Database connection object - protected $table; ///< string Settings table name - protected $blog_id; ///< string Blog ID - - protected $global_settings = array(); ///< array Global settings array - protected $local_settings = array(); ///< array Local settings array - protected $settings = array(); ///< array Associative settings array - protected $ns; ///< string Current namespace - - /** - Object constructor. Retrieves blog settings and puts them in $settings - array. Local (blog) settings have a highest priority than global settings. - - @param name string ID for this namespace - */ - public function __construct(&$core, $blog_id, $name, $rs=null) - { - if (preg_match('/^[a-zA-Z][a-zA-Z0-9]+$/',$name)) { - $this->ns = $name; - } else { - throw new Exception(sprintf(__('Invalid setting dcNamespace: %s'),$name)); - } - - $this->con =& $core->con; - $this->table = $core->prefix.'setting'; - $this->blog_id =& $blog_id; - - $this->getSettings($rs); - } - - private function getSettings($rs=null) - { - if ($rs == null) { - $strReq = 'SELECT blog_id, setting_id, setting_value, '. - 'setting_type, setting_label, setting_ns '. - 'FROM '.$this->table.' '. - "WHERE (blog_id = '".$this->con->escape($this->blog_id)."' ". - 'OR blog_id IS NULL) '. - "AND setting_ns = '".$this->con->escape($this->ns)."' ". - 'ORDER BY setting_id DESC '; - - try { - $rs = $this->con->select($strReq); - } catch (Exception $e) { - trigger_error(__('Unable to retrieve settings:').' '.$this->con->error(), E_USER_ERROR); - } - } - while ($rs->fetch()) - { - if ($rs->f('setting_ns') != $this->ns){ - break; - } - $id = trim($rs->f('setting_id')); - $value = $rs->f('setting_value'); - $type = $rs->f('setting_type'); - - if ($type == 'float' || $type == 'double') { - $type = 'float'; - } elseif ($type != 'boolean' && $type != 'integer') { - $type = 'string'; - } - - settype($value,$type); - - $array = $rs->blog_id ? 'local' : 'global'; - - $this->{$array.'_settings'}[$id] = array( - 'ns' => $this->ns, - 'value' => $value, - 'type' => $type, - 'label' => (string) $rs->f('setting_label'), - 'global' => $rs->blog_id == '' - ); - } - - $this->settings = $this->global_settings; - - foreach ($this->local_settings as $id => $v) { - $this->settings[$id] = $v; - } - - return true; - } - - private function settingExists($id,$global=false) - { - $array = $global ? 'global' : 'local'; - return isset($this->{$array.'_settings'}[$id]); - } - - /** - Returns setting value if exists. - - @param n string Setting name - @return mixed - */ - public function get($n) - { - if (isset($this->settings[$n]['value'])) { - return $this->settings[$n]['value']; - } - - return null; - } - - /** - Magic __get method. - @copydoc ::get - */ - public function __get($n) - { - return $this->get($n); - } - - /** - Sets a setting in $settings property. This sets the setting for script - execution time only and if setting exists. - - @param n string Setting name - @param v mixed Setting value - */ - public function set($n,$v) - { - if (isset($this->settings[$n])) { - $this->settings[$n]['value'] = $v; - } - } - - /** - Magic __set method. - @copydoc ::set - */ - public function __set($n,$v) - { - $this->set($n,$v); - } - - /** - Creates or updates a setting. - - $type could be 'string', 'integer', 'float', 'boolean' or null. If $type is - null and setting exists, it will keep current setting type. - - $value_change allow you to not change setting. Useful if you need to change - a setting label or type and don't want to change its value. - - @param id string Setting ID - @param value mixed Setting value - @param type string Setting type - @param label string Setting label - @param value_change boolean Change setting value or not - @param global boolean Setting is global - */ - public function put($id,$value,$type=null,$label=null,$value_change=true,$global=false) - { - if (!preg_match('/^[a-zA-Z][a-zA-Z0-9_]+$/',$id)) { - throw new Exception(sprintf(__('%s is not a valid setting id'),$id)); - } - - # We don't want to change setting value - if (!$value_change) - { - if (!$global && $this->settingExists($id,false)) { - $value = $this->local_settings[$id]['value']; - } elseif ($this->settingExists($id,true)) { - $value = $this->global_settings[$id]['value']; - } - } - - # Setting type - if ($type == 'double') - { - $type = 'float'; - } - elseif ($type === null) - { - if (!$global && $this->settingExists($id,false)) { - $type = $this->local_settings[$id]['type']; - } elseif ($this->settingExists($id,true)) { - $type = $this->global_settings[$id]['type']; - } else { - $type = 'string'; - } - } - elseif ($type != 'boolean' && $type != 'integer' && $type != 'float') - { - $type = 'string'; - } - - # We don't change label - if ($label == null) - { - if (!$global && $this->settingExists($id,false)) { - $label = $this->local_settings[$id]['label']; - } elseif ($this->settingExists($id,true)) { - $label = $this->global_settings[$id]['label']; - } - } - - settype($value,$type); - - $cur = $this->con->openCursor($this->table); - $cur->setting_value = ($type == 'boolean') ? (string) (integer) $value : (string) $value; - $cur->setting_type = $type; - $cur->setting_label = $label; - - #If we are local, compare to global value - if (!$global && $this->settingExists($id,true)) - { - $g = $this->global_settings[$id]; - $same_setting = $g['ns'] == $this->ns && $g['value'] == $value - && $g['type'] == $type && $g['label'] == $label; - - # Drop setting if same value as global - if ($same_setting && $this->settingExists($id,false)) { - $this->drop($id); - } elseif ($same_setting) { - return; - } - } - - if ($this->settingExists($id,$global) && $this->ns == $this->settings[$id]['ns']) - { - if ($global) { - $where = 'WHERE blog_id IS NULL '; - } else { - $where = "WHERE blog_id = '".$this->con->escape($this->blog_id)."' "; - } - - $cur->update($where."AND setting_id = '".$this->con->escape($id)."' AND setting_ns = '".$this->con->escape($this->ns)."' "); - } - else - { - $cur->setting_id = $id; - $cur->blog_id = $global ? null : $this->blog_id; - $cur->setting_ns = $this->ns; - - $cur->insert(); - } - } - - /** - Removes an existing setting. Namespace - - @param id string Setting ID - */ - public function drop($id) - { - if (!$this->ns) { - throw new Exception(__('No namespace specified')); - } - - $strReq = 'DELETE FROM '.$this->table.' '; - - if ($this->blog_id === null) { - $strReq .= 'WHERE blog_id IS NULL '; - } else { - $strReq .= "WHERE blog_id = '".$this->con->escape($this->blog_id)."' "; - } - - $strReq .= "AND setting_id = '".$this->con->escape($id)."' "; - $strReq .= "AND setting_ns = '".$this->con->escape($this->ns)."' "; - - $this->con->execute($strReq); - } - - /** - Returns $settings property content. - - @return array - */ - public function dumpSettings() - { - return $this->settings; - } - - /** - Returns $global_settings property content. - - @return array - */ - public function dumpGlobalSettings() - { - return $this->global_settings; - } - -} -?> diff --git a/v2/dotclear/inc/core/class.dc.postmedia.php b/v2/dotclear/inc/core/class.dc.postmedia.php deleted file mode 100644 index 2d55a2e..0000000 --- a/v2/dotclear/inc/core/class.dc.postmedia.php +++ /dev/null @@ -1,172 +0,0 @@ -dcCore dcCore instance - protected $con; ///< connection Database connection - protected $table; ///< string Post-Media table name - - /** - Object constructor. - - @param core dcCore dcCore instance - @param type string Media type filter - */ - public function __construct($core,$type='') - { - $this->core =& $core; - $this->con =& $core->con; - $this->table = $this->core->prefix.'post_media'; - } - - /** - Returns media items attached to a blog post. Result is an array containing - fileItems objects. - - @param post_id integer Post ID - @param media_id integer Optionnal media ID - @return array Array of fileItems - */ - public function getPostMedia($params=array()) - { - $strReq = - 'SELECT M.media_file, M.media_id, M.media_path, M.media_title, M.media_meta, M.media_dt, '. - 'M.media_creadt, M.media_upddt, M.media_private, M.user_id, PM.post_id '; - - if (!empty($params['columns']) && is_array($params['columns'])) { - $strReq .= implode(', ',$params['columns']).', '; - } - - $strReq .= - 'FROM '.$this->core->prefix.'media M '. - 'INNER JOIN '.$this->table.' PM ON (M.media_id = PM.media_id) '; - - if (!empty($params['from'])) { - $strReq .= $params['from'].' '; - } - - $where=''; - if (isset($params['post_id'])) { - $where[]="PM.post_id ".$this->con->in($params['post_id']); - } - if (isset($params['media_id'])) { - $where[]="M.media_id ".$this->con->in($params['media_id']); - } - if (isset($params['media_path'])) { - $where[]="M.media_path ".$this->con->in($params['media_path']); - } - if (isset($params['link_type'])) { - $where[]="PM.link_type ".$this->con->in($params['link_type']); - } else { - $where[]="PM.link_type='attachment'"; - } - - $strReq .= 'WHERE '.join('AND ',$where).' '; - - if (isset($params['sql'])) { - $strReq .= $params['sql']; - } - //echo $strReq; exit; - $rs = $this->con->select($strReq); - - return $rs; - } - - /** - Attaches a media to a post. - - @param post_id integer Post ID - @param media_id integer Optionnal media ID - */ - public function addPostMedia($post_id,$media_id,$link_type='attachment') - { - $post_id = (integer) $post_id; - $media_id = (integer) $media_id; - - $f = $this->getPostMedia(array('post_id'=>$post_id,'media_id'=>$media_id,'link_type'=>$link_type)); - - if (!$f->isEmpty()) { - return; - } - - $cur = $this->con->openCursor($this->table); - $cur->post_id = $post_id; - $cur->media_id = $media_id; - $cur->link_type = $link_type; - - $cur->insert(); - $this->core->blog->triggerBlog(); - } - - /** - Detaches a media from a post. - - @param post_id integer Post ID - @param media_id integer Optionnal media ID - */ - public function removePostMedia($post_id,$media_id,$link_type=null) - { - $post_id = (integer) $post_id; - $media_id = (integer) $media_id; - - $strReq = 'DELETE FROM '.$this->table.' '. - 'WHERE post_id = '.$post_id.' '. - 'AND media_id = '.$media_id.' '; - if ($link_type != null) { - $strReq .= "AND link_type = '".$this->con->escape($link_type)."'"; - } - $this->con->execute($strReq); - $this->core->blog->triggerBlog(); - } - - /** - Returns media items attached to a blog post. Result is an array containing - fileItems objects. - - @param post_id integer Post ID - @param media_id integer Optionnal media ID - @return array Array of fileItems - */ - public function getLegacyPostMedia($post_id,$media_id=null) - { - $post_id = (integer) $post_id; - - $strReq = - 'SELECT media_file, M.media_id, media_path, media_title, media_meta, media_dt, '. - 'media_creadt, media_upddt, media_private, user_id '. - 'FROM '.$this->table.' M '. - 'INNER JOIN '.$this->table_ref.' PM ON (M.media_id = PM.media_id) '. - "WHERE media_path = '".$this->path."' ". - 'AND post_id = '.$post_id.' '; - - if ($media_id) { - $strReq .= 'AND M.media_id = '.(integer) $media_id.' '; - } - - $rs = $this->con->select($strReq); - - $res = array(); - - while ($rs->fetch()) { - $f = $this->fileRecord($rs); - if ($f !== null) { - $res[] = $f; - } - } - - return $res; - } - -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/core/class.dc.prefs.php b/v2/dotclear/inc/core/class.dc.prefs.php deleted file mode 100644 index f38af35..0000000 --- a/v2/dotclear/inc/core/class.dc.prefs.php +++ /dev/null @@ -1,134 +0,0 @@ -connection Database connection object - protected $table; ///< string Prefs table name - protected $user_id; ///< string User ID - - protected $workspaces = array(); ///< array Associative workspaces array - - protected $ws; ///< string Current workspace - - /** - Object constructor. Retrieves user prefs and puts them in $workspaces - array. Local (user) prefs have a highest priority than global prefs. - - @param core dcCore dcCore object - @param user_id string User ID - */ - public function __construct($core,$user_id) - { - $this->con =& $core->con; - $this->table = $core->prefix.'pref'; - $this->user_id =& $user_id; - try {$this->loadPrefs();} catch (Exception $e) { - if (version_compare($core->getVersion('core'),'2.3','>')) { - trigger_error(__('Unable to retrieve workspaces:').' '.$this->con->error(), E_USER_ERROR); - } - } - } - - /** - Retrieves all workspaces (and their prefs) from database, with one query. - */ - private function loadPrefs() - { - $strReq = 'SELECT user_id, pref_id, pref_value, '. - 'pref_type, pref_label, pref_ws '. - 'FROM '.$this->table.' '. - "WHERE user_id = '".$this->con->escape($this->user_id)."' ". - 'OR user_id IS NULL '. - 'ORDER BY pref_ws ASC, pref_id ASC'; - try { - $rs = $this->con->select($strReq); - } catch (Exception $e) { - throw $e; - } - - /* Prevent empty tables (install phase, for instance) */ - if ($rs->isEmpty()) { - return; - } - - do { - $ws = trim($rs->f('pref_ws')); - if (!$rs->isStart()) { - // we have to go up 1 step, since workspaces construction performs a fetch() - // at very first time - $rs->movePrev(); - } - $this->workspaces[$ws] = new dcWorkspace($GLOBALS['core'], $this->user_id, $ws,$rs); - } while(!$rs->isStart()); - } - - - /** - Create a new workspace. If the workspace already exists, return it without modification. - - @param ws string Workspace name - @return dcWorkspace The workspace created - */ - public function addWorkspace($ws) - { - if (!array_key_exists($ws, $this->workspaces)) { - $this->workspaces[$ws] = new dcWorkspace($GLOBALS['core'], $this->user_id, $ws); - } - return $this->workspaces[$ws]; - } - - /** - Returns full workspace with all prefs pertaining to it. - - @param ws string Workspace name - @return dcWorkspace - */ - public function get($ws) - { - if (array_key_exists($ws, $this->workspaces)) { - return $this->workspaces[$ws]; - } - - return null; - } - - /** - Magic __get method. - @copydoc ::get - */ - public function __get($n) - { - return $this->get($n); - } - - /** - Returns $workspaces property content. - - @return array - */ - public function dumpWorkspaces() - { - return $this->workspaces; - } - -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/core/class.dc.rest.php b/v2/dotclear/inc/core/class.dc.rest.php deleted file mode 100644 index e9334f9..0000000 --- a/v2/dotclear/inc/core/class.dc.rest.php +++ /dev/null @@ -1,52 +0,0 @@ -dcCore dcCore instance - */ - public function __construct($core) - { - parent::__construct(); - - $this->core =& $core; - } - - /** - Rest method call. - - @param name string Method name - @param get array GET parameters copy - @param post array POST parameters copy - @return mixed Rest method result - */ - protected function callFunction($name,$get,$post) - { - if (isset($this->functions[$name])) { - return call_user_func($this->functions[$name],$this->core,$get,$post); - } - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/core/class.dc.rs.extensions.php b/v2/dotclear/inc/core/class.dc.rs.extensions.php deleted file mode 100644 index ad87acf..0000000 --- a/v2/dotclear/inc/core/class.dc.rs.extensions.php +++ /dev/null @@ -1,870 +0,0 @@ -boolean - */ - public static function isEditable($rs) - { - # If user is admin or contentadmin, true - if ($rs->core->auth->check('contentadmin',$rs->core->blog->id)) { - return true; - } - - # No user id in result ? false - if (!$rs->exists('user_id')) { - return false; - } - - # If user is usage and owner of the entrie - if ($rs->core->auth->check('usage',$rs->core->blog->id) - && $rs->user_id == $rs->core->auth->userID()) { - return true; - } - - return false; - } - - /** - Returns whether post is deletable - - @param rs Invisible parameter - @return boolean - */ - public static function isDeletable($rs) - { - # If user is admin, or contentadmin, true - if ($rs->core->auth->check('contentadmin',$rs->core->blog->id)) { - return true; - } - - # No user id in result ? false - if (!$rs->exists('user_id')) { - return false; - } - - # If user has delete rights and is owner of the entrie - if ($rs->core->auth->check('delete',$rs->core->blog->id) - && $rs->user_id == $rs->core->auth->userID()) { - return true; - } - - return false; - } - - /** - Returns whether post is the first one of its day. - - @param rs Invisible parameter - @return boolean - */ - public static function firstPostOfDay($rs) - { - if ($rs->isStart()) { - return true; - } - - $cdate = date('Ymd',strtotime($rs->post_dt)); - $rs->movePrev(); - $ndate = date('Ymd',strtotime($rs->post_dt)); - $rs->moveNext(); - return $ndate != $cdate; - } - - /** - Returns whether post is the last one of its day. - - @param rs Invisible parameter - @return boolean - */ - public static function lastPostOfDay($rs) - { - if ($rs->isEnd()) { - return true; - } - - $cdate = date('Ymd',strtotime($rs->post_dt)); - $rs->moveNext(); - $ndate = date('Ymd',strtotime($rs->post_dt)); - $rs->movePrev(); - return $ndate != $cdate; - } - - /** - Returns whether comments are enabled on post. - - @param rs Invisible parameter - @return boolean - */ - public static function commentsActive($rs) - { - return - $rs->core->blog->settings->system->allow_comments - && $rs->post_open_comment - && ($rs->core->blog->settings->system->comments_ttl == 0 || - time()-($rs->core->blog->settings->system->comments_ttl*86400) < $rs->getTS()); - } - - /** - Returns whether trackbacks are enabled on post. - - @param rs Invisible parameter - @return boolean - */ - public static function trackbacksActive($rs) - { - return - $rs->core->blog->settings->system->allow_trackbacks - && $rs->post_open_tb - && ($rs->core->blog->settings->system->trackbacks_ttl == 0 || - time()-($rs->core->blog->settings->system->trackbacks_ttl*86400) < $rs->getTS()); - } - - /** - Returns whether post has at least one comment. - - @param rs Invisible parameter - @return boolean - */ - public static function hasComments($rs) - { - return $rs->nb_comment > 0; - } - - /** - Returns whether post has at least one trackbacks. - - @return boolean - */ - public static function hasTrackbacks($rs) - { - return $rs->nb_trackback > 0; - } - - /** - Returns full post URL. - - @param rs Invisible parameter - @return string - */ - public static function getURL($rs) - { - return $rs->core->blog->url.$rs->core->getPostPublicURL( - $rs->post_type,html::sanitizeURL($rs->post_url) - ); - } - - /** - Returns full post category URL. - - @param rs Invisible parameter - @return string - */ - public static function getCategoryURL($rs) - { - return $rs->core->blog->url.$rs->core->url->getURLFor('category',html::sanitizeURL($rs->cat_url)); - } - - /** - Returns whether post has an excerpt. - - @param rs Invisible parameter - @return boolean - */ - public static function isExtended($rs) - { - return $rs->post_excerpt_xhtml != ''; - } - - /** - Returns post timestamp. - - @param rs Invisible parameter - @param type string (dt|upddt|creadt) defaults to post_dt - @return integer - */ - public static function getTS($rs,$type='') - { - if ($type == 'upddt') { - return strtotime($rs->post_upddt); - } elseif ($type == 'creadt') { - return strtotime($rs->post_creadt); - } else { - return strtotime($rs->post_dt); - } - } - - /** - Returns post date formating according to the ISO 8601 standard. - - @param rs Invisible parameter - @param type string (dt|upddt|creadt) defaults to post_dt - @return string - */ - public static function getISO8601Date($rs,$type='') - { - if ($type == 'upddt' || $type == 'creadt') { - return dt::iso8601($rs->getTS($type)+dt::getTimeOffset($rs->post_tz),$rs->post_tz); - } else { - return dt::iso8601($rs->getTS(),$rs->post_tz); - } - } - - /** - Returns post date formating according to RFC 822. - - @param rs Invisible parameter - @param type string (dt|upddt|creadt) defaults to post_dt - @return string - */ - public static function getRFC822Date($rs,$type='') - { - if ($type == 'upddt' || $type == 'creadt') { - return dt::rfc822($rs->getTS($type)+dt::getTimeOffset($rs->post_tz),$rs->post_tz); - } else { - return dt::rfc822($rs->getTS($type),$rs->post_tz); - } - } - - /** - Returns post date with $format as formatting pattern. If format - is empty, uses date_format blog setting. - - @param rs Invisible parameter - @param format string Date format pattern - @param type string (dt|upddt|creadt) defaults to post_dt - @return string - */ - public static function getDate($rs,$format,$type='') - { - if (!$format) { - $format = $rs->core->blog->settings->system->date_format; - } - - if ($type == 'upddt') { - return dt::dt2str($format,$rs->post_upddt,$rs->post_tz); - } elseif ($type == 'creadt') { - return dt::dt2str($format,$rs->post_creadt,$rs->post_tz); - } else { - return dt::dt2str($format,$rs->post_dt); - } - } - - /** - Returns post time with $format as formatting pattern. If format - is empty, uses time_format blog setting. - - @param rs Invisible parameter - @param format string Time format pattern - @param type string (dt|upddt|creadt) defaults to post_dt - @return string - */ - public static function getTime($rs,$format,$type='') - { - if (!$format) { - $format = $rs->core->blog->settings->system->time_format; - } - - if ($type == 'upddt') { - return dt::dt2str($format,$rs->post_upddt,$rs->post_tz); - } elseif ($type == 'creadt') { - return dt::dt2str($format,$rs->post_creadt,$rs->post_tz); - } else { - return dt::dt2str($format,$rs->post_dt); - } - } - - /** - Returns author common name using user_id, user_name, user_firstname and - user_displayname fields. - - @param rs Invisible parameter - @return string - */ - public static function getAuthorCN($rs) - { - return dcUtils::getUserCN($rs->user_id, $rs->user_name, - $rs->user_firstname, $rs->user_displayname); - } - - /** - Returns author common name with a link if he specified one in its - preferences. - - @param rs Invisible parameter - @return string - */ - public static function getAuthorLink($rs) - { - $res = '%1$s'; - $url = $rs->user_url; - if ($url) { - $res = '%1$s'; - } - - return sprintf($res,html::escapeHTML($rs->getAuthorCN()),html::escapeHTML($url)); - } - - /** - Returns author e-mail address. If $encoded is true, "@" sign is - replaced by "%40" and "." by "%2e". - - @param rs Invisible parameter - @param encoded boolean Encode address. - @return string - */ - public static function getAuthorEmail($rs,$encoded=true) - { - if ($encoded) { - return strtr($rs->user_email,array('@'=>'%40','.'=>'%2e')); - } - return $rs->user_email; - } - - /** - Returns post feed unique ID. - - @param rs Invisible parameter - @return string - */ - public static function getFeedID($rs) - { - return 'urn:md5:'.md5($rs->core->blog->uid.$rs->post_id); - - $url = parse_url($rs->core->blog->url); - $date_part = date('Y-m-d',strtotime($rs->post_creadt)); - - return 'tag:'.$url['host'].','.$date_part.':'.$rs->post_id; - } - - /** - Returns trackback RDF information block in HTML comment. - - @param rs Invisible parameter - @return string - */ - public static function getTrackbackData($rs) - { - return - "\n". - "\n"; - } - - /** - Returns post trackback full URL. - - @param rs Invisible parameter - @return string - */ - public static function getTrackbackLink($rs) - { - return $rs->core->blog->url.$rs->core->url->getURLFor('trackback',$rs->post_id); - } - - /** - Returns post content. If $absolute_urls is true, appends full - blog URL to each relative post URLs. - - @param rs Invisible parameter - @param absolute_urls boolean With absolute URLs - @return string - */ - public static function getContent($rs,$absolute_urls=false) - { - if ($absolute_urls) { - return html::absoluteURLs($rs->post_content_xhtml,$rs->getURL()); - } else { - return $rs->post_content_xhtml; - } - } - - /** - Returns post excerpt. If $absolute_urls is true, appends full - blog URL to each relative post URLs. - - @param rs Invisible parameter - @param absolute_urls boolean With absolute URLs - @return string - */ - public static function getExcerpt($rs,$absolute_urls=false) - { - if ($absolute_urls) { - return html::absoluteURLs($rs->post_excerpt_xhtml,$rs->getURL()); - } else { - return $rs->post_excerpt_xhtml; - } - } - - /** - Returns post media count using a subquery. - - @param rs Invisible parameter - @return integer - */ - public static function countMedia($rs) - { - if (isset($rs->_nb_media[$rs->index()])) - { - return $rs->_nb_media[$rs->index()]; - } - else - { - $strReq = - 'SELECT count(media_id) '. - 'FROM '.$rs->core->prefix.'post_media '. - 'WHERE post_id = '.(integer) $rs->post_id.' '; - - $res = (integer) $rs->core->con->select($strReq)->f(0); - $rs->_nb_media[$rs->index()] = $res; - return $res; - } - } -} - -/** -@ingroup DC_CORE -@brief Dotclear comment record helpers. - -This class adds new methods to database comment results. -You can call them on every record comming from dcBlog::getComments and similar -methods. - -@warning You should not give the first argument (usualy $rs) of every described -function. -*/ -class rsExtComment -{ - /** - Returns comment date with $format as formatting pattern. If - format is empty, uses date_format blog setting. - - @param rs Invisible parameter - @param format string Date format pattern - @param type string (dt|upddt) defaults to comment_dt - @return string - */ - public static function getDate($rs,$format,$type='') - { - if (!$format) { - $format = $rs->core->blog->settings->system->date_format; - } - - if ($type == 'upddt') { - return dt::dt2str($format,$rs->comment_upddt,$rs->comment_tz); - } else { - return dt::dt2str($format,$rs->comment_dt); - } - } - - /** - Returns comment time with $format as formatting pattern. If - format is empty, uses time_format blog setting. - - @param rs Invisible parameter - @param format string Date format pattern - @param type string (dt|upddt) defaults to comment_dt - @return string - */ - public static function getTime($rs,$format,$type='') - { - if (!$format) { - $format = $rs->core->blog->settings->system->time_format; - } - - if ($type == 'upddt') { - return dt::dt2str($format,$rs->comment_updt,$rs->comment_tz); - } else { - return dt::dt2str($format,$rs->comment_dt); - } - } - - /** - Returns comment timestamp. - - @param rs Invisible parameter - @param type string (dt|upddt) defaults to comment_dt - @return integer - */ - public static function getTS($rs,$type='') - { - if ($type == 'upddt') { - return strtotime($rs->comment_upddt); - } else { - return strtotime($rs->comment_dt); - } - } - - /** - Returns comment date formating according to the ISO 8601 standard. - - @param rs Invisible parameter - @param type string (dt|upddt) defaults to comment_dt - @return string - */ - public static function getISO8601Date($rs,$type='') - { - if ($type == 'upddt') { - return dt::iso8601($rs->getTS($type)+dt::getTimeOffset($rs->comment_tz),$rs->comment_tz); - } else { - return dt::iso8601($rs->getTS(),$rs->comment_tz); - } - } - - /** - Returns comment date formating according to RFC 822. - - @param rs Invisible parameter - @param type string (dt|upddt) defaults to comment_dt - @return string - */ - public static function getRFC822Date($rs,$type='') - { - if ($type == 'upddt') { - return dt::rfc822($rs->getTS($type)+dt::getTimeOffset($rs->comment_tz),$rs->comment_tz); - } else { - return dt::rfc822($rs->getTS(),$rs->comment_tz); - } - } - - /** - Returns comment content. If $absolute_urls is true, appends full - blog URL to each relative post URLs. - - @param rs Invisible parameter - @param absolute_urls boolean With absolute URLs - @return string - */ - public static function getContent($rs,$absolute_urls=false) - { - $res = $rs->comment_content; - - if ($rs->core->blog->settings->system->comments_nofollow) { - $res = preg_replace_callback('##ms',array('self','noFollowURL'),$res); - } - - if ($absolute_urls) { - $res = html::absoluteURLs($res,$rs->getPostURL()); - } - - return $res; - } - - private static function noFollowURL($m) - { - if (preg_match('/rel="nofollow"/',$m[1])) { - return $m[0]; - } - - return ''; - } - - /** - Returns comment author link to his website if he specified one. - - @param rs Invisible parameter - @return string - */ - public static function getAuthorURL($rs) - { - if (trim($rs->comment_site)) { - return trim($rs->comment_site); - } - } - - /** - Returns comment post full URL. - - @param rs Invisible parameter - @return string - */ - public static function getPostURL($rs) - { - return $rs->core->blog->url.$rs->core->getPostPublicURL( - $rs->post_type,html::sanitizeURL($rs->post_url) - ); - } - - /** - Returns comment author name in a link to his website if he specified one. - - @param rs Invisible parameter - @return string - */ - public static function getAuthorLink($rs) - { - $res = '%1$s'; - $url = $rs->getAuthorURL(); - if ($url) { - $res = '%1$s'; - } - - $nofollow = ''; - if ($rs->core->blog->settings->system->comments_nofollow) { - $nofollow = ' rel="nofollow"'; - } - - return sprintf($res,html::escapeHTML($rs->comment_author),html::escapeHTML($url),$nofollow); - } - - /** - Returns comment author e-mail address. If $encoded is true, - "@" sign is replaced by "%40" and "." by "%2e". - - @param rs Invisible parameter - @param encoded boolean Encode address. - @return string - */ - public static function getEmail($rs,$encoded=true) - { - if ($encoded) { - return strtr($rs->comment_email,array('@'=>'%40','.'=>'%2e')); - } - return $rs->comment_email; - } - - /** - Returns trackback site title if comment is a trackback. - - @param rs Invisible parameter - @return string - */ - public static function getTrackbackTitle($rs) - { - if ($rs->comment_trackback == 1 && - preg_match('|

      (.*?)

      |msU',$rs->comment_content, - $match)) { - return html::decodeEntities($match[1]); - } - } - - /** - Returns trackback content if comment is a trackback. - - @param rs Invisible parameter - @return string - */ - public static function getTrackbackContent($rs) - { - if ($rs->comment_trackback == 1) { - return preg_replace('|

      .*?

      |msU','', - $rs->comment_content); - } - } - - /** - Returns comment feed unique ID. - - @param rs Invisible parameter - @return string - */ - public static function getFeedID($rs) - { - return 'urn:md5:'.md5($rs->core->blog->uid.$rs->comment_id); - - $url = parse_url($rs->core->blog->url); - $date_part = date('Y-m-d',strtotime($rs->comment_dt)); - - return 'tag:'.$url['host'].','.$date_part.':'.$rs->comment_id; - } - - /** - Returns whether comment is from the post author. - - @param rs Invisible parameter - @return boolean - */ - public static function isMe($rs) - { - return - $rs->comment_email && $rs->comment_site && - $rs->comment_email == $rs->user_email && - $rs->comment_site == $rs->user_url; - } -} - -/** -@ingroup DC_CORE -@brief Dotclear dates record helpers. - -This class adds new methods to database dates results. -You can call them on every record comming from dcBlog::getDates. - -@warning You should not give the first argument (usualy $rs) of every described -function. -*/ -class rsExtDates -{ - /** - @param rs Invisible parameter - @return integer Date timestamp - */ - public static function ts($rs) - { - return strtotime($rs->dt); - } - - /** - @param rs Invisible parameter - @return string Date year - */ - public static function year($rs) - { - return date('Y',strtotime($rs->dt)); - } - - /** - @param rs Invisible parameter - @return string Date month - */ - public static function month($rs) - { - return date('m',strtotime($rs->dt)); - } - - /** - @param rs Invisible parameter - @return integer Date day - */ - public static function day($rs) - { - return date('d',strtotime($rs->dt)); - } - - /** - Returns date month archive full URL. - - @param rs Invisible parameter - @param core dcCore dcCore instance - @return integer - */ - public static function url($rs,$core) - { - $url = date('Y/m',strtotime($rs->dt)); - - return $core->blog->url.$core->url->getURLFor('archive',$url); - } - - /** - Returns whether date is the first of year. - - @param rs Invisible parameter - @return boolean - */ - public static function yearHeader($rs) - { - if ($rs->isStart()) { - return true; - } - - $y = $rs->year(); - $rs->movePrev(); - $py = $rs->year(); - $rs->moveNext(); - - return $y != $py; - } - - /** - Returns whether date is the last of year. - - @param rs Invisible parameter - @return boolean - */ - public static function yearFooter($rs) - { - if ($rs->isEnd()) { - return true; - } - - $y = $rs->year(); - if ($rs->moveNext()) { - $ny = $rs->year(); - $rs->movePrev(); - return $y != $ny; - } - return false; - - } -} - -/** -@ingroup DC_CORE -@brief Dotclear dates record helpers. - -This class adds new methods to database dates results. -You can call them on every record comming from dcAuth::checkUser and -dcCore::getUsers. - -@warning You should not give the first argument (usualy $rs) of every described -function. -*/ -class rsExtUser -{ - /** - Returns a user option. - - @param rs Invisible parameter - @param name string Option name - @return string - */ - public static function option($rs,$name) - { - $options = self::options($rs); - - if (isset($options[$name])) { - return $options[$name]; - } - return null; - } - - /** - Returns all user options. - - @param rs Invisible parameter - @return array - */ - public static function options($rs) - { - $options = @unserialize($rs->user_options); - if (is_array($options)) { - return $options; - } - return array(); - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/core/class.dc.settings.php b/v2/dotclear/inc/core/class.dc.settings.php deleted file mode 100644 index 1924085..0000000 --- a/v2/dotclear/inc/core/class.dc.settings.php +++ /dev/null @@ -1,384 +0,0 @@ -connection Database connection object - protected $table; ///< string Settings table name - protected $blog_id; ///< string Blog ID - - protected $namespaces = array(); ///< array Associative namespaces array - - protected $ns; ///< string Current namespace - - /** - Object constructor. Retrieves blog settings and puts them in $namespaces - array. Local (blog) settings have a highest priority than global settings. - - @param core dcCore dcCore object - @param blog_id string Blog ID - */ - public function __construct($core,$blog_id) - { - $this->con =& $core->con; - $this->table = $core->prefix.'setting'; - $this->blog_id =& $blog_id; - $this->loadSettings(); - } - - /** - Retrieves all namespaces (and their settings) from database, with one query. - */ - private function loadSettings() - { - $strReq = 'SELECT blog_id, setting_id, setting_value, '. - 'setting_type, setting_label, setting_ns '. - 'FROM '.$this->table.' '. - "WHERE blog_id = '".$this->con->escape($this->blog_id)."' ". - 'OR blog_id IS NULL '. - 'ORDER BY setting_ns ASC, setting_id DESC'; - try { - $rs = $this->con->select($strReq); - } catch (Exception $e) { - trigger_error(__('Unable to retrieve namespaces:').' '.$this->con->error(), E_USER_ERROR); - } - - /* Prevent empty tables (install phase, for instance) */ - if ($rs->isEmpty()) { - return; - } - - do { - $ns = trim($rs->f('setting_ns')); - if (!$rs->isStart()) { - // we have to go up 1 step, since namespaces construction performs a fetch() - // at very first time - $rs->movePrev(); - } - $this->namespaces[$ns] = new dcNamespace($GLOBALS['core'], $this->blog_id, $ns,$rs); - } while(!$rs->isStart()); - } - - - /** - Create a new namespace. If the namespace already exists, return it without modification. - - @param ns string Namespace name - @return dcNamespace The namespace created - */ - public function addNamespace($ns) - { - if (!array_key_exists($ns, $this->namespaces)) { - $this->namespaces[$ns] = new dcNamespace($GLOBALS['core'], $this->blog_id, $ns); - } - return $this->namespaces[$ns]; - } - - /** - Returns full namespace with all settings pertaining to it. - - @param ns string Namespace name - @return dcNamespace - */ - public function get($ns) - { - return $this->namespaces[$ns]; - } - - /** - Magic __get method. - @copydoc ::get - */ - public function __get($n) - { - if (!array_key_exists($n, $this->namespaces)) { - // For backward compatibility only: the developer tried to access - // a setting directly, without passing via a namespace. - $this->raiseDeprecated('old_style_get'); - return $this->getSetting($n); - } - return $this->get($n); - } - - /** - Magic __set method. - @copydoc ::set - */ - public function __set($n,$v) - { - $this->set($n,$v); - } - - /** - Returns $namespaces property content. - - @return array - */ - public function dumpNamespaces() - { - return $this->namespaces; - } - - /** - Raises a E_USER_NOTICE errror for deprecated functions. - This allows the developer to know he's been using deprecated functions. - - @param name string Name of the deprecated function that was called. - */ - private function raiseDeprecated($name) - { - if (DC_DEBUG) { - $trace = debug_backtrace(); - array_shift($trace); - $grand = array_shift($trace); - $msg = 'Deprecated function called. ('; - $msg .= 'dcSettings::'.$name . ' was called from '.$grand['file'].' ['.$grand['line'].'])'; - trigger_error($msg, E_USER_NOTICE); - } - } - - /** - @deprecated Please set your settings via $core->blog->settings->{namespace}->{setting} - - Sets a setting in $settings property. This sets the setting for script - execution time only and if setting exists. - - @param n string Setting name - @param v mixed Setting value - */ - public function set($n,$v) - { - // For backward compatibility only: the developer tried to access - // a setting directly, without passing via a namespace. - $this->raiseDeprecated('old_style_set'); - - if (!$this->ns) { - throw new Exception(__('No namespace specified')); - } - - if (isset($this->namespaces[$this->ns]->$n)) { - $this->namespaces[$this->ns]->$n['value'] = $v; - } else { - $this->namespaces[$this->ns]->$n = array( - 'ns' => $this->ns, - 'value' => $v, - 'type' => gettype($n), - 'label' => '', - 'global' => false - ); - } - } - - /** - @deprecated Please access your settings via $core->blog->settings->{namespace}->... - - Sets a working namespace. You should do this before accessing any setting. - - @param ns string Namespace name - */ - public function setNamespace($ns) - { - $this->raiseDeprecated('setNamespace'); - if (preg_match('/^[a-zA-Z][a-zA-Z0-9]+$/',$ns)) { - $this->ns = $ns; - } else { - throw new Exception(sprintf(__('Invalid setting namespace: %s'),$ns)); - } - } - - /** - @deprecated Please set your settings via $core->blog->settings->{namespace}->put() - - Creates or updates a setting. - - $type could be 'string', 'integer', 'float', 'boolean' or null. If $type is - null and setting exists, it will keep current setting type. - - $value_change allow you to not change setting. Useful if you need to change - a setting label or type and don't want to change its value. - - Don't forget to set namespace before calling this method. - - @param id string Setting ID - @param value mixed Setting value - @param type string Setting type - @param label string Setting label - @param value_change boolean Change setting value or not - @param global boolean Setting is global - */ - public function put($id,$value,$type=null,$label=null,$value_change=true,$global=false) - { - $this->raiseDeprecated('put'); - if (!$this->ns) { - throw new Exception(__('No namespace specified')); - } - if (!isset($this->namespaces[$this->ns])) { - // Create namespace if needed - $this->namespaces[$this->ns] = new dcNamespace($GLOBALS['core'], $this->blog_id, $this->ns); - } - $this->namespaces[$this->ns]->put($id, $value, $type, $label, $value_change, $global); - } - - /** - @deprecated Please get your settings via $core->blog->settings->{namespace}->{setting} - - Returns setting value if exists. - - @param n string Setting name - @return mixed - */ - public function getSetting($n) - { - if ($this->namespaces['system']->get($n) != null) { - // Give preference to system settings - return $this->namespaces['system']->get($n); - } else { - // Parse all the namespaces - foreach (array_keys($this->namespaces) as $id => $ns) { - if ($this->namespaces[$ns]->get($n) != null) { - // Return the first setting with matching name - return $this->namespaces[$ns]->get($n); - } - } - } - - return null; - } - - /** - @deprecated Please get your settings via $core->blog->settings->{namespace}->dumpSettings - - Returns all settings content. - - @return array - */ - public function dumpSettings() - { - // For backward compatibility only: the developer tried to access - // the settings directly, without passing via a namespace. - $this->raiseDeprecated('dumpSettings'); - - $settings = array(); - // Parse all the namespaces - foreach (array_keys($this->namespaces) as $id => $ns) { - $settings = array_merge($settings, $this->namespaces[$ns]->dumpSettings()); - } - - return $settings; - } - - /** - @deprecated Please get your settings via $core->blog->settings->{namespace}->dumpGlobalSettings - - Returns all global settings content. - - @return array - */ - public function dumpGlobalSettings() - { - // For backward compatibility only: the developer tried to access - // the settings directly, without passing via a namespace. - $this->raiseDeprecated('dumpGlobalSettings'); - - $settings = array(); - // Parse all the namespaces - foreach (array_keys($this->namespaces) as $id => $ns) { - $settings = array_merge($settings, $this->namespaces[$ns]->dumpGlobalSettings()); - } - - return $settings; - } - - /** - Returns a list of settings matching given criteria, for any blog. - $params is an array taking the following - optionnal parameters: - - - ns : retrieve setting from given namespace - - id : retrieve only settings corresponding to the given id - - @param params array Parameters - @return record A record - */ - public function getGlobalSettings($params=array()) - { - $strReq = "SELECT * from ".$this->table." "; - $where = array(); - if (!empty($params['ns'])) { - $where[] = "setting_ns = '".$this->con->escape($params['ns'])."'"; - } - if (!empty($params['id'])) { - $where[] = "setting_id = '".$this->con->escape($params['id'])."'"; - } - if (isset($params['blog_id'])) { - if (!empty($params['blog_id'])) { - $where[] = "blog_id = '".$this->con->escape($params['blog_id'])."'"; - } else { - $where[] = "blog_id IS NULL"; - } - } - if (count($where) != 0) { - $strReq .= " WHERE ".join(" AND ", $where); - } - $strReq .= " ORDER by blog_id"; - return $this->con->select($strReq); - } - - /** - Updates a setting from a given record - - @param rs record the setting to update - */ - public function updateSetting($rs) - { - $cur = $this->con->openCursor($this->table); - $cur->setting_id = $rs->setting_id; - $cur->setting_value = $rs->setting_value; - $cur->setting_type = $rs->setting_type; - $cur->setting_label = $rs->setting_label; - $cur->blog_id = $rs->blog_id; - $cur->setting_ns = $rs->setting_ns; - if ($cur->blog_id == null) { - $where = 'WHERE blog_id IS NULL '; - } else { - $where = "WHERE blog_id = '".$this->con->escape($cur->blog_id)."' "; - } - $cur->update($where."AND setting_id = '".$this->con->escape($cur->setting_id)."' AND setting_ns = '".$this->con->escape($cur->setting_ns)."' "); - } - - /** - Drops a setting from a given record - - @param rs record the setting to drop - @return int number of deleted records (0 if setting does not exist) - */ - public function dropSetting($rs) { - $strReq = "DELETE FROM ".$this->table.' '; - if ($rs->blog_id == null) { - $strReq .= 'WHERE blog_id IS NULL '; - } else { - $strReq .= "WHERE blog_id = '".$this->con->escape($rs->blog_id)."' "; - } - $strReq .= "AND setting_id = '".$this->con->escape($rs->setting_id)."' AND setting_ns = '".$this->con->escape($rs->setting_ns)."' "; - return $this->con->execute($strReq); - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/core/class.dc.themes.php b/v2/dotclear/inc/core/class.dc.themes.php deleted file mode 100644 index fda0a05..0000000 --- a/v2/dotclear/inc/core/class.dc.themes.php +++ /dev/null @@ -1,102 +0,0 @@ -$parent is a optional value to indicate them inheritance. - If $parent is null / not set, we simply fall back to - the standard behavior, by using 'default'. - - $priority is an integer. Modules are sorted by priority and name. - Lowest priority comes first. This property is currently ignored when dealing - with themes. - - @param name string Module name - @param desc string Module description - @param author string Module author name - @param version string Module version - @param properties array extra properties (currently available keys : parent, priority, standalone_config) - */ - public function registerModule($name,$desc,$author,$version,$properties = array()) - { - if (!is_array($properties)) { - //Fallback to legacy registerModule parameters - $args = func_get_args(); - $properties = array(); - if (isset($args[4])) { - $properties['parent']=$args[4]; - } - if (isset($args[5])) { - $properties['priority']= (integer)$args[5]; - } - } - $properties = array_merge( - array( - 'parent' => null, - 'priority' => 1000, - 'standalone_config' => false - ), $properties - ); - if ($this->id) { - $this->modules[$this->id] = array_merge( - $properties, - array( - 'root' => $this->mroot, - 'name' => $name, - 'desc' => $desc, - 'author' => $author, - 'version' => $version, - 'root_writable' => is_writable($this->mroot) - ) - ); - } - } - - /** - Loads namespace $ns specific file for module with ID - $id - Note : actually, only 'public' namespace is supported with themes. - - @param id string Module ID - @param ns string Namespace name - */ - public function loadNsFile($id,$ns=null) - { - switch ($ns) { - case 'public': - $parent = $this->modules[$id]['parent']; - if ($parent) { - // This is not a real cascade - since we don't call loadNsFile -, - // thus limiting inclusion process. - // TODO : See if we have to change this. - $this->loadModuleFile($this->modules[$parent]['root'].'/_public.php'); - } - $this->loadModuleFile($this->modules[$id]['root'].'/_public.php'); - break; - } - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/core/class.dc.trackback.php b/v2/dotclear/inc/core/class.dc.trackback.php deleted file mode 100644 index aaf3f64..0000000 --- a/v2/dotclear/inc/core/class.dc.trackback.php +++ /dev/null @@ -1,404 +0,0 @@ -dcCore dcCore instance - public $table; ///< string done pings table name - - /** - Object constructor - - @param core dcCore dcCore instance - */ - public function __construct($core) - { - $this->core =& $core; - $this->con =& $this->core->con; - $this->table = $this->core->prefix.'ping'; - } - - /// @name Send trackbacks - //@{ - /** - Get all pings sent for a given post. - - @param post_id integer Post ID - @return record - */ - public function getPostPings($post_id) - { - $strReq = 'SELECT ping_url, ping_dt '. - 'FROM '.$this->table.' '. - 'WHERE post_id = '.(integer) $post_id; - - return $this->con->select($strReq); - } - - /** - Sends a ping to given $url. - - @param url string URL to ping - @param post_id integer Post ID - @param post_title string Post title - @param post_excerpt string Post excerpt - @param post_url string Post URL - */ - public function ping($url,$post_id,$post_title,$post_excerpt,$post_url) - { - if ($this->core->blog === null) { - return false; - } - - $post_id = (integer) $post_id; - - # Check for previously done trackback - $strReq = 'SELECT post_id, ping_url FROM '.$this->table.' '. - 'WHERE post_id = '.$post_id.' '. - "AND ping_url = '".$this->con->escape($url)."' "; - - $rs = $this->con->select($strReq); - - if (!$rs->isEmpty()) { - throw new Exception(sprintf(__('%s has still been pinged'),$url)); - } - - $data = array( - 'title' => $post_title, - 'excerpt' => $post_excerpt, - 'url' => $post_url, - 'blog_name' => trim(html::escapeHTML(html::clean($this->core->blog->name))) - //,'__debug' => false - ); - - # Ping - try - { - $http = self::initHttp($url,$path); - $http->post($path,$data,'UTF-8'); - $res = $http->getContent(); - } - catch (Exception $e) - { - throw new Exception(__('Unable to ping URL')); - } - - $pattern = - '|.*(.*)(.*)'. - '((.*)(.*))?'. - '|msU'; - - if (!preg_match($pattern,$res,$match)) - { - throw new Exception(sprintf(__('%s is not a ping URL'),$url)); - } - - $ping_error = trim($match[1]); - $ping_msg = (!empty($match[4])) ? $match[4] : ''; - - if ($ping_error != '0') { - throw new Exception(sprintf(__('%s, ping error:'),$url).' '.$ping_msg); - } else { - # Notify ping result in database - $cur = $this->con->openCursor($this->table); - $cur->post_id = $post_id; - $cur->ping_url = $url; - $cur->ping_dt = date('Y-m-d H:i:s'); - - $cur->insert(); - } - } - //@} - - /// @name Receive trackbacks - //@{ - /** - Receives a trackback and insert it as a comment of given post. - - @param post_id integer Post ID - */ - public function receive($post_id) - { - header('Content-Type: text/xml; charset=UTF-8'); - if (empty($_POST)) { - http::head(405,'Method Not Allowed'); - echo - ''."\n". - "\n". - " 1\n". - " POST request needed\n". - ""; - return; - } - - $post_id = (integer) $post_id; - - $title = !empty($_POST['title']) ? $_POST['title'] : ''; - $excerpt = !empty($_POST['excerpt']) ? $_POST['excerpt'] : ''; - $url = !empty($_POST['url']) ? $_POST['url'] : ''; - $blog_name = !empty($_POST['blog_name']) ? $_POST['blog_name'] : ''; - $charset = ''; - $comment = ''; - - $err = false; - $msg = ''; - - if ($this->core->blog === null) - { - $err = true; - $msg = 'No blog.'; - } - elseif ($url == '') - { - $err = true; - $msg = 'URL parameter is required.'; - } - elseif ($blog_name == '') { - $err = true; - $msg = 'Blog name is required.'; - } - - if (!$err) - { - $post = $this->core->blog->getPosts(array('post_id'=>$post_id,'post_type'=>'')); - - if ($post->isEmpty()) - { - $err = true; - $msg = 'No such post.'; - } - elseif (!$post->trackbacksActive()) - { - $err = true; - $msg = 'Trackbacks are not allowed for this post or weblog.'; - } - } - - if (!$err) - { - $charset = self::getCharsetFromRequest(); - - if (!$charset) { - $charset = mb_detect_encoding($title.' '.$excerpt.' '.$blog_name, - 'UTF-8,ISO-8859-1,ISO-8859-2,ISO-8859-3,'. - 'ISO-8859-4,ISO-8859-5,ISO-8859-6,ISO-8859-7,ISO-8859-8,'. - 'ISO-8859-9,ISO-8859-10,ISO-8859-13,ISO-8859-14,ISO-8859-15'); - } - - if (strtolower($charset) != 'utf-8') { - $title = iconv($charset,'UTF-8',$title); - $excerpt = iconv($charset,'UTF-8',$excerpt); - $blog_name = iconv($charset,'UTF-8',$blog_name); - } - - $title = trim(html::clean($title)); - $title = html::decodeEntities($title); - $title = html::escapeHTML($title); - $title = text::cutString($title,60); - - $excerpt = trim(html::clean($excerpt)); - $excerpt = html::decodeEntities($excerpt); - $excerpt = preg_replace('/\s+/ms',' ',$excerpt); - $excerpt = text::cutString($excerpt,252); - $excerpt = html::escapeHTML($excerpt).'...'; - - $blog_name = trim(html::clean($blog_name)); - $blog_name = html::decodeEntities($blog_name); - $blog_name = html::escapeHTML($blog_name); - $blog_name = text::cutString($blog_name,60); - - $url = trim(html::clean($url)); - - if (!$blog_name) { - $blog_name = 'Anonymous blog'; - } - - $comment = - "\n". - '

      '.($title ? $title : $blog_name)."

      \n". - '

      '.$excerpt.'

      '; - - $cur = $this->core->con->openCursor($this->core->prefix.'comment'); - $cur->comment_author = (string) $blog_name; - $cur->comment_site = (string) $url; - $cur->comment_content = (string) $comment; - $cur->post_id = $post_id; - $cur->comment_trackback = 1; - $cur->comment_status = $this->core->blog->settings->system->trackbacks_pub ? 1 : -1; - $cur->comment_ip = http::realIP(); - - try - { - # --BEHAVIOR-- publicBeforeTrackbackCreate - $this->core->callBehavior('publicBeforeTrackbackCreate',$cur); - if ($cur->post_id) { - $comment_id = $this->core->blog->addComment($cur); - - # --BEHAVIOR-- publicAfterTrackbackCreate - $this->core->callBehavior('publicAfterTrackbackCreate',$cur,$comment_id); - } - } - catch (Exception $e) - { - $err = 1; - $msg = 'Something went wrong : '.$e->getMessage(); - } - } - - - $debug_trace = - " \n". - ' '.$title."\n". - ' '.$excerpt."\n". - ' '.$url."\n". - ' '.$blog_name."\n". - ' '.$charset."\n". - ' '.$comment."\n". - " \n"; - - $resp = - ''."\n". - "\n". - ' '.(integer) $err."\n"; - - if ($msg) { - $resp .= ' '.$msg."\n"; - } - - if (!empty($_POST['__debug'])) { - $resp .= $debug_trace; - } - - echo $resp.""; - } - //@} - - private static function initHttp($url,&$path) - { - $client = netHttp::initClient($url,$path); - $client->setTimeout(5); - $client->setUserAgent('Dotclear - http://www.dotclear.org/'); - $client->useGzip(false); - $client->setPersistReferers(false); - - return $client; - } - - private static function getCharsetFromRequest() - { - if (isset($_SERVER['CONTENT_TYPE'])) - { - if (preg_match('|charset=([a-zA-Z0-9-]+)|',$_SERVER['CONTENT_TYPE'],$m)) { - return $m[1]; - } - } - - return null; - } - - /// @name Trackbacks auto discovery - //@{ - /** - Returns an array containing all discovered trackbacks URLs in - $text. - - @param text string Input text - @return array - */ - public function discover($text) - { - $res = array(); - - foreach ($this->getTextLinks($text) as $link) - { - if (($url = $this->getPingURL($link)) !== null) { - $res[] = $url; - } - } - - return $res; - } - //@} - - private function getTextLinks($text) - { - $res = array(); - - # href attribute on "a" tags - if (preg_match_all('/]+)>/ms', $text, $match, PREG_SET_ORDER)) - { - for ($i = 0; $i]+)>/ms', $text, $match, PREG_SET_ORDER)) - { - for ($i = 0; $iget($path); - $page_content = $http->getContent(); - } - catch (Exception $e) - { - return false; - } - - $pattern_rdf = - '/.*?'. - ''. - '.*?<\/rdf:RDF>'. - '/msi'; - - preg_match_all($pattern_rdf,$page_content,$rdf_all,PREG_SET_ORDER); - - for ($i=0; $i \ No newline at end of file diff --git a/v2/dotclear/inc/core/class.dc.update.php b/v2/dotclear/inc/core/class.dc.update.php deleted file mode 100644 index e2b5975..0000000 --- a/v2/dotclear/inc/core/class.dc.update.php +++ /dev/null @@ -1,478 +0,0 @@ - null, - 'href' => null, - 'checksum' => null, - 'info' => null, - 'notify' => true - ); - - protected $cache_ttl = '-6 hours'; - protected $forced_files = array(); - - /** - * Constructor - * - * @param url string Versions file URL - * @param subject string Subject to check - * @param version string Version type - * @param cache_dir string Directory cache path - */ - public function __construct($url,$subject,$version,$cache_dir) - { - $this->url = $url; - $this->subject = $subject; - $this->version = $version; - $this->cache_file = $cache_dir.'/'.$subject.'-'.$version; - } - - /** - * Checks for Dotclear updates. - * Returns latest version if available or false. - * - * @param version string Current version to compare - * @return string Latest version if available - */ - public function check($version) - { - $this->getVersionInfo(); - $v = $this->getVersion(); - if ($v && version_compare($version,$v,'<')) { - return $v; - } - - return false; - } - - public function getVersionInfo() - { - # Check cached file - if (is_readable($this->cache_file) && filemtime($this->cache_file) > strtotime($this->cache_ttl)) - { - $c = @file_get_contents($this->cache_file); - $c = @unserialize($c); - if (is_array($c)) { - $this->version_info = $c; - return; - } - } - - $cache_dir = dirname($this->cache_file); - $can_write = (!is_dir($cache_dir) && is_writable(dirname($cache_dir))) - || (!file_exists($this->cache_file) && is_writable($cache_dir)) - || is_writable($this->cache_file); - - # If we can't write file, don't bug host with queries - if (!$can_write) { - return; - } - - if (!is_dir($cache_dir)) { - try { - files::makeDir($cache_dir); - } catch (Exception $e) { - return; - } - } - - # Try to get latest version number - try - { - $path = ''; - $client = netHttp::initClient($this->url,$path); - if ($client !== false) { - $client->setTimeout(4); - $client->setUserAgent($_SERVER['HTTP_USER_AGENT']); - $client->get($path); - - $this->readVersion($client->getContent()); - } - } - catch (Exception $e) {} - - # Create cache - file_put_contents($this->cache_file,serialize($this->version_info)); - } - - public function getVersion() - { - return $this->version_info['version']; - } - - public function getFileURL() - { - return $this->version_info['href']; - } - - public function getInfoURL() - { - return $this->version_info['info']; - } - - public function getChecksum() - { - return $this->version_info['checksum']; - } - - public function getNotify() - { - return $this->version_info['notify']; - } - - public function getForcedFiles() - { - return $this->forced_files; - } - - public function setForcedFiles() - { - $this->forced_files = func_get_args(); - } - - /** - * Sets notification flag. - */ - public function setNotify($n) - { - - if (!is_writable($this->cache_file)) { - return; - } - - $this->version_info['notify'] = (boolean) $n; - file_put_contents($this->cache_file,serialize($this->version_info)); - } - - public function checkIntegrity($digests_file,$root) - { - if (!$digests_file) { - throw new Exception(__('Digests file not found.')); - } - - $changes = $this->md5sum($root,$digests_file); - - if (!empty($changes)) { - $e = new Exception('Some files have changed.',self::ERR_FILES_CHANGED); - $e->bad_files = $changes; - throw $e; - } - - return true; - } - - /** - * Downloads new version to destination $dest. - */ - public function download($dest) - { - $url = $this->getFileURL(); - - if (!$url) { - throw new Exception(__('No file to download')); - } - - if (!is_writable(dirname($dest))) { - throw new Exception(__('Root directory is not writable.')); - } - - try - { - $client = netHttp::initClient($url,$path); - $client->setTimeout(4); - $client->setUserAgent($_SERVER['HTTP_USER_AGENT']); - $client->useGzip(false); - $client->setPersistReferers(false); - $client->setOutput($dest); - $client->get($path); - - if ($client->getStatus() != 200) { - @unlink($dest); - throw new Exception(); - } - } - catch (Exception $e) - { - throw new Exception(__('An error occurred while downloading archive.')); - } - } - - /** - * Checks if archive was successfully downloaded. - */ - public function checkDownload($zip) - { - $cs = $this->getChecksum(); - - return $cs && is_readable($zip) && md5_file($zip) == $cs; - } - - /** - * Backups changed files before an update. - */ - public function backup($zip_file,$zip_digests,$root,$root_digests,$dest) - { - if (!is_readable($zip_file)) { - throw new Exception(__('Archive not found.')); - } - - if (!is_readable($root_digests)) { - @unlink($zip_file); - throw new Exception(__('Unable to read current digests file.')); - } - - # Stop everything if a backup already exists and can not be overrided - if (!is_writable(dirname($dest)) && !file_exists($dest)) { - throw new Exception(__('Root directory is not writable.')); - } - - if (file_exists($dest) && !is_writable($dest)) { - return false; - } - - $b_fp = @fopen($dest,'wb'); - if ($b_fp === false) { - return false; - } - - $zip = new fileUnzip($zip_file); - $b_zip = new fileZip($b_fp); - - if (!$zip->hasFile($zip_digests)) - { - @unlink($zip_file); - throw new Exception(__('Downloaded file does not seem to be a valid archive.')); - } - - $opts = FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES; - $cur_digests = file($root_digests,$opts); - $new_digests = explode("\n",$zip->unzip($zip_digests)); - $new_files = $this->getNewFiles($cur_digests,$new_digests); - $zip->close(); - unset($opts,$cur_digests,$new_digests,$zip); - - $not_readable = array(); - - if (!empty($this->forced_files)) { - $new_files = array_merge($new_files,$this->forced_files); - } - - foreach ($new_files as $file) - { - if (!$file || !file_exists($root.'/'.$file)) { - continue; - } - - try { - $b_zip->addFile($root.'/'.$file,$file); - } catch (Exception $e) { - $not_readable[] = $file; - } - } - - # If only one file is not readable, stop everything now - if (!empty($not_readable)) { - $e = new Exception('Some files are not readable.',self::ERR_FILES_UNREADABLE); - $e->bad_files = $not_readable; - throw $e; - } - - $b_zip->write(); - fclose($b_fp); - $b_zip->close(); - - return true; - } - - /** - * Upgrade process. - */ - public function performUpgrade($zip_file,$zip_digests,$zip_root,$root,$root_digests) - { - if (!is_readable($zip_file)) { - throw new Exception(__('Archive not found.')); - } - - if (!is_readable($root_digests)) { - @unlink($zip_file); - throw new Exception(__('Unable to read current digests file.')); - } - - $zip = new fileUnzip($zip_file); - - if (!$zip->hasFile($zip_digests)) - { - @unlink($zip_file); - throw new Exception(__('Downloaded file does not seem to be a valid archive.')); - } - - $opts = FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES; - $cur_digests = file($root_digests,$opts); - $new_digests = explode("\n",$zip->unzip($zip_digests)); - $new_files = self::getNewFiles($cur_digests,$new_digests); - - if (!empty($this->forced_files)) { - $new_files = array_merge($new_files,$this->forced_files); - } - - $zip_files = array(); - $not_writable = array(); - - foreach ($new_files as $file) - { - if (!$file) { - continue; - } - - if (!$zip->hasFile($zip_root.'/'.$file)) { - @unlink($zip_file); - throw new Exception(__('Incomplete archive.')); - } - - $dest = $dest_dir = $root.'/'.$file; - while (!is_dir($dest_dir = dirname($dest_dir))); - - if ((file_exists($dest) && !is_writable($dest)) || - (!file_exists($dest) && !is_writable($dest_dir))) { - $not_writable[] = $file; - continue; - } - - $zip_files[] = $file; - } - - # If only one file is not writable, stop everything now - if (!empty($not_writable)) { - $e = new Exception('Some files are not writable',self::ERR_FILES_UNWRITALBE); - $e->bad_files = $not_writable; - throw $e; - } - - # Everything's fine, we can write files, then do it now - $can_touch = function_exists('touch'); - foreach ($zip_files as $file) { - $zip->unzip($zip_root.'/'.$file, $root.'/'.$file); - if ($can_touch) { - @touch($root.'/'.$file); - } - } - @unlink($zip_file); - } - - protected function getNewFiles($cur_digests,$new_digests) - { - $cur_md5 = $cur_path = $cur_digests; - $new_md5 = $new_path = $new_digests; - - array_walk($cur_md5, array($this,'parseLine'),1); - array_walk($cur_path,array($this,'parseLine'),2); - array_walk($new_md5, array($this,'parseLine'),1); - array_walk($new_path,array($this,'parseLine'),2); - - $cur = array_combine($cur_md5,$cur_path); - $new = array_combine($new_md5,$new_path); - - return array_values(array_diff_key($new,$cur)); - } - - protected function readVersion($str) - { - try - { - $xml = new SimpleXMLElement($str,LIBXML_NOERROR); - $r = $xml->xpath("/versions/subject[@name='".$this->subject."']/release[@name='".$this->version."']"); - - if (!empty($r) && is_array($r)) - { - $r = $r[0]; - $this->version_info['version'] = isset($r['version']) ? (string) $r['version'] : null; - $this->version_info['href'] = isset($r['href']) ? (string) $r['href'] : null; - $this->version_info['checksum'] = isset($r['checksum']) ? (string) $r['checksum'] : null; - $this->version_info['info'] = isset($r['info']) ? (string) $r['info'] : null; - } - } - catch (Exception $e) - { - throw $e; - } - } - - protected function md5sum($root,$digests_file) - { - if (!is_readable($digests_file)) { - throw new Exception(__('Unable to read digests file.')); - } - - $opts = FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES; - $contents = file($digests_file,$opts); - - $changes = array(); - - foreach ($contents as $digest) - { - if (!preg_match('#^([\da-f]{32})\s+(.+?)$#',$digest,$m)) { - continue; - } - - $md5 = $m[1]; - $filename = $root.'/'.$m[2]; - - # Invalid checksum - if (!is_readable($filename) || !self::md5_check($filename, $md5)) { - $changes[] = substr($m[2],2); - } - } - - # No checksum found in digests file - if (empty($md5)) { - throw new Exception(__('Invalid digests file.')); - } - - return $changes; - } - - protected function parseLine(&$v,$k,$n) - { - if (!preg_match('#^([\da-f]{32})\s+(.+?)$#',$v,$m)) { - return; - } - - $v = $n == 1 ? md5($m[2].$m[1]) : substr($m[2],2); - } - - protected static function md5_check($filename,$md5) - { - if (md5_file($filename) == $md5) { - return true; - } else { - $filecontent = file_get_contents($filename); - $filecontent = str_replace ("\r\n","\n",$filecontent); - $filecontent = str_replace ("\r","\n",$filecontent); - if (md5($filecontent) == $md5) return true; - } - return false; - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/core/class.dc.utils.php b/v2/dotclear/inc/core/class.dc.utils.php deleted file mode 100644 index cfb75c4..0000000 --- a/v2/dotclear/inc/core/class.dc.utils.php +++ /dev/null @@ -1,53 +0,0 @@ -user_id, user_name, user_firstname and - user_displayname. - - @param user_id string User ID - @param user_name string User's name - @param user_firstname string User's first name - @param user_displayname string User's display name - @return string - */ - public static function getUserCN($user_id, $user_name, $user_firstname, $user_displayname) - { - if (!empty($user_displayname)) { - return $user_displayname; - } - - if (!empty($user_name)) { - if (!empty($user_firstname)) { - return $user_firstname.' '.$user_name; - } else { - return $user_name; - } - } elseif (!empty($user_firstname)) { - return $user_firstname; - } - - return $user_id; - } -} - -?> \ No newline at end of file diff --git a/v2/dotclear/inc/core/class.dc.workspace.php b/v2/dotclear/inc/core/class.dc.workspace.php deleted file mode 100644 index d5f0106..0000000 --- a/v2/dotclear/inc/core/class.dc.workspace.php +++ /dev/null @@ -1,368 +0,0 @@ -connection Database connection object - protected $table; ///< string Preferences table name - protected $user_id; ///< string User ID - - protected $global_prefs = array(); ///< array Global prefs array - protected $local_prefs = array(); ///< array Local prefs array - protected $prefs = array(); ///< array Associative prefs array - protected $ws; ///< string Current workspace - - /** - Object constructor. Retrieves user prefs and puts them in $prefs - array. Local (user) prefs have a highest priority than global prefs. - - @param name string ID for this workspace - */ - public function __construct(&$core, $user_id, $name, $rs=null) - { - if (preg_match('/^[a-zA-Z][a-zA-Z0-9]+$/',$name)) { - $this->ws = $name; - } else { - throw new Exception(sprintf(__('Invalid dcWorkspace: %s'),$name)); - } - - $this->con =& $core->con; - $this->table = $core->prefix.'pref'; - $this->user_id =& $user_id; - - try {$this->getPrefs($rs);} catch (Exception $e) { - if (version_compare($core->getVersion('core'),'2.3','>')) { - trigger_error(__('Unable to retrieve prefs:').' '.$this->con->error(), E_USER_ERROR); - } - } - } - - private function getPrefs($rs=null) - { - if ($rs == null) { - $strReq = 'SELECT user_id, pref_id, pref_value, '. - 'pref_type, pref_label, pref_ws '. - 'FROM '.$this->table.' '. - "WHERE (user_id = '".$this->con->escape($this->user_id)."' ". - 'OR user_id IS NULL) '. - "AND pref_ws = '".$this->con->escape($this->ws)."' ". - 'ORDER BY pref_id ASC '; - - try { - $rs = $this->con->select($strReq); - } catch (Exception $e) { - throw $e; - } - } - while ($rs->fetch()) - { - if ($rs->f('pref_ws') != $this->ws){ - break; - } - $id = trim($rs->f('pref_id')); - $value = $rs->f('pref_value'); - $type = $rs->f('pref_type'); - - if ($type == 'float' || $type == 'double') { - $type = 'float'; - } elseif ($type != 'boolean' && $type != 'integer') { - $type = 'string'; - } - - settype($value,$type); - - $array = $rs->user_id ? 'local' : 'global'; - - $this->{$array.'_prefs'}[$id] = array( - 'ws' => $this->ws, - 'value' => $value, - 'type' => $type, - 'label' => (string) $rs->f('pref_label'), - 'global' => $rs->user_id == '' - ); - } - - $this->prefs = $this->global_prefs; - - foreach ($this->local_prefs as $id => $v) { - $this->prefs[$id] = $v; - } - - return true; - } - - public function prefExists($id,$global=false) - { - $array = $global ? 'global' : 'local'; - return isset($this->{$array.'_prefs'}[$id]); - } - - /** - Returns pref value if exists. - - @param n string Pref name - @return mixed - */ - public function get($n) - { - if (isset($this->prefs[$n]['value'])) { - return $this->prefs[$n]['value']; - } - - return null; - } - - /** - Magic __get method. - @copydoc ::get - */ - public function __get($n) - { - return $this->get($n); - } - - /** - Sets a pref in $prefs property. This sets the pref for script - execution time only and if pref exists. - - @param n string Pref name - @param v mixed Pref value - */ - public function set($n,$v) - { - if (isset($this->prefs[$n])) { - $this->prefs[$n]['value'] = $v; - } - } - - /** - Magic __set method. - @copydoc ::set - */ - public function __set($n,$v) - { - $this->set($n,$v); - } - - /** - Creates or updates a pref. - - $type could be 'string', 'integer', 'float', 'boolean' or null. If $type is - null and pref exists, it will keep current pref type. - - $value_change allow you to not change pref. Useful if you need to change - a pref label or type and don't want to change its value. - - @param id string Pref ID - @param value mixed Pref value - @param type string Pref type - @param label string Pref label - @param value_change boolean Change pref value or not - @param global boolean Pref is global - */ - public function put($id,$value,$type=null,$label=null,$value_change=true,$global=false) - { - if (!preg_match('/^[a-zA-Z][a-zA-Z0-9_]+$/',$id)) { - throw new Exception(sprintf(__('%s is not a valid pref id'),$id)); - } - - # We don't want to change pref value - if (!$value_change) - { - if (!$global && $this->prefExists($id,false)) { - $value = $this->local_prefs[$id]['value']; - } elseif ($this->prefExists($id,true)) { - $value = $this->global_prefs[$id]['value']; - } - } - - # Pref type - if ($type == 'double') - { - $type = 'float'; - } - elseif ($type === null) - { - if (!$global && $this->prefExists($id,false)) { - $type = $this->local_prefs[$id]['type']; - } elseif ($this->prefExists($id,true)) { - $type = $this->global_prefs[$id]['type']; - } else { - $type = 'string'; - } - } - elseif ($type != 'boolean' && $type != 'integer' && $type != 'float') - { - $type = 'string'; - } - - # We don't change label - if ($label == null) - { - if (!$global && $this->prefExists($id,false)) { - $label = $this->local_prefs[$id]['label']; - } elseif ($this->prefExists($id,true)) { - $label = $this->global_prefs[$id]['label']; - } - } - - settype($value,$type); - - $cur = $this->con->openCursor($this->table); - $cur->pref_value = ($type == 'boolean') ? (string) (integer) $value : (string) $value; - $cur->pref_type = $type; - $cur->pref_label = $label; - - #If we are local, compare to global value - if (!$global && $this->prefExists($id,true)) - { - $g = $this->global_prefs[$id]; - $same_pref = $g['ws'] == $this->ws && $g['value'] == $value - && $g['type'] == $type && $g['label'] == $label; - - # Drop pref if same value as global - if ($same_pref && $this->prefExists($id,false)) { - $this->drop($id); - } elseif ($same_pref) { - return; - } - } - - if ($this->prefExists($id,$global) && $this->ws == $this->prefs[$id]['ws']) - { - if ($global) { - $where = 'WHERE user_id IS NULL '; - } else { - $where = "WHERE user_id = '".$this->con->escape($this->user_id)."' "; - } - - $cur->update($where."AND pref_id = '".$this->con->escape($id)."' AND pref_ws = '".$this->con->escape($this->ws)."' "); - } - else - { - $cur->pref_id = $id; - $cur->user_id = $global ? null : $this->user_id; - $cur->pref_ws = $this->ws; - - $cur->insert(); - } - } - - /** - Removes an existing pref. Workspace - - @param id string Pref ID - @param force_global boolean Force global pref drop - */ - public function drop($id,$force_global=false) - { - if (!$this->ws) { - throw new Exception(__('No workspace specified')); - } - - $strReq = 'DELETE FROM '.$this->table.' '; - - if (($force_global) || ($this->user_id === null)) { - $strReq .= 'WHERE user_id IS NULL '; - $global = true; - } else { - $strReq .= "WHERE user_id = '".$this->con->escape($this->user_id)."' "; - $global = false; - } - - $strReq .= "AND pref_id = '".$this->con->escape($id)."' "; - $strReq .= "AND pref_ws = '".$this->con->escape($this->ws)."' "; - - $this->con->execute($strReq); - - if ($this->prefExists($id,$global)) { - $array = $global ? 'global' : 'local'; - unset($this->{$array.'_prefs'}[$id]); - } - - $this->prefs = $this->global_prefs; - foreach ($this->local_prefs as $id => $v) { - $this->prefs[$id] = $v; - } - } - - /** - Removes all existing pref. in a Workspace - - @param force_global boolean Force global pref drop - */ - public function dropAll($force_global=false) - { - if (!$this->ws) { - throw new Exception(__('No workspace specified')); - } - - $strReq = 'DELETE FROM '.$this->table.' '; - - if (($force_global) || ($this->user_id === null)) { - $strReq .= 'WHERE user_id IS NULL '; - $global = true; - } else { - $strReq .= "WHERE user_id = '".$this->con->escape($this->user_id)."' "; - $global = false; - } - - $strReq .= "AND pref_ws = '".$this->con->escape($this->ws)."' "; - - $this->con->execute($strReq); - - $array = $global ? 'global' : 'local'; - unset($this->{$array.'_prefs'}); - $this->{$array.'_prefs'} = array(); - - $array = $global ? 'local' : 'global'; - $this->prefs = $this->{$array.'_prefs'}; - } - - /** - Returns $prefs property content. - - @return array - */ - public function dumpPrefs() - { - return $this->prefs; - } - - /** - Returns $local_prefs property content. - - @return array - */ - public function dumpLocalPrefs() - { - return $this->local_prefs; - } - - /** - Returns $global_prefs property content. - - @return array - */ - public function dumpGlobalPrefs() - { - return $this->global_prefs; - } - -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/core/class.dc.xmlrpc.php b/v2/dotclear/inc/core/class.dc.xmlrpc.php deleted file mode 100644 index 70a7310..0000000 --- a/v2/dotclear/inc/core/class.dc.xmlrpc.php +++ /dev/null @@ -1,1632 +0,0 @@ -core =& $core; - $this->blog_id = $blog_id; - - # Blogger methods - $this->addCallback('blogger.newPost',array($this,'blogger_newPost'), - array('string','string','string','string','string','string','integer'), - 'New post'); - - $this->addCallback('blogger.editPost',array($this,'blogger_editPost'), - array('boolean','string','string','string','string','string','integer'), - 'Edit a post'); - - $this->addCallback('blogger.getPost',array($this,'blogger_getPost'), - array('struct','string','integer','string','string'), - 'Return a posts by ID'); - - $this->addCallback('blogger.deletePost',array($this,'blogger_deletePost'), - array('string','string','string','string','string','integer'), - 'Delete a post'); - - $this->addCallback('blogger.getRecentPosts',array($this,'blogger_getRecentPosts'), - array('array','string','string','string','string','integer'), - 'Return a list of recent posts'); - - $this->addCallback('blogger.getUsersBlogs',array($this,'blogger_getUserBlogs'), - array('struct','string','string','string'), - "Return user's blog"); - - $this->addCallback('blogger.getUserInfo',array($this,'blogger_getUserInfo'), - array('struct','string','string','string'), - 'Return User Info'); - - # Metaweblog methods - $this->addCallback('metaWeblog.newPost',array($this,'mw_newPost'), - array('string','string','string','string','struct','boolean'), - 'Creates a new post, and optionnaly publishes it.'); - - $this->addCallback('metaWeblog.editPost',array($this,'mw_editPost'), - array('boolean','string','string','string','struct','boolean'), - 'Updates information about an existing entry'); - - $this->addCallback('metaWeblog.getPost',array($this,'mw_getPost'), - array('struct','string','string','string'), - 'Returns information about a specific post'); - - $this->addCallback('metaWeblog.getRecentPosts',array($this,'mw_getRecentPosts'), - array('array','string','string','string','integer'), - 'List of most recent posts in the system'); - - $this->addCallback('metaWeblog.getCategories',array($this,'mw_getCategories'), - array('array','string','string','string'), - 'List of all categories defined in the weblog'); - - $this->addCallback('metaWeblog.newMediaObject',array($this,'mw_newMediaObject'), - array('struct','string','string','string','struct'), - 'Upload a file on the web server'); - - # MovableType methods - $this->addCallback('mt.getRecentPostTitles',array($this,'mt_getRecentPostTitles'), - array('array','string','string','string','integer'), - 'List of most recent posts in the system'); - - $this->addCallback('mt.getCategoryList',array($this,'mt_getCategoryList'), - array('array','string','string','string'), - 'List of all categories defined in the weblog'); - - $this->addCallback('mt.getPostCategories',array($this,'mt_getPostCategories'), - array('array','string','string','string'), - 'List of all categories to which the post is assigned'); - - $this->addCallback('mt.setPostCategories',array($this,'mt_setPostCategories'), - array('boolean','string','string','string','array'), - 'Sets the categories for a post'); - - $this->addCallback('mt.publishPost',array($this,'mt_publishPost'), - array('boolean','string','string','string'), - 'Retrieve pings list for a post'); - - $this->addCallback('mt.supportedMethods',array($this,'listMethods'), - array(),'Retrieve information about the XML-RPC methods supported by the server.'); - - $this->addCallback('mt.supportedTextFilters',array($this,'mt_supportedTextFilters'), - array(),'Retrieve information about supported text filters.'); - - # WordPress methods - $this->addCallback('wp.getUsersBlogs',array($this,'wp_getUsersBlogs'), - array('array','string','string'), - 'Retrieve the blogs of the user.'); - - $this->addCallback('wp.getPage',array($this,'wp_getPage'), - array('struct','integer','integer','string','string'), - 'Get the page identified by the page ID.'); - - $this->addCallback('wp.getPages',array($this,'wp_getPages'), - array('array','integer','string','string','integer'), - 'Get an array of all the pages on a blog.'); - - $this->addCallback('wp.newPage',array($this,'wp_newPage'), - array('integer','integer','string','string','struct','boolean'), - 'Create a new page.'); - - $this->addCallback('wp.deletePage',array($this,'wp_deletePage'), - array('boolean','integer','string','string','integer'), - 'Removes a page from the blog.'); - - $this->addCallback('wp.editPage',array($this,'wp_editPage'), - array('boolean','integer','integer','string','string','struct','boolean'), - 'Make changes to a blog page.'); - - $this->addCallback('wp.getPageList',array($this,'wp_getPageList'), - array('array','integer','string','string'), - 'Get an array of all the pages on a blog. Just the minimum details, lighter than wp.getPages.'); - - $this->addCallback('wp.getAuthors',array($this,'wp_getAuthors'), - array('array','integer','string','string'), - 'Get an array of users for the blog.'); - - $this->addCallback('wp.getCategories',array($this,'wp_getCategories'), - array('array','integer','string','string'), - 'Get an array of available categories on a blog.'); - - $this->addCallback('wp.getTags',array($this,'wp_getTags'), - array('array','integer','string','string'), - 'Get list of all tags for the blog.'); - - $this->addCallback('wp.newCategory',array($this,'wp_newCategory'), - array('integer','integer','string','string','struct'), - 'Create a new category.'); - - $this->addCallback('wp.deleteCategory',array($this,'wp_deleteCategory'), - array('boolean','integer','string','string','integer'), - 'Delete a category with a given ID.'); - - $this->addCallback('wp.suggestCategories',array($this,'wp_suggestCategories'), - array('array','integer','string','string','string','integer'), - 'Get an array of categories that start with a given string.'); - - $this->addCallback('wp.uploadFile',array($this,'wp_uploadFile'), - array('struct','integer','string','string','struct'), - 'Upload a file'); - - $this->addCallback('wp.getPostStatusList',array($this,'wp_getPostStatusList'), - array('array','integer','string','string'), - 'Retrieve all of the post statuses.'); - - $this->addCallback('wp.getPageStatusList',array($this,'wp_getPageStatusList'), - array('array','integer','string','string'), - 'Retrieve all of the pages statuses.'); - - $this->addCallback('wp.getPageTemplates',array($this,'wp_getPageTemplates'), - array('struct','integer','string','string'), - 'Retrieve page templates.'); - - $this->addCallback('wp.getOptions',array($this,'wp_getOptions'), - array('struct','integer','string','string','array'), - 'Retrieve blog options'); - - $this->addCallback('wp.setOptions',array($this,'wp_setOptions'), - array('struct','integer','string','string','struct'), - 'Update blog options'); - - $this->addCallback('wp.getComment',array($this,'wp_getComment'), - array('struct','integer','string','string','integer'), - "Gets a comment, given it's comment ID."); - - $this->addCallback('wp.getCommentCount',array($this,'wp_getCommentCount'), - array('array','integer','string','string','integer'), - 'Retrieve comment count.'); - - $this->addCallback('wp.getComments',array($this,'wp_getComments'), - array('array','integer','string','string','struct'), - 'Gets a set of comments for a given post.'); - - $this->addCallback('wp.deleteComment',array($this,'wp_deleteComment'), - array('boolean','integer','string','string','integer'), - 'Delete a comment with given ID.'); - - $this->addCallback('wp.editComment',array($this,'wp_editComment'), - array('boolean','integer','string','string','integer','struct'), - 'Edit a comment with given ID.'); - - $this->addCallback('wp.newComment',array($this,'wp_newComment'), - array('integer','integer','string','string','integer','struct'), - 'Create a new comment for a given post ID.'); - - $this->addCallback('wp.getCommentStatusList',array($this,'wp_getCommentStatusList'), - array('array','integer','string','string'), - 'Retrieve all of the comment statuses.'); - } - - public function serve($data=false,$encoding='UTF-8') - { - parent::serve(false,$encoding); - } - - public function call($methodname,$args) - { - try { - $rsp = @parent::call($methodname,$args); - $this->debugTrace($methodname,$args,$rsp); - return $rsp; - } catch (Exception $e) { - $this->debugTrace($methodname,$args,array($e->getMessage(),$e->getCode())); - throw $e; - } - } - - private function debugTrace($methodname,$args,$rsp) - { - if (!$this->debug) { - return; - } - - if (($fp = @fopen($this->debug_file,'a')) !== false) - { - fwrite($fp,'['.date('r').']'.' '.$methodname); - - if ($this->trace_args) { - fwrite($fp,"\n- args ---\n".var_export($args,1)); - } - - if ($this->trace_response) { - fwrite($fp,"\n- response ---\n".var_export($rsp,1)); - } - fwrite($fp,"\n"); - fclose($fp); - } - } - - /* Internal methods - --------------------------------------------------- */ - private function setUser($user_id,$pwd) - { - if ($this->core->auth->userID() == $user_id) { - return true; - } - - if ($this->core->auth->checkUser($user_id,$pwd) !== true) { - throw new Exception('Login error'); - } - - return true; - } - - private function setBlog() - { - if (!$this->blog_id) { - throw new Exception('No blog ID given.'); - } - - if ($this->blog_loaded) { - return true; - } - - $this->core->setBlog($this->blog_id); - $this->blog_loaded = true; - - if (!$this->core->blog->id) { - $this->core->blog = null; - throw new Exception('Blog does not exist.'); - } - - if (!$this->core->blog->settings->system->enable_xmlrpc || - !$this->core->auth->check('usage,contentadmin',$this->core->blog->id)) { - $this->core->blog = null; - throw new Exception('Not enough permissions on this blog.'); - } - - foreach ($this->core->plugins->getModules() as $id => $m) { - $this->core->plugins->loadNsFile($id,'xmlrpc'); - } - - return true; - } - - private function getPostRS($post_id,$user,$pwd,$post_type='post') - { - $this->setUser($user,$pwd); - $this->setBlog(); - $rs = $this->core->blog->getPosts(array( - 'post_id' => (integer) $post_id, - 'post_type' => $post_type - )); - - if ($rs->isEmpty()) { - throw new Exception('This entry does not exist'); - } - - return $rs; - } - - private function getCatID($cat_url) - { - $rs = $this->core->blog->getCategories(array('cat_url' => $cat_url)); - - return $rs->isEmpty() ? null : $rs->cat_id; - } - - /* Generic methods - --------------------------------------------------- */ - private function newPost($blog_id,$user,$pwd,$content,$struct=array(),$publish=true) - { - $this->setUser($user,$pwd); - $this->setBlog(); - - $title = !empty($struct['title']) ? $struct['title'] : ''; - $excerpt = !empty($struct['mt_excerpt']) ? $struct['mt_excerpt'] : ''; - $description = !empty($struct['description']) ? $struct['description'] : null; - $dateCreated = !empty($struct['dateCreated']) ? $struct['dateCreated'] : null; - $open_comment = isset($struct['mt_allow_comments']) ? $struct['mt_allow_comments'] : 1; - $open_tb = isset($struct['mt_allow_pings']) ? $struct['mt_allow_pings'] : 1; - - if ($description !== null) { - $content = $description; - } - - if (!$title) { - $title = text::cutString(html::clean($content),25).'...'; - } - - $excerpt_xhtml = $this->core->callFormater('xhtml',$excerpt); - $content_xhtml = $this->core->callFormater('xhtml',$content); - - if (empty($content)) { - throw new Exception('Cannot create an empty entry'); - } - - $cur = $this->core->con->openCursor($this->core->prefix.'post'); - - $cur->user_id = $this->core->auth->userID(); - $cur->post_lang = $this->core->auth->getInfo('user_lang'); - $cur->post_title = trim($title); - $cur->post_content = $content; - $cur->post_excerpt = $excerpt; - $cur->post_content_xhtml = $content_xhtml; - $cur->post_excerpt_xhtml = $excerpt_xhtml; - $cur->post_open_comment = (integer) ($open_comment == 1); - $cur->post_open_tb = (integer) ($open_tb == 1); - $cur->post_status = (integer) $publish; - $cur->post_format = 'xhtml'; - - if ($dateCreated) { - if ($dateCreated instanceof xmlrpcDate) { - $cur->post_dt = date('Y-m-d H:i:00',$dateCreated->getTimestamp()); - } elseif (is_string($dateCreated) && @strtotime($dateCreated)) { - $cur->post_dt = date('Y-m-d H:i:00',strtotime($dateCreated)); - } - } - - # Categories in an array - if (isset($struct['categories']) && is_array($struct['categories'])) - { - $categories = $struct['categories']; - $cat_id = !empty($categories[0]) ? $categories[0] : null; - - $cur->cat_id = $this->getCatID($cat_id); - } - - if (isset($struct['wp_slug'])) { - $cur->post_url = $struct['wp_slug']; - } - - if (isset($struct['wp_password'])) { - $cur->post_password = $struct['wp_password']; - } - - $cur->post_type = 'post'; - if (!empty($struct['post_type'])) { - $cur->post_type = $struct['post_type']; - } - - if ($cur->post_type == 'post') - { - # --BEHAVIOR-- xmlrpcBeforeNewPost - $this->core->callBehavior('xmlrpcBeforeNewPost',$this,$cur,$content,$struct,$publish); - - $post_id = $this->core->blog->addPost($cur); - - # --BEHAVIOR-- xmlrpcAfterNewPost - $this->core->callBehavior('xmlrpcAfterNewPost',$this,$post_id,$cur,$content,$struct,$publish); - } - elseif ($cur->post_type == 'page') - { - if (isset($struct['wp_page_order'])) { - $cur->post_position = (integer) $struct['wp_page_order']; - } - - $this->core->blog->settings->system->post_url_format = '{t}'; - - $post_id = $this->core->blog->addPost($cur); - } - else - { - throw new Exception('Invalid post type',401); - } - - return (string) $post_id; - } - - private function editPost($post_id,$user,$pwd,$content,$struct=array(),$publish=true) - { - $post_id = (integer) $post_id; - - $post_type = 'post'; - if (!empty($struct['post_type'])) { - $post_type = $struct['post_type']; - } - - $post = $this->getPostRS($post_id,$user,$pwd,$post_type); - - $title = (!empty($struct['title'])) ? $struct['title'] : ''; - $excerpt = (!empty($struct['mt_excerpt'])) ? $struct['mt_excerpt'] : ''; - $description = (!empty($struct['description'])) ? $struct['description'] : null; - $dateCreated = !empty($struct['dateCreated']) ? $struct['dateCreated'] : null; - $open_comment = (isset($struct['mt_allow_comments'])) ? $struct['mt_allow_comments'] : 1; - $open_tb = (isset($struct['mt_allow_pings'])) ? $struct['mt_allow_pings'] : 1; - - if ($description !== null) { - $content = $description; - } - - if (!$title) { - $title = text::cutString(html::clean($content),25).'...'; - } - - $excerpt_xhtml = $this->core->callFormater('xhtml',$excerpt); - $content_xhtml = $this->core->callFormater('xhtml',$content); - - if (empty($content)) { - throw new Exception('Cannot create an empty entry'); - } - - $cur = $this->core->con->openCursor($this->core->prefix.'post'); - - $cur->post_type = $post_type; - $cur->post_title = trim($title); - $cur->post_content = $content; - $cur->post_excerpt = $excerpt; - $cur->post_content_xhtml = $content_xhtml; - $cur->post_excerpt_xhtml = $excerpt_xhtml; - $cur->post_open_comment = (integer) ($open_comment == 1); - $cur->post_open_tb = (integer) ($open_tb == 1); - $cur->post_status = (integer) $publish; - $cur->post_format = 'xhtml'; - $cur->post_url = $post->post_url; - - - if ($dateCreated) { - if ($dateCreated instanceof xmlrpcDate) { - $cur->post_dt = date('Y-m-d H:i:00',$dateCreated->getTimestamp()); - } elseif (is_string($dateCreated) && @strtotime($dateCreated)) { - $cur->post_dt = date('Y-m-d H:i:00',strtotime($dateCreated)); - } - } else { - $cur->post_dt = $post->post_dt; - } - - # Categories in an array - if (isset($struct['categories']) && is_array($struct['categories'])) - { - $categories = $struct['categories']; - $cat_id = !empty($categories[0]) ? $categories[0] : null; - - $cur->cat_id = $this->getCatID($cat_id); - } - - if (isset($struct['wp_slug'])) { - $cur->post_url = $struct['wp_slug']; - } - - if (isset($struct['wp_password'])) { - $cur->post_password = $struct['wp_password']; - } - - if ($cur->post_type == 'post') - { - # --BEHAVIOR-- xmlrpcBeforeEditPost - $this->core->callBehavior('xmlrpcBeforeEditPost',$this,$post_id,$cur,$content,$struct,$publish); - - $this->core->blog->updPost($post_id,$cur); - - # --BEHAVIOR-- xmlrpcAfterEditPost - $this->core->callBehavior('xmlrpcAfterEditPost',$this,$post_id,$cur,$content,$struct,$publish); - } - elseif ($cur->post_type == 'page') - { - if (isset($struct['wp_page_order'])) { - $cur->post_position = (integer) $struct['wp_page_order']; - } - - $this->core->blog->settings->system->post_url_format = '{t}'; - - $this->core->blog->updPost($post_id,$cur); - } - else - { - throw new Exception('Invalid post type',401); - } - - return true; - } - - private function getPost($post_id,$user,$pwd,$type='mw') - { - $post_id = (integer) $post_id; - - $post = $this->getPostRS($post_id,$user,$pwd); - - $res = new ArrayObject(); - - $res['dateCreated'] = new xmlrpcDate($post->getTS()); - $res['userid'] = $post->user_id; - $res['postid'] = $post->post_id; - - if ($post->cat_id) { - $res['categories'] = array($post->cat_url); - } - - if ($type == 'blogger') { - $res['content'] = $post->post_content_xhtml; - } - - if ($type == 'mt' || $type == 'mw') { - $res['title'] = $post->post_title; - } - - if ($type == 'mw') { - $res['description'] = $post->post_content_xhtml; - $res['link'] = $res['permaLink'] = $post->getURL(); - $res['mt_excerpt'] = $post->post_excerpt_xhtml; - $res['mt_text_more'] = ''; - $res['mt_allow_comments'] = (integer) $post->post_open_comment; - $res['mt_allow_pings'] = (integer) $post->post_open_tb; - $res['mt_convert_breaks'] = ''; - $res['mt_keywords'] = ''; - } - - # --BEHAVIOR-- xmlrpcGetPostInfo - $this->core->callBehavior('xmlrpcGetPostInfo',$this,$type,array(&$res)); - - return $res; - } - - private function deletePost($post_id,$user,$pwd) - { - $post_id = (integer) $post_id; - - $this->getPostRS($post_id,$user,$pwd); - $this->core->blog->delPost($post_id); - - return true; - } - - private function getRecentPosts($blog_id,$user,$pwd,$nb_post,$type='mw') - { - $this->setUser($user,$pwd); - $this->setBlog(); - - $nb_post = (integer) $nb_post; - - if ($nb_post > 50) { - throw new Exception('Cannot retrieve more than 50 entries'); - } - - $params = array(); - $params['limit'] = $nb_post; - - $posts = $this->core->blog->getPosts($params); - - $res = array(); - while ($posts->fetch()) - { - $tres = array(); - - $tres['dateCreated'] = new xmlrpcDate($posts->getTS()); - $tres['userid'] = $posts->user_id; - $tres['postid'] = $posts->post_id; - - if ($posts->cat_id) { - $tres['categories'] = array($posts->cat_url); - } - - if ($type == 'blogger') { - $tres['content'] = $posts->post_content_xhtml; - } - - if ($type == 'mt' || $type == 'mw') { - $tres['title'] = $posts->post_title; - } - - if ($type == 'mw') { - $tres['description'] = $posts->post_content_xhtml; - $tres['link'] = $tres['permaLink'] = $posts->getURL(); - $tres['mt_excerpt'] = $posts->post_excerpt_xhtml; - $tres['mt_text_more'] = ''; - $tres['mt_allow_comments'] = (integer) $posts->post_open_comment; - $tres['mt_allow_pings'] = (integer) $posts->post_open_tb; - $tres['mt_convert_breaks'] = ''; - $tres['mt_keywords'] = ''; - } - - # --BEHAVIOR-- xmlrpcGetPostInfo - $this->core->callBehavior('xmlrpcGetPostInfo',$this,$type,array(&$tres)); - - $res[] = $tres; - } - - return $res; - } - - private function getUserBlogs($user,$pwd) - { - $this->setUser($user,$pwd); - $this->setBlog(); - - return array(array( - 'url' => $this->core->blog->url, - 'blogid' => '1', - 'blogName' => $this->core->blog->name - )); - } - - private function getUserInfo($user,$pwd) - { - $this->setUser($user,$pwd); - - return array( - 'userid' => $this->core->auth->userID(), - 'firstname' => $this->core->auth->getInfo('user_firstname'), - 'lastname' => $this->core->auth->getInfo('user_name'), - 'nickname' => $this->core->auth->getInfo('user_displayname'), - 'email' => $this->core->auth->getInfo('user_email'), - 'url' => $this->core->auth->getInfo('user_url') - ); - } - - private function getCategories($blog_id,$user,$pwd) - { - $this->setUser($user,$pwd); - $this->setBlog(); - $rs = $this->core->blog->getCategories(); - - $res = array(); - - $l = $rs->level; - $stack = array('',$rs->cat_url); - - while ($rs->fetch()) - { - $d = $rs->level - $l; - if ($d == 0) { - array_pop($stack); - $parent = end($stack); - } elseif ($d > 0) { - $parent = end($stack); - } elseif ($d < 0) { - $D = abs($d); - for ($i=0; $i<=$D; $i++) { - array_pop($stack); - } - $parent = end($stack); - } - - $res[] = array( - 'categoryId' => $rs->cat_url, - 'parentId' => $parent, - 'description' => $rs->cat_title, - 'categoryName' => $rs->cat_url, - 'htmlUrl' => $this->core->blog->url. - $this->core->url->getURLFor('category',$rs->cat_url), - 'rssUrl' => $this->core->blog->url. - $this->core->url->getURLFor('feed','category/'.$rs->cat_url.'/rss2') - ); - - $stack[] = $rs->cat_url; - $l = $rs->level; - } - - return $res; - } - - private function getPostCategories($post_id,$user,$pwd) - { - $post_id = (integer) $post_id; - - $post = $this->getPostRS($post_id,$user,$pwd); - - return array( - array( - 'categoryName' => $post->cat_url, - 'categoryId' => (string) $post->cat_url, - 'isPrimary' => true - ) - ); - } - - private function setPostCategories($post_id,$user,$pwd,$categories) - { - $post_id = (integer) $post_id; - - $post = $this->getPostRS($post_id,$user,$pwd); - - $cat_id = (!empty($categories[0]['categoryId'])) ? $categories[0]['categoryId'] : null; - - foreach($categories as $v) - { - if (isset($v['isPrimary']) && $v['isPrimary']) { - $cat_id = $v['categoryId']; - break; - } - } - - # w.bloggar sends -1 for no category. - if ($cat_id == -1) { - $cat_id = null; - } - - if ($cat_id) { - $cat_id = $this->getCatID($cat_id); - } - - $this->core->blog->updPostCategory($post_id,(integer) $cat_id); - - return true; - } - - private function publishPost($post_id,$user,$pwd) - { - $post_id = (integer) $post_id; - - $this->getPostRS($post_id,$user,$pwd); - - # --BEHAVIOR-- xmlrpcBeforePublishPost - $this->core->callBehavior('xmlrpcBeforePublishPost',$this,$post_id); - - $this->core->blog->updPostStatus($post_id,1); - - # --BEHAVIOR-- xmlrpcAfterPublishPost - $this->core->callBehavior('xmlrpcAfterPublishPost',$this,$post_id); - - return true; - } - - private function newMediaObject($blog_id,$user,$pwd,$file) - { - if (empty($file['name'])) { - throw new Exception('No file name'); - } - - if (empty($file['bits'])) { - throw new Exception('No file content'); - } - - $file_name = $file['name']; - $file_bits = $file['bits']; - - $this->setUser($user,$pwd); - $this->setBlog(); - - $media = new dcMedia($this->core); - - $dir_name = path::clean(dirname($file_name)); - $file_name = basename($file_name); - - $dir_name = preg_replace('!^/!','',$dir_name); - if ($dir_name != '') - { - $dir = explode('/',$dir_name); - $cwd = './'; - foreach ($dir as $v) - { - $v = files::tidyFileName($v); - $cwd .= $v.'/'; - $media->makeDir($v); - $media->chdir($cwd); - } - } - - $media_id = $media->uploadBits($file_name,$file_bits); - - $f = $media->getFile($media_id); - return array( - 'file' => $file_name, - 'url' => $f->file_url, - 'type' => files::getMimeType($file_name) - ); - } - - private function translateWpStatus($s) - { - $status = array( - 'draft' => -2, - 'pending' => -2, - 'private' => 0, - 'publish' => 1, - 'scheduled' => -1 - ); - - if (is_int($s)) { - $status = array_flip($status); - return isset($status[$s]) ? $status[$s] : $status[-2]; - } else { - return isset($status[$s]) ? $status[$s] : $status['pending']; - } - } - - private function translateWpCommentstatus($s) - { - $status = array( - 'hold' => -1, - 'approve' => 0, - 'spam' => -2 - ); - - if (is_int($s)) { - $status = array_flip($status); - return isset($status[$s]) ? $status[$s] : $status[0]; - } else { - return isset($status[$s]) ? $status[$s] : $status['approve']; - } - } - - private function translateWpOptions($options=array()) - { - $timezone = 0; - if ($this->core->blog->settings->system->blog_timezone) { - $timezone = dt::getTimeOffset($this->core->blog->settings->system->blog_timezone)/3600; - } - - $res = array ( - 'software_name' => array ( - 'desc' => 'Software Name', - 'readonly' => true, - 'value' => 'Dotclear' - ), - 'software_version' => array ( - 'desc' => 'Software Version', - 'readonly' => true, - 'value' => DC_VERSION - ), - 'blog_url' => array ( - 'desc' => 'Blog URL', - 'readonly' => true, - 'value' => $this->core->blog->url - ), - 'time_zone' => array ( - 'desc' => 'Time Zone', - 'readonly' => true, - 'value' => (string) $timezone - ), - 'blog_title' => array ( - 'desc' => 'Blog Title', - 'readonly' => false, - 'value' => $this->core->blog->name - ), - 'blog_tagline' => array ( - 'desc' => 'Blog Tagline', - 'readonly' => false, - 'value' => $this->core->blog->desc - ), - 'date_format' => array ( - 'desc' => 'Date Format', - 'readonly' => false, - 'value' => $this->core->blog->settings->system->date_format - ), - 'time_format' => array ( - 'desc' => 'Time Format', - 'readonly' => false, - 'value' => $this->core->blog->settings->system->time_format - ) - ); - - if (!empty($options)) - { - $r = array(); - foreach ($options as $v) { - if (isset($res[$v])) { - $r[$v] = $res[$v]; - } - } - return $r; - } - - return $res; - } - - private function getPostStatusList($blog_id,$user,$pwd) - { - $this->setUser($user,$pwd); - $this->setBlog(); - - return array( - 'draft' => 'Draft', - 'pending' => 'Pending Review', - 'private' => 'Private', - 'publish' => 'Published', - 'scheduled' => 'Scheduled' - ); - } - - private function getPageStatusList($blog_id,$user,$pwd) - { - $this->setUser($user,$pwd); - $this->setBlog(); - $this->checkPagesPermission(); - - return array( - 'draft' => 'Draft', - 'private' => 'Private', - 'published' => 'Published', - 'scheduled' => 'Scheduled' - ); - } - - private function checkPagesPermission() - { - if (!$this->core->plugins->moduleExists('pages')) { - throw new Exception('Pages management is not available on this blog.'); - } - - if (!$this->core->auth->check('pages,contentadmin',$this->core->blog->id)) { - throw new Exception('Not enough permissions to edit pages.',401); - } - } - - private function getPages($blog_id,$user,$pwd,$limit=null,$id=null) - { - $this->setUser($user,$pwd); - $this->setBlog(); - $this->checkPagesPermission(); - - $params = array( - 'post_type' => 'page', - 'order' => 'post_position ASC, post_title ASC' - ); - - if ($id) { - $params['post_id'] = (integer) $id; - } - if ($limit) { - $params['limit'] = $limit; - } - - $posts = $this->core->blog->getPosts($params); - - $res = array(); - while ($posts->fetch()) - { - $tres = array( - "dateCreated" => new xmlrpcDate($posts->getTS()), - "userid" => $posts->user_id, - "page_id" => $posts->post_id, - "page_status" => $this->translateWpStatus((integer) $posts->post_status), - "description" => $posts->post_content_xhtml, - "title" => $posts->post_title, - "link" => $posts->getURL(), - "permaLink" => $posts->getURL(), - "categories" => array(), - "excerpt" => $posts->post_excerpt_xhtml, - "text_more" => '', - "mt_allow_comments" => (integer) $posts->post_open_comment, - "mt_allow_pings" => (integer) $posts->post_open_tb, - "wp_slug" => $posts->post_url, - "wp_password" => $posts->post_password, - "wp_author" => $posts->getAuthorCN(), - "wp_page_parent_id" => 0, - "wp_page_parent_title" => '', - "wp_page_order" => $posts->post_position, - "wp_author_id" => $posts->user_id, - "wp_author_display_name" => $posts->getAuthorCN(), - "date_created_gmt" => new xmlrpcDate(dt::iso8601($posts->getTS(),$posts->post_tz)), - "custom_fields" => array(), - "wp_page_template" => 'default' - ); - - # --BEHAVIOR-- xmlrpcGetPageInfo - $this->core->callBehavior('xmlrpcGetPageInfo',$this,array(&$tres)); - - $res[] = $tres; - } - - return $res; - } - - private function newPage($blog_id,$user,$pwd,$struct,$publish) - { - $this->setUser($user,$pwd); - $this->setBlog(); - $this->checkPagesPermission(); - - $struct['post_type'] = 'page'; - - return $this->newPost($blog_id,$user,$pwd,null,$struct,$publish); - } - - private function editPage($page_id,$user,$pwd,$struct,$publish) - { - $this->setUser($user,$pwd); - $this->setBlog(); - $this->checkPagesPermission(); - - $struct['post_type'] = 'page'; - - return $this->editPost($page_id,$user,$pwd,null,$struct,$publish); - } - - private function deletePage($page_id,$user,$pwd) - { - $this->setUser($user,$pwd); - $this->setBlog(); - $this->checkPagesPermission(); - - $page_id = (integer) $page_id; - - $this->getPostRS($page_id,$user,$pwd,'page'); - $this->core->blog->delPost($page_id); - - return true; - } - - private function getAuthors($user,$pwd) - { - $this->setUser($user,$pwd); - $this->setBlog(); - - $rs = $this->core->getBlogPermissions($this->core->blog->id); - $res = array(); - - foreach($rs as $k => $v) - { - $res[] = array( - 'user_id' => $k, - 'user_login' => $k, - 'display_name' => dcUtils::getUserCN($k,$v['name'],$v['firstname'],$v['displayname']) - ); - } - return $res; - } - - private function getTags($user,$pwd) - { - $this->setUser($user,$pwd); - $this->setBlog(); - - $tags = $this->core->meta->getMeta('tag'); - $tags->sort('meta_id_lower','asc'); - - $res = array(); - $url = $this->core->blog->url. - $this->core->url->getURLFor('tag','%s'); - $f_url = $this->core->blog->url. - $this->core->url->getURLFor('tag_feed','%s'); - while ($tags->fetch()) - { - $res[] = array( - 'tag_id' => $tags->meta_id, - 'name' => $tags->meta_id, - 'count' => $tags->count, - 'slug' => $tags->meta_id, - 'html_url' => sprintf($url,$tags->meta_id), - 'rss_url' => sprintf($f_url,$tags->meta_id) - ); - } - return $res; - } - - private function newCategory($user,$pwd,$struct) - { - $this->setUser($user,$pwd); - $this->setBlog(); - - if (empty($struct['name'])) { - throw new Exception('You mus give a category name.'); - } - - $cur = $this->core->con->openCursor($this->core->prefix.'category'); - $cur->cat_title = $struct['name']; - - if (!empty($struct['slug'])) { - $cur->cat_url = $struct['slug']; - } - if (!empty($struct['category_description'])) { - $cur->cat_desc = $struct['category_description']; - if (html::clean($cur->cat_desc) == $cur->cat_desc) { - $cur->cat_desc = '

      '.$cur->cat_desc.'

      '; - } - } - - $parent = !empty($struct['category_parent']) ? (integer) $struct['category_parent'] : 0; - - $id = $this->core->blog->addCategory($cur,$parent); - $rs = $this->core->blog->getCategory($id); - return $rs->cat_url; - } - - private function deleteCategory($user,$pwd,$cat_id) - { - $this->setUser($user,$pwd); - $this->setBlog(); - - $c = $this->core->blog->getCategories(array('cat_url' => $cat_id)); - if ($c->isEmpty()) { - throw new Exception(__('This category does not exist.')); - } - $cat_id = $c->cat_id; - unset($c); - - $this->core->blog->delCategory((integer) $cat_id); - return true; - } - - private function searchCategories($user,$pwd,$category,$limit) - { - $this->setUser($user,$pwd); - $this->setBlog(); - - $strReq = 'SELECT cat_id, cat_title, cat_url '. - 'FROM '.$this->core->prefix.'category '. - "WHERE blog_id = '".$this->core->con->escape($this->core->blog->id)."' ". - "AND LOWER(cat_title) LIKE LOWER('%".$this->core->con->escape($category)."%') ". - ($limit > 0 ? $this->core->con->limit($limit) : ''); - - $rs = $this->core->con->select($strReq); - - $res = array(); - while ($rs->fetch()) - { - $res[] = array( - 'category_id' => $rs->cat_url, - 'category_name' => $rs->cat_url - ); - } - return $res; - } - - private function countComments($user,$pwd,$post_id) - { - $this->setUser($user,$pwd); - $this->setBlog(); - - $res = array( - 'approved' => 0, - 'awaiting_moderation' => 0, - 'spam' => 0, - 'total' => 0 - ); - $rs = $this->core->blog->getComments(array('post_id' => $post_id)); - - while ($rs->fetch()) { - $res['total']++; - if ($rs->comment_status == 1) { - $res['approved']++; - } elseif ($rs->comment_status == -2) { - $res['spam']++; - } else { - $res['awaiting_moderation']++; - } - } - return $res; - } - - private function getComments($user,$pwd,$struct,$id=null) - { - $this->setUser($user,$pwd); - $this->setBlog(); - - $params = array(); - - if (!empty($struct['status'])) { - $params['comment_status'] = $this->translateWpCommentstatus($struct['status']); - } - - if (!empty($struct['post_id'])) { - $params['post_id'] = (integer) $struct['post_id']; - } - - if (isset($id)) { - $params['comment_id'] = $id; - } - - $offset = !empty($struct['offset']) ? (integer) $struct['offset'] : 0; - $limit = !empty($struct['number']) ? (integer) $struct['number'] : 10; - $params['limit'] = array($offset,$limit); - - $rs = $this->core->blog->getComments($params); - $res = array(); - while ($rs->fetch()) - { - $res[] = array( - 'date_created_gmt' => new xmlrpcDate($rs->getTS()), - 'user_id' => $rs->user_id, - 'comment_id' => $rs->comment_id, - 'parent' => 0, - 'status' => $this->translateWpCommentstatus((integer) $rs->comment_status), - 'content' => $rs->comment_content, - 'link' => $rs->getPostURL().'#c'.$rs->comment_id, - 'post_id' => $rs->post_id, - 'post_title' => $rs->post_title, - 'author' => $rs->comment_author, - 'author_url' => $rs->comment_site, - 'author_email' => $rs->comment_email, - 'author_ip' => $rs->comment_ip - ); - } - return $res; - } - - private function addComment($user,$pwd,$post_id,$struct) - { - $this->setUser($user,$pwd); - $this->setBlog(); - - if (empty($struct['content'])) { - throw new Exception('Sorry, you cannot post an empty comment',401); - } - - if (is_numeric($post_id)) { - $p['post_id'] = $post_id; - } else { - $p['post_url'] = $post_id; - } - $rs = $this->core->blog->getPosts($p); - if ($rs->isEmpty()) { - throw new Exception('Sorry, no such post.',404); - } - - $cur = $this->core->con->openCursor($this->core->prefix.'comment'); - - $cur->comment_author = $this->core->auth->getInfo('user_cn'); - $cur->comment_email = $this->core->auth->getInfo('user_email'); - $cur->comment_site = $this->core->auth->getInfo('user_url'); - - $cur->comment_content = $struct['content']; - $cur->post_id = (integer) $post_id; - - $id = $this->core->blog->addComment($cur); - return $id; - } - - private function updComment($user,$pwd,$comment_id,$struct) - { - $this->setUser($user,$pwd); - $this->setBlog(); - - $cur = $this->core->con->openCursor($this->core->prefix.'comment'); - - if (isset($struct['status'])) { - $cur->comment_status = $this->translateWpCommentstatus($struct['status']); - } - - if (isset($struct['date_created_gmt'])) { - if ($struct['date_created_gmt'] instanceof xmlrpcDate) { - $cur->comment_dt = date('Y-m-d H:i:00',$struct['date_created_gmt']->getTimestamp()); - } elseif (is_string($struct['date_created_gmt']) && @strtotime($struct['date_created_gmt'])) { - $cur->comment_dt = date('Y-m-d H:i:00',strtotime($struct['date_created_gmt'])); - } - $cur->comment_dt = $struct['date_created_gmt']; - } - - if (isset($struct['content'])) { - $cur->comment_content = $struct['content']; - } - - if (isset($struct['author'])) { - $cur->comment_author = $struct['author']; - } - - if (isset($struct['author_url'])) { - $cur->comment_site = $struct['author_url']; - } - - if (isset($struct['author_email'])) { - $cur->comment_email = $struct['author_email']; - } - - $this->core->blog->updComment($comment_id,$cur); - return true; - } - - private function delComment($user,$pwd,$comment_id) - { - $this->setUser($user,$pwd); - $this->setBlog(); - - $this->core->blog->delComment($comment_id); - return true; - } - - /* Blogger methods - --------------------------------------------------- */ - public function blogger_newPost($appkey,$blogid,$username,$password,$content,$publish) - { - return $this->newPost($blogid,$username,$password,$content,array(),$publish); - } - - public function blogger_editPost($appkey,$postid,$username,$password,$content,$publish) - { - return $this->editPost($postid,$username,$password,$content,array(),$publish); - } - - public function blogger_getPost($appkey,$postid,$username,$password) - { - return $this->getPost($postid,$username,$password,'blogger'); - } - - public function blogger_deletePost($appkey,$postid,$username,$password,$publish) - { - return $this->deletePost($postid,$username,$password); - } - - public function blogger_getRecentPosts($appkey,$blogid,$username,$password,$numberOfPosts) - { - return $this->getRecentPosts($blogid,$username,$password,$numberOfPosts,'blogger'); - } - - public function blogger_getUserBlogs($appkey,$username,$password) - { - return $this->getUserBlogs($username,$password); - } - - public function blogger_getUserInfo($appkey,$username,$password) - { - return $this->getUserInfo($username,$password); - } - - - /* Metaweblog methods - ------------------------------------------------------- */ - public function mw_newPost($blogid,$username,$password,$content,$publish) - { - return $this->newPost($blogid,$username,$password,'',$content,$publish); - } - - public function mw_editPost($postid,$username,$password,$content,$publish) - { - return $this->editPost($postid,$username,$password,'',$content,$publish); - } - - public function mw_getPost($postid,$username,$password) - { - return $this->getPost($postid,$username,$password,'mw'); - } - - public function mw_getRecentPosts($blogid,$username,$password,$numberOfPosts) - { - return $this->getRecentPosts($blogid,$username,$password,$numberOfPosts,'mw'); - } - - public function mw_getCategories($blogid,$username,$password) - { - return $this->getCategories($blogid,$username,$password); - } - - public function mw_newMediaObject($blogid,$username,$password,$file) - { - return $this->newMediaObject($blogid,$username,$password,$file); - } - - /* MovableType methods - --------------------------------------------------- */ - public function mt_getRecentPostTitles($blogid,$username,$password,$numberOfPosts) - { - return $this->getRecentPosts($blogid,$username,$password,$numberOfPosts,'mt'); - } - - public function mt_getCategoryList($blogid,$username,$password) - { - return $this->getCategories($blogid,$username,$password); - } - - public function mt_getPostCategories($postid,$username,$password) - { - return $this->getPostCategories($postid,$username,$password); - } - - public function mt_setPostCategories($postid,$username,$password,$categories) - { - return $this->setPostCategories($postid,$username,$password,$categories); - } - - public function mt_publishPost($postid,$username,$password) - { - return $this->publishPost($postid,$username,$password); - } - - public function mt_supportedTextFilters() - { - return array(); - } - - /* WordPress methods - --------------------------------------------------- */ - public function wp_getUsersBlogs($username,$password) - { - return $this->getUserBlogs($username,$password); - } - - public function wp_getPage($blogid,$pageid,$username,$password) - { - $res = $this->getPages($blogid,$username,$password,null,$pageid); - - if (empty($res)) { - throw new Exception('Sorry, no such page',404); - } - - return $res[0]; - } - - public function wp_getPages($blogid,$username,$password,$num=10) - { - return $this->getPages($blogid,$username,$password,$num); - } - - public function wp_newPage($blogid,$username,$password,$content,$publish) - { - return $this->newPage($blogid,$username,$password,$content,$publish); - } - - public function wp_deletePage($blogid,$username,$password,$pageid) - { - return $this->deletePage($pageid,$username,$password); - } - - public function wp_editPage($blogid,$pageid,$username,$password,$content,$publish) - { - return $this->editPage($pageid,$username,$password,$content,$publish); - } - - public function wp_getPageList($blogid,$username,$password) - { - $A = $this->getPages($blogid,$username,$password); - $res = array(); - foreach ($A as $v) { - $res[] = array( - 'page_id' => $v['page_id'], - 'page_title' => $v['title'], - 'page_parent_id' => $v['wp_page_parent_id'], - 'dateCreated' => $v['dateCreated'], - 'date_created_gmt' => $v['date_created_gmt'] - ); - } - return $res; - } - - public function wp_getAuthors($blogid,$username,$password) - { - return $this->getAuthors($username,$password); - } - - public function wp_getCategories($blogid,$username,$password) - { - return $this->getCategories($blogid,$username,$password); - } - - public function wp_getTags($blogid,$username,$password) - { - return $this->getTags($username,$password); - } - - public function wp_newCategory($blogid,$username,$password,$content) - { - return $this->newCategory($username,$password,$content); - } - - public function wp_deleteCategory($blogid,$username,$password,$categoryid) - { - return $this->deleteCategory($username,$password,$categoryid); - } - - public function wp_suggestCategories($blogid,$username,$password,$category,$max_results=0) - { - return $this->searchCategories($username,$password,$category,$max_results); - } - - public function wp_uploadFile($blogid,$username,$password,$file) - { - return $this->newMediaObject($blogid,$username,$password,$file); - } - - public function wp_getPostStatusList($blogid,$username,$password) - { - return $this->getPostStatusList($blogid,$username,$password); - } - - public function wp_getPageStatusList($blogid,$username,$password) - { - return $this->getPostStatusList($blogid,$username,$password); - } - - public function wp_getPageTemplates($blogid,$username,$password) - { - return array('Default' => 'default'); - } - - public function wp_getOptions($blogid,$username,$password,$options=array()) - { - $this->setUser($username,$password); - $this->setBlog(); - - return $this->translateWpOptions($options); - } - - public function wp_setOptions($blogid,$username,$password,$options) - { - $this->setUser($username,$password); - $this->setBlog(); - - if (!$this->core->auth->check('admin',$this->core->blog->id)) { - throw new Exception('Not enough permissions to edit options.',401); - } - - $opt = $this->translateWpOptions(); - - $done = array(); - $blog_changes = false; - $cur = $this->core->con->openCursor($this->core->prefix.'blog'); - - $this->core->blog->settings->addNamespace('system'); - - foreach ($options as $name => $value) - { - if (!isset($opt[$name]) || $opt[$name]['readonly']) { - continue; - } - - switch ($name) - { - case 'blog_title': - $blog_changes = true; - $cur->blog_name = $value; - $done[] = $name; - break; - case 'blog_tagline': - $blog_changes = true; - $cur->blog_desc = $value; - $done[] = $name; - break; - case 'date_format': - $this->core->blog->settings->system->put('date_format',$value); - $done[] = $name; - break; - case 'time_format': - $this->core->blog->settings->system->put('time_format',$value); - $done[] = $name; - break; - } - } - - if ($blog_changes) { - $this->core->updBlog($this->core->blog->id,$cur); - $this->core->setBlog($this->core->blog->id); - } - - return $this->translateWpOptions($done); - } - - public function wp_getComment($blogid,$username,$password,$commentid) - { - $res = $this->getComments($username,$password,array(),$commentid); - - if (empty($res)) { - throw new Exception('Sorry, no such comment',404); - } - - return $res[0]; - } - - public function wp_getCommentCount($blogid,$username,$password,$postid) - { - return $this->countComments($username,$password,$postid); - } - - public function wp_getComments($blogid,$username,$password,$struct) - { - return $this->getComments($username,$password,$struct); - } - - public function wp_deleteComment($blogid,$username,$password,$commentid) - { - return $this->delComment($username,$password,$commentid); - } - - public function wp_editComment($blogid,$username,$password,$commentid,$content) - { - return $this->updComment($username,$password,$commentid,$content); - } - - public function wp_newComment($blogid,$username,$password,$postid,$content) - { - return $this->addComment($username,$password,$postid,$content); - } - - public function wp_getCommentStatusList($blogid,$username,$password) - { - $this->setUser($username,$password); - $this->setBlog(); - - return array( - 'hold' => 'Unapproved', - 'approve' => 'Approved', - 'spam' => 'Spam' - ); - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/core_error.php b/v2/dotclear/inc/core_error.php deleted file mode 100644 index 5bbbe73..0000000 --- a/v2/dotclear/inc/core_error.php +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - Dotclear - Error - - - - -
      -

      Dotclear

      -

      -
      - - \ No newline at end of file diff --git a/v2/dotclear/inc/dbschema/db-schema.php b/v2/dotclear/inc/dbschema/db-schema.php deleted file mode 100644 index cb6bb22..0000000 --- a/v2/dotclear/inc/dbschema/db-schema.php +++ /dev/null @@ -1,282 +0,0 @@ -blog - ->blog_id ('varchar', 32, false) - ->blog_uid ('varchar', 32, false) - ->blog_creadt ('timestamp', 0, false, 'now()') - ->blog_upddt ('timestamp', 0, false, 'now()') - ->blog_url ('varchar', 255, false) - ->blog_name ('varchar', 255, false) - ->blog_desc ('text', 0, true) - ->blog_status ('smallint', 0, false, 1) - - ->primary('pk_blog','blog_id') - ; - -$_s->category - ->cat_id ('bigint', 0, false) - ->blog_id ('varchar', 32, false) - ->cat_title ('varchar', 255, false) - ->cat_url ('varchar', 255, false) - ->cat_desc ('text', 0, true) - ->cat_position ('integer', 0, true, 0) - ->cat_lft ('integer', 0, true) - ->cat_rgt ('integer', 0, true) - - ->primary('pk_category','cat_id') - - ->unique('uk_cat_url','cat_url','blog_id') - ; - -$_s->session - ->ses_id ('varchar', 40, false) - ->ses_time ('integer', 0, false, 0) - ->ses_start ('integer', 0, false, 0) - ->ses_value ('text', 0, false) - - ->primary('pk_session','ses_id') - ; - -$_s->setting - ->setting_id ('varchar', 255, false) - ->blog_id ('varchar', 32, true) - ->setting_ns ('varchar', 32, false, "'system'") - ->setting_value ('text', 0, true, null) - ->setting_type ('varchar', 8, false, "'string'") - ->setting_label ('text', 0, true) - - ->unique('uk_setting','setting_ns','setting_id','blog_id') - ; - -$_s->user - ->user_id ('varchar', 32, false) - ->user_super ('smallint', 0, true) - ->user_status ('smallint', 0, false, 1) - ->user_pwd ('varchar', 40, false) - ->user_change_pwd ('smallint', 0, false, 0) - ->user_recover_key ('varchar', 32, true, null) - ->user_name ('varchar', 255, true, null) - ->user_firstname ('varchar', 255, true, null) - ->user_displayname ('varchar', 255, true, null) - ->user_email ('varchar', 255, true, null) - ->user_url ('varchar', 255, true, null) - ->user_desc ('text', 0, true) - ->user_default_blog ('varchar', 32, true, null) - ->user_options ('text', 0, true) - ->user_lang ('varchar', 5, true, null) - ->user_tz ('varchar', 128, false, "'UTC'") - ->user_post_status ('smallint', 0, false, -2) - ->user_creadt ('timestamp', 0, false, 'now()') - ->user_upddt ('timestamp', 0, false, 'now()') - - ->primary('pk_user','user_id') - ; - -$_s->permissions - ->user_id ('varchar', 32, false) - ->blog_id ('varchar', 32, false) - ->permissions ('text', 0, true) - - ->primary('pk_permissions','user_id','blog_id') - ; - -$_s->post - ->post_id ('bigint', 0, false) - ->blog_id ('varchar', 32, false) - ->user_id ('varchar', 32, false) - ->cat_id ('bigint', 0, true) - ->post_dt ('timestamp', 0, false, 'now()') - ->post_tz ('varchar', 128, false, "'UTC'") - ->post_creadt ('timestamp', 0, false, 'now()') - ->post_upddt ('timestamp', 0, false, 'now()') - ->post_password ('varchar', 32, true, null) - ->post_type ('varchar', 32, false, "'post'") - ->post_format ('varchar', 32, false, "'xhtml'") - ->post_url ('varchar', 255, false) - ->post_lang ('varchar', 5, true, null) - ->post_title ('varchar', 255, true, null) - ->post_excerpt ('text', 0, true, null) - ->post_excerpt_xhtml ('text', 0, true, null) - ->post_content ('text', 0, true, null) - ->post_content_xhtml ('text', 0, false) - ->post_notes ('text', 0, true, null) - ->post_meta ('text', 0, true, null) - ->post_words ('text', 0, true, null) - ->post_status ('smallint', 0, false, 0) - ->post_selected ('smallint', 0, false, 0) - ->post_position ('integer', 0, false, 0) - ->post_open_comment ('smallint', 0, false, 0) - ->post_open_tb ('smallint', 0, false, 0) - ->nb_comment ('integer', 0, false, 0) - ->nb_trackback ('integer', 0, false, 0) - - ->primary('pk_post','post_id') - - ->unique('uk_post_url','post_url','post_type','blog_id') - ; - -$_s->media - ->media_id ('bigint', 0, false) - ->user_id ('varchar', 32, false) - ->media_path ('varchar', 255, false) - ->media_title ('varchar', 255, false) - ->media_file ('varchar', 255, false) - ->media_dir ('varchar', 255, false, "'.'") - ->media_meta ('text', 0, true, null) - ->media_dt ('timestamp', 0, false, 'now()') - ->media_creadt ('timestamp', 0, false, 'now()') - ->media_upddt ('timestamp', 0, false, 'now()') - ->media_private ('smallint', 0, false, 0) - - ->primary('pk_media','media_id') - ; - -$_s->post_media - ->media_id ('bigint', 0, false) - ->post_id ('bigint', 0, false) - ->link_type ('varchar', 32, false, "'attachment'") - - ->primary('pk_post_media','media_id','post_id','link_type') - ; - -$_s->log - ->log_id ('bigint', 0, false) - ->user_id ('varchar', 32, true) - ->blog_id ('varchar', 32, true) - ->log_table ('varchar', 255, false) - ->log_dt ('timestamp', 0, false, 'now()') - ->log_ip ('varchar', 39, false) - ->log_msg ('varchar', 255, false) - - ->primary('pk_log','log_id') - ; - -$_s->version - ->module ('varchar', 64, false) - ->version ('varchar', 32, false) - - ->primary('pk_version','module') - ; - -$_s->ping - ->post_id ('bigint', 0, false) - ->ping_url ('varchar', 255, false) - ->ping_dt ('timestamp', 0, false, 'now()') - - ->primary('pk_ping','post_id','ping_url') - ; - -$_s->comment - ->comment_id ('bigint', 0, false) - ->post_id ('bigint', 0, false) - ->comment_dt ('timestamp', 0, false, 'now()') - ->comment_tz ('varchar', 128, false, "'UTC'") - ->comment_upddt ('timestamp', 0, false, 'now()') - ->comment_author ('varchar', 255, true, null) - ->comment_email ('varchar', 255, true, null) - ->comment_site ('varchar', 255, true, null) - ->comment_content ('text', 0, true) - ->comment_words ('text', 0, true, null) - ->comment_ip ('varchar', 39, true, null) - ->comment_status ('smallint', 0, true, 0) - ->comment_spam_status ('varchar', 128, true, 0) - ->comment_spam_filter ('varchar', 32, true, null) - ->comment_trackback ('smallint', 0, false, 0) - - ->primary('pk_comment','comment_id') - ; - -$_s->meta - ->meta_id ('varchar', 255, false) - ->meta_type ('varchar', 64, false) - ->post_id ('bigint', 0, false) - - ->primary('pk_meta','meta_id','meta_type','post_id') - ; - -$_s->pref - ->pref_id ('varchar', 255, false) - ->user_id ('varchar', 32, true) - ->pref_ws ('varchar', 32, false, "'system'") - ->pref_value ('text', 0, true, null) - ->pref_type ('varchar', 8, false, "'string'") - ->pref_label ('text', 0, true) - - ->unique('uk_pref','pref_ws','pref_id','user_id') - ; - -/* References indexes --------------------------------------------------------- */ -$_s->category->index ('idx_category_blog_id', 'btree', 'blog_id'); -$_s->category->index ('idx_category_cat_lft_blog_id', 'btree', 'blog_id', 'cat_lft'); -$_s->category->index ('idx_category_cat_rgt_blog_id', 'btree', 'blog_id', 'cat_rgt'); -$_s->setting->index ('idx_setting_blog_id', 'btree', 'blog_id'); -$_s->user->index ('idx_user_user_default_blog', 'btree', 'user_default_blog'); -$_s->permissions->index ('idx_permissions_blog_id', 'btree', 'blog_id'); -$_s->post->index ('idx_post_cat_id', 'btree', 'cat_id'); -$_s->post->index ('idx_post_user_id', 'btree', 'user_id'); -$_s->post->index ('idx_post_blog_id', 'btree', 'blog_id'); -$_s->media->index ('idx_media_user_id', 'btree', 'user_id'); -$_s->post_media->index ('idx_post_media_post_id', 'btree', 'post_id'); -$_s->post_media->index ('idx_post_media_media_id', 'btree', 'media_id'); -$_s->log->index ('idx_log_user_id', 'btree', 'user_id'); -$_s->comment->index ('idx_comment_post_id', 'btree', 'post_id'); -$_s->meta->index ('idx_meta_post_id', 'btree','post_id'); -$_s->meta->index ('idx_meta_meta_type', 'btree','meta_type'); -$_s->pref->index ('idx_pref_user_id', 'btree', 'user_id'); - -/* Performance indexes --------------------------------------------------------- */ -$_s->comment->index ('idx_comment_post_id_dt_status', 'btree', 'post_id', 'comment_dt', 'comment_status'); -$_s->post->index ('idx_post_post_dt', 'btree', 'post_dt'); -$_s->post->index ('idx_post_post_dt_post_id', 'btree', 'post_dt','post_id'); -$_s->post->index ('idx_blog_post_post_dt_post_id', 'btree', 'blog_id','post_dt','post_id'); -$_s->post->index ('idx_blog_post_post_status', 'btree', 'blog_id','post_status'); -$_s->blog->index ('idx_blog_blog_upddt', 'btree', 'blog_upddt'); -$_s->user->index ('idx_user_user_super', 'btree', 'user_super'); - -/* Foreign keys --------------------------------------------------------- */ -$_s->category->reference('fk_category_blog','blog_id','blog','blog_id','cascade','cascade'); -$_s->setting->reference('fk_setting_blog','blog_id','blog','blog_id','cascade','cascade'); -$_s->user->reference('fk_user_default_blog','user_default_blog','blog','blog_id','cascade','set null'); -$_s->permissions->reference('fk_permissions_blog','blog_id','blog','blog_id','cascade','cascade'); -$_s->permissions->reference('fk_permissions_user','user_id','user','user_id','cascade','cascade'); -$_s->post->reference('fk_post_category','cat_id','category','cat_id','cascade','set null'); -$_s->post->reference('fk_post_user','user_id','user','user_id','cascade','cascade'); -$_s->post->reference('fk_post_blog','blog_id','blog','blog_id','cascade','cascade'); -$_s->media->reference('fk_media_user','user_id','user','user_id','cascade','cascade'); -$_s->post_media->reference('fk_media','media_id','media','media_id','cascade','cascade'); -$_s->post_media->reference('fk_media_post','post_id','post','post_id','cascade','cascade'); -$_s->ping->reference('fk_ping_post','post_id','post','post_id','cascade','cascade'); -$_s->comment->reference('fk_comment_post','post_id','post','post_id','cascade','cascade'); -$_s->log->reference('fk_log_blog','blog_id','blog','blog_id','cascade','set null'); -$_s->meta->reference('fk_meta_post','post_id','post','post_id','cascade','cascade'); -$_s->pref->reference('fk_pref_user','user_id','user','user_id','cascade','cascade'); - -/* PostgreSQL specific indexes --------------------------------------------------------- */ -if ($_s->driver() == 'pgsql') -{ - $_s->setting->index ('idx_setting_blog_id_null', 'btree', '(blog_id IS NULL)'); - $_s->media->index ('idx_media_media_path', 'btree', 'media_path', 'media_dir'); - $_s->pref->index ('idx_pref_user_id_null', 'btree', '(user_id IS NULL)'); -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/dbschema/upgrade-cli.php b/v2/dotclear/inc/dbschema/upgrade-cli.php deleted file mode 100644 index 6beaeea..0000000 --- a/v2/dotclear/inc/dbschema/upgrade-cli.php +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env php -con->begin(); - try { - $changes = dotclearUpgrade($core); - } catch (Exception $e) { - $core->con->rollback(); - throw $e; - } - $core->con->commit(); - echo 'Upgrade process successfully completed ('.$changes."). \n"; - exit(0); -} -catch (Exception $e) -{ - echo $e->getMessage()."\n"; - exit(1); -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/dbschema/upgrade.php b/v2/dotclear/inc/dbschema/upgrade.php deleted file mode 100644 index fc9213b..0000000 --- a/v2/dotclear/inc/dbschema/upgrade.php +++ /dev/null @@ -1,331 +0,0 @@ -getVersion('core'); - - if ($version === null) { - return false; - } - - if (version_compare($version,DC_VERSION,'<') == 1 || strpos(DC_VERSION,'dev')) - { - try - { - if ($core->con->driver() == 'sqlite') { - throw new Exception(__('SQLite Database Schema cannot be upgraded.')); - } - - # Database upgrade - $_s = new dbStruct($core->con,$core->prefix); - require dirname(__FILE__).'/db-schema.php'; - - $si = new dbStruct($core->con,$core->prefix); - $changes = $si->synchronize($_s); - - /* Some other upgrades - ------------------------------------ */ - # Populate media_dir field (since 2.0-beta3.3) - if (version_compare($version,'2.0-beta3.3','<')) - { - $strReq = 'SELECT media_id, media_file FROM '.$core->prefix.'media '; - $rs_m = $core->con->select($strReq); - while($rs_m->fetch()) { - $cur = $core->con->openCursor($core->prefix.'media'); - $cur->media_dir = dirname($rs_m->media_file); - $cur->update('WHERE media_id = '.(integer) $rs_m->media_id); - } - } - - if (version_compare($version,'2.0-beta7.3','<')) - { - # Blowup becomes default theme - $strReq = 'UPDATE '.$core->prefix.'setting '. - "SET setting_value = '%s' ". - "WHERE setting_id = 'theme' ". - "AND setting_value = '%s' ". - 'AND blog_id IS NOT NULL '; - $core->con->execute(sprintf($strReq,'blueSilence','default')); - $core->con->execute(sprintf($strReq,'default','blowup')); - } - - if (version_compare($version,'2.1-alpha2-r2383','<')) - { - $schema = dbSchema::init($core->con); - $schema->dropUnique($core->prefix.'category',$core->prefix.'uk_cat_title'); - - # Reindex categories - $rs = $core->con->select( - 'SELECT cat_id, cat_title, blog_id '. - 'FROM '.$core->prefix.'category '. - 'ORDER BY blog_id ASC , cat_position ASC ' - ); - $cat_blog = $rs->blog_id; - $i = 2; - while ($rs->fetch()) { - if ($cat_blog != $rs->blog_id) { - $i = 2; - } - $core->con->execute( - 'UPDATE '.$core->prefix.'category SET ' - .'cat_lft = '.($i++).', cat_rgt = '.($i++).' '. - 'WHERE cat_id = '.(integer) $rs->cat_id - ); - $cat_blog = $rs->blog_id; - } - } - - if (version_compare($version,'2.1.6','<=')) - { - # ie7js has been upgraded - $ie7files = array ( - 'ie7-base64.php ', - 'ie7-content.htc', - 'ie7-core.js', - 'ie7-css2-selectors.js', - 'ie7-css3-selectors.js', - 'ie7-css-strict.js', - 'ie7-dhtml.js', - 'ie7-dynamic-attributes.js', - 'ie7-fixed.js', - 'ie7-graphics.js', - 'ie7-html4.js', - 'ie7-ie5.js', - 'ie7-layout.js', - 'ie7-load.htc', - 'ie7-object.htc', - 'ie7-overflow.js', - 'ie7-quirks.js', - 'ie7-server.css', - 'ie7-standard-p.js', - 'ie7-xml-extras.js' - ); - foreach ($ie7files as $f) { - @unlink(DC_ROOT.'/admin/js/ie7/'.$f); - } - } - - if (version_compare($version,'2.2-alpha1-r3043','<')) - { - # metadata has been integrated to the core. - $core->plugins->loadModules(DC_PLUGINS_ROOT); - if ($core->plugins->moduleExists('metadata')) { - $core->plugins->deleteModule('metadata'); - } - - # Tags template class has been renamed - $sqlstr = - 'SELECT blog_id, setting_id, setting_value '. - 'FROM '.$core->prefix.'setting '. - 'WHERE (setting_id = \'widgets_nav\' OR setting_id = \'widgets_extra\') '. - 'AND setting_ns = \'widgets\';'; - $rs = $core->con->select($sqlstr); - while ($rs->fetch()) { - $widgetsettings = base64_decode($rs->setting_value); - $widgetsettings = str_replace ('s:11:"tplMetadata"','s:7:"tplTags"',$widgetsettings); - $cur = $core->con->openCursor($core->prefix.'setting'); - $cur->setting_value = base64_encode($widgetsettings); - $sqlstr = 'WHERE setting_id = \''.$rs->setting_id.'\' AND setting_ns = \'widgets\' '. - 'AND blog_id ' . - ($rs->blog_id == NULL ? 'is NULL' : '= \''.$core->con->escape($rs->blog_id).'\''); - $cur->update($sqlstr); - } - } - - if (version_compare($version,'2.3','<')) - { - # Add global favorites - $init_fav = array(); - - $init_fav['new_post'] = array('new_post','New entry','post.php', - 'images/menu/edit.png','images/menu/edit-b.png', - 'usage,contentadmin',null,'menu-new-post'); - $init_fav['posts'] = array('posts','Entries','posts.php', - 'images/menu/entries.png','images/menu/entries-b.png', - 'usage,contentadmin',null,null); - $init_fav['comments'] = array('comments','Comments','comments.php', - 'images/menu/comments.png','images/menu/comments-b.png', - 'usage,contentadmin',null,null); - $init_fav['prefs'] = array('prefs','My preferences','preferences.php', - 'images/menu/user-pref.png','images/menu/user-pref-b.png', - '*',null,null); - $init_fav['blog_pref'] = array('blog_pref','Blog settings','blog_pref.php', - 'images/menu/blog-pref.png','images/menu/blog-pref-b.png', - 'admin',null,null); - $init_fav['blog_theme'] = array('blog_theme','Blog appearance','blog_theme.php', - 'images/menu/themes.png','images/menu/blog-theme-b.png', - 'admin',null,null); - - $init_fav['pages'] = array('pages','Pages','plugin.php?p=pages', - 'index.php?pf=pages/icon.png','index.php?pf=pages/icon-big.png', - 'contentadmin,pages',null,null); - $init_fav['blogroll'] = array('blogroll','Blogroll','plugin.php?p=blogroll', - 'index.php?pf=blogroll/icon-small.png','index.php?pf=blogroll/icon.png', - 'usage,contentadmin',null,null); - - $count = 0; - foreach ($init_fav as $k => $f) { - $t = array('name' => $f[0],'title' => $f[1],'url' => $f[2], 'small-icon' => $f[3], - 'large-icon' => $f[4],'permissions' => $f[5],'id' => $f[6],'class' => $f[7]); - $sqlstr = 'INSERT INTO '.$core->prefix.'pref (pref_id, user_id, pref_ws, pref_value, pref_type, pref_label) VALUES ('. - '\''.sprintf("g%03s",$count).'\',NULL,\'favorites\',\''.serialize($t).'\',\'string\',NULL);'; - $core->con->execute($sqlstr); - $count++; - } - - # A bit of housecleaning for no longer needed files - $remfiles = array ( - 'admin/style/cat-bg.png', - 'admin/style/footer-bg.png', - 'admin/style/head-logo.png', - 'admin/style/tab-bg.png', - 'admin/style/tab-c-l.png', - 'admin/style/tab-c-r.png', - 'admin/style/tab-l-l.png', - 'admin/style/tab-l-r.png', - 'admin/style/tab-n-l.png', - 'admin/style/tab-n-r.png', - 'inc/clearbricks/_common.php', - 'inc/clearbricks/common/lib.crypt.php', - 'inc/clearbricks/common/lib.date.php', - 'inc/clearbricks/common/lib.files.php', - 'inc/clearbricks/common/lib.form.php', - 'inc/clearbricks/common/lib.html.php', - 'inc/clearbricks/common/lib.http.php', - 'inc/clearbricks/common/lib.l10n.php', - 'inc/clearbricks/common/lib.text.php', - 'inc/clearbricks/common/tz.dat', - 'inc/clearbricks/common/_main.php', - 'inc/clearbricks/dblayer/class.cursor.php', - 'inc/clearbricks/dblayer/class.mysql.php', - 'inc/clearbricks/dblayer/class.pgsql.php', - 'inc/clearbricks/dblayer/class.sqlite.php', - 'inc/clearbricks/dblayer/dblayer.php', - 'inc/clearbricks/dbschema/class.dbschema.php', - 'inc/clearbricks/dbschema/class.dbstruct.php', - 'inc/clearbricks/dbschema/class.mysql.dbschema.php', - 'inc/clearbricks/dbschema/class.pgsql.dbschema.php', - 'inc/clearbricks/dbschema/class.sqlite.dbschema.php', - 'inc/clearbricks/diff/lib.diff.php', - 'inc/clearbricks/diff/lib.unified.diff.php', - 'inc/clearbricks/filemanager/class.filemanager.php', - 'inc/clearbricks/html.filter/class.html.filter.php', - 'inc/clearbricks/html.validator/class.html.validator.php', - 'inc/clearbricks/image/class.image.meta.php', - 'inc/clearbricks/image/class.image.tools.php', - 'inc/clearbricks/mail/class.mail.php', - 'inc/clearbricks/mail/class.socket.mail.php', - 'inc/clearbricks/net/class.net.socket.php', - 'inc/clearbricks/net.http/class.net.http.php', - 'inc/clearbricks/net.http.feed/class.feed.parser.php', - 'inc/clearbricks/net.http.feed/class.feed.reader.php', - 'inc/clearbricks/net.xmlrpc/class.net.xmlrpc.php', - 'inc/clearbricks/pager/class.pager.php', - 'inc/clearbricks/rest/class.rest.php', - 'inc/clearbricks/session.db/class.session.db.php', - 'inc/clearbricks/template/class.template.php', - 'inc/clearbricks/text.wiki2xhtml/class.wiki2xhtml.php', - 'inc/clearbricks/url.handler/class.url.handler.php', - 'inc/clearbricks/zip/class.unzip.php', - 'inc/clearbricks/zip/class.zip.php', - 'themes/default/tpl/.htaccess', - 'themes/default/tpl/404.html', - 'themes/default/tpl/archive.html', - 'themes/default/tpl/archive_month.html', - 'themes/default/tpl/category.html', - 'themes/default/tpl/home.html', - 'themes/default/tpl/post.html', - 'themes/default/tpl/search.html', - 'themes/default/tpl/tag.html', - 'themes/default/tpl/tags.html', - 'themes/default/tpl/user_head.html', - 'themes/default/tpl/_flv_player.html', - 'themes/default/tpl/_footer.html', - 'themes/default/tpl/_head.html', - 'themes/default/tpl/_mp3_player.html', - 'themes/default/tpl/_top.html' - ); - $remfolders = array ( - 'inc/clearbricks/common', - 'inc/clearbricks/dblayer', - 'inc/clearbricks/dbschema', - 'inc/clearbricks/diff', - 'inc/clearbricks/filemanager', - 'inc/clearbricks/html.filter', - 'inc/clearbricks/html.validator', - 'inc/clearbricks/image', - 'inc/clearbricks/mail', - 'inc/clearbricks/net', - 'inc/clearbricks/net.http', - 'inc/clearbricks/net.http.feed', - 'inc/clearbricks/net.xmlrpc', - 'inc/clearbricks/pager', - 'inc/clearbricks/rest', - 'inc/clearbricks/session.db', - 'inc/clearbricks/template', - 'inc/clearbricks/text.wiki2xhtml', - 'inc/clearbricks/url.handler', - 'inc/clearbricks/zip', - 'inc/clearbricks', - 'themes/default/tpl' - ); - - foreach ($remfiles as $f) { - @unlink(DC_ROOT.'/'.$f); - } - foreach ($remfolders as $f) { - @rmdir(DC_ROOT.'/'.$f); - } - } - - if (version_compare($version,'2.3.1','<')) - { - # Remove unecessary file - @unlink(DC_ROOT.'/'.'inc/libs/clearbricks/.hgignore'); - } - - if (version_compare($version,'2.4.0','<=')) - { - # setup media_exclusion - $strReq = 'UPDATE '.$core->prefix.'setting '. - "SET setting_value = '/\\.php\$/i' ". - "WHERE setting_id = 'media_exclusion' ". - "AND setting_value = '' "; - $core->con->execute($strReq); - } - - $core->setVersion('core',DC_VERSION); - $core->blogDefaults(); - - # Drop content from session table - $core->con->execute('DELETE FROM '.$core->prefix.'session '); - - # Empty templates cache directory - try { - $core->emptyTemplatesCache(); - } catch (Exception $e) {} - - return $changes; - } - catch (Exception $e) - { - throw new Exception(__('Something went wrong with auto upgrade:'). - ' '.$e->getMessage()); - } - } - - # No upgrade? - return false; -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/digests b/v2/dotclear/inc/digests deleted file mode 100644 index df4b068..0000000 --- a/v2/dotclear/inc/digests +++ /dev/null @@ -1,694 +0,0 @@ -3a1c6cc728dddc258091a601f28a9c12 ./inc/swf/swfupload.swf -362b9537b53c8d3eb363598e5f38fb8b ./inc/swf/player_mp3.swf -9dcb71aec92e94b1b905192412a1f2a5 ./inc/swf/player_flv.swf -d7b28c9c52cf01199f8c9fe230e8b43f ./inc/core/class.dc.media.php -68523099197e276833c84c6c2376bb08 ./inc/core/class.dc.workspace.php -112f70a6b6b4eec61ad405f990b60fbf ./inc/core/class.dc.update.php -cde424b7a01df820e8bb6b0f1d9939d4 ./inc/core/class.dc.log.php -3477103ce812b71a9d38e3cf1feadb3b ./inc/core/class.dc.namespace.php -949e4e5a3746a1ad8de75dbb5a90c35a ./inc/core/class.dc.meta.php -b2aada7c5fa56c7bcf32c6cb3fae59fa ./inc/core/class.dc.categories.php -bb44cb8fbecee45fca2709969b227f85 ./inc/core/class.dc.xmlrpc.php -fad7358243930c7f22df931aba38427c ./inc/core/class.dc.error.php -a3cf40511123ed66a4a14bcf4b79faa4 ./inc/core/class.dc.utils.php -ac779916ef9504dac7771143e1352529 ./inc/core/class.dc.rest.php -6d45dad8e0afba501538e8577c57c62e ./inc/core/class.dc.themes.php -284bfc24af7741ab9439a94e45553f22 ./inc/core/class.dc.auth.php -ac5f58c6a91756d730850e1f0054f0f4 ./inc/core/class.dc.rs.extensions.php -d8b464d462e8c26fdb8314991f030dd6 ./inc/core/class.dc.trackback.php -aaaf612c3c0ba092d99bea8b65882838 ./inc/core/class.dc.settings.php -bc3fdfd02070475f7d0d2dae9d2fef0b ./inc/core/class.dc.postmedia.php -57dbe830b06b44ab46c9d800e5e68abf ./inc/core/class.dc.prefs.php -ddcf7b8ae49896902f78012fc502f765 ./inc/core/class.dc.blog.php -6a959c862a9cdba82da5ba3b73059474 ./inc/core/class.dc.modules.php -05941079cd9db9368c3debd740a85217 ./inc/core/class.dc.core.php -cb95b315558ebcb254249210637abe4b ./inc/libs/clearbricks/ext/incutio.ixr_library.php -d867d4ebc95bf8cbf8b196925c4100fc ./inc/libs/clearbricks/net/class.net.socket.php -1b89f622435faa7a75fa58a1aca3d54d ./inc/libs/clearbricks/zip/class.unzip.php -dd4bebcf0c65f78f07f2c831c1d26aa3 ./inc/libs/clearbricks/zip/class.zip.php -a0439fc6efcb19e17cd01c8530ada840 ./inc/libs/clearbricks/diff/lib.tidy.diff.php -f770aaef9206d211e158c4e956064a04 ./inc/libs/clearbricks/diff/lib.diff.php -2edbef60bcab048afb2c250e59c082df ./inc/libs/clearbricks/mail/class.socket.mail.php -4c5c63f2bb1489e3dc3bfc534f63bcc8 ./inc/libs/clearbricks/mail/class.mail.php -c1920efdf8daa2fa28db711391763e95 ./inc/libs/clearbricks/rest/class.rest.php -7dabf49811c54cd7e2e00a755a95e2da ./inc/libs/clearbricks/dblayer/class.pgsql.php -1ba018c7314f5e38484a516a9e6efbf0 ./inc/libs/clearbricks/dblayer/class.mysql.php -7ee9856ad3e4fced1869b9067b7da3ae ./inc/libs/clearbricks/dblayer/class.sqlite.php -2e3c38caefed1891cc9c268060e88a32 ./inc/libs/clearbricks/dblayer/dblayer.php -ffe21c976b615f671ffc80430ec1dfe7 ./inc/libs/clearbricks/dblayer/class.cursor.php -e7b55e965efccd72eeddb344c085156c ./inc/libs/clearbricks/dblayer/class.mysqli.php -e94f8b559d0a6d3786332bb8b5740dd1 ./inc/libs/clearbricks/html.validator/class.html.validator.php -f2940f553ad376554d9fc6df6954f1ff ./inc/libs/clearbricks/html.filter/class.html.filter.php -14d99509858d7dc753c23b5c62b80e7e ./inc/libs/clearbricks/Makefile -f2813d658120f149b4e03613df0cd8c0 ./inc/libs/clearbricks/image/class.image.tools.php -dea8c1d155c6d3cf6071bd34d105c47b ./inc/libs/clearbricks/image/class.image.meta.php -c0eb7fef8da37112c003ba0baf93bf53 ./inc/libs/clearbricks/filemanager/class.filemanager.php -bcf108d62c14d6e654b33c998bd3d1fd ./inc/libs/clearbricks/pager/class.pager.php -8a14839615beb6693b6d171852660563 ./inc/libs/clearbricks/net.http.feed/class.feed.parser.php -252485faf7459053c3f7e811493e5f30 ./inc/libs/clearbricks/net.http.feed/class.feed.reader.php -1bf1a1a82994425f03ad9f19e935d3c3 ./inc/libs/clearbricks/README -3fab7ec6ad3bc37b72d19848a3950bd9 ./inc/libs/clearbricks/net.xmlrpc/class.net.xmlrpc.php -f59dc65e4c36b47c0243eae0a60da11f ./inc/libs/clearbricks/dbschema/class.dbschema.php -4dc4e0ccd516f43cc1058f41a32536c1 ./inc/libs/clearbricks/dbschema/class.mysql.dbschema.php -0e6a54cbad7faa258e7cf3bafe95b9ca ./inc/libs/clearbricks/dbschema/class.sqlite.dbschema.php -52cb3d63686c4202f8a3e1c28b72eaf5 ./inc/libs/clearbricks/dbschema/class.dbstruct.php -19a7b770183e06433645ba6a572a6675 ./inc/libs/clearbricks/dbschema/class.mysqli.dbschema.php -3a5afc640ccd46b0eef5bce89fad58b3 ./inc/libs/clearbricks/dbschema/class.pgsql.dbschema.php -5d58ee070707b9344b74c4e95a6d8e2d ./inc/libs/clearbricks/template/class.template.php -dbe26992e25c706eb7ea798e26697401 ./inc/libs/clearbricks/_common.php -b23a438a4183cfd323342b591e88be5f ./inc/libs/clearbricks/url.handler/class.url.handler.php -e969237c3afdcbd0524bfb67ff186c2d ./inc/libs/clearbricks/debian/dirs -a165b0c48efd38c3c2725a282922c6f1 ./inc/libs/clearbricks/debian/docs -09741ea306c67f178df496044fd7d3bf ./inc/libs/clearbricks/debian/mkdcl.php -b0bd77efcf7f3ba705ca57fccd3479f7 ./inc/libs/clearbricks/debian/control -30ecf234a276835fe14c19f5a54dcbf8 ./inc/libs/clearbricks/debian/rules -771304f18d0aca7eb424be239480264e ./inc/libs/clearbricks/debian/changelog -48a24b70a0b376535542b996af517398 ./inc/libs/clearbricks/debian/compat -33c1cd6baec7ef84b905dd6fb463b871 ./inc/libs/clearbricks/debian/copyright -057af760bd008ca95cac177c5137f54d ./inc/libs/clearbricks/common/lib.form.php -b55f8d044a595684bab9423bf26cb76e ./inc/libs/clearbricks/common/lib.text.php -53f8e535da21c1f1ec0246a643d01993 ./inc/libs/clearbricks/common/tz.dat -1dcce11946a8134fe2c42680102714b2 ./inc/libs/clearbricks/common/lib.l10n.php -64979fdd95ee50b64ced5588b815cd4b ./inc/libs/clearbricks/common/lib.crypt.php -a4f3f32c32831d8585f64d160c75e144 ./inc/libs/clearbricks/common/_main.php -570ad3fc526ff54e2f76eaef8121af2d ./inc/libs/clearbricks/common/lib.date.php -a611602796b3ad3bf56dcbec23751f61 ./inc/libs/clearbricks/common/lib.html.php -bb0f2a13c46323c8aa763d4b65a849f5 ./inc/libs/clearbricks/common/lib.files.php -1e89873bfe887d73fb70a46cfea1bb66 ./inc/libs/clearbricks/common/lib.http.php -9bb79146a6ee39380f1060d0300a3702 ./inc/libs/clearbricks/net.http/class.net.http.php -084a7d997891a5a676128d571ce54e24 ./inc/libs/clearbricks/net.nntp/class.net.nntp.php -f590c41a10e8115ce381b3ae03ab8bea ./inc/libs/clearbricks/net.nntp/class.nntp.message.php -cd276c4686d956fea1fd9a56096726ba ./inc/libs/clearbricks/text.wiki2xhtml/class.wiki2xhtml.php -e75095764485b34dc522b6db59eae353 ./inc/libs/clearbricks/xmlsql/class.xmlsql.php -ca58e658d7976706bcb3bb885f229034 ./inc/libs/clearbricks/session.db/class.session.db.php -c3a41bf94dc11a1387a8f2d606111e64 ./inc/libs/clearbricks/mail.mime/class.mime.message.php -8bced09e0fb7e6fb368a62a7b2423bc3 ./inc/libs/clearbricks/mail.convert/class.mail.convert.php -d3b27e15bf5eafe2da90669e483ac645 ./inc/config.php.in -d8b13db427df79bf42abb6b11bf96c3d ./inc/admin/lib.pager.php -33e352171f3847b1545d0815e7865f53 ./inc/admin/prepend.php -f56f8e6149de6f8bef76d0b44a120826 ./inc/admin/class.dc.menu.php -e75011fa626fa363277471c4a16874e5 ./inc/admin/lib.dc.page.php -d067eb2122f08ecf9c70270a16d4c615 ./inc/dbschema/upgrade.php -9420fb50208df6b8ebf3c1430535f327 ./inc/dbschema/upgrade-cli.php -82bdc27069f8bcfe26f1d19d13098207 ./inc/dbschema/db-schema.php -209634bb0238704c4874c35d615ae59e ./inc/.htaccess -75290cb1920955fbde2e83ecdea3c7a6 ./inc/prepend.php -92f8d91038339aef6b6c2800aeffdd00 ./inc/load_plugin_file.php -f042e743a702f88bae04a0c9b4f232bc ./inc/public/lib.tpl.context.php -38032779b49d5297b2911e789e819e75 ./inc/public/prepend.php -c1a30a35f3bdc7282cd5b057a562d60c ./inc/public/lib.urlhandlers.php -2083a978f369df674fd9605344a078fb ./inc/public/rs.extension.php -9b72c7b38e24bcdb1a62b8caad592ef3 ./inc/public/class.dc.template.php -f406a856d0fef5ca16ab1fe5f6780d26 ./inc/public/default-templates/atom.xml -dc797422198ecf55648798926b333e34 ./inc/public/default-templates/404.html -cc388bc96e57726ed1e46a71de72822a ./inc/public/default-templates/rss2.xml -a7006baa75d1c133d57acbe1f559abce ./inc/public/default-templates/rss2.xsl -16bdc8783f0b0b181bca2922afa6707f ./inc/public/default-templates/_head.html -0ee80a5f6349fd4433f163e1ecd762aa ./inc/public/default-templates/category.html -94df989e651b3fab9ae5f889da8957a5 ./inc/public/default-templates/_top.html -252faf814965810e53ceaebca99110b8 ./inc/public/default-templates/rss2-comments.xml -7cbfaee006b71aa9e2ce9ff114bc30cf ./inc/public/default-templates/archive_month.html -4672a386be84c3b8aabe7f0f11eadd1f ./inc/public/default-templates/_footer.html -5e4dcd3dd0dfc2b5434ff4a47258c208 ./inc/public/default-templates/archive.html -5b02984ea641fdfafb3aeaa46d44094b ./inc/public/default-templates/_mp3_player.html -19a49738c54edd08f2551be928d263f1 ./inc/public/default-templates/atom-comments.xml -03a6321d766f1731d343db2aba6dce75 ./inc/public/default-templates/post.html -51c379d5e96b3cfff2410872ab2cdeb4 ./inc/public/default-templates/user_head.html -dbd6a409049296c74a829e3754628a01 ./inc/public/default-templates/password-form.html -89ea9bf9dc901c6f20861c915c410e33 ./inc/public/default-templates/search.html -ec603716f84156a51d557b1d4462ab05 ./inc/public/default-templates/home.html -0a7c11c048ad7c6d9acbb9a1e38c2120 ./inc/public/default-templates/_flv_player.html -d3edd069e027d9c3ad1d32595c66bf31 ./inc/core_error.php -751419260aa954499f7abaabaa882bbe ./LICENSE -2bfd05d14d13567c5d7b38b685e79bd7 ./admin/js/ie7/IE7.js -0da2f7d8d62695d582e1e8bfcb47a581 ./admin/js/ie7/IE8.js -45becbb1ba3486fa9961b9c47614d2a0 ./admin/js/ie7/blank.gif -3e8e99f729bba013ed74b23d442ce467 ./admin/js/ie7/ie7-recalc.js -1085be8f5d5a499858d18feee8d0ef8c ./admin/js/ie7/ie7-squish.js -379dffc9b9ed5ea513204c61057b77b3 ./admin/js/jsToolBar/jsToolBar.js -92c3d043218f868cf339b120dd6d51b7 ./admin/js/jsToolBar/popup_posts.js -fc39a873174acf0443ff17c8c577e929 ./admin/js/jsToolBar/popup_link.js -3446cbe53dada04cdf45882fb7952a77 ./admin/js/jsToolBar/popup_media.js -7e0a3f0bc1d42587db8637ce02838083 ./admin/js/jsToolBar/jsToolBar.dotclear.js -82d06b07d7e72577e99a8715eae90a0f ./admin/js/jsToolBar/jsToolBar.wysiwyg.js -592a3011c4e47a77856ad7df0d136bee ./admin/js/color-picker.js -9396d0f3e3ee1cefb5c2ada58f479a64 ./admin/js/_blog_pref.js -08451c09111e763c2354993025b07a66 ./admin/js/_comment.js -bb5fc73c7465d0e1e630560f39dbcc62 ./admin/js/_post.js -7f7f3ab2d5bcf53486a107df47cd5ba0 ./admin/js/common.js -db1cb95e3ef75253a1d1a31aeffe8daa ./admin/js/prelude.js -e3b5113a5cfed6a1d9dfa72834e5fb0d ./admin/js/_preferences.js -eab2d2bcceded304d2a923bc546869fc ./admin/js/_index.js -44c7923c51c9e8b5185d70078a1652cc ./admin/js/dragsort-tablerows.js -47acaf03194199a8b4421d1ef21532ec ./admin/js/_users.js -cf014d803ae8195a2473b48b1f2c92b6 ./admin/js/_langs.js -a4f58f2e708d54d966341654a1b9710f ./admin/js/filter-controls.js -c3de1b5c946d737887c495a081bc4fa3 ./admin/js/_media.js -d1c92505a8fd0fb4b2be1ccb944628e6 ./admin/js/_blog_theme.js -697881b2c6f4ba506df223db28db3a1c ./admin/js/_preferences-dragdrop.js -334a1345290da857abe41f3807c14967 ./admin/js/date-picker.js -81b61be64f338c2fd40da2bf47d2183e ./admin/js/_categories.js -49e972305f261af8830eac093dbed82f ./admin/js/confirm-close.js -dacda4414ed2d1db6b25ed16bdcc8ee9 ./admin/js/_media_item.js -10b1885ee8c7ad1c439bc3de868d4bb4 ./admin/js/_trackbacks.js -8f76e1f99874c7dd4705c1104625ca18 ./admin/js/jquery/jquery.pageTabs.js -b053c1e03164d2e6f92362ee298e5d0b ./admin/js/jquery/jquery.farbtastic.js -ce7a22089d470d15dc6a061bf7fe3d09 ./admin/js/jquery/jquery.bgFade.js -ca868f7e39985586a856b48b624c96d7 ./admin/js/jquery/jquery-ui-1.8.12.custom.min.js -33440de62785bd447fab76638ffe20cb ./admin/js/jquery/jquery.js -7f5f5bb62524a0ec4be1985031e7e141 ./admin/js/jquery/jquery.modal.js -93e11ef8585fbfa48f6dc595eb17a12c ./admin/js/jquery/jquery.biscuit.js -c9cd2dff00dac4624a45d36f42d9aa58 ./admin/js/jquery/jquery.candyUpload.js -aa314073e0ef73b815959563872f6c2e ./admin/js/_permissions.js -e6c6bad56b68af8402a30099a663ae65 ./admin/js/_posts_list.js -b46e51e327a0bb8f2711f230fc1467b0 ./admin/js/tool-man/dragsort.js -814404153ee1d350adf4bf7d1eae4cf8 ./admin/js/tool-man/core.js -6084f5f1fbcb14b085014ffa06961029 ./admin/js/tool-man/drag.js -02fba17f9a80f43ad07c55f2e092e7de ./admin/js/tool-man/coordinates.js -7d13dc9c59316624c051e6256c86bcb7 ./admin/js/tool-man/events.js -af77cd03cd87c611f1f495d6d29bab44 ./admin/js/tool-man/css.js -87aabde2f9d09bac13b8483e369cca38 ./admin/js/tool-man/cookies.js -3c34805dc9ff1c9863719c85dd804e5e ./admin/js/meta-editor.js -fd92ba025b34df5e3784ae9cca6c4f8d ./admin/js/_permissions_blog.js -eb8ddfafcf6aa8db9f55cd5f10dbe9aa ./admin/js/_comments.js -f0f861db8bed322c14508f592aeef119 ./admin/js/_plugins.js -29698c9e3ac842ca5c30abe9a69b338a ./admin/js/_category.js -d01327e2f55af880a2fb49813e48fb2e ./admin/blogs.php -ec14efc419c67fe3644ff904047b31c3 ./admin/posts_actions.php -fab2ceaf2ae5316dab402161aade8792 ./admin/blog_del.php -c9f5d46227866cadf6ebd3a05f550bd3 ./admin/update.php -ce12a0f1d02169e0e9f10a6ae88fcf82 ./admin/plugins.php -f418b7365dd285d4fca3e4c0435b4313 ./admin/popup_posts.php -a7699758a4d9927b23f8e2a62904e3cd ./admin/style/warning.png -d79076c50110cbdcc4cddf30f4df9873 ./admin/style/jsToolBar/jsToolBar.css -3e0f67a5296128dbe1857c1935f6da47 ./admin/style/jsToolBar/bt_link.png -64cdd7af332808399e65fa0538761c2d ./admin/style/jsToolBar/resize.png -6a388ba1cdeff25c79d540333b96ed27 ./admin/style/jsToolBar/bt_clean.png -a6ae01491523b9335334eea1b98c136f ./admin/style/jsToolBar/bt_img_select.png -828adda895735a8624fd819506078af7 ./admin/style/jsToolBar/bt_br.png -e5aae58c14ca63c366fe02acec03d928 ./admin/style/jsToolBar/bt_em.png -0c7181b5c37930f422fb9e6e7488c1d9 ./admin/style/jsToolBar/bt_img.png -ee7ee162173d1b91896415988e8cd006 ./admin/style/jsToolBar/bt_bquote.png -47c71f6ee3cf31296ff1f18348748754 ./admin/style/jsToolBar/bt_ins.png -e9f233c1c309337911b5b03fb9e1dbc4 ./admin/style/jsToolBar/bt_pre.png -22ad5189d9d94f9a24af5311ad06805b ./admin/style/jsToolBar/bt_paragraph.png -2ca06c1c3e80079ea378fe061e4cfdc3 ./admin/style/jsToolBar/bt_code.png -78d7a07a669055db5c3966edc31c94e4 ./admin/style/jsToolBar/bt_ol.png -a3a4c43798d387734737ed81a65eb7f9 ./admin/style/jsToolBar/bt_quote.png -94a2fd910832b31e18b4bb4e63f9aa79 ./admin/style/jsToolBar/bt_strong.png -e7e674fbd3612010f154475c449b3b79 ./admin/style/jsToolBar/bt_del.png -e43a1380a8ae14425ca9ce400dd336b7 ./admin/style/jsToolBar/bt_post.png -39f73a440303baed6920a769370091da ./admin/style/jsToolBar/bt_ul.png -5d2a95c6b6817027b7cc7413bf664991 ./admin/style/candyUpload/style.css -caa11e523e5a3ed38d90480bed5d5a73 ./admin/style/candyUpload/loader.png -0f4c059f8aceadfb2dd932e7a02ce22a ./admin/style/candyUpload/cancel.png -35a8ca87a425e1058f0f93d92a842e9a ./admin/style/msg-error.png -c85f133d357cdc134155416f5be2a5db ./admin/style/install.css -d8d0578b583b3879b3ee697fb4068648 ./admin/style/modal/modal.css -14a0936bd54fd18c22b5e7fb86ba26a3 ./admin/style/modal/loader.gif -4134330cedefac4a9075a7756ca496bd ./admin/style/modal/close.png -57d696efde30fe02acd30b46d87e930d ./admin/style/package.png -40be108b0a31181f7975eac193908b12 ./admin/style/default.css -2f7d618efdcae3859b36bbfa38fc75bf ./admin/style/page-bg.png -9c3e7b71f42e2d6c64b52fe7d46d5f16 ./admin/style/grid.png -45b045808b62976c5bfb7a701db2830b ./admin/style/dc_logo.png -003b8b1d1103cff11a707c5f80861a75 ./admin/style/default-rtl.css -5a7ae1d8c8b2343a9e5a4aebf4234392 ./admin/style/farbtastic/marker.png -2b6d304868ff398c17252b7b0a0414c4 ./admin/style/farbtastic/wheel.png -fbbd113ed6e6cf4adcab0f720b3b9b9c ./admin/style/farbtastic/farbtastic.css -c6dc921c0d6f2197793d9174b4267ca0 ./admin/style/farbtastic/mask.png -0716421681913b2cda5821b32b3360d4 ./admin/style/dotclear-logo2.png -57688345aa080a9a391efc40608ce98b ./admin/style/dotclear-logo.png -bed217c0f0423816fdfdae5f136a2aea ./admin/style/msg-std.png -b4459cd68df8a0ea2a5c12e6c655c71d ./admin/style/dc_logo_small.png -82244e6c9f6b8f3cefa0545468f40d65 ./admin/style/drag.png -a9d4db4f30e21559acf9fd825d72db27 ./admin/style/dc_bg.png -6fbf1d5cf4953ace09e5041a53d477ec ./admin/style/head-bg.png -e179e6f8a290c99a5ee77fca9c204863 ./admin/style/add.png -5625c7bc5997742b45925105fd9a4303 ./admin/style/magnifier.png -b8abd059ee85b073a27d38bba8998786 ./admin/style/iesucks.css -daa77b9f2795fce1510dd2d6b82e722a ./admin/style/info.png -37e482ed14e13a1a8a141deb0eea81f2 ./admin/style/date-picker.css -cc08cffba493e1114cc6709a7aadd2e5 ./admin/style/install/note.png -1141b61e9cea3d25ffebed4d4a2d6676 ./admin/style/install/process_warning.png -dff65577ffa614149552e2bd25800f76 ./admin/style/install/important.png -0716421681913b2cda5821b32b3360d4 ./admin/style/install/w-logo.png -5b036194b0772a23e73c88538c43737c ./admin/xmlrpc.php -cdede2ce1df3ba2299f00aeb2604a7cb ./admin/auth.php -666eb56b637e82e178a8a6bdfc2886b3 ./admin/post.php -b8d6dda0d3db7b147fe589151a1a4526 ./admin/permissions.php -860965f34e820c1ca4640b5ef9f92cae ./admin/blog.php -27619cd17f652e7d806586b6ccbbd3e2 ./admin/plugin.php -92f95f82fe97b88ccd42bd330c6844d1 ./admin/media.php -d43b3bbaf093f0e17f05269ee1d594e4 ./admin/media_item.php -f0adbe078cc42ac3ec356b1fa2cd67cd ./admin/images/plus.png -26500215140d1b0c0b947138316f00de ./admin/images/menu/blogs-b.png -3fc65469ad83784c3e11a0b0f5610fe1 ./admin/images/menu/edit.png -7b4259eae3ef9ce3c8e73cda28cdb848 ./admin/images/menu/blogs.png -ac90182e4a2ddbfec7308fd8e0e9f97f ./admin/images/menu/dashboard.png -098c84b3f910856868c291551092cdab ./admin/images/menu/favorite-b.png -6848117e186492db3baf129b00bda76a ./admin/images/menu/categories-b.png -7562fc3201a20137ca93b41a17ada1ab ./admin/images/menu/langs-b.png -accef94acd8231f145c05ad518f31953 ./admin/images/menu/update.png -76943b18b4e6486a549554a658e611c9 ./admin/images/menu/plugins.png -6c4b15fe4dec48c1f28e33706de6dae9 ./admin/images/menu/blog-theme-b.png -8aaa4c8fe97ac9c53b5e886a3bbfb971 ./admin/images/menu/favorite.png -b51b37a5d3ff0c0cb35414dea1b439b2 ./admin/images/menu/blog-pref.png -dc8df030063d8e45ad34b001274abf5b ./admin/images/menu/themes.png -a77a1960486bface242d029c7aa087d8 ./admin/images/menu/add_to_favorites.png -78a765be907724d7401647d808ca50bd ./admin/images/menu/search-b.png -304e702c190e373ab168f3e02a39bafb ./admin/images/menu/plugins-b.png -42af2e3a92f15d62697fb53fef595002 ./admin/images/menu/media.png -e724854eebb8a8050ab2948d374c8794 ./admin/images/menu/user-pref.png -223a95d65cf6eb77b3864eab41b0c205 ./admin/images/menu/entries.png -11dfd2df494996acaadd5144ef1b5f82 ./admin/images/menu/comments.png -3cdb945ceec71cece4535938d7e7b4da ./admin/images/menu/users-b.png -b88d849500404c5e1dd5e84d2cbfbdd7 ./admin/images/menu/media-b.png -6b05a6e5e8d6a802b596941de43d16b7 ./admin/images/menu/search.png -feab8bf7358c357f4cd537820fe62490 ./admin/images/menu/user-pref-b.png -1cf0eda014601a2de0ca6e2d65ce2e84 ./admin/images/menu/blog-pref-b.png -d5dcc36f898a1d7e114ee86c9706d32e ./admin/images/menu/entries-b.png -81b7b4adc7aa2f0369cf9fc17410b13d ./admin/images/menu/users.png -d7f03e538273c00dd945234ced5bc3e6 ./admin/images/menu/edit-b.png -1b080e9e7b5ddedd790423b661403a41 ./admin/images/menu/comments-b.png -b26e639aefd49983c1e519077f4982a7 ./admin/images/menu/categories.png -194eed635664d675736700fd51fb282d ./admin/images/menu/langs.png -86583b1fd690088cd78f91983aaf8575 ./admin/images/dotclear_pw.png -f8e8e34c81702d8cce1de96d628fcae3 ./admin/images/favicon.png -9f5f27a72f4c95790de10fb8acf75b37 ./admin/images/superadmin.png -50bf28433834e6d2f6f46d1b84421d2b ./admin/images/media/video.png -8e35fccfaa42070297cef723428183ba ./admin/images/media/blank.png -7e619d7762995a3c3ef9edfb3b6b4c92 ./admin/images/media/spreadsheet.png -c2b2d27914d57241d3d0e96a66ede1ca ./admin/images/media/package.png -487708f4b8f6fa0ecff78f26ded3806a ./admin/images/media/html.png -90864902424cf16cd85d2a6e54fe0272 ./admin/images/media/document.png -be57e76497791a2540d91f9149f38a6b ./admin/images/media/audio.png -6884619665a6a6a91996236dd26ad2fc ./admin/images/media/text.png -27013d32dfc30e5512ff184c2869bb3f ./admin/images/media/image.png -34f401c85ee26edfffb2c317ae2b1b54 ./admin/images/media/presentation.png -c6db076f177ccaf062d017c5db228085 ./admin/images/media/folder.png -4d8611170bd9173aa87cfbd4878ac588 ./admin/images/media/executable.png -61334007afc261a93d677bd3460ee36d ./admin/images/trash.png -21d31ef6dad45bbdd32bbe358169952b ./admin/images/selected.png -e7c196b87a5e022549b71e6f4e811d18 ./admin/images/menu_on.png -a2e73061f728066f2305c6aa5698687e ./admin/images/outgoing-blue.png -c3380a4422bb8a7e8756a6a167ddea22 ./admin/images/check-off.png -87e4a16e12e1e0761687d0cfdd7baacc ./admin/images/admin.png -355fbab6dc8dc6c779ba687bcc187fd7 ./admin/images/scheduled.png -913ff19cacf4d03fc835b4255c236c79 ./admin/images/picker.png -3ee61de988743c744af9b9224d35284b ./admin/images/minus.png -b742e51edacbf99451e12c5bb01531b0 ./admin/images/junk.png -f86e9d6679d8b27334bbb8df82b1c7d9 ./admin/images/menu_off.png -9b1093546f036f5e51069ffbef0ea7b8 ./admin/images/add.png -45c5ccf8249c5ec4800b9e0c3d34b7ca ./admin/images/check-wrn.png -02437c955382fa358b357632557a6f4e ./admin/images/attach.png -dfab5698cd3abbb30538331690413d30 ./admin/images/locker.png -c40960ead0cf335209336463cb1b37be ./admin/images/check-on.png -2b544dcc4b961ad990d0c27cce909585 ./admin/images/outgoing.png -07181f8c47f322410aea182338b031b3 ./admin/images/date-picker.png -fc080751a6ae822596cbdb54c97c4fd6 ./admin/images/edit-mini.png -93d023c510f85f951839c251814291ab ./admin/images/noscreenshot.png -1eaa6675e93550119cfee871b3fc5746 ./admin/images/logout.png -8776864d4c4505e2cc4040a418497bc9 ./admin/images/help.png -5df7e9507b256844f028f01d0716b203 ./admin/index.php -c41d2db8c410a3dfddda37a52ab14bc4 ./admin/permissions_blog.php -87c7183813aacc1661e19ec8ec601ec1 ./admin/posts.php -4ca3e3050137b781b379803b6ff8690d ./admin/comments.php -da4e5249ad11ec5f17019dc152bc8180 ./admin/popup_link.php -220ab6d14dffd7be6b77867669641327 ./admin/services.php -7e02c709544983f9a44a36d4bc853240 ./admin/search.php -80bb7019bb3ed2127bdff6545412ddbe ./admin/blog_theme.php -9b8715ae3022f2f771587bae2f7e5134 ./admin/comments_actions.php -d70e027e2672a6e22d2d84b3aabbdf63 ./admin/comment.php -12cc226c90afdea93ad0cd2057672c96 ./admin/user.php -711578a896d6ef538da5825511caa738 ./admin/dispatcher.php -04030cedae46cd04dfd74498c567bf3e ./admin/preferences.php -064eae06875333c399a798494f8e2e71 ./admin/users.php -7ec8ad91b731edcd5b5bec16f1e900b1 ./admin/install/index.php -60975a951783e28e7c4c86402a05f385 ./admin/install/check.php -64df84db3fb2189eef4b1852f58e6e17 ./admin/install/wizard.php -ed72c46169a159eff4e450c186f7bb40 ./admin/category.php -c67c2b5a1c0ad19020cc7a50c83284f7 ./admin/post_media.php -87e3874b7d8105f426d6ef7462f5f027 ./admin/blog_pref.php -39aa7e09b45b8333a8d5d8a3e3a79c22 ./admin/categories.php -ddfc2edef1e53ebc956f0d3dfd656b87 ./admin/trackbacks.php -6b9e293e1beb9a8e706c83822c9f381e ./admin/langs.php -af0e07462505de19ad85e6cd53906846 ./README -312530ddb6b46618848b0e34ebc0422c ./locales/en/date.po -fc51ec4fe28cadc83913b369fc77d65a ./locales/en/help/comments.html -018f76172ae892ae4810db02314b86fa ./locales/en/help/blog_pref.html -c25adc9f42a14527b538cb58554b1ad8 ./locales/en/help/media.html -5c9c46fede94f83bef0828264f18f596 ./locales/en/help/post.html -efc9a224297e6902a5f0efa196bc7c6f ./locales/en/help/wiki.html -a2c6ee6914d93c0f551ced12e55970f7 ./locales/en/help/categories.html -684790773f1f459104e1daf3e50fc94c ./locales/en/help/user_pref.html -649bda3d42114c8dfea967f005d304a1 ./locales/en/help/user.html -09352986157f34af6730061ce06bd8cd ./locales/en/help/posts.html -4c12ea0a98c5cd138d084ca0c91117f6 ./locales/en/public.lang.php -5a3e3ece8c26cfab6fb0a087f5a9d73a ./locales/en/date.lang.php -ccadbcf1eb0c0618b7176476b2869f5a ./locales/en/main.po -2fa421ee2b30c8d8d68682f09237a76c ./locales/en/plugins.po -ec25ff7f135839cd1cf3b1773a7b07bf ./locales/en/plugins.lang.php -166d2195addbd38c01c70151246b581c ./locales/en/resources.php -00991b192802456807b67cc5445abb82 ./locales/en/public.po -4c12ea0a98c5cd138d084ca0c91117f6 ./locales/en/main.lang.php -0b6a3799a53022c6140bec6b7fc5b2f7 ./locales/fr/date.po -0474ebce1d0524825e938908d4afa44f ./locales/fr/help/core_media.html -fdad4d76a79dabef426adbda07ad510a ./locales/fr/help/core_user_pref.html -a9f897d204180419de34dcfdc9b18f76 ./locales/fr/help/themeEditor.html -2bc53951d2998ab67979a5b1ea4f3df9 ./locales/fr/help/core_comments.html -996bbf4b20290530884d25844b1ee32d ./locales/fr/help/blowupConfig.html -ad33f702e9d1872395ac85dc8a9ff875 ./locales/fr/help/core_categories.html -6bc717490f197e5e7216b1853bf88b7d ./locales/fr/help/core_post.html -e38f790349f0accca7c63a7f76671c0c ./locales/fr/help/core_posts.html -590e7cdb6a0010defabfae0c5e1554c2 ./locales/fr/help/core_wiki.html -2150b2a08a45668b253ff05c9f74affe ./locales/fr/help/core_user.html -a02aaf58ce0bb12e3b88b828090cd9db ./locales/fr/help/core_blog_pref.html -632b94ebd8e9fa690469adea0b78cf65 ./locales/fr/public.lang.php -59b6966fb7e7945212d0daf6128628dc ./locales/fr/date.lang.php -01ba7f80a86519153e8f7c536ce8a9ee ./locales/fr/main.po -dbba5039396a650c96ee9e73e38f452f ./locales/fr/plugins.po -b85f6046043eecd1402d8201a9ccd2b7 ./locales/fr/plugins.lang.php -bfc28002a0ceb0ce48ca56781875de23 ./locales/fr/resources.php -878cd7e4ad4ec67cc8fd02072d6b1b84 ./locales/fr/public.po -38db3db98dbbe4ce8bedcbf459bb4070 ./locales/fr/main.lang.php -d4ff299dabd4b8334cc7259d0eb65b6e ./locales/README -daec700273b033301fd6c71dc29a19d7 ./index.php -33440de62785bd447fab76638ffe20cb ./themes/default/js/jquery.js -0399de1c63edf55deb1cffa811905d57 ./themes/default/js/jquery.cookie.js -b766b02a8f0e877f56c232dcd9ba736a ./themes/default/js/post.js -a802d1f382c8b22d1e6c6e28ae618498 ./themes/default/img/trackback.png -74eb29efade1edeff692446b5e6f8258 ./themes/default/img/commentmy-b.png -ef130b60877aad5a4cc8d4c5ead17317 ./themes/default/img/commentmy-t.png -f3b1ebaf5a27959228b736f87db11776 ./themes/default/img/page-bg.png -e199613e6ec2cead05b92a6f2c76e2ec ./themes/default/img/comment-b.png -90835fdf81ee294b89674795ee6ed71f ./themes/default/img/tag.png -3f7ae2737f49605199554ccac96dc748 ./themes/default/img/comment-t.png -c85f9d3ea9319236e67db78be1707478 ./themes/default/img/page-b.png -42fa213bf2a5b110afeb7552767700c6 ./themes/default/img/page-t.png -68f80507e1d6123f57c5f25f006a699f ./themes/default/img/feed.png -e4d37aac2d638c4a358a7fd4c76b2789 ./themes/default/img/attach.png -19741777bd991f387b6d01d187f9cacc ./themes/default/img/comment.png -dff6f47c5dcfce7c1a909f015f43a91b ./themes/default/img/body-bg.png -432d016389df9619e39213301f8b58d3 ./themes/default/_define.php -bb7dfb0da518903b3307a28f6c6d3a33 ./themes/default/style.css -acdc336f9249b84310c6bc541d6e66ed ./themes/default/smilies/laugh.png -e8cfd3101dc2a0cdb7a343e1b873a38f ./themes/default/smilies/cry.png -062fe26eb6105ce6bbc0d133b50c4fcc ./themes/default/smilies/confused.png -c8372d57625893f1c06a409cf1fb84d5 ./themes/default/smilies/sad.png -c1fa8d897b82f938e2abada9bfa7c2c1 ./themes/default/smilies/redface.png -f97fc26a57559afec46806aa42083d9c ./themes/default/smilies/eek.png -919a6951304ce994203f86edd3f5d359 ./themes/default/smilies/dizzy.png -5933cf36a8be5147933b6499d589eb01 ./themes/default/smilies/idea.png -d2855d2d68f6467db69219534638f4bb ./themes/default/smilies/exclam.png -93d6fed1604e9e479f65940e52884ac3 ./themes/default/smilies/lol.png -0d16e0502c576f32662ad14dfde3cf53 ./themes/default/smilies/rolleyes.png -18f5ac3609425f10e910e64d5620edda ./themes/default/smilies/cool.png -1808a6c8affe37c094a038dc983b0ffc ./themes/default/smilies/mrgreen.png -d3671aa8ccb54bbc9b89a83ba202b626 ./themes/default/smilies/smilies.txt -51b2f454563975cc4b2fcc07d31ce12d ./themes/default/smilies/alien.png -5b36ab1e0f2c2dde883a6e32cc3feebf ./themes/default/smilies/smile.png -a1650e5c1ff8e9f40ef90828011f91fa ./themes/default/smilies/normal.png -efe8138e2d0b366a9dcdbe1c6ab75eee ./themes/default/smilies/evil.png -987742e347ef66bbc2b6b9546a0aa360 ./themes/default/smilies/angry.png -83362893d53db01b5595a7e8021fcdac ./themes/default/smilies/wink.png -57a457e1818d6e9419ced9366d2e33dc ./themes/default/smilies/razz.png -9ae025a44deba07f3e3fe2c3992e5d9c ./themes/default/smilies/arrow.png -25adf8de879b3e83c12ab668bc3c983f ./themes/default/smilies/question.png -32f2a33008491d7c070d70cfc64585c0 ./themes/default/smilies/surprised.png -c75e685b085a7e188b42f995626ec3be ./themes/default/screenshot.jpg -9a32c297dc3b0deb2d6dd753003a34fa ./themes/default/print.css -45d00287e10a0f80755df82486fe5d9c ./themes/ductile/img/menu.png -a0015087cd48c18743ec0abe82093fe3 ./themes/ductile/img/sticker-contact.png -1b0f8f994562ca42560fcd2ada72c409 ./themes/ductile/img/filet.png -94d5758aa91ec3378e0cd48de4f3d479 ./themes/ductile/img/last-hline.png -6490586470558c14c3bbeb50b7aba76e ./themes/ductile/img/post-info.png -d5979fa0d9b2f8be5e1426d10ab324b0 ./themes/ductile/img/sticker-about.png -a9ba633e8a0c38c7799fddb21386bf1b ./themes/ductile/img/squares.png -f5a4ca7d53980b9f3599f44f1ee056dc ./themes/ductile/img/404.png -3addb79a8269aa09f6a481faed784cb3 ./themes/ductile/img/minus-plus.png -6b66cc73ab482165f05fa3681c3117fd ./themes/ductile/img/hline.png -f6d76b2ec5d0cc2f1fa0d7959e654659 ./themes/ductile/img/feed.png -2558233ed307b504ee5cec813ed37c9f ./themes/ductile/img/vline.png -54e2985a49ef5d1eafd019c7890d6c75 ./themes/ductile/img/sticker-feed.png -208f72649c79433f373bc2f345e31b1e ./themes/ductile/img/logo.png -9ea7bc2b06c8b9835fca914e45c3e9fd ./themes/ductile/img/menumobile.png -3830f6d401c112da3fec2d49598c110a ./themes/ductile/img/info-co.png -ee625571fee87ee28771814a7d990533 ./themes/ductile/img/download.png -d3a5600600c51388faca5764d78bb255 ./themes/ductile/tpl/_sidebar.html -5972bce8e97464802c9337e3f711a497 ./themes/ductile/tpl/404.html -5eca089dfae96ac2fbec83e0b8fecca8 ./themes/ductile/tpl/_head.html -82cac60aaee669c22cd12c2ea906120a ./themes/ductile/tpl/category.html -f0c5851b4f7864c4e867fc68422c1e7b ./themes/ductile/tpl/_top.html -646d08df01866f93c3f96e181f44f67d ./themes/ductile/tpl/page.html -04042fb7780b53434df1f3e08c188d0d ./themes/ductile/tpl/archive_month.html -acb7ffa595929e97cddd77c4e879122c ./themes/ductile/tpl/_footer.html -a1983537ec443b2820e3bcda28a2cdb6 ./themes/ductile/tpl/archive.html -34be6f864b5a87efca2c4629752ea8f5 ./themes/ductile/tpl/tag.html -f09ccea554a96b569cfd05c07b33dd4a ./themes/ductile/tpl/post.html -f4f70c7f5a9ebd5ba3deccfa85991248 ./themes/ductile/tpl/_entry-title.html -1b66d32c893660bee28650240a2a58b5 ./themes/ductile/tpl/_pagination.html -32da3358202c8a7f561e4de2c40602b9 ./themes/ductile/tpl/tags.html -1363f40218fbf611757fb0a77bf8b368 ./themes/ductile/tpl/_entry-short.html -423ed7b8edc6f7585fed258c27d8a189 ./themes/ductile/tpl/_entry-full.html -281cd5fecf15b910197cff4ce8c59c8c ./themes/ductile/tpl/search.html -a43fbe8596a6a7cea756a568e8b08418 ./themes/ductile/tpl/home.html -26bbe6713e4d3107acaf728d385f7846 ./themes/ductile/tpl/_simple-entry.html -1b496f7d9654a14a2c8fbf1048691ca5 ./themes/ductile/_define.php -f422cb4f4f3e78e9759c0f7df7e3aefe ./themes/ductile/style.css -32fb1656e65748b87fd80961720288e2 ./themes/ductile/_public.php -917671c8a29b46c280ecadc16b0c3aac ./themes/ductile/locales/en/help/help.html -464d1bec47c94bd1318a1d0b7591d69d ./themes/ductile/locales/en/main.po -f4ea1518ffbaab35d4c0a811a7a6f0e5 ./themes/ductile/locales/en/resources.php -05862e7f740b0d2693235af02dba8ae7 ./themes/ductile/locales/en/main.lang.php -60cd3466769a335e11f4ea6b6db00b32 ./themes/ductile/locales/es/main.po -85515ddcb067b706b5f96de3bd93fc7a ./themes/ductile/locales/es/main.lang.php -044617aacddd312e982a46868d5cd0c4 ./themes/ductile/locales/fr/help/help.html -21c5b93e0056a529b23a2a8100b6f131 ./themes/ductile/locales/fr/main.po -f4ea1518ffbaab35d4c0a811a7a6f0e5 ./themes/ductile/locales/fr/resources.php -a0eb02cf98df99cc5b72f1f9b85d03e4 ./themes/ductile/locales/fr/admin.lang.php -64ccfba3a4cc05b19bee205508d29de3 ./themes/ductile/locales/fr/admin.po -b0504f396485c4cdcc469bf7aa6ac72f ./themes/ductile/locales/fr/main.lang.php -b068880d9ebca0eb8ee939edf7a61fdb ./themes/ductile/_prepend.php -41268b2c9f4e7a588033689d7ff9f89c ./themes/ductile/screenshot.jpg -ac71d8654c2c0f52d9f23e5b6c70450d ./themes/ductile/ie.css -c3caa3fdd24ac661593757f9b454f291 ./themes/ductile/ductile.js -757317303623fbac21adbc8747f7b63e ./themes/ductile/_config.php -342e032b31de25bdb8d855712dfceddb ./themes/ductile/rebase.css -f1d67702b54ededa0c493fef0c7dc7f1 ./themes/ductile/mediaqueries.css -28e5e068b8b973e3d1997ba7c24205f2 ./themes/blueSilence/img/background.png -8ebf5666d9d8bac9fdeedbd17daaa348 ./themes/blueSilence/img/report.png -a58dc745b52f9bb33a44fb9ccd5a776d ./themes/blueSilence/img/rss.png -a56d97cb87cfd1970760fff3345af5d8 ./themes/blueSilence/img/tag.png -f7a34b6d7c3641b7afa0132a9723ece3 ./themes/blueSilence/img/top.jpg -f9e699b16c85dd103e725d70efdacd2f ./themes/blueSilence/img/li.png -ab2a5e87e0c395d12a221485be1ff821 ./themes/blueSilence/img/commentaire.png -4c8c6a8fe121912b6cf6a8edaa920aec ./themes/blueSilence/img/tags.png -e8bb6589fe0e7bc810acc4c350f2a54d ./themes/blueSilence/img/commentaire_bulle.png -851317b61d8b6b08d6bb58c06896df21 ./themes/blueSilence/img/attach.png -c1dda264fa5d4120717ba558f01fe652 ./themes/blueSilence/img/footer.png -986f44c4d95f0b4d30defec242f0f76d ./themes/blueSilence/img/retrolien.png -e40bfe45e815e751015bf122e16fb1f2 ./themes/blueSilence/img/sidebar_li.png -3cb85a1d74bceda7858cf0ba4431ada0 ./themes/blueSilence/_define.php -4c99f9d0bd6843a5484740269dd72770 ./themes/blueSilence/style.css -6c0c644258713357329a5bcac1f44768 ./themes/blueSilence/screenshot.jpg -449494368191ae4e7ab977c2a76ab009 ./themes/customCSS/_define.php -d41d8cd98f00b204e9800998ecf8427e ./themes/customCSS/style.css -1d1df50722b311cd831e82a6c49cef11 ./themes/customCSS/_public.php -440252bd94cc1bba46e7b660695d4bd4 ./themes/customCSS/locales/fr/main.po -59bc320d1152143f1519da7733d092ff ./themes/customCSS/locales/fr/main.lang.php -148208db11c31b1be2fa3ea96c5fe63e ./themes/customCSS/_config.php -7d3667a8583b161e345c97abf93b7d13 ./plugins/tags/js/posts_actions.js -8973e836ae4ccefef97120342b2e877c ./plugins/tags/js/jquery.autocomplete.js -8bf49851e4d1322827a052b061d0cc6a ./plugins/tags/js/post.js -deb5c791e787615f52941227f045b37e ./plugins/tags/img/loader.gif -ea424458edbdb1f6c4c01d4486019252 ./plugins/tags/img/tag-add.png -02310f9b96fbe3d9005db4c32c0edfde ./plugins/tags/_define.php -0ab37bb8c62958dadba1c01ce4daa0ae ./plugins/tags/style.css -efb60d58acef17a9f8f2f29b42b9641a ./plugins/tags/_widgets.php -769eb2e4000b8b871ef6a764e356e438 ./plugins/tags/_public.php -87d59c76efc5f658c8bdb77ad1683583 ./plugins/tags/icon.png -543aad10a48eca31afd4e8cd28b2b21e ./plugins/tags/_prepend.php -0984fac02a7059c3da6575a7f04f67bf ./plugins/tags/_admin.php -e1e298db61c4ec7e99161c9788111b4c ./plugins/tags/index.php -84845fa3256c8c15bf3a4ff613cc823b ./plugins/tags/_xmlrpc.php -c365a799f0c5c04facd507116ec18bce ./plugins/tags/tags.php -87ffbdb75c871db5411264cb4aa8c1fb ./plugins/tags/tag_posts.php -88af742960b518262cc6e6d662a408d3 ./plugins/tags/icon-big.png -b078a69a4fc6e58a804df40d6f9402ec ./plugins/tags/default-templates/tag.html -e238ea5276b7333593026d68b02f1ce5 ./plugins/tags/default-templates/tags.html -440acb22b11ba828e45fd27c60810adc ./plugins/maintenance/_define.php -2c604b5d65cc096c1f37906d596a2231 ./plugins/maintenance/icon.png -eaffdb154740265f9dae351b891e2d27 ./plugins/maintenance/locales/en/help/maintenance.html -61add6e9746aded7aab53aee9f91a147 ./plugins/maintenance/locales/en/resources.php -f8ed1b11e9fd0843d7ea40e010f3ae83 ./plugins/maintenance/locales/fr/help/maintenance.html -61add6e9746aded7aab53aee9f91a147 ./plugins/maintenance/locales/fr/resources.php -a60ed9fce76695b5d507e815555a8620 ./plugins/maintenance/_admin.php -5f391589b20df151de1e353e5d3f8253 ./plugins/maintenance/index.php -0bb6cc2229f017adedbc67642496a623 ./plugins/maintenance/icon-big.png -53fcb389435570d224759e1e87723154 ./plugins/pages/list.php -c20960611d6099a96accf85bbe5f7f67 ./plugins/pages/_define.php -dddced2207edb25a187bceb5f855bfa5 ./plugins/pages/page.php -c8744d50e0bf36cdc4613929be5f4f7a ./plugins/pages/_widgets.php -23cb01b0f5290900f359d81e0211b74d ./plugins/pages/_public.php -b1bc318e924e34522709312a12dcc5c2 ./plugins/pages/icon.png -1be0fb2eebf54bfad343c52177a80632 ./plugins/pages/locales/en/help/page.html -12a1a6fee37d25d40c03f9d7234a351c ./plugins/pages/locales/en/help/pages.html -3dce4e7363737b9d0a9b1cb80473a000 ./plugins/pages/locales/en/resources.php -cb15c560f1ce3ca28b218015de39c86e ./plugins/pages/locales/fr/help/page.html -14b6f95e1d372f013a59f022c59c28fc ./plugins/pages/locales/fr/help/pages.html -3dce4e7363737b9d0a9b1cb80473a000 ./plugins/pages/locales/fr/resources.php -bc20a848078bc49837802aa98cbdafa2 ./plugins/pages/_prepend.php -c85dc3b8e26a69a525c8d1af05b321a0 ./plugins/pages/_admin.php -e4d87532945c6948024c19d042e2b886 ./plugins/pages/index.php -d27a7d60e6ba80c4707dcffd3c2dbd5e ./plugins/pages/icon-np-big.png -31089648f09c9203bb9a9f08fa0f8d5c ./plugins/pages/icon-np.png -c14f9c44eb9edbc48e953cb1a21fb972 ./plugins/pages/icon-big.png -075d988db38c1cdfce6a1983067b57f9 ./plugins/pages/default-templates/page.html -51614d28203d0d30b54522c73020931b ./plugins/pings/lib.pings.php -b185af2e3eb0ce2a0bdb5cc86ee498c9 ./plugins/pings/_define.php -9752e15a58ed8ef93751e4db2826e4ac ./plugins/pings/icon.png -ac4b9c80e9f15d9b9f5219dfa44c1849 ./plugins/pings/_admin.php -ddbb5e077b8683fe7b5617c17c9d4520 ./plugins/pings/index.php -69ea448ef9b88ebfb3d055365de751e5 ./plugins/pings/icon-big.png -e074e70b8acc82f6b8353ae2dc240d7b ./plugins/pings/post.js -ce7e454ba349cf30c2180f82df6a0579 ./plugins/attachments/_define.php -0009b6fab4d355467d4752500c895689 ./plugins/attachments/_public.php -df2984cdf2e725a1190d4c4d1a22cd5c ./plugins/attachments/_admin.php -b0943867447d5997118b7bfc34768ce6 ./plugins/antispam/inc/class.dc.spamfilters.php -638c21bdabf86e609981ab1e511de0a5 ./plugins/antispam/inc/lib.dc.antispam.php -345e04b476c4b364769678147705bfd2 ./plugins/antispam/inc/class.dc.spamfilter.php -63d9349114f535ab0731d45302db1fa7 ./plugins/antispam/inc/lib.dc.antispam.url.php -77a77bd9ce6f79c562ecafb0f5dfff04 ./plugins/antispam/_define.php -6678a3fc8c6bcc54e7f2910e4aaeba21 ./plugins/antispam/_install.php -c28748b62667080cf3a0fbf5dd98f7b2 ./plugins/antispam/style.css -6fc18cd4a4dfa2928807c405a8b585fb ./plugins/antispam/_public.php -a48997d0567984d464981b4cde3ff125 ./plugins/antispam/icon.png -39a774a74f940ac72192d6c496a44478 ./plugins/antispam/_prepend.php -1e2deb4234391c489de45137d3e306d2 ./plugins/antispam/filters/class.dc.filter.linkslookup.php -cf86365f13c9e82063ef70f91d1b8963 ./plugins/antispam/filters/class.dc.filter.words.php -26fb77ae2996f1df9d884773aaae7f7a ./plugins/antispam/filters/class.dc.filter.ip.php -ebff2023b0e53322f6c908729df29015 ./plugins/antispam/filters/class.dc.filter.iplookup.php -b2626bad20ac045e3dcf448d9c7b32e0 ./plugins/antispam/_admin.php -316d16dea4cf1fe94cf6a8a7f149b8ec ./plugins/antispam/index.php -b82da4aa0a7b272ae5e2de8dd7359b3a ./plugins/antispam/feed.png -56dd843cb7ae5c0e71ea479c96136352 ./plugins/antispam/antispam.js -83716ca10d30c3fb0cd1c25c75518a72 ./plugins/antispam/icon-big.png -63f54624efa0c327dcc4e6a0f45e5a7b ./plugins/themeEditor/_define.php -df6d24d467b24cf0914f388864ff3000 ./plugins/themeEditor/style.css -597ea9521d22937dbce30b392c6b3d46 ./plugins/themeEditor/_admin.php -c4762effea48c7e75e20ee5936af0484 ./plugins/themeEditor/index.php -70e24bb343ebeb5c4bc427532d5866e0 ./plugins/themeEditor/class.themeEditor.php -740e05113c1d5f825eba114554e096d4 ./plugins/themeEditor/help.html -f75e3f88c0dea27c23c1b02486cf485d ./plugins/themeEditor/script.js -209634bb0238704c4874c35d615ae59e ./plugins/.htaccess -176f0818cbfc87abfd63ea4533dfa9ec ./plugins/blogroll/icon-small.png -ff5ac25482026b10a85a24dc5c95224a ./plugins/blogroll/edit.php -66eac420aa0fb1a5dd92f5f98fba453c ./plugins/blogroll/_define.php -cd90c7acf3cb672aba63312930055195 ./plugins/blogroll/class.dc.importblogroll.php -a7baf0626982efff0d58e3fda94d6aa5 ./plugins/blogroll/_install.php -4390f663a991dc993ba648786bba97f3 ./plugins/blogroll/_widgets.php -e075e330663bb96f131b7c294ba8c430 ./plugins/blogroll/_public.php -a8ff27e2e7e0e204fb06c6154c09a89d ./plugins/blogroll/icon.png -eff29112ce348cff22324fa93fccee39 ./plugins/blogroll/locales/en/help/blogroll.html -febf3b64152a0aefb523a8822998c02c ./plugins/blogroll/locales/en/resources.php -6bfc5a8bf8a197307a289f294d2b34f4 ./plugins/blogroll/locales/fr/help/blogroll.html -febf3b64152a0aefb523a8822998c02c ./plugins/blogroll/locales/fr/resources.php -f655145e14734c5eef2e40489227bc66 ./plugins/blogroll/_prepend.php -fc5215f1cfd1a630bc64516c243159c7 ./plugins/blogroll/_admin.php -a8199396024d0d87716b3e2c39290a19 ./plugins/blogroll/class.dc.blogroll.php -b5bb164e1e73648a5ebfbe91985953cf ./plugins/blogroll/index.php -a7a6b9941ea78fd2055e025f0e1a3abc ./plugins/akismet/_define.php -e77a818a2a09aaf0a7eed4d18b0d8236 ./plugins/akismet/_prepend.php -230313fe9f4089ff7f2ebb3a696be3b2 ./plugins/akismet/class.dc.filter.akismet.php -269e3aa0b8dadeee41f7c68ade7f12de ./plugins/aboutConfig/_define.php -4d78af1bbd7743a86da47683067b1eb7 ./plugins/aboutConfig/icon.png -7c9e3b0ef93fb178c44b0d22fe20e38b ./plugins/aboutConfig/_admin.php -9a9b2b40603945feafea068863a611ab ./plugins/aboutConfig/index.php -16eb7f5b6739a98fdd46606e87ceccb6 ./plugins/aboutConfig/icon-big.png -490168b1d58949a991352f3c8db587fb ./plugins/userPref/_define.php -309e06f46959a3a86b007218e5038e23 ./plugins/userPref/icon.png -c01675d280ae574977f25a082397ecbc ./plugins/userPref/_admin.php -dbec6e054ff4db968ec074772a473bd0 ./plugins/userPref/index.php -feab8bf7358c357f4cd537820fe62490 ./plugins/userPref/icon-big.png -f98d952cb1b5431498700fb3592f739d ./plugins/widgets/_define.php -d077c7c36df3ade673424af06c0b1133 ./plugins/widgets/_install.php -1c204b2811264f93c82dae9ed4e58930 ./plugins/widgets/style.css -5f05e70580892549e068ac89b0b9b168 ./plugins/widgets/widgets.js -5d2f7110de5b4de03cf013c7421e87cc ./plugins/widgets/_widgets_functions.php -7101653d4ef9b55ef29a2e5c7846d052 ./plugins/widgets/_public.php -ede434e0f2087fd062494db6cb0b0c58 ./plugins/widgets/_default_widgets.php -3ce023c7ee7afe5f25f710b11cca9a68 ./plugins/widgets/icon.png -8c9c71d3c0fcd5769bf1a8283749fe26 ./plugins/widgets/class.widgets.php -6c1794028932d3c3c7557d998ecacc40 ./plugins/widgets/_admin.php -926b5589c70fed8f09cd97025ed9e903 ./plugins/widgets/index.php -10b9dd1b33f5f2f74cc92ddac74f3423 ./plugins/widgets/icon-big.png -3b552f7e600dd6c98edc66e7e62ad1fb ./plugins/widgets/dragdrop.js -0fce40ecac55cf0fcdc7e534022bf878 ./plugins/fairTrackbacks/_define.php -15b05e4b999143220e3852ffbdaa15a6 ./plugins/fairTrackbacks/_public.php -bb7fb55037e7045678c3aa812ac4a2ec ./plugins/fairTrackbacks/_prepend.php -5c365c86f9ed6d4a9187c24a3d0b1b43 ./plugins/fairTrackbacks/class.dc.filter.fairtrackbacks.php -0fef5c3614e320bdaf2b1342c313e09a ./plugins/blowupConfig/lib/class.blowup.config.php -f57b92ae244d97ea5889240c600a23ac ./plugins/blowupConfig/_define.php -bd71a73523e30fe0d069c3813ad1bcbb ./plugins/blowupConfig/_install.php -8ac968bf6adbb5cfe1397f2e6e229ace ./plugins/blowupConfig/config.js -1a761c6c24723b5c4d5091d1b983a0eb ./plugins/blowupConfig/_public.php -80eb24ad26a2c981ede3a7c01d53b66a ./plugins/blowupConfig/_admin.php -81d1dde973bcadc1728a2eeb81e6c925 ./plugins/blowupConfig/index.php -f3b1ebaf5a27959228b736f87db11776 ./plugins/blowupConfig/alpha-img/page-bg.png -4e391773b51ea336fb0f647cb15379ef ./plugins/blowupConfig/alpha-img/comment-b.png -78e0f7cf458db47eef8b8ff7a241ac8e ./plugins/blowupConfig/alpha-img/comment-t.png -1c7448246376dc8cecee8f0479723099 ./plugins/blowupConfig/alpha-img/page-t/flamingo.png -f4c8777ac3a935e7b9f171a948a78280 ./plugins/blowupConfig/alpha-img/page-t/blank.png -68daa93bbe1ed00ff190cf851033fe93 ./plugins/blowupConfig/alpha-img/page-t/animals.png -a140e3ae9bf5dcc8c3152a315bd17cd3 ./plugins/blowupConfig/alpha-img/page-t/default.png -c1582964ea8ac500d8f1358cbc11b472 ./plugins/blowupConfig/alpha-img/page-t/typo.png -a13d367c5520f17ee7b3a2dd6cd8068f ./plugins/blowupConfig/alpha-img/page-t/roadrunner-1.png -a33e8d4310696d64bb065cddd23b5292 ./plugins/blowupConfig/alpha-img/page-t/roadrunner-2.png -c48b1a888ebd601e610a425c733367fa ./plugins/blowupConfig/alpha-img/page-t/rabbit.png -508813560e6465f057c07287ad40dd88 ./plugins/blowupConfig/alpha-img/page-t/flourish-1.png -7b79aa5c11177401d7b2cac032d09038 ./plugins/blowupConfig/alpha-img/page-t/flourish-2.png -722ad2b43138abc067ade1c4ed6d0297 ./plugins/blowupConfig/alpha-img/page-t/light-trails-1.png -ee440de20028785d2c0a4fd7b25ae060 ./plugins/blowupConfig/alpha-img/page-t/light-trails-2.png -3f9e394ed187b401c4446b77490944b6 ./plugins/blowupConfig/alpha-img/page-t/light-trails-3.png -ca76fc93ebbce051feb507869165ab6d ./plugins/blowupConfig/alpha-img/page-t/light-trails-4.png -4b3117cca2f73c47d5892684443c74fb ./plugins/blowupConfig/alpha-img/page-t/image-mask.png -ffacd6551c2bd0c863740e7c2fcc29e4 ./plugins/blowupConfig/alpha-img/page-t/butterflies.png -652d06f1c3f7057cd7ab6a01d22b72ba ./plugins/blowupConfig/alpha-img/page-b.png -52db59a23ae5743c614bf9457de0167a ./plugins/blowupConfig/alpha-img/gradient-d.png -bd908640438b6cc2088e81df0894c864 ./plugins/blowupConfig/alpha-img/gradient-l.png -d1e0bdff64011042f02910c6518b1d00 ./plugins/blowupConfig/alpha-img/gradient-m.png -81ef6980e71af45e03f56f66fa6fbd8e ./plugins/blowupConfig/help.html -b39d8c8adaaac48561c435648faa0d64 ./plugins/importExport/js/script.js -caa11e523e5a3ed38d90480bed5d5a73 ./plugins/importExport/inc/img/progress.png -425eef5d5e136de5596b0904fda02755 ./plugins/importExport/inc/flat/class.flat.export.php -ca602765dee0850af857ec8decf3a7f1 ./plugins/importExport/inc/flat/class.flat.import.php -0cadbc79aea5b10efd9ee289799cb46c ./plugins/importExport/inc/flat/class.flat.backup.php -d025a6a06fa8030c06782ec7af1d09f5 ./plugins/importExport/inc/class.dc.export.flat.php -5bb7442c4ca029a63f1897de32966115 ./plugins/importExport/inc/class.dc.ieModule.php -ddf1420b9d0a57351e8fff696c6c7580 ./plugins/importExport/inc/class.dc.import.dc1.php -e4cb3020c427f2cfa3ac0a07a5544684 ./plugins/importExport/inc/class.dc.import.wp.php -c3856ce629d23bc6c6093492250a2aa5 ./plugins/importExport/inc/class.dc.import.flat.php -5d4e8f35e0f9b124b627ccb695d050e7 ./plugins/importExport/inc/class.dc.import.feed.php -e34fedf924add536b694e3d19b67eb9e ./plugins/importExport/_define.php -ab75dcc3e4af8dfdf47a4d9144c45a15 ./plugins/importExport/style.css -cf150f4cab469116959f43e9995a3654 ./plugins/importExport/icon.png -e43b7373a9d43b4aa2025ed5b222aa3d ./plugins/importExport/locales/fr/main.po -e9a05d12aeb1c1882b57f4e3912daf76 ./plugins/importExport/locales/fr/main.lang.php -967d9452787afa167e8d4f7f08432da4 ./plugins/importExport/_prepend.php -4b3f4140098e0b3b96a34b0f4ced511d ./plugins/importExport/_admin.php -9169fd905a1a194849221947f99096f5 ./plugins/importExport/index.php -2959b999f06c95bc6582392d13a0b1f0 ./plugins/importExport/icon-big.png -a27e5d730ed8617782a740bf018f4889 ./plugins/simpleMenu/icon-small.png -823184eb803c7e35a800c23f6d11691f ./plugins/simpleMenu/_define.php -c30e0e1fa38e4ece85294b8f1e55c2b3 ./plugins/simpleMenu/_install.php -92128bc19b2eecc265dd09b9584dee88 ./plugins/simpleMenu/_widgets.php -1b09f23aec3d84b3c17f1c8a5fe2c771 ./plugins/simpleMenu/_public.php -f32140a88ecb3e8fd21ae2ed6652f07c ./plugins/simpleMenu/icon.png -5597505935e7696c6f12b180be70ee50 ./plugins/simpleMenu/locales/en/help/help.html -b4ea322bc7ec45b260c803e046d073fe ./plugins/simpleMenu/locales/en/resources.php -61d2df2c7abd41c0dbd9974596583d42 ./plugins/simpleMenu/locales/fr/help/help.html -b4ea322bc7ec45b260c803e046d073fe ./plugins/simpleMenu/locales/fr/resources.php -460286be8fc317eafd75a3ec72452690 ./plugins/simpleMenu/_admin.php -9734092f951bcf93a505bfa15e80960b ./plugins/simpleMenu/index.php -d85775470a54e974bd4a81fe9363f4b4 ./CREDITS diff --git a/v2/dotclear/inc/libs/clearbricks/Makefile b/v2/dotclear/inc/libs/clearbricks/Makefile deleted file mode 100644 index f440738..0000000 --- a/v2/dotclear/inc/libs/clearbricks/Makefile +++ /dev/null @@ -1,44 +0,0 @@ -SHELL=/bin/sh - -DIST=_dist -CB=$(DIST)/clearbricks - -default: - @echo "make config or make dist" - -config: - mkdir -p ./$(CB) - - ## Copy needed files and folders - find ./ -mindepth 1 -maxdepth 1 -type d \ - -not -regex '.*svn.*' \ - -not -name '_dist' \ - -not -name 'debian' \ - -exec cp -r \{\} ./$(CB) \; - - ## Copy _common.php and README files - cp _common.php README ./$(CB)/ - - ## Remove .svn folders - find ./$(CB)/ -type d -name '.svn' -print0 | xargs -0 rm -rf - - touch config-stamp - -dist: config dist-tgz dist-zip - -deb: - cp ./README debian/README - dpkg-buildpackage -rfakeroot - -dist-tgz: - [ -f config-stamp ] - cd $(DIST) && tar cfz clearbricks-$$(grep CLEARBRICKS_VERSION clearbricks/common/_main.php | cut -d"'" -f4).tar.gz ./clearbricks - -dist-zip: - [ -f config-stamp ] - cd $(DIST) && zip -r9 clearbricks-$$(grep CLEARBRICKS_VERSION clearbricks/common/_main.php | cut -d"'" -f4).zip ./clearbricks - -clean: - [ -f config-stamp ] - rm -rf $(DIST) - rm -f config-stamp build-stamp configure-stamp diff --git a/v2/dotclear/inc/libs/clearbricks/README b/v2/dotclear/inc/libs/clearbricks/README deleted file mode 100644 index 4dadeec..0000000 --- a/v2/dotclear/inc/libs/clearbricks/README +++ /dev/null @@ -1,67 +0,0 @@ -Clearbricks -=========== - -What is this? -------------- - -No, Clearbricks is not yet another framework. Clearbricks is not cool at all and -does not even have a nice website. It won't make you smart neither have great -ideas for you. - -Clearbricks is only about code and efficiency, consider it as a toolbox. And -please, do me a favor, don't call it a framework :-) - -How do I use it? ----------------- - -Clearbricks is about "using what we need when we need it". Pick the module(s) -you need and add it to your code. The only thing you'll always need is the -"common" directory. - -Once you're ready, you have to create a _common.php file on top of your -Clearbricks path (or wherever you want) and add $__autoload entries for your -modules. - -Take a look at the _common.php file. - -Of course, you're encouraged to use the $__autoload magic for your own classes. - -Use it with Subversion ----------------------- - -You may think that all this subdirectories is a mess. You're quite right. But -one day, you'll find it cool to use Clearbricks modules in your subversion -repository as some external properties. This day, you'll love me :-) - -Clearbricks subersion repository is located at: -https://clearbricks.org/svn - -Here is an example of using Clearbricks and dbLayer in your own subversion -repository as an external property: - -First, we create a Clearbricks root. - -$ mkdir clearbricks -$ svn add clearbricks -$ svn ci - -And now, add externals definitions - -$ cd clearbricks -$ svn propedit svn:externals . - -Your editor fires up, type: - -common https://clearbricks.org/svn/trunk/common -dblayer https://clearbricks.org/svn/trunk/dblayer - -Save and "svn up". - -Then, you can create a _common.php file wich will contain: - - - -You're done! diff --git a/v2/dotclear/inc/libs/clearbricks/_common.php b/v2/dotclear/inc/libs/clearbricks/_common.php deleted file mode 100644 index cf9e6d8..0000000 --- a/v2/dotclear/inc/libs/clearbricks/_common.php +++ /dev/null @@ -1,123 +0,0 @@ - \ No newline at end of file diff --git a/v2/dotclear/inc/libs/clearbricks/common/_main.php b/v2/dotclear/inc/libs/clearbricks/common/_main.php deleted file mode 100644 index c3129b3..0000000 --- a/v2/dotclear/inc/libs/clearbricks/common/_main.php +++ /dev/null @@ -1,58 +0,0 @@ - dirname(__FILE__).'/lib.crypt.php', - 'dt' => dirname(__FILE__).'/lib.date.php', - 'files' => dirname(__FILE__).'/lib.files.php', - 'path' => dirname(__FILE__).'/lib.files.php', - 'form' => dirname(__FILE__).'/lib.form.php', - 'formSelectOption' => dirname(__FILE__).'/lib.form.php', - 'html' => dirname(__FILE__).'/lib.html.php', - 'http' => dirname(__FILE__).'/lib.http.php', - 'text' => dirname(__FILE__).'/lib.text.php' -); - -# autoload for clearbricks -function cb_autoload($name) -{ - global $__autoload; - - if (isset($__autoload[$name])) { - require_once $__autoload[$name]; - } -} - -# if php version >= 5.1.2, we can benefit from spl_autoload_register, -# so other libraries can define their own independent autoload too -if (function_exists("spl_autoload_register")) { - spl_autoload_register("cb_autoload"); -} else { - # otherwise we define a classic autoload function for older php... - function __autoload($name) { - cb_autoload($name); - } -} - -# We only need l10n __() function -require_once dirname(__FILE__).'/lib.l10n.php'; - -# We set default timezone to avoid warning -dt::setTZ('UTC'); -?> \ No newline at end of file diff --git a/v2/dotclear/inc/libs/clearbricks/common/lib.crypt.php b/v2/dotclear/inc/libs/clearbricks/common/lib.crypt.php deleted file mode 100644 index 5975697..0000000 --- a/v2/dotclear/inc/libs/clearbricks/common/lib.crypt.php +++ /dev/null @@ -1,77 +0,0 @@ -$data, using the said $key - * and $hashfunc as hash method (sha1 or md5 are accepted.) - * - * @param string $key Hash key - * @param string $data Data - * @param string $hashfunc Hash function (md5 or sha1) - * @return string - */ - public static function hmac($key,$data,$hashfunc='sha1') - { - $blocksize=64; - if ($hashfunc != 'sha1') { - $hashfunc = 'md5'; - } - - if (strlen($key)>$blocksize) { - $key=pack('H*', $hashfunc($key)); - } - - $key=str_pad($key,$blocksize,chr(0x00)); - $ipad=str_repeat(chr(0x36),$blocksize); - $opad=str_repeat(chr(0x5c),$blocksize); - $hmac = pack('H*',$hashfunc(($key^$opad).pack('H*',$hashfunc(($key^$ipad).$data)))); - return bin2hex($hmac); - } - - /** - * Password generator - * - * Returns an 8 characters random password. - * - * @todo Add a length param - * - * @return string - */ - public static function createPassword() - { - $pwd = array(); - $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'; - $chars2 = '$!@'; - - foreach (range(0,7) as $i) { - $pwd[] = $chars[rand(0,strlen($chars)-1)]; - } - - $pos1 = array_rand(array(0,1,2,3)); - $pos2 = array_rand(array(4,5,6,7)); - $pwd[$pos1] = $chars2[rand(0,strlen($chars2)-1)]; - $pwd[$pos2] = $chars2[rand(0,strlen($chars2)-1)]; - - return implode('',$pwd); - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/libs/clearbricks/common/lib.date.php b/v2/dotclear/inc/libs/clearbricks/common/lib.date.php deleted file mode 100644 index de9b28a..0000000 --- a/v2/dotclear/inc/libs/clearbricks/common/lib.date.php +++ /dev/null @@ -1,260 +0,0 @@ - $v) { - $g = explode('/',$k); - $tmp[$g[0]][$k] = $v; - } - $res = $tmp; - } - } - - return $res; - } - - private static function _callback($args) - { - $b = array(1=>'_Jan',2=>'_Feb',3=>'_Mar',4=>'_Apr',5=>'_May',6=>'_Jun', - 7=>'_Jul',8=>'_Aug',9=>'_Sep',10=>'_Oct',11=>'_Nov',12=>'_Dec'); - - $B = array(1=>'January',2=>'February',3=>'March',4=>'April', - 5=>'May',6=>'June',7=>'July',8=>'August',9=>'September', - 10=>'October',11=>'November',12=>'December'); - - $a = array(1=>'_Mon',2=>'_Tue',3=>'_Wed',4=>'_Thu',5=>'_Fri', - 6=>'_Sat',0=>'_Sun'); - - $A = array(1=>'Monday',2=>'Tuesday',3=>'Wednesday',4=>'Thursday', - 5=>'Friday',6=>'Saturday',0=>'Sunday'); - - return __(${$args[1]}[(integer) $args[2]]); - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/libs/clearbricks/common/lib.files.php b/v2/dotclear/inc/libs/clearbricks/common/lib.files.php deleted file mode 100644 index e957095..0000000 --- a/v2/dotclear/inc/libs/clearbricks/common/lib.files.php +++ /dev/null @@ -1,667 +0,0 @@ - 'application/vnd.oasis.opendocument.text', - 'odp' => 'application/vnd.oasis.opendocument.presentation', - 'ods' => 'application/vnd.oasis.opendocument.spreadsheet', - - 'sxw' => 'application/vnd.sun.xml.writer', - 'sxc' => 'application/vnd.sun.xml.calc', - 'sxi' => 'application/vnd.sun.xml.impress', - - 'ppt' => 'application/mspowerpoint', - 'doc' => 'application/msword', - 'xls' => 'application/msexcel', - 'rtf' => 'application/rtf', - - 'pdf' => 'application/pdf', - 'ps' => 'application/postscript', - 'ai' => 'application/postscript', - 'eps' => 'application/postscript', - 'json' => 'application/json', - 'xml' => 'application/xml', - - 'bin' => 'application/octet-stream', - 'exe' => 'application/octet-stream', - - 'bz2' => 'application/x-bzip', - 'deb' => 'application/x-debian-package', - 'gz' => 'application/x-gzip', - 'jar' => 'application/x-java-archive', - 'rar' => 'application/rar', - 'rpm' => 'application/x-redhat-package-manager', - 'tar' => 'application/x-tar', - 'tgz' => 'application/x-gtar', - 'zip' => 'application/zip', - - 'aiff' => 'audio/x-aiff', - 'ua' => 'audio/basic', - 'mp3' => 'audio/mpeg3', - 'mid' => 'audio/x-midi', - 'midi' => 'audio/x-midi', - 'ogg' => 'application/ogg', - 'ra' => 'audio/x-pn-realaudio', - 'ram' => 'audio/x-pn-realaudio', - 'wav' => 'audio/x-wav', - 'wma' => 'audio/x-ms-wma', - - 'swf' => 'application/x-shockwave-flash', - 'swfl' => 'application/x-shockwave-flash', - - 'bmp' => 'image/bmp', - 'gif' => 'image/gif', - 'ico' => 'image/vnd.microsoft.icon', - 'jpeg' => 'image/jpeg', - 'jpg' => 'image/jpeg', - 'jpe' => 'image/jpeg', - 'png' => 'image/png', - 'svg' => 'image/svg+xml', - 'tiff' => 'image/tiff', - 'tif' => 'image/tiff', - 'xbm' => 'image/x-xbitmap', - - 'css' => 'text/css', - 'csv' => 'text/csv', - 'js' => 'text/javascript', - 'html' => 'text/html', - 'htm' => 'text/html', - 'txt' => 'text/plain', - 'rtf' => 'text/richtext', - 'rtx' => 'text/richtext', - - 'mpg' => 'video/mpeg', - 'mpeg' => 'video/mpeg', - 'mpe' => 'video/mpeg', - 'ogv' => 'video/ogg', - 'viv' => 'video/vnd.vivo', - 'vivo' => 'video/vnd.vivo', - 'qt' => 'video/quicktime', - 'mov' => 'video/quicktime', - 'mp4' => 'video/mp4', - 'm4v' => 'video/x-m4v', - 'flv' => 'video/x-flv', - 'avi' => 'video/x-msvideo', - 'wmv' => 'video/x-ms-wmv' - ); - - /** - * Directory scanning - * - * Returns a directory child files and directories. - * - * @param string $d Path to scan - * @param boolean $order Order results - * @return array - */ - public static function scandir($d,$order=false) - { - $res = array(); - $dh = @opendir($d); - - if ($dh === false) { - throw new Exception(__('Unable to open directory.')); - } - - while (($f = readdir($dh)) !== false) { - $res[] = $f; - } - closedir($dh); - - sort($res); - if ($order) { - rsort($res); - } - - return $res; - } - - /** - * File extension - * - * Returns a file extension. - * - * @param string $f File name - * @return string - */ - public static function getExtension($f) - { - $f = explode('.',basename($f)); - - if (count($f) <= 1) { return ''; } - - return strtolower($f[count($f)-1]); - } - - /** - * MIME type - * - * Returns a file MIME type, based on static var {@link $mimeType} - * - * @param string $f File name - * @return string - */ - public static function getMimeType($f) - { - $ext = self::getExtension($f); - $types = self::mimeTypes(); - - if (isset($types[$ext])) { - return $types[$ext]; - } else { - return 'text/plain'; - } - } - - /** - * MIME types - * - * Returns all defined MIME types. - * - * @return array - */ - public static function mimeTypes() - { - return self::$mimeType; - } - - /** - * New MIME types - * - * Append new MIME types to defined MIME types. - * - * @param array $tab New MIME types. - */ - public static function registerMimeTypes($tab) - { - self::$mimeType = array_merge(self::$mimeType, $tab); - } - - /** - * Is a file or directory deletable. - * - * Returns true if $f is a file or directory and is deletable. - * - * @param string $f File or directory - * @return boolean - */ - public static function isDeletable($f) - { - if (is_file($f)) { - return is_writable(dirname($f)); - } elseif (is_dir($f)) { - return (is_writable(dirname($f)) && count(files::scandir($f)) <= 2); - } - } - - /** - * Recursive removal - * - * Remove recursively a directory. - * - * @param string $dir Directory patch - * @return boolean - */ - public static function deltree($dir) - { - $current_dir = opendir($dir); - while($entryname = readdir($current_dir)) - { - if (is_dir($dir.'/'.$entryname) and ($entryname != '.' and $entryname!='..')) - { - if (!files::deltree($dir.'/'.$entryname)) { - return false; - } - } - elseif ($entryname != '.' and $entryname!='..') - { - if (!@unlink($dir.'/'.$entryname)) { - return false; - } - } - } - closedir($current_dir); - return @rmdir($dir); - } - - /** - * Touch file - * - * Set file modification time to now. - * - * @param string $f File to change - */ - public static function touch($f) - { - if (is_writable($f)) { - if (function_exists('touch')) { - @touch($f); - } else { - # Very bad hack - @file_put_contents($f,file_get_contents($f)); - } - } - } - - /** - * Directory creation. - * - * Creates directory $f. If $r is true, attempts to create needed parents - * directories. - * - * @param string $f Directory to create - * @param boolean $r Create parent directories - */ - public static function makeDir($f,$r=false) - { - if (empty($f)) { - return; - } - - if (DIRECTORY_SEPARATOR == '\\') { - $f = str_replace('/','\\',$f); - } - - if (is_dir($f)) { - return; - } - - if ($r) - { - $dir = path::real($f,false); - $dirs = array(); - - while (!is_dir($dir)) { - array_unshift($dirs,basename($dir)); - $dir = dirname($dir); - } - - foreach ($dirs as $d) - { - $dir .= DIRECTORY_SEPARATOR.$d; - if ($d != '' && !is_dir($dir)) { - self::makeDir($dir); - } - } - } - else - { - if (@mkdir($f) === false) { - throw new Exception(__('Unable to create directory.')); - } - self::inheritChmod($f); - } - } - - /** - * Mode inheritage - * - * Sets file or directory mode according to its parent. - * - * @param string $file File to change - */ - public static function inheritChmod($file) - { - if (!function_exists('fileperms') || !function_exists('chmod')) { - return false; - } - - if (self::$dir_mode != null) { - return @chmod($file,self::$dir_mode); - } else { - return @chmod($file,fileperms(dirname($file))); - } - } - - /** - * Changes file content. - * - * Writes $f_content into $f file. - * - * @param string $f File to edit - * @param string $f_content Content to write - */ - public static function putContent($f, $f_content) - { - if (file_exists($f) && !is_writable($f)) { - throw new Exception(__('File is not writable.')); - } - - $fp = @fopen($f, 'w'); - - if ($fp === false) { - throw new Exception(__('Unable to open file.')); - } - - fwrite($fp,$f_content,strlen($f_content)); - fclose($fp); - return true; - } - - /** - * Human readable file size. - * - * @param integer $size Bytes - * @return string - */ - public static function size($size) - { - $kb = 1024; - $mb = 1024 * $kb; - $gb = 1024 * $mb; - $tb = 1024 * $gb; - - if($size < $kb) { - return $size." B"; - } - else if($size < $mb) { - return round($size/$kb,2)." KB"; - } - else if($size < $gb) { - return round($size/$mb,2)." MB"; - } - else if($size < $tb) { - return round($size/$gb,2)." GB"; - } - else { - return round($size/$tb,2)." TB"; - } - } - - /** - * Converts a human readable file size to bytes. - * - * @param string $v Size - * @return integer - */ - public static function str2bytes($v) - { - $v = trim($v); - $last = strtolower(substr($v,-1,1)); - - switch($last) - { - case 'g': - $v *= 1024; - case 'm': - $v *= 1024; - case 'k': - $v *= 1024; - } - - return $v; - } - - /** - * Upload status - * - * Returns true if upload status is ok, throws an exception instead. - * - * @param array $file File array as found in $_FILES - * @return boolean - */ - public static function uploadStatus($file) - { - if (!isset($file['error'])) { - throw new Exception(__('Not an uploaded file.')); - } - - switch ($file['error']) { - case UPLOAD_ERR_OK: - return true; - case UPLOAD_ERR_INI_SIZE: - case UPLOAD_ERR_FORM_SIZE: - throw new Exception(__('The uploaded file exceeds the maximum file size allowed.')); - return false; - case UPLOAD_ERR_PARTIAL: - throw new Exception(__('The uploaded file was only partially uploaded.')); - return false; - case UPLOAD_ERR_NO_FILE: - throw new Exception(__('No file was uploaded.')); - return false; - case UPLOAD_ERR_NO_TMP_DIR: - throw new Exception(__('Missing a temporary folder.')); - return false; - case UPLOAD_ERR_CANT_WRITE: - throw new Exception(__('Failed to write file to disk.')); - return false; - default: - return true; - } - } - - # Packages generation methods - # - /** - * Recursive directory scanning - * - * Returns an array of a given directory's content. The array contains - * two arrays: dirs and files. Directory's content is fetched recursively. - * - * @param string $dirName Directory name - * @param array $contents Contents array. Leave it empty - * @return array - */ - public static function getDirList($dirName, &$contents = null) - { - if (!$contents) { - $contents = array('dirs'=> array(),'files' => array()); - } - - $exclude_list=array('.','..','.svn'); - - if (empty($res)) { - $res = array(); - } - - $dirName = preg_replace('|/$|','',$dirName); - - if (!is_dir($dirName)) { - throw new Exception(sprintf(__('%s is not a directory.'),$dirName)); - } - - $contents['dirs'][] = $dirName; - - $d = @dir($dirName); - - if ($d === false) { - throw new Exception(__('Unable to open directory.')); - } - - while($entry = $d->read()) - { - if (!in_array($entry,$exclude_list)) - { - if (is_dir($dirName.'/'.$entry)) - { - files::getDirList($dirName.'/'.$entry, $contents); - } - else - { - $contents['files'][] = $dirName.'/'.$entry; - } - } - } - $d->close(); - - return $contents; - } - - /** - * Filename cleanup - * - * Removes unwanted characters in a filename. - * - * @param string $n Filename - * @return string - */ - public static function tidyFileName($n) - { - $n = text::deaccent($n); - $n = preg_replace('/^[.]/u','',$n); - return preg_replace('/[^A-Za-z0-9._-]/u','_',$n); - } -} - -/** -* Path manipulation utilities -* -* @package Clearbricks -* @subpackage Common -*/ -class path -{ - /** - * Returns the real path of a file. - * - * If parameter $strict is true, file should exist. Returns false if - * file does not exist. - * - * @param string $p Filename - * @param boolean $strict File should exists - * @return string - */ - public static function real($p,$strict=true) - { - $os = (DIRECTORY_SEPARATOR == '\\') ? 'win' : 'nix'; - - # Absolute path? - if ($os == 'win') { - $_abs = preg_match('/^\w+:/',$p); - } else { - $_abs = substr($p,0,1) == '/'; - } - - # Standard path form - if ($os == 'win') { - $p = str_replace('\\','/',$p); - } - - # Adding root if !$_abs - if (!$_abs) { - $p = dirname($_SERVER['SCRIPT_FILENAME']).'/'.$p; - } - - # Clean up - $p = preg_replace('|/+|','/',$p); - - if (strlen($p) > 1) { - $p = preg_replace('|/$|','',$p); - } - - $_start = ''; - if ($os == 'win') { - list($_start,$p) = explode(':',$p); - $_start .= ':/'; - } else { - $_start = '/'; - } - $p = substr($p,1); - - # Go through - $P = explode('/',$p); - $res = array(); - - for ($i=0;$i 0) { - array_pop($res); - } - } else { - array_push($res,$P[$i]); - } - } - - $p = $_start.implode('/',$res); - - if ($strict && !@file_exists($p)) { - return false; - } - - return $p; - } - - /** - * Returns a clean file path - * - * @param string $p File path - * @return string - */ - public static function clean($p) - { - $p = str_replace('..','',$p); - $p = preg_replace('|/{2,}|','/',$p); - $p = preg_replace('|/$|','',$p); - - return $p; - } - - /** - * Path information - * - * Returns an array of information: - * - dirname - * - basename - * - extension - * - base (basename without extension) - * - * @param string $f File path - */ - public static function info($f) - { - $p = pathinfo($f); - $res = array(); - - $res['dirname'] = $p['dirname']; - $res['basename'] = $p['basename']; - $res['extension'] = isset($p['extension']) ? $p['extension'] : ''; - $res['base'] = preg_replace('/\.'.preg_quote($res['extension'],'/').'$/','',$res['basename']); - - return $res; - } - - /** - * Full path with root - * - * Returns a path with root concatenation unless path begins with a slash - * - * @param string $p File path - * @param string $root Root path - * @return string - */ - public static function fullFromRoot($p,$root) - { - if (substr($p,0,1) == '/') { - return $p; - } - - return $root.'/'.$p; - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/libs/clearbricks/common/lib.form.php b/v2/dotclear/inc/libs/clearbricks/common/lib.form.php deleted file mode 100644 index 398fe5c..0000000 --- a/v2/dotclear/inc/libs/clearbricks/common/lib.form.php +++ /dev/null @@ -1,347 +0,0 @@ -'."\n"; - - $res .= self::comboOptions($data,$default); - - $res .= ''."\n"; - - return $res; - } - - private static function comboOptions($data,$default) - { - $res = ''; - $option = ''."\n"; - $optgroup = ''."\n".'%2$s'."\n"; - - foreach($data as $k => $v) - { - if (is_array($v)) { - $res .= sprintf($optgroup,$k,self::comboOptions($v,$default)); - } elseif ($v instanceof formSelectOption) { - $res .= $v->render($default); - } else { - $s = ($v == $default) ? ' selected="selected"' : ''; - $res .= sprintf($option,$v,$k,$s); - } - } - - return $res; - } - - /** - * Radio button - * - * Returns HTML code for a radio button. $nid could be a string or an array of - * name and ID. - * - * @param string|array $nid Element ID and name - * @param string $value Element value - * @param boolean $checked True if checked - * @param string $class Element class name - * @param string $tabindex Element tabindex - * @param boolean $disabled True if disabled - * @param string $extra_html Extra HTML attributes - * - * @return string - */ - public static function radio($nid, $value, $checked='', $class='', $tabindex='', - $disabled=false, $extra_html='') - { - self::getNameAndId($nid,$name,$id); - - $res = ''; - $res .= $default; - $res .= ''; - - return $res; - } - - /** - * Hidden field - * - * Returns HTML code for an hidden field. $nid could be a string or an array of - * name and ID. - * - * @param string|array $nid Element ID and name - * @param string $value Element value - * - * @return string - */ - public static function hidden($nid,$value) - { - self::getNameAndId($nid,$name,$id); - - $res = 'name = $name; - $this->value = $value; - $this->class_name = $class_name; - $this->html = $html; - } - - /** - * Option renderer - * - * Returns option HTML code - * - * @param boolean $default Option is selected - * @return string - */ - public function render($default) - { - $attr = $this->html; - $attr .= $this->class_name ? ' class="'.$this->class_name.'"' : ''; - - if ($this->value == $default) { - $attr .= ' selected="selected"'; - } - - return sprintf($this->option,$this->value,$this->name,$attr)."\n"; - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/libs/clearbricks/common/lib.html.php b/v2/dotclear/inc/libs/clearbricks/common/lib.html.php deleted file mode 100644 index 20aba63..0000000 --- a/v2/dotclear/inc/libs/clearbricks/common/lib.html.php +++ /dev/null @@ -1,185 +0,0 @@ - "'" - ); - - $str = str_replace(array_keys($extra),array_values($extra),$str); - - return html_entity_decode($str,ENT_QUOTES,'UTF-8'); - } - - /** - * Remove markup - * - * Removes every tags, comments, cdata from string - * - * @param string $str String to clean - * @return string - */ - public static function clean($str) - { - $str = strip_tags($str); - return $str; - } - - /** - * Javascript escape - * - * Returns a protected JavaScript string - * - * @param string $str String to protect - * @return string - */ - public static function escapeJS($str) - { - $str = htmlspecialchars($str,ENT_NOQUOTES,'UTF-8'); - $str = str_replace("'","\'",$str); - $str = str_replace('"','\"',$str); - return $str; - } - - /** - * URL escape - * - * Returns an escaped URL string for HTML content - * - * @param string $str String to escape - * @return string - */ - public static function escapeURL($str) - { - return str_replace('&','&',$str); - } - - /** - * URL sanitize - * - * Encode every parts between / in url - * - * @param string $str String to satinyze - * @return string - */ - public static function sanitizeURL($str) - { - return str_replace('%2F','/',rawurlencode($str)); - } - - /** - * Remove host in URL - * - * Removes host part in URL - * - * @param string $str URL to transform - * @return string - */ - public static function stripHostURL($url) - { - return preg_replace('|^[a-z]{3,}://.*?(/.*$)|','$1',$url); - } - - /** - * Set links to absolute ones - * - * Appends $root URL to URIs attributes in $str. - * - * @param string $str HTML to transform - * @param string $root Base URL - * @return string - */ - public static function absoluteURLs($str,$root) - { - self::$url_root = $root; - $attr = 'action|background|cite|classid|codebase|data|href|longdesc|profile|src|usemap'; - - $str = preg_replace_callback('/((?:'.$attr.')=")(.*?)(")/msu',array('self','absoluteURLHandler'),$str); - - foreach (self::$absolute_regs as $r) { - $str = preg_replace_callback($r,array('self','absoluteURLHandler'),$str); - } - - self::$url_root = null; - return $str; - } - - private static function absoluteURLHandler($m) - { - $url = $m[2]; - - $link = str_replace('%','%%',$m[1]).'%s'.str_replace('%','%%',$m[3]); - $host = preg_replace('|^([a-z]{3,}://)(.*?)/(.*)$|','$1$2',self::$url_root); - - $parse = parse_url($m[2]); - if (empty($parse['scheme'])) - { - if (strpos($url,'/') === 0) { - $url = $host.$url; - } elseif (strpos($url,'#') === 0) { - $url = self::$url_root.$url; - } elseif (preg_match('|/$|',self::$url_root)) { - $url = self::$url_root.$url; - } else { - $url = dirname(self::$url_root).'/'.$url; - } - } - - return sprintf($link,$url); - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/libs/clearbricks/common/lib.http.php b/v2/dotclear/inc/libs/clearbricks/common/lib.http.php deleted file mode 100644 index 7fec31a..0000000 --- a/v2/dotclear/inc/libs/clearbricks/common/lib.http.php +++ /dev/null @@ -1,452 +0,0 @@ -[a-z]{2}(?:-[a-z]{2})?)(?:;q=(?P[.0-9]*))?/'; - if (preg_match_all($pattern,$_SERVER['HTTP_ACCEPT_LANGUAGE'],$acclang) !== false) - { - foreach($acclang['priority'] as $i => $p) - { - if ($p == '') $acclang['priority'][$i]=1; - } - array_multisort($acclang['priority'], SORT_DESC,$acclang['lang']); - } - return $acclang['lang']; - } else { - return $acclang; - } - } - - /** - * HTTP Cache - * - * Sends HTTP cache headers (304) according to a list of files and an optionnal. - * list of timestamps. - * - * @param array $files Files on which check mtime - * @param array $mod_ts List of timestamps - */ - public static function cache($files,$mod_ts=array()) - { - if (empty($files) || !is_array($files)) { - return; - } - - array_walk($files,create_function('&$v','$v = filemtime($v);')); - - $array_ts = array_merge($mod_ts,$files); - - rsort($array_ts); - $now = time(); - $ts = min($array_ts[0],$now); - - $since = null; - if (!empty($_SERVER['HTTP_IF_MODIFIED_SINCE'])) { - $since = $_SERVER['HTTP_IF_MODIFIED_SINCE']; - $since = preg_replace ('/^(.*)(Mon|Tue|Wed|Thu|Fri|Sat|Sun)(.*)(GMT)(.*)/', '$2$3 GMT', $since); - $since = strtotime($since); - $since = ($since <= $now) ? $since : null; - } - - # Common headers list - $headers[] = 'Last-Modified: '.gmdate('D, d M Y H:i:s',$ts).' GMT'; - $headers[] = 'Cache-Control: must-revalidate, max-age='.abs((integer) self::$cache_max_age); - $headers[] = 'Pragma:'; - - if ($since >= $ts) - { - self::head(304,'Not Modified'); - foreach ($headers as $v) { - header($v); - } - exit; - } - else - { - header('Date: '.gmdate('D, d M Y H:i:s',$now).' GMT'); - foreach ($headers as $v) { - header($v); - } - } - } - - /** - * HTTP Etag - * - * Sends HTTP cache headers (304) according to a list of etags in client request. - * - * @param string $p_content Response page content - */ - public static function etag() - { - # We create an etag from all arguments - $args = func_get_args(); - if (empty($args)) { - return; - } - - $etag = '"'.md5(implode('',$args)).'"'; - unset($args); - - header('ETag: '.$etag); - - # Do we have a previously sent content? - if (!empty($_SERVER['HTTP_IF_NONE_MATCH'])) - { - foreach (explode(',',$_SERVER['HTTP_IF_NONE_MATCH']) as $i) - { - if (stripslashes(trim($i)) == $etag) { - self::head(304,'Not Modified'); - exit; - } - } - } - } - - /** - * HTTP Header - * - * Sends an HTTP code and message to client. - * - * @param string $code HTTP code - * @param string $msg Message - */ - public static function head($code,$msg=null) - { - $status_mode = preg_match('/cgi/',PHP_SAPI); - - if (!$msg) - { - $msg_codes = array( - 100 => 'Continue', - 101 => 'Switching Protocols', - 200 => 'OK', - 201 => 'Created', - 202 => 'Accepted', - 203 => 'Non-Authoritative Information', - 204 => 'No Content', - 205 => 'Reset Content', - 206 => 'Partial Content', - 300 => 'Multiple Choices', - 301 => 'Moved Permanently', - 302 => 'Found', - 303 => 'See Other', - 304 => 'Not Modified', - 305 => 'Use Proxy', - 307 => 'Temporary Redirect', - 400 => 'Bad Request', - 401 => 'Unauthorized', - 402 => 'Payment Required', - 403 => 'Forbidden', - 404 => 'Not Found', - 405 => 'Method Not Allowed', - 406 => 'Not Acceptable', - 407 => 'Proxy Authentication Required', - 408 => 'Request Timeout', - 409 => 'Conflict', - 410 => 'Gone', - 411 => 'Length Required', - 412 => 'Precondition Failed', - 413 => 'Request Entity Too Large', - 414 => 'Request-URI Too Long', - 415 => 'Unsupported Media Type', - 416 => 'Requested Range Not Satisfiable', - 417 => 'Expectation Failed', - 500 => 'Internal Server Error', - 501 => 'Not Implemented', - 502 => 'Bad Gateway', - 503 => 'Service Unavailable', - 504 => 'Gateway Timeout', - 505 => 'HTTP Version Not Supported' - ); - - $msg = isset($msg_codes[$code]) ? $msg_codes[$code] : '-'; - } - - if ($status_mode) { - header('Status: '.$code.' '.$msg); - } else { - header($msg, true, $code); - } - } - - /** - * Trim request - * - * Trims every value in GET, POST, REQUEST and COOKIE vars. - * Removes magic quotes if magic_quote_gpc is on. - */ - public static function trimRequest() - { - if(!empty($_GET)) { - array_walk($_GET,array('self','trimRequestInVar')); - } - if(!empty($_POST)) { - array_walk($_POST,array('self','trimRequestInVar')); - } - if(!empty($_REQUEST)) { - array_walk($_REQUEST,array('self','trimRequestInVar')); - } - if(!empty($_COOKIE)) { - array_walk($_COOKIE,array('self','trimRequestInVar')); - } - } - - /* - * - * To be deleted? - * -- saymonz, 29.04.2011 - * - //* - - private static function trimRequestHandler(&$v,$key) - { - $v = self::trimRequestInVar($v); - } - - //*/ - - private static function trimRequestInVar(&$value,$key) - { - if (is_array($value)) - { - foreach ($value as $k => &$v) - { - if (is_array($v)) { - self::trimRequestInVar($v,$k); - } else { - if (get_magic_quotes_gpc()) { - $v = stripslashes($v); - } - $v = trim($v); - } - } - } - else - { - if (get_magic_quotes_gpc()) { - $value = stripslashes($value); - } - $value = trim($value); - } - } - - /** - * Unset global variables - * - * If register_globals is on, removes every GET, POST, COOKIE, REQUEST, SERVER, - * ENV, FILES vars from GLOBALS. - */ - public static function unsetGlobals() - { - if (!ini_get('register_globals')) { - return; - } - - if (isset($_REQUEST['GLOBALS'])) { - throw new Exception('GLOBALS overwrite attempt detected'); - } - - # Variables that shouldn't be unset - $no_unset = array('GLOBALS','_GET','_POST','_COOKIE','_REQUEST', - '_SERVER','_ENV','_FILES'); - - $input = array_merge($_GET,$_POST,$_COOKIE,$_SERVER,$_ENV,$_FILES, - (isset($_SESSION) && is_array($_SESSION) ? $_SESSION : array())); - - foreach ($input as $k => $v) { - if (!in_array($k,$no_unset) && isset($GLOBALS[$k]) ) { - $GLOBALS[$k] = null; - unset($GLOBALS[$k]); - } - } - } -} -?> diff --git a/v2/dotclear/inc/libs/clearbricks/common/lib.l10n.php b/v2/dotclear/inc/libs/clearbricks/common/lib.l10n.php deleted file mode 100644 index 63543d0..0000000 --- a/v2/dotclear/inc/libs/clearbricks/common/lib.l10n.php +++ /dev/null @@ -1,453 +0,0 @@ - 'Afaraf', - 'ab' => 'Аҧсуа', - 'ae' => 'Avesta', - 'af' => 'Afrikaans', - 'ak' => 'Akan', - 'am' => 'አማርኛ', - 'an' => 'Aragonés', - 'ar' => '‫العربية', - 'as' => 'অসমীয়া', - 'av' => 'авар мацӀ', - 'ay' => 'Aymar aru', - 'az' => 'Azərbaycan dili', - 'ba' => 'башҡорт теле', - 'be' => 'Беларуская', - 'bg' => 'български език', - 'bh' => 'भोजपुरी', - 'bi' => 'Bislama', - 'bm' => 'Bamanankan', - 'bn' => 'বাংলা', - 'bo' => 'བོད་ཡིག', - 'br' => 'Brezhoneg', - 'bs' => 'Bosanski jezik', - 'ca' => 'Català', - 'ce' => 'нохчийн мотт', - 'ch' => 'Chamoru', - 'co' => 'Corsu', - 'cr' => 'ᓀᐦᐃᔭᐍᐏᐣ', - 'cs' => 'Česky', - 'cu' => 'ѩзыкъ Словѣньскъ', - 'cv' => 'чӑваш чӗлхи', - 'cy' => 'Cymraeg', - 'da' => 'Dansk', - 'de' => 'Deutsch', - 'dv' => '‫ދިވެހި', - 'dz' => 'རྫོང་ཁ', - 'ee' => 'Ɛʋɛgbɛ', - 'el' => 'Ελληνικά', - 'en' => 'English', - 'eo' => 'Esperanto', - 'es' => 'español', - 'et' => 'Eesti keel', - 'eu' => 'Euskara', - 'fa' => '‫فارسی', - 'ff' => 'Fulfulde', - 'fi' => 'Suomen kieli', - 'fj' => 'Vosa Vakaviti', - 'fo' => 'Føroyskt', - 'fr' => 'Français', - 'fy' => 'Frysk', - 'ga' => 'Gaeilge', - 'gd' => 'Gàidhlig', - 'gl' => 'Galego', - 'gn' => "Avañe'ẽ", - 'gu' => 'ગુજરાતી', - 'gv' => 'Ghaelg', - 'ha' => '‫هَوُسَ', - 'he' => '‫עברית', - 'hi' => 'हिन्दी', - 'ho' => 'Hiri Motu', - 'hr' => 'Hrvatski', - 'ht' => 'Kreyòl ayisyen', - 'hu' => 'Magyar', - 'hy' => 'Հայերեն', - 'hz' => 'Otjiherero', - 'ia' => 'Interlingua', - 'id' => 'Bahasa Indonesia', - 'ie' => 'Interlingue', - 'ig' => 'Igbo', - 'ii' => 'ꆇꉙ', - 'ik' => 'Iñupiaq', - 'io' => 'Ido', - 'is' => 'Íslenska', - 'it' => 'Italiano', - 'iu' => 'ᐃᓄᒃᑎᑐᑦ', - 'ja' => '日本語', - 'jv' => 'Basa Jawa', - 'ka' => 'ქართული', - 'kg' => 'KiKongo', - 'ki' => 'Gĩkũyũ', - 'kj' => 'Kuanyama', - 'kk' => 'Қазақ тілі', - 'kl' => 'Kalaallisut', - 'km' => 'ភាសាខ្មែរ', - 'kn' => 'ಕನ್ನಡ', - 'ko' => '한국어', - 'kr' => 'Kanuri', - 'ks' => 'कश्मीरी', - 'ku' => 'Kurdî', - 'kv' => 'коми кыв', - 'kw' => 'Kernewek', - 'ky' => 'кыргыз тили', - 'la' => 'Latine', - 'lb' => 'Lëtzebuergesch', - 'lg' => 'Luganda', - 'li' => 'Limburgs', - 'ln' => 'Lingála', - 'lo' => 'ພາສາລາວ', - 'lt' => 'Lietuvių kalba', - 'lu' => 'Luba-Katanga ', - 'lv' => 'Latviešu valoda', - 'mg' => 'Malagasy fiteny', - 'mh' => 'Kajin M̧ajeļ', - 'mi' => 'Te reo Māori', - 'mk' => 'македонски јазик', - 'ml' => 'മലയാളം', - 'mn' => 'Монгол', - 'mo' => 'Limba moldovenească', - 'mr' => 'मराठी', - 'ms' => 'Bahasa Melayu', - 'mt' => 'Malti', - 'my' => 'ဗမာစာ', - 'na' => 'Ekakairũ Naoero', - 'nb' => 'Norsk bokmål', - 'nd' => 'isiNdebele', - 'ne' => 'नेपाली', - 'ng' => 'Owambo', - 'nl' => 'Nederlands', - 'nl-be' => 'Nederlands (Belgium)', - 'nn' => 'Norsk nynorsk', - 'no' => 'Norsk', - 'nr' => 'Ndébélé', - 'nv' => 'Diné bizaad', - 'ny' => 'ChiCheŵa', - 'oc' => 'Occitan', - 'oj' => 'ᐊᓂᔑᓈᐯᒧᐎᓐ', - 'om' => 'Afaan Oromoo', - 'or' => 'ଓଡ଼ିଆ', - 'os' => 'Ирон æвзаг', - 'pa' => 'ਪੰਜਾਬੀ', - 'pi' => 'पाऴि', - 'pl' => 'Polski', - 'ps' => '‫پښتو', - 'pt' => 'Português', - 'pt-br' => 'Português (Brasil)', - 'qu' => 'Runa Simi', - 'rm' => 'Rumantsch grischun', - 'rn' => 'kiRundi', - 'ro' => 'Română', - 'ru' => 'Русский', - 'rw' => 'IKinyarwanda', - 'sa' => 'संस्कृतम्', - 'sc' => 'sardu', - 'sd' => 'सिन्धी', - 'se' => 'Davvisámegiella', - 'sg' => 'Yângâ tî sängö', - 'sh' => 'SrpskoHrvatski', - 'si' => 'සිංහල', - 'sk' => 'Slovenčina', - 'sl' => 'Slovenščina', - 'sm' => "Gagana fa'a Samoa", - 'sn' => 'chiShona', - 'so' => 'Soomaaliga', - 'sq' => 'Shqip', - 'sr' => 'српски језик', - 'ss' => 'SiSwati', - 'st' => 'seSotho', - 'su' => 'Basa Sunda', - 'sv' => 'Svenska', - 'sw' => 'Kiswahili', - 'ta' => 'தமிழ்', - 'te' => 'తెలుగు', - 'tg' => 'тоҷикӣ', - 'th' => 'ไทย', - 'ti' => 'ትግርኛ', - 'tk' => 'Türkmen', - 'tl' => 'Tagalog', - 'tn' => 'seTswana', - 'to' => 'faka Tonga', - 'tr' => 'Türkçe', - 'ts' => 'xiTsonga', - 'tt' => 'татарча', - 'tw' => 'Twi', - 'ty' => 'Reo Mā`ohi', - 'ug' => 'Uyƣurqə', - 'uk' => 'Українська', - 'ur' => '‫اردو', - 'uz' => "O'zbek", - 've' => 'tshiVenḓa', - 'vi' => 'Tiếng Việt', - 'vo' => 'Volapük', - 'wa' => 'Walon', - 'wo' => 'Wollof', - 'xh' => 'isiXhosa', - 'yi' => '‫ייִדיש', - 'yo' => 'Yorùbá', - 'za' => 'Saɯ cueŋƅ', - 'zh' => '中文', - 'zh-hk' => '中文 (香港)', - 'zh-tw' => '中文 (臺灣)', - 'zu' => 'isiZulu' - ); - } - - $langs = self::$langs; - if ($name_with_code) { - foreach ($langs as $k => &$v) { - $v = $k.' - '.$v; - } - } - - if ($flip) { - return array_flip($langs); - } - - return $langs; - } - - /** - * Text direction - * - * Returns text direction for a given language. - * If text direction was forced with {@link $text_direction}, returns this - * value. - * - * @param string $lang Language code - * @return string - */ - public static function getTextDirection($lang) - { - if (self::$text_direction) { - return self::$text_direction; - } - - if (preg_match('/^(ar|dv|fa|ha|he|ps|ur|yi)$/i',$lang)) { - return 'rtl'; - } - return 'ltr'; - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/libs/clearbricks/common/lib.text.php b/v2/dotclear/inc/libs/clearbricks/common/lib.text.php deleted file mode 100644 index f4483cf..0000000 --- a/v2/dotclear/inc/libs/clearbricks/common/lib.text.php +++ /dev/null @@ -1,355 +0,0 @@ - $p) { - $str = preg_replace('/['.$p.']/u',$r,$str); - } - - return $str; - } - - /** - * String to URL - * - * Transforms a string to a proper URL. - * - * @param string $str String to transform - * @param boolean $with_slashes Keep slashes in URL - * @return string - */ - public static function str2URL($str,$with_slashes=true) - { - $str = self::deaccent($str); - $str = preg_replace('/[^A-Za-z0-9_\s\'\:\/[\]-]/','',$str); - - return self::tidyURL($str,$with_slashes); - } - - /** - * URL cleanup - * - * @param string $str URL to tidy - * @param boolean $keep_slashes Keep slashes in URL - * @param boolean $keep_spaces Keep spaces in URL - * @return string - */ - public static function tidyURL($str,$keep_slashes=true,$keep_spaces=false) - { - $str = strip_tags($str); - $str = str_replace(array('?','&','#','=','+','<','>','"','%'),'',$str); - $str = str_replace("'",' ',$str); - $str = preg_replace('/[\s]+/u',' ',trim($str)); - - if (!$keep_slashes) { - $str = str_replace('/','-',$str); - } - - if (!$keep_spaces) { - $str = str_replace(' ','-',$str); - } - - $str = preg_replace('/[-]+/','-',$str); - - # Remove path changes in URL - $str = preg_replace('%^/%','',$str); - $str = preg_replace('%\.+/%','',$str); - - return $str; - } - - /** - * Cut string - * - * Returns a cuted string on spaced at given length $l. - * - * @param string $str String to cut - * @param integer $l Length to keep - * @return string - */ - public static function cutString($str,$l) - { - $s = preg_split('/([\s]+)/u',$str,-1,PREG_SPLIT_DELIM_CAPTURE); - - $res = ''; - $L = 0; - - if (mb_strlen($s[0]) >= $l) { - return mb_substr($s[0],0,$l); - } - - foreach ($s as $v) - { - $L = $L+mb_strlen($v); - - if ($L > $l) { - break; - } else { - $res .= $v; - } - } - - return trim($res); - } - - /** - * Split words - * - * Returns an array of words from a given string. - * - * @param string $str Words to split - * @return array - */ - public static function splitWords($str) - { - $non_word = '\x{0000}-\x{002F}\x{003A}-\x{0040}\x{005b}-\x{0060}\x{007B}-\x{007E}\x{00A0}-\x{00BF}\s'; - if (preg_match_all('/([^'.$non_word.']{3,})/msu',html::clean($str),$match)) { - foreach ($match[1] as $i => $v) { - $match[1][$i] = mb_strtolower($v); - } - return $match[1]; - } - return array(); - } - - /** - * Encoding detection - * - * Returns the encoding (in lowercase) of given $str. - * - * @param string $str String - * @return string - */ - public static function detectEncoding($str) - { - return strtolower(mb_detect_encoding($str.' ', - 'UTF-8,ISO-8859-1,ISO-8859-2,ISO-8859-3,'. - 'ISO-8859-4,ISO-8859-5,ISO-8859-6,ISO-8859-7,ISO-8859-8,'. - 'ISO-8859-9,ISO-8859-10,ISO-8859-13,ISO-8859-14,ISO-8859-15')); - } - - /** - * UTF8 conversions - * - * Returns an UTF-8 converted string. If $encoding is not specified, the - * function will try to detect encoding. - * - * @param string $str String to convert - * @param string $encoding Optionnal "from" encoding - * @return string - */ - public static function toUTF8($str,$encoding=null) - { - if (!$encoding) { - $encoding = self::detectEncoding($str); - } - - if ($encoding != 'utf-8') { - $str = iconv($encoding,'UTF-8',$str); - } - - return $str; - } - - /** - * Find bad UTF8 tokens - * - * Locates the first bad byte in a UTF-8 string returning it's - * byte index in the string - * PCRE Pattern to locate bad bytes in a UTF-8 string - * Comes from W3 FAQ: Multilingual Forms - * Note: modified to include full ASCII range including control chars - * - * @copyright Harry Fuecks - * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html GNU LGPL 2.1 - * @link http://phputf8.sourceforge.net - * - * @param string $str String to search - * @return integer|false - */ - public static function utf8badFind($str) - { - $UTF8_BAD = - '([\x00-\x7F]'. # ASCII (including control chars) - '|[\xC2-\xDF][\x80-\xBF]'. # non-overlong 2-byte - '|\xE0[\xA0-\xBF][\x80-\xBF]'. # excluding overlongs - '|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}'. # straight 3-byte - '|\xED[\x80-\x9F][\x80-\xBF]'. # excluding surrogates - '|\xF0[\x90-\xBF][\x80-\xBF]{2}'. # planes 1-3 - '|[\xF1-\xF3][\x80-\xBF]{3}'. # planes 4-15 - '|\xF4[\x80-\x8F][\x80-\xBF]{2}'. # plane 16 - '|(.{1}))'; # invalid byte - $pos = 0; - $badList = array(); - - while (preg_match('/'.$UTF8_BAD.'/S', $str, $matches)) { - $bytes = strlen($matches[0]); - if ( isset($matches[2])) { - return $pos; - } - $pos += $bytes; - $str = substr($str,$bytes); - } - return false; - } - - /** - * UTF8 cleanup - * - * Replaces non utf8 bytes in $str by $repl. - * - * @copyright Harry Fuecks - * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html GNU LGPL 2.1 - * @link http://phputf8.sourceforge.net - * - * @param string $str String to clean - * @param string $repl Replacement string - * @return string - */ - public static function cleanUTF8($str,$repl='?') - { - while (($bad_index = self::utf8badFind($str)) !== false) { - $str = substr_replace($str,$repl,$bad_index,1); - } - - return $str; - } - - /** - * BOM removal - * - * Removes BOM from the begining of a string if present. - * - * @param string $str String to clean - * @return string - */ - public static function removeBOM($str) - { - if (substr_count($str,'')) { - return str_replace('','',$str); - } - - return $str; - } - - /** - * Quoted printable conversion - * - * Encodes given str to quoted printable - * - * @param string $str String to encode - * @return string - */ - public static function QPEncode($str) - { - $res = ''; - - foreach (preg_split("/\r?\n/msu", $str) as $line) - { - $l = ''; - preg_match_all('/./',$line,$m); - - foreach ($m[0] as $c) - { - $a = ord($c); - - if ($a < 32 || $a == 61 || $a > 126) { - $c = sprintf('=%02X',$a); - } - - $l .= $c; - } - - $res .= $l."\r\n"; - } - return $res; - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/libs/clearbricks/common/tz.dat b/v2/dotclear/inc/libs/clearbricks/common/tz.dat deleted file mode 100644 index 09cc367..0000000 --- a/v2/dotclear/inc/libs/clearbricks/common/tz.dat +++ /dev/null @@ -1,407 +0,0 @@ -Africa/Abidjan -Africa/Accra -Africa/Addis_Ababa -Africa/Algiers -Africa/Asmera -Africa/Bamako -Africa/Bangui -Africa/Banjul -Africa/Bissau -Africa/Blantyre -Africa/Brazzaville -Africa/Bujumbura -Africa/Cairo -Africa/Casablanca -Africa/Ceuta -Africa/Conakry -Africa/Dakar -Africa/Dar_es_Salaam -Africa/Djibouti -Africa/Douala -Africa/El_Aaiun -Africa/Freetown -Africa/Gaborone -Africa/Harare -Africa/Johannesburg -Africa/Kampala -Africa/Khartoum -Africa/Kigali -Africa/Kinshasa -Africa/Lagos -Africa/Libreville -Africa/Lome -Africa/Luanda -Africa/Lubumbashi -Africa/Lusaka -Africa/Malabo -Africa/Maputo -Africa/Maseru -Africa/Mbabane -Africa/Mogadishu -Africa/Monrovia -Africa/Nairobi -Africa/Ndjamena -Africa/Niamey -Africa/Nouakchott -Africa/Ouagadougou -Africa/Porto-Novo -Africa/Sao_Tome -Africa/Timbuktu -Africa/Tripoli -Africa/Tunis -Africa/Windhoek - - -America/Adak -America/Anchorage -America/Anguilla -America/Antigua -America/Araguaina -America/Argentina/Buenos_Aires -America/Argentina/Catamarca -America/Argentina/ComodRivadavia -America/Argentina/Cordoba -America/Argentina/Jujuy -America/Argentina/La_Rioja -America/Argentina/Mendoza -America/Argentina/Rio_Gallegos -America/Argentina/San_Juan -America/Argentina/Tucuman -America/Argentina/Ushuaia -America/Aruba -America/Asuncion -America/Bahia -America/Barbados -America/Belem -America/Belize -America/Boa_Vista -America/Bogota -America/Boise -America/Cambridge_Bay -America/Campo_Grande -America/Cancun -America/Caracas -America/Cayenne -America/Cayman -America/Chicago -America/Chihuahua -America/Costa_Rica -America/Cuiaba -America/Curacao -America/Danmarkshavn -America/Dawson -America/Dawson_Creek -America/Denver -America/Detroit -America/Dominica -America/Edmonton -America/Eirunepe -America/El_Salvador -America/Fortaleza -America/Glace_Bay -America/Godthab -America/Goose_Bay -America/Grand_Turk -America/Grenada -America/Guadeloupe -America/Guatemala -America/Guayaquil -America/Guyana -America/Halifax -America/Havana -America/Hermosillo -America/Indiana/Indianapolis -America/Indiana/Knox -America/Indiana/Marengo -America/Indiana/Vevay -America/Indianapolis -America/Inuvik -America/Iqaluit -America/Jamaica -America/Juneau -America/Kentucky/Louisville -America/Kentucky/Monticello -America/La_Paz -America/Lima -America/Los_Angeles -America/Louisville -America/Maceio -America/Managua -America/Manaus -America/Martinique -America/Mazatlan -America/Menominee -America/Merida -America/Mexico_City -America/Miquelon -America/Monterrey -America/Montevideo -America/Montreal -America/Montserrat -America/Nassau -America/New_York -America/Nipigon -America/Nome -America/Noronha -America/North_Dakota/Center -America/Panama -America/Pangnirtung -America/Paramaribo -America/Phoenix -America/Port-au-Prince -America/Port_of_Spain -America/Porto_Velho -America/Puerto_Rico -America/Rainy_River -America/Rankin_Inlet -America/Recife -America/Regina -America/Rio_Branco -America/Santiago -America/Santo_Domingo -America/Sao_Paulo -America/Scoresbysund -America/Shiprock -America/St_Johns -America/St_Kitts -America/St_Lucia -America/St_Thomas -America/St_Vincent -America/Swift_Current -America/Tegucigalpa -America/Thule -America/Thunder_Bay -America/Tijuana -America/Toronto -America/Tortola -America/Vancouver -America/Whitehorse -America/Winnipeg -America/Yakutat -America/Yellowknife - - -Antarctica/Casey -Antarctica/Davis -Antarctica/DumontDUrville -Antarctica/Mawson -Antarctica/McMurdo -Antarctica/Palmer -Antarctica/Rothera -Antarctica/South_Pole -Antarctica/Syowa -Antarctica/Vostok - - -Arctic/Longyearbyen - - -Asia/Aden -Asia/Almaty -Asia/Amman -Asia/Anadyr -Asia/Aqtau -Asia/Aqtobe -Asia/Ashgabat -Asia/Baghdad -Asia/Bahrain -Asia/Baku -Asia/Bangkok -Asia/Beirut -Asia/Bishkek -Asia/Brunei -Asia/Calcutta -Asia/Choibalsan -Asia/Chongqing -Asia/Colombo -Asia/Damascus -Asia/Dhaka -Asia/Dili -Asia/Dubai -Asia/Dushanbe -Asia/Gaza -Asia/Harbin -Asia/Hong_Kong -Asia/Hovd -Asia/Irkutsk -Asia/Istanbul -Asia/Jakarta -Asia/Jayapura -Asia/Jerusalem -Asia/Kabul -Asia/Kamchatka -Asia/Karachi -Asia/Kashgar -Asia/Katmandu -Asia/Krasnoyarsk -Asia/Kuala_Lumpur -Asia/Kuching -Asia/Kuwait -Asia/Macau -Asia/Magadan -Asia/Makassar -Asia/Manila -Asia/Muscat -Asia/Nicosia -Asia/Novosibirsk -Asia/Omsk -Asia/Oral -Asia/Phnom_Penh -Asia/Pontianak -Asia/Pyongyang -Asia/Qatar -Asia/Qyzylorda -Asia/Rangoon -Asia/Riyadh -Asia/Saigon -Asia/Sakhalin -Asia/Samarkand -Asia/Seoul -Asia/Shanghai -Asia/Singapore -Asia/Taipei -Asia/Tashkent -Asia/Tbilisi -Asia/Tehran -Asia/Thimphu -Asia/Tokyo -Asia/Ulaanbaatar -Asia/Urumqi -Asia/Vientiane -Asia/Vladivostok -Asia/Yakutsk -Asia/Yekaterinburg -Asia/Yerevan - - -Atlantic/Azores -Atlantic/Bermuda -Atlantic/Canary -Atlantic/Cape_Verde -Atlantic/Faeroe -Atlantic/Jan_Mayen -Atlantic/Madeira -Atlantic/Reykjavik -Atlantic/South_Georgia -Atlantic/St_Helena -Atlantic/Stanley - - -Australia/Adelaide -Australia/Brisbane -Australia/Broken_Hill -Australia/Darwin -Australia/Hobart -Australia/Lindeman -Australia/Lord_Howe -Australia/Melbourne -Australia/Perth -Australia/Sydney - - -Europe/Amsterdam -Europe/Andorra -Europe/Athens -Europe/Belfast -Europe/Belgrade -Europe/Berlin -Europe/Bratislava -Europe/Brussels -Europe/Bucharest -Europe/Budapest -Europe/Chisinau -Europe/Copenhagen -Europe/Dublin -Europe/Gibraltar -Europe/Helsinki -Europe/Istanbul -Europe/Kaliningrad -Europe/Kiev -Europe/Lisbon -Europe/Ljubljana -Europe/London -Europe/Luxembourg -Europe/Madrid -Europe/Malta -Europe/Mariehamn -Europe/Minsk -Europe/Monaco -Europe/Moscow -Europe/Nicosia -Europe/Oslo -Europe/Paris -Europe/Prague -Europe/Riga -Europe/Rome -Europe/Samara -Europe/San_Marino -Europe/Sarajevo -Europe/Simferopol -Europe/Skopje -Europe/Sofia -Europe/Stockholm -Europe/Tallinn -Europe/Tirane -Europe/Uzhgorod -Europe/Vaduz -Europe/Vatican -Europe/Vienna -Europe/Vilnius -Europe/Warsaw -Europe/Zagreb -Europe/Zaporozhye -Europe/Zurich - - -Indian/Antananarivo -Indian/Chagos -Indian/Christmas -Indian/Cocos -Indian/Comoro -Indian/Kerguelen -Indian/Mahe -Indian/Maldives -Indian/Mauritius -Indian/Mayotte -Indian/Reunion - - -Pacific/Apia -Pacific/Auckland -Pacific/Chatham -Pacific/Easter -Pacific/Efate -Pacific/Enderbury -Pacific/Fakaofo -Pacific/Fiji -Pacific/Funafuti -Pacific/Galapagos -Pacific/Gambier -Pacific/Guadalcanal -Pacific/Guam -Pacific/Honolulu -Pacific/Johnston -Pacific/Kiritimati -Pacific/Kosrae -Pacific/Kwajalein -Pacific/Majuro -Pacific/Marquesas -Pacific/Midway -Pacific/Nauru -Pacific/Niue -Pacific/Norfolk -Pacific/Noumea -Pacific/Pago_Pago -Pacific/Palau -Pacific/Pitcairn -Pacific/Ponape -Pacific/Port_Moresby -Pacific/Rarotonga -Pacific/Saipan -Pacific/Tahiti -Pacific/Tarawa -Pacific/Tongatapu -Pacific/Truk -Pacific/Wake -Pacific/Wallis -Pacific/Yap \ No newline at end of file diff --git a/v2/dotclear/inc/libs/clearbricks/dblayer/class.cursor.php b/v2/dotclear/inc/libs/clearbricks/dblayer/class.cursor.php deleted file mode 100644 index 45b604f..0000000 --- a/v2/dotclear/inc/libs/clearbricks/dblayer/class.cursor.php +++ /dev/null @@ -1,258 +0,0 @@ - - * openCursor('table'); - * $cur->field1 = 1; - * $cur->field2 = 'foo'; - * $cur->insert(); // Insert field ... - * - * $cur->update('WHERE field3 = 4'); // ... or update field - * ?> - * - * - * @see dbLayer::openCursor() - * @param dbLayer &$con Connection object - * @param string $table Table name - */ - public function __construct($con,$table) - { - $this->__con =& $con; - $this->setTable($table); - } - - /** - * Set table - * - * Changes working table and resets data - * - * @param string $table Table name - */ - public function setTable($table) - { - $this->__table = $table; - $this->__data = array(); - } - - /** - * Set field - * - * Set value $v to a field named $n. Value could be - * an string, an integer, a float, a null value or an array. - * - * If value is an array, its first value will be interpreted as a SQL - * command. String values will be automatically escaped. - * - * @see __set() - * @param string $n Field name - * @param mixed $v Field value - */ - public function setField($n,$v) - { - $this->__data[$n] = $v; - } - - /** - * Unset field - * - * Remove a field from data set. - * - * @param string $n Field name - */ - public function unsetField($n) - { - unset($this->__data[$n]); - } - - /** - * Field exists - * - * @return boolean true if field named $n exists - */ - public function isField($n) - { - return isset($this->__data[$n]); - } - - /** - * Field value - * - * @see __get() - * @return mixed value for a field named $n - */ - public function getField($n) - { - if (isset($this->__data[$n])) { - return $this->__data[$n]; - } - - return null; - } - - /** - * Set Field - * - * Magic alias for {@link setField()} - */ - public function __set($n,$v) - { - $this->setField($n,$v); - } - - /** - * Field value - * - * Magic alias for {@link getField()} - * - * @return mixed value for a field named $n - */ - public function __get($n) - { - return $this->getField($n); - } - - /** - * Empty data set - * - * Removes all data from data set - */ - public function clean() - { - $this->__data = array(); - } - - private function formatFields() - { - $data = array(); - - foreach ($this->__data as $k => $v) - { - $k = $this->__con->escapeSystem($k); - - if (is_null($v)) { - $data[$k] = 'NULL'; - } elseif (is_string($v)) { - $data[$k] = "'".$this->__con->escape($v)."'"; - } elseif (is_array($v)) { - $data[$k] = is_string($v[0]) ? "'".$this->__con->escape($v[0])."'" : $v[0]; - } else { - $data[$k] = $v; - } - } - - return $data; - } - - /** - * Get insert query - * - * Returns the generated INSERT query - * - * @return string - */ - public function getInsert() - { - $data = $this->formatFields(); - - $insReq = 'INSERT INTO '.$this->__con->escapeSystem($this->__table)." (\n". - implode(",\n",array_keys($data))."\n) VALUES (\n". - implode(",\n",array_values($data))."\n) "; - - return $insReq; - } - - /** - * Get update query - * - * Returns the generated UPDATE query - * - * @param string $where WHERE condition - * @return string - */ - public function getUpdate($where) - { - $data = $this->formatFields(); - $fields = array(); - - $updReq = 'UPDATE '.$this->__con->escapeSystem($this->__table)." SET \n"; - - foreach ($data as $k => $v) { - $fields[] = $k.' = '.$v.""; - } - - $updReq .= implode(",\n",$fields); - $updReq .= "\n".$where; - - return $updReq; - } - - /** - * Execute insert query - * - * Executes the generated INSERT query - */ - public function insert() - { - if (!$this->__table) { - throw new Exception('No table name.'); - } - - $insReq = $this->getInsert(); - - $this->__con->execute($insReq); - - return true; - } - - /** - * Execute update query - * - * Executes the generated UPDATE query - * - * @param string $where WHERE condition - */ - public function update($where) - { - if (!$this->__table) { - throw new Exception('No table name.'); - } - - $updReq = $this->getUpdate($where); - - $this->__con->execute($updReq); - - return true; - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/libs/clearbricks/dblayer/class.mysql.php b/v2/dotclear/inc/libs/clearbricks/dblayer/class.mysql.php deleted file mode 100644 index 5e68130..0000000 --- a/v2/dotclear/inc/libs/clearbricks/dblayer/class.mysql.php +++ /dev/null @@ -1,253 +0,0 @@ -db_post_connect($link,$database); - - return $link; - } - - /** @ignore */ - public function db_pconnect($host,$user,$password,$database) - { - if (!function_exists('mysql_pconnect')) { - throw new Exception('PHP MySQL functions are not available'); - } - - if (($link = @mysql_pconnect($host,$user,$password)) === false) { - throw new Exception('Unable to connect to database'); - } - - $this->db_post_connect($link,$database); - - return $link; - } - - /** @ignore */ - private function db_post_connect($link,$database) - { - if (@mysql_select_db($database,$link) === false) { - throw new Exception('Unable to use database '.$database); - } - - if (version_compare($this->db_version($link),'4.1','>=')) - { - $this->db_query($link,'SET NAMES utf8'); - $this->db_query($link,'SET CHARACTER SET utf8'); - $this->db_query($link,"SET COLLATION_CONNECTION = 'utf8_general_ci'"); - $this->db_query($link,"SET COLLATION_SERVER = 'utf8_general_ci'"); - $this->db_query($link,"SET CHARACTER_SET_SERVER = 'utf8'"); - $this->db_query($link,"SET CHARACTER_SET_DATABASE = 'utf8'"); - } - } - - /** @ignore */ - public function db_close($handle) - { - if (is_resource($handle)) { - mysql_close($handle); - } - } - - /** @ignore */ - public function db_version($handle) - { - if (is_resource($handle)) { - return mysql_get_server_info(); - } - return null; - } - - /** @ignore */ - public function db_query($handle,$query) - { - if (is_resource($handle)) - { - $res = @mysql_query($query,$handle); - if ($res === false) { - $e = new Exception($this->db_last_error($handle)); - $e->sql = $query; - throw $e; - } - return $res; - } - } - - /** @ignore */ - public function db_exec($handle,$query) - { - return $this->db_query($handle,$query); - } - - /** @ignore */ - public function db_num_fields($res) - { - if (is_resource($res)) { - return mysql_num_fields($res); - } - return 0; - } - - /** @ignore */ - public function db_num_rows($res) - { - if (is_resource($res)) { - return mysql_num_rows($res); - } - return 0; - } - - /** @ignore */ - public function db_field_name($res,$position) - { - if (is_resource($res)) { - return mysql_field_name($res,$position); - } - } - - /** @ignore */ - public function db_field_type($res,$position) - { - if (is_resource($res)) { - return mysql_field_type($res,$position); - } - } - - /** @ignore */ - public function db_fetch_assoc($res) - { - if (is_resource($res)) { - return mysql_fetch_assoc($res); - } - } - - /** @ignore */ - public function db_result_seek($res,$row) - { - if (is_resource($res)) { - return mysql_data_seek($res,$row); - } - } - - /** @ignore */ - public function db_changes($handle,$res) - { - if (is_resource($handle)) { - return mysql_affected_rows($handle); - } - } - - /** @ignore */ - public function db_last_error($handle) - { - if (is_resource($handle)) - { - $e = mysql_error($handle); - if ($e) { - return $e.' ('.mysql_errno($handle).')'; - } - } - return false; - } - - /** @ignore */ - public function db_escape_string($str,$handle=null) - { - if (is_resource($handle)) { - return mysql_real_escape_string($str,$handle); - } else { - return mysql_escape_string($str); - } - } - - /** @ignore */ - public function db_write_lock($table) - { - try { - $this->execute('LOCK TABLES '.$this->escapeSystem($table).' WRITE'); - } catch (Exception $e) { - # As lock is a privilege in MySQL, we can avoid errors with weak_locks static var - if (!self::$weak_locks) { - throw $e; - } - } - } - - /** @ignore */ - public function db_unlock() - { - try { - $this->execute('UNLOCK TABLES'); - } catch (Exception $e) { - if (!self::$weak_locks) { - throw $e; - } - } - } - - /** @ignore */ - public function vacuum($table) - { - $this->execute('OPTIMIZE TABLE '.$this->escapeSystem($table)); - } - - /** @ignore */ - public function dateFormat($field,$pattern) - { - $pattern = str_replace('%M','%i',$pattern); - - return 'DATE_FORMAT('.$field.','."'".$this->escape($pattern)."') "; - } - - /** @ignore */ - public function concat() - { - $args = func_get_args(); - return 'CONCAT('.implode(',',$args).')'; - } - - /** @ignore */ - public function escapeSystem($str) - { - return '`'.$str.'`'; - } - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/libs/clearbricks/dblayer/class.mysqli.php b/v2/dotclear/inc/libs/clearbricks/dblayer/class.mysqli.php deleted file mode 100644 index cf6c9a7..0000000 --- a/v2/dotclear/inc/libs/clearbricks/dblayer/class.mysqli.php +++ /dev/null @@ -1,284 +0,0 @@ -db_post_connect($link,$database); - - return $link; - } - - /** @ignore */ - public function db_pconnect($host,$user,$password,$database) - { - // No pconnect wtih mysqli, below code is for comatibility - return $this->db_connect($host,$user,$password,$database); - } - - /** @ignore */ - private function db_post_connect($link,$database) - { - if (version_compare($this->db_version($link),'4.1','>=')) - { - $this->db_query($link,'SET NAMES utf8'); - $this->db_query($link,'SET CHARACTER SET utf8'); - $this->db_query($link,"SET COLLATION_CONNECTION = 'utf8_general_ci'"); - $this->db_query($link,"SET COLLATION_SERVER = 'utf8_general_ci'"); - $this->db_query($link,"SET CHARACTER_SET_SERVER = 'utf8'"); - $this->db_query($link,"SET CHARACTER_SET_DATABASE = 'utf8'"); - $link->set_charset("utf8"); - } - } - - /** @ignore */ - public function db_close($handle) - { - if ($handle instanceof MySQLi) { - mysqli_close($handle); - } - } - - /** @ignore */ - public function db_version($handle) - { - if ($handle instanceof MySQLi) { - return mysqli_get_server_info($handle); - } - return null; - } - - /** @ignore */ - public function db_query($handle,$query) - { - if ($handle instanceof MySQLi) - { - - $res = @mysqli_query($handle, $query); - if ($res === false) { - $e = new Exception($this->db_last_error($handle)); - $e->sql = $query; - throw $e; - } - return $res; - } - } - - /** @ignore */ - public function db_exec($handle,$query) - { - return $this->db_query($handle,$query); - } - - /** @ignore */ - public function db_num_fields($res) - { - if ($res instanceof MySQLi_Result) { - //return mysql_num_fields($res); - return $res->field_count; - } - return 0; - } - - /** @ignore */ - public function db_num_rows($res) - { - if ($res instanceof MySQLi_Result) { - return $res->num_rows; - } - return 0; - } - - /** @ignore */ - public function db_field_name($res,$position) - { - if ($res instanceof MySQLi_Result) { - $res->field_seek($position); - $finfo = $res->fetch_field(); - return $finfo->name; - } - } - - /** @ignore */ - public function db_field_type($res,$position) - { - if ($res instanceof MySQLi_Result) { - $res->field_seek($position); - $finfo = $res->fetch_field(); - return $this->_convert_types($finfo->type); - } - } - - /** @ignore */ - public function db_fetch_assoc($res) - { - if ($res instanceof MySQLi_Result) { - $v = $res->fetch_assoc(); - return($v === NULL) ? false : $v; - } - } - - /** @ignore */ - public function db_result_seek($res,$row) - { - if ($res instanceof MySQLi_Result) { - return $res->data_seek($row); - } - } - - /** @ignore */ - public function db_changes($handle,$res) - { - if ($handle instanceof MySQLi) { - return mysqli_affected_rows($handle); - } - } - - /** @ignore */ - public function db_last_error($handle) - { - if ($handle instanceof MySQLi) - { - $e = mysqli_error($handle); - if ($e) { - return $e.' ('.mysqli_errno($handle).')'; - } - } - return false; - } - - /** @ignore */ - public function db_escape_string($str,$handle=null) - { - if ($handle instanceof MySQLi) { - - return mysqli_real_escape_string($handle, $str); - } - return addslashes($str); - } - - /** @ignore */ - public function db_write_lock($table) - { - try { - $this->execute('LOCK TABLES '.$this->escapeSystem($table).' WRITE'); - } catch (Exception $e) { - # As lock is a privilege in MySQL, we can avoid errors with weak_locks static var - if (!self::$weak_locks) { - throw $e; - } - } - } - - /** @ignore */ - public function db_unlock() - { - try { - $this->execute('UNLOCK TABLES'); - } catch (Exception $e) { - if (!self::$weak_locks) { - throw $e; - } - } - } - - /** @ignore */ - public function vacuum($table) - { - $this->execute('OPTIMIZE TABLE '.$this->escapeSystem($table)); - } - - /** @ignore */ - public function dateFormat($field,$pattern) - { - $pattern = str_replace('%M','%i',$pattern); - - return 'DATE_FORMAT('.$field.','."'".$this->escape($pattern)."') "; - } - - /** @ignore */ - public function concat() - { - $args = func_get_args(); - return 'CONCAT('.implode(',',$args).')'; - } - - /** @ignore */ - public function escapeSystem($str) - { - return '`'.$str.'`'; - } - - protected function _convert_types($id) { - $id2type = array( - '1'=>'int', - '2'=>'int', - '3'=>'int', - '8'=>'int', - '9'=>'int', - - '16'=>'int', //BIT type recognized as unknown with mysql adapter - - '4'=>'real', - '5'=>'real', - '246'=>'real', - - '253'=>'string', - '254'=>'string', - - '10'=>'date', - '11'=>'time', - '12'=>'datetime', - '13'=>'year', - - '7'=>'timestamp', - - '252'=>'blob' - - ); - $type = 'unknown'; - - if(isset($id2type[$id])) $type = $id2type[$id]; - - return $type; - } - - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/libs/clearbricks/dblayer/class.pgsql.php b/v2/dotclear/inc/libs/clearbricks/dblayer/class.pgsql.php deleted file mode 100644 index 0f16b32..0000000 --- a/v2/dotclear/inc/libs/clearbricks/dblayer/class.pgsql.php +++ /dev/null @@ -1,280 +0,0 @@ -get_connection_string($host,$user,$password,$database); - - if (($link = @pg_connect($str)) === false) { - throw new Exception('Unable to connect to database'); - } - - return $link; - } - - /** @ignore */ - public function db_pconnect($host,$user,$password,$database) - { - if (!function_exists('pg_pconnect')) { - throw new Exception('PHP PostgreSQL functions are not available'); - } - - $str = $this->get_connection_string($host,$user,$password,$database); - - if (($link = @pg_pconnect($str)) === false) { - throw new Exception('Unable to connect to database'); - } - - return $link; - } - - /** @ignore */ - public function db_close($handle) - { - if (is_resource($handle)) { - pg_close($handle); - } - } - - /** @ignore */ - public function db_version($handle) - { - if (is_resource($handle)) - { - return pg_parameter_status($handle,'server_version'); - } - return null; - } - - /** @ignore */ - public function db_query($handle,$query) - { - if (is_resource($handle)) - { - $res = @pg_query($handle,$query); - if ($res === false) { - $e = new Exception($this->db_last_error($handle)); - $e->sql = $query; - throw $e; - } - return $res; - } - } - - /** @ignore */ - public function db_exec($handle,$query) - { - return $this->db_query($handle,$query); - } - - /** @ignore */ - public function db_num_fields($res) - { - if (is_resource($res)) { - return pg_num_fields($res); - } - return 0; - } - - /** @ignore */ - public function db_num_rows($res) - { - if (is_resource($res)) { - return pg_num_rows($res); - } - return 0; - } - - /** @ignore */ - public function db_field_name($res,$position) - { - if (is_resource($res)) { - return pg_field_name($res,$position); - } - } - - /** @ignore */ - public function db_field_type($res,$position) - { - if (is_resource($res)) { - return pg_field_type($res,$position); - } - } - - /** @ignore */ - public function db_fetch_assoc($res) - { - if (is_resource($res)) { - return pg_fetch_assoc($res); - } - } - - /** @ignore */ - public function db_result_seek($res,$row) - { - if (is_resource($res)) { - return pg_result_seek($res,(int) $row); - } - return false; - } - - /** @ignore */ - public function db_changes($handle,$res) - { - if (is_resource($handle) && is_resource($res)) { - return pg_affected_rows($res); - } - } - - /** @ignore */ - public function db_last_error($handle) - { - if (is_resource($handle)) { - return pg_last_error($handle); - } - return false; - } - - /** @ignore */ - public function db_escape_string($str,$handle=null) - { - return pg_escape_string($str); - } - - /** @ignore */ - public function db_write_lock($table) - { - $this->execute('BEGIN'); - $this->execute('LOCK TABLE '.$this->escapeSystem($table).' IN EXCLUSIVE MODE'); - } - - /** @ignore */ - public function db_unlock() - { - $this->execute('END'); - } - - /** @ignore */ - public function vacuum($table) - { - $this->execute('VACUUM FULL '.$this->escapeSystem($table)); - } - - /** @ignore */ - public function dateFormat($field,$pattern) - { - $rep = array( - '%d' => 'DD', - '%H' => 'HH24', - '%M' => 'MI', - '%m' => 'MM', - '%S' => 'SS', - '%Y' => 'YYYY' - ); - - $pattern = str_replace(array_keys($rep),array_values($rep),$pattern); - - return 'TO_CHAR('.$field.','."'".$this->escape($pattern)."') "; - } - - /** - * Function call - * - * Calls a PostgreSQL function an returns the result as a {@link record}. - * After $name, you can add any parameters you want to append - * them to the PostgreSQL function. You don't need to escape string in - * arguments. - * - * @param string $name Function name - * @return record - */ - public function callFunction($name) - { - $data = func_get_args(); - array_shift($data); - - foreach ($data as $k => $v) - { - if (is_null($v)) { - $data[$k] = 'NULL'; - } elseif (is_string($v)) { - $data[$k] = "'".$this->escape($v)."'"; - } elseif (is_array($v)) { - $data[$k] = $v[0]; - } else { - $data[$k] = $v; - } - } - - $req = - 'SELECT '.$name."(\n". - implode(",\n",array_values($data)). - "\n) "; - - return $this->select($req); - } - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/libs/clearbricks/dblayer/class.sqlite.php b/v2/dotclear/inc/libs/clearbricks/dblayer/class.sqlite.php deleted file mode 100644 index eea52eb..0000000 --- a/v2/dotclear/inc/libs/clearbricks/dblayer/class.sqlite.php +++ /dev/null @@ -1,278 +0,0 @@ -db_post_connect($link,$database); - - return $link; - } - - /** @ignore */ - public function db_pconnect($host,$user,$password,$database) - { - if (!class_exists('PDO') || !in_array('sqlite',PDO::getAvailableDrivers())) { - throw new Exception('PDO SQLite class is not available'); - } - - $link = new PDO('sqlite:'.$database,null,null,array(PDO::ATTR_PERSISTENT => true)); - $this->db_post_connect($link,$database); - - return $link; - } - - /** @ignore */ - private function db_post_connect($handle,$database) - { - if ($handle instanceof PDO) { - $this->db_exec($handle,'PRAGMA short_column_names = 1'); - $this->db_exec($handle,'PRAGMA encoding = "UTF-8"'); - $handle->sqliteCreateFunction('now',array($this,'now'),0); - } - } - - /** @ignore */ - public function db_close($handle) - { - if ($handle instanceof PDO) { - $handle = null; - $this->__link = null; - } - } - - /** @ignore */ - public function db_version($handle) - { - if ($handle instanceof PDO) { - return $handle->getAttribute(PDO::ATTR_SERVER_VERSION); - } - } - - # There is no other way than get all selected data in a staticRecord - /** @ignore */ - public function select($sql) - { - $result = $this->db_query($this->__link,$sql); - $this->__last_result =& $result; - - $info = array(); - $info['con'] =& $this; - $info['cols'] = $this->db_num_fields($result); - $info['info'] = array(); - - for ($i=0; $i<$info['cols']; $i++) { - $info['info']['name'][] = $this->db_field_name($result,$i); - $info['info']['type'][] = $this->db_field_type($result,$i); - } - - $data = array(); - while ($r = $result->fetch(PDO::FETCH_ASSOC)) - { - $R = array(); - foreach ($r as $k => $v) { - $k = preg_replace('/^(.*)\./','',$k); - $R[$k] = $v; - $R[] =& $R[$k]; - } - $data[] = $R; - } - - $info['rows'] = count($data); - $result->closeCursor(); - - return new staticRecord($data,$info); - } - - /** @ignore */ - public function db_query($handle,$query) - { - if ($handle instanceof PDO) - { - $res = $handle->query($query); - if ($res === false) { - $e = new Exception($this->db_last_error($handle)); - $e->sql = $query; - throw $e; - } - - return $res; - } - } - - /** @ignore */ - public function db_exec($handle,$query) - { - return $this->db_query($handle,$query); - } - - /** @ignore */ - public function db_num_fields($res) - { - if ($res instanceof PDOStatement) { - return $res->columnCount(); - } - return 0; - } - - /** @ignore */ - public function db_num_rows($res) - { - } - - /** @ignore */ - public function db_field_name($res,$position) - { - if ($res instanceof PDOStatement) { - $m = $res->getColumnMeta($position); - return preg_replace('/^.+\./','',$m['name']); # we said short_column_names = 1 - } - } - - /** @ignore */ - public function db_field_type($res,$position) - { - if ($res instanceof PDOStatement) { - $m = $res->getColumnMeta($position); - switch ($m['pdo_type']) { - case PDO::PARAM_BOOL: - return 'boolean'; - case PDO::PARAM_NULL: - return 'null'; - case PDO::PARAM_INT: - return 'integer'; - default: - return 'varchar'; - } - } - } - - /** @ignore */ - public function db_fetch_assoc($res) - { - } - - /** @ignore */ - public function db_result_seek($res,$row) - { - } - - /** @ignore */ - public function db_changes($handle,$res) - { - if ($res instanceof PDOStatement) { - return $res->rowCount(); - } - } - - /** @ignore */ - public function db_last_error($handle) - { - if ($handle instanceof PDO) { - $err = $handle->errorInfo(); - return $err[2].' ('.$err[1].')'; - } - return false; - } - - /** @ignore */ - public function db_escape_string($str,$handle=null) - { - if ($handle instanceof PDO) { - return trim($handle->quote($str),"'"); - } - return $str; - } - - /** @ignore */ - public function escapeSystem($str) - { - return "'".$this->escape($str)."'"; - } - - /** @ignore */ - public function begin() - { - if ($this->__link instanceof PDO) { - $this->__link->beginTransaction(); - } - } - - /** @ignore */ - public function commit() - { - if ($this->__link instanceof PDO) { - $this->__link->commit(); - } - } - - /** @ignore */ - public function rollback() - { - if ($this->__link instanceof PDO) { - $this->__link->rollBack(); - } - } - - /** @ignore */ - public function db_write_lock($table) - { - $this->execute('BEGIN EXCLUSIVE TRANSACTION'); - } - - /** @ignore */ - public function db_unlock() - { - $this->execute('END'); - } - - /** @ignore */ - public function vacuum($table) - { - $this->execute('VACUUM '.$this->escapeSystem($table)); - } - - /** @ignore */ - public function dateFormat($field,$pattern) - { - return "strftime('".$this->escape($pattern)."',".$field.') '; - } - - # Internal SQLite function that adds NOW() SQL function. - /** @ignore */ - public function now() - { - return date('Y-m-d H:i:s'); - } - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/libs/clearbricks/dblayer/dblayer.php b/v2/dotclear/inc/libs/clearbricks/dblayer/dblayer.php deleted file mode 100644 index 21f1b8d..0000000 --- a/v2/dotclear/inc/libs/clearbricks/dblayer/dblayer.php +++ /dev/null @@ -1,1208 +0,0 @@ -$position. - * - * @param resource $res Resource result - * @param integer $position Field position - * @return string - */ - function db_field_name($res,$position); - - /** - * Field type - * - * This method should return the field type a the given position - * $position. - * - * @param resource $res Resource result - * @param integer $position Field position - * @return string - */ - function db_field_type($res,$position); - - /** - * Fetch result - * - * This method should fetch one line of result and return an associative array - * with field name as key and field value as value. - * - * @param resource $res Resource result - * @return array - */ - function db_fetch_assoc($res); - - /** - * Move result cursor - * - * This method should move result cursor on given row position $row - * and return true on success. - * - * @param resource $res Resource result - * @param integer $position Row position - * @return boolean - */ - function db_result_seek($res,$row); - - /** - * Affected rows - * - * This method should return number of rows affected by INSERT, UPDATE or - * DELETE queries. - * - * @param resource $handle Resource link - * @param resource $res Resource result - * @return integer - */ - function db_changes($handle,$res); - - /** - * Last error - * - * This method should return the last error string for the current connection. - * - * @param resource $handle Resource link - * @return string - */ - function db_last_error($handle); - - /** - * Escape string - * - * This method should return an escaped string for the current connection. - * - * @param string $str String to escape - * @param resource $handle Resource link - * @return string - */ - function db_escape_string($str,$handle=null); - - /** - * Acquiere Write lock - * - * This method should lock the given table in write access. - * - * @param string $table Table name - */ - function db_write_lock($table); - - /** - * Release lock - * - * This method should releases an acquiered lock. - */ - function db_unlock(); -} - -/** -* Database Abstraction Layer class -* -* Base class for database abstraction. Each driver extends this class and -* implements {@link i_dbLayer} interface. -* -* @package Clearbricks -* @subpackage DBLayer -*/ -class dbLayer -{ - /** @var string Driver name */ - protected $__driver = null; - - /** @var string Database version */ - protected $__version = null; - - /** @var resource Database resource link */ - protected $__link; - - /** @var resource Last result resource link */ - protected $__last_result; - - /** - * Start connection - * - * Static function to use to init database layer. Returns a object extending - * dbLayer. - * - * @param string $driver Driver name - * @param string $host Database hostname - * @param string $database Database name - * @param string $user User ID - * @param string $password Password - * @param string $persistent Persistent connection - * @return object - */ - public static function init($driver,$host,$database,$user='',$password='',$persistent=false) - { - if (file_exists(dirname(__FILE__).'/class.'.$driver.'.php')) { - require_once dirname(__FILE__).'/class.'.$driver.'.php'; - $driver_class = $driver.'Connection'; - } else { - trigger_error('Unable to load DB layer for '.$driver,E_USER_ERROR); - exit(1); - } - - return new $driver_class($host,$database,$user,$password,$persistent); - } - - /** - * @param string $host Database hostname - * @param string $database Database name - * @param string $user User ID - * @param string $password Password - * @param string $persistent Persistent connection - */ - public function __construct($host,$database,$user='',$password='',$persistent=false) - { - if ($persistent) { - $this->__link = $this->db_pconnect($host,$user,$password,$database); - } else { - $this->__link = $this->db_connect($host,$user,$password,$database); - } - - $this->__version = $this->db_version($this->__link); - $this->__database = $database; - } - - /** - * Closes database connection. - */ - public function close() - { - $this->db_close($this->__link); - } - - /** - * Returns database driver name - * - * @return string - */ - public function driver() - { - return $this->__driver; - } - - /** - * Returns database driver version - * - * @return string - */ - public function version() - { - return $this->__version; - } - - /** - * Returns current database name - * - * @return string - */ - public function database() - { - return $this->__database; - } - - /** - * Returns link resource - * - * @return resource - */ - public function link() - { - return $this->__link; - } - - /** - * Run query and get results - * - * Executes a query and return a {@link record} object. - * - * @param string $sql SQL query - * @return record - */ - public function select($sql) - { - $result = $this->db_query($this->__link,$sql); - - $this->__last_result =& $result; - - $info = array(); - $info['con'] =& $this; - $info['cols'] = $this->db_num_fields($result); - $info['rows'] = $this->db_num_rows($result); - $info['info'] = array(); - - for ($i=0; $i<$info['cols']; $i++) { - $info['info']['name'][] = $this->db_field_name($result,$i); - $info['info']['type'][] = $this->db_field_type($result,$i); - } - - return new record($result,$info); - } - - /** - * Run query - * - * Executes a query and return true if succeed - * - * @param string $sql SQL query - * @return true - */ - public function execute($sql) - { - $result = $this->db_exec($this->__link,$sql); - - $this->__last_result =& $result; - - return true; - } - - /** - * Begin transaction - * - * Begins a transaction. Transaction should be {@link commit() commited} - * or {@link rollback() rollbacked}. - */ - public function begin() - { - $this->execute('BEGIN'); - } - - /** - * Commit transaction - * - * Commits a previoulsy started transaction. - */ - public function commit() - { - $this->execute('COMMIT'); - } - - /** - * Rollback transaction - * - * Rollbacks a previously started transaction. - */ - public function rollback() - { - $this->execute('ROLLBACK'); - } - - /** - * Aquiere write lock - * - * This method lock the given table in write access. - * - * @param string $table Table name - */ - public function writeLock($table) - { - $this->db_write_lock($table); - } - - /** - * Release lock - * - * This method releases an acquiered lock. - */ - public function unlock() - { - $this->db_unlock(); - } - - /** - * Vacuum the table given in argument. - * - * @param string $table Table name - */ - public function vacuum($table) - { - } - - /** - * Changed rows - * - * Returns the number of lines affected by the last DELETE, INSERT or UPDATE - * query. - * - * @return integer - */ - public function changes() - { - return $this->db_changes($this->__link,$this->__last_result); - } - - /** - * Last error - * - * Returns the last database error or false if no error. - * - * @return string|false - */ - public function error() - { - $err = $this->db_last_error($this->__link); - - if (!$err) { - return false; - } - - return $err; - } - - /** - * Date formatting - * - * Returns a query fragment with date formater. - * - * The following modifiers are accepted: - * - * - %d : Day of the month, numeric - * - %H : Hour 24 (00..23) - * - %M : Minute (00..59) - * - %m : Month numeric (01..12) - * - %S : Seconds (00..59) - * - %Y : Year, numeric, four digits - * - * @param string $field Field name - * @param string $pattern Date format - * @return string - */ - public function dateFormat($field,$pattern) - { - return - 'TO_CHAR('.$field.','."'".$this->escape($pattern)."') "; - } - - /** - * Query Limit - * - * Returns a LIMIT query fragment. $arg1 could be an array of - * offset and limit or an integer which is only limit. If $arg2 - * is given and $arg1 is an integer, it would become limit. - * - * @param array|integer $arg1 array or integer with limit intervals - * @param array|null $arg2 integer or null - * @return string - */ - public function limit($arg1, $arg2=null) - { - if (is_array($arg1)) - { - $arg1 = array_values($arg1); - $arg2 = isset($arg1[1]) ? $arg1[1] : null; - $arg1 = $arg1[0]; - } - - if ($arg2 === null) { - $sql = ' LIMIT '.(integer) $arg1.' '; - } else { - $sql = ' LIMIT '.(integer) $arg2.' OFFSET '.(integer) $arg1.' '; - } - - return $sql; - } - - /** - * IN fragment - * - * Returns a IN query fragment where $in could be an array, a string, - * an integer or null - * - * @param array|string|integer|null $in "IN" values - * @return string - */ - public function in($in) - { - if (is_null($in)) - { - return ' IN (NULL) '; - } - elseif (is_string($in)) - { - return " IN ('".$this->escape($in)."') "; - } - elseif (is_array($in)) - { - foreach ($in as $i => $v) { - if (is_null($v)) { - $in[$i] = 'NULL'; - } elseif (is_string($v)) { - $in[$i] = "'".$this->escape($v)."'"; - } - } - return ' IN ('.implode(',',$in).') '; - } - else - { - return ' IN ( '.(integer) $in.') '; - } - } - - /** - * Concat strings - * - * Returns SQL concatenation of methods arguments. Theses arguments - * should be properly escaped when needed. - * - * @return string - */ - public function concat() - { - $args = func_get_args(); - return implode(' || ',$args); - } - - /** - * Escape string - * - * Returns SQL protected string or array values. - * - * @param string|array $i String or array to protect - * @return string|array - */ - public function escape($i) - { - if (is_array($i)) { - foreach ($i as $k => $s) { - $i[$k] = $this->db_escape_string($s,$this->__link); - } - return $i; - } - - return $this->db_escape_string($i,$this->__link); - } - - /** - * System escape string - * - * Returns SQL system protected string. - * - * @param string $str String to protect - * @return string - */ - public function escapeSystem($str) - { - return '"'.$str.'"'; - } - - /** - * Cursor object - * - * Returns a new instance of {@link cursor} class on $table for - * the current connection. - * - * @param string $table Target table - * @return cursor - */ - public function openCursor($table) - { - return new cursor($this,$table); - } -} - -/** -* Query Result Record Class -* -* This class acts as an iterator over database query result. It does not fetch -* all results on instantiation and thus, depending on database engine, should not -* fill PHP process memory. -* -* @package Clearbricks -* @subpackage DBLayer -*/ -class record implements Iterator, Countable -{ - /** @var resource Database resource link */ - protected $__link; - - /** @var resource Query result resource */ - protected $__result; - - /** @var array Result information array */ - protected $__info; - - /** @var array List of static functions that extend record */ - protected $__extend = array(); - - /** @var integer Current result position */ - protected $__index = 0; - - /** @var array Current result row content */ - protected $__row = false; - - private $__fetch = false; - - /** - * Constructor - * - * Creates class instance from result link and some informations. - * $info is an array with the following content: - * - * - con => database object instance - * - cols => number of columns - * - rows => number of rows - * - info[name] => an array with columns names - * - info[type] => an array with columns types - * - * @param resource $result Resource result - * @param array $info Information array - */ - public function __construct($result,$info) - { - $this->__result = $result; - $this->__info = $info; - $this->__link = $info['con']->link(); - $this->index(0); - } - - /** - * To staticRecord - * - * Converts this record to a {@link staticRecord} instance. - */ - public function toStatic() - { - if ($this instanceof staticRecord) { - return $this; - } - return new staticRecord($this->__result,$this->__info); - } - - /** - * Magic call - * - * Magic call function. Calls function added by {@link extend()} if exists, passing it - * self object and arguments. - * - * @return mixed - */ - public function __call($f,$args) - { - if (isset($this->__extend[$f])) - { - array_unshift($args,$this); - return call_user_func_array($this->__extend[$f],$args); - } - - trigger_error('Call to undefined method record::'.$f.'()',E_USER_ERROR); - } - - /** - * Magic get - * - * Alias for {@link field()}. - * - * @param string|integer $n Field name - * @return string - */ - public function __get($n) - { - return $this->field($n); - } - - /** - * Get field - * - * Alias for {@link field()}. - * - * @param string|integer $n Field name - * @return string - */ - public function f($n) - { - return $this->field($n); - } - - /** - * Get field - * - * Retrieve field value by its name or column position. - * - * @param string|integer $n Field name - * @return string - */ - public function field($n) - { - return $this->__row[$n]; - } - - /** - * Field exists - * - * Returns true if a field exists. - * - * @param string $n Field name - * @return string - */ - public function exists($n) - { - return isset($this->__row[$n]); - } - - /** - * Field isset - * - * Returns true if a field exists (magic method from PHP 5.1). - * - * @param string $n Field name - * @return string - */ - public function __isset($n) - { - return isset($this->__row[$n]); - } - - /** - * Extend record - * - * Extends this instance capabilities by adding all public static methods of - * $class to current instance. Class methods should take at least - * this record as first parameter. - * - * @see __call() - * - * @param string $class Class name - */ - public function extend($class) - { - if (!class_exists($class)) { - return; - } - - $c = new ReflectionClass($class); - foreach ($c->getMethods() as $m) { - if ($m->isStatic() && $m->isPublic()) { - $this->__extend[$m->name] = array($class,$m->name); - } - } - } - - /** - * Returns record extensions. - * - * @return array - */ - public function extensions() - { - return $this->__extend; - } - - private function setRow() - { - $this->__row = $this->__info['con']->db_fetch_assoc($this->__result); - - if ($this->__row !== false) - { - foreach ($this->__row as $k => $v) { - $this->__row[] =& $this->__row[$k]; - } - return true; - } - else - { - return false; - } - } - - /** - * Returns the current index position (0 is first) or move to $row if - * specified. - * - * @param integer $row Row number to move - * @return integer - */ - public function index($row=null) - { - if ($row === null) { - return $this->__index === null ? 0 : $this->__index; - } - - if ($row < 0 || $row+1 > $this->__info['rows']) { - return false; - } - - if ($this->__info['con']->db_result_seek($this->__result,(integer) $row)) - { - $this->__index = $row; - $this->setRow(); - $this->__info['con']->db_result_seek($this->__result,(integer) $row); - return true; - } - return false; - } - - /** - * One step move index - * - * This method moves index forward and return true until index is not - * the last one. You can use it to loop over record. Example: - * - * fetch()) { - * echo $rs->field1; - * } - * ?> - * - * - * @return boolean - */ - public function fetch() - { - if (!$this->__fetch) { - $this->__fetch = true; - $i = -1; - } else { - $i = $this->__index; - } - - if (!$this->index($i+1)) { - $this->__fetch = false; - $this->__index = 0; - return false; - } - - return true; - } - - /** - * Moves index to first position. - * - * @return boolean - */ - public function moveStart() - { - $this->__fetch = false; - return $this->index(0); - } - - /** - * Moves index to last position. - * - * @return boolean - */ - public function moveEnd() - { - return $this->index($this->__info['rows']-1); - } - - /** - * Moves index to next position. - * - * @return boolean - */ - public function moveNext() - { - return $this->index($this->__index+1); - } - - /** - * Moves index to previous position. - * - * @return boolean - */ - public function movePrev() - { - return $this->index($this->__index-1); - } - - /** - * @return boolean true if index is at last position - */ - public function isEnd() - { - return $this->__index+1 == $this->count(); - } - - /** - * @return boolean true if index is at first position. - */ - public function isStart() - { - return $this->__index <= 0; - } - - /** - * @return boolean true if record contains no result. - */ - public function isEmpty() - { - return $this->count() == 0; - } - - /** - * @return integer number of rows in record - */ - public function count() - { - return $this->__info['rows']; - } - - /** - * @return array array of columns, with name as key and type as value. - */ - public function columns() - { - return $this->__info['info']['name']; - } - - /** - * @return array all rows in record. - */ - public function rows() - { - return $this->getData(); - } - - /** - * All data - * - * Returns an array of all rows in record. This method is called by rows(). - * - * @return array - */ - protected function getData() - { - $res = array(); - - if ($this->count() == 0) { - return $res; - } - - $this->__info['con']->db_result_seek($this->__result,0); - while (($r = $this->__info['con']->db_fetch_assoc($this->__result)) !== false) { - foreach ($r as $k => $v) { - $r[] =& $r[$k]; - } - $res[] = $r; - } - $this->__info['con']->db_result_seek($this->__result,$this->__index); - - return $res; - } - - /** - * @return array current rows. - */ - public function row() - { - return $this->__row; - } - - /* Iterator methods */ - - /** - * @see Iterator::current - */ - public function current() { - return $this; - } - - /** - * @see Iterator::key - */ - public function key() - { - return $this->index(); - } - /** - * @see Iterator::next - */ - public function next() - { - $this->fetch(); - } - - /** - * @see Iterator::rewind - */ - public function rewind() - { - $this->moveStart(); - $this->fetch(); - } - - /** - * @see Iterator::valid - */ - public function valid () - { - return $this->__fetch; - } - -} - -/** -* Query Result Static Record Class -* -* Unlike record class, this one contains all results in an associative array. -* -* @package Clearbricks -* @subpackage DBLayer -*/ -class staticRecord extends record -{ - /** @var array Data array */ - public $__data = array(); - - private $__sortfield; - private $__sortsign; - - /** @ignore */ - public function __construct($result,$info) - { - if (is_array($result)) - { - $this->__info = $info; - $this->__data = $result; - } - else - { - parent::__construct($result,$info); - $this->__data = parent::getData(); - } - - unset($this->__link); - unset($this->__result); - } - - /** - * Static record from array - * - * Returns a new instance of object from an associative array. - * - * @param array $data Data array - * @return staticRecord - */ - public static function newFromArray($data) - { - if (!is_array($data)) { - $data = array(); - } - - $data = array_values($data); - - if (empty($data) || !is_array($data[0])) { - $cols = 0; - } else { - $cols = count($data[0]); - } - - $info = array( - 'con' => null, - 'info' => null, - 'cols' => $cols, - 'rows' => count($data) - ); - - return new self($data,$info); - } - - /** @ignore */ - public function field($n) - { - return $this->__data[$this->__index][$n]; - } - - /** @ignore */ - public function exists($n) - { - return isset($this->__data[$this->__index][$n]); - } - - /** @ignore */ - public function index($row=null) - { - if ($row === null) { - return $this->__index; - } - - if ($row < 0 || $row+1 > $this->__info['rows']) { - return false; - } - - $this->__index = $row; - return true; - } - - /** @ignore */ - public function rows() - { - return $this->__data; - } - - /** - * Changes value of a given field in the current row. - * - * @param string $n Field name - * @param string $v Field value - */ - public function set($n,$v) - { - if ($this->__index === null) { - return false; - } - - $this->__data[$this->__index][$n] = $v; - } - - /** - * Sorts values by a field in a given order. - * - * @param string $field Field name - * @param string $order Sort type (asc or desc) - */ - public function sort($field,$order='asc') - { - if (!isset($this->__data[0][$field])) { - return false; - } - - $this->__sortfield = $field; - $this->__sortsign = strtolower($order) == 'asc' ? 1 : -1; - - usort($this->__data,array($this,'sortCallback')); - - $this->__sortfield = null; - $this->__sortsign = null; - } - - private function sortCallback($a,$b) - { - $a = $a[$this->__sortfield]; - $b = $b[$this->__sortfield]; - - # Integer values - if ($a == (string) (integer) $a && $b == (string) (integer) $b) { - $a = (integer) $a; - $b = (integer) $b; - return ($a - $b) * $this->__sortsign; - } - - return strcmp($a,$b) * $this->__sortsign; - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/libs/clearbricks/dbschema/class.dbschema.php b/v2/dotclear/inc/libs/clearbricks/dbschema/class.dbschema.php deleted file mode 100644 index 6a6bb47..0000000 --- a/v2/dotclear/inc/libs/clearbricks/dbschema/class.dbschema.php +++ /dev/null @@ -1,310 +0,0 @@ -array - */ - function db_get_tables(); - - /** - This method should return an associative array of columns in given table - $table with column names in keys. Each line value is an array - with following values: - - - [type] data type (string) - - [len] data length (integer or null) - - [null] is null? (boolean) - - [default] default value (string) - - @param table string Table name - @return array - */ - function db_get_columns($table); - - /** - This method should return an array of keys in given table - $table. Each line value is an array with following values: - - - [name] index name (string) - - [primary] primary key (boolean) - - [unique] unique key (boolean) - - [cols] columns (array) - - @param table string Table name - @return array - */ - function db_get_keys($table); - - /** - This method should return an array of indexes in given table - $table. Each line value is an array with following values: - - - [name] index name (string) - - [type] index type (string) - - [cols] columns (array) - - @param table string Table name - @return array - */ - function db_get_indexes($table); - - /** - This method should return an array of foreign keys in given table - $table. Each line value is an array with following values: - - - [name] key name (string) - - [c_cols] child columns (array) - - [p_table] parent table (string) - - [p_cols] parent columns (array) - - [update] on update statement (string) - - [delete] on delete statement (string) - - @param table string Table name - @return array - */ - function db_get_references($table); - - function db_create_table($name,$fields); - - function db_create_field($table,$name,$type,$len,$null,$default); - - function db_create_primary($table,$name,$cols); - - function db_create_unique($table,$name,$cols); - - function db_create_index($table,$name,$type,$cols); - - function db_create_reference($name,$c_table,$c_cols,$p_table,$p_cols,$update,$delete); - - function db_alter_field($table,$name,$type,$len,$null,$default); - - function db_alter_primary($table,$name,$newname,$cols); - - function db_alter_unique($table,$name,$newname,$cols); - - function db_alter_index($table,$name,$newname,$type,$cols); - - function db_alter_reference($name,$newname,$c_table,$c_cols,$p_table,$p_cols,$update,$delete); - - function db_drop_unique($table,$name); -} - -class dbSchema -{ - protected $con; - - public function __construct($con) - { - $this->con =& $con; - } - - public static function init($con) - { - $driver = $con->driver(); - $driver_class = $driver.'Schema'; - - if (!class_exists($driver_class)) - { - if (file_exists(dirname(__FILE__).'/class.'.$driver.'.dbschema.php')) { - require dirname(__FILE__).'/class.'.$driver.'.dbschema.php'; - } else { - trigger_error('Unable to load DB schema layer for '.$driver,E_USER_ERROR); - exit(1); - } - } - - return new $driver_class($con); - } - - /** - Database data type to universal data type conversion. - - @param type string Type name - @param leng integer Field length (in/out) - @param default string Default field value (in/out) - @return string - */ - public function dbt2udt($type,&$len,&$default) - { - $c = array( - 'bool' => 'boolean', - 'int2' => 'smallint', - 'int' => 'integer', - 'int4' => 'integer', - 'int8' => 'bigint', - 'float4' => 'real', - 'double precision' => 'float', - 'float8' => 'float', - 'decimal' => 'numeric', - 'character varying' => 'varchar', - 'character' => 'char' - ); - - if (isset($c[$type])) { - return $c[$type]; - } - - return $type; - } - - /** - Universal data type to database data tye conversion. - - @param type string Type name - @param leng integer Field length (in/out) - @param default string Default field value (in/out) - @return string - */ - public function udt2dbt($type,&$len,&$default) - { - return $type; - } - - /** - Returns an array of all table names. - - @see i_dbSchema::db_get_tables - @return array - */ - public function getTables() - { - return $this->db_get_tables(); - } - - /** - Returns an array of columns (name and type) of a given table. - - @see i_dbSchema::db_get_columns - @param table string Table name - @return array - */ - public function getColumns($table) - { - return $this->db_get_columns($table); - } - - /** - Returns an array of index of a given table. - - @see i_dbSchema::db_get_keys - @param table string Table name - @return array - */ - public function getKeys($table) - { - return $this->db_get_keys($table); - } - - /** - Returns an array of indexes of a given table. - - @see i_dbSchema::db_get_index - @param table string Table name - @return array - */ - public function getIndexes($table) - { - return $this->db_get_indexes($table); - } - - /** - Returns an array of foreign keys of a given table. - - @see i_dbSchema::db_get_references - @param table string Table name - @return array - */ - public function getReferences($table) - { - return $this->db_get_references($table); - } - - public function createTable($name,$fields) - { - return $this->db_create_table($name,$fields); - } - - public function createField($table,$name,$type,$len,$null,$default) - { - return $this->db_create_field($table,$name,$type,$len,$null,$default); - } - - public function createPrimary($table,$name,$cols) - { - return $this->db_create_primary($table,$name,$cols); - } - - public function createUnique($table,$name,$cols) - { - return $this->db_create_unique($table,$name,$cols); - } - - public function createIndex($table,$name,$type,$cols) - { - return $this->db_create_index($table,$name,$type,$cols); - } - - public function createReference($name,$c_table,$c_cols,$p_table,$p_cols,$update,$delete) - { - return $this->db_create_reference($name,$c_table,$c_cols,$p_table,$p_cols,$update,$delete); - } - - public function alterField($table,$name,$type,$len,$null,$default) - { - return $this->db_alter_field($table,$name,$type,$len,$null,$default); - } - - public function alterPrimary($table,$name,$newname,$cols) - { - return $this->db_alter_primary($table,$name,$newname,$cols); - } - - public function alterUnique($table,$name,$newname,$cols) - { - return $this->db_alter_unique($table,$name,$newname,$cols); - } - - public function alterIndex($table,$name,$newname,$type,$cols) - { - return $this->db_alter_index($table,$name,$newname,$type,$cols); - } - - public function alterReference($name,$newname,$c_table,$c_cols,$p_table,$p_cols,$update,$delete) - { - return $this->db_alter_reference($name,$newname,$c_table,$c_cols,$p_table,$p_cols,$update,$delete); - } - - public function dropUnique($table,$name) - { - return $this->db_drop_unique($table,$name); - } - - public function flushStack() - { - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/libs/clearbricks/dbschema/class.dbstruct.php b/v2/dotclear/inc/libs/clearbricks/dbschema/class.dbstruct.php deleted file mode 100644 index 2b76012..0000000 --- a/v2/dotclear/inc/libs/clearbricks/dbschema/class.dbstruct.php +++ /dev/null @@ -1,639 +0,0 @@ -con =& $con; - $this->prefix = $prefix; - } - - public function driver() - { - return $this->con->driver(); - } - - public function table($name) - { - $this->tables[$name] = new dbStructTable($name); - return $this->tables[$name]; - } - - public function __get($name) - { - if (!isset($this->tables[$name])) { - return $this->table($name); - } - - return $this->tables[$name]; - } - - public function reverse() - { - $schema = dbSchema::init($this->con); - - # Get tables - $tables = $schema->getTables(); - - foreach ($tables as $t_name) - { - if ($this->prefix && strpos($t_name,$this->prefix) !== 0) { - continue; - } - - $t = $this->table($t_name); - - # Get columns - $cols = $schema->getColumns($t_name); - - foreach ($cols as $c_name => $col) { - $type = $schema->dbt2udt($col['type'],$col['len'],$col['default']); - $t->field($c_name,$type,$col['len'],$col['null'],$col['default'],true); - } - - # Get keys - $keys = $schema->getKeys($t_name); - - foreach ($keys as $k) - { - $args = $k['cols']; - array_unshift($args,$k['name']); - - if ($k['primary']) { - call_user_func_array(array($t,'primary'),$args); - } elseif ($k['unique']) { - call_user_func_array(array($t,'unique'),$args); - } - } - - # Get indexes - $idx = $schema->getIndexes($t_name); - foreach ($idx as $i) - { - $args = array($i['name'],$i['type']); - $args = array_merge($args,$i['cols']); - - call_user_func_array(array($t,'index'),$args); - } - - # Get foreign keys - $ref = $schema->getReferences($t_name); - foreach ($ref as $r) { - $t->reference($r['name'],$r['c_cols'],$r['p_table'],$r['p_cols'],$r['update'],$r['delete']); - } - } - } - - /** - Synchronize this schema taken from database with $schema. - - @param s dbStruct Structure to synchronize with - */ - public function synchronize($s) - { - $this->tables = array(); - $this->reverse(); - - if (!($s instanceof self)) { - throw new Exception('Invalid database schema'); - } - - $tables = $s->getTables(); - - $table_create = array(); - $key_create = array(); - $index_create = array(); - $reference_create = array(); - - $field_create = array(); - $field_update = array(); - $key_update = array(); - $index_update = array(); - $reference_update = array(); - - $got_work = false; - - $schema = dbSchema::init($this->con); - - foreach ($tables as $tname => $t) - { - if (!$this->tableExists($tname)) - { - # Table does not exist, create table - $table_create[$tname] = $t->getFields(); - - # Add keys, indexes and references - $keys = $t->getKeys(); - $indexes = $t->getIndexes(); - $references = $t->getReferences(); - - foreach ($keys as $k => $v) { - $key_create[$tname][$this->prefix.$k] = $v; - } - foreach ($indexes as $k => $v) { - $index_create[$tname][$this->prefix.$k] = $v; - } - foreach ($references as $k => $v) { - $v['p_table'] = $this->prefix.$v['p_table']; - $reference_create[$tname][$this->prefix.$k] = $v; - } - - $got_work = true; - } - else # Table exists - { - # Check new fields to create - $fields = $t->getFields(); - $db_fields = $this->tables[$tname]->getFields(); - foreach ($fields as $fname => $f) - { - if (!$this->tables[$tname]->fieldExists($fname)) - { - # Field doest not exist, create it - $field_create[$tname][$fname] = $f; - $got_work = true; - } - elseif ($this->fieldsDiffer($db_fields[$fname],$f)) - { - # Field exists and differs from db version - $field_update[$tname][$fname] = $f; - $got_work = true; - } - } - - # Check keys to add or upgrade - $keys = $t->getKeys(); - $db_keys = $this->tables[$tname]->getKeys(); - - foreach ($keys as $kname => $k) - { - if ($k['type'] == 'primary' && $this->con->driver() == 'mysql') { - $kname = 'PRIMARY'; - } else { - $kname = $this->prefix.$kname; - } - - $db_kname = $this->tables[$tname]->keyExists($kname,$k['type'],$k['cols']); - if (!$db_kname) - { - # Key does not exist, create it - $key_create[$tname][$kname] = $k; - $got_work = true; - } - elseif ($this->keysDiffer($db_kname,$db_keys[$db_kname]['cols'],$kname,$k['cols'])) - { - # Key exists and differs from db version - $key_update[$tname][$db_kname] = array_merge(array('name'=>$kname),$k); - $got_work = true; - } - } - - # Check index to add or upgrade - $idx = $t->getIndexes(); - $db_idx = $this->tables[$tname]->getIndexes(); - - foreach ($idx as $iname => $i) - { - $iname = $this->prefix.$iname; - $db_iname = $this->tables[$tname]->indexExists($iname,$i['type'],$i['cols']); - - if (!$db_iname) - { - # Index does not exist, create it - $index_create[$tname][$iname] = $i; - $got_work = true; - } - elseif ($this->indexesDiffer($db_iname,$db_idx[$db_iname],$iname,$i)) - { - # Index exists and differs from db version - $index_update[$tname][$db_iname] = array_merge(array('name'=>$iname),$i); - $got_work = true; - } - } - - # Check references to add or upgrade - $ref = $t->getReferences(); - $db_ref = $this->tables[$tname]->getReferences(); - - foreach ($ref as $rname => $r) - { - $rname = $this->prefix.$rname; - $r['p_table'] = $this->prefix.$r['p_table']; - $db_rname = $this->tables[$tname]->referenceExists($rname,$r['c_cols'],$r['p_table'],$r['p_cols']); - - if (!$db_rname) - { - # Reference does not exist, create it - $reference_create[$tname][$rname] = $r; - $got_work = true; - } - elseif ($this->referencesDiffer($db_rname,$db_ref[$db_rname],$rname,$r)) - { - $reference_update[$tname][$db_rname] = array_merge(array('name'=>$rname),$r); - $got_work = true; - } - } - } - } - - if (!$got_work) { - return; - } - - # Create tables - foreach ($table_create as $table => $fields) - { - $schema->createTable($table,$fields); - } - - # Create new fields - foreach ($field_create as $tname => $fields) - { - foreach ($fields as $fname => $f) { - $schema->createField($tname,$fname,$f['type'],$f['len'],$f['null'],$f['default']); - } - } - - # Update fields - foreach ($field_update as $tname => $fields) - { - foreach ($fields as $fname => $f) { - $schema->alterField($tname,$fname,$f['type'],$f['len'],$f['null'],$f['default']); - } - } - - # Create new keys - foreach ($key_create as $tname => $keys) - { - foreach ($keys as $kname => $k) - { - if ($k['type'] == 'primary') { - $schema->createPrimary($tname,$kname,$k['cols']); - } elseif ($k['type'] == 'unique') { - $schema->createUnique($tname,$kname,$k['cols']); - } - } - } - - # Update keys - foreach ($key_update as $tname => $keys) - { - foreach ($keys as $kname => $k) - { - if ($k['type'] == 'primary') { - $schema->alterPrimary($tname,$kname,$k['name'],$k['cols']); - } elseif ($k['type'] == 'unique') { - $schema->alterUnique($tname,$kname,$k['name'],$k['cols']); - } - } - } - - # Create indexes - foreach ($index_create as $tname => $index) - { - foreach ($index as $iname => $i) { - $schema->createIndex($tname,$iname,$i['type'],$i['cols']); - } - } - - # Update indexes - foreach ($index_update as $tname => $index) - { - foreach ($index as $iname => $i) { - $schema->alterIndex($tname,$iname,$i['name'],$i['type'],$i['cols']); - } - } - - # Create references - foreach ($reference_create as $tname => $ref) - { - foreach ($ref as $rname => $r) - { - $schema->createReference($rname,$tname,$r['c_cols'],$r['p_table'],$r['p_cols'],$r['update'],$r['delete']); - } - } - - # Update references - foreach ($reference_update as $tname => $ref) - { - foreach ($ref as $rname => $r) { - $schema->alterReference($rname,$r['name'],$tname,$r['c_cols'],$r['p_table'],$r['p_cols'],$r['update'],$r['delete']); - } - } - - # Flush execution stack - $schema->flushStack(); - - return - count($table_create) + count($key_create) + count($index_create) + - count($reference_create) + count($field_create) + count($field_update) + - count($key_update) + count($index_update) + count($reference_update); - } - - public function getTables() - { - $res = array(); - foreach ($this->tables as $t => $v) - { - $res[$this->prefix.$t] = $v; - } - - return $res; - } - - public function tableExists($name) - { - return isset($this->tables[$name]); - } - - private function fieldsDiffer($db_field,$schema_field) - { - $d_type = $db_field['type']; - $d_len = (integer) $db_field['len']; - $d_default = $db_field['default']; - $d_null = $db_field['null']; - - $s_type = $schema_field['type']; - $s_len = (integer) $schema_field['len']; - $s_default = $schema_field['default']; - $s_null = $schema_field['null']; - - return $d_type != $s_type || $d_len != $s_len || $d_default != $s_default || $d_null != $s_null; - } - - private function keysDiffer($d_name,$d_cols,$s_name,$s_cols) - { - return $d_name != $s_name || $d_cols != $s_cols; - } - - private function indexesDiffer($d_name,$d_i,$s_name,$s_i) - { - return $d_name != $s_name || $d_i['cols'] != $s_i['cols'] || $d_i['type'] != $s_i['type']; - } - - private function referencesDiffer($d_name,$d_r,$s_name,$s_r) - { - return - $d_name != $s_name || $d_r['c_cols'] != $s_r['c_cols'] - || $d_r['p_table'] != $s_r['p_table'] || $d_r['p_cols'] != $s_r['p_cols'] - || $d_r['update'] != $s_r['update'] || $d_r['delete'] != $s_r['delete']; - } -} - -class dbStructTable -{ - protected $name; - protected $has_primary = false; - - protected $fields = array(); - protected $keys = array(); - protected $indexes = array(); - protected $references = array(); - - /** - Universal data types supported by dbSchema - - SMALLINT : signed 2 bytes integer - INTEGER : signed 4 bytes integer - BIGINT : signed 8 bytes integer - REAL : signed 4 bytes floating point number - FLOAT : signed 8 bytes floating point number - NUMERIC : exact numeric type - - DATE : Calendar date (day, month and year) - TIME : Time of day - TIMESTAMP : Date and time - - CHAR : A fixed n-length character string - VARCHAR : A variable length character string - TEXT : A variable length of text - */ - protected $allowed_types = array( - 'smallint','integer','bigint','real','float','numeric', - 'date','time','timestamp', - 'char','varchar','text' - ); - - public function __construct($name) - { - $this->name = $name; - return $this; - } - - public function getFields() - { - return $this->fields; - } - - public function getKeys($primary=null) - { - return $this->keys; - } - - public function getIndexes() - { - return $this->indexes; - } - - public function getReferences() - { - return $this->references; - } - - public function fieldExists($name) - { - return isset($this->fields[$name]); - } - - public function keyExists($name,$type,$cols) - { - # Look for key with the same name - if (isset($this->keys[$name])) { - return $name; - } - - # Look for key with the same columns list and type - foreach ($this->keys as $n => $k) - { - if ($k['cols'] == $cols && $k['type'] == $type) { - # Same columns and type, return new name - return $n; - } - } - - return false; - } - - public function indexExists($name,$type,$cols) - { - # Look for key with the same name - if (isset($this->indexes[$name])) { - return $name; - } - - # Look for index with the same columns list and type - foreach ($this->indexes as $n => $i) - { - if ($i['cols'] == $cols && $i['type'] == $type) { - # Same columns and type, return new name - return $n; - } - } - - return false; - } - - public function referenceExists($name,$c_cols,$p_table,$p_cols) - { - if (isset($this->references[$name])) { - return $name; - } - - # Look for reference with same chil columns, parent table and columns - foreach ($this->references as $n => $r) - { - if ($c_cols == $r['c_cols'] && $p_table == $r['p_table'] && $p_cols == $r['p_cols']) { - # Only name differs, return new name - return $n; - } - } - - return false; - } - - public function field($name,$type,$len,$null=true,$default=false,$to_null=false) - { - $type = strtolower($type); - - if (!in_array($type,$this->allowed_types)) - { - if ($to_null) { - $type = null; - } else { - throw new Exception('Invalid data type '.$type.' in schema'); - } - } - - $this->fields[$name] = array( - 'type' => $type, - 'len' => (integer) $len, - 'default' => $default, - 'null' => (boolean) $null - ); - - return $this; - } - - public function __call($name,$args) - { - array_unshift($args,$name); - return call_user_func_array(array($this,'field'),$args); - } - - public function primary($name,$col) - { - if ($this->has_primary) { - throw new Exception(sprintf('Table %s already has a primary key',$this->name)); - } - - $cols = func_get_args(); - array_shift($cols); - - return $this->newKey('primary',$name,$cols); - } - - public function unique($name,$col) - { - $cols = func_get_args(); - array_shift($cols); - - return $this->newKey('unique',$name,$cols); - } - - public function index($name,$type,$col) - { - $cols = func_get_args(); - array_shift($cols); - array_shift($cols); - - $this->checkCols($cols); - - $this->indexes[$name] = array( - 'type' => strtolower($type), - 'cols' => $cols - ); - - return $this; - } - - public function reference($name,$c_cols,$p_table,$p_cols,$update=false,$delete=false) - { - if (!is_array($p_cols)) { - $p_cols = array($p_cols); - } - if (!is_array($c_cols)) { - $c_cols = array($c_cols); - } - - $this->checkCols($c_cols); - - $this->references[$name] = array( - 'c_cols' => $c_cols, - 'p_table' => $p_table, - 'p_cols' => $p_cols, - 'update' => $update, - 'delete' => $delete - ); - } - - protected function newKey($type,$name,$cols) - { - $this->checkCols($cols); - - $this->keys[$name] = array( - 'type' => $type, - 'cols' => $cols - ); - - if ($type == 'primary') { - $this->has_primary = true; - } - - return $this; - } - - protected function checkCols($cols) - { - foreach ($cols as $v) { - if (!preg_match('/^\(.*?\)$/',$v) && !isset($this->fields[$v])) { - throw new Exception(sprintf('Field %s does not exist in table %s',$v,$this->name)); - } - } - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/libs/clearbricks/dbschema/class.mysql.dbschema.php b/v2/dotclear/inc/libs/clearbricks/dbschema/class.mysql.dbschema.php deleted file mode 100644 index 51b9ce2..0000000 --- a/v2/dotclear/inc/libs/clearbricks/dbschema/class.mysql.dbschema.php +++ /dev/null @@ -1,470 +0,0 @@ -con->select($sql); - - $res = array(); - while ($rs->fetch()) { - $res[] = $rs->f(0); - } - return $res; - } - - public function db_get_columns($table) - { - $sql = 'SHOW COLUMNS FROM '.$this->con->escapeSystem($table); - $rs = $this->con->select($sql); - - $res = array(); - while ($rs->fetch()) - { - $field = trim($rs->f('Field')); - $type = trim($rs->f('Type')); - $null = strtolower($rs->f('Null')) == 'yes'; - $default = $rs->f('Default'); - - $len = null; - if (preg_match('/^(.+?)\(([\d,]+)\)$/si',$type,$m)) { - $type = $m[1]; - $len = (integer) $m[2]; - } - - if ($default != '' && !is_numeric($default)) { - $default = "'".$default."'"; - } - - $res[$field] = array( - 'type' => $type, - 'len' => $len, - 'null' => $null, - 'default' => $default - ); - } - return $res; - } - - public function db_get_keys($table) - { - $sql = 'SHOW INDEX FROM '.$this->con->escapeSystem($table); - $rs = $this->con->select($sql); - - $t = array(); - $res = array(); - while ($rs->fetch()) - { - $key_name = $rs->f('Key_name'); - $unique = $rs->f('Non_unique') == 0; - $seq = $rs->f('Seq_in_index'); - $col_name = $rs->f('Column_name'); - - if ($key_name == 'PRIMARY' || $unique) { - $t[$key_name]['cols'][$seq] = $col_name; - $t[$key_name]['unique'] = $unique; - } - } - - foreach ($t as $name => $idx) - { - ksort($idx['cols']); - - $res[] = array( - 'name' => $name, - 'primary' => $name == 'PRIMARY', - 'unique' => $idx['unique'], - 'cols' => array_values($idx['cols']) - ); - } - - return $res; - } - - public function db_get_indexes($table) - { - $sql = 'SHOW INDEX FROM '.$this->con->escapeSystem($table); - $rs = $this->con->select($sql); - - $t = array(); - $res = array(); - while ($rs->fetch()) - { - $key_name = $rs->f('Key_name'); - $unique = $rs->f('Non_unique') == 0; - $seq = $rs->f('Seq_in_index'); - $col_name = $rs->f('Column_name'); - $type = $rs->f('Index_type'); - - if ($key_name != 'PRIMARY' && !$unique) { - $t[$key_name]['cols'][$seq] = $col_name; - $t[$key_name]['type'] = $type; - } - } - - foreach ($t as $name => $idx) - { - ksort($idx['cols']); - - $res[] = array( - 'name' => $name, - 'type' => $idx['type'], - 'cols' => $idx['cols'] - ); - } - - return $res; - } - - public function db_get_references($table) - { - $sql = 'SHOW CREATE TABLE '.$this->con->escapeSystem($table); - $rs = $this->con->select($sql); - - $s = $rs->f(1); - - $res = array(); - - $n = preg_match_all('/^\s*CONSTRAINT\s+`(.+?)`\s+FOREIGN\s+KEY\s+\((.+?)\)\s+REFERENCES\s+`(.+?)`\s+\((.+?)\)(.*?)$/msi',$s,$match); - if ($n > 0) - { - foreach ($match[1] as $i => $name) - { - # Columns transformation - $t_cols = str_replace('`','',$match[2][$i]); - $t_cols = explode(',',$t_cols); - $r_cols = str_replace('`','',$match[4][$i]); - $r_cols = explode(',',$r_cols); - - # ON UPDATE|DELETE - $on = trim($match[5][$i],', '); - $on_delete = null; - $on_update = null; - if ($on != '') { - if (preg_match('/ON DELETE (.+?)(?:\s+ON|$)/msi',$on,$m)) { - $on_delete = strtolower(trim($m[1])); - } - if (preg_match('/ON UPDATE (.+?)(?:\s+ON|$)/msi',$on,$m)) { - $on_update = strtolower(trim($m[1])); - } - } - - $res[] = array ( - 'name' => $name, - 'c_cols' => $t_cols, - 'p_table' => $match[3][$i], - 'p_cols' => $r_cols, - 'update' => $on_update, - 'delete' => $on_delete - ); - } - } - return $res; - } - - public function db_create_table($name,$fields) - { - $a = array(); - - foreach ($fields as $n => $f) - { - $type = $f['type']; - $len = (integer) $f['len']; - $default = $f['default']; - $null = $f['null']; - - $type = $this->udt2dbt($type,$len,$default); - $len = $len > 0 ? '('.$len.')' : ''; - $null = $null ? 'NULL' : 'NOT NULL'; - - if ($default === null) { - $default = 'DEFAULT NULL'; - } elseif ($default !== false) { - $default = 'DEFAULT '.$default.' '; - } else { - $default = ''; - } - - $a[] = - $this->con->escapeSystem($n).' '. - $type.$len.' '.$null.' '.$default; - } - - $sql = - 'CREATE TABLE '.$this->con->escapeSystem($name)." (\n". - implode(",\n",$a). - "\n) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin "; - - $this->con->execute($sql); - } - - public function db_create_field($table,$name,$type,$len,$null,$default) - { - $type = $this->udt2dbt($type,$len,$default); - $len = (integer) $len > 0 ? '('.(integer) $len.')' : ''; - $null = $null ? 'NULL' : 'NOT NULL'; - - if ($default === null) { - $default = 'DEFAULT NULL'; - } elseif ($default !== false) { - $default = 'DEFAULT '.$default; - } else { - $default = ''; - } - - $sql = - 'ALTER TABLE '.$this->con->escapeSystem($table).' '. - 'ADD COLUMN '.$this->con->escapeSystem($name).' '. - $type.$len.' '.$null.' '.$default; - - $this->con->execute($sql); - } - - public function db_create_primary($table,$name,$cols) - { - $c = array(); - foreach ($cols as $v) { - $c[] = $this->con->escapeSystem($v); - } - - $sql = - 'ALTER TABLE '.$this->con->escapeSystem($table).' '. - 'ADD CONSTRAINT PRIMARY KEY ('.implode(',',$c).') '; - - $this->con->execute($sql); - } - - public function db_create_unique($table,$name,$cols) - { - $c = array(); - foreach ($cols as $v) { - $c[] = $this->con->escapeSystem($v); - } - - $sql = - 'ALTER TABLE '.$this->con->escapeSystem($table).' '. - 'ADD CONSTRAINT UNIQUE KEY '.$this->con->escapeSystem($name).' '. - '('.implode(',',$c).') '; - - $this->con->execute($sql); - } - - public function db_create_index($table,$name,$type,$cols) - { - $c = array(); - foreach ($cols as $v) { - $c[] = $this->con->escapeSystem($v); - } - - $sql = - 'ALTER TABLE '.$this->con->escapeSystem($table).' '. - 'ADD INDEX '.$this->con->escapeSystem($name).' USING '.$type.' '. - '('.implode(',',$c).') '; - - $this->con->execute($sql); - } - - public function db_create_reference($name,$c_table,$c_cols,$p_table,$p_cols,$update,$delete) - { - $c = array(); - $p = array(); - foreach ($c_cols as $v) { - $c[] = $this->con->escapeSystem($v); - } - foreach ($p_cols as $v) { - $p[] = $this->con->escapeSystem($v); - } - - $sql = - 'ALTER TABLE '.$this->con->escapeSystem($c_table).' '. - 'ADD CONSTRAINT '.$name.' FOREIGN KEY '. - '('.implode(',',$c).') '. - 'REFERENCES '.$this->con->escapeSystem($p_table).' '. - '('.implode(',',$p).') '; - - if ($update) { - $sql .= 'ON UPDATE '.$update.' '; - } - if ($delete) { - $sql .= 'ON DELETE '.$delete.' '; - } - - $this->con->execute($sql); - } - - public function db_alter_field($table,$name,$type,$len,$null,$default) - { - $type = $this->udt2dbt($type,$len,$default); - $len = (integer) $len > 0 ? '('.(integer) $len.')' : ''; - $null = $null ? 'NULL' : 'NOT NULL'; - - if ($default === null) { - $default = 'DEFAULT NULL'; - } elseif ($default !== false) { - $default = 'DEFAULT '.$default; - } else { - $default = ''; - } - - $sql = - 'ALTER TABLE '.$this->con->escapeSystem($table).' '. - 'CHANGE COLUMN '.$this->con->escapeSystem($name).' '.$this->con->escapeSystem($name).' '. - $type.$len.' '.$null.' '.$default; - - $this->con->execute($sql); - } - - public function db_alter_primary($table,$name,$newname,$cols) - { - $c = array(); - foreach ($cols as $v) { - $c[] = $this->con->escapeSystem($v); - } - - $sql = - 'ALTER TABLE '.$this->con->escapeSystem($table).' '. - 'DROP PRIMARY KEY, ADD PRIMARY KEY '. - '('.implode(',',$c).') '; - - $this->con->execute($sql); - } - - public function db_alter_unique($table,$name,$newname,$cols) - { - $c = array(); - foreach ($cols as $v) { - $c[] = $this->con->escapeSystem($v); - } - - $sql = - 'ALTER TABLE '.$this->con->escapeSystem($table).' '. - 'DROP INDEX '.$this->con->escapeSystem($name).', '. - 'ADD UNIQUE '.$this->con->escapeSystem($newname).' '. - '('.implode(',',$c).') '; - - $this->con->execute($sql); - } - - public function db_alter_index($table,$name,$newname,$type,$cols) - { - $c = array(); - foreach ($cols as $v) { - $c[] = $this->con->escapeSystem($v); - } - - $sql = - 'ALTER TABLE '.$this->con->escapeSystem($table).' '. - 'DROP INDEX '.$this->con->escapeSystem($name).', '. - 'ADD INDEX '.$this->con->escapeSystem($newname).' '. - 'USING '.$type.' '. - '('.implode(',',$c).') '; - - $this->con->execute($sql); - } - - public function db_alter_reference($name,$newname,$c_table,$c_cols,$p_table,$p_cols,$update,$delete) - { - $sql = - 'ALTER TABLE '.$this->con->escapeSystem($c_table).' '. - 'DROP FOREIGN KEY '.$this->con->escapeSystem($name); - - $this->con->execute($sql); - $this->createReference($newname,$c_table,$c_cols,$p_table,$p_cols,$update,$delete); - } - - public function db_drop_unique($table,$name) - { - $sql = - 'ALTER TABLE '.$this->con->escapeSystem($table).' '. - 'DROP INDEX '.$this->con->escapeSystem($name); - $this->con->execute($sql); - } - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/libs/clearbricks/dbschema/class.mysqli.dbschema.php b/v2/dotclear/inc/libs/clearbricks/dbschema/class.mysqli.dbschema.php deleted file mode 100644 index 719fb56..0000000 --- a/v2/dotclear/inc/libs/clearbricks/dbschema/class.mysqli.dbschema.php +++ /dev/null @@ -1,21 +0,0 @@ - \ No newline at end of file diff --git a/v2/dotclear/inc/libs/clearbricks/dbschema/class.pgsql.dbschema.php b/v2/dotclear/inc/libs/clearbricks/dbschema/class.pgsql.dbschema.php deleted file mode 100644 index bf6591f..0000000 --- a/v2/dotclear/inc/libs/clearbricks/dbschema/class.pgsql.dbschema.php +++ /dev/null @@ -1,400 +0,0 @@ - 'no action', - 'r' => 'restrict', - 'c' => 'cascade', - 'n' => 'set null', - 'd' => 'set default' - ); - - public function dbt2udt($type,&$len,&$default) - { - $type = parent::dbt2udt($type,$len,$default); - - return $type; - } - - public function udt2dbt($type,&$len,&$default) - { - $type = parent::udt2dbt($type,$len,$default); - - return $type; - } - - public function db_get_tables() - { - $sql = - 'SELECT table_name '. - 'FROM information_schema.tables '. - "WHERE table_schema = current_schema() "; - - $rs = $this->con->select($sql); - - $res = array(); - while ($rs->fetch()) { - $res[] = $rs->f(0); - } - return $res; - } - - public function db_get_columns($table) - { - $sql = - 'SELECT column_name, udt_name, character_maximum_length, '. - 'is_nullable, column_default '. - 'FROM information_schema.columns '. - "WHERE table_name = '".$this->con->escape($table)."' "; - - $rs = $this->con->select($sql); - - $res = array(); - while ($rs->fetch()) - { - $field = trim($rs->column_name); - $type = trim($rs->udt_name); - $null = strtolower($rs->is_nullable) == 'yes'; - $default = $rs->column_default; - $len = $rs->character_maximum_length; - - if ($len == '') { - $len = null; - } - - $default = preg_replace('/::([\w\d\s]*)$/','',$default); - - $res[$field] = array( - 'type' => $type, - 'len' => $len, - 'null' => $null, - 'default' => $default - ); - } - - return $res; - } - - public function db_get_keys($table) - { - $sql = - 'SELECT DISTINCT ON(cls.relname) cls.oid, cls.relname as idxname, indisunique::integer, indisprimary::integer, '. - 'indnatts, tab.relname as tabname, contype, amname '. - 'FROM pg_index idx '. - 'JOIN pg_class cls ON cls.oid=indexrelid '. - 'JOIN pg_class tab ON tab.oid=indrelid '. - 'LEFT OUTER JOIN pg_tablespace ta on ta.oid=cls.reltablespace '. - 'JOIN pg_namespace n ON n.oid=tab.relnamespace '. - 'JOIN pg_am am ON am.oid=cls.relam '. - "LEFT JOIN pg_depend dep ON (dep.classid = cls.tableoid AND dep.objid = cls.oid AND dep.refobjsubid = '0') ". - 'LEFT OUTER JOIN pg_constraint con ON (con.tableoid = dep.refclassid AND con.oid = dep.refobjid) '. - 'LEFT OUTER JOIN pg_description des ON des.objoid=con.oid '. - 'LEFT OUTER JOIN pg_description desp ON (desp.objoid=con.oid AND desp.objsubid = 0) '. - "WHERE tab.relname = '".$this->con->escape($table)."' ". - "AND contype IN ('p','u') ". - 'ORDER BY cls.relname '; - - $rs = $this->con->select($sql); - - $res = array(); - while ($rs->fetch()) - { - $k = array( - 'name' => $rs->idxname, - 'primary' => (boolean) $rs->indisprimary, - 'unique' => (boolean) $rs->indisunique, - 'cols' => array() - ); - - for ($i=1; $i<=$rs->indnatts; $i++) { - $cols = $this->con->select('SELECT pg_get_indexdef('.$rs->oid.'::oid, '.$i.', true);'); - $k['cols'][] = $cols->f(0); - } - - $res[] = $k; - } - - return $res; - } - - public function db_get_indexes($table) - { - $sql = - 'SELECT DISTINCT ON(cls.relname) cls.oid, cls.relname as idxname, n.nspname, '. - 'indnatts, tab.relname as tabname, contype, amname '. - 'FROM pg_index idx '. - 'JOIN pg_class cls ON cls.oid=indexrelid '. - 'JOIN pg_class tab ON tab.oid=indrelid '. - 'LEFT OUTER JOIN pg_tablespace ta on ta.oid=cls.reltablespace '. - 'JOIN pg_namespace n ON n.oid=tab.relnamespace '. - 'JOIN pg_am am ON am.oid=cls.relam '. - "LEFT JOIN pg_depend dep ON (dep.classid = cls.tableoid AND dep.objid = cls.oid AND dep.refobjsubid = '0') ". - 'LEFT OUTER JOIN pg_constraint con ON (con.tableoid = dep.refclassid AND con.oid = dep.refobjid) '. - 'LEFT OUTER JOIN pg_description des ON des.objoid=con.oid '. - 'LEFT OUTER JOIN pg_description desp ON (desp.objoid=con.oid AND desp.objsubid = 0) '. - "WHERE tab.relname = '".$this->con->escape($table)."' ". - 'AND conname IS NULL '. - 'ORDER BY cls.relname '; - - $rs = $this->con->select($sql); - - $res = array(); - while ($rs->fetch()) - { - $k = array( - 'name' => $rs->idxname, - 'type' => $rs->amname, - 'cols' => array() - ); - - for ($i=1; $i<=$rs->indnatts; $i++) { - $cols = $this->con->select('SELECT pg_get_indexdef('.$rs->oid.'::oid, '.$i.', true);'); - $k['cols'][] = $cols->f(0); - } - - $res[] = $k; - } - - return $res; - } - - public function db_get_references($table) - { - $sql = - 'SELECT ct.oid, conname, condeferrable, condeferred, confupdtype, '. - 'confdeltype, confmatchtype, conkey, confkey, conrelid, confrelid, cl.relname as fktab, '. - 'cr.relname as reftab '. - 'FROM pg_constraint ct '. - 'JOIN pg_class cl ON cl.oid=conrelid '. - 'JOIN pg_namespace nl ON nl.oid=cl.relnamespace '. - 'JOIN pg_class cr ON cr.oid=confrelid '. - 'JOIN pg_namespace nr ON nr.oid=cr.relnamespace '. - "WHERE contype='f' ". - "AND cl.relname = '".$this->con->escape($table)."' ". - 'ORDER BY conname '; - - $rs = $this->con->select($sql); - - $cols_sql = - 'SELECT a1.attname as conattname, a2.attname as confattname '. - 'FROM pg_attribute a1, pg_attribute a2 '. - 'WHERE a1.attrelid=%1$s::oid AND a1.attnum=%2$s '. - 'AND a2.attrelid=%3$s::oid AND a2.attnum=%4$s '; - - $res = array(); - while ($rs->fetch()) - { - $conkey = preg_replace('/[^\d]/','',$rs->conkey); - $confkey = preg_replace('/[^\d]/','',$rs->confkey); - - $k = array( - 'name' => $rs->conname, - 'c_cols' => array(), - 'p_table' => $rs->reftab, - 'p_cols' => array(), - 'update' => $this->ref_actions_map[$rs->confupdtype], - 'delete' => $this->ref_actions_map[$rs->confdeltype] - ); - - $cols = $this->con->select(sprintf($cols_sql,$rs->conrelid,$conkey,$rs->confrelid,$confkey)); - while ($cols->fetch()) { - $k['c_cols'][] = $cols->conattname; - $k['p_cols'][] = $cols->confattname; - } - - $res[] = $k; - } - - return $res; - } - - public function db_create_table($name,$fields) - { - $a = array(); - - foreach ($fields as $n => $f) - { - $type = $f['type']; - $len = (integer) $f['len']; - $default = $f['default']; - $null = $f['null']; - - $type = $this->udt2dbt($type,$len,$default); - $len = $len > 0 ? '('.$len.')' : ''; - $null = $null ? 'NULL' : 'NOT NULL'; - - if ($default === null) { - $default = 'DEFAULT NULL'; - } elseif ($default !== false) { - $default = 'DEFAULT '.$default.' '; - } else { - $default = ''; - } - - $a[] = - $n.' '. - $type.$len.' '.$null.' '.$default; - } - - $sql = - 'CREATE TABLE '.$name." (\n". - implode(",\n",$a). - "\n)"; - - $this->con->execute($sql); - } - - public function db_create_field($table,$name,$type,$len,$null,$default) - { - $type = $this->udt2dbt($type,$len,$default); - $len = $len > 0 ? '('.$len.')' : ''; - $null = $null ? 'NULL' : 'NOT NULL'; - - if ($default === null) { - $default = 'DEFAULT NULL'; - } elseif ($default !== false) { - $default = 'DEFAULT '.$default.' '; - } else { - $default = ''; - } - - $sql = - 'ALTER TABLE '.$table.' ADD COLUMN '.$name.' '. - $type.$len.' '.$null.' '.$default; - - $this->con->execute($sql); - } - - public function db_create_primary($table,$name,$cols) - { - $sql = - 'ALTER TABLE '.$table.' '. - 'ADD CONSTRAINT '.$name.' PRIMARY KEY ('.implode(",",$cols).') '; - - $this->con->execute($sql); - } - - public function db_create_unique($table,$name,$cols) - { - $sql = - 'ALTER TABLE '.$table.' '. - 'ADD CONSTRAINT '.$name.' UNIQUE ('.implode(',',$cols).') '; - - $this->con->execute($sql); - } - - public function db_create_index($table,$name,$type,$cols) - { - $sql = - 'CREATE INDEX '.$name.' ON '.$table.' USING '.$type. - '('.implode(',',$cols).') '; - - $this->con->execute($sql); - } - - public function db_create_reference($name,$c_table,$c_cols,$p_table,$p_cols,$update,$delete) - { - $sql = - 'ALTER TABLE '.$c_table.' '. - 'ADD CONSTRAINT '.$name.' FOREIGN KEY '. - '('.implode(',',$c_cols).') '. - 'REFERENCES '.$p_table.' '. - '('.implode(',',$p_cols).') '; - - if ($update) { - $sql .= 'ON UPDATE '.$update.' '; - } - if ($delete) { - $sql .= 'ON DELETE '.$delete.' '; - } - - $this->con->execute($sql); - } - - public function db_alter_field($table,$name,$type,$len,$null,$default) - { - $type = $this->udt2dbt($type,$len,$default); - $len = (integer) $len > 0 ? '('.(integer) $len.')' : ''; - - $sql = 'ALTER TABLE '.$table.' ALTER COLUMN '.$name.' TYPE '.$type.$len; - $this->con->execute($sql); - - if ($default === null) { - $default = 'SET DEFAULT NULL'; - } elseif ($default !== false) { - $default = 'SET DEFAULT '.$default; - } else { - $default = 'DROP DEFAULT'; - } - - $sql = 'ALTER TABLE '.$table.' ALTER COLUMN '.$name.' '.$default; - $this->con->execute($sql); - - $null = $null ? 'DROP NOT NULL' : 'SET NOT NULL'; - $sql = 'ALTER TABLE '.$table.' ALTER COLUMN '.$name.' '.$null; - $this->con->execute($sql); - } - - public function db_alter_primary($table,$name,$newname,$cols) - { - $sql = 'ALTER TABLE '.$table.' DROP CONSTRAINT '.$name; - $this->con->execute($sql); - - $this->createPrimary($table,$newname,$cols); - } - - public function db_alter_unique($table,$name,$newname,$cols) - { - $sql = 'ALTER TABLE '.$table.' DROP CONSTRAINT '.$name; - $this->con->execute($sql); - - $this->createUnique($table,$newname,$cols); - } - - public function db_alter_index($table,$name,$newname,$type,$cols) - { - $sql = 'DROP INDEX '.$name; - $this->con->execute($sql); - - $this->createIndex($table,$newname,$type,$cols); - } - - public function db_alter_reference($name,$newname,$c_table,$c_cols,$p_table,$p_cols,$update,$delete) - { - $sql = 'ALTER TABLE '.$c_table.' DROP CONSTRAINT '.$name; - $this->con->execute($sql); - - $this->createReference($newname,$c_table,$c_cols,$p_table,$p_cols,$update,$delete); - } - - public function db_drop_unique($table,$name) - { - $sql = 'ALTER TABLE '.$table.' DROP CONSTRAINT '.$name; - $this->con->execute($sql); - } - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/libs/clearbricks/dbschema/class.sqlite.dbschema.php b/v2/dotclear/inc/libs/clearbricks/dbschema/class.sqlite.dbschema.php deleted file mode 100644 index 2ab7279..0000000 --- a/v2/dotclear/inc/libs/clearbricks/dbschema/class.sqlite.dbschema.php +++ /dev/null @@ -1,514 +0,0 @@ -table_stack as $table => $def) - { - $sql = 'CREATE TABLE '.$table." (\n".implode(",\n",$def)."\n)\n "; - $this->con->execute($sql); - } - - foreach ($this->x_stack as $x) - { - $this->con->execute($x); - } - } - - public function db_get_tables() - { - $res = array(); - $sql = "SELECT * FROM sqlite_master WHERE type = 'table'"; - $rs = $this->con->select($sql); - - $res = array(); - while ($rs->fetch()) { - $res[] = $rs->tbl_name; - } - - return $res; - } - - public function db_get_columns($table) - { - $sql = 'PRAGMA table_info('.$this->con->escapeSystem($table).')'; - $rs = $this->con->select($sql); - - $res = array(); - while ($rs->fetch()) - { - $field = trim($rs->name); - $type = trim($rs->type); - $null = trim($rs->notnull) == 0; - $default = trim($rs->dflt_value); - - $len = null; - if (preg_match('/^(.+?)\(([\d,]+)\)$/si',$type,$m)) { - $type = $m[1]; - $len = (integer) $m[2]; - } - - $res[$field] = array( - 'type' => $type, - 'len' => $len, - 'null' => $null, - 'default' => $default - ); - } - return $res; - } - - public function db_get_keys($table) - { - $t = array(); - $res = array(); - - # Get primary keys first - $sql = "SELECT sql FROM sqlite_master WHERE type='table' AND name='".$this->con->escape($table)."'"; - $rs = $this->con->select($sql); - - if ($rs->isEmpty()) { - return array(); - } - - # Get primary keys - $n = preg_match_all('/^\s*CONSTRAINT\s+([^,]+?)\s+PRIMARY\s+KEY\s+\((.+?)\)/msi',$rs->sql,$match); - if ($n > 0) - { - foreach ($match[1] as $i => $name) - { - $cols = preg_split('/\s*,\s*/',$match[2][$i]); - $res[] = array( - 'name' => $name, - 'primary' => true, - 'unique' => false, - 'cols' => $cols - ); - } - } - - # Get unique keys - $n = preg_match_all('/^\s*CONSTRAINT\s+([^,]+?)\s+UNIQUE\s+\((.+?)\)/msi',$rs->sql,$match); - if ($n > 0) - { - foreach ($match[1] as $i => $name) - { - $cols = preg_split('/\s*,\s*/',$match[2][$i]); - $res[] = array( - 'name' => $name, - 'primary' => false, - 'unique' => true, - 'cols' => $cols - ); - } - } - - return $res; - } - - public function db_get_indexes($table) - { - $sql = 'PRAGMA index_list('.$this->con->escapeSystem($table).')'; - $rs = $this->con->select($sql); - - $res = array(); - while ($rs->fetch()) - { - if (preg_match('/^sqlite_/',$rs->name)) { - continue; - } - - $idx = $this->con->select('PRAGMA index_info('.$this->con->escapeSystem($rs->name).')'); - $cols = array(); - while ($idx->fetch()) { - $cols[] = $idx->name; - } - - $res[] = array( - 'name' => $rs->name, - 'type' => 'btree', - 'cols' => $cols - ); - } - - return $res; - } - - public function db_get_references($table) - { - $sql = 'SELECT * FROM sqlite_master WHERE type=\'trigger\' AND tbl_name = \'%1$s\' AND name LIKE \'%2$s_%%\' '; - $res = array(); - - # Find constraints on table - $bir = $this->con->select(sprintf($sql,$this->con->escape($table),'bir')); - $bur = $this->con->select(sprintf($sql,$this->con->escape($table),'bur')); - - if ($bir->isEmpty() || $bur->isempty()) { - return $res; - } - - while ($bir->fetch()) - { - # Find child column and parent table and column - if (!preg_match('/FROM\s+(.+?)\s+WHERE\s+(.+?)\s+=\s+NEW\.(.+?)\s*?\) IS\s+NULL/msi',$bir->sql,$m)) { - continue; - } - - $c_col = $m[3]; - $p_table = $m[1]; - $p_col = $m[2]; - - # Find on update - $on_update = 'restrict'; - $aur = $this->con->select(sprintf($sql,$this->con->escape($p_table),'aur')); - while ($aur->fetch()) - { - if (!preg_match('/AFTER\s+UPDATE/msi',$aur->sql)) { - continue; - } - - if (preg_match('/UPDATE\s+'.$table.'\s+SET\s+'.$c_col.'\s*=\s*NEW.'.$p_col. - '\s+WHERE\s+'.$c_col.'\s*=\s*OLD\.'.$p_col.'/msi',$aur->sql)) { - $on_update = 'cascade'; - break; - } - - if (preg_match('/UPDATE\s+'.$table.'\s+SET\s+'.$c_col.'\s*=\s*NULL'. - '\s+WHERE\s+'.$c_col.'\s*=\s*OLD\.'.$p_col.'/msi',$aur->sql)) { - $on_update = 'set null'; - break; - } - } - - # Find on delete - $on_delete = 'restrict'; - $bdr = $this->con->select(sprintf($sql,$this->con->escape($p_table),'bdr')); - while ($bdr->fetch()) - { - if (!preg_match('/BEFORE\s+DELETE/msi',$bdr->sql)) { - continue; - } - - if (preg_match('/DELETE\s+FROM\s+'.$table.'\s+WHERE\s+'.$c_col.'\s*=\s*OLD\.'.$p_col.'/msi',$bdr->sql)) { - $on_delete = 'cascade'; - break; - } - - if (preg_match('/UPDATE\s+'.$table.'\s+SET\s+'.$c_col.'\s*=\s*NULL'. - '\s+WHERE\s+'.$c_col.'\s*=\s*OLD\.'.$p_col.'/msi',$bdr->sql)) { - $on_update = 'set null'; - break; - } - } - - $res[] = array( - 'name' => substr($bir->name,4), - 'c_cols' => array($c_col), - 'p_table' => $p_table, - 'p_cols' => array($p_col), - 'update' => $on_update, - 'delete' => $on_delete - ); - } - - return $res; - } - - public function db_create_table($name,$fields) - { - $a = array(); - - foreach ($fields as $n => $f) - { - $type = $f['type']; - $len = (integer) $f['len']; - $default = $f['default']; - $null = $f['null']; - - $type = $this->udt2dbt($type,$len,$default); - $len = $len > 0 ? '('.$len.')' : ''; - $null = $null ? 'NULL' : 'NOT NULL'; - - if ($default === null) { - $default = 'DEFAULT NULL'; - } elseif ($default !== false) { - $default = 'DEFAULT '.$default.' '; - } else { - $default = ''; - } - - $a[] = $n.' '.$type.$len.' '.$null.' '.$default; - } - - $this->table_stack[$name][] = implode(",\n",$a); - $this->table_hist[$name] = $fields; - } - - public function db_create_field($table,$name,$type,$len,$null,$default) - { - $type = $this->udt2dbt($type,$len,$default); - $len = $len > 0 ? '('.$len.')' : ''; - $null = $null ? 'NULL' : 'NOT NULL'; - - if ($default === null) { - $default = 'DEFAULT NULL'; - } elseif ($default !== false) { - $default = 'DEFAULT '.$default.' '; - } else { - $default = ''; - } - - $sql = - 'ALTER TABLE '.$this->con->escapeSystem($table).' '. - 'ADD COLUMN '.$this->con->escapeSystem($name).' '. - $type.$len.' '.$null.' '.$default; - - $this->con->execute($sql); - } - - public function db_create_primary($table,$name,$cols) - { - $this->table_stack[$table][] = 'CONSTRAINT '.$name.' PRIMARY KEY ('.implode(',',$cols).') '; - } - - public function db_create_unique($table,$name,$cols) - { - $this->table_stack[$table][] = 'CONSTRAINT '.$name.' UNIQUE ('.implode(',',$cols).') '; - } - - public function db_create_index($table,$name,$type,$cols) - { - $this->x_stack[] = 'CREATE INDEX '.$name.' ON '.$table.' ('.implode(',',$cols).') '; - } - - public function db_create_reference($name,$c_table,$c_cols,$p_table,$p_cols,$update,$delete) - { - if (!isset($this->table_hist[$c_table])) { - return; - } - - if (count($c_cols) > 1 || count($p_cols) > 1) { - throw new Exception('SQLite UDBS does not support multiple columns foreign keys'); - } - - $c_col = $c_cols[0]; - $p_col = $p_cols[0]; - - $update = strtolower($update); - $delete = strtolower($delete); - - $cnull = $this->table_hist[$c_table][$c_col]['null']; - - # Create constraint - $this->x_stack[] = - 'CREATE TRIGGER bir_'.$name."\n". - 'BEFORE INSERT ON '.$c_table."\n". - "FOR EACH ROW BEGIN\n". - ' SELECT RAISE(ROLLBACK,\'insert on table "'.$c_table.'" violates foreign key constraint "'.$name.'"\')'."\n". - ' WHERE '. - ($cnull ? 'NEW.'.$c_col." IS NOT NULL\n AND " : ''). - '(SELECT '.$p_col.' FROM '.$p_table.' WHERE '.$p_col.' = NEW.'.$c_col.") IS NULL;\n". - "END;\n"; - - # Update constraint - $this->x_stack[] = - 'CREATE TRIGGER bur_'.$name."\n". - 'BEFORE UPDATE ON '.$c_table."\n". - "FOR EACH ROW BEGIN\n". - ' SELECT RAISE(ROLLBACK,\'update on table "'.$c_table.'" violates foreign key constraint "'.$name.'"\')'."\n". - ' WHERE '. - ($cnull ? 'NEW.'.$c_col." IS NOT NULL\n AND " : ''). - '(SELECT '.$p_col.' FROM '.$p_table.' WHERE '.$p_col.' = NEW.'.$c_col.") IS NULL;\n". - "END;\n"; - - # ON UPDATE - if ($update == 'cascade') - { - $this->x_stack[] = - 'CREATE TRIGGER aur_'.$name."\n". - 'AFTER UPDATE ON '.$p_table."\n". - "FOR EACH ROW BEGIN\n". - ' UPDATE '.$c_table.' SET '.$c_col.' = NEW.'.$p_col.' WHERE '.$c_col.' = OLD.'.$p_col.";\n". - "END;\n"; - } - elseif ($update == 'set null') - { - $this->x_stack[] = - 'CREATE TRIGGER aur_'.$name."\n". - 'AFTER UPDATE ON '.$p_table."\n". - "FOR EACH ROW BEGIN\n". - ' UPDATE '.$c_table.' SET '.$c_col.' = NULL WHERE '.$c_col.' = OLD.'.$p_col.";\n". - "END;\n"; - } - else # default on restrict - { - $this->x_stack[] = - 'CREATE TRIGGER burp_'.$name."\n". - 'BEFORE UPDATE ON '.$p_table."\n". - "FOR EACH ROW BEGIN\n". - ' SELECT RAISE (ROLLBACK,\'update on table "'.$p_table.'" violates foreign key constraint "'.$name.'"\')'."\n". - ' WHERE (SELECT '.$c_col.' FROM '.$c_table.' WHERE '.$c_col.' = OLD.'.$p_col.") IS NOT NULL;\n". - "END;\n"; - } - - # ON DELETE - if ($delete == 'cascade') - { - $this->x_stack[] = - 'CREATE TRIGGER bdr_'.$name."\n". - 'BEFORE DELETE ON '.$p_table."\n". - "FOR EACH ROW BEGIN\n". - ' DELETE FROM '.$c_table.' WHERE '.$c_col.' = OLD.'.$p_col.";\n". - "END;\n"; - } - elseif ($delete == 'set null') - { - $this->x_stack[] = - 'CREATE TRIGGER bdr_'.$name."\n". - 'BEFORE DELETE ON '.$p_table."\n". - "FOR EACH ROW BEGIN\n". - ' UPDATE '.$c_table.' SET '.$c_col.' = NULL WHERE '.$c_col.' = OLD.'.$p_col.";\n". - "END;\n"; - } - else - { - $this->x_stack[] = - 'CREATE TRIGGER bdr_'.$name."\n". - 'BEFORE DELETE ON '.$p_table."\n". - "FOR EACH ROW BEGIN\n". - ' SELECT RAISE (ROLLBACK,\'delete on table "'.$p_table.'" violates foreign key constraint "'.$name.'"\')'."\n". - ' WHERE (SELECT '.$c_col.' FROM '.$c_table.' WHERE '.$c_col.' = OLD.'.$p_col.") IS NOT NULL;\n". - "END;\n"; - } - } - - public function db_alter_field($table,$name,$type,$len,$null,$default) - { - $type = $this->udt2dbt($type,$len,$default); - if ($type != 'integer' && $type != 'text' && $type != 'timestamp') { - throw new Exception('SQLite fields cannot be changed.'); - } - } - - public function db_alter_primary($table,$name,$newname,$cols) - { - throw new Exception('SQLite primary key cannot be changed.'); - } - - public function db_alter_unique($table,$name,$newname,$cols) - { - throw new Exception('SQLite unique index cannot be changed.'); - } - - public function db_alter_index($table,$name,$newname,$type,$cols) - { - $this->con->execute('DROP INDEX IF EXISTS '.$name); - $this->con->execute('CREATE INDEX '.$newname.' ON '.$table.' ('.implode(',',$cols).') '); - } - - public function db_alter_reference($name,$newname,$c_table,$c_cols,$p_table,$p_cols,$update,$delete) - { - $this->con->execute('DROP TRIGGER IF EXISTS bur_'.$name); - $this->con->execute('DROP TRIGGER IF EXISTS burp_'.$name); - $this->con->execute('DROP TRIGGER IF EXISTS bir_'.$name); - $this->con->execute('DROP TRIGGER IF EXISTS aur_'.$name); - $this->con->execute('DROP TRIGGER IF EXISTS bdr_'.$name); - - $this->table_hist[$c_table] = $this->db_get_columns($c_table); - $this->db_create_reference($newname,$c_table,$c_cols,$p_table,$p_cols,$update,$delete); - } - - public function db_drop_unique($table,$name) - { - throw new Exception('SQLite unique index cannot be removed.'); - } - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/libs/clearbricks/debian/changelog b/v2/dotclear/inc/libs/clearbricks/debian/changelog deleted file mode 100644 index 01eeb48..0000000 --- a/v2/dotclear/inc/libs/clearbricks/debian/changelog +++ /dev/null @@ -1,466 +0,0 @@ -libclearbricks (0.8-22) unstable; urgency=low ; svnrev=165 - - * SVN Revision 152 - olivier, on Mon, 30 Jun 2008 15:04:18 +0200 - New debian changelog - - * SVN Revision 153 - olivier, on Thu, 03 Jul 2008 21:12:19 +0200 - SQLite with PDO and SQLite 3 only. - - * SVN Revision 154 - olivier, on Fri, 11 Jul 2008 14:48:43 +0200 - Bug fix with TZ file load. - - * SVN Revision 155 - olivier, on Wed, 16 Jul 2008 15:55:11 +0200 - Minor performances tweaks. - - * SVN Revision 156 - olivier, on Wed, 16 Jul 2008 16:11:17 +0200 - Added getTypes() in urlHandler. - - * SVN Revision 157 - olivier, on Wed, 16 Jul 2008 18:11:01 +0200 - Added support for inline HTML in wiki2xhtml - - * SVN Revision 158 - olivier, on Wed, 16 Jul 2008 18:22:00 +0200 - Description error in wiki2xhtml - - * SVN Revision 159 - olivier, on Thu, 17 Jul 2008 12:51:08 +0200 - Added ?> in lib.crypt.php - - * SVN Revision 160 - olivier, on Thu, 17 Jul 2008 16:13:25 +0200 - Always force a new connection for mysql dblayer. - - * SVN Revision 161 - olivier, on Sun, 20 Jul 2008 16:41:36 +0200 - Added l10n::getTextDirection() method. - - * SVN Revision 162 - olivier, on Sun, 20 Jul 2008 18:35:31 +0200 - l10n::getISOcodes returns now native langue names. - - * SVN Revision 163 - olivier, on Mon, 21 Jul 2008 15:02:59 +0200 - Init content in htmlFilter::aply() - - * SVN Revision 164 - olivier, on Mon, 21 Jul 2008 15:16:15 +0200 - Basic scheme instead of BASIC. - - * SVN Revision 165 - olivier, on Wed, 30 Jul 2008 18:35:08 +0200 - Typo fix in filemanager. - - -- Olivier Meunier Wed, 06 Aug 2008 14:36:17 +0200 - -libclearbricks (0.8-21) unstable; urgency=low ; svnrev=151 - - * SVN Revision 142 - olivier, on Tue, 13 May 2008 14:26:02 +0200 - New debian changelog - - * SVN Revision 143 - olivier, on Mon, 02 Jun 2008 14:45:13 +0200 - In imageTools::memoryAllocate, multiply by 8 instead of 5 - - * SVN Revision 144 - olivier, on Tue, 03 Jun 2008 14:57:26 +0200 - Fixed sorting bug in filemanager - - * SVN Revision 145 - olivier, on Wed, 04 Jun 2008 09:15:57 +0200 - Fixed a minor bug in imageTools when image size becomes zero. - - * SVN Revision 146 - olivier, on Fri, 06 Jun 2008 10:30:46 +0200 - "'" is a space in text::tidyURL - - * SVN Revision 147 - olivier, on Fri, 06 Jun 2008 10:54:59 +0200 - Added filemanager::getPwd() and filemanager::writable() methods. - - * SVN Revision 148 - olivier, on Fri, 06 Jun 2008 14:11:34 +0200 - Removed dead line in feedReader. - - * SVN Revision 149 - olivier, on Mon, 16 Jun 2008 09:25:37 +0200 - Changed longdesc by title in wiki2xhtml. - - * SVN Revision 150 - olivier, on Thu, 19 Jun 2008 17:50:31 +0200 - Added languages in lib.l10n.php - - * SVN Revision 151 - olivier, on Wed, 25 Jun 2008 18:04:43 +0200 - Fixed bugs in l10n and url.handler. - - -- Olivier Meunier Mon, 30 Jun 2008 15:03:33 +0200 - -libclearbricks (0.8-20) unstable; urgency=low ; svnrev=141 - - * SVN Revision 121 - olivier, on Tue, 26 Feb 2008 10:20:48 +0100 - New debian changelog - - * SVN Revision 122 - olivier, on Wed, 27 Feb 2008 09:13:52 +0100 - Fixed seconds reading in fileUnzip - - * SVN Revision 124 - olivier, on Wed, 27 Feb 2008 11:22:23 +0100 - Added fileZip class - - * SVN Revision 126 - olivier, on Wed, 27 Feb 2008 14:03:43 +0100 - More memory for fileUnzip - - * SVN Revision 128 - olivier, on Sun, 02 Mar 2008 14:10:07 +0100 - Fixed time offset output for RFC822 dates. - - * SVN Revision 129 - olivier, on Sun, 02 Mar 2008 14:10:56 +0100 - Tweak in fileUnzip to handle directories in central. - - * SVN Revision 131 - olivier, on Fri, 21 Mar 2008 11:25:28 +0100 - Changed all chmod($file,fileperms(dirname($file))) calls with new files::inheritChmod() static method. - Some minor fixes. - - * SVN Revision 132 - olivier, on Fri, 21 Mar 2008 11:26:33 +0100 - Added files::inheritChmod() calls in filemanager uploadFile() and uploadBits() methods. - Closes #177. - - * SVN Revision 133 - olivier, on Fri, 04 Apr 2008 15:23:51 +0200 - Added translation support in l10n::getISOcodes() - - * SVN Revision 134 - olivier, on Fri, 04 Apr 2008 17:45:23 +0200 - Added template::blockExists(), template::valueExists() and template::tagExists() methods. - - * SVN Revision 135 - olivier, on Thu, 17 Apr 2008 17:54:27 +0200 - filemanager::exclude_list is now a regexp list and handles file upload. - - * SVN Revision 136 - olivier, on Fri, 18 Apr 2008 10:29:17 +0200 - Reverted to revision 134 - - * SVN Revision 137 - olivier, on Fri, 18 Apr 2008 11:41:03 +0200 - Added fileManager::$exclude_pattern property. This works only for files. - - * SVN Revision 138 - pep, on Wed, 23 Apr 2008 02:10:08 +0200 - Should fix problems when sending mail (/r/n or /n header terminator) - - * SVN Revision 139 - olivier, on Wed, 23 Apr 2008 18:07:03 +0200 - memory_get_usage test. - - * SVN Revision 140 - olivier, on Thu, 24 Apr 2008 11:34:02 +0200 - Fix a bug in html::absoluteURLs() - - * SVN Revision 141 - olivier, on Wed, 07 May 2008 15:44:15 +0200 - Added X-Forwarded-For support in netHttp - - -- Olivier Meunier Tue, 13 May 2008 14:04:11 +0200 - -libclearbricks (0.8-18) unstable; urgency=low ; svnrev=120 - - * SVN Revision 109 - olivier, on Tue, 19 Feb 2008 12:50:10 +0100 - New debian changelog - - * SVN Revision 110 - olivier, on Thu, 21 Feb 2008 01:23:59 +0100 - Fixed a bug and added getRootDir method in fileUnzip - - * SVN Revision 112 - olivier, on Thu, 21 Feb 2008 02:18:58 +0100 - Added isEmpty and hasFile methods in fileUnzip - - * SVN Revision 114 - olivier, on Thu, 21 Feb 2008 12:03:01 +0100 - Created text::deaccent and applied this method in text::str2URL and files::tidyFileName - - * SVN Revision 116 - olivier, on Thu, 21 Feb 2008 16:47:25 +0100 - Try to handle memory usage in imageTools. - Add a grey background on alpha channel of PNG images for resize method. - Destroy image resource in close method. - - * SVN Revision 118 - olivier, on Sat, 23 Feb 2008 19:16:15 +0100 - Fix with files::registerMimeTypes - - * SVN Revision 119 - olivier, on Mon, 25 Feb 2008 11:36:41 +0100 - fileUnzip - Added a better way to recognize directories and tries - to increase memory limit if needed. - - -- Olivier Meunier Tue, 26 Feb 2008 10:19:58 +0100 - -libclearbricks (0.8-17) unstable; urgency=low ; svnrev=108 - - * SVN Revision 108 - olivier, on Tue, 19 Feb 2008 10:25:56 +0100 - New debian changelog - - -- Olivier Meunier Tue, 19 Feb 2008 12:47:49 +0100 - -libclearbricks (0.8-14) unstable; urgency=low ; svnrev=107 - - * SVN Revision 63 - mik, on Fri, 06 Jul 2007 13:19:43 +0200 - last version - - * SVN Revision 64 - olivier, on Fri, 13 Jul 2007 12:07:00 +0200 - May have fixed some bugs in UDBS synchronize process. - - * SVN Revision 65 - olivier, on Thu, 26 Jul 2007 10:08:11 +0200 - HTML validator class - - * SVN Revision 66 - olivier, on Thu, 26 Jul 2007 10:17:29 +0200 - HTML validator documentation update - - * SVN Revision 67 - olivier, on Fri, 27 Jul 2007 16:36:30 +0200 - Fixed a serious bug with tidy in HTML Filter - - * SVN Revision 68 - olivier, on Fri, 27 Jul 2007 16:40:40 +0200 - Better way to fix tidy issue in HTML Filter - - * SVN Revision 69 - olivier, on Sat, 28 Jul 2007 10:32:28 +0200 - You can now add some patterns for html::absoluteURLHandler() - - * SVN Revision 70 - olivier, on Mon, 30 Jul 2007 11:22:32 +0200 - Try to read php://input if HTTP_RAW_POST_DATA is empty in net.xmlrpc. - - * SVN Revision 71 - olivier, on Tue, 21 Aug 2007 10:00:58 +0200 - Allow some specific index to exist in DB and Schema. Typo fixes in comments and messages. - - * SVN Revision 72 - biou, on Sun, 02 Sep 2007 11:58:16 +0200 - text::cutString now works in utf-8 - (possible problems with trackbacks) - thx sasha for detecting the bug - - * SVN Revision 73 - olivier, on Thu, 20 Sep 2007 15:22:36 +0200 - Changed some properties scope - - * SVN Revision 76 - olivier, on Wed, 07 Nov 2007 15:06:38 +0100 - Fixed a bug with timezone offset in ISO8601 and RFC822 dates - - * SVN Revision 89 - olivier, on Sat, 01 Dec 2007 12:01:23 +0100 - Changed require by require_once in dbLayer::init - - * SVN Revision 92 - olivier, on Tue, 11 Dec 2007 22:53:56 +0100 - Fixed realIP() code. - - * SVN Revision 94 - biou, on Sat, 29 Dec 2007 11:41:47 +0100 - ability to register new mime types - - * SVN Revision 95 - biou, on Wed, 09 Jan 2008 11:10:26 +0100 - autoload upgraded to use spl_autoload_register (with backward compat) - - * SVN Revision 96 - olivier, on Tue, 15 Jan 2008 16:11:37 +0100 - Changed the way we sort items in filemanager - - * SVN Revision 98 - olivier, on Fri, 15 Feb 2008 15:43:35 +0100 - Added unzip class - - * SVN Revision 100 - olivier, on Fri, 15 Feb 2008 22:31:39 +0100 - Changed getFilesList() and added getDirsList() in fileUnzip class. - - * SVN Revision 101 - olivier, on Fri, 15 Feb 2008 22:50:25 +0100 - Don't append zip file basename to target in unzipAll (fileUnzip) - - * SVN Revision 102 - olivier, on Fri, 15 Feb 2008 23:12:12 +0100 - Moved exclude condition from unzipAll() to getList() in fileUnzip. - - * SVN Revision 103 - olivier, on Sat, 16 Feb 2008 00:40:16 +0100 - Removed files::makePackage and files::installPackage. - - * SVN Revision 104 - olivier, on Mon, 18 Feb 2008 14:00:42 +0100 - Fix in urlHandler class - - * SVN Revision 106 - olivier, on Mon, 18 Feb 2008 15:58:57 +0100 - Added cleanFileName() in fileUnzip class. - - -- Olivier Meunier Tue, 19 Feb 2008 10:24:09 +0100 - -libclearbricks (0.8-13) unstable; urgency=low ; svnrev=62 - - * SVN Revision 61 - mik, on Mon, 02 Jul 2007 11:10:18 +0200 - last version changelog - - * SVN Revision 62 - olivier, on Fri, 06 Jul 2007 13:14:27 +0200 - Fixed a bug in socketMail::getFrom() - - -- Olivier Meunier Fri, 06 Jul 2007 13:18:46 +0200 - -libclearbricks (0.8-12) unstable; urgency=low ; svnrev=60 - - * SVN Revision 53 - pep, on Sun, 03 Jun 2007 12:31:25 +0200 - Changed the way we obtain current TZ - - * SVN Revision 54 - olivier, on Mon, 11 Jun 2007 10:46:06 +0200 - Changed default values in sessionDB constructor - - * SVN Revision 55 - pep, on Tue, 12 Jun 2007 19:51:21 +0200 - Fixed a bug - - * SVN Revision 56 - biou, on Wed, 13 Jun 2007 14:24:02 +0200 - permits file creation with putContent - - * SVN Revision 57 - biou, on Thu, 21 Jun 2007 17:15:06 +0200 - added a consistency check on the moveFile method - - * SVN Revision 58 - olivier, on Thu, 28 Jun 2007 16:03:35 +0200 - Added video/x-flv in lib.files - - * SVN Revision 59 - olivier, on Mon, 02 Jul 2007 10:29:10 +0200 - Fixed bugs in socketMail::getFrom - - * SVN Revision 60 - mik, on Mon, 02 Jul 2007 11:07:16 +0200 - export LANG=C before svn commands - - -- Olivier Meunier Mon, 02 Jul 2007 11:09:40 +0200 - -libclearbricks (0.8-11) unstable; urgency=low ; svnrev=52 - - * SVN Revision 36 - olivier, on Thu, 15 Feb 2007 19:02:26 +0100 - Fixed redirect bug in netHttp - - * SVN Revision 37 - olivier, on Sun, 18 Feb 2007 18:08:32 +0100 - Added default timezone in common/_main.php - - * SVN Revision 38 - olivier, on Sun, 18 Feb 2007 18:17:22 +0100 - Changed template::getData() code. - - * SVN Revision 39 - olivier, on Sun, 18 Feb 2007 22:20:26 +0100 - template::getData() optim. - - * SVN Revision 40 - olivier, on Mon, 19 Feb 2007 11:02:48 +0100 - Added strict_check mode in xmlrpcServer. Default to false. - - * SVN Revision 41 - olivier, on Mon, 19 Feb 2007 11:24:51 +0100 - Removed l10n::getHtmlFile() and added l10n::getFilePath(). - - * SVN Revision 42 - olivier, on Fri, 23 Feb 2007 14:00:39 +0100 - Fixed a bug with starting dot lines in nntp class. - - * SVN Revision 43 - pep, on Fri, 23 Feb 2007 16:43:40 +0100 - Small fix : seems better ... - - * SVN Revision 44 - olivier, on Mon, 26 Feb 2007 14:35:56 +0100 - Forgot 'class' attribute for 'a' tag. - - * SVN Revision 45 - pep, on Wed, 28 Feb 2007 02:50:48 +0100 - Shouldn't inflate incoming content when use_gzip = false - - * SVN Revision 46 - olivier, on Wed, 21 Mar 2007 16:33:28 +0100 - * New dbSchema classes collection. - * Removed getTables() and getColumns() method from dbLayer(). - * Added a database() method in dbLayer returning current database in use. - - * SVN Revision 47 - olivier, on Wed, 21 Mar 2007 23:58:02 +0100 - Returns changes count in dbStruct::synchronize(). - - * SVN Revision 48 - olivier, on Fri, 30 Mar 2007 17:30:22 +0200 - Added a static property (https_scheme_on_443) to force https scheme if port is 443 - in http::getHost(). - - * SVN Revision 49 - olivier, on Mon, 02 Apr 2007 13:35:06 +0200 - added http::browserUID. - - * SVN Revision 50 - olivier, on Mon, 02 Apr 2007 14:52:44 +0200 - Allow secure session cookies - - * SVN Revision 51 - olivier, on Mon, 02 Apr 2007 14:57:20 +0200 - Added cookie_domain for session - - * SVN Revision 52 - olivier, on Tue, 17 Apr 2007 17:53:44 +0200 - Signature fix in mail.convert - - -- Olivier Meunier Thu, 19 Apr 2007 16:06:54 +0200 - -libclearbricks (0.8-10) unstable; urgency=low ; svnrev=35 - - * SVN Revision 33 - mik, on Thu, 01 Feb 2007 18:39:56 +0100 - Romuald:gruik pour display de la date en fonction de la timezone - - * SVN Revision 34 - olivier, on Mon, 05 Feb 2007 11:05:25 +0100 - Timezone display in dt::str and dt::dt2str - - * SVN Revision 35 - olivier, on Mon, 05 Feb 2007 16:22:59 +0100 - net.xmlrpc - - -- Olivier Meunier Mon, 05 Feb 2007 17:50:20 +0100 - -libclearbricks (0.8-9) unstable; urgency=low ; svnrev=32 - - * SVN Revision 30 - olivier, on Thu, 25 Jan 2007 16:53:01 +0100 - Implemented status_string in netHttp - - * SVN Revision 31 - olivier, on Wed, 31 Jan 2007 13:53:10 +0100 - NEWNEWS implementation in netNntp::getNewArticles(). - - * SVN Revision 32 - olivier, on Wed, 31 Jan 2007 19:32:05 +0100 - Fix in net.nntp - - -- Olivier Meunier Wed, 31 Jan 2007 19:36:08 +0100 - -libclearbricks (0.8-8) unstable; urgency=low ; svnrev=29 - - * SVN Revision 28 - olivier, on Thu, 25 Jan 2007 10:31:20 +0100 - Can now specify a port for postgresql connection. - - * SVN Revision 29 - olivier, on Thu, 25 Jan 2007 14:47:15 +0100 - Fix in text::QPEncode() static method - - -- Olivier Meunier Thu, 25 Jan 2007 15:31:25 +0100 - -libclearbricks (0.8-7) unstable; urgency=low ; svnrev=27 - - * SVN Revision 26 - olivier, on Wed, 17 Jan 2007 16:57:51 +0100 - Chmod on feed cache file - - * SVN Revision 27 - olivier, on Wed, 17 Jan 2007 16:58:09 +0100 - Chmod on template cache file - - -- Olivier Meunier Wed, 17 Jan 2007 16:59:11 +0100 - -libclearbricks (0.8-6) unstable; urgency=low ; svnrev=25 - - * SVN Revision 25 - olivier, on Wed, 17 Jan 2007 16:22:49 +0100 - Fixed chmod bug. - - -- Olivier Meunier Wed, 17 Jan 2007 16:23:25 +0100 - -libclearbricks (0.8-5) unstable; urgency=low ; svnrev=24 - - * SVN Revision 24 - olivier, on Tue, 16 Jan 2007 16:13:10 +0100 - New debian changelog - - -- Olivier Meunier Wed, 17 Jan 2007 14:26:32 +0100 - -libclearbricks (0.8-4) unstable; urgency=low ; svnrev=23 - - * SVN Revision 18 - mik, on Fri, 12 Jan 2007 13:33:59 +0100 - libclearbricks' readme in the package - - * SVN Revision 19 - mik, on Fri, 12 Jan 2007 13:36:13 +0100 - empty so removed - - * SVN Revision 20 - mik, on Mon, 15 Jan 2007 18:24:05 +0100 - README file copied in debian dir - - * SVN Revision 21 - olivier, on Tue, 16 Jan 2007 15:17:05 +0100 - Test .svn dir before mkdcl.php launch - - * SVN Revision 22 - olivier, on Tue, 16 Jan 2007 15:48:04 +0100 - Fix in files::touch() method - - * SVN Revision 23 - olivier, on Tue, 16 Jan 2007 16:12:02 +0100 - Zend hash del key or index fix. - - -- Olivier Meunier Tue, 16 Jan 2007 16:12:50 +0100 - -libclearbricks (0.8-3) unstable; urgency=low ; svnrev=17 - - * SVN Revision 13 - olivier, on Wed, 10 Jan 2007 00:51:10 +0100 - Makefile and Debian package for clearbricks - - * SVN Revision 14 - olivier, on Wed, 10 Jan 2007 16:27:08 +0100 - Clearbricks Debian packager - - * SVN Revision 15 - olivier, on Thu, 11 Jan 2007 14:44:42 +0100 - Test if database functions exist on dblayer driver load. - - * SVN Revision 16 - olivier, on Fri, 12 Jan 2007 01:30:36 +0100 - Fixed Windows bug in files::makeDir. - - * SVN Revision 17 - olivier, on Fri, 12 Jan 2007 01:57:56 +0100 - Fixed an issue with recursive files::makeDir and open_basedir. - - -- Olivier Meunier Fri, 12 Jan 2007 13:34:21 +0100 - -libclearbricks (0.8-2) unstable; urgency=low ; svnrev=12 - - * SVN Revision 10 - olivier, on Tue, 09 Jan 2007 13:53:03 +0100 - Added default HTTP Status Messages in http::head() - - * SVN Revision 11 - olivier, on Tue, 09 Jan 2007 16:46:09 +0100 - Added clearbricks version number. - - * SVN Revision 12 - olivier, on Wed, 10 Jan 2007 00:17:53 +0100 - Fixed PHP 5.0 compatibilty issue \o/ - - -- Olivier Meunier Wed, 10 Jan 2007 16:24:31 +0100 - -libclearbricks (0.8-1) unstable; urgency=low ; svnrev=9 - - First upstream release - - -- Olivier Meunier Tue, 09 Jan 2007 16:50:12 +0100 - diff --git a/v2/dotclear/inc/libs/clearbricks/debian/compat b/v2/dotclear/inc/libs/clearbricks/debian/compat deleted file mode 100644 index b8626c4..0000000 --- a/v2/dotclear/inc/libs/clearbricks/debian/compat +++ /dev/null @@ -1 +0,0 @@ -4 diff --git a/v2/dotclear/inc/libs/clearbricks/debian/control b/v2/dotclear/inc/libs/clearbricks/debian/control deleted file mode 100644 index f371d2c..0000000 --- a/v2/dotclear/inc/libs/clearbricks/debian/control +++ /dev/null @@ -1,14 +0,0 @@ -Source: libclearbricks -Section: web -Priority: optional -Maintainer: Olivier Meunier -Build-Depends: debhelper (>= 4.0.0), php5-cli -Standards-Version: 3.6.1 - -Package: libclearbricks -Architecture: all -Depends: ${misc:Depends}, php5-cli | php5-cgi | libapache2-mod-php5 | libapache-mod-php5 -Suggests: php5-pgsql | php5-sqlite | php5-mysql, php5-gd, php5-tidy -Description: libclearbricks is a set of PHP classes and utilities - Clearbricks is not yet another PHP framework. Clearbricks is only - about code and efficiency, consider it as a toolbox. diff --git a/v2/dotclear/inc/libs/clearbricks/debian/copyright b/v2/dotclear/inc/libs/clearbricks/debian/copyright deleted file mode 100644 index 235ba0d..0000000 --- a/v2/dotclear/inc/libs/clearbricks/debian/copyright +++ /dev/null @@ -1,27 +0,0 @@ -This is Clearbricks, written and maintained by Olivier Meunier <> -on Fri, 29 Dec 2006 16:55:20 +0200. - -The original source can always be found at: - http://clearbricks.org/ - -Copyright (C) 2006 Olivier Meunier - -License: - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this package; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. - -On Debian systems, the complete text of the GNU General -Public License can be found in `/usr/share/common-licenses/GPL'. diff --git a/v2/dotclear/inc/libs/clearbricks/debian/dirs b/v2/dotclear/inc/libs/clearbricks/debian/dirs deleted file mode 100644 index 67ddb20..0000000 --- a/v2/dotclear/inc/libs/clearbricks/debian/dirs +++ /dev/null @@ -1 +0,0 @@ -usr/lib/clearbricks diff --git a/v2/dotclear/inc/libs/clearbricks/debian/docs b/v2/dotclear/inc/libs/clearbricks/debian/docs deleted file mode 100644 index e845566..0000000 --- a/v2/dotclear/inc/libs/clearbricks/debian/docs +++ /dev/null @@ -1 +0,0 @@ -README diff --git a/v2/dotclear/inc/libs/clearbricks/debian/mkdcl.php b/v2/dotclear/inc/libs/clearbricks/debian/mkdcl.php deleted file mode 100644 index 39688c7..0000000 --- a/v2/dotclear/inc/libs/clearbricks/debian/mkdcl.php +++ /dev/null @@ -1,198 +0,0 @@ -#!/usr/bin/env php -f)) { - throw new Exception('No changelog file found'); - } - } - - private function readLastRevision() - { - $f = file($this->f); - $res = array(); - $done = false; - - foreach ($f as $v) - { - $v = rtrim($v,"\n"); - - # First line of a change - if (strpos($v,' ') !== 0 && trim($v) != '') - { - if ($done) { - break; - } - - $done = true; - $res = $this->getPackageInfo($v,$res[$i]); - } - # Maintainer information - elseif (strpos($v,' --') === 0) - { - $res['maintainer'] = $this->getMaintainerInfo($v); - } - # Changelog - elseif (strpos($v,' ') === 0) - { - $res['changelog'] .= $v."\n"; - } - } - - return $res; - } - - public function writeChangelog() - { - $ch = $this->readLastRevision(); - - # Get debian revision - $rev = 1; - if (preg_match('/^(.*)-(\d+)$/',$ch['version'],$m)) { - $ch['version'] = $m[1]; - $rev = $m[2]; - } - $rev++; - - # Get SVN revision - $svnrev = isset($ch['keywords']['svnrev']) ? (integer) $ch['keywords']['svnrev'] : 1; - - # Get current SVN revision - $currev = svnInfo::getCurrentRevision(); - if ($currev <= $svnrev) { - return; - } - - $changelog = ''; - $changes = svnInfo::getChangeLog($svnrev+1,$currev); - foreach ($changes as $k => $v) - { - $changelog .= - ' * SVN Revision '.$k.' - '.$v['author']. - ', on '.date('r',strtotime($v['date']))."\n". - ' '.trim(preg_replace('/\n/ms',"\n ",$v['msg']))."\n\n"; - - } - - $res = - $ch['package'].' ('.$ch['version'].'-'.$rev.') '.$ch['dist'].'; urgency='.$ch['keywords']['urgency']. - ' ; svnrev='.$currev. - "\n\n". - rtrim($changelog)."\n\n". - ' -- '.$ch['maintainer']['name'].' <'.$ch['maintainer']['email'].'> '.date('r')."\n". - "\n"; - - $old_changelog = file_get_contents($this->f); - $fp = fopen($this->f,'wb'); - fwrite($fp,$res.$old_changelog); - fclose($fp); - } - - private function getPackageInfo($l) - { - $res = array( - 'package' => '', - 'version' => '', - 'dist' => '', - 'keywords' => '', - 'changelog' => '', - 'maintainer' => array() - ); - - $l = explode(';',$l); - - # Info - $info = array_shift($l); - $res['package'] = strtok($info,' '); - $res['version'] = strtok('()'); - $res['dist'] = trim(strtok(';')); - - # Keywords - foreach ($l as $v) { - $v = explode('=',$v); - if (count($v) == 2) { - $res['keywords'][trim($v[0])] = trim($v[1]); - } - } - - return $res; - } - - private function getMaintainerInfo($l) - { - $res = array( - 'name' => '', - 'email' => '', - 'date' => '' - ); - - if (preg_match('/^ -- (.+?) <(.+?)> (.+?)$/',$l,$m)) { - $res['name'] = $m[1]; - $res['email'] = $m[2]; - $res['date'] = $m[3]; - } - - return $res; - } -} - -class svnInfo -{ - public static function getCurrentRevision() - { - $info = `LANG=C svn info --xml`; - - $x = @simplexml_load_string($info); - if (!$x) { - throw new Exception('Unable to get current SVN revision'); - } - - $rev = $x->entry->commit['revision']; - - if (!$rev) { - throw new Exception('Last revision number is invalid'); - } - - return (integer) $rev; - } - - public static function getChangeLog($fromrev,$torev) - { - $log = `LANG=C svn log --xml -r $fromrev:$torev`; - - $x = @simplexml_load_string($log); - if (!$x) { - throw new Exception('Unable to open SVN log'); - } - - $res = array(); - foreach ($x->logentry as $change) - { - $res[(integer) $change['revision']] = array( - 'author' => (string) $change->author, - 'date' => (string) $change->date, - 'msg' => trim((string) $change->msg) - ); - } - - return $res; - } -} - -# Main -try -{ - $ch = new debianChangelog(); - $ch->writeChangelog(); -} -catch (Exception $e) -{ - fwrite(STDERR,$e->getMessage()."\n"); - exit(1); -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/libs/clearbricks/debian/rules b/v2/dotclear/inc/libs/clearbricks/debian/rules deleted file mode 100644 index 5f5f3e9..0000000 --- a/v2/dotclear/inc/libs/clearbricks/debian/rules +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/make -f -# -*- makefile -*- - -DEST=debian/dotclear/usr/share/dotclear - -configure: configure-stamp -configure-stamp: - dh_testdir - # Add here commands to configure the package. - - touch configure-stamp - -build: build-stamp - -build-stamp: configure-stamp - dh_testdir - - # Add here commands to compile the package. - $(MAKE) config - touch build-stamp - -clean: - dh_testdir - dh_testroot - rm -f build-stamp configure-stamp - - # Add here commands to clean up after the build process. - -$(MAKE) clean - - dh_clean - -install: build - dh_testdir - dh_testroot - dh_clean -k - dh_installdirs - - cp -af $(CURDIR)/_dist/clearbricks $(CURDIR)/debian/libclearbricks/usr/lib/ - -# Build architecture-independent files here. -binary-indep: build install -# We have nothing to do by default. - -# Build architecture-dependent files here. -binary-arch: build install - dh_testdir - dh_testroot - dh_installchangelogs - dh_installdocs - dh_installexamples - dh_installman - dh_link - dh_strip - dh_compress - dh_fixperms - dh_installdeb - dh_gencontrol - dh_md5sums - dh_builddeb - -binary: binary-indep binary-arch -.PHONY: build clean binary-indep binary-arch binary install configure diff --git a/v2/dotclear/inc/libs/clearbricks/diff/lib.diff.php b/v2/dotclear/inc/libs/clearbricks/diff/lib.diff.php deleted file mode 100644 index ccc62f3..0000000 --- a/v2/dotclear/inc/libs/clearbricks/diff/lib.diff.php +++ /dev/null @@ -1,366 +0,0 @@ -0); - $end_reached = false; - - # Find LCS length - for ($D = 0; $D < $cx+$cy+1 && !$end_reached; $D++) - { - for ($k = -$D; $k <= $D; $k += 2) - { - $x = ($k == -$D || $k != $D && $V[$k-1] < $V[$k+1]) - ? $V[$k+1] : $V[$k-1]+1; - $y = $x-$k; - - while ($x < $cx && $y < $cy && $src[$x] == $dst[$y]) - { - $x++; $y++; - } - - $V[$k] = $x; - - if ($x == $cx && $y == $cy) { - $end_reached = true; - break; - } - } - $stack[] = $V; - } - $D--; - - # Recover edit path - $res = array(); - for ($D = $D; $D > 0; $D--) - { - $V = array_pop($stack); - $cx = $x; - $cy = $y; - - # Try right diagonal - $k++; - $x = array_key_exists($k,$V) ? $V[$k] : 0; - $y = $x-$k; - $y++; - - while ($x < $cx && $y < $cy - && isset($src[$x]) && isset($dst[$y]) && $src[$x] == $dst[$y]) - { - $x++; $y++; - } - - if ($x == $cx && $y == $cy) { - $x = $V[$k]; - $y = $x-$k; - - $res[] = array('i',$x,$y); - continue; - } - - # Right diagonal wasn't the solution, use left diagonal - $k -= 2; - $x = $V[$k]; - $y = $x-$k; - $res[] = array('d',$x,$y); - } - - return array_reverse($res); - } - - /** - * Returns unified diff from source $src to destination $dst. - * - * @param string $src Original data - * @param string $dst New data - * @param string $ctx Context length - * @return string - */ - public static function uniDiff($src,$dst,$ctx=2) - { - list($src,$dst) = array(explode("\n",$src),explode("\n",$dst)); - $cx = count($src); $cy = count($dst); - - $ses = diff::SES($src,$dst); - $res = ''; - - $pos_x = 0; - $pos_y = 0; - $old_lines = 0; - $new_lines = 0; - $buffer = ''; - - foreach ($ses as $cmd) - { - list($cmd,$x,$y) = array($cmd[0],$cmd[1],$cmd[2]); - - # New chunk - if ($x-$pos_x > 2*$ctx || $pos_x == 0 && $x > $ctx) - { - # Footer for current chunk - for ($i = 0; $buffer && $i < $ctx; $i++) - { - $buffer .= sprintf(self::$us_ctx,$src[$pos_x+$i]); - } - - # Header for current chunk - $res .= sprintf(self::$us_range, - $pos_x+1-$old_lines,$old_lines+$i, - $pos_y+1-$new_lines,$new_lines+$i - ).$buffer; - - $pos_x = $x; - $pos_y = $y; - $old_lines = 0; - $new_lines = 0; - $buffer = ''; - - # Header for next chunk - for ($i = $ctx; $i > 0 ; $i--) - { - $buffer .= sprintf(self::$us_ctx,$src[$pos_x-$i]); - $old_lines++; - $new_lines++; - } - } - - # Context - while ($x > $pos_x) - { - $old_lines++; - $new_lines++; - $buffer .= sprintf(self::$us_ctx,$src[$pos_x]); - $pos_x++; - $pos_y++; - } - # Deletion - if ($cmd == 'd') { - $old_lines++; - $buffer .= sprintf(self::$us_del,$src[$x]); - $pos_x++; - } - # Insertion - elseif ($cmd == 'i') { - $new_lines++; - $buffer .= sprintf(self::$us_ins,$dst[$y]); - $pos_y++; - } - } - - # Remaining chunk - if ($buffer) - { - # Footer - for ($i = 0; $i < $ctx; $i++) - { - if (!isset($src[$pos_x+$i])) { - break; - } - $buffer .= sprintf(self::$us_ctx,$src[$pos_x+$i]); - } - - # Header for current chunk - $res .= sprintf(self::$us_range, - $pos_x+1-$old_lines,$old_lines+$i, - $pos_y+1-$new_lines,$new_lines+$i - ).$buffer; - } - return $res; - } - - /** - * Applies a unified patch to a piece of text. - * Throws an exception on invalid or not applicable diff. - * - * @param string $src Source text - * @param string $diff Patch to apply - * @return string - */ - public static function uniPatch($src,$diff) - { - $dst = array(); - $src = explode("\n",$src); - $diff = explode("\n",$diff); - - $t = count($src); - $old_length = $new_length = 0; - - foreach ($diff as $line) - { - # New chunk - if (preg_match(self::$up_range,$line,$m)) { - $m[1]--; $m[3]--; - - if ($m[1] > $t) { - throw new Exception(__('Bad range')); - } - - if ($t - count($src) > $m[1]) { - throw new Exception(__('Invalid range')); - } - - while ($t - count($src) < $m[1]) - { - $dst[] = array_shift($src); - } - - if (count($dst) !== $m[3]) { - throw new Exception(__('Invalid line number')); - } - - if ($old_length || $new_length) { - throw new Exception(__('Chunk is out of range')); - } - - $old_length = (integer) $m[2]; - $new_length = (integer) $m[4]; - } - # Context - elseif (preg_match(self::$up_ctx,$line,$m)) { - if (array_shift($src) !== $m[1]) { - throw new Exception(__('Bad context')); - } - $dst[] = $m[1]; - $old_length--; - $new_length--; - } - # Addition - elseif (preg_match(self::$up_ins,$line,$m)) { - $dst[] = $m[1]; - $new_length--; - } - # Deletion - elseif (preg_match(self::$up_del,$line,$m)) { - if (array_shift($src) !== $m[1]) { - throw new Exception(__('Bad context (in deletion)')); - } - $old_length--; - } - elseif ($line == '') { - continue; - } - else { - throw new Exception(__('Invalid diff format')); - } - } - - if ($old_length || $new_length) { - throw new Exception(__('Chunk is out of range')); - } - - return implode("\n",array_merge($dst,$src)); - } - - /** - * Throws an exception on invalid unified diff. - * - * @param string $diff Diff text to check - */ - public static function uniCheck($diff) - { - $diff = explode("\n",$diff); - - $cur_line = 1; $ins_lines = 0; - - # Chunk length - $old_length = $new_length = 0; - - foreach ($diff as $line) - { - # New chunk - if (preg_match(self::$up_range,$line,$m)) { - if ($cur_line > $m[1]) { - throw new Exception(__('Invalid range')); - } - while ($cur_line < $m[1]) - { - $ins_lines++; $cur_line++; - } - if ($ins_lines+1 != $m[3]) { - throw new Exception(__('Invalid line number')); - } - - if ($old_length || $new_length) { - throw new Exception(__('Chunk is out of range')); - } - - $old_length = $m[2]; - $new_length = $m[4]; - } - # Context - elseif (preg_match(self::$up_ctx,$line,$m)) { - $ins_lines++; $cur_line++; - $old_length--; - $new_length--; - } - # Addition - elseif (preg_match(self::$up_ins,$line,$m)) { - $ins_lines++; - $new_length--; - } - # Deletion - elseif (preg_match(self::$up_del,$line,$m)) { - $cur_line++; - $old_length--; - } - # Skip empty lines - elseif ($line == '') { - continue; - } - # Unrecognized diff format - else { - throw new Exception(__('Invalid diff format')); - } - } - - if ($old_length || $new_length) { - throw new Exception(__('Chunk is out of range')); - } - } -} - -?> \ No newline at end of file diff --git a/v2/dotclear/inc/libs/clearbricks/diff/lib.tidy.diff.php b/v2/dotclear/inc/libs/clearbricks/diff/lib.tidy.diff.php deleted file mode 100644 index 3885797..0000000 --- a/v2/dotclear/inc/libs/clearbricks/diff/lib.tidy.diff.php +++ /dev/null @@ -1,353 +0,0 @@ -up_range,$udiff,$context); - - $chunks = preg_split($this->up_range,$udiff,-1,PREG_SPLIT_NO_EMPTY); - - foreach ($chunks as $k => $chunk) - { - $tidy_chunk = new tidyDiffChunk(); - $tidy_chunk->setRange( - (int) $context[1][$k], - (int) $context[2][$k], - (int) $context[3][$k], - (int) $context[4][$k] - ); - - $old_line = (int) $context[1][$k]; - $new_line = (int) $context[3][$k]; - - foreach (explode("\n",$chunk) as $line) - { - # context - if (preg_match($this->up_ctx,$line,$m)) { - $tidy_chunk->addLine('context',array($old_line,$new_line),$m[1]); - $old_line++; - $new_line++; - } - # insertion - if (preg_match($this->up_ins,$line,$m)) { - $tidy_chunk->addLine('insert',array($old_line,$new_line),$m[1]); - $new_line++; - } - # deletion - if (preg_match($this->up_del,$line,$m)) { - $tidy_chunk->addLine('delete',array($old_line,$new_line),$m[1]); - $old_line++; - } - } - - if ($inline_changes) { - $tidy_chunk->findInsideChanges(); - } - - array_push($this->__data,$tidy_chunk); - } - } - - /** - * All chunks - * - * Returns all chunks defined. - * - * @return array - */ - public function getChunks() - { - return $this->__data; - } -} - -/** -* TIDY diff chunk -* -* A diff chunk representation. Used by a TIDY diff. -* -* @package Clearbricks -* @subpackage Diff -*/ -class tidyDiffChunk -{ - /** @var array Chunk information array */ - protected $__info; - /** @var array Chunk data array */ - protected $__data; - - /** - * Constructor - * - * Creates and initializes a chunk representation for a TIDY diff. - */ - public function __construct() - { - $this->__info = array( - 'context' => 0, - 'delete' => 0, - 'insert' => 0, - 'range' => array( - 'start' => array(), - 'end' => array() - ) - ); - $this->__data = array(); - } - - /** - * Set chunk range - * - * Sets chunk range in TIDY chunk object. - * - * @param integer $line_start Old start line number - * @param integer $offest_start Old offset number - * @param integer $line_end new start line number - * @param integer $offset_end New offset number - */ - public function setRange($line_start,$offest_start,$line_end,$offset_end) - { - if (is_int($line_start) && is_int($offest_start) && is_int($line_end) && is_int($offset_end)) - { - $this->__info['range']['start'] = array($line_start,$offest_start); - $this->__info['range']['end'] = array($line_end,$offset_end); - } - } - - /** - * Add line - * - * Adds TIDY line object for TIDY chunk object. - * - * @param string $type Tine type - * @param array $lines Line number for old and new context - * @param string $content Line content - */ - public function addLine($type,$lines,$content) - { - $tidy_line = new tidyDiffLine($type,$lines,$content); - - if (!is_null($tidy_line)) { - array_push($this->__data,$tidy_line); - $this->__info[$type]++; - } - } - - /** - * All lines - * - * Returns all lines defined. - * - * @return array - */ - public function getLines() - { - return $this->__data; - } - - /** - * Chunk information - * - * Returns chunk information according to the given name, null otherwise. - * - * @param string $n Info name - * @return string - */ - public function getInfo($n) - { - return array_key_exists($n,$this->__info) ? $this->__info[$n] : null; - } - - /** - * Find changes - * - * Finds changes inside lines for each groups of diff lines. Wraps changes - * by string \0 and \1 - */ - public function findInsideChanges() - { - $groups = $this->getGroups(); - - foreach ($groups as $group) { - $middle = count($group) / 2; - for ($i = 0; $i < $middle; $i++) { - $from = $group[$i]; - $to = $group[$i + $middle]; - $threshold = $this->getChangeExtent($from->content,$to->content); - - if ($threshold['start'] != 0 || $threshold['end'] != 0) - { - $start = $threshold['start']; - $end = $threshold['end'] + strlen($from->content); - $offset = $end - $start; - $from->overwrite( - substr($from->content,0,$start).'\0'. - substr($from->content,$start,$offset).'\1'. - substr($from->content,$end,strlen($from->content)) - ); - $end = $threshold['end'] + strlen($to->content); - $offset = $end - $start; - $to->overwrite( - substr($to->content,0,$start).'\0'. - substr($to->content,$start,$offset).'\1'. - substr($to->content,$end,strlen($to->content)) - ); - } - } - } - } - - private function getGroups() - { - $res = $group = array(); - $allowed_types = array('delete','insert'); - $delete = $insert = 0; - - foreach ($this->__data as $k => $line) { - if (in_array($line->type,$allowed_types)) { - array_push($group,$line); - ${$line->type}++; - } else { - if ($delete === $insert && count($group) > 0) { - array_push($res,$group); - } - $delete = $insert = 0; - $group = array(); - } - } - if ($delete === $insert && count($group) > 0) { - array_push($res,$group); - } - - return $res; - } - - private function getChangeExtent($str1,$str2) - { - $start = 0; - $limit = min(strlen($str1), strlen($str2)); - while ($start < $limit and $str1[$start] === $str2[$start]) { - $start++; - } - - $end = -1; - $limit = $limit - $start; - - while (-$end <= $limit && $str1[strlen($str1) + $end] === $str2[strlen($str2) + $end]) { - $end--; - } - - return array('start' => $start,'end' => $end +1); - } -} - -/** -* TIDY diff line -* -* A diff line representation. Used by a TIDY chunk. -* -* @package Clearbricks -* @subpackage Diff -*/ -class tidyDiffLine -{ - /** @var string Line type */ - protected $type; - /** @var array Line number for old and new context */ - protected $lines; - /** @var string Line content */ - protected $content; - - /** - * Constructor - * - * Creates a line representation for a tidy chunk. Returns a new object if - * all parameters are fine, null otherwise. - * - * @param string $type Tine type - * @param array $lines Line number for old and new context - * @param string $content Line content - * @return object - */ - public function __construct($type,$lines,$content) - { - $allowed_type = array('context','delete','insert'); - - if (in_array($type,$allowed_type) && is_array($lines) && is_string($content)) { - $this->type = $type; - $this->lines = $lines; - $this->content = $content; - - return $this; - } - - return null; - } - - /** - * Magic get - * - * Returns field content according to the given name, null otherwise. - * - * @param string $n Field name - * @return string - */ - public function __get($n) - { - return isset($n,$this) ? $this->{$n} : null; - } - - /** - * Overwrite - * - * Overwrites content for the current line. - * - * @param string $content Line content - */ - public function overwrite($content) - { - if (is_string($content)) { - $this->content = $content; - } - } -} - -?> \ No newline at end of file diff --git a/v2/dotclear/inc/libs/clearbricks/ext/incutio.ixr_library.php b/v2/dotclear/inc/libs/clearbricks/ext/incutio.ixr_library.php deleted file mode 100644 index 7a5ead1..0000000 --- a/v2/dotclear/inc/libs/clearbricks/ext/incutio.ixr_library.php +++ /dev/null @@ -1,856 +0,0 @@ - htmlspecialchars) - Site: http://scripts.incutio.com/xmlrpc/ - Manual: http://scripts.incutio.com/xmlrpc/manual.php - Made available under the Artistic License: http://www.opensource.org/licenses/artistic-license.php -*/ - - -class IXR_Value -{ - public $data; - public $type; - - function IXR_Value ($data, $type = false) { - $this->data = $data; - if (!$type) { - $type = $this->calculateType(); - } - $this->type = $type; - if ($type == 'struct') { - /* Turn all the values in the array in to new IXR_Value objects */ - foreach ($this->data as $key => $value) { - $this->data[$key] = new IXR_Value($value); - } - } - if ($type == 'array') { - for ($i = 0, $j = count($this->data); $i < $j; $i++) { - $this->data[$i] = new IXR_Value($this->data[$i]); - } - } - } - function calculateType() { - if ($this->data === true || $this->data === false) { - return 'boolean'; - } - if (is_integer($this->data)) { - return 'int'; - } - if (is_double($this->data)) { - return 'double'; - } - // Deal with IXR object types base64 and date - if (is_object($this->data) && $this->data instanceof IXR_Date) { - return 'date'; - } - if (is_object($this->data) && $this->data instanceof IXR_Base64) { - return 'base64'; - } - // If it is a normal PHP object convert it in to a struct - if (is_object($this->data)) { - - $this->data = get_object_vars($this->data); - return 'struct'; - } - if (!is_array($this->data)) { - return 'string'; - } - /* We have an array - is it an array or a struct ? */ - if ($this->isStruct($this->data)) { - return 'struct'; - } else { - return 'array'; - } - } - function getXml() { - /* Return XML for this value */ - switch ($this->type) { - case 'boolean': - return ''.(($this->data) ? '1' : '0').''; - break; - case 'int': - return ''.$this->data.''; - break; - case 'double': - return ''.$this->data.''; - break; - case 'string': - return ''.htmlspecialchars($this->data).''; - break; - case 'array': - $return = ''."\n"; - foreach ($this->data as $item) { - $return .= ' '.$item->getXml()."\n"; - } - $return .= ''; - return $return; - break; - case 'struct': - $return = ''."\n"; - foreach ($this->data as $name => $value) { - $return .= " $name"; - $return .= $value->getXml()."\n"; - } - $return .= ''; - return $return; - break; - case 'date': - case 'base64': - return $this->data->getXml(); - break; - } - return false; - } - function isStruct($array) { - /* Nasty function to check if an array is a struct or not */ - $expected = 0; - foreach ($array as $key => $value) { - if ((string)$key != (string)$expected) { - return true; - } - $expected++; - } - return false; - } -} - - -class IXR_Message -{ - public $brutxml; - public $message; - public $messageType; // methodCall / methodResponse / fault - public $faultCode; - public $faultString; - public $methodName; - public $params; - // Current variable stacks - public $_arraystructs = array(); // The stack used to keep track of the current array/struct - public $_arraystructstypes = array(); // Stack keeping track of if things are structs or array - public $_currentStructName = array(); // A stack as well - public $_param; - public $_value; - public $_currentTag; - public $_currentTagContents; - // The XML parser - public $_parser; - function IXR_Message ($message) { - $this->brutxml = $this->message = $message; - } - function parse() { - // first remove the XML declaration - $this->message = preg_replace('/<\?xml(.*)?\?'.'>/', '', $this->message); - if (trim($this->message) == '') { - return false; - } - $this->_parser = xml_parser_create(); - // Set XML parser to take the case of tags in to account - xml_parser_set_option($this->_parser, XML_OPTION_CASE_FOLDING, false); - // Set XML parser callback functions - xml_set_object($this->_parser, $this); - xml_set_element_handler($this->_parser, 'tag_open', 'tag_close'); - xml_set_character_data_handler($this->_parser, 'cdata'); - if (!xml_parse($this->_parser, $this->message)) { - /* die(sprintf('XML error: %s at line %d', - xml_error_string(xml_get_error_code($this->_parser)), - xml_get_current_line_number($this->_parser))); */ - return false; - } - xml_parser_free($this->_parser); - // Grab the error messages, if any - if ($this->messageType == 'fault') { - $this->faultCode = $this->params[0]['faultCode']; - $this->faultString = $this->params[0]['faultString']; - } - return true; - } - function tag_open($parser, $tag, $attr) { - $this->currentTag = $tag; - switch($tag) { - case 'methodCall': - case 'methodResponse': - case 'fault': - $this->messageType = $tag; - break; - /* Deal with stacks of arrays and structs */ - case 'data': // data is to all intents and puposes more interesting than array - $this->_arraystructstypes[] = 'array'; - $this->_arraystructs[] = array(); - break; - case 'struct': - $this->_arraystructstypes[] = 'struct'; - $this->_arraystructs[] = array(); - break; - } - } - function cdata($parser, $cdata) { - $this->_currentTagContents .= $cdata; - } - function tag_close($parser, $tag) { - $valueFlag = false; - switch($tag) { - case 'int': - case 'i4': - $value = (int)trim($this->_currentTagContents); - $this->_currentTagContents = ''; - $valueFlag = true; - break; - case 'double': - $value = (double)trim($this->_currentTagContents); - $this->_currentTagContents = ''; - $valueFlag = true; - break; - case 'string': - $value = (string)trim($this->_currentTagContents); - $this->_currentTagContents = ''; - $valueFlag = true; - break; - case 'dateTime.iso8601': - $value = new IXR_Date(trim($this->_currentTagContents)); - // $value = $iso->getTimestamp(); - $this->_currentTagContents = ''; - $valueFlag = true; - break; - case 'value': - // "If no type is indicated, the type is string." - if (trim($this->_currentTagContents) != '') { - $value = (string)$this->_currentTagContents; - $this->_currentTagContents = ''; - $valueFlag = true; - } - break; - case 'boolean': - $value = (boolean)trim($this->_currentTagContents); - $this->_currentTagContents = ''; - $valueFlag = true; - break; - case 'base64': - $value = base64_decode($this->_currentTagContents); - $this->_currentTagContents = ''; - $valueFlag = true; - break; - /* Deal with stacks of arrays and structs */ - case 'data': - case 'struct': - $value = array_pop($this->_arraystructs); - array_pop($this->_arraystructstypes); - $valueFlag = true; - break; - case 'member': - array_pop($this->_currentStructName); - break; - case 'name': - $this->_currentStructName[] = trim($this->_currentTagContents); - $this->_currentTagContents = ''; - break; - case 'methodName': - $this->methodName = trim($this->_currentTagContents); - $this->_currentTagContents = ''; - break; - } - if ($valueFlag) { - /* - if (!is_array($value) && !is_object($value)) { - $value = trim($value); - } - */ - if (count($this->_arraystructs) > 0) { - // Add value to struct or array - if ($this->_arraystructstypes[count($this->_arraystructstypes)-1] == 'struct') { - // Add to struct - $this->_arraystructs[count($this->_arraystructs)-1][$this->_currentStructName[count($this->_currentStructName)-1]] = $value; - } else { - // Add to array - $this->_arraystructs[count($this->_arraystructs)-1][] = $value; - } - } else { - // Just add as a paramater - $this->params[] = $value; - } - } - } -} - - -class IXR_Server -{ - public $data; - public $callbacks = array(); - public $message; - public $capabilities; - function IXR_Server($callbacks = false, $data = false) { - $this->setCapabilities(); - if ($callbacks) { - $this->callbacks = $callbacks; - } - $this->setCallbacks(); - $this->serve($data); - } - function head($code,$msg) - { - $status_mode = preg_match('/cgi/',php_sapi_name()); - - if ($status_mode) { - header('Status: '.$code.' '.$msg); - } else { - if (version_compare(phpversion(),'4.3.0','>=')) { - header($msg, TRUE, $code); - } else { - header('HTTP/1.x '.$code.' '.$msg); - } - } - } - function serve($data = false, $encoding='ISO-8859-1') { - if (!$data) { - global $HTTP_RAW_POST_DATA; - if (!$HTTP_RAW_POST_DATA) { - $this->head(405,'Method Not Allowed'); - header('Content-Type: text/plain'); - echo 'XML-RPC server accepts POST requests only.'; - exit; - } - $data = $HTTP_RAW_POST_DATA; - } - $this->message = new IXR_Message($data); - if (!$this->message->parse()) { - $this->error(-32700, 'parse error. not well formed'); - } - if ($this->message->messageType != 'methodCall') { - $this->error(-32600, 'server error. invalid xml-rpc. not conforming to spec. Request must be a methodCall'); - } - $result = $this->call($this->message->methodName, $this->message->params); - // Is the result an error? - if ($result instanceof IXR_Error) { - $this->error($result); - } - // Encode the result - $r = new IXR_Value($result); - $resultxml = $r->getXml(); - // Create the XML - $xml = << - - - - $resultxml - - - - - -EOD; - // Send it - $this->output($xml,$encoding); - } - function call($methodname, $args) { - if (!$this->hasMethod($methodname)) { - return new IXR_Error(-32601, 'server error. requested method '.$methodname.' does not exist.'); - } - $method = $this->callbacks[$methodname]; - // Perform the callback and send the response - if (count($args) == 1) { - // If only one paramater just send that instead of the whole array - $args = $args[0]; - } - // Are we dealing with a function or a method? - if (substr($method, 0, 5) == 'this:') { - // It's a class method - check it exists - $method = substr($method, 5); - if (!method_exists($this, $method)) { - return new IXR_Error(-32601, 'server error. requested class method "'.$method.'" does not exist.'); - } - // Call the method - $result = $this->$method($args); - } else { - // It's a function - does it exist? - if (!function_exists($method)) { - return new IXR_Error(-32601, 'server error. requested function "'.$method.'" does not exist.'); - } - // Call the function - $result = $method($args); - } - return $result; - } - - function error($error, $message = false) { - // Accepts either an error object or an error code and message - if ($message && !is_object($error)) { - $error = new IXR_Error($error, $message); - } - $this->output($error->getXml()); - } - function output($xml,$encoding='ISO-8859-1') { - $xml = ''."\n".$xml; - $length = strlen($xml); - header('Connection: close'); - header('Content-Length: '.$length); - header('Content-Type: text/xml'); - header('Date: '.date('r')); - echo $xml; - exit; - } - function hasMethod($method) { - return in_array($method, array_keys($this->callbacks)); - } - function setCapabilities() { - // Initialises capabilities array - $this->capabilities = array( - 'xmlrpc' => array( - 'specUrl' => 'http://www.xmlrpc.com/spec', - 'specVersion' => 1 - ), - 'faults_interop' => array( - 'specUrl' => 'http://xmlrpc-epi.sourceforge.net/specs/rfc.fault_codes.php', - 'specVersion' => 20010516 - ), - 'system.multicall' => array( - 'specUrl' => 'http://www.xmlrpc.com/discuss/msgReader$1208', - 'specVersion' => 1 - ) - ); - } - function getCapabilities($args) { - return $this->capabilities; - } - function setCallbacks() { - $this->callbacks['system.getCapabilities'] = 'this:getCapabilities'; - $this->callbacks['system.listMethods'] = 'this:listMethods'; - $this->callbacks['system.multicall'] = 'this:multiCall'; - } - function listMethods($args) { - // Returns a list of methods - uses array_reverse to ensure user defined - // methods are listed before server defined methods - return array_reverse(array_keys($this->callbacks)); - } - function multiCall($methodcalls) { - // See http://www.xmlrpc.com/discuss/msgReader$1208 - $return = array(); - foreach ($methodcalls as $call) { - $method = $call['methodName']; - $params = $call['params']; - if ($method == 'system.multicall') { - $result = new IXR_Error(-32600, 'Recursive calls to system.multicall are forbidden'); - } else { - $result = $this->call($method, $params); - } - if ($result instanceof IXR_Error) { - $return[] = array( - 'faultCode' => $result->code, - 'faultString' => $result->message - ); - } else { - $return[] = array($result); - } - } - return $return; - } -} - -class IXR_Request { - public $method; - public $args; - public $xml; - function IXR_Request($method, $args) { - $this->method = $method; - $this->args = $args; - $this->xml = << - -{$this->method} - - -EOD; - foreach ($this->args as $arg) { - $this->xml .= ''; - $v = new IXR_Value($arg); - $this->xml .= $v->getXml(); - $this->xml .= "\n"; - } - $this->xml .= ''; - } - function getLength() { - return strlen($this->xml); - } - function getXml() { - return $this->xml; - } -} - - -class IXR_Client { - public $server; - public $port; - public $path; - public $useragent; - protected $proxy_host; - protected $proxy_port; - public $timeout = 10; - public $response; - public $message = false; - public $debug = false; - // Storage place for an error message - public $error = false; - function IXR_Client($server, $path = false, $port = 80) { - if (!$path) { - // Assume we have been given a URL instead - $bits = parse_url($server); - $this->server = $bits['host']; - $this->port = isset($bits['port']) ? $bits['port'] : 80; - $this->path = isset($bits['path']) ? $bits['path'] : '/'; - // Make absolutely sure we have a path - if (!$this->path) { - $this->path = '/'; - } - } else { - $this->server = $server; - $this->path = $path; - $this->port = $port; - } - $this->useragent = 'The Incutio XML-RPC PHP Library'; - - if (defined('HTTP_PROXY_HOST') && defined('HTTP_PROXY_PORT')) { - $this->setProxy(HTTP_PROXY_HOST,HTTP_PROXY_PORT); - } - } - function setProxy($host,$port='8080') - { - $this->proxy_host = $host; - $this->proxy_port = $port; - } - function query() { - $args = func_get_args(); - $method = array_shift($args); - $request = new IXR_Request($method, $args); - $length = $request->getLength(); - $xml = $request->getXml(); - $r = "\r\n"; - $request = "POST {$this->path} HTTP/1.0$r"; - $request .= "Host: {$this->server}$r"; - $request .= "Content-Type: text/xml$r"; - $request .= "User-Agent: {$this->useragent}$r"; - $request .= "Content-length: {$length}$r$r"; - $request .= $xml; - // Now send the request - if ($this->debug) { - echo '
      '.htmlspecialchars($request)."\n
      \n\n"; - } - - if ($this->proxy_host && $this->proxy_port) { - $host = $this->proxy_host; - $port = $this->proxy_port; - } else { - $host = $this->server; - $port = $this->port; - } - - $fp = @fsockopen($host, $port, $errno, $errstr, $this->timeout); - if (!$fp) { - $this->error = new IXR_Error(-32300, 'transport error - could not open socket'); - return false; - } - socket_set_timeout($fp, $this->timeout); - fputs($fp, $request); - $contents = ''; - $gotFirstLine = false; - $gettingHeaders = true; - while (!feof($fp)) { - $line = fgets($fp, 4096); - if (!$gotFirstLine) { - // Check line for '200' - if (strstr($line, '200') === false) { - $this->error = new IXR_Error(-32300, 'transport error - HTTP status code was not 200'); - return false; - } - $gotFirstLine = true; - } - if (trim($line) == '') { - $gettingHeaders = false; - } - if (!$gettingHeaders) { - $contents .= trim($line)."\n"; - } - } - if ($this->debug) { - echo '
      '.htmlspecialchars($contents)."\n
      \n\n"; - } - // Now parse what we've got back - $this->message = new IXR_Message($contents); - if (!$this->message->parse()) { - // XML error - $this->error = new IXR_Error(-32700, 'parse error. not well formed'); - return false; - } - // Is the message a fault? - if ($this->message->messageType == 'fault') { - $this->error = new IXR_Error($this->message->faultCode, $this->message->faultString); - return false; - } - // Message must be OK - return true; - } - function getResponse() { - // methodResponses can only have one param - return that - return $this->message->params[0]; - } - function isError() { - return (is_object($this->error)); - } - function getErrorCode() { - return $this->error->code; - } - function getErrorMessage() { - return $this->error->message; - } -} - - -class IXR_Error { - public $code; - public $message; - function IXR_Error($code, $message) { - $this->code = $code; - $this->message = $message; - } - function getXml() { - $xml = << - - - - - faultCode - {$this->code} - - - faultString - {$this->message} - - - - - - -EOD; - return $xml; - } -} - - -class IXR_Date { - public $year; - public $month; - public $day; - public $hour; - public $minute; - public $second; - function IXR_Date($time) { - // $time can be a PHP timestamp or an ISO one - if (is_numeric($time)) { - $this->parseTimestamp($time); - } else { - $this->parseTimestamp(strtotime($time)); - } - } - function parseTimestamp($timestamp) { - $this->year = date('Y', $timestamp); - $this->month = date('m', $timestamp); - $this->day = date('d', $timestamp); - $this->hour = date('H', $timestamp); - $this->minute = date('i', $timestamp); - $this->second = date('s', $timestamp); - $this->ts = $timestamp; - } - - function getIso() { - return $this->year.$this->month.$this->day.'T'.$this->hour.':'.$this->minute.':'.$this->second; - } - function getXml() { - return ''.$this->getIso().''; - } - function getTimestamp() { - return mktime($this->hour, $this->minute, $this->second, $this->month, $this->day, $this->year); - } -} - - -class IXR_Base64 { - public $data; - function IXR_Base64($data) { - $this->data = $data; - } - function getXml() { - return ''.base64_encode($this->data).''; - } -} - - -class IXR_IntrospectionServer extends IXR_Server { - public $signatures; - public $help; - function IXR_IntrospectionServer() { - $this->setCallbacks(); - $this->setCapabilities(); - $this->capabilities['introspection'] = array( - 'specUrl' => 'http://xmlrpc.usefulinc.com/doc/reserved.html', - 'specVersion' => 1 - ); - $this->addCallback( - 'system.methodSignature', - 'this:methodSignature', - array('array', 'string'), - 'Returns an array describing the return type and required parameters of a method' - ); - $this->addCallback( - 'system.getCapabilities', - 'this:getCapabilities', - array('struct'), - 'Returns a struct describing the XML-RPC specifications supported by this server' - ); - $this->addCallback( - 'system.listMethods', - 'this:listMethods', - array('array'), - 'Returns an array of available methods on this server' - ); - $this->addCallback( - 'system.methodHelp', - 'this:methodHelp', - array('string', 'string'), - 'Returns a documentation string for the specified method' - ); - } - function addCallback($method, $callback, $args, $help) { - $this->callbacks[$method] = $callback; - $this->signatures[$method] = $args; - $this->help[$method] = $help; - } - function call($methodname, $args) { - // Make sure it's in an array - if ($args && !is_array($args)) { - $args = array($args); - } - // Over-rides default call method, adds signature check - if (!$this->hasMethod($methodname)) { - return new IXR_Error(-32601, 'server error. requested method "'.$this->message->methodName.'" not specified.'); - } - $method = $this->callbacks[$methodname]; - $signature = $this->signatures[$methodname]; - $returnType = array_shift($signature); - // Check the number of arguments - if (count($args) != count($signature)) { - // print 'Num of args: '.count($args).' Num in signature: '.count($signature); - return new IXR_Error(-32602, 'server error. wrong number of method parameters'); - } - // Check the argument types - $ok = true; - $argsbackup = $args; - for ($i = 0, $j = count($args); $i < $j; $i++) { - $arg = array_shift($args); - $type = array_shift($signature); - switch ($type) { - case 'int': - case 'i4': - if (is_array($arg) || !is_int($arg)) { - $ok = false; - } - break; - case 'base64': - case 'string': - if (!is_string($arg)) { - $ok = false; - } - break; - case 'boolean': - if ($arg !== false && $arg !== true) { - $ok = false; - } - break; - case 'float': - case 'double': - if (!is_float($arg)) { - $ok = false; - } - break; - case 'date': - case 'dateTime.iso8601': - if ($arg instanceof IXR_Date) { - $ok = false; - } - break; - } - if (!$ok) { - return new IXR_Error(-32602, 'server error. invalid method parameters'); - } - } - // It passed the test - run the "real" method call - return parent::call($methodname, $argsbackup); - } - function methodSignature($method) { - if (!$this->hasMethod($method)) { - return new IXR_Error(-32601, 'server error. requested method "'.$method.'" not specified.'); - } - // We should be returning an array of types - $types = $this->signatures[$method]; - $return = array(); - foreach ($types as $type) { - switch ($type) { - case 'string': - $return[] = 'string'; - break; - case 'int': - case 'i4': - $return[] = 42; - break; - case 'double': - $return[] = 3.1415; - break; - case 'dateTime.iso8601': - $return[] = new IXR_Date(time()); - break; - case 'boolean': - $return[] = true; - break; - case 'base64': - $return[] = new IXR_Base64('base64'); - break; - case 'array': - $return[] = array('array'); - break; - case 'struct': - $return[] = array('struct' => 'struct'); - break; - } - } - return $return; - } - function methodHelp($method) { - return $this->help[$method]; - } -} - - -class IXR_ClientMulticall extends IXR_Client { - public $calls = array(); - function IXR_ClientMulticall($server, $path = false, $port = 80) { - parent::IXR_Client($server, $path, $port); - $this->useragent = 'The Incutio XML-RPC PHP Library (multicall client)'; - } - function addCall() { - $args = func_get_args(); - $methodName = array_shift($args); - $struct = array( - 'methodName' => $methodName, - 'params' => $args - ); - $this->calls[] = $struct; - } - function query() { - // Prepare multicall, then call the parent::query() method - return parent::query('system.multicall', $this->calls); - } -} - -?> \ No newline at end of file diff --git a/v2/dotclear/inc/libs/clearbricks/filemanager/class.filemanager.php b/v2/dotclear/inc/libs/clearbricks/filemanager/class.filemanager.php deleted file mode 100644 index 103f1b2..0000000 --- a/v2/dotclear/inc/libs/clearbricks/filemanager/class.filemanager.php +++ /dev/null @@ -1,618 +0,0 @@ -array(),'files'=>array()); - - /** - * Constructor - * - * New filemanage istance. Note that filemanage is a jail in given root - * path. You won't be able to access files outside {@link $root} path with - * the object's methods. - * - * @param string $root Root path - * @param string $root_url Root URL - */ - public function __construct($root,$root_url='') - { - $this->root = $this->pwd = path::real($root); - $this->root_url = $root_url; - - if (!preg_match('#/$#',$this->root_url)) { - $this->root_url = $this->root_url.'/'; - } - - if (!$this->root) { - throw new Exception('Invalid root directory.'); - } - } - - /** - * Change directory - * - * Changes working directory. $dir is relative to instance {@link $root} - * directory. - * - * @param string $dir Directory - */ - public function chdir($dir) - { - $realdir = path::real($this->root.'/'.path::clean($dir)); - if (!$realdir || !is_dir($realdir)) { - throw new Exception('Invalid directory.'); - } - - if ($this->isExclude($realdir)) { - throw new Exception('Directory is excluded.'); - } - - $this->pwd = $realdir; - } - - /** - * Get working directory - * - * Returns working directory path. - * - * @return string - */ - public function getPwd() - { - return $this->pwd; - } - - /** - * Current directory is writable - * - * @return boolean true if working directory is writable - */ - public function writable() - { - if (!$this->pwd) { - return false; - } - - return is_writable($this->pwd); - } - - /** - * Add exclusion - * - * Appends an exclusion to exclusions list. $f should be a regexp. - * - * @see $exclude_list - * @param string $f Exclusion regexp - */ - public function addExclusion($f) - { - if (is_array($f)) - { - foreach ($f as $v) { - if (($V = path::real($v)) !== false) { - $this->exclude_list[] = $V; - } - } - } - elseif (($F = path::real($f)) !== false) - { - $this->exclude_list[] = $F; - } - } - - /** - * Path is excluded - * - * Returns true if path (file or directory) $f is excluded. $f path is - * relative to {@link $root} path. - * - * @see $exclude_list - * @param string $f Path to match - * @return boolean - */ - protected function isExclude($f) - { - foreach ($this->exclude_list as $v) - { - if (strpos($f,$v) === 0) { - return true; - } - } - - return false; - } - - /** - * File is excluded - * - * Returns true if file $f is excluded. $f path is relative to {@link $root} - * path. - * - * @see $exclude_pattern - * @param string $f File to match - * @return boolean - */ - protected function isFileExclude($f) - { - if (!$this->exclude_pattern) { - return false; - } - - return preg_match($this->exclude_pattern,$f); - } - - /** - * Item in jail - * - * Returns true if file or directory $f is in jail (ie. not outside the - * {@link $root} directory). - * - * @param string $f Path to match - * @return boolean - */ - protected function inJail($f) - { - $f = path::real($f); - - if ($f !== false) { - return preg_match('|^'.preg_quote($this->root,'|').'|',$f); - } - - return false; - } - - /** - * File in files - * - * Returns true if file $f is in files array of {@link $dir}. - * - * @param string $f File to match - * @return boolean - */ - public function inFiles($f) - { - foreach ($this->dir['files'] as $v) { - if ($v->relname == $f) { - return true; - } - } - return false; - } - - /** - * Directory list - * - * Creates list of items in working directory and append it to {@link $dir} - * - * @uses sortHandler() - * @uses fileItem - */ - public function getDir() - { - $dir = path::clean($this->pwd); - - $dh = @opendir($dir); - - if ($dh === false) { - throw new Exception('Unable to read directory.'); - } - - $d_res = $f_res = array(); - - while (($file = readdir($dh)) !== false) - { - $fname = $dir.'/'.$file; - - if ($this->inJail($fname) && !$this->isExclude($fname)) - { - if (is_dir($fname) && $file != '.') { - $tmp = new fileItem($fname,$this->root,$this->root_url); - if ($file == '..') { - $tmp->parent = true; - } - $d_res[] = $tmp; - } - - if (is_file($fname) && strpos($file,'.') !== 0 && !$this->isFileExclude($file)) { - $f_res[] = new fileItem($fname,$this->root,$this->root_url); - } - } - } - closedir($dh); - - $this->dir = array('dirs'=>$d_res,'files'=>$f_res); - usort($this->dir['dirs'],array($this,'sortHandler')); - usort($this->dir['files'],array($this,'sortHandler')); - } - - /** - * Root directories - * - * Returns an array of directory under {@link $root} directory. - * - * @uses fileItem - * @return array - */ - public function getRootDirs() - { - $d = files::getDirList($this->root); - - $dir = array(); - - foreach ($d['dirs'] as $v) { - $dir[] = new fileItem($v,$this->root,$this->root_url); - } - - return $dir; - } - - /** - * Upload file - * - * Move $tmp file to its final destination $dest and - * returns the destination file path. - * $dest should be in jail. This method will throw exception - * if the file cannot be written. - * - * You should first verify upload status, with {@link files::uploadStatus()} - * or PHP native functions. - * - * @see files::uploadStatus() - * @param string $tmp Temporary uploaded file path - * @param string $dest Destination file - * @param string $overwrite overwrite mode - * @return string Destination real path - */ - public function uploadFile($tmp,$dest,$overwrite=false) - { - $dest = $this->pwd.'/'.path::clean($dest); - - if ($this->isFileExclude($dest)) { - throw new Exception(__('Uploading this file is not allowed.')); - } - - if (!$this->inJail(dirname($dest))) { - throw new Exception(__('Destination directory is not in jail.')); - } - - if (!$overwrite && file_exists($dest)) { - throw new Exception(__('File already exists.')); - } - - if (!is_writable(dirname($dest))) { - throw new Exception(__('Cannot write in this directory.')); - } - - if (@move_uploaded_file($tmp,$dest) === false) { - throw new Exception(__('An error occurred while writing the file.')); - } - - files::inheritChmod($dest); - return path::real($dest); - } - - /** - * Upload file by bits - * - * Creates a new file $dest with contents of $bits and - * return the destination file path. - * $dest should be in jail. This method will throw exception - * if file cannot be written. - * - * @param string $bits Destination file content - * @param string $dest Destination file - * @return string Destination real path - */ - public function uploadBits($name,$bits) - { - $dest = $this->pwd.'/'.path::clean($name); - - if ($this->isFileExclude($dest)) { - throw new Exception(__('Uploading this file is not allowed.')); - } - - if (!$this->inJail(dirname($dest))) { - throw new Exception(__('Destination directory is not in jail.')); - } - - if (!is_writable(dirname($dest))) { - throw new Exception(__('Cannot write in this directory.')); - } - - $fp = @fopen($dest,'wb'); - if ($fp === false) { - throw new Exception(__('An error occurred while writing the file.')); - } - - fwrite($fp,$bits); - fclose($fp); - files::inheritChmod($dest); - - return path::real($dest); - } - - /** - * New directory - * - * Creates a new directory $d relative to working directory. - * - * @param string $d Directory name - */ - public function makeDir($d) - { - files::makeDir($this->pwd.'/'.path::clean($d)); - } - - /** - * Move file - * - * Moves a file $s to a new destination $d. Both - * $s and $d are relative to {@link $root}. - * - * @param string $s Source file - * @param string $d Destination file - */ - public function moveFile($s,$d) - { - $s = $this->root.'/'.path::clean($s); - $d = $this->root.'/'.path::clean($d); - - if (($s = path::real($s)) === false) { - throw new Exception(__('Source file does not exist.')); - } - - $dest_dir = path::real(dirname($d)); - - if (!$this->inJail($s)) { - throw new Exception(__('File is not in jail.')); - } - if (!$this->inJail($dest_dir)) { - throw new Exception(__('File is not in jail.')); - } - - if (!is_writable($dest_dir)) { - throw new Exception(__('Destination directory is not writable.')); - } - - if (@rename($s,$d) === false) { - throw new Exception(__('Unable to rename file.')); - } - } - - /** - * Remove item - * - * Removes a file or directory $f which is relative to working - * directory. - * - * @param string $f Path to remove - */ - public function removeItem($f) - { - $file = path::real($this->pwd.'/'.path::clean($f)); - - if (is_file($file)) { - $this->removeFile($f); - } elseif (is_dir($file)) { - $this->removeDir($f); - } - } - - /** - * Remove item - * - * Removes a file $f which is relative to working directory. - * - * @param string $f File to remove - */ - public function removeFile($f) - { - $f = path::real($this->pwd.'/'.path::clean($f)); - - if (!$this->inJail($f)) { - throw new Exception(__('File is not in jail.')); - } - - if (!files::isDeletable($f)) { - throw new Exception(__('File cannot be removed.')); - } - - if (@unlink($f) === false) { - throw new Exception(__('File cannot be removed.')); - } - } - - /** - * Remove item - * - * Removes a directory $d which is relative to working directory. - * - * @param string $d Directory to remove - */ - public function removeDir($d) - { - $d = path::real($this->pwd.'/'.path::clean($d)); - - if (!$this->inJail($d)) { - throw new Exception(__('Directory is not in jail.')); - } - - if (!files::isDeletable($d)) { - throw new Exception(__('Directory cannot be removed.')); - } - - if (@rmdir($d) === false) { - throw new Exception(__('Directory cannot be removed.')); - } - } - - /** - * SortHandler - * - * This method is called by {@link getDir()} to sort files. Can be overrided - * in inherited classes. - * - * @param fileItem $a fileItem object - * @param fileItem $b fileItem object - * @return integer - */ - protected function sortHandler($a,$b) - { - if ($a->parent && !$b->parent || !$a->parent && $b->parent) { - return ($a->parent) ? -1 : 1; - } - return strcasecmp($a->basename,$b->basename); - } -} - -/** -* File item -* -* File item class used by {@link filemanager}. In this class {@link $file} could -* be either a file or a directory. -* -* @package Clearbricks -* @subpackage Filemanager -*/ -class fileItem -{ - /** @var string Complete path to file */ - public $file; - - /** @var string File basename */ - public $basename; - - /** @var string File directory name */ - public $dir; - - /** @var string File URL */ - public $file_url; - - /** @var string File directory URL */ - public $dir_url; - - /** @var string File extension */ - public $extension; - - /** @var string File path relative to $root given in constructor */ - public $relname; - - /** @var boolean Parent directory (ie. "..") */ - public $parent = false; - - - /** @var string File MimeType. See {@link files::getMimeType()}. */ - public $type; - - /** @var integer File modification timestamp */ - public $mtime; - - /** @var integer File size */ - public $size; - - /** @var integer File permissions mode */ - public $mode; - - /** @var integer File owner ID */ - public $uid; - - /** @var integer File group ID */ - public $gid; - - /** @var boolean True if file or directory is writable */ - public $w; - - /** @var boolean True if file is a directory */ - public $d; - - /** @var boolean True if file file is executable or directory is traversable */ - public $x; - - /** @var boolean True if file is a file */ - public $f; - - /** @var boolean True if file or directory is deletable */ - public $del; - - /** - * Constructor - * - * Creates an instance of fileItem object. - * - * @param string $file Absolute file or directory path - * @param string $root File root path - * @param string $root_url File root URL - */ - public function __construct($file,$root,$root_url='') - { - $file = path::real($file); - $stat = stat($file); - $path = path::info($file); - - $rel = preg_replace('/^'.preg_quote($root,'/').'\/?/','',$file); - - $this->file = $file; - $this->basename = $path['basename']; - $this->dir = $path['dirname']; - $this->relname = $rel; - - $this->file_url = str_replace('%2F','/',rawurlencode($rel)); - $this->file_url = $root_url.$this->file_url; - - $this->dir_url = dirname($this->file_url); - $this->extension = $path['extension']; - - $this->mtime = $stat[9]; - $this->size = $stat[7]; - $this->mode = $stat[2]; - $this->uid = $stat[4]; - $this->gid = $stat[5]; - $this->w = is_writable($file); - $this->d = is_dir($file); - $this->f = is_file($file); - if ($this->d) { - $this->x = file_exists($file.'/.'); - } else { - $this->x = false; - } - $this->del = files::isDeletable($file); - - $this->type = $this->d ? null : files::getMimeType($file); - $this->type_prefix = preg_replace('/^(.+?)\/.+$/','$1',$this->type); - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/libs/clearbricks/html.filter/class.html.filter.php b/v2/dotclear/inc/libs/clearbricks/html.filter/class.html.filter.php deleted file mode 100644 index cbe6c86..0000000 --- a/v2/dotclear/inc/libs/clearbricks/html.filter/class.html.filter.php +++ /dev/null @@ -1,676 +0,0 @@ -parser = xml_parser_create('UTF-8'); - xml_set_object($this->parser,$this); - xml_set_element_handler($this->parser, 'tag_open', 'tag_close'); - xml_set_character_data_handler($this->parser, 'cdata'); - xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, false); - - $this->removeTags( - 'applet','base','basefont','body','center','dir','font', - 'frame','frameset','head','html','isindex', - 'link','menu','meta','noframes','script','style' - ); - - $this->removeAttributes( - 'onclick','ondblclick','onfocus','onkeydown','onkeypress', - 'onkeyup','onload','onmousedown','onmousemove','onmouseout', - 'onmouseover','onmouseup','onreset','onselect','onsubmit', - 'onunload' - ); - } - - /** - * Append tags - * - * Appends tags to remove. Each method argument is a tag. Example: - * - * - * removeTags('frame','script'); - * ?> - * - */ - public function removeTags() - { - foreach ($this->argsArray(func_get_args()) as $tag) { - $this->removed_tags[] = $tag; - } - } - - /** - * Append attributes - * - * Appends attributes to remove. Each method argument is an attribute. Example: - * - * - * removeAttributes('onclick','onunload'); - * ?> - * - */ - public function removeAttributes() - { - foreach ($this->argsArray(func_get_args()) as $a) { - $this->removed_attrs[] = $a; - } - } - - /** - * Append attributes for tags - * - * Appends attributes to remove from specific tags. Each method argument is - * an array of tags with attributes. Example: - * - * - * removeTagAttributes(array('a' => array('src','title'))); - * ?> - * - */ - public function removeTagAttributes($tag) - { - $args = $this->argsArray(func_get_args()); - array_shift($args); - - foreach ($args as $a) { - $this->removed_tag_attrs[$tag][] = $a; - } - } - - /** - * Known tags - * - * Creates a list of known tags. - * - * @param array $t Tags array - */ - public function setTags($t) - { - if (is_array($t)) { - $this->tags = $t; - } - } - - /** - * Apply filter - * - * This method applies filter on given $str string. It will first - * try to use tidy extension if exists and then apply the filter. - * - * @param string $str String to filter - * @return string Filtered string - */ - public function apply($str) - { - if (extension_loaded('tidy') && class_exists('tidy')) - { - $config = array( - 'doctype' => 'strict', - 'drop-proprietary-attributes' => true, - 'drop-font-tags' => true, - 'escape-cdata' => true, - 'indent' => false, - 'join-classes' => false, - 'join-styles' => true, - 'lower-literals' => true, - 'output-xhtml' => true, - 'show-body-only' => true, - 'wrap' => 80 - ); - - $str = '

      tt

      '.$str; // Fixes a big issue - - $tidy = new tidy; - $tidy->parseString($str, $config, 'utf8'); - $tidy->cleanRepair(); - - $str = (string) $tidy; - - $str = preg_replace('#^

      tt

      \s?#','',$str); - } - else - { - $str = $this->miniTidy($str); - } - - # Removing open comments, open CDATA and processing instructions - $str = preg_replace('%%msu','',$str); - $str = str_replace(' - $fc = preg_replace('/(^\s*)?/ms','',$fc); - - # Compile blocks - foreach ($this->blocks as $b => $f) { - $pattern = sprintf($this->tag_block,preg_quote($b,'#')); - - $fc = preg_replace_callback('#'.$pattern.'#ms', - array($this,'compileBlock'),$fc); - } - - # Compile values - foreach ($this->values as $v => $f) { - $pattern = sprintf($this->tag_value,preg_quote($v,'#')); - - $fc = preg_replace_callback('#'.$pattern.'#ms', - array($this,'compileValue'),$fc); - } - - return $fc; - } - - protected function compileBlock($match) - { - $b = $match[1]; - $content = $match[3]; - $attr = $this->getAttrs($match[2]); - - # Call block function - return call_user_func($this->blocks[$b],$attr,$content); - } - - protected function compileValue($match) - { - $v = $match[1]; - $attr = isset($match[2]) ? $this->getAttrs($match[2]) : array(); - $str_attr = isset($match[2]) ? $match[2] : null; - - return call_user_func($this->values[$v],$attr,ltrim($str_attr)); - } - - protected function getAttrs($str) - { - $res = array(); - if (preg_match_all('|([a-zA-Z0-9_:-]+)="([^"]*)"|ms',$str,$m) > 0) { - foreach ($m[1] as $i => $v) { - $res[$v] = $m[2][$i]; - } - } - return $res; - } -} -?> diff --git a/v2/dotclear/inc/libs/clearbricks/text.wiki2xhtml/class.wiki2xhtml.php b/v2/dotclear/inc/libs/clearbricks/text.wiki2xhtml/class.wiki2xhtml.php deleted file mode 100644 index 5af2363..0000000 --- a/v2/dotclear/inc/libs/clearbricks/text.wiki2xhtml/class.wiki2xhtml.php +++ /dev/null @@ -1,1305 +0,0 @@ - Added ``inline html`` support -# -# 3.2.5 -# => Changed longdesc by title in images -# -# 3.2.4 -# => Auto links -# => Code cleanup -# -# 3.2.3 -# Olivier -# => PHP5 Strict -# -# 3.2.2 -# Olivier -# => Changement de la gestion des URL spéciales -# -# 3.2.1 -# Olivier -# => Changement syntaxe des macros -# -# 3.2 -# Olivier -# => Changement de fonctionnement des macros -# => Passage de fonctions externes pour les macros et les mots wiki -# -# 3.1d -# Jérôme Lipowicz -# => antispam -# Olivier -# => centrage d'image -# -# 3.1c -# Olivier -# => Possibilité d'échaper les | dans les marqueurs avec \ -# -# 3.1b -# Nicolas Chachereau -# => Changement de regexp pour la correction syntaxique -# -# 3.1a -# Olivier -# => Bug du Call-time pass-by-reference -# -# 3.1 -# Olivier -# => Ajout des macros «««..»»» -# => Ajout des blocs vides øøø -# => Ajout du niveau de titre paramétrable -# => Option de blocage du parseur dans les
      -#			=> Titres au format setext (experimental, désactivé)
      -#
      -# 3.0
      -# Olivier		=> Récriture du parseur inline, plus d'erreur XHTML
      -#			=> Ajout d'une vérification d'intégrité pour les listes
      -#			=> Les acronymes sont maintenant dans un fichier texte
      -#			=> Ajout d'un tag images ((..)), del --..-- et ins ++..++
      -#			=> Plus possible de faire des liens JS [lien|javascript:...]
      -#			=> Ajout des notes de bas de page §§...§§
      -#			=> Ajout des mots wiki
      -#
      -# 2.5
      -# Olivier		=> Récriture du code, plus besoin du saut de ligne entre blocs !=
      -#
      -# 2.0
      -# Stephanie	=> correction des PCRE et ajout de fonctionnalités
      -# Mathieu 	=> ajout du strip-tags, implementation des options, reconnaissance automatique d'url, etc.
      -# Olivier		=> chagement de active_link en active_urls
      -#			=> ajout des options pour les blocs
      -#			=> intégration de l'aide dans le code, avec les options
      -#			=> début de quelque chose pour la reconnaissance auto d'url (avec Mat)
      -
      -# TODO :
      -# Mathieu	=> active_wiki_urls (modifier wikiParseUrl ?)
      -# 		=> active_auto_urls
      -#
      -# *		=> ajouter des options.
      -# 		=> trouver un meilleur nom pour active_link ? (pour le jour ou ca sera tellement une usine
      -#		   a gaz que on generera des tags  :)
      -#
      -
      -# Wiki2xhtml
      -
      -class wiki2xhtml
      -{
      -	public $__version__ = '3.2.6';
      -	
      -	public $T;
      -	public $opt;
      -	public $line;
      -	public $acro_table;
      -	public $foot_notes;
      -	public $macros;
      -	public $functions;
      -	
      -	public $tags;
      -	public $open_tags;
      -	public $close_tags;
      -	public $custom_tags = array();
      -	public $all_tags;
      -	public $tag_pattern;
      -	public $escape_table;
      -	public $allowed_inline = array();
      -	
      -	function __construct()
      -	{
      -		# Mise en place des options
      -		$this->setOpt('active_title',1);		# Activation des titres !!!
      -		$this->setOpt('active_setext_title',0);	# Activation des titres setext (EXPERIMENTAL)
      -		$this->setOpt('active_hr',1);			# Activation des 
      - $this->setOpt('active_lists',1); # Activation des listes - $this->setOpt('active_quote',1); # Activation du
      - $this->setOpt('active_pre',1); # Activation du
      -		$this->setOpt('active_empty',1);		# Activation du bloc vide øøø
      -		$this->setOpt('active_auto_urls',0);	# Activation de la reconnaissance d'url
      -		$this->setOpt('active_auto_br',0);	# Activation du saut de ligne automatique (dans les paragraphes)
      -		$this->setOpt('active_antispam',1);	# Activation de l'antispam pour les emails
      -		$this->setOpt('active_urls',1);		# Activation des liens []
      -		$this->setOpt('active_auto_img',1);	# Activation des images automatiques dans les liens []
      -		$this->setOpt('active_img',1);		# Activation des images (())
      -		$this->setOpt('active_anchor',1);		# Activation des ancres ~...~
      -		$this->setOpt('active_em',1);			# Activation du  ''...''
      -		$this->setOpt('active_strong',1);		# Activation du  __...__
      -		$this->setOpt('active_br',1);			# Activation du 
      %%% - $this->setOpt('active_q',1); # Activation du {{...}} - $this->setOpt('active_code',1); # Activation du @@...@@ - $this->setOpt('active_acronym',1); # Activation des acronymes - $this->setOpt('active_ins',1); # Activation des ins ++..++ - $this->setOpt('active_del',1); # Activation des del --..-- - $this->setOpt('active_inline_html',1); # Activation du HTML inline ``...`` - $this->setOpt('active_footnotes',1); # Activation des notes de bas de page - $this->setOpt('active_wikiwords',0); # Activation des mots wiki - $this->setOpt('active_macros',1); # Activation des macros /// /// - - $this->setOpt('parse_pre',1); # Parser l'intérieur de blocs
       ?
      -		
      -		$this->setOpt('active_fr_syntax',1);	# Corrections syntaxe FR
      -		
      -		$this->setOpt('first_title_level',3);	# Premier niveau de titre 
      -		
      -		$this->setOpt('note_prefix','wiki-footnote');
      -		$this->setOpt('note_str','

      Notes

      %s
      '); - $this->setOpt('note_str_single','

      Note

      %s
      '); - $this->setOpt('words_pattern', - '((?setOpt('auto_url_pattern', - '%(?setOpt('acronyms_file',dirname(__FILE__).'/acronyms.txt'); - - $this->acro_table = $this->__getAcronyms(); - $this->foot_notes = array(); - $this->functions = array(); - $this->macros = array(); - - $this->registerFunction('macro:html',array($this,'__macroHTML')); - } - - function setOpt($option, $value) - { - $this->opt[$option] = $value; - } - - function setOpts($options) - { - if (!is_array($options)) { - return; - } - - foreach ($options as $k => $v) { - $this->opt[$k] = $v; - } - } - - function getOpt($option) - { - return (!empty($this->opt[$option])) ? $this->opt[$option] : false; - } - - function registerFunction($type,$name) - { - if (is_callable($name)) { - $this->functions[$type] = $name; - } - } - - function transform($in) - { - # Initialisation des tags - $this->__initTags(); - $this->foot_notes = array(); - - # Récupération des macros - if ($this->getOpt('active_macros')) { - $in = preg_replace('#^///(.*?)///($|\r)#mse',"\\\$this->__getMacro('\\1')",$in); - } - - # Vérification du niveau de titre - if ($this->getOpt('first_title_level') > 4) { - $this->setOpt('first_title_level',4); - } - - $res = str_replace("\r", '', $in); - - $escape_pattern = array(); - - # traitement des titres à la setext - if ($this->getOpt('active_setext_title') && $this->getOpt('active_title')) { - $res = preg_replace('/^(.*)\n[=]{5,}$/m','!!!$1',$res); - $res = preg_replace('/^(.*)\n[-]{5,}$/m','!!$1',$res); - } - - # Transformation des mots Wiki - if ($this->getOpt('active_wikiwords') && $this->getOpt('words_pattern')) { - $res = preg_replace('/'.$this->getOpt('words_pattern').'/msu','¶¶¶$1¶¶¶',$res); - } - - # Transformation des URLs automatiques - if ($this->getOpt('active_auto_urls')) - { - $active_urls = $this->getOpt('active_urls'); - - $this->setOpt('active_urls',1); - $this->__initTags(); - - # If urls are not active, escape URLs tags - if (!$active_urls) - { - $res = preg_replace( - '%(?tags['a'])).'])%msU', - '\\\$1',$res - ); - } - - # Transforms urls while preserving tags. - $tree = preg_split($this->tag_pattern,$res,-1,PREG_SPLIT_DELIM_CAPTURE); - foreach ($tree as &$leaf) { - $leaf = preg_replace($this->getOpt('auto_url_pattern'),'[$1$2]',$leaf); - } - unset($leaf); - $res = implode($tree); - - - } - - $this->T = explode("\n",$res); - $this->T[] = ''; - - # Parse les blocs - $res = $this->__parseBlocks(); - - # Line break - if ($this->getOpt('active_br')) { - $res = preg_replace('/(?', $res); - $escape_pattern[] = '%%%'; - } - - # Nettoyage des \s en trop - $res = preg_replace('/([\s]+)(<\/p>|<\/li>|<\/pre>)/u', '$2', $res); - $res = preg_replace('/(
    • )([\s]+)/u', '$1', $res); - - # On vire les escapes - if (!empty($escape_pattern)) { - $res = preg_replace('/\\\('.implode('|',$escape_pattern).')/','$1',$res); - } - - # On vire les ¶¶¶MotWiki¶¶¶ qui sont resté (dans les url...) - if ($this->getOpt('active_wikiwords') && $this->getOpt('words_pattern')) { - $res = preg_replace('/¶¶¶'.$this->getOpt('words_pattern').'¶¶¶/msu','$1',$res); - } - - # On remet les macros - if ($this->getOpt('active_macros')) { - $res = preg_replace('/^##########MACRO#([0-9]+)#$/mse','\$this->__putMacro("$1")',$res); - } - - # Auto line break dans les paragraphes - if ($this->getOpt('active_auto_br')) { - $res = preg_replace_callback('%(

      )(.*?)(

      )%msu',array($this,'__autoBR'),$res); - } - - # On ajoute les notes - if (count($this->foot_notes) > 0) - { - $res_notes = ''; - $i = 1; - foreach ($this->foot_notes as $k => $v) { - $res_notes .= "\n".'

      ['.$i.'] '.$v.'

      '; - $i++; - } - $res .= sprintf("\n".(count($this->foot_notes) > 1 ? $this->getOpt('note_str') : $this->getOpt('note_str_single'))."\n",$res_notes); - } - - return $res; - } - - /* PRIVATE - --------------------------------------------------- */ - - function __initTags() - { - $tags = array( - 'em' => array("''","''"), - 'strong' => array('__','__'), - 'acronym' => array('??','??'), - 'a' => array('[',']'), - 'img' => array('((','))'), - 'q' => array('{{','}}'), - 'code' => array('@@','@@'), - 'anchor' => array('~','~'), - 'del' => array('--','--'), - 'ins' => array('++','++'), - 'inline' => array('``','``'), - 'note' => array('$$','$$'), - 'word' => array('¶¶¶','¶¶¶') - ); - $this->linetags = array( - 'empty' => 'øøø', - 'title' => '([!]{1,4})', - 'hr' => '[-]{4}[- ]', - 'quote' => '(>|;:)', - 'lists' => '([*#]+)', - 'pre' => '[ ]{1}' - ); - - $this->tags = array_merge($tags,$this->custom_tags); - - # Suppression des tags selon les options - if (!$this->getOpt('active_urls')) { - unset($this->tags['a']); - } - if (!$this->getOpt('active_img')) { - unset($this->tags['img']); - } - if (!$this->getOpt('active_anchor')) { - unset($this->tags['anchor']); - } - if (!$this->getOpt('active_em')) { - unset($this->tags['em']); - } - if (!$this->getOpt('active_strong')) { - unset($this->tags['strong']); - } - if (!$this->getOpt('active_q')) { - unset($this->tags['q']); - } - if (!$this->getOpt('active_code')) { - unset($this->tags['code']); - } - if (!$this->getOpt('active_acronym')) { - unset($this->tags['acronym']); - } - if (!$this->getOpt('active_ins')) { - unset($this->tags['ins']); - } - if (!$this->getOpt('active_del')) { - unset($this->tags['del']); - } - if (!$this->getOpt('active_inline_html')) { - unset($this->tags['inline']); - } - if (!$this->getOpt('active_footnotes')) { - unset($this->tags['note']); - } - if (!$this->getOpt('active_wikiwords')) { - unset($this->tags['word']); - } - - # Suppression des tags de début de ligne selon les options - if (!$this->getOpt('active_empty')) { - unset($this->linetags['empty']); - } - if (!$this->getOpt('active_title')) { - unset($this->linetags['title']); - } - if (!$this->getOpt('active_hr')) { - unset($this->linetags['hr']); - } - if (!$this->getOpt('active_quote')) { - unset($this->linetags['quote']); - } - if (!$this->getOpt('active_lists')) { - unset($this->linetags['lists']); - } - if (!$this->getOpt('active_pre')) { - unset($this->linetags['pre']); - } - - $this->open_tags = $this->__getTags(); - $this->close_tags = $this->__getTags(false); - $this->all_tags = $this->__getAllTags(); - $this->tag_pattern = $this->__getTagsPattern(); - - $this->escape_table = $this->all_tags; - array_walk($this->escape_table,create_function('&$a','$a = \'\\\\\'.$a;')); - } - - function __getTags($open=true) - { - $res = array(); - foreach ($this->tags as $k => $v) { - $res[$k] = ($open) ? $v[0] : $v[1]; - } - return $res; - } - - function __getAllTags() - { - $res = array(); - foreach ($this->tags as $v) { - $res[] = $v[0]; - $res[] = $v[1]; - } - return array_values(array_unique($res)); - } - - function __getTagsPattern($escape=false) - { - $res = $this->all_tags; - array_walk($res,create_function('&$a','$a = preg_quote($a,"/");')); - - if (!$escape) { - return '/(?T); - - for ($i=0; $i<$max; $i++) - { - $pre_mode = $mode; - $pre_type = $type; - $end = ($i+1 == $max); - - $line = $this->__getLine($i,$type,$mode); - - if ($type != 'pre' || $this->getOpt('parse_pre')) { - $line = $this->__inlineWalk($line); - } - - $res .= $this->__closeLine($type,$mode,$pre_type,$pre_mode); - $res .= $this->__openLine($type,$mode,$pre_type,$pre_mode); - - # P dans les blockquotes - if ($type == 'blockquote' && trim($line) == '' && $pre_type == $type) { - $res .= "

      \n

      "; - } - - # Correction de la syntaxe FR dans tous sauf pre et hr - # Sur idée de Christophe Bonijol - # Changement de regex (Nicolas Chachereau) - if ($this->getOpt('active_fr_syntax') && $type != null && $type != 'pre' && $type != 'hr') { - $line = preg_replace('%[ ]+([:?!;\x{00BB}](\s|$))%u',' $1',$line); - $line = preg_replace('%(\x{00AB})[ ]+%u','$1 ',$line); - } - - $res .= $line; - } - - return trim($res); - } - - function __getLine($i,&$type,&$mode) - { - $pre_type = $type; - $pre_mode = $mode; - $type = $mode = null; - - if (empty($this->T[$i])) { - return false; - } - - $line = htmlspecialchars($this->T[$i],ENT_NOQUOTES); - - # Ligne vide - if (empty($line)) - { - $type = null; - } - elseif ($this->getOpt('active_empty') && preg_match('/^øøø(.*)$/',$line,$cap)) - { - $type = null; - $line = trim($cap[1]); - } - # Titre - elseif ($this->getOpt('active_title') && preg_match('/^([!]{1,4})(.*)$/',$line,$cap)) - { - $type = 'title'; - $mode = strlen($cap[1]); - $line = trim($cap[2]); - } - # Ligne HR - elseif ($this->getOpt('active_hr') && preg_match('/^[-]{4}[- ]*$/',$line)) - { - $type = 'hr'; - $line = null; - } - # Blockquote - elseif ($this->getOpt('active_quote') && preg_match('/^(>|;:)(.*)$/',$line,$cap)) - { - $type = 'blockquote'; - $line = trim($cap[2]); - } - # Liste - elseif ($this->getOpt('active_lists') && preg_match('/^([*#]+)(.*)$/',$line,$cap)) - { - $type = 'list'; - $mode = $cap[1]; - $valid = true; - - # Vérification d'intégrité - $dl = ($type != $pre_type) ? 0 : strlen($pre_mode); - $d = strlen($mode); - $delta = $d-$dl; - - if ($delta < 0 && strpos($pre_mode,$mode) !== 0) { - $valid = false; - } - if ($delta > 0 && $type == $pre_type && strpos($mode,$pre_mode) !== 0) { - $valid = false; - } - if ($delta == 0 && $mode != $pre_mode) { - $valid = false; - } - if ($delta > 1) { - $valid = false; - } - - if (!$valid) { - $type = 'p'; - $mode = null; - $line = '
      '.$line; - } else { - $line = trim($cap[2]); - } - } - # Préformaté - elseif ($this->getOpt('active_pre') && preg_match('/^[ ]{1}(.*)$/',$line,$cap)) - { - $type = 'pre'; - $line = $cap[1]; - } - # Paragraphe - else { - $type = 'p'; - if (preg_match('/^\\\((?:('.implode('|',$this->linetags).')).*)$/',$line,$cap)) { - $line = $cap[1]; - } - $line = trim($line); - } - - return $line; - } - - function __openLine($type,$mode,$pre_type,$pre_mode) - { - $open = ($type != $pre_type); - - if ($open && $type == 'p') - { - return "\n

      "; - } - elseif ($open && $type == 'blockquote') - { - return "\n

      "; - } - elseif (($open || $mode != $pre_mode) && $type == 'title') - { - $fl = $this->getOpt('first_title_level'); - $fl = $fl+3; - $l = $fl-$mode; - return "\n'; - } - elseif ($open && $type == 'pre') - { - return "\n

      ";
      -		}
      -		elseif ($open && $type == 'hr')
      -		{
      -			return "\n
      "; - } - elseif ($type == 'list') - { - $dl = ($open) ? 0 : strlen($pre_mode); - $d = strlen($mode); - $delta = $d-$dl; - $res = ''; - - if($delta > 0) { - if(substr($mode, -1, 1) == '*') { - $res .= "
        \n"; - } else { - $res .= "
          \n"; - } - } elseif ($delta < 0) { - $res .= "\n"; - for($j = 0; $j < abs($delta); $j++) { - if (substr($pre_mode,(0 - $j - 1), 1) == '*') { - $res .= "
      \n
    • \n"; - } else { - $res .= "\n\n"; - } - } - } else { - $res .= "\n"; - } - - return $res."
    • "; - } - else - { - return null; - } - } - - function __closeLine($type,$mode,$pre_type,$pre_mode) - { - $close = ($type != $pre_type); - - if ($close && $pre_type == 'p') - { - return "

      \n"; - } - elseif ($close && $pre_type == 'blockquote') - { - return "

    • \n"; - } - elseif (($close || $mode != $pre_mode) && $pre_type == 'title') - { - $fl = $this->getOpt('first_title_level'); - $fl = $fl+3; - $l = $fl-$pre_mode; - return '\n"; - } - elseif ($close && $pre_type == 'pre') - { - return "
      \n"; - } - elseif ($close && $pre_type == 'list') - { - $res = ''; - for($j = 0; $j < strlen($pre_mode); $j++) { - if(substr($pre_mode,(0 - $j - 1), 1) == '*') { - $res .= "\n"; - } else { - $res .= "\n"; - } - } - return $res; - } - else - { - return "\n"; - } - } - - - /* Inline - --------------------------------------------------- */ - function __inlineWalk($str,$allow_only=null) - { - $tree = preg_split($this->tag_pattern,$str,-1,PREG_SPLIT_DELIM_CAPTURE); - - $res = ''; - for ($i=0; $iopen_tags)) && - ($allow_only == null || in_array(array_search($tree[$i],$this->open_tags),$allow_only))) - { - $tag = array_search($tree[$i],$this->open_tags); - $tag_type = 'open'; - - if (($tidy = $this->__makeTag($tree,$tag,$i,$i,$attr,$tag_type)) !== false) - { - if ($tag != '') { - $res .= '<'.$tag.$attr; - $res .= ($tag_type == 'open') ? '>' : ' />'; - } - $res .= $tidy; - } - else - { - $res .= $tree[$i]; - } - } - else - { - $res .= $tree[$i]; - } - } - - # Suppression des echappements - $res = str_replace($this->escape_table,$this->all_tags,$res); - - return $res; - } - - function __makeTag(&$tree,&$tag,$position,&$j,&$attr,&$type) - { - $res = ''; - $closed = false; - - $itag = $this->close_tags[$tag]; - - # Recherche fermeture - for ($i=$position+1;$i__parseLink($res,$tag,$attr,$type); - break; - case 'img': - $type = 'close'; - $res = $this->__parseImg($res,$attr); - break; - case 'acronym': - $res = $this->__parseAcronym($res,$attr); - break; - case 'q': - $res = $this->__parseQ($res,$attr); - break; - case 'anchor': - $tag = 'a'; - $res = $this->__parseAnchor($res,$attr); - break; - case 'note': - $tag = ''; - $res = $this->__parseNote($res); - break; - case 'inline': - $tag = ''; - $res = $this->__parseInlineHTML($res); - break; - case 'word': - $res = $this->parseWikiWord($res,$tag,$attr,$type); - break; - default : - $res = $this->__inlineWalk($res); - break; - } - - if ($type == 'open' && $tag != '') { - $res .= ''; - } - $j = $i; - break; - } - } - - return $res; - } - else - { - return false; - } - } - - function __splitTagsAttr($str) - { - $res = preg_split('/(? $v) { - $res[$k] = str_replace("\|",'|',$v); - } - - return $res; - } - - # Antispam (Jérôme Lipowicz) - function __antiSpam($str) - { - $encoded = bin2hex($str); - $encoded = chunk_split($encoded, 2, '%'); - $encoded = '%'.substr($encoded, 0, strlen($encoded) - 1); - return $encoded; - } - - function __parseLink($str,&$tag,&$attr,&$type) - { - $n_str = $this->__inlineWalk($str,array('acronym','img')); - $data = $this->__splitTagsAttr($n_str); - $no_image = false; - - # Only URL in data - if (count($data) == 1) - { - $url = trim($str); - $content = strlen($url) > 35 ? substr($url,0,35).'...' : $url; - $lang = ''; - $title = $url; - } - elseif (count($data) > 1) - { - $url = trim($data[1]); - $content = $data[0]; - $lang = (!empty($data[2])) ? $this->protectAttr($data[2],true) : ''; - $title = (!empty($data[3])) ? $data[3] : ''; - $no_image = (!empty($data[4])) ? (boolean) $data[4] : false; - } - - # Remplacement si URL spéciale - $this->__specialUrls($url,$content,$lang,$title); - - # On vire les   dans l'url - $url = str_replace(' ',' ',$url); - - if (preg_match('/^(.+)[.](gif|jpg|jpeg|png)$/', $url) && !$no_image && $this->getOpt('active_auto_img')) - { - # On ajoute les dimensions de l'image si locale - # Idée de Stephanie - $img_size = null; - if (!preg_match('#[a-zA-Z]+://#', $url)) { - if (preg_match('#^/#',$url)) { - $path_img = $_SERVER['DOCUMENT_ROOT'] . $url; - } else { - $path_img = $url; - } - - $img_size = @getimagesize($path_img); - } - - $attr = ' src="'.$this->protectAttr($this->protectUrls($url)).'"'. - $attr .= (count($data) > 1) ? ' alt="'.$this->protectAttr($content).'"' : ' alt=""'; - $attr .= ($lang) ? ' lang="'.$lang.'"' : ''; - $attr .= ($title) ? ' title="'.$this->protectAttr($title).'"' : ''; - $attr .= (is_array($img_size)) ? ' '.$img_size[3] : ''; - - $tag = 'img'; - $type = 'close'; - return null; - } - else - { - if ($this->getOpt('active_antispam') && preg_match('/^mailto:/',$url)) { - $content = $content == $url ? preg_replace('%^mailto:%','',$content) : $content; - $url = 'mailto:'.$this->__antiSpam(substr($url,7)); - - } - - $attr = ' href="'.$this->protectAttr($this->protectUrls($url)).'"'; - $attr .= ($lang) ? ' hreflang="'.$lang.'"' : ''; - $attr .= ($title) ? ' title="'.$this->protectAttr($title).'"' : ''; - - return $content; - } - } - - function __specialUrls(&$url,&$content,&$lang,&$title) - { - foreach ($this->functions as $k => $v) - { - if (strpos($k,'url:') === 0 && strpos($url,substr($k,4)) === 0) - { - $res = call_user_func($v,$url,$content); - - $url = isset($res['url']) ? $res['url'] : $url; - $content = isset($res['content']) ? $res['content'] : $content; - $lang = isset($res['lang']) ? $res['lang'] : $lang; - $title = isset($res['title']) ? $res['title'] : $title; - - break; - } - } - } - - function __parseImg($str,&$attr) - { - $data = $this->__splitTagsAttr($str); - - $alt = ''; - $url = $data[0]; - if (!empty($data[1])) { - $alt = $data[1]; - } - - $attr = ' src="'.$this->protectAttr($this->protectUrls($url)).'"'; - $attr .= ' alt="'.$this->protectAttr($alt).'"'; - - if (!empty($data[2])) { - $data[2] = strtoupper($data[2]); - if ($data[2] == 'G' || $data[2] == 'L') { - $attr .= ' style="float:left; margin: 0 1em 1em 0;"'; - } elseif ($data[2] == 'D' || $data[2] == 'R') { - $attr .= ' style="float:right; margin: 0 0 1em 1em;"'; - } elseif ($data[2] == 'C') { - $attr .= ' style="display:block; margin:0 auto;"'; - } - } - - if (!empty($data[3])) { - $attr .= ' title="'.$this->protectAttr($data[3]).'"'; - } - - return null; - } - - function __parseQ($str,&$attr) - { - $str = $this->__inlineWalk($str); - $data = $this->__splitTagsAttr($str); - - $content = $data[0]; - $lang = (!empty($data[1])) ? $this->protectAttr($data[1],true) : ''; - - $attr .= (!empty($lang)) ? ' lang="'.$lang.'"' : ''; - $attr .= (!empty($data[2])) ? ' cite="'.$this->protectAttr($this->protectUrls($data[2])).'"' : ''; - - return $content; - } - - function __parseAnchor($str,&$attr) - { - $name = $this->protectAttr($str,true); - - if ($name != '') { - $attr = ' name="'.$name.'"'; - } - return null; - } - - function __parseNote($str) - { - $i = count($this->foot_notes)+1; - $id = $this->getOpt('note_prefix').'-'.$i; - $this->foot_notes[$id] = $this->__inlineWalk($str); - return '\['.$i.'\]'; - } - - function __parseInlineHTML($str) - { - return str_replace(array('>','<'),array('>','<'),$str); - } - - # Obtenir un acronyme - function __parseAcronym($str,&$attr) - { - $data = $this->__splitTagsAttr($str); - - $acronym = $data[0]; - $title = $lang = ''; - - if (count($data) > 1) - { - $title = $data[1]; - $lang = (!empty($data[2])) ? $this->protectAttr($data[2],true) : ''; - } - - if ($title == '' && !empty($this->acro_table[$acronym])) { - $title = $this->acro_table[$acronym]; - } - - $attr = ($title) ? ' title="'.$this->protectAttr($title).'"' : ''; - $attr .= ($lang) ? ' lang="'.$lang.'"' : ''; - - return $acronym; - } - - # Définition des acronymes, dans le fichier acronyms.txt - function __getAcronyms() - { - $file = $this->getOpt('acronyms_file'); - $res = array(); - - if (file_exists($file)) - { - if (($fc = @file($file)) !== false) - { - foreach ($fc as $v) - { - $v = trim($v); - if ($v != '') - { - $p = strpos($v,':'); - $K = (string) trim(substr($v,0,$p)); - $V = (string) trim(substr($v,($p+1))); - - if ($K) { - $res[$K] = $V; - } - } - } - } - } - - return $res; - } - - # Mots wiki (pour héritage) - function parseWikiWord($str,&$tag,&$attr,&$type) - { - $tag = $attr = ''; - - if (isset($this->functions['wikiword'])) { - return call_user_func($this->functions['wikiword'],$str); - } - - return $str; - } - - /* Protection des attributs */ - function protectAttr($str,$name=false) - { - if ($name && !preg_match('/^[A-Za-z][A-Za-z0-9_:.-]*$/',$str)) { - return ''; - } - - return str_replace(array("'",'"'),array(''','"'),$str); - } - - /* Protection des urls */ - function protectUrls($str) - { - if (preg_match('/^javascript:/',$str)) { - $str = '#'; - } - - return $str; - } - - /* Auto BR */ - function __autoBR($m) - { - return $m[1].str_replace("\n","
      \n",$m[2]).$m[3]; - } - - /* Macro - --------------------------------------------------- */ - function __getMacro($s) - { - $this->macros[] = str_replace('\"','"',$s); - return 'øøø##########MACRO#'.(count($this->macros)-1).'#'; - } - - function __putMacro($id) - { - $id = (integer) $id; - if (isset($this->macros[$id])) - { - $content = str_replace("\r",'',$this->macros[$id]); - - $c = explode("\n",$content); - - # première ligne, premier mot - $fl = trim($c[0]); - $fw = $fl; - - if ($fl) { - if (strpos($fl,' ') !== false) { - $fw = substr($fl,0,strpos($fl,' ')); - } - $content = implode("\n",array_slice($c,1)); - } - - if ($c[0] == "\n") { - $content = implode("\n",array_slice($c,1)); - } - - if ($fw) - { - if (isset($this->functions['macro:'.$fw])) - { - return call_user_func($this->functions['macro:'.$fw],$content,$fl); - } - } - - # Si on n'a rien pu faire, on retourne le tout sous - # forme de
      -			return '
      '.htmlspecialchars($this->macros[$id]).'
      '; - } - - return null; - } - - function __macroHTML($s) - { - return $s; - } - - /* Aide et debug - --------------------------------------------------- */ - function help() - { - $help['b'] = array(); - $help['i'] = array(); - - $help['b'][] = 'Laisser une ligne vide entre chaque bloc de même nature.'; - $help['b'][] = 'Paragraphe : du texte et une ligne vide'; - - if ($this->getOpt('active_title')) { - $help['b'][] = 'Titre : !!!, !!, '. - '! pour des titres plus ou moins importants'; - } - - if ($this->getOpt('active_hr')) { - $help['b'][] = 'Trait horizontal : ----'; - } - - if ($this->getOpt('active_lists')) { - $help['b'][] = 'Liste : ligne débutant par * ou '. - '#. Il est possible de mélanger les listes '. - '(*#*) pour faire des listes de plusieurs niveaux. '. - 'Respecter le style de chaque niveau'; - } - - if ($this->getOpt('active_pre')) { - $help['b'][] = 'Texte préformaté : espace devant chaque ligne de texte'; - } - - if ($this->getOpt('active_quote')) { - $help['b'][] = 'Bloc de citation : > ou '. - ';: devant chaque ligne de texte'; - } - - if ($this->getOpt('active_fr_syntax')) { - $help['i'][] = 'La correction de ponctuation est active. Un espace '. - 'insécable remplacera automatiquement tout espace '. - 'précédant les marques ";","?",":" et "!".'; - } - - if ($this->getOpt('active_em')) { - $help['i'][] = 'Emphase : deux apostrophes \'\'texte\'\''; - } - - if ($this->getOpt('active_strong')) { - $help['i'][] = 'Forte emphase : deux soulignés __texte__'; - } - - if ($this->getOpt('active_br')) { - $help['i'][] = 'Retour forcé à la ligne : %%%'; - } - - if ($this->getOpt('active_ins')) { - $help['i'][] = 'Insertion : deux plus ++texte++'; - } - - if ($this->getOpt('active_del')) { - $help['i'][] = 'Suppression : deux moins --texte--'; - } - - if ($this->getOpt('active_urls')) { - $help['i'][] = 'Lien : [url], [nom|url], '. - '[nom|url|langue] ou [nom|url|langue|titre].'; - - $help['i'][] = 'Image : comme un lien mais avec une extension d\'image.'. - '
      Pour désactiver la reconnaissance d\'image mettez 0 dans un dernier '. - 'argument. Par exemple [image|image.gif||0] fera un lien vers l\'image au '. - 'lieu de l\'afficher.'. - '
      Il est conseillé d\'utiliser la nouvelle syntaxe.'; - } - - if ($this->getOpt('active_img')) { - $help['i'][] = 'Image (nouvelle syntaxe) : '. - '((url|texte alternatif)), '. - '((url|texte alternatif|position)) ou '. - '((url|texte alternatif|position|description longue)). '. - '
      La position peut prendre les valeur L ou G (gauche), R ou D (droite) ou C (centré).'; - } - - if ($this->getOpt('active_anchor')) { - $help['i'][] = 'Ancre : ~ancre~'; - } - - if ($this->getOpt('active_acronym')) { - $help['i'][] = 'Acronyme : ??acronyme?? ou '. - '??acronyme|titre??'; - } - - if ($this->getOpt('active_q')) { - $help['i'][] = 'Citation : {{citation}}, '. - '{{citation|langue}} ou {{citation|langue|url}}'; - } - - if ($this->getOpt('active_code')) { - $help['i'][] = 'Code : @@code ici@@'; - } - - if ($this->getOpt('active_footnotes')) { - $help['i'][] = 'Note de bas de page : $$Corps de la note$$'; - } - - $res = '
      '; - - $res .= '
      Blocs
      '; - if (count($help['b']) > 0) - { - $res .= '
      • '; - $res .= implode(' ;
      • ', $help['b']); - $res .= '.
      '; - } - $res .= '
      '; - - $res .= '
      Éléments en ligne
      '; - if (count($help['i']) > 0) - { - $res .= '
      • '; - $res .= implode(' ;
      • ', $help['i']); - $res .= '.
      '; - } - $res .= '
      '; - - $res .= '
      '; - - return $res; - } - - /* - function debug() - { - $mode = $type = null; - $max = count($this->T); - - $res = - ''. - ''; - - for ($i=0; $i<$max; $i++) - { - $pre_mode = $mode; - $pre_type = $type; - - $line = $this->__getLine($i,$type,$mode); - - $res .= - ''. - ''; - - } - $res .= '
      p-modep-typemodetypechaine
      '.$pre_mode.''.$pre_type.''.$mode.''.$type.''.$line.'
      '; - - return $res; - } - //*/ -} - -?> \ No newline at end of file diff --git a/v2/dotclear/inc/libs/clearbricks/url.handler/class.url.handler.php b/v2/dotclear/inc/libs/clearbricks/url.handler/class.url.handler.php deleted file mode 100644 index 0c99b3c..0000000 --- a/v2/dotclear/inc/libs/clearbricks/url.handler/class.url.handler.php +++ /dev/null @@ -1,229 +0,0 @@ -mode = $mode; - } - - public function register($type,$url,$representation,$handler) - { - $this->types[$type] = array( - 'url' => $url, - 'representation' => $representation, - 'handler' => $handler - ); - } - - public function registerDefault($handler) - { - $this->default_handler = $handler; - } - - public function registerError($handler) - { - array_unshift($this->error_handlers,$handler); - } - - public function unregister($type) - { - if (isset($this->types[$type])) { - unset($this->types[$type]); - } - } - - public function getTypes() - { - return $this->types; - } - - public function getBase($type) - { - if (isset($this->types[$type])) { - return $this->types[$type]['url']; - } - return null; - } - - public function getDocument() - { - $type = $args = ''; - - if ($this->mode == 'path_info') - { - $part = substr($_SERVER['PATH_INFO'],1); - } - else - { - $part = ''; - - $qs = $this->parseQueryString(); - - # Recreates some _GET and _REQUEST pairs - if (!empty($qs)) - { - foreach ($_GET as $k => $v) { - if (isset($_REQUEST[$k])) { - unset($_REQUEST[$k]); - } - } - $_GET = $qs; - $_REQUEST = array_merge($qs,$_REQUEST); - - list($k,$v) = each($qs); - if ($v === null) { - $part = $k; - unset($_GET[$k]); - unset($_REQUEST[$k]); - } - } - } - - $_SERVER['URL_REQUEST_PART'] = $part; - - $this->getArgs($part,$type,$args); - - if (!$type) - { - $this->type = 'default'; - $this->callDefaultHandler($args); - } - else - { - $this->type = $type; - $this->callHandler($type,$args); - } - } - - public function getArgs($part,&$type,&$args) - { - if ($part == '') { - $type = null; - $args = null; - return; - } - - $this->sortTypes(); - - foreach ($this->types as $k => $v) - { - $repr = $v['representation']; - if ($repr == $part) { - $type = $k; - $args = null; - return; - } - elseif (preg_match('#'.$repr.'#',$part,$m)) - { - $type = $k; - $args = isset($m[1]) ? $m[1] : null; - return; - } - } - - # No type, pass args to default - $args = $part; - } - - public function callHandler($type,$args) - { - if (!isset($this->types[$type])) { - throw new Exception('Unknown URL type'); - } - - $handler = $this->types[$type]['handler']; - if (!is_callable($handler)) { - throw new Exception('Unable to call function'); - } - try { - call_user_func($handler,$args); - } catch (Exception $e) { - foreach ($this->error_handlers as $err_handler) { - if (call_user_func($err_handler,$args,$type,$e) === true) { - return; - } - } - # propagate exception, as it has not been processed by handlers - throw $e; - } - } - - public function callDefaultHandler($args) - { - if (!is_callable($this->default_handler)) { - throw new Exception('Unable to call function'); - } - - try { - call_user_func($this->default_handler,$args); - } catch (Exception $e) { - foreach ($this->error_handlers as $err_handler) { - if (call_user_func($err_handler,$args,'default',$e) === true) { - return; - } - } - # propagate exception, as it has not been processed by handlers - throw $e; - } - - } - - protected function parseQueryString() - { - if (!empty($_SERVER['QUERY_STRING'])) - { - $q = explode('&',$_SERVER['QUERY_STRING']); - $T = array(); - foreach ($q as $v) - { - $t = explode('=',$v,2); - - $t[0] = rawurldecode($t[0]); - if (!isset($t[1])) { - $T[$t[0]] = null; - } else { - $T[$t[0]] = urldecode($t[1]); - } - } - - return $T; - } - return array(); - } - - protected function sortTypes() - { - foreach ($this->types as $k => $v) { - $r[$k] = $v['url']; - } - array_multisort($r,SORT_DESC,$this->types); - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/libs/clearbricks/xmlsql/class.xmlsql.php b/v2/dotclear/inc/libs/clearbricks/xmlsql/class.xmlsql.php deleted file mode 100644 index e69ed3a..0000000 --- a/v2/dotclear/inc/libs/clearbricks/xmlsql/class.xmlsql.php +++ /dev/null @@ -1,180 +0,0 @@ -con =& $con; - $this->xml = $xml; - - $schema = dbSchema::init($this->con); - $this->tables = $schema->getTables(); - unset($schema); - } - - public function replace($str,$rep) - { - $this->xml = str_replace($str,$rep,$this->xml); - } - - public function execute($version=0) - { - $this->test_version = $version; - - $x = @simplexml_load_string($this->xml); - if (!$x) { - throw new Exception('Unable to load XML file.'); - } - - $this->parseNode($x); - } - - protected function parseNode($node) - { - foreach ($node->children() as $n) - { - switch (dom_import_simplexml($n)->nodeName) - { - case 'test': - $this->performTest($n); - break; - case 'action': - $this->performAction($n); - break; - } - } - } - - protected function performTest($node) - { - /* Test like: - ... - */ - if (isset($node['type']) && (string) $node['type'] == 'table') - { - $test['result'] = in_array($node['name'],$this->tables); - $test['label'] = 'Table %s does not exists'; - $test['string'] = (string) $node['name']; - - $xtest = $node; - } - /* Test syntax: - ... - */ - elseif (isset($node['type']) && (string) $node['type'] == 'column') - { - $c = explode('.',$node['name']); - - if (count($c) != 2) { - return false; - - } - - list($table,$col) = $c; - - $rs = $this->con->getColumns($table); - - $test['result'] = isset($rs[$col]); - $test['label'] = 'Column %s does not exists'; - $test['string'] = (string) $node['name']; - - $xtest = $node; - } - /* Test syntax: - ... - */ - elseif (isset($node['type']) && (string) $node['type'] == 'version') - { - $comp = isset($node['comp']) ? $node['comp'] : '>'; - $test['result'] = version_compare($node['name'],$this->test_version,$comp); - $test['label'] = 'Version %s is too low'; - $test['string'] = (string) $node['name']; - - $xtest = $node; - } - - # End tests - if (isset($xtest)) - { - if ($xtest['eq'] == 'neq') { - $test['result'] = !$test['result']; - } - - if (isset($xtest['alert'])) { - $test['alert'] = (boolean) (integer) $xtest['alert']; - } else { - $test['alert'] = false; - } - - if (isset($xtest['label'])) { - $test['label'] = (string) $xtest['label']; - } - if (isset($xtest['string'])) { - $test['string'] = (string) $xtest['string']; - } - unset($xtest); - - # Test false - if (!$test['result']) - { - if ($test['alert']) { - throw new Exception(sprintf($test['label'],$test['string'])); - } - } - # Test true - else - { - $this->parseNode($node); - } - } - else - { - return false; - } - } - - protected function performAction($node) - { - $req = trim((string) $node); - if ($req) - { - try { - $this->con->execute($req); - } catch (Exception $e) { - if ($node['silent'] != 1) { - throw $e; - } - } - } - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/libs/clearbricks/zip/class.unzip.php b/v2/dotclear/inc/libs/clearbricks/zip/class.unzip.php deleted file mode 100644 index 09cc081..0000000 --- a/v2/dotclear/inc/libs/clearbricks/zip/class.unzip.php +++ /dev/null @@ -1,541 +0,0 @@ -file_name = $file_name; - } - - public function __destruct() - { - $this->close(); - } - - public function close() - { - if ($this->fp) { - fclose($this->fp); - $this->fp = null; - } - - if ($this->memory_limit) { - ini_set('memory_limit',$this->memory_limit); - } - } - - public function getList($stop_on_file=false,$exclude=false) - { - if (!empty($this->compressed_list)) { - return $this->compressed_list; - } - - if (!$this->loadFileListByEOF($stop_on_file,$exclude)) { - if(!$this->loadFileListBySignatures($stop_on_file,$exclude)) { - return false; - } - } - - return $this->compressed_list; - } - - public function unzipAll($target) - { - if (empty($this->compressed_list)) { - $this->getList(); - } - - foreach ($this->compressed_list as $k => $v) - { - if ($v['is_dir']) { - continue; - } - - $this->unzip($k,$target.'/'.$k); - } - } - - public function unzip($file_name,$target=false) - { - if (empty($this->compressed_list)) { - $this->getList($file_name); - } - - if (!isset($this->compressed_list[$file_name])) { - throw new Exception(sprintf(__('File %s is not compressed in the zip.'),$file_name)); - } - if ($this->isFileExcluded($file_name)) { - return; - } - $details =& $this->compressed_list[$file_name]; - - if ($details['is_dir']) { - throw new Exception(sprintf(__('Trying to unzip a folder name %s'),$file_name)); - } - - if (!$details['uncompressed_size']) { - return $this->putContent('',$target); - } - - if ($target) { - $this->testTargetDir(dirname($target)); - } - - fseek($this->fp(),$details['contents_start_offset']); - - $this->memoryAllocate($details['compressed_size']); - return $this->uncompress( - fread($this->fp(), $details['compressed_size']), - $details['compression_method'], - $details['uncompressed_size'], - $target - ); - } - - public function getFilesList() - { - if (empty($this->compressed_list)) { - $this->getList(); - } - - $res = array(); - foreach ($this->compressed_list as $k => $v) { - if (!$v['is_dir']) { - $res[] = $k; - } - } - return $res; - } - - public function getDirsList() - { - if (empty($this->compressed_list)) { - $this->getList(); - } - - $res = array(); - foreach ($this->compressed_list as $k => $v) { - if ($v['is_dir']) { - $res[] = substr($k,0,-1); - } - } - return $res; - } - - public function getRootDir() - { - if (empty($this->compressed_list)) { - $this->getList(); - } - - $files = $this->getFilesList(); - $dirs = $this->getDirsList(); - - $root_files = 0; - $root_dirs = 0; - foreach ($files as $v) { if (strpos($v,'/') === false) { $root_files++; }} - foreach ($dirs as $v) { if (strpos($v,'/') === false) { $root_dirs++; }} - - if ($root_files == 0 && $root_dirs == 1) { - return $dirs[0]; - } else { - return false; - } - } - - public function isEmpty() - { - if (empty($this->compressed_list)) { - $this->getList(); - } - - return count($this->compressed_list) == 0; - } - - public function hasFile($f) - { - if (empty($this->compressed_list)) { - $this->getList(); - } - - return isset($this->compressed_list[$f]); - } - - public function setExcludePattern($pattern) - { - $this->exclude_pattern = $pattern; - } - - protected function fp() - { - if ($this->fp === null) { - $this->fp = @fopen($this->file_name,'rb'); - } - - if ($this->fp === false) { - throw new Exception('Unable to open file.'); - } - - return $this->fp; - } - - protected function isFileExcluded($f) - { - if (!$this->exclude_pattern) { - return false; - } - - return preg_match($this->exclude_pattern,$f); - } - - protected function putContent($content,$target=false) - { - if ($target) { - $r = @file_put_contents($target,$content); - if ($r === false) { - throw new Exception(__('Unable to write destination file.')); - } - files::inheritChmod($target); - return true; - } - return $content; - } - - protected function testTargetDir($dir) - { - if (is_dir($dir) && !is_writable($dir)) { - throw new Exception(__('Unable to write in target directory, permission denied.')); - } - - if (!is_dir($dir)) { - files::makeDir($dir,true); - } - } - - protected function uncompress($content,$mode,$size,$target=false) - { - switch ($mode) - { - case 0: - # Not compressed - $this->memoryAllocate($size*2); - return $this->putContent($content,$target); - case 1: - throw new Exception('Shrunk mode is not supported.'); - case 2: - case 3: - case 4: - case 5: - throw new Exception('Compression factor '.($mode-1).' is not supported.'); - case 6: - throw new Exception('Implode is not supported.'); - case 7: - throw new Exception('Tokenizing compression algorithm is not supported.'); - case 8: - # Deflate - if (!function_exists('gzinflate')) { - throw new Exception('Gzip functions are not available.'); - } - $this->memoryAllocate($size*2); - return $this->putContent(gzinflate($content,$size),$target); - case 9: - throw new Exception('Enhanced Deflating is not supported.'); - case 10: - throw new Exception('PKWARE Date Compression Library Impoloding is not supported.'); - case 12: - # Bzip2 - if (!function_exists('bzdecompress')) { - throw new Exception('Bzip2 functions are not available.'); - } - $this->memoryAllocate($size*2); - return $this->putContent(bzdecompress($content),$target); - case 18: - throw new Exception('IBM TERSE is not supported.'); - default: - throw new Exception('Unknown uncompress method'); - } - } - - protected function loadFileListByEOF($stop_on_file=false,$exclude=false) - { - $fp = $this->fp(); - - for ($x=0; $x<1024; $x++) - { - fseek($fp,-22-$x,SEEK_END); - $signature = fread($fp,4); - - if ($signature == $this->dir_sig_e) - { - $dir_list = array(); - - $eodir = array( - 'disk_number_this' => unpack('v', fread($fp,2)), - 'disk_number' => unpack('v', fread($fp,2)), - 'total_entries_this' => unpack('v', fread($fp,2)), - 'total_entries' => unpack('v', fread($fp,2)), - 'size_of_cd' => unpack('V', fread($fp,4)), - 'offset_start_cd' => unpack('V', fread($fp,4)) - ); - - $zip_comment_len = unpack('v', fread($fp,2)); - $eodir['zipfile_comment'] = $zip_comment_len[1] ? fread($fp,$zip_comment_len) : ''; - - $this->eo_central = array( - 'disk_number_this' => $eodir['disk_number_this'][1], - 'disk_number' => $eodir['disk_number'][1], - 'total_entries_this' => $eodir['total_entries_this'][1], - 'total_entries' => $eodir['total_entries'][1], - 'size_of_cd' => $eodir['size_of_cd'][1], - 'offset_start_cd' => $eodir['offset_start_cd'][1], - 'zipfile_comment' => $eodir['zipfile_comment'] - ); - - fseek($fp, $this->eo_central['offset_start_cd']); - $signature = fread($fp,4); - - while ($signature == $this->dir_sig) - { - $dir = array(); - $dir['version_madeby'] = unpack("v",fread($fp, 2)); # version made by - $dir['version_needed'] = unpack("v",fread($fp, 2)); # version needed to extract - $dir['general_bit_flag'] = unpack("v",fread($fp, 2)); # general purpose bit flag - $dir['compression_method'] = unpack("v",fread($fp, 2)); # compression method - $dir['lastmod_time'] = unpack("v",fread($fp, 2)); # last mod file time - $dir['lastmod_date'] = unpack("v",fread($fp, 2)); # last mod file date - $dir['crc-32'] = fread($fp,4); # crc-32 - $dir['compressed_size'] = unpack("V",fread($fp, 4)); # compressed size - $dir['uncompressed_size'] = unpack("V",fread($fp, 4)); # uncompressed size - - $file_name_len = unpack("v",fread($fp, 2)); # filename length - $extra_field_len = unpack("v",fread($fp, 2)); # extra field length - $file_comment_len = unpack("v",fread($fp, 2)); # file comment length - - $dir['disk_number_start'] = unpack("v",fread($fp, 2)); # disk number start - $dir['internal_attributes'] = unpack("v",fread($fp, 2)); # internal file attributes-byte1 - $dir['external_attributes1'] = unpack("v",fread($fp, 2)); # external file attributes-byte2 - $dir['external_attributes2'] = unpack("v",fread($fp, 2)); # external file attributes - $dir['relative_offset'] = unpack("V",fread($fp, 4)); # relative offset of local header - $dir['file_name'] = $this->cleanFileName(fread($fp, $file_name_len[1])); # filename - $dir['extra_field'] = $extra_field_len[1] ? fread($fp, $extra_field_len[1]) : ''; # extra field - $dir['file_comment'] = $file_comment_len[1] ? fread($fp, $file_comment_len[1]) : ''; # file comment - - $dir_list[$dir['file_name']] = array( - 'version_madeby' => $dir['version_madeby'][1], - 'version_needed' => $dir['version_needed'][1], - 'general_bit_flag' => str_pad(decbin($dir['general_bit_flag'][1]), 8, '0', STR_PAD_LEFT), - 'compression_method' => $dir['compression_method'][1], - 'lastmod_datetime' => $this->getTimeStamp($dir['lastmod_date'][1],$dir['lastmod_time'][1]), - 'crc-32' => str_pad(dechex(ord($dir['crc-32'][3])), 2, '0', STR_PAD_LEFT). - str_pad(dechex(ord($dir['crc-32'][2])), 2, '0', STR_PAD_LEFT). - str_pad(dechex(ord($dir['crc-32'][1])), 2, '0', STR_PAD_LEFT). - str_pad(dechex(ord($dir['crc-32'][0])), 2, '0', STR_PAD_LEFT), - 'compressed_size' => $dir['compressed_size'][1], - 'uncompressed_size' => $dir['uncompressed_size'][1], - 'disk_number_start' => $dir['disk_number_start'][1], - 'internal_attributes' => $dir['internal_attributes'][1], - 'external_attributes1' => $dir['external_attributes1'][1], - 'external_attributes2' => $dir['external_attributes2'][1], - 'relative_offset' => $dir['relative_offset'][1], - 'file_name' => $dir['file_name'], - 'extra_field' => $dir['extra_field'], - 'file_comment' => $dir['file_comment'] - ); - $signature = fread($fp, 4); - } - - foreach ($dir_list as $k => $v) - { - if ($exclude && preg_match($exclude,$k)) { - continue; - } - - $i = $this->getFileHeaderInformation($v['relative_offset']); - - $this->compressed_list[$k]['file_name'] = $k; - $this->compressed_list[$k]['is_dir'] = $v['external_attributes1'] == 16 || substr($k,-1,1) == '/'; - $this->compressed_list[$k]['compression_method'] = $v['compression_method']; - $this->compressed_list[$k]['version_needed'] = $v['version_needed']; - $this->compressed_list[$k]['lastmod_datetime'] = $v['lastmod_datetime']; - $this->compressed_list[$k]['crc-32'] = $v['crc-32']; - $this->compressed_list[$k]['compressed_size'] = $v['compressed_size']; - $this->compressed_list[$k]['uncompressed_size'] = $v['uncompressed_size']; - $this->compressed_list[$k]['lastmod_datetime'] = $v['lastmod_datetime']; - $this->compressed_list[$k]['extra_field'] = $i['extra_field']; - $this->compressed_list[$k]['contents_start_offset'] = $i['contents_start_offset']; - - if(strtolower($stop_on_file) == strtolower($k)) { - break; - } - } - return true; - } - } - return false; - } - - protected function loadFileListBySignatures($stop_on_file=false,$exclude=false) - { - $fp = $this->fp(); - fseek($fp,0); - - $return = false; - while(true) - { - $details = $this->getFileHeaderInformation(); - if (!$details) { - fseek($fp,12-4,SEEK_CUR); # 12: Data descriptor - 4: Signature (that will be read again) - $details = $this->getFileHeaderInformation(); - } - if (!$details) { - break; - } - $filename = $details['file_name']; - - if ($exclude && preg_match($exclude,$filename)) { - continue; - } - - $this->compressed_list[$filename] = $details; - $return = true; - - if (strtolower($stop_on_file) == strtolower($filename)) { - break; - } - } - - return $return; - } - - protected function getFileHeaderInformation($start_offset=false) - { - $fp = $this->fp(); - - if ($start_offset !== false) { - fseek($fp,$start_offset); - } - - $signature = fread($fp, 4); - if ($signature == $this->zip_sig) - { - # Get information about the zipped file - $file = array(); - $file['version_needed'] = unpack("v",fread($fp, 2)); # version needed to extract - $file['general_bit_flag'] = unpack("v",fread($fp, 2)); # general purpose bit flag - $file['compression_method'] = unpack("v",fread($fp, 2)); # compression method - $file['lastmod_time'] = unpack("v",fread($fp, 2)); # last mod file time - $file['lastmod_date'] = unpack("v",fread($fp, 2)); # last mod file date - $file['crc-32'] = fread($fp,4); # crc-32 - $file['compressed_size'] = unpack("V",fread($fp, 4)); # compressed size - $file['uncompressed_size'] = unpack("V",fread($fp, 4)); # uncompressed size - - $file_name_len = unpack("v",fread($fp, 2)); # filename length - $extra_field_len = unpack("v",fread($fp, 2)); # extra field length - - $file['file_name'] = $this->cleanFileName(fread($fp,$file_name_len[1])); # filename - $file['extra_field'] = $extra_field_len[1] ? fread($fp, $extra_field_len[1]) : ''; # extra field - $file['contents_start_offset'] = ftell($fp); - - # Look for the next file - fseek($fp, $file['compressed_size'][1], SEEK_CUR); - - # Mount file table - $i = array( - 'file_name' => $file['file_name'], - 'is_dir' => substr($file['file_name'],-1,1) == '/', - 'compression_method' => $file['compression_method'][1], - 'version_needed' => $file['version_needed'][1], - 'lastmod_datetime' => $this->getTimeStamp($file['lastmod_date'][1],$file['lastmod_time'][1]), - 'crc-32' => str_pad(dechex(ord($file['crc-32'][3])), 2, '0', STR_PAD_LEFT). - str_pad(dechex(ord($file['crc-32'][2])), 2, '0', STR_PAD_LEFT). - str_pad(dechex(ord($file['crc-32'][1])), 2, '0', STR_PAD_LEFT). - str_pad(dechex(ord($file['crc-32'][0])), 2, '0', STR_PAD_LEFT), - 'compressed_size' => $file['compressed_size'][1], - 'uncompressed_size' => $file['uncompressed_size'][1], - 'extra_field' => $file['extra_field'], - 'general_bit_flag' => str_pad(decbin($file['general_bit_flag'][1]), 8, '0', STR_PAD_LEFT), - 'contents_start_offset'=>$file['contents_start_offset'] - ); - return $i; - } - return false; - } - - protected function getTimeStamp($date,$time) - { - $BINlastmod_date = str_pad(decbin($date), 16, '0', STR_PAD_LEFT); - $BINlastmod_time = str_pad(decbin($time), 16, '0', STR_PAD_LEFT); - $lastmod_dateY = bindec(substr($BINlastmod_date, 0, 7))+1980; - $lastmod_dateM = bindec(substr($BINlastmod_date, 7, 4)); - $lastmod_dateD = bindec(substr($BINlastmod_date, 11, 5)); - $lastmod_timeH = bindec(substr($BINlastmod_time, 0, 5)); - $lastmod_timeM = bindec(substr($BINlastmod_time, 5, 6)); - $lastmod_timeS = bindec(substr($BINlastmod_time, 11, 5)) * 2; - - return mktime($lastmod_timeH, $lastmod_timeM, $lastmod_timeS, $lastmod_dateM, $lastmod_dateD, $lastmod_dateY); - } - - protected function cleanFileName($n) - { - $n = str_replace('../','',$n); - $n = preg_replace('#^/+#','',$n); - return $n; - } - - protected function memoryAllocate($size) - { - $mem_used = function_exists('memory_get_usage') ? @memory_get_usage() : 4000000; - $mem_limit = @ini_get('memory_limit'); - if ($mem_used && $mem_limit) - { - $mem_limit = files::str2bytes($mem_limit); - $mem_avail = $mem_limit-$mem_used-(512*1024); - $mem_needed = $size; - - if ($mem_needed > $mem_avail) - { - if (@ini_set('memory_limit',$mem_limit+$mem_needed+$mem_used) === false) { - throw new Exception(__('Not enough memory to open file.')); - } - - if (!$this->memory_limit) { - $this->memory_limit = $mem_limit; - } - } - } - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/libs/clearbricks/zip/class.zip.php b/v2/dotclear/inc/libs/clearbricks/zip/class.zip.php deleted file mode 100644 index f5656e9..0000000 --- a/v2/dotclear/inc/libs/clearbricks/zip/class.zip.php +++ /dev/null @@ -1,370 +0,0 @@ -fp = $out_fp; - } - - public function __destruct() - { - $this->close(); - } - - public function close() - { - if ($this->memory_limit) { - ini_set('memory_limit',$this->memory_limit); - } - } - - public function addExclusion($reg) - { - $this->exclusions[] = $reg; - } - - public function addFile($file,$name=null) - { - $file = preg_replace('#[\\\/]+#','/',$file); - - if (!$name) { - $name = $file; - } - $name = $this->formatName($name); - - if ($this->isExcluded($name)) { - return; - } - - if (!file_exists($file) || !is_file($file)) { - throw new Exception(__('File does not exist')); - } - if (!is_readable($file)) { - throw new Exception(__('Cannot read file')); - } - - $info = stat($file); - - $this->entries[$name] = array( - 'file' => $file, - 'is_dir' => false, - 'mtime' => $info['mtime'], - 'size' => $info['size'] - ); - } - - public function addDirectory($dir,$name=null,$recursive=false) - { - $dir = preg_replace('#[\\\/]+#','/',$dir); - if (substr($dir,-1-1) != '/') { - $dir .= '/'; - } - - if (!$name && $name !== '') { - $name = $dir; - } - - if ($this->isExcluded($name)) { - return; - } - - if ($name !== '') - { - if (substr($name,-1,1) != '/') { - $name .= '/'; - } - - $name = $this->formatName($name); - - if ($name !== '') - { - $this->entries[$name] = array( - 'file' => null, - 'is_dir' => true, - 'mtime' => time(), - 'size' => 0 - ); - } - } - - if ($recursive) - { - if (!is_dir($dir)) { - throw new Exception(__('Directory does not exist')); - } - if (!is_readable($dir)) { - throw new Exception(__('Cannot read directory')); - } - - $D = dir($dir); - while (($e = $D->read()) !== false) { - if ($e == '.' || $e == '..') { - continue; - } - - if (is_dir($dir.'/'.$e)) { - $this->addDirectory($dir.$e,$name.$e,true); - } elseif (is_file($dir.'/'.$e)) { - $this->addFile($dir.$e,$name.$e); - } - } - } - } - - public function write() - { - foreach ($this->entries as $name => $v) - { - if ($v['is_dir']) { - $this->writeDirectory($name); - } else { - $this->writeFile($name,$v['file'],$v['size'],$v['mtime']); - } - } - - $ctrldir = implode('',$this->ctrl_dir); - - fwrite($this->fp, - $ctrldir. - $this->eof_ctrl_dir. - pack('v',sizeof($this->ctrl_dir)). # total # of entries "on this disk" - pack('v',sizeof($this->ctrl_dir)). # total # of entries overall - pack('V',strlen($ctrldir)). # size of central dir - pack('V',$this->old_offset). # offset to start of central dir - "\x00\x00" # .zip file comment length - ); - } - - protected function writeDirectory($name) - { - if (!isset($this->entries[$name])) { - return; - } - - $mdate = $this->makeDate(time()); - $mtime = $this->makeTime(time()); - - # Data descriptor - $data_desc = - "\x50\x4b\x03\x04". - "\x0a\x00". # ver needed to extract - "\x00\x00". # gen purpose bit flag - "\x00\x00". # compression method - pack('v',$mtime). # last mod time - pack('v',$mdate). # last mod date - pack('V',0). # crc32 - pack('V',0). # compressed filesize - pack('V',0). # uncompressed filesize - pack('v',strlen($name)). # length of pathname - pack('v',0). # extra field length - $name. # end of "local file header" segment - pack('V',0). # crc32 - pack('V',0). # compressed filesize - pack('V',0); # uncompressed filesize - - $new_offset = $this->old_offset + strlen($data_desc); - fwrite($this->fp,$data_desc); - - # Add to central record - $cdrec = - "\x50\x4b\x01\x02". - "\x00\x00". # version made by - "\x0a\x00". # version needed to extract - "\x00\x00". # gen purpose bit flag - "\x00\x00". # compression method - pack('v',$mtime). # last mod time - pack('v',$mdate). # last mod date - pack('V',0). # crc32 - pack('V',0). # compressed filesize - pack('V',0). # uncompressed filesize - pack('v',strlen($name)). # length of filename - pack('v',0). # extra field length - pack('v',0). # file comment length - pack('v',0). # disk number start - pack('v',0). # internal file attributes - pack('V',16). # external file attributes - 'directory' bit set - pack('V',$this->old_offset). # relative offset of local header - $name; - - $this->old_offset = $new_offset; - $this->ctrl_dir[] = $cdrec; - } - - protected function writeFile($name,$file,$size,$mtime) - { - if (!isset($this->entries[$name])) { - return; - } - - $size = filesize($file); - $this->memoryAllocate($size*3); - - $content = file_get_contents($file); - - $unc_len = strlen($content); - $crc = crc32($content); - $zdata = gzdeflate($content); - $c_len = strlen($zdata); - - unset($content); - - $mdate = $this->makeDate($mtime); - $mtime = $this->makeTime($mtime); - - # Data descriptor - $data_desc = - "\x50\x4b\x03\x04". - "\x14\x00". # ver needed to extract - "\x00\x00". # gen purpose bit flag - "\x08\x00". # compression method - pack('v',$mtime). # last mod time - pack('v',$mdate). # last mod date - pack('V',$crc). # crc32 - pack('V',$c_len). # compressed filesize - pack('V',$unc_len). # uncompressed filesize - pack('v',strlen($name)). # length of filename - pack('v',0). # extra field length - $name. # end of "local file header" segment - $zdata. # "file data" segment - pack('V',$crc). # crc32 - pack('V',$c_len). # compressed filesize - pack('V',$unc_len); # uncompressed filesize - - fwrite($this->fp,$data_desc); - unset($zdata); - - $new_offset = $this->old_offset + strlen($data_desc); - - # Add to central directory record - $cdrec = - "\x50\x4b\x01\x02". - "\x00\x00". # version made by - "\x14\x00". # version needed to extract - "\x00\x00". # gen purpose bit flag - "\x08\x00". # compression method - pack('v',$mtime). # last mod time - pack('v',$mdate). # last mod date - pack('V',$crc). # crc32 - pack('V',$c_len). # compressed filesize - pack('V',$unc_len). # uncompressed filesize - pack('v',strlen($name)). # length of filename - pack('v',0). # extra field length - pack('v',0). # file comment length - pack('v',0). # disk number start - pack('v',0). # internal file attributes - pack('V',32). # external file attributes - 'archive' bit set - pack('V',$this->old_offset). # relative offset of local header - $name; - - $this->old_offset = $new_offset; - $this->ctrl_dir[] = $cdrec; - } - - protected function formatName($name) - { - if (substr($name,0,1) == '/') { - $name = substr($name,1); - } - - return $name; - } - - protected function isExcluded($name) - { - foreach ($this->exclusions as $reg) { - if (preg_match($reg,$name)) { - return true; - } - } - - return false; - } - - protected function makeDate($ts) - { - $year = date('Y',$ts)-1980; - if ($year < 0) { - $year = 0; - } - - $year = sprintf('%07b',$year); - $month = sprintf('%04b',date('n',$ts)); - $day = sprintf('%05b',date('j',$ts)); - - return bindec($year.$month.$day); - } - - protected function makeTime($ts) - { - $hour = sprintf('%05b',date('G',$ts)); - $minute = sprintf('%06b',date('i',$ts)); - $second = sprintf('%05b',ceil(date('s',$ts)/2)); - - return bindec($hour.$minute.$second); - } - - protected function memoryAllocate($size) - { - $mem_used = function_exists('memory_get_usage') ? @memory_get_usage() : 4000000; - $mem_limit = @ini_get('memory_limit'); - if ($mem_used && $mem_limit) - { - $mem_limit = files::str2bytes($mem_limit); - $mem_avail = $mem_limit-$mem_used-(512*1024); - $mem_needed = $size; - - if ($mem_needed > $mem_avail) - { - if (@ini_set('memory_limit',$mem_limit+$mem_needed+$mem_used) === false) { - throw new Exception(__('Not enough memory to open file.')); - } - - if (!$this->memory_limit) { - $this->memory_limit = $mem_limit; - } - } - } - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/load_plugin_file.php b/v2/dotclear/inc/load_plugin_file.php deleted file mode 100644 index 033f17d..0000000 --- a/v2/dotclear/inc/load_plugin_file.php +++ /dev/null @@ -1,87 +0,0 @@ - \ No newline at end of file diff --git a/v2/dotclear/inc/prepend.php b/v2/dotclear/inc/prepend.php deleted file mode 100644 index bc48181..0000000 --- a/v2/dotclear/inc/prepend.php +++ /dev/null @@ -1,286 +0,0 @@ -getCode() == 0 ? - sprintf(__('

      This either means that the username and password information in '. - 'your config.php file is incorrect or we can\'t contact '. - 'the database server at "%s". This could mean your '. - 'host\'s database server is down.

      '. - '
      • Are you sure you have the correct username and password?
      • '. - '
      • Are you sure that you have typed the correct hostname?
      • '. - '
      • Are you sure that the database server is running?
      '. - '

      If you\'re unsure what these terms mean you should probably contact '. - 'your host. If you still need help you can always visit the '. - 'Dotclear Support Forums.

      '). - (DC_DEBUG ? - __('The following error was encountered while trying to read the database:').'

      • '.$e->getMessage().'
      ' : '') - ,(DC_DBHOST != '' ? DC_DBHOST : 'localhost') - ) - : '' - ,20); -} - -# If we have some __top_behaviors, we load them -if (isset($__top_behaviors) && is_array($__top_behaviors)) -{ - foreach ($__top_behaviors as $b) { - $core->addBehavior($b[0],$b[1]); - } - unset($b); -} - -http::trimRequest(); -try { - http::unsetGlobals(); -} catch (Exception $e) { - header('Content-Type: text/plain'); - echo $e->getMessage(); - exit; -} - -$core->url->registerDefault(array('dcUrlHandlers','home')); -$core->url->registerError(array('dcUrlHandlers','default404')); -$core->url->register('lang','','^([a-zA-Z]{2}(?:-[a-z]{2})?(?:/page/[0-9]+)?)$',array('dcUrlHandlers','lang')); -$core->url->register('post','post','^post/(.+)$',array('dcUrlHandlers','post')); -$core->url->register('preview','preview','^preview/(.+)$',array('dcUrlHandlers','preview')); -$core->url->register('category','category','^category/(.+)$',array('dcUrlHandlers','category')); -$core->url->register('archive','archive','^archive(/.+)?$',array('dcUrlHandlers','archive')); - -$core->url->register('feed','feed','^feed/(.+)$',array('dcUrlHandlers','feed')); -$core->url->register('trackback','trackback','^trackback/(.+)$',array('dcUrlHandlers','trackback')); -$core->url->register('rsd','rsd','^rsd$',array('dcUrlHandlers','rsd')); -$core->url->register('xmlrpc','xmlrpc','^xmlrpc/(.+)$',array('dcUrlHandlers','xmlrpc')); - -$core->setPostType('post','post.php?id=%d',$core->url->getURLFor('post','%s')); - -# Store upload_max_filesize in bytes -$u_max_size = files::str2bytes(ini_get('upload_max_filesize')); -$p_max_size = files::str2bytes(ini_get('post_max_size')); -if ($p_max_size < $u_max_size) { - $u_max_size = $p_max_size; -} -define('DC_MAX_UPLOAD_SIZE',$u_max_size); -unset($u_max_size); unset($p_max_size); - -# Shutdown -register_shutdown_function('__shutdown'); - -function __shutdown() -{ - global $__shutdown; - if (is_array($__shutdown)) { - foreach ($__shutdown as $f) { - if (is_callable($f)) { - call_user_func($f); - } - } - } - # Explicitly close session before DB connection - try { - if (session_id()) { - session_write_close(); - } - } catch (Exception $e) {} - $GLOBALS['core']->con->close(); -} - -function __error($summary,$message,$code=0) -{ - # Error codes - # 10 : no config file - # 20 : database issue - # 30 : blog is not defined - # 40 : template files creation - # 50 : no default theme - # 60 : template processing error - # 70 : blog is offline - - if (CLI_MODE) - { - trigger_error($summary,E_USER_ERROR); - exit(1); - } - else - { - if (defined('DC_ERRORFILE') && is_file(DC_ERRORFILE)) { - include DC_ERRORFILE; - } else { - include dirname(__FILE__).'/core_error.php'; - } - exit; - } -} - -function init_prepend_l10n() -{ - # Loading locales for detected language - $dlang = http::getAcceptLanguages(); - foreach($dlang as $l) - { - if ($l == 'en' || l10n::set(dirname(__FILE__).'/../locales/'.$l.'/main') !== false) { - break; - } - } -} -?> diff --git a/v2/dotclear/inc/public/class.dc.template.php b/v2/dotclear/inc/public/class.dc.template.php deleted file mode 100644 index 8bda8ce..0000000 --- a/v2/dotclear/inc/public/class.dc.template.php +++ /dev/null @@ -1,3095 +0,0 @@ -remove_php = !$core->blog->settings->system->tpl_allow_php; - $this->use_cache = $core->blog->settings->system->tpl_use_cache; - - $this->tag_block = '|>)((?:[^<]|<(?!/?tpl:\1)|(?R))*)'; - $this->tag_value = '{{tpl:(\w+)(\s(.*?))?}}'; - - $this->core =& $core; - - # Transitional tags - $this->addValue('EntryTrackbackCount',array($this,'EntryPingCount')); - $this->addValue('EntryTrackbackData',array($this,'EntryPingData')); - $this->addValue('EntryTrackbackLink',array($this,'EntryPingLink')); - - # l10n - $this->addValue('lang',array($this,'l10n')); - - # Loops test tags - $this->addBlock('LoopPosition',array($this,'LoopPosition')); - - # Archives - $this->addBlock('Archives',array($this,'Archives')); - $this->addBlock('ArchivesHeader',array($this,'ArchivesHeader')); - $this->addBlock('ArchivesFooter',array($this,'ArchivesFooter')); - $this->addBlock('ArchivesYearHeader',array($this,'ArchivesYearHeader')); - $this->addBlock('ArchivesYearFooter',array($this,'ArchivesYearFooter')); - $this->addValue('ArchiveDate',array($this,'ArchiveDate')); - $this->addBlock('ArchiveNext',array($this,'ArchiveNext')); - $this->addBlock('ArchivePrevious',array($this,'ArchivePrevious')); - $this->addValue('ArchiveEntriesCount',array($this,'ArchiveEntriesCount')); - $this->addValue('ArchiveURL',array($this,'ArchiveURL')); - - # Blog - $this->addValue('BlogArchiveURL',array($this,'BlogArchiveURL')); - $this->addValue('BlogCopyrightNotice',array($this,'BlogCopyrightNotice')); - $this->addValue('BlogDescription',array($this,'BlogDescription')); - $this->addValue('BlogEditor',array($this,'BlogEditor')); - $this->addValue('BlogFeedID',array($this,'BlogFeedID')); - $this->addValue('BlogFeedURL',array($this,'BlogFeedURL')); - $this->addValue('BlogRSDURL',array($this,'BlogRSDURL')); - $this->addValue('BlogName',array($this,'BlogName')); - $this->addValue('BlogLanguage',array($this,'BlogLanguage')); - $this->addValue('BlogThemeURL',array($this,'BlogThemeURL')); - $this->addValue('BlogUpdateDate',array($this,'BlogUpdateDate')); - $this->addValue('BlogID',array($this,'BlogID')); - $this->addValue('BlogURL',array($this,'BlogURL')); - $this->addValue('BlogPublicURL',array($this,'BlogPublicURL')); - $this->addValue('BlogQmarkURL',array($this,'BlogQmarkURL')); - $this->addValue('BlogMetaRobots',array($this,'BlogMetaRobots')); - - # Categories - $this->addBlock('Categories',array($this,'Categories')); - $this->addBlock('CategoriesHeader',array($this,'CategoriesHeader')); - $this->addBlock('CategoriesFooter',array($this,'CategoriesFooter')); - $this->addBlock('CategoryIf',array($this,'CategoryIf')); - $this->addBlock('CategoryFirstChildren',array($this,'CategoryFirstChildren')); - $this->addBlock('CategoryParents',array($this,'CategoryParents')); - $this->addValue('CategoryFeedURL',array($this,'CategoryFeedURL')); - $this->addValue('CategoryURL',array($this,'CategoryURL')); - $this->addValue('CategoryShortURL',array($this,'CategoryShortURL')); - $this->addValue('CategoryDescription',array($this,'CategoryDescription')); - $this->addValue('CategoryTitle',array($this,'CategoryTitle')); - - # Comments - $this->addBlock('Comments',array($this,'Comments')); - $this->addValue('CommentAuthor',array($this,'CommentAuthor')); - $this->addValue('CommentAuthorDomain',array($this,'CommentAuthorDomain')); - $this->addValue('CommentAuthorLink',array($this,'CommentAuthorLink')); - $this->addValue('CommentAuthorMailMD5',array($this,'CommentAuthorMailMD5')); - $this->addValue('CommentAuthorURL',array($this,'CommentAuthorURL')); - $this->addValue('CommentContent',array($this,'CommentContent')); - $this->addValue('CommentDate',array($this,'CommentDate')); - $this->addValue('CommentTime',array($this,'CommentTime')); - $this->addValue('CommentEmail',array($this,'CommentEmail')); - $this->addValue('CommentEntryTitle',array($this,'CommentEntryTitle')); - $this->addValue('CommentFeedID',array($this,'CommentFeedID')); - $this->addValue('CommentID',array($this,'CommentID')); - $this->addBlock('CommentIf',array($this,'CommentIf')); - $this->addValue('CommentIfFirst',array($this,'CommentIfFirst')); - $this->addValue('CommentIfMe',array($this,'CommentIfMe')); - $this->addValue('CommentIfOdd',array($this,'CommentIfOdd')); - $this->addValue('CommentIP',array($this,'CommentIP')); - $this->addValue('CommentOrderNumber',array($this,'CommentOrderNumber')); - $this->addBlock('CommentsFooter',array($this,'CommentsFooter')); - $this->addBlock('CommentsHeader',array($this,'CommentsHeader')); - $this->addValue('CommentPostURL',array($this,'CommentPostURL')); - $this->addBlock('IfCommentAuthorEmail',array($this,'IfCommentAuthorEmail')); - $this->addValue('CommentHelp',array($this,'CommentHelp')); - - # Comment preview - $this->addBlock('IfCommentPreview',array($this,'IfCommentPreview')); - $this->addValue('CommentPreviewName',array($this,'CommentPreviewName')); - $this->addValue('CommentPreviewEmail',array($this,'CommentPreviewEmail')); - $this->addValue('CommentPreviewSite',array($this,'CommentPreviewSite')); - $this->addValue('CommentPreviewContent',array($this,'CommentPreviewContent')); - $this->addValue('CommentPreviewCheckRemember',array($this,'CommentPreviewCheckRemember')); - - # Entries - $this->addBlock('DateFooter',array($this,'DateFooter')); - $this->addBlock('DateHeader',array($this,'DateHeader')); - $this->addBlock('Entries',array($this,'Entries')); - $this->addBlock('EntriesFooter',array($this,'EntriesFooter')); - $this->addBlock('EntriesHeader',array($this,'EntriesHeader')); - $this->addValue('EntryExcerpt',array($this,'EntryExcerpt')); - $this->addValue('EntryAuthorCommonName',array($this,'EntryAuthorCommonName')); - $this->addValue('EntryAuthorDisplayName',array($this,'EntryAuthorDisplayName')); - $this->addValue('EntryAuthorEmail',array($this,'EntryAuthorEmail')); - $this->addValue('EntryAuthorID',array($this,'EntryAuthorID')); - $this->addValue('EntryAuthorLink',array($this,'EntryAuthorLink')); - $this->addValue('EntryAuthorURL',array($this,'EntryAuthorURL')); - $this->addValue('EntryBasename',array($this,'EntryBasename')); - $this->addValue('EntryCategory',array($this,'EntryCategory')); - $this->addBlock('EntryCategoriesBreadcrumb',array($this,'EntryCategoriesBreadcrumb')); - $this->addValue('EntryCategoryID',array($this,'EntryCategoryID')); - $this->addValue('EntryCategoryURL',array($this,'EntryCategoryURL')); - $this->addValue('EntryCategoryShortURL',array($this,'EntryCategoryShortURL')); - $this->addValue('EntryCommentCount',array($this,'EntryCommentCount')); - $this->addValue('EntryContent',array($this,'EntryContent')); - $this->addValue('EntryDate',array($this,'EntryDate')); - $this->addValue('EntryFeedID',array($this,'EntryFeedID')); - $this->addValue('EntryFirstImage',array($this,'EntryFirstImage')); - $this->addValue('EntryID',array($this,'EntryID')); - $this->addBlock('EntryIf',array($this,'EntryIf')); - $this->addValue('EntryIfFirst',array($this,'EntryIfFirst')); - $this->addValue('EntryIfOdd',array($this,'EntryIfOdd')); - $this->addValue('EntryIfSelected',array($this,'EntryIfSelected')); - $this->addValue('EntryLang',array($this,'EntryLang')); - $this->addBlock('EntryNext',array($this,'EntryNext')); - $this->addValue('EntryPingCount',array($this,'EntryPingCount')); - $this->addValue('EntryPingData',array($this,'EntryPingData')); - $this->addValue('EntryPingLink',array($this,'EntryPingLink')); - $this->addBlock('EntryPrevious',array($this,'EntryPrevious')); - $this->addValue('EntryTitle',array($this,'EntryTitle')); - $this->addValue('EntryTime',array($this,'EntryTime')); - $this->addValue('EntryURL',array($this,'EntryURL')); - - # Languages - $this->addBlock('Languages',array($this,'Languages')); - $this->addBlock('LanguagesHeader',array($this,'LanguagesHeader')); - $this->addBlock('LanguagesFooter',array($this,'LanguagesFooter')); - $this->addValue('LanguageCode',array($this,'LanguageCode')); - $this->addBlock('LanguageIfCurrent',array($this,'LanguageIfCurrent')); - $this->addValue('LanguageURL',array($this,'LanguageURL')); - - # Pagination - $this->addBlock('Pagination',array($this,'Pagination')); - $this->addValue('PaginationCounter',array($this,'PaginationCounter')); - $this->addValue('PaginationCurrent',array($this,'PaginationCurrent')); - $this->addBlock('PaginationIf',array($this,'PaginationIf')); - $this->addValue('PaginationURL',array($this,'PaginationURL')); - - # Trackbacks - $this->addValue('PingBlogName',array($this,'PingBlogName')); - $this->addValue('PingContent',array($this,'PingContent')); - $this->addValue('PingDate',array($this,'PingDate')); - $this->addValue('PingEntryTitle',array($this,'PingEntryTitle')); - $this->addValue('PingFeedID',array($this,'PingFeedID')); - $this->addValue('PingID',array($this,'PingID')); - $this->addValue('PingIfFirst',array($this,'PingIfFirst')); - $this->addValue('PingIfOdd',array($this,'PingIfOdd')); - $this->addValue('PingIP',array($this,'PingIP')); - $this->addValue('PingNoFollow',array($this,'PingNoFollow')); - $this->addValue('PingOrderNumber',array($this,'PingOrderNumber')); - $this->addValue('PingPostURL',array($this,'PingPostURL')); - $this->addBlock('Pings',array($this,'Pings')); - $this->addBlock('PingsFooter',array($this,'PingsFooter')); - $this->addBlock('PingsHeader',array($this,'PingsHeader')); - $this->addValue('PingTime',array($this,'PingTime')); - $this->addValue('PingTitle',array($this,'PingTitle')); - $this->addValue('PingAuthorURL',array($this,'PingAuthorURL')); - - # System - $this->addValue('SysBehavior',array($this,'SysBehavior')); - $this->addBlock('SysIf',array($this,'SysIf')); - $this->addBlock('SysIfCommentPublished',array($this,'SysIfCommentPublished')); - $this->addBlock('SysIfCommentPending',array($this,'SysIfCommentPending')); - $this->addBlock('SysIfFormError',array($this,'SysIfFormError')); - $this->addValue('SysFeedSubtitle',array($this,'SysFeedSubtitle')); - $this->addValue('SysFormError',array($this,'SysFormError')); - $this->addValue('SysPoweredBy',array($this,'SysPoweredBy')); - $this->addValue('SysSearchString',array($this,'SysSearchString')); - $this->addValue('SysSelfURI',array($this,'SysSelfURI')); - } - - public function getData($________) - { - # --BEHAVIOR-- tplBeforeData - if ($this->core->hasBehavior('tplBeforeData')) - { - self::$_r = $this->core->callBehavior('tplBeforeData',$this->core); - if (self::$_r) { - return self::$_r; - } - } - - parent::getData($________); - - # --BEHAVIOR-- tplAfterData - if ($this->core->hasBehavior('tplAfterData')) { - $this->core->callBehavior('tplAfterData',$this->core,self::$_r); - } - - return self::$_r; - } - - protected function compileFile($file) - { - $fc = file_get_contents($file); - - $this->compile_stack[] = $file; - - # Remove every PHP tags - if ($this->remove_php) - { - $fc = preg_replace('/<\?(?=php|=|\s).*?\?>/ms','',$fc); - } - - # Transform what could be considered as PHP short tags - $fc = preg_replace('/(<\?(?!php|=|\s))(.*?)(\?>)/ms', - '$2',$fc); - - # Remove template comments - $fc = preg_replace('/(^\s*)?/ms','',$fc); - - # Lexer part : split file into small pieces - # each array entry will be either a tag or plain text - $blocks = preg_split( - '#(]*>)|()|({{tpl:\w+[^}]*}})#msu',$fc,-1, - PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY); - - # Next : build semantic tree from tokens. - $rootNode = new tplNode(); - $node = $rootNode; - $errors = array(); - foreach ($blocks as $id => $block) { - $isblock = preg_match('#|>)||{{tpl:(\w+)(\s(.*?))?}}#ms',$block,$match); - if ($isblock == 1) { - if (substr($match[0],1,1) == '/') { - // Closing tag, check if it matches current opened node - $tag = $match[3]; - if (($node instanceof tplNodeBlock) && $node->getTag() == $tag) { - $node->setClosing(); - $node = $node->getParent(); - } else { - // Closing tag does not match opening tag - // Search if it closes a parent tag - $search = $node; - while($search->getTag() != 'ROOT' && $search->getTag() != $tag) { - $search = $search->getParent(); - } - if ($search->getTag() == $tag) { - $errors[] = sprintf( - __('Did not find closing tag for block . Content has been ignored.'), - html::escapeHTML($node->getTag())); - $search->setClosing(); - $node = $search->getParent(); - } else { - $errors[]=sprintf( - __('Unexpected closing tag found.'), - $tag);; - } - } - } elseif (substr($match[0],0,1) == '{') { - // Value tag - $tag = $match[4]; - $str_attr = ''; - $attr = array(); - if (isset($match[6])) { - $str_attr = $match[6]; - $attr = $this->getAttrs($match[6]); - } - $node->addChild(new tplNodeValue($tag,$attr,$str_attr)); - } else { - // Opening tag, create new node and dive into it - $tag = $match[1]; - $newnode = new tplNodeBlock($tag,isset($match[2])?$this->getAttrs($match[2]):array()); - $node->addChild($newnode); - $node = $newnode; - } - } else { - // Simple text - $node->addChild(new tplNodeText($block)); - } - } - - if (($node instanceof tplNodeBlock) && !$node->isClosed()) { - $errors[] = sprintf( - __('Did not find closing tag for block . Content has been ignored.'), - html::escapeHTML($node->getTag())); - } - - $err = ""; - if (count($errors) > 0) { - $err = "\n\n\n"; - } - - return $rootNode->compile($this).$err; - } - - public function compileBlockNode($tag,$attr,$content) - { - $this->current_tag = $tag; - $attr = new ArrayObject($attr); - # --BEHAVIOR-- templateBeforeBlock - $res = $this->core->callBehavior('templateBeforeBlock',$this->core,$this->current_tag,$attr); - - # --BEHAVIOR-- templateInsideBlock - $this->core->callBehavior('templateInsideBlock',$this->core,$this->current_tag,$attr,array(&$content)); - - if (isset($this->blocks[$this->current_tag])) { - $res .= call_user_func($this->blocks[$this->current_tag],$attr,$content); - } elseif ($this->unknown_block_handler != null) { - $res .= call_user_func($this->unknown_block_handler,$this->current_tag,$attr,$content); - } - - # --BEHAVIOR-- templateAfterBlock - $res .= $this->core->callBehavior('templateAfterBlock',$this->core,$this->current_tag,$attr); - - return $res; - } - - public function compileValueNode($tag,$attr,$str_attr) - { - $this->current_tag = $tag; - - $attr = new ArrayObject($attr); - # --BEHAVIOR-- templateBeforeValue - $res = $this->core->callBehavior('templateBeforeValue',$this->core,$this->current_tag,$attr); - - if (isset($this->values[$this->current_tag])) { - $res .= call_user_func($this->values[$this->current_tag],$attr,ltrim($str_attr)); - } elseif ($this->unknown_value_handler != null) { - $res .= call_user_func($this->unknown_value_handler,$this->current_tag,$attr,$str_attr); - } - - # --BEHAVIOR-- templateAfterValue - $res .= $this->core->callBehavior('templateAfterValue',$this->core,$this->current_tag,$attr); - - return $res; - } - - public function setUnknownValueHandler($callback) - { - if (is_callable($callback)) { - $this->unknown_value_handler = $callback; - } - } - - public function setUnknownBlockHandler($callback) - { - if (is_callable($callback)) { - $this->unknown_block_handler = $callback; - } - } - - public function getFilters($attr) - { - $p[0] = '0'; # encode_xml - $p[1] = '0'; # remove_html - $p[2] = '0'; # cut_string - $p[3] = '0'; # lower_case - $p[4] = '0'; # upper_case - - $p[0] = (integer) (!empty($attr['encode_xml']) || !empty($attr['encode_html'])); - $p[1] = (integer) !empty($attr['remove_html']); - - if (!empty($attr['cut_string']) && (integer) $attr['cut_string'] > 0) { - $p[2] = (integer) $attr['cut_string']; - } - - $p[3] = (integer) !empty($attr['lower_case']); - $p[4] = (integer) !empty($attr['upper_case']); - - return "context::global_filter(%s,".implode(",",$p).",'".addslashes($this->current_tag)."')"; - } - - public static function getOperator($op) - { - switch (strtolower($op)) - { - case 'or': - case '||': - return '||'; - case 'and': - case '&&': - default: - return '&&'; - } - } - - public function getSortByStr($attr,$table = null) - { - $res = array(); - - $default_order = 'desc'; - - $default_alias = array( - 'post' => array( - 'title' => 'post_title', - 'selected' => 'post_selected', - 'author' => 'user_id', - 'date' => 'post_dt', - 'id' => 'post_id', - 'comment' => 'nb_comment', - 'trackback' => 'nb_trackback' - ), - 'comment' => array( - 'author' => 'comment_author', - 'date' => 'comment_dt', - 'id' => 'comment_id' - ) - ); - - $alias = new ArrayObject(); - - # --BEHAVIOR-- templateCustomSortByAlias - $this->core->callBehavior('templateCustomSortByAlias',$alias); - - $alias = $alias->getArrayCopy(); - - if (is_array($alias)) { - foreach ($alias as $k => $v) { - if (!is_array($v)) { - $alias[$k] = array(); - } - if (!is_array($v)) { - $default_alias[$k] = array(); - } - $default_alias[$k] = array_merge($default_alias[$k],$alias[$k]); - } - } - - if (!array_key_exists($table,$default_alias)) { - return implode(', ',$res); - } - - if (isset($attr['order']) && preg_match('/^(desc|asc)$/i',$attr['order'])) { - $default_order = $attr['order']; - } - if (isset($attr['sortby'])) { - $sorts = explode(',',$attr['sortby']); - foreach ($sorts as $k => $sort) { - $order = $default_order; - if (preg_match('/([a-z]*)\s*\?(desc|asc)$/i',$sort,$matches)) { - $sort = $matches[1]; - $order = $matches[2]; - } - if (array_key_exists($sort,$default_alias[$table])) { - array_push($res,$default_alias[$table][$sort].' '.$order); - } - } - } - - if (count($res) === 0) { - array_push($res,$default_alias[$table]['date'].' '.$default_order); - } - - return implode(', ',$res); - } - - public function getAge($attr) - { - if (isset($attr['age']) && preg_match('/^(\-[0-9]+|last).*$/i',$attr['age'])) { - if (($ts = strtotime($attr['age'])) !== false) { - return dt::str('%Y-%m-%d %H:%m:%S',$ts); - } - } - return ''; - } - - /* TEMPLATE FUNCTIONS - ------------------------------------------------------- */ - - public function l10n($attr,$str_attr) - { - # Normalize content - $str_attr = preg_replace('/\s+/x',' ',$str_attr); - - return ""; - } - - public function LoopPosition($attr,$content) - { - $start = isset($attr['start']) ? (integer) $attr['start'] : '0'; - $length = isset($attr['length']) ? (integer) $attr['length'] : 'null'; - $even = isset($attr['even']) ? (integer) (boolean) $attr['even'] : 'null'; - - if ($start > 0) { - $start--; - } - - return - 'loopPosition('.$start.','.$length.','.$even.')) : ?>'. - $content. - ""; - } - - - /* Archives ------------------------------------------- */ - /*dtd - - - */ - public function Archives($attr,$content) - { - $p = "if (!isset(\$params)) \$params = array();\n"; - $p .= "\$params['type'] = 'month';\n"; - if (isset($attr['type'])) { - $p .= "\$params['type'] = '".addslashes($attr['type'])."';\n"; - } - - if (isset($attr['category'])) { - $p .= "\$params['cat_url'] = '".addslashes($attr['category'])."';\n"; - } - - if (isset($attr['post_type'])) { - $p .= "\$params['post_type'] = '".addslashes($attr['post_type'])."';\n"; - } - - if (isset($attr['post_lang'])) { - $p .= "\$params['post_lang'] = '".addslashes($attr['post_lang'])."';\n"; - } - - if (empty($attr['no_context']) && !isset($attr['category'])) - { - $p .= - 'if ($_ctx->exists("categories")) { '. - "\$params['cat_id'] = \$_ctx->categories->cat_id; ". - "}\n"; - } - - $order = 'desc'; - if (isset($attr['order']) && preg_match('/^(desc|asc)$/i',$attr['order'])) { - $p .= "\$params['order'] = '".$attr['order']."';\n "; - } - - $res = "core->callBehavior("templatePrepareParams", - array("tag" => "Archives","method" => "blog::getDates"), - $attr,$content); - $res .= '$_ctx->archives = $core->blog->getDates($params); unset($params);'."\n"; - $res .= "?>\n"; - - $res .= - 'archives->fetch()) : ?>'.$content.'archives = null; ?>'; - - return $res; - } - - /*dtd - - */ - public function ArchivesHeader($attr,$content) - { - return - "archives->isStart()) : ?>". - $content. - ""; - } - - /*dtd - - */ - public function ArchivesFooter($attr,$content) - { - return - "archives->isEnd()) : ?>". - $content. - ""; - } - - /*dtd - - */ - public function ArchivesYearHeader($attr,$content) - { - return - "archives->yearHeader()) : ?>". - $content. - ""; - } - - /*dtd - - */ - public function ArchivesYearFooter($attr,$content) - { - return - "archives->yearFooter()) : ?>". - $content. - ""; - } - - /*dtd - - - */ - public function ArchiveDate($attr) - { - $format = '%B %Y'; - if (!empty($attr['format'])) { - $format = addslashes($attr['format']); - } - - $f = $this->getFilters($attr); - return 'archives->dt)").'; ?>'; - } - - /*dtd - - */ - public function ArchiveEntriesCount($attr) - { - $f = $this->getFilters($attr); - return 'archives->nb_post').'; ?>'; - } - - /*dtd - - - */ - public function ArchiveNext($attr,$content) - { - $p = "if (!isset(\$params)) \$params = array();\n"; - $p .= "\$params['type'] = 'month';\n"; - if (isset($attr['type'])) { - $p .= "\$params['type'] = '".addslashes($attr['type'])."';\n"; - } - - if (isset($attr['post_type'])) { - $p .= "\$params['post_type'] = '".addslashes($attr['post_type'])."';\n"; - } - - if (isset($attr['post_lang'])) { - $p .= "\$params['post_lang'] = '".addslashes($attr['post_lang'])."';\n"; - } - - $p .= "\$params['next'] = \$_ctx->archives->dt;"; - - $res = "core->callBehavior("templatePrepareParams", - array("tag" => "ArchiveNext","method" => "blog::getDates"), - $attr, $content); - $res .= '$_ctx->archives = $core->blog->getDates($params); unset($params);'."\n"; - $res .= "?>\n"; - - $res .= - 'archives->fetch()) : ?>'.$content.'archives = null; ?>'; - - return $res; - } - - /*dtd - - - */ - public function ArchivePrevious($attr,$content) - { - $p = 'if (!isset($params)) $params = array();'; - $p .= "\$params['type'] = 'month';\n"; - if (isset($attr['type'])) { - $p .= "\$params['type'] = '".addslashes($attr['type'])."';\n"; - } - - if (isset($attr['post_type'])) { - $p .= "\$params['post_type'] = '".addslashes($attr['post_type'])."';\n"; - } - - if (isset($attr['post_lang'])) { - $p .= "\$params['post_lang'] = '".addslashes($attr['post_lang'])."';\n"; - } - - $p .= "\$params['previous'] = \$_ctx->archives->dt;"; - - $res = "core->callBehavior("templatePrepareParams", - array("tag" => "ArchivePrevious","method" => "blog::getDates"), - $attr, $content); - $res .= $p; - $res .= '$_ctx->archives = $core->blog->getDates($params); unset($params);'."\n"; - $res .= "?>\n"; - - $res .= - 'archives->fetch()) : ?>'.$content.'archives = null; ?>'; - - return $res; - } - - /*dtd - - */ - public function ArchiveURL($attr) - { - $f = $this->getFilters($attr); - return 'archives->url($core)').'; ?>'; - } - - - /* Blog ----------------------------------------------- */ - /*dtd - - */ - public function BlogArchiveURL($attr) - { - $f = $this->getFilters($attr); - return 'blog->url.$core->url->getURLFor("archive")').'; ?>'; - } - - /*dtd - - */ - public function BlogCopyrightNotice($attr) - { - $f = $this->getFilters($attr); - return 'blog->settings->system->copyright_notice').'; ?>'; - } - - /*dtd - - */ - public function BlogDescription($attr) - { - $f = $this->getFilters($attr); - return 'blog->desc').'; ?>'; - } - - /*dtd - - */ - public function BlogEditor($attr) - { - $f = $this->getFilters($attr); - return 'blog->settings->system->editor').'; ?>'; - } - - /*dtd - - */ - public function BlogFeedID($attr) - { - $f = $this->getFilters($attr); - return 'blog->uid').'; ?>'; - } - - /*dtd - - - */ - public function BlogFeedURL($attr) - { - $type = !empty($attr['type']) ? $attr['type'] : 'atom'; - - if (!preg_match('#^(rss2|atom)$#',$type)) { - $type = 'atom'; - } - - $f = $this->getFilters($attr); - return 'blog->url.$core->url->getURLFor("feed","'.$type.'")').'; ?>'; - } - - /*dtd - - */ - public function BlogName($attr) - { - $f = $this->getFilters($attr); - return 'blog->name').'; ?>'; - } - - /*dtd - - */ - public function BlogLanguage($attr) - { - $f = $this->getFilters($attr); - return 'blog->settings->system->lang').'; ?>'; - } - - /*dtd - - */ - public function BlogThemeURL($attr) - { - $f = $this->getFilters($attr); - return 'blog->settings->system->themes_url."/".$core->blog->settings->system->theme').'; ?>'; - } - - /*dtd - - */ - public function BlogPublicURL($attr) - { - $f = $this->getFilters($attr); - return 'blog->settings->system->public_url').'; ?>'; - } - - /*dtd - - - */ - public function BlogUpdateDate($attr) - { - $format = ''; - if (!empty($attr['format'])) { - $format = addslashes($attr['format']); - } else { - $format = '%Y-%m-%d %H:%M:%S'; - } - - $iso8601 = !empty($attr['iso8601']); - $rfc822 = !empty($attr['rfc822']); - - $f = $this->getFilters($attr); - - if ($rfc822) { - return 'blog->upddt,\$core->blog->settings->system->blog_timezone)").'; ?>'; - } elseif ($iso8601) { - return 'blog->upddt,\$core->blog->settings->system->blog_timezone)").'; ?>'; - } else { - return 'blog->upddt)").'; ?>'; - } - } - - /*dtd - - */ - public function BlogID($attr) - { - $f = $this->getFilters($attr); - return 'blog->id').'; ?>'; - } - - /*dtd - - */ - public function BlogRSDURL($attr) - { - $f = $this->getFilters($attr); - return 'blog->url.$core->url->getURLFor(\'rsd\')').'; ?>'; - } - - /*dtd - - */ - public function BlogURL($attr) - { - $f = $this->getFilters($attr); - return 'blog->url').'; ?>'; - } - - /*dtd - - */ - public function BlogQmarkURL($attr) - { - $f = $this->getFilters($attr); - return 'blog->getQmarkURL()').'; ?>'; - } - - /*dtd - - - */ - public function BlogMetaRobots($attr) - { - $robots = isset($attr['robots']) ? addslashes($attr['robots']) : ''; - return "blog->settings->system->robots_policy,'".$robots."'); ?>"; - } - - /* Categories ----------------------------------------- */ - - /*dtd - - */ - public function Categories($attr,$content) - { - $p = "if (!isset(\$params)) \$params = array();\n"; - - if (isset($attr['url'])) { - $p .= "\$params['cat_url'] = '".addslashes($attr['url'])."';\n"; - } - - if (!empty($attr['post_type'])) { - $p .= "\$params['post_type'] = '".addslashes($attr['post_type'])."';\n"; - } - - if (!empty($attr['level'])) { - $p .= "\$params['level'] = ".(integer) $attr['level'].";\n"; - } - - $res = "core->callBehavior("templatePrepareParams", - array("tag" => "Categories","method" => "blog::getCategories"), - $attr,$content); - $res .= '$_ctx->categories = $core->blog->getCategories($params);'."\n"; - $res .= "?>\n"; - $res .= 'categories->fetch()) : ?>'.$content.'categories = null; unset($params); ?>'; - - return $res; - } - - /*dtd - - */ - public function CategoriesHeader($attr,$content) - { - return - "categories->isStart()) : ?>". - $content. - ""; - } - - /*dtd - - */ - public function CategoriesFooter($attr,$content) - { - return - "categories->isEnd()) : ?>". - $content. - ""; - } - - /*dtd - - - */ - public function CategoryIf($attr,$content) - { - $if = new ArrayObject(); - $operator = isset($attr['operator']) ? $this->getOperator($attr['operator']) : '&&'; - - if (isset($attr['url'])) { - $url = addslashes(trim($attr['url'])); - if (substr($url,0,1) == '!') { - $url = substr($url,1); - $if[] = '($_ctx->categories->cat_url != "'.$url.'")'; - } else { - $if[] = '($_ctx->categories->cat_url == "'.$url.'")'; - } - } - - if (isset($attr['has_entries'])) { - $sign = (boolean) $attr['has_entries'] ? '>' : '=='; - $if[] = '$_ctx->categories->nb_post '.$sign.' 0'; - } - - if (isset($attr['has_description'])) { - $sign = (boolean) $attr['has_description'] ? '!=' : '=='; - $if[] = '$_ctx->categories->cat_desc '.$sign.' ""'; - } - - $this->core->callBehavior('tplIfConditions','CategoryIf',$attr,$content,$if); - - if (count($if) != 0) { - return ''.$content.''; - } else { - return $content; - } - } - - /*dtd - - */ - public function CategoryFirstChildren($attr,$content) - { - return - "categories = $core->blog->getCategoryFirstChildren($_ctx->categories->cat_id);'."\n". - 'while ($_ctx->categories->fetch()) : ?>'.$content.'categories = null; ?>'; - } - - /*dtd - - */ - public function CategoryParents($attr,$content) - { - return - "categories = $core->blog->getCategoryParents($_ctx->categories->cat_id);'."\n". - 'while ($_ctx->categories->fetch()) : ?>'.$content.'categories = null; ?>'; - } - - /*dtd - - - */ - public function CategoryFeedURL($attr) - { - $type = !empty($attr['type']) ? $attr['type'] : 'atom'; - - if (!preg_match('#^(rss2|atom)$#',$type)) { - $type = 'atom'; - } - - $f = $this->getFilters($attr); - return 'blog->url.$core->url->getURLFor("feed","category/".'. - '$_ctx->categories->cat_url."/'.$type.'")').'; ?>'; - } - - /*dtd - - */ - public function CategoryURL($attr) - { - $f = $this->getFilters($attr); - return 'blog->url.$core->url->getURLFor("category",'. - '$_ctx->categories->cat_url)').'; ?>'; - } - - /*dtd - - */ - public function CategoryShortURL($attr) - { - $f = $this->getFilters($attr); - return 'categories->cat_url').'; ?>'; - } - - /*dtd - - */ - public function CategoryDescription($attr) - { - $f = $this->getFilters($attr); - return 'categories->cat_desc').'; ?>'; - } - - /*dtd - - */ - public function CategoryTitle($attr) - { - $f = $this->getFilters($attr); - return 'categories->cat_title').'; ?>'; - } - - /* Entries -------------------------------------------- */ - /*dtd - - - */ - public function Entries($attr,$content) - { - $lastn = -1; - if (isset($attr['lastn'])) { - $lastn = abs((integer) $attr['lastn'])+0; - } - - $p = 'if (!isset($_page_number)) { $_page_number = 1; }'."\n"; - - if ($lastn != 0) { - if ($lastn > 0) { - $p .= "\$params['limit'] = ".$lastn.";\n"; - } else { - $p .= "\$params['limit'] = \$_ctx->nb_entry_per_page;\n"; - } - - if (!isset($attr['ignore_pagination']) || $attr['ignore_pagination'] == "0") { - $p .= "\$params['limit'] = array(((\$_page_number-1)*\$params['limit']),\$params['limit']);\n"; - } else { - $p .= "\$params['limit'] = array(0, \$params['limit']);\n"; - } - } - - if (isset($attr['author'])) { - $p .= "\$params['user_id'] = '".addslashes($attr['author'])."';\n"; - } - - if (isset($attr['category'])) { - $p .= "\$params['cat_url'] = '".addslashes($attr['category'])."';\n"; - $p .= "context::categoryPostParam(\$params);\n"; - } - - if (isset($attr['no_category']) && $attr['no_category']) { - $p .= "@\$params['sql'] .= ' AND P.cat_id IS NULL ';\n"; - $p .= "unset(\$params['cat_url']);\n"; - } - - if (!empty($attr['type'])) { - $p .= "\$params['post_type'] = preg_split('/\s*,\s*/','".addslashes($attr['type'])."',-1,PREG_SPLIT_NO_EMPTY);\n"; - } - - if (!empty($attr['url'])) { - $p .= "\$params['post_url'] = '".addslashes($attr['url'])."';\n"; - } - - if (empty($attr['no_context'])) - { - if (!isset($attr['author'])) - { - $p .= - 'if ($_ctx->exists("users")) { '. - "\$params['user_id'] = \$_ctx->users->user_id; ". - "}\n"; - } - - if (!isset($attr['category']) && (!isset($attr['no_category']) || !$attr['no_category'])) - { - $p .= - 'if ($_ctx->exists("categories")) { '. - "\$params['cat_id'] = \$_ctx->categories->cat_id; ". - "}\n"; - } - - $p .= - 'if ($_ctx->exists("archives")) { '. - "\$params['post_year'] = \$_ctx->archives->year(); ". - "\$params['post_month'] = \$_ctx->archives->month(); "; - if (!isset($attr['lastn'])) { - $p .= "unset(\$params['limit']); "; - } - $p .= - "}\n"; - - $p .= - 'if ($_ctx->exists("langs")) { '. - "\$params['post_lang'] = \$_ctx->langs->post_lang; ". - "}\n"; - - $p .= - 'if (isset($_search)) { '. - "\$params['search'] = \$_search; ". - "}\n"; - } - - $p .= "\$params['order'] = '".$this->getSortByStr($attr,'post')."';\n"; - - if (isset($attr['no_content']) && $attr['no_content']) { - $p .= "\$params['no_content'] = true;\n"; - } - - if (isset($attr['selected'])) { - $p .= "\$params['post_selected'] = ".(integer) (boolean) $attr['selected'].";"; - } - - if (isset($attr['age'])) { - $age = $this->getAge($attr); - $p .= !empty($age) ? "@\$params['sql'] .= ' AND P.post_dt > \'".$age."\'';\n" : ''; - } - - $res = "core->callBehavior("templatePrepareParams", - array("tag" => "Entries","method" => "blog::getPosts"), - $attr,$content); - $res .= '$_ctx->post_params = $params;'."\n"; - $res .= '$_ctx->posts = $core->blog->getPosts($params); unset($params);'."\n"; - $res .= "?>\n"; - $res .= - 'posts->fetch()) : ?>'.$content.'posts = null; $_ctx->post_params = null; ?>'; - - return $res; - } - - /*dtd - - */ - public function DateHeader($attr,$content) - { - return - "posts->firstPostOfDay()) : ?>". - $content. - ""; - } - - /*dtd - - */ - public function DateFooter($attr,$content) - { - return - "posts->lastPostOfDay()) : ?>". - $content. - ""; - } - - /*dtd - - - */ - public function EntryIf($attr,$content) - { - $if = new ArrayObject(); - $extended = null; - $hascategory = null; - - $operator = isset($attr['operator']) ? $this->getOperator($attr['operator']) : '&&'; - - if (isset($attr['type'])) { - $type = trim($attr['type']); - $type = !empty($type)?$type:'post'; - $if[] = '$_ctx->posts->post_type == "'.addslashes($type).'"'; - } - - if (isset($attr['url'])) { - $url = trim($attr['url']); - if (substr($url,0,1) == '!') { - $url = substr($url,1); - $if[] = '$_ctx->posts->post_url != "'.addslashes($url).'"'; - } else { - $if[] = '$_ctx->posts->post_url == "'.addslashes($url).'"'; - } - } - - if (isset($attr['category'])) { - $category = addslashes(trim($attr['category'])); - if (substr($category,0,1) == '!') { - $category = substr($category,1); - $if[] = '($_ctx->posts->cat_url != "'.$category.'")'; - } else { - $if[] = '($_ctx->posts->cat_url == "'.$category.'")'; - } - } - - if (isset($attr['first'])) { - $sign = (boolean) $attr['first'] ? '=' : '!'; - $if[] = '$_ctx->posts->index() '.$sign.'= 0'; - } - - if (isset($attr['odd'])) { - $sign = (boolean) $attr['odd'] ? '=' : '!'; - $if[] = '($_ctx->posts->index()+1)%2 '.$sign.'= 1'; - } - - if (isset($attr['extended'])) { - $sign = (boolean) $attr['extended'] ? '' : '!'; - $if[] = $sign.'$_ctx->posts->isExtended()'; - } - - if (isset($attr['selected'])) { - $sign = (boolean) $attr['selected'] ? '' : '!'; - $if[] = $sign.'(boolean)$_ctx->posts->post_selected'; - } - - if (isset($attr['has_category'])) { - $sign = (boolean) $attr['has_category'] ? '' : '!'; - $if[] = $sign.'$_ctx->posts->cat_id'; - } - - if (isset($attr['comments_active'])) { - $sign = (boolean) $attr['comments_active'] ? '' : '!'; - $if[] = $sign.'$_ctx->posts->commentsActive()'; - } - - if (isset($attr['pings_active'])) { - $sign = (boolean) $attr['pings_active'] ? '' : '!'; - $if[] = $sign.'$_ctx->posts->trackbacksActive()'; - } - - if (isset($attr['has_comment'])) { - $sign = (boolean) $attr['has_comment'] ? '' : '!'; - $if[] = $sign.'$_ctx->posts->hasComments()'; - } - - if (isset($attr['has_ping'])) { - $sign = (boolean) $attr['has_ping'] ? '' : '!'; - $if[] = $sign.'$_ctx->posts->hasTrackbacks()'; - } - - if (isset($attr['show_comments'])) { - if ((boolean) $attr['show_comments']) { - $if[] = '($_ctx->posts->hasComments() || $_ctx->posts->commentsActive())'; - } else { - $if[] = '(!$_ctx->posts->hasComments() && !$_ctx->posts->commentsActive())'; - } - } - - if (isset($attr['show_pings'])) { - if ((boolean) $attr['show_pings']) { - $if[] = '($_ctx->posts->hasTrackbacks() || $_ctx->posts->trackbacksActive())'; - } else { - $if[] = '(!$_ctx->posts->hasTrackbacks() && !$_ctx->posts->trackbacksActive())'; - } - } - - $this->core->callBehavior('tplIfConditions','EntryIf',$attr,$content,$if); - - if (count($if) != 0) { - return ''.$content.''; - } else { - return $content; - } - } - - /*dtd - - - */ - public function EntryIfFirst($attr) - { - $ret = isset($attr['return']) ? $attr['return'] : 'first'; - $ret = html::escapeHTML($ret); - - return - 'posts->index() == 0) { '. - "echo '".addslashes($ret)."'; } ?>"; - } - - /*dtd - - - */ - public function EntryIfOdd($attr) - { - $ret = isset($attr['return']) ? $attr['return'] : 'odd'; - $ret = html::escapeHTML($ret); - - return - 'posts->index()+1)%2 == 1) { '. - "echo '".addslashes($ret)."'; } ?>"; - } - - /*dtd - - - */ - public function EntryIfSelected($attr) - { - $ret = isset($attr['return']) ? $attr['return'] : 'selected'; - $ret = html::escapeHTML($ret); - - return - 'posts->post_selected) { '. - "echo '".addslashes($ret)."'; } ?>"; - } - - /*dtd - - - */ - public function EntryContent($attr) - { - $urls = '0'; - if (!empty($attr['absolute_urls'])) { - $urls = '1'; - } - - $f = $this->getFilters($attr); - - if (!empty($attr['full'])) { - return 'posts->getExcerpt('.$urls.')." ".$_ctx->posts->getContent('.$urls.')').'; ?>'; - } else { - return 'posts->getContent('.$urls.')').'; ?>'; - } - } - - /*dtd - - - */ - public function EntryExcerpt($attr) - { - $urls = '0'; - if (!empty($attr['absolute_urls'])) { - $urls = '1'; - } - - $f = $this->getFilters($attr); - return 'posts->getExcerpt('.$urls.')').'; ?>'; - } - - - /*dtd - - */ - public function EntryAuthorCommonName($attr) - { - $f = $this->getFilters($attr); - return 'posts->getAuthorCN()').'; ?>'; - } - - /*dtd - - */ - public function EntryAuthorDisplayName($attr) - { - $f = $this->getFilters($attr); - return 'posts->user_displayname').'; ?>'; - } - - /*dtd - - */ - public function EntryAuthorID($attr) - { - $f = $this->getFilters($attr); - return 'posts->user_id').'; ?>'; - } - - /*dtd - - - */ - public function EntryAuthorEmail($attr) - { - $p = 'true'; - if (isset($attr['spam_protected']) && !$attr['spam_protected']) { - $p = 'false'; - } - - $f = $this->getFilters($attr); - return 'posts->getAuthorEmail(".$p.")").'; ?>'; - } - - /*dtd - - */ - public function EntryAuthorLink($attr) - { - $f = $this->getFilters($attr); - return 'posts->getAuthorLink()').'; ?>'; - } - - /*dtd - - */ - public function EntryAuthorURL($attr) - { - $f = $this->getFilters($attr); - return 'posts->user_url').'; ?>'; - } - - /*dtd - - */ - public function EntryBasename($attr) - { - $f = $this->getFilters($attr); - return 'posts->post_url').'; ?>'; - } - - /*dtd - - */ - public function EntryCategory($attr) - { - $f = $this->getFilters($attr); - return 'posts->cat_title').'; ?>'; - } - - /*dtd - - */ - public function EntryCategoriesBreadcrumb($attr,$content) - { - return - "categories = $core->blog->getCategoryParents($_ctx->posts->cat_id);'."\n". - 'while ($_ctx->categories->fetch()) : ?>'.$content.'categories = null; ?>'; - } - - /*dtd - - */ - public function EntryCategoryID($attr) - { - $f = $this->getFilters($attr); - return 'posts->cat_id').'; ?>'; - } - - /*dtd - - */ - public function EntryCategoryURL($attr) - { - $f = $this->getFilters($attr); - return 'posts->getCategoryURL()').'; ?>'; - } - - /*dtd - - */ - public function EntryCategoryShortURL($attr) - { - $f = $this->getFilters($attr); - return 'posts->cat_url').'; ?>'; - } - - - /*dtd - - */ - public function EntryFeedID($attr) - { - $f = $this->getFilters($attr); - return 'posts->getFeedID()').'; ?>'; - } - - /*dtd - - - */ - public function EntryFirstImage($attr) - { - $size = !empty($attr['size']) ? $attr['size'] : ''; - $class = !empty($attr['class']) ? $attr['class'] : ''; - $with_category = !empty($attr['with_category']) ? 'true' : 'false'; - - return ""; - } - - /*dtd - - */ - public function EntryID($attr) - { - $f = $this->getFilters($attr); - return 'posts->post_id').'; ?>'; - } - - /*dtd - - */ - public function EntryLang($attr) - { - $f = $this->getFilters($attr); - return - 'posts->post_lang) { '. - 'echo '.sprintf($f,'$_ctx->posts->post_lang').'; '. - '} else {'. - 'echo '.sprintf($f,'$core->blog->settings->system->lang').'; '. - '} ?>'; - } - - /*dtd - - - */ - public function EntryNext($attr,$content) - { - $restrict_to_category = !empty($attr['restrict_to_category']) ? '1' : '0'; - $restrict_to_lang = !empty($attr['restrict_to_lang']) ? '1' : '0'; - - return - 'blog->getNextPost($_ctx->posts,1,'.$restrict_to_category.','.$restrict_to_lang.'); ?>'."\n". - ''. - - 'posts = $next_post; unset($next_post);'."\n". - 'while ($_ctx->posts->fetch()) : ?>'. - $content. - 'posts = null; ?>'. - "\n"; - } - - /*dtd - - - */ - public function EntryPrevious($attr,$content) - { - $restrict_to_category = !empty($attr['restrict_to_category']) ? '1' : '0'; - $restrict_to_lang = !empty($attr['restrict_to_lang']) ? '1' : '0'; - - return - 'blog->getNextPost($_ctx->posts,-1,'.$restrict_to_category.','.$restrict_to_lang.'); ?>'."\n". - ''. - - 'posts = $prev_post; unset($prev_post);'."\n". - 'while ($_ctx->posts->fetch()) : ?>'. - $content. - 'posts = null; ?>'. - "\n"; - } - - /*dtd - - */ - public function EntryTitle($attr) - { - $f = $this->getFilters($attr); - return 'posts->post_title').'; ?>'; - } - - /*dtd - - */ - public function EntryURL($attr) - { - $f = $this->getFilters($attr); - return 'posts->getURL()').'; ?>'; - } - - /*dtd - - - */ - public function EntryDate($attr) - { - $format = ''; - if (!empty($attr['format'])) { - $format = addslashes($attr['format']); - } - - $iso8601 = !empty($attr['iso8601']); - $rfc822 = !empty($attr['rfc822']); - $type = (!empty($attr['creadt']) ? 'creadt' : ''); - $type = (!empty($attr['upddt']) ? 'upddt' : $type); - - $f = $this->getFilters($attr); - - if ($rfc822) { - return 'posts->getRFC822Date('".$type."')").'; ?>'; - } elseif ($iso8601) { - return 'posts->getISO8601Date('".$type."')").'; ?>'; - } else { - return 'posts->getDate('".$format."','".$type."')").'; ?>'; - } - } - - /*dtd - - - */ - public function EntryTime($attr) - { - $format = ''; - if (!empty($attr['format'])) { - $format = addslashes($attr['format']); - } - - $type = (!empty($attr['creadt']) ? 'creadt' : ''); - $type = (!empty($attr['upddt']) ? 'upddt' : $type); - - $f = $this->getFilters($attr); - return 'posts->getTime('".$format."','".$type."')").'; ?>'; - } - - /*dtd - - */ - public function EntriesHeader($attr,$content) - { - return - "posts->isStart()) : ?>". - $content. - ""; - } - - /*dtd - - */ - public function EntriesFooter($attr,$content) - { - return - "posts->isEnd()) : ?>". - $content. - ""; - } - - /*dtd - - - */ - public function EntryCommentCount($attr) - { - $none = 'no comment'; - $one = 'one comment'; - $more = '%d comments'; - - if (isset($attr['none'])) { - $none = addslashes($attr['none']); - } - if (isset($attr['one'])) { - $one = addslashes($attr['one']); - } - if (isset($attr['more'])) { - $more = addslashes($attr['more']); - } - - if (empty($attr['count_all'])) { - $operation = '$_ctx->posts->nb_comment'; - } else { - $operation = '($_ctx->posts->nb_comment + $_ctx->posts->nb_trackback)'; - } - - return - ""; - } - - /*dtd - - - */ - public function EntryPingCount($attr) - { - $none = 'no trackback'; - $one = 'one trackback'; - $more = '%d trackbacks'; - - if (isset($attr['none'])) { - $none = addslashes($attr['none']); - } - if (isset($attr['one'])) { - $one = addslashes($attr['one']); - } - if (isset($attr['more'])) { - $more = addslashes($attr['more']); - } - - return - "posts->nb_trackback == 0) {\n". - " printf(__('".$none."'),(integer) \$_ctx->posts->nb_trackback);\n". - "} elseif (\$_ctx->posts->nb_trackback == 1) {\n". - " printf(__('".$one."'),(integer) \$_ctx->posts->nb_trackback);\n". - "} else {\n". - " printf(__('".$more."'),(integer) \$_ctx->posts->nb_trackback);\n". - "} ?>"; - } - - /*dtd - - */ - public function EntryPingData($attr) - { - return "posts->trackbacksActive()) { echo \$_ctx->posts->getTrackbackData(); } ?>\n"; - } - - /*dtd - - */ - public function EntryPingLink($attr) - { - return "posts->trackbacksActive()) { echo \$_ctx->posts->getTrackbackLink(); } ?>\n"; - } - - /* Languages -------------------------------------- */ - /*dtd - - - */ - public function Languages($attr,$content) - { - $p = "if (!isset(\$params)) \$params = array();\n"; - - if (isset($attr['lang'])) { - $p = "\$params['lang'] = '".addslashes($attr['lang'])."';\n"; - } - - $order = 'desc'; - if (isset($attr['order']) && preg_match('/^(desc|asc)$/i',$attr['order'])) { - $p .= "\$params['order'] = '".$attr['order']."';\n "; - } - - $res = "core->callBehavior("templatePrepareParams", - array("tag" => "Languages","method" => "blog::getLangs"), - $attr,$content); - $res .= '$_ctx->langs = $core->blog->getLangs($params); unset($params);'."\n"; - $res .= "?>\n"; - - $res .= - 'langs->count() > 1) : '. - 'while ($_ctx->langs->fetch()) : ?>'.$content. - 'langs = null; endif; ?>'; - - return $res; - } - - /*dtd - - */ - public function LanguagesHeader($attr,$content) - { - return - "langs->isStart()) : ?>". - $content. - ""; - } - - /*dtd - - */ - public function LanguagesFooter($attr,$content) - { - return - "langs->isEnd()) : ?>". - $content. - ""; - } - - /*dtd - - */ - public function LanguageCode($attr) - { - $f = $this->getFilters($attr); - return 'langs->post_lang').'; ?>'; - } - - /*dtd - - */ - public function LanguageIfCurrent($attr,$content) - { - return - "cur_lang == \$_ctx->langs->post_lang) : ?>". - $content. - ""; - } - - /*dtd - - */ - public function LanguageURL($attr) - { - $f = $this->getFilters($attr); - return 'blog->url.$core->url->getURLFor("lang",'. - '$_ctx->langs->post_lang)').'; ?>'; - } - - /* Pagination ------------------------------------- */ - /*dtd - - - */ - public function Pagination($attr,$content) - { - $p = "post_params;'."\n"; - $p .= $this->core->callBehavior("templatePrepareParams", - array("tag" => "Pagination","method" => "blog::getPosts"), - $attr,$content); - $p .= '$_ctx->pagination = $core->blog->getPosts($params,true); unset($params);'."\n"; - $p .= "?>\n"; - - if (isset($attr['no_context']) && $attr['no_context']) { - return $p.$content; - } - - return - $p. - 'pagination->f(0) > $_ctx->posts->count()) : ?>'. - $content. - ''; - } - - /*dtd - - */ - public function PaginationCounter($attr) - { - $f = $this->getFilters($attr); - return ''; - } - - /*dtd - - */ - public function PaginationCurrent($attr) - { - $offset = 0; - if (isset($attr['offset'])) { - $offset = (integer) $attr['offset']; - } - - $f = $this->getFilters($attr); - return ''; - } - - /*dtd - - - */ - public function PaginationIf($attr,$content) - { - $if = array(); - - if (isset($attr['start'])) { - $sign = (boolean) $attr['start'] ? '' : '!'; - $if[] = $sign.'context::PaginationStart()'; - } - - if (isset($attr['end'])) { - $sign = (boolean) $attr['end'] ? '' : '!'; - $if[] = $sign.'context::PaginationEnd()'; - } - - $this->core->callBehavior('tplIfConditions','PaginationIf',$attr,$content,$if); - - if (count($if) != 0) { - return ''.$content.''; - } else { - return $content; - } - } - - /*dtd - - - */ - public function PaginationURL($attr) - { - $offset = 0; - if (isset($attr['offset'])) { - $offset = (integer) $attr['offset']; - } - - $f = $this->getFilters($attr); - return ''; - } - - /* Comments --------------------------------------- */ - /*dtd - - - */ - public function Comments($attr,$content) - { - $p = ""; - if (empty($attr['with_pings'])) { - $p .= "\$params['comment_trackback'] = false;\n"; - } - - $lastn = 0; - if (isset($attr['lastn'])) { - $lastn = abs((integer) $attr['lastn'])+0; - } - - if ($lastn > 0) { - $p .= "\$params['limit'] = ".$lastn.";\n"; - } else { - $p .= "if (\$_ctx->nb_comment_per_page !== null) { \$params['limit'] = \$_ctx->nb_comment_per_page; }\n"; - } - - if (empty($attr['no_context'])) - { - $p .= - "if (\$_ctx->posts !== null) { ". - "\$params['post_id'] = \$_ctx->posts->post_id; ". - "\$core->blog->withoutPassword(false);\n". - "}\n"; - $p .= - 'if ($_ctx->exists("categories")) { '. - "\$params['cat_id'] = \$_ctx->categories->cat_id; ". - "}\n"; - - $p .= - 'if ($_ctx->exists("langs")) { '. - "\$params['sql'] = \"AND P.post_lang = '\".\$core->blog->con->escape(\$_ctx->langs->post_lang).\"' \"; ". - "}\n"; - } - - if (!isset($attr['order'])) { - $attr['order'] = 'asc'; - } - - $p .= "\$params['order'] = '".$this->getSortByStr($attr,'comment')."';\n"; - - if (isset($attr['no_content']) && $attr['no_content']) { - $p .= "\$params['no_content'] = true;\n"; - } - - if (isset($attr['age'])) { - $age = $this->getAge($attr); - $p .= !empty($age) ? "@\$params['sql'] .= ' AND P.post_dt > \'".$age."\'';\n" : ''; - } - - $res = "core->callBehavior("templatePrepareParams", - array("tag" => "Comments","method" => "blog::getComments"), - $attr,$content); - $res .= $p; - $res .= '$_ctx->comments = $core->blog->getComments($params); unset($params);'."\n"; - $res .= "if (\$_ctx->posts !== null) { \$core->blog->withoutPassword(true);}\n"; - - if (!empty($attr['with_pings'])) { - $res .= '$_ctx->pings = $_ctx->comments;'."\n"; - } - - $res .= "?>\n"; - - $res .= - 'comments->fetch()) : ?>'.$content.'comments = null; ?>'; - - return $res; - } - - /*dtd - - */ - public function CommentAuthor($attr) - { - $f = $this->getFilters($attr); - return 'comments->comment_author").'; ?>'; - } - - /*dtd - - */ - public function CommentAuthorDomain($attr) - { - return 'comments->comment_site); ?>'; - } - - /*dtd - - */ - public function CommentAuthorLink($attr) - { - $f = $this->getFilters($attr); - return 'comments->getAuthorLink()').'; ?>'; - } - - /*dtd - - */ - public function CommentAuthorMailMD5($attr) - { - return 'comments->comment_email) ; ?>'; - } - - /*dtd - - */ - public function CommentAuthorURL($attr) - { - $f = $this->getFilters($attr); - return 'comments->getAuthorURL()').'; ?>'; - } - - /*dtd - - - */ - public function CommentContent($attr) - { - $urls = '0'; - if (!empty($attr['absolute_urls'])) { - $urls = '1'; - } - - $f = $this->getFilters($attr); - return 'comments->getContent('.$urls.')').'; ?>'; - } - - /*dtd - - - */ - public function CommentDate($attr) - { - $format = ''; - if (!empty($attr['format'])) { - $format = addslashes($attr['format']); - } - - $iso8601 = !empty($attr['iso8601']); - $rfc822 = !empty($attr['rfc822']); - $type = (!empty($attr['upddt']) ? 'upddt' : ''); - - $f = $this->getFilters($attr); - - if ($rfc822) { - return 'comments->getRFC822Date('".$type."')").'; ?>'; - } elseif ($iso8601) { - return 'comments->getISO8601Date('".$type."')").'; ?>'; - } else { - return 'comments->getDate('".$format."','".$type."')").'; ?>'; - } - } - - /*dtd - - - */ - public function CommentTime($attr) - { - $format = ''; - if (!empty($attr['format'])) { - $format = addslashes($attr['format']); - } - $type = (!empty($attr['upddt']) ? 'upddt' : ''); - - $f = $this->getFilters($attr); - return 'comments->getTime('".$format."','".$type."')").'; ?>'; - } - - /*dtd - - - */ - public function CommentEmail($attr) - { - $p = 'true'; - if (isset($attr['spam_protected']) && !$attr['spam_protected']) { - $p = 'false'; - } - - $f = $this->getFilters($attr); - return 'comments->getEmail(".$p.")").'; ?>'; - } - - /*dtd - - */ - public function CommentEntryTitle($attr) - { - $f = $this->getFilters($attr); - return 'comments->post_title').'; ?>'; - } - - /*dtd - - */ - public function CommentFeedID($attr) - { - $f = $this->getFilters($attr); - return 'comments->getFeedID()').'; ?>'; - } - - /*dtd - - */ - public function CommentID($attr) - { - return 'comments->comment_id; ?>'; - } - - /*dtd - - - */ - public function CommentIf($attr,$content) - { - $if = array(); - $is_ping = null; - - if (isset($attr['is_ping'])) { - $sign = (boolean) $attr['is_ping'] ? '' : '!'; - $if[] = $sign.'$_ctx->comments->comment_trackback'; - } - - $this->core->callBehavior('tplIfConditions','CommentIf',$attr,$content,$if); - - if (count($if) != 0) { - return ''.$content.''; - } else { - return $content; - } - } - - /*dtd - - - */ - public function CommentIfFirst($attr) - { - $ret = isset($attr['return']) ? $attr['return'] : 'first'; - $ret = html::escapeHTML($ret); - - return - 'comments->index() == 0) { '. - "echo '".addslashes($ret)."'; } ?>"; - } - - /*dtd - - - */ - public function CommentIfMe($attr) - { - $ret = isset($attr['return']) ? $attr['return'] : 'me'; - $ret = html::escapeHTML($ret); - - return - 'comments->isMe()) { '. - "echo '".addslashes($ret)."'; } ?>"; - } - - /*dtd - - - */ - public function CommentIfOdd($attr) - { - $ret = isset($attr['return']) ? $attr['return'] : 'odd'; - $ret = html::escapeHTML($ret); - - return - 'comments->index()+1)%2) { '. - "echo '".addslashes($ret)."'; } ?>"; - } - - /*dtd - - */ - public function CommentIP($attr) - { - return 'comments->comment_ip; ?>'; - } - - /*dtd - - */ - public function CommentOrderNumber($attr) - { - return 'comments->index()+1; ?>'; - } - - /*dtd - - */ - public function CommentsFooter($attr,$content) - { - return - "comments->isEnd()) : ?>". - $content. - ""; - } - - /*dtd - - */ - public function CommentsHeader($attr,$content) - { - return - "comments->isStart()) : ?>". - $content. - ""; - } - - /*dtd - - */ - public function CommentPostURL($attr) - { - $f = $this->getFilters($attr); - return 'comments->getPostURL()').'; ?>'; - } - - /*dtd - - */ - public function IfCommentAuthorEmail($attr,$content) - { - return - "comments->comment_email) : ?>". - $content. - ""; - } - - /*dtd - - */ - public function CommentHelp($attr,$content) - { - return - "blog->settings->system->wiki_comments) {\n". - " echo __('Comments can be formatted using a simple wiki syntax.');\n". - "} else {\n". - " echo __('HTML code is displayed as text and web addresses are automatically converted.');\n". - "} ?>"; - } - - /* Comment preview -------------------------------- */ - /*dtd - - */ - public function IfCommentPreview($attr,$content) - { - return - 'comment_preview !== null && $_ctx->comment_preview["preview"]) : ?>'. - $content. - ''; - } - - /*dtd - - */ - public function CommentPreviewName($attr) - { - $f = $this->getFilters($attr); - return 'comment_preview["name"]').'; ?>'; - } - - /*dtd - - */ - public function CommentPreviewEmail($attr) - { - $f = $this->getFilters($attr); - return 'comment_preview["mail"]').'; ?>'; - } - - /*dtd - - */ - public function CommentPreviewSite($attr) - { - $f = $this->getFilters($attr); - return 'comment_preview["site"]').'; ?>'; - } - - /*dtd - - - */ - public function CommentPreviewContent($attr) - { - $f = $this->getFilters($attr); - - if (!empty($attr['raw'])) { - $co = '$_ctx->comment_preview["rawcontent"]'; - } else { - $co = '$_ctx->comment_preview["content"]'; - } - - return ''; - } - - /*dtd - - */ - public function CommentPreviewCheckRemember($attr) - { - return - "comment_preview['remember']) { echo ' checked=\"checked\"'; } ?>"; - } - - /* Trackbacks ------------------------------------- */ - /*dtd - - */ - public function PingBlogName($attr) - { - $f = $this->getFilters($attr); - return 'pings->comment_author').'; ?>'; - } - - /*dtd - - */ - public function PingContent($attr) - { - $f = $this->getFilters($attr); - return 'pings->getTrackbackContent()').'; ?>'; - } - - /*dtd - - - */ - public function PingDate($attr,$type='') - { - $format = ''; - if (!empty($attr['format'])) { - $format = addslashes($attr['format']); - } - - $iso8601 = !empty($attr['iso8601']); - $rfc822 = !empty($attr['rfc822']); - $type = (!empty($attr['upddt']) ? 'upddt' : ''); - - $f = $this->getFilters($attr); - - if ($rfc822) { - return 'pings->getRFC822Date('".$type."')").'; ?>'; - } elseif ($iso8601) { - return 'pings->getISO8601Date('".$type."')").'; ?>'; - } else { - return 'pings->getDate('".$format."','".$type."')").'; ?>'; - } - } - - /*dtd - - - */ - public function PingTime($attr) - { - $format = ''; - if (!empty($attr['format'])) { - $format = addslashes($attr['format']); - } - $type = (!empty($attr['upddt']) ? 'upddt' : ''); - - $f = $this->getFilters($attr); - return 'pings->getTime('".$format."','".$type."')").'; ?>'; - } - - /*dtd - - */ - public function PingEntryTitle($attr) - { - $f = $this->getFilters($attr); - return 'pings->post_title').'; ?>'; - } - - /*dtd - - */ - public function PingFeedID($attr) - { - $f = $this->getFilters($attr); - return 'pings->getFeedID()').'; ?>'; - } - - /*dtd - - */ - public function PingID($attr) - { - return 'pings->comment_id; ?>'; - } - - /*dtd - - - */ - public function PingIfFirst($attr) - { - $ret = isset($attr['return']) ? $attr['return'] : 'first'; - $ret = html::escapeHTML($ret); - - return - 'pings->index() == 0) { '. - "echo '".addslashes($ret)."'; } ?>"; - } - - /*dtd - - - */ - public function PingIfOdd($attr) - { - $ret = isset($attr['return']) ? $attr['return'] : 'odd'; - $ret = html::escapeHTML($ret); - - return - 'pings->index()+1)%2) { '. - "echo '".addslashes($ret)."'; } ?>"; - } - - /*dtd - - */ - public function PingIP($attr) - { - return 'pings->comment_ip; ?>'; - } - - /*dtd - - */ - public function PingNoFollow($attr) - { - return - 'blog->settings->system->comments_nofollow) { '. - 'echo \' rel="nofollow"\';'. - '} ?>'; - } - - /*dtd - - */ - public function PingOrderNumber($attr) - { - return 'pings->index()+1; ?>'; - } - - /*dtd - - */ - public function PingPostURL($attr) - { - $f = $this->getFilters($attr); - return 'pings->getPostURL()').'; ?>'; - } - - /*dtd - - - */ - public function Pings($attr,$content) - { - $p = - "if (\$_ctx->posts !== null) { ". - "\$params['post_id'] = \$_ctx->posts->post_id; ". - "\$core->blog->withoutPassword(false);\n". - "}\n"; - - $p .= "\$params['comment_trackback'] = true;\n"; - - $lastn = 0; - if (isset($attr['lastn'])) { - $lastn = abs((integer) $attr['lastn'])+0; - } - - if ($lastn > 0) { - $p .= "\$params['limit'] = ".$lastn.";\n"; - } else { - $p .= "if (\$_ctx->nb_comment_per_page !== null) { \$params['limit'] = \$_ctx->nb_comment_per_page; }\n"; - } - - if (empty($attr['no_context'])) - { - $p .= - 'if ($_ctx->exists("categories")) { '. - "\$params['cat_id'] = \$_ctx->categories->cat_id; ". - "}\n"; - - $p .= - 'if ($_ctx->exists("langs")) { '. - "\$params['sql'] = \"AND P.post_lang = '\".\$core->blog->con->escape(\$_ctx->langs->post_lang).\"' \"; ". - "}\n"; - } - - $order = 'asc'; - if (isset($attr['order']) && preg_match('/^(desc|asc)$/i',$attr['order'])) { - $order = $attr['order']; - } - - $p .= "\$params['order'] = 'comment_dt ".$order."';\n"; - - if (isset($attr['no_content']) && $attr['no_content']) { - $p .= "\$params['no_content'] = true;\n"; - } - - $res = "core->callBehavior("templatePrepareParams", - array("tag" => "Pings","method" => "blog::getComments"), - $attr,$content); - $res .= '$_ctx->pings = $core->blog->getComments($params); unset($params);'."\n"; - $res .= "if (\$_ctx->posts !== null) { \$core->blog->withoutPassword(true);}\n"; - $res .= "?>\n"; - - $res .= - 'pings->fetch()) : ?>'.$content.'pings = null; ?>'; - - return $res; - } - - /*dtd - - */ - public function PingsFooter($attr,$content) - { - return - "pings->isEnd()) : ?>". - $content. - ""; - } - - /*dtd - - */ - public function PingsHeader($attr,$content) - { - return - "pings->isStart()) : ?>". - $content. - ""; - } - - /*dtd - - */ - public function PingTitle($attr) - { - $f = $this->getFilters($attr); - return 'pings->getTrackbackTitle()').'; ?>'; - } - - /*dtd - - */ - public function PingAuthorURL($attr) - { - $f = $this->getFilters($attr); - return 'pings->getAuthorURL()').'; ?>'; - } - - # System - /*dtd - - - */ - public function SysBehavior($attr,$raw) - { - if (!isset($attr['behavior'])) { - return; - } - - $b = addslashes($attr['behavior']); - return - 'hasBehavior(\''.$b.'\')) { '. - '$core->callBehavior(\''.$b.'\',$core,$_ctx);'. - '} ?>'; - } - - /*dtd - - - */ - public function SysIf($attr,$content) - { - $if = new ArrayObject(); - $is_ping = null; - - $operator = isset($attr['operator']) ? $this->getOperator($attr['operator']) : '&&'; - - if (isset($attr['categories'])) { - $sign = (boolean) $attr['categories'] ? '!' : '='; - $if[] = '$_ctx->categories '.$sign.'== null'; - } - - if (isset($attr['posts'])) { - $sign = (boolean) $attr['posts'] ? '!' : '='; - $if[] = '$_ctx->posts '.$sign.'== null'; - } - - if (isset($attr['blog_lang'])) { - $if[] = "\$core->blog->settings->system->lang == '".addslashes($attr['blog_lang'])."'"; - } - - if (isset($attr['current_tpl'])) { - $sign = '='; - if (substr($attr['current_tpl'],0,1) == '!') { - $sign = '!'; - $attr['current_tpl'] = substr($attr['current_tpl'],1); - } - $if[] = "\$_ctx->current_tpl ".$sign."= '".addslashes($attr['current_tpl'])."'"; - } - - if (isset($attr['current_mode'])) { - $sign = '='; - if (substr($attr['current_mode'],0,1) == '!') { - $sign = '!'; - $attr['current_mode'] = substr($attr['current_mode'],1); - } - $if[] = "\$core->url->type ".$sign."= '".addslashes($attr['current_mode'])."'"; - } - - if (isset($attr['has_tpl'])) { - $sign = ''; - if (substr($attr['has_tpl'],0,1) == '!') { - $sign = '!'; - $attr['has_tpl'] = substr($attr['has_tpl'],1); - } - $if[] = $sign."\$core->tpl->getFilePath('".addslashes($attr['has_tpl'])."') !== false"; - } - - if (isset($attr['blog_id'])) { - $sign = ''; - if (substr($attr['blog_id'],0,1) == '!') { - $sign = '!'; - $attr['blog_id'] = substr($attr['blog_id'],1); - } - $if[] = $sign."(\$core->blog->id == '".addslashes($attr['blog_id'])."')"; - } - - if (isset($attr['comments_active'])) { - $sign = (boolean) $attr['comments_active'] ? '' : '!'; - $if[] = $sign.'$core->blog->settings->system->allow_comments'; - } - - if (isset($attr['pings_active'])) { - $sign = (boolean) $attr['pings_active'] ? '' : '!'; - $if[] = $sign.'$core->blog->settings->system->allow_trackbacks'; - } - - if (isset($attr['wiki_comments'])) { - $sign = (boolean) $attr['wiki_comments'] ? '' : '!'; - $if[] = $sign.'$core->blog->settings->system->wiki_comments'; - } - - if (isset($attr['search_count']) && - preg_match('/^((=|!|>|<)=|(>|<))\s*[0-9]+$/',trim($attr['search_count']))) { - $if[] = '(isset($_search_count) && $_search_count '.html::decodeEntities($attr['search_count']).')'; - } - - $this->core->callBehavior('tplIfConditions','SysIf',$attr,$content,$if); - - if (count($if) != 0) { - return ''.$content.''; - } else { - return $content; - } - } - - /*dtd - - */ - public function SysIfCommentPublished($attr,$content) - { - return - ''. - $content. - ''; - } - - /*dtd - - */ - public function SysIfCommentPending($attr,$content) - { - return - ''. - $content. - ''; - } - - /*dtd - - */ - public function SysFeedSubtitle($attr) - { - $f = $this->getFilters($attr); - return 'feed_subtitle !== null) { echo '.sprintf($f,'$_ctx->feed_subtitle').';} ?>'; - } - - /*dtd - - */ - public function SysIfFormError($attr,$content) - { - return - 'form_error !== null) : ?>'. - $content. - ''; - } - - /*dtd - - */ - public function SysFormError($attr) - { - return - 'form_error !== null) { echo $_ctx->form_error; } ?>'; - } - - public function SysPoweredBy($attr) - { - return - 'Dotclear"); ?>'; - } - - public function SysSearchString($attr) - { - $s = isset($attr['string']) ? $attr['string'] : '%1$s'; - - $f = $this->getFilters($attr); - return ''; - } - - public function SysSelfURI($attr) - { - $f = $this->getFilters($attr); - return ''; - } -} - -# Template nodes, for parsing purposes - -# Generic list node, this one may only be instanciated -# once for root element -class tplNode -{ - # Basic tree structure : links to parent, children forrest - protected $parentNode; - protected $children; - - public function __construct() { - $this->children = array(); - $this->parentNode = null; - } - - // Returns compiled block - public function compile($tpl) { - $res=''; - foreach ($this->children as $child) { - $res .= $child->compile($tpl); - } - return $res; - } - - # Add a children to current node - public function addChild ($child) { - $this->children[] = $child; - $child->setParent($this); - } - - # Defines parent for current node - protected function setParent($parent) { - $this->parentNode = $parent; - } - - # Retrieves current node parent. - # If parent is root node, null is returned - public function getParent() { - return $this->parentNode; - } - - # Current node tag - public function getTag() { - return "ROOT"; - } -} - -// Text node, for any non-tpl content -class tplNodeText extends tplNode -{ - // Simple text node, only holds its content - protected $content; - - public function __construct($text) { - parent::__construct(); - $this->content=$text; - } - - public function compile($tpl) { - return $this->content; - } - - public function getTag() { - return "TEXT"; - } -} - -// Block node, for all ... -class tplNodeBlock extends tplNode -{ - protected $attr; - protected $tag; - protected $closed; - - public function __construct($tag,$attr) { - parent::__construct(); - $this->content=''; - $this->tag = $tag; - $this->attr = $attr; - $this->closed=false; - } - public function setClosing() { - $this->closed = true; - } - public function isClosed() { - return $this->closed; - } - public function compile($tpl) { - if ($this->closed) { - $content = parent::compile($tpl); - return $tpl->compileBlockNode($this->tag,$this->attr,$content); - } else { - // if tag has not been closed, silently ignore its content... - return ''; - } - } - public function getTag() { - return $this->tag; - } -} - -// Value node, for all {{tpl:Tag}} -class tplNodeValue extends tplNode -{ - protected $attr; - protected $str_attr; - protected $tag; - - public function __construct($tag,$attr,$str_attr) { - parent::__construct(); - $this->content=''; - $this->tag = $tag; - $this->attr = $attr; - $this->str_attr = $str_attr; - } - - public function compile($tpl) { - return $tpl->compileValueNode($this->tag,$this->attr,$this->str_attr); - } - - public function getTag() { - return $this->tag; - } -} - -?> diff --git a/v2/dotclear/inc/public/default-templates/404.html b/v2/dotclear/inc/public/default-templates/404.html deleted file mode 100644 index f2beeeb..0000000 --- a/v2/dotclear/inc/public/default-templates/404.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - {{tpl:lang Document not found}} - {{tpl:BlogName encode_html="1"}} - - - - - - - - - - - - - - - - {{tpl:include src="_head.html"}} - - - -
      -{{tpl:include src="_top.html"}} - -
      - -
      -
      - -
      -

      {{tpl:lang Document not found}}

      -
      - -
      -

      {{tpl:lang The document you are looking for does not exist.}}

      -
      - -
      -
      - - - -
      - -{{tpl:include src="_footer.html"}} -
      - - \ No newline at end of file diff --git a/v2/dotclear/inc/public/default-templates/_flv_player.html b/v2/dotclear/inc/public/default-templates/_flv_player.html deleted file mode 100644 index 7f5b9b6..0000000 --- a/v2/dotclear/inc/public/default-templates/_flv_player.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -{{tpl:lang Embedded Audio Player}} - \ No newline at end of file diff --git a/v2/dotclear/inc/public/default-templates/_footer.html b/v2/dotclear/inc/public/default-templates/_footer.html deleted file mode 100644 index fac8db1..0000000 --- a/v2/dotclear/inc/public/default-templates/_footer.html +++ /dev/null @@ -1,5 +0,0 @@ - - -{{tpl:SysBehavior behavior="publicFooterContent"}} \ No newline at end of file diff --git a/v2/dotclear/inc/public/default-templates/_head.html b/v2/dotclear/inc/public/default-templates/_head.html deleted file mode 100644 index a79816f..0000000 --- a/v2/dotclear/inc/public/default-templates/_head.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - -{{tpl:include src="user_head.html"}} -{{tpl:SysBehavior behavior="publicHeadContent"}} \ No newline at end of file diff --git a/v2/dotclear/inc/public/default-templates/_mp3_player.html b/v2/dotclear/inc/public/default-templates/_mp3_player.html deleted file mode 100644 index b1a1991..0000000 --- a/v2/dotclear/inc/public/default-templates/_mp3_player.html +++ /dev/null @@ -1,6 +0,0 @@ - - - - -{{tpl:lang Embedded Audio Player}} - \ No newline at end of file diff --git a/v2/dotclear/inc/public/default-templates/_top.html b/v2/dotclear/inc/public/default-templates/_top.html deleted file mode 100644 index 829edae..0000000 --- a/v2/dotclear/inc/public/default-templates/_top.html +++ /dev/null @@ -1,10 +0,0 @@ -
      -

      {{tpl:BlogName encode_html="1"}}

      - - - {{tpl:SysBehavior behavior="publicTopAfterContent"}} -
      - -

      {{tpl:lang To content}} | -{{tpl:lang To menu}} | -{{tpl:lang To search}}

      \ No newline at end of file diff --git a/v2/dotclear/inc/public/default-templates/archive.html b/v2/dotclear/inc/public/default-templates/archive.html deleted file mode 100644 index c551449..0000000 --- a/v2/dotclear/inc/public/default-templates/archive.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - {{tpl:lang Archives}} - {{tpl:BlogName encode_html="1"}} - - - - - - - - - - - - - - - - - - - - - - {{tpl:include src="_head.html"}} - - - -
      -{{tpl:include src="_top.html"}} - -
      - -
      -
      - -
      -

      {{tpl:lang Archives}}

      -
      - -
      - - -

      {{tpl:ArchiveDate format="%Y"}}

      - - -
      -
      - -
      -
      - - - -
      - -{{tpl:include src="_footer.html"}} -
      - - \ No newline at end of file diff --git a/v2/dotclear/inc/public/default-templates/archive_month.html b/v2/dotclear/inc/public/default-templates/archive_month.html deleted file mode 100644 index 0f4b745..0000000 --- a/v2/dotclear/inc/public/default-templates/archive_month.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - {{tpl:lang Archives}} - {{tpl:ArchiveDate}} - {{tpl:BlogName encode_html="1"}} - - - - - - - - - - - - - - - - - - - - - - - - - - {{tpl:include src="_head.html"}} - - - -
      -{{tpl:include src="_top.html"}} - -
      - -
      -
      - - - -
      -

      {{tpl:ArchiveDate}}

      -
      - -
      - - -

      {{tpl:EntryDate}}

      - -

      {{tpl:EntryTitle encode_html="1"}}

      - - -
      -
      -
      -
      - - - -
      - -{{tpl:include src="_footer.html"}} -
      - - \ No newline at end of file diff --git a/v2/dotclear/inc/public/default-templates/atom-comments.xml b/v2/dotclear/inc/public/default-templates/atom-comments.xml deleted file mode 100644 index 74b4970..0000000 --- a/v2/dotclear/inc/public/default-templates/atom-comments.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - {{tpl:BlogName encode_xml="1"}}{{tpl:SysFeedSubtitle encode_xml="1"}} - - {{tpl:lang Comments}} - {{tpl:BlogDescription encode_xml="1"}} - - - {{tpl:BlogUpdateDate iso8601="1"}} - - {{tpl:BlogEditor encode_xml="1"}} - - {{tpl:BlogFeedID}} - Dotclear - - - - - - [ping] {{tpl:PingEntryTitle encode_xml="1"}} - {{tpl:PingBlogName encode_xml="1"}} - - {{tpl:PingFeedID}} - {{tpl:PingDate iso8601="1"}} - {{tpl:PingDate iso8601="1" upddt="1"}} - {{tpl:PingBlogName encode_xml="1"}} - <p><a href="{{tpl:PingAuthorURL encode_xml="1"}}">{{tpl:PingTitle encode_xml="1"}}</a></p> {{tpl:PingContent encode_xml="1"}} - - - - - - - {{tpl:CommentEntryTitle encode_xml="1"}} - {{tpl:CommentAuthor encode_xml="1"}} - - {{tpl:CommentFeedID}} - {{tpl:CommentDate iso8601="1"}} - {{tpl:CommentDate iso8601="1" upddt="1"}} - {{tpl:CommentAuthor encode_xml="1"}} - {{tpl:CommentContent absolute_urls="1" encode_xml="1"}} - - - - - \ No newline at end of file diff --git a/v2/dotclear/inc/public/default-templates/atom.xml b/v2/dotclear/inc/public/default-templates/atom.xml deleted file mode 100644 index 5237103..0000000 --- a/v2/dotclear/inc/public/default-templates/atom.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - {{tpl:BlogName encode_xml="1"}}{{tpl:SysFeedSubtitle encode_xml="1"}} - {{tpl:BlogDescription encode_xml="1"}} - - - {{tpl:BlogUpdateDate iso8601="1"}} - - {{tpl:BlogEditor encode_xml="1"}} - - {{tpl:BlogFeedID}} - Dotclear - - - - - {{tpl:EntryTitle encode_xml="1"}} - - {{tpl:EntryFeedID}} - {{tpl:EntryDate iso8601="1"}} - {{tpl:EntryDate iso8601="1" upddt="1"}} - {{tpl:EntryAuthorCommonName encode_xml="1"}} - - {{tpl:EntryCategory encode_html="1"}} - - {{tpl:TagID}} - - {{tpl:EntryExcerpt absolute_urls="1" encode_xml="1"}} - {{tpl:EntryContent absolute_urls="1" encode_xml="1"}} - - - - - - - - {{tpl:EntryURL}}#comment-form - {{tpl:BlogFeedURL type="atom"}}/comments/{{tpl:EntryID}} - - - - - \ No newline at end of file diff --git a/v2/dotclear/inc/public/default-templates/category.html b/v2/dotclear/inc/public/default-templates/category.html deleted file mode 100644 index 0d43eea..0000000 --- a/v2/dotclear/inc/public/default-templates/category.html +++ /dev/null @@ -1,167 +0,0 @@ - - - - - - - {{tpl:CategoryTitle encode_html="1"}} - {{tpl:BlogName encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf> - - - - - - - - {{tpl:lang page}} {{tpl:PaginationCurrent}}" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {{tpl:include src="_head.html"}} - - - -
      -{{tpl:include src="_top.html"}} - -
      - -
      -
      - -
      -

      {{tpl:CategoryTitle encode_html="1"}} - {{tpl:CategoryTitle encode_html="1"}}

      - {{tpl:CategoryDescription}} - - -

      {{tpl:lang Entries feed}} - - - - {{tpl:lang Comments feed}} - -

      -
      -
      - - - -
      -

      {{tpl:lang Subcategories}}

      - -
      - -
      - - -
      - -

      {{tpl:EntryDate}}

      - -

      {{tpl:EntryTitle encode_html="1"}}

      - - - - - - - - - {{tpl:SysBehavior behavior="publicEntryBeforeContent"}} - - - -
      {{tpl:EntryExcerpt}}
      -

      {{tpl:lang Continue - reading}}...

      -
      - - - -
      {{tpl:EntryContent}}
      -
      - - - {{tpl:SysBehavior behavior="publicEntryAfterContent"}} - - - - - -
      - - - -

      - - {{tpl:lang page}} {{tpl:PaginationCurrent}} {{tpl:lang of}} {{tpl:PaginationCounter}} - -

      -
      -
      -
      -
      -
      - - - -
      - -{{tpl:include src="_footer.html"}} -
      - - \ No newline at end of file diff --git a/v2/dotclear/inc/public/default-templates/home.html b/v2/dotclear/inc/public/default-templates/home.html deleted file mode 100644 index df11fcd..0000000 --- a/v2/dotclear/inc/public/default-templates/home.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - - {{tpl:BlogName encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf> - - {{tpl:lang page}} {{tpl:PaginationCurrent}}" /> - - - - - - - {{tpl:lang page}} {{tpl:PaginationCurrent}}" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {{tpl:include src="_head.html"}} - - - -
      -{{tpl:include src="_top.html"}} - -
      - -
      -
      - -
      - -

      {{tpl:EntryDate}}

      - -

      {{tpl:EntryTitle encode_html="1"}}

      - - - - - - - - - {{tpl:SysBehavior behavior="publicEntryBeforeContent"}} - - - -
      {{tpl:EntryExcerpt}}
      -

      {{tpl:lang Continue - reading}}...

      -
      - - - -
      {{tpl:EntryContent}}
      -
      - - - {{tpl:SysBehavior behavior="publicEntryAfterContent"}} - - - - - -
      - - - -

      - - {{tpl:lang page}} {{tpl:PaginationCurrent}} {{tpl:lang of}} {{tpl:PaginationCounter}} - -

      -
      -
      -
      -
      -
      - - - -
      - -{{tpl:include src="_footer.html"}} -
      - - \ No newline at end of file diff --git a/v2/dotclear/inc/public/default-templates/password-form.html b/v2/dotclear/inc/public/default-templates/password-form.html deleted file mode 100644 index e462dc0..0000000 --- a/v2/dotclear/inc/public/default-templates/password-form.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - {{tpl:lang Password needed}} - {{tpl:BlogName encode_html="1"}} - - - - - - -
      -

      {{tpl:lang Password needed}}

      - -

      {{tpl:lang You must give a password to access this area.}}

      -

      - -
      - - - \ No newline at end of file diff --git a/v2/dotclear/inc/public/default-templates/post.html b/v2/dotclear/inc/public/default-templates/post.html deleted file mode 100644 index 6ff773c..0000000 --- a/v2/dotclear/inc/public/default-templates/post.html +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - - {{tpl:EntryTitle encode_html="1"}} - {{tpl:BlogName encode_html="1"}} - - - - - - - - - - - - - - - - - - - - - - - - - - {{tpl:include src="_head.html"}} - - - - - - -
      -{{tpl:EntryPingData}} - -{{tpl:include src="_top.html"}} - -
      - -
      -
      - - - -
      -

      {{tpl:EntryTitle encode_html="1"}}

      - - - - - - - - - {{tpl:SysBehavior behavior="publicEntryBeforeContent"}} - - - -
      {{tpl:EntryExcerpt}}
      -
      - -
      {{tpl:EntryContent}}
      - - - {{tpl:SysBehavior behavior="publicEntryAfterContent"}} -
      - - - - -
      -

      {{tpl:lang Attachments}}

      -
        - -
      • - - {{tpl:include src="_mp3_player.html"/}} - - - - {{tpl:include src="_flv_player.html"/}} - - - {{tpl:AttachmentTitle}} - -
      • - -
      -
      - -
      - - - - - -
      -

      {{tpl:lang Comments}}

      -
      - -
      {{tpl:CommentOrderNumber}}. - {{tpl:lang On}} {{tpl:CommentDate}}, {{tpl:CommentTime}} - {{tpl:lang by}} {{tpl:CommentAuthorLink}}
      - -
      - - {{tpl:SysBehavior behavior="publicCommentBeforeContent"}} - - {{tpl:CommentContent}} - - - {{tpl:SysBehavior behavior="publicCommentAfterContent"}} -
      - -
      -
      - -
      -
      - - - -

      {{tpl:SysFormError}}

      -
      - - -

      {{tpl:lang Your comment has been published.}}

      -
      - - -

      {{tpl:lang Your comment has been submitted and - will be reviewed for publication.}}

      -
      - - -
      - -
      -

      {{tpl:lang Your comment}}

      -
      -
      {{tpl:CommentPreviewContent}}
      -
      -

      -
      -
      - -

      {{tpl:lang Add a comment}}

      -
      - - {{tpl:SysBehavior behavior="publicCommentFormBeforeContent"}} - -

      - -

      - -

      - -

      - -

      - -

      - -

      - -

      - -

      -

      {{tpl:CommentHelp}}

      - - - {{tpl:SysBehavior behavior="publicCommentFormAfterContent"}} -
      - -
      -

      -

      -
      -
      -
      - - - -
      -

      {{tpl:lang They posted on the same topic}}

      - - -
      - -
      {{tpl:PingOrderNumber}}. - {{tpl:lang On}} {{tpl:PingDate}}, {{tpl:PingTime}} - {{tpl:lang by}} {{tpl:PingBlogName encode_html="1"}}
      - -
      - - {{tpl:SysBehavior behavior="publicPingBeforeContent"}} - -

      {{tpl:PingTitle encode_html="1"}}

      - {{tpl:PingContent}} - - - {{tpl:SysBehavior behavior="publicPingAfterContent"}} -
      - -
      - -
      -
      -
      - - -

      {{tpl:lang Trackback URL}} : {{tpl:EntryPingLink}}

      -
      - - -

      {{tpl:lang This post's comments feed}}

      -
      -
      -
      - - - -
      - -{{tpl:include src="_footer.html"}} -
      - - diff --git a/v2/dotclear/inc/public/default-templates/rss2-comments.xml b/v2/dotclear/inc/public/default-templates/rss2-comments.xml deleted file mode 100644 index ccea31b..0000000 --- a/v2/dotclear/inc/public/default-templates/rss2-comments.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - {{tpl:BlogName encode_xml="1"}}{{tpl:SysFeedSubtitle encode_xml="1"}} - - {{tpl:lang Comments}} - {{tpl:BlogURL}} - - {{tpl:BlogDescription encode_xml="1"}} - {{tpl:BlogLanguage}} - {{tpl:BlogUpdateDate rfc822="1"}} - {{tpl:BlogCopyrightNotice encode_xml="1"}} - http://blogs.law.harvard.edu/tech/rss - Dotclear - - - - - - [ping] {{tpl:PingEntryTitle encode_xml="1"}} - {{tpl:PingBlogName encode_xml="1"}} - {{tpl:PingPostURL encode_xml="1"}}#c{{tpl:PingID}} - {{tpl:PingFeedID}} - {{tpl:PingDate rfc822="1"}} - {{tpl:PingBlogName encode_xml="1"}} - - <p><a href="{{tpl:PingAuthorURL encode_xml="1"}}">{{tpl:PingTitle encode_xml="1"}}</a></p> - {{tpl:PingContent encode_xml="1"}} - - - - - - {{tpl:CommentEntryTitle encode_xml="1"}} - {{tpl:CommentAuthor encode_xml="1"}} - {{tpl:CommentPostURL encode_xml="1"}}#c{{tpl:CommentID}} - {{tpl:CommentFeedID}} - {{tpl:CommentDate rfc822="1"}} - {{tpl:CommentAuthor encode_xml="1"}} - - {{tpl:CommentContent absolute_urls="1" encode_xml="1"}} - - - - - - \ No newline at end of file diff --git a/v2/dotclear/inc/public/default-templates/rss2.xml b/v2/dotclear/inc/public/default-templates/rss2.xml deleted file mode 100644 index c4ed4ba..0000000 --- a/v2/dotclear/inc/public/default-templates/rss2.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - {{tpl:BlogName encode_xml="1"}}{{tpl:SysFeedSubtitle encode_xml="1"}} - {{tpl:BlogURL}} - - {{tpl:BlogDescription encode_xml="1"}} - {{tpl:BlogLanguage}} - {{tpl:BlogUpdateDate rfc822="1"}} - {{tpl:BlogCopyrightNotice encode_xml="1"}} - http://blogs.law.harvard.edu/tech/rss - Dotclear - - - - - {{tpl:EntryTitle encode_xml="1"}} - {{tpl:EntryURL}} - {{tpl:EntryFeedID}} - {{tpl:EntryDate rfc822="1"}} - {{tpl:EntryAuthorCommonName encode_xml="1"}} - - {{tpl:EntryCategory encode_html="1"}} - - {{tpl:TagID}} - - {{tpl:EntryExcerpt absolute_urls="1" encode_xml="1"}} - {{tpl:EntryContent absolute_urls="1" encode_xml="1"}} - - - - - - - {{tpl:EntryURL}}#comment-form - {{tpl:EntryURL}}#comment-form - {{tpl:BlogFeedURL}}/comments/{{tpl:EntryID}} - - - - - - \ No newline at end of file diff --git a/v2/dotclear/inc/public/default-templates/rss2.xsl b/v2/dotclear/inc/public/default-templates/rss2.xsl deleted file mode 100644 index 9dcd864..0000000 --- a/v2/dotclear/inc/public/default-templates/rss2.xsl +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - {{tpl:lang Subscribe to}} <xsl:value-of select="/rss/channel/title"/> - - - - -
      -
      -

      -

      -
      -
      -

      {{tpl:lang What is an RSS feed?}}

      -

      {{tpl:lang RSS feed is a free blog summary. It provides content - (either posts or comments) or summaries of content, together with links - to the full versions, and other metadata. The last published items may - then be read by your favorite RSS - aggregator.}}

      -

      {{tpl:lang Subscribe}}

      -

      {{tpl:lang Simply copy the following URL into your aggregator:}}

      -

      -
      -
      - -
      - -
      - - -
      - - - -
      -

      -
      -
      -
      - -
      \ No newline at end of file diff --git a/v2/dotclear/inc/public/default-templates/search.html b/v2/dotclear/inc/public/default-templates/search.html deleted file mode 100644 index 2d2ba90..0000000 --- a/v2/dotclear/inc/public/default-templates/search.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - {{tpl:lang Search}} - {{tpl:SysSearchString encode_html="1"}} - {{tpl:BlogName encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf> - - - - - - - {{tpl:lang page}} {{tpl:PaginationCurrent}}" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {{tpl:include src="_head.html"}} - - - -
      -{{tpl:include src="_top.html"}} - -
      - -
      -
      - -
      -

      {{tpl:lang Search}}

      - -

      {{tpl:SysSearchString encode_html="1" string="Your search for %1$s returned no result."}}

      -
      - -

      {{tpl:SysSearchString encode_html="1" string="Your search for %1$s returned %2$s result."}}

      -
      - -

      {{tpl:SysSearchString encode_html="1" string="Your search for %1$s returned %2$s results."}}

      -
      -
      - - -
      - -

      {{tpl:EntryDate}}

      - -

      {{tpl:EntryTitle encode_html="1"}}

      - - - - - - - - - {{tpl:SysBehavior behavior="publicEntryBeforeContent"}} - - - -
      {{tpl:EntryExcerpt}}
      -

      {{tpl:lang Continue - reading}}...

      -
      - - - -
      {{tpl:EntryContent}}
      -
      - - - {{tpl:SysBehavior behavior="publicEntryAfterContent"}} - - - - - -
      - - - -

      - - {{tpl:lang page}} {{tpl:PaginationCurrent}} {{tpl:lang of}} {{tpl:PaginationCounter}} - -

      -
      -
      -
      -
      -
      - - - -
      - -{{tpl:include src="_footer.html"}} -
      - - \ No newline at end of file diff --git a/v2/dotclear/inc/public/default-templates/user_head.html b/v2/dotclear/inc/public/default-templates/user_head.html deleted file mode 100644 index 4b380d4..0000000 --- a/v2/dotclear/inc/public/default-templates/user_head.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/v2/dotclear/inc/public/lib.tpl.context.php b/v2/dotclear/inc/public/lib.tpl.context.php deleted file mode 100644 index 18780ad..0000000 --- a/v2/dotclear/inc/public/lib.tpl.context.php +++ /dev/null @@ -1,443 +0,0 @@ -pop($name); - } else { - $this->stack[$name][] =& $var; - if ($var instanceof record) { - $this->stack['cur_loop'][] =& $var; - } - } - } - - public function __get($name) - { - if (!isset($this->stack[$name])) { - return null; - } - - $n = count($this->stack[$name]); - if ($n > 0) { - return $this->stack[$name][($n-1)]; - } - - return null; - } - - public function exists($name) - { - return isset($this->stack[$name][0]); - } - - public function pop($name) - { - if (isset($this->stack[$name])) { - $v = array_pop($this->stack[$name]); - if ($v instanceof record) { - array_pop($this->stack['cur_loop']); - } - unset($v); - } - } - - # Loop position tests - public function loopPosition($start,$length=null,$even=null) - { - if (!$this->cur_loop) { - return false; - } - - $index = $this->cur_loop->index(); - $size = $this->cur_loop->count(); - - $test = false; - if ($start >= 0) - { - $test = $index >= $start; - if ($length !== null) { - if ($length >= 0) { - $test = $test && $index < $start + $length; - } else { - $test = $test && $index < $size + $length; - } - } - } - else - { - $test = $index >= $size + $start; - if ($length !== null) { - if ($length >= 0) { - $test = $test && $index < $size + $start + $length; - } else { - $test = $test && $index < $size + $length; - } - } - } - - if ($even !== null) { - $test = $test && $index%2 == $even; - } - - return $test; - } - - - # Static methods - public static function global_filter($str, - $encode_xml, $remove_html, $cut_string, $lower_case, $upper_case ,$tag='') - { - $args = func_get_args(); - array_pop($args); - $args[0] =& $str; - - # --BEHAVIOR-- publicBeforeContentFilter - $res = $GLOBALS['core']->callBehavior('publicBeforeContentFilter',$GLOBALS['core'],$tag,$args); - - if ($remove_html) { - $str = self::remove_html($str); - $str = preg_replace('/\s+/',' ',$str); - } - - if ($encode_xml) { - $str = self::encode_xml($str); - } - - if ($cut_string) { - $str = self::cut_string($str,(integer) $cut_string); - } - - if ($lower_case) { - $str = self::lower_case($str); - } elseif ($upper_case) { - $str = self::upper_case($str); - } - - # --BEHAVIOR-- publicAfterContentFilter - $res = $GLOBALS['core']->callBehavior('publicAfterContentFilter',$GLOBALS['core'],$tag,$args); - - return $str; - } - - - public static function cut_string($str,$l) - { - return text::cutString($str,$l); - } - - public static function encode_xml($str) - { - return html::escapeHTML($str); - } - - public static function remove_html($str) - { - return html::decodeEntities(html::clean($str)); - } - - public static function lower_case($str) - { - return mb_strtolower($str); - } - - public static function upper_case($str) - { - return mb_strtoupper($str); - } - - public static function categoryPostParam(&$p) - { - $not = substr($p['cat_url'],0,1) == '!'; - if ($not) { - $p['cat_url'] = substr($p['cat_url'],1); - } - - $p['cat_url'] = preg_split('/\s*,\s*/',$p['cat_url'],-1,PREG_SPLIT_NO_EMPTY); - - foreach ($p['cat_url'] as &$v) - { - if ($not) { - $v .= ' ?not'; - } - if ($GLOBALS['_ctx']->exists('categories') && preg_match('/#self/',$v)) { - $v = preg_replace('/#self/',$GLOBALS['_ctx']->categories->cat_url,$v); - } elseif ($GLOBALS['_ctx']->exists('posts') && preg_match('/#self/',$v)) { - $v = preg_replace('/#self/',$GLOBALS['_ctx']->posts->cat_url,$v); - } - } - } - - # Static methods for pagination - public static function PaginationNbPages() - { - global $_ctx; - - if ($_ctx->pagination === null) { - return false; - } - - $nb_posts = $_ctx->pagination->f(0); - $nb_per_page = $_ctx->post_params['limit'][1]; - - $nb_pages = ceil($nb_posts/$nb_per_page); - - return $nb_pages; - } - - public static function PaginationPosition($offset=0) - { - if (isset($GLOBALS['_page_number'])) { - $p = $GLOBALS['_page_number']; - } else { - $p = 1; - } - - $p = $p+$offset; - - $n = self::PaginationNbPages(); - if (!$n) { - return $p; - } - - if ($p > $n || $p <= 0) { - return 1; - } else { - return $p; - } - } - - public static function PaginationStart() - { - if (isset($GLOBALS['_page_number'])) { - return self::PaginationPosition() == 1; - } - - return true; - } - - public static function PaginationEnd() - { - if (isset($GLOBALS['_page_number'])) { - return self::PaginationPosition() == self::PaginationNbPages(); - } - - return false; - } - - public static function PaginationURL($offset=0) - { - $args = $_SERVER['URL_REQUEST_PART']; - - $n = self::PaginationPosition($offset); - - $args = preg_replace('#(^|/)page/([0-9]+)$#','',$args); - - $url = $GLOBALS['core']->blog->url.$args; - - if ($n > 1) { - $url = preg_replace('#/$#','',$url); - $url .= '/page/'.$n; - } - - # If search param - if (!empty($_GET['q'])) { - $s = strpos($url,'?') !== false ? '&' : '?'; - $url .= $s.'q='.rawurlencode($_GET['q']); - } - return $url; - } - - # Robots policy - public static function robotsPolicy($base,$over) - { - $pol = array('INDEX' => 'INDEX','FOLLOW' => 'FOLLOW', 'ARCHIVE' => 'ARCHIVE'); - $base = array_flip(preg_split('/\s*,\s*/',$base)); - $over = array_flip(preg_split('/\s*,\s*/',$over)); - - foreach ($pol as $k => &$v) - { - if (isset($base[$k]) || isset($base['NO'.$k])) { - $v = isset($base['NO'.$k]) ? 'NO'.$k : $k; - } - if (isset($over[$k]) || isset($over['NO'.$k])) { - $v = isset($over['NO'.$k]) ? 'NO'.$k : $k; - } - } - - if ($pol['ARCHIVE'] == 'ARCHIVE') { - unset($pol['ARCHIVE']); - } - - return implode(', ',$pol); - } - - # Smilies static methods - public static function getSmilies($blog) - { - $path = array(); - if (isset($GLOBALS['__theme'])) { - $path[] = $GLOBALS['__theme']; - } - $path[] = 'default'; - $definition = $blog->themes_path.'/%s/smilies/smilies.txt'; - $base_url = $blog->settings->system->themes_url.'/%s/smilies/'; - - $res = array(); - - foreach ($path as $t) - { - if (file_exists(sprintf($definition,$t))) { - $base_url = sprintf($base_url,$t); - return self::smiliesDefinition(sprintf($definition,$t),$base_url); - } - } - return false; - } - - public static function smiliesDefinition($f,$url) - { - $def = file($f); - - $res = array(); - foreach($def as $v) - { - $v = trim($v); - if (preg_match('|^([^\t]*)[\t]+(.*)$|',$v,$matches)) - { - $r = '/(\A|[\s]+|>)('.preg_quote($matches[1],'/').')([\s]+|[<]|\Z)/ms'; - $s = '$1$3'; - $res[$r] = $s; - } - } - - return $res; - } - - public static function addSmilies($str) - { - if (!isset($GLOBALS['__smilies']) || !is_array($GLOBALS['__smilies'])) { - return $str; - } - - return preg_replace(array_keys($GLOBALS['__smilies']),array_values($GLOBALS['__smilies']),$str); - } - - # First post image helpers - public static function EntryFirstImageHelper($size,$with_category,$class="") - { - global $core, $_ctx; - - $media = new dcMedia($core); - $sizes = implode('|',array_keys($media->thumb_sizes)).'|o'; - if (!preg_match('/^'.$sizes.'$/',$size)) { - $size = 's'; - } - $p_url = $core->blog->settings->system->public_url; - $p_site = preg_replace('#^(.+?//.+?)/(.*)$#','$1',$core->blog->url); - $p_root = $core->blog->public_path; - - $pattern = '(?:'.preg_quote($p_site,'/').')?'.preg_quote($p_url,'/'); - $pattern = sprintf('/]+/msu',$pattern); - - $src = ''; - $alt = ''; - - # We first look in post content - if ($_ctx->posts) - { - $subject = $_ctx->posts->post_excerpt_xhtml.$_ctx->posts->post_content_xhtml; - if (preg_match_all($pattern,$subject,$m) > 0) - { - foreach ($m[1] as $i => $img) { - if (($src = self::ContentFirstImageLookup($p_root,$img,$size)) !== false) { - $src = $p_url.(dirname($img) != '/' ? dirname($img) : '').'/'.$src; - if (preg_match('/alt="([^"]+)"/',$m[0][$i],$malt)) { - $alt = $malt[1]; - } - break; - } - } - } - } - - # No src, look in category description if available - if (!$src && $with_category && $_ctx->categories) - { - if (preg_match_all($pattern,$_ctx->categories->cat_desc,$m) > 0) - { - foreach ($m[1] as $i => $img) { - if (($src = self::ContentFirstImageLookup($p_root,$img,$size)) !== false) { - $src = $p_url.(dirname($img) != '/' ? dirname($img) : '').'/'.$src; - if (preg_match('/alt="([^"]+)"/',$m[0][$i],$malt)) { - $alt = $malt[1]; - } - break; - } - } - }; - } - - if ($src) { - return ''.$alt.''; - } - } - - private static function ContentFirstImageLookup($root,$img,$size) - { - global $core; - - # Get base name and extension - $info = path::info($img); - $base = $info['base']; - - $media = new dcMedia($core); - $sizes = implode('|',array_keys($media->thumb_sizes)); - if (preg_match('/^\.(.+)_('.$sizes.')$/',$base,$m)) { - $base = $m[1]; - } - - $res = false; - if ($size != 'o' && file_exists($root.'/'.$info['dirname'].'/.'.$base.'_'.$size.'.jpg')) - { - $res = '.'.$base.'_'.$size.'.jpg'; - } - else - { - $f = $root.'/'.$info['dirname'].'/'.$base; - if (file_exists($f.'.'.$info['extension'])) { - $res = $base.'.'.$info['extension']; - } elseif (file_exists($f.'.jpg')) { - $res = $base.'.jpg'; - } elseif (file_exists($f.'.jpeg')) { - $res = $base.'.jpeg'; - } elseif (file_exists($f.'.png')) { - $res = $base.'.png'; - } elseif (file_exists($f.'.gif')) { - $res = $base.'.gif'; - } - } - - if ($res) { - return $res; - } - return false; - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/public/lib.urlhandlers.php b/v2/dotclear/inc/public/lib.urlhandlers.php deleted file mode 100644 index 7ff1f87..0000000 --- a/v2/dotclear/inc/public/lib.urlhandlers.php +++ /dev/null @@ -1,683 +0,0 @@ -callBehavior("publicGetURLFor",$type,$value); - if (!$url) { - $url = $this->getBase($type); - if ($value) { - if ($url) { - $url .= '/'; - } - $url .= $value; - } - } - return $url; - } - - public function register($type,$url,$representation,$handler) - { - $core =& $GLOBALS['core']; - $t = new ArrayObject(array($type,$url,$representation,$handler)); - $core->callBehavior("publicRegisterURL",$t); - parent::register($t[0],$t[1],$t[2],$t[3]); - } - - public static function p404() - { - throw new Exception ("Page not found",404); - } - - public static function default404($args,$type,$e) - { - if ($e->getCode() != 404) { - throw $e; - } - $_ctx =& $GLOBALS['_ctx']; - $core = $GLOBALS['core']; - - header('Content-Type: text/html; charset=UTF-8'); - http::head(404,'Not Found'); - $core->url->type = '404'; - $_ctx->current_tpl = '404.html'; - $_ctx->content_type = 'text/html'; - - echo $core->tpl->getData($_ctx->current_tpl); - - # --BEHAVIOR-- publicAfterDocument - $core->callBehavior('publicAfterDocument',$core); - exit; - } - - protected static function getPageNumber(&$args) - { - if (preg_match('#(^|/)page/([0-9]+)$#',$args,$m)) { - $n = (integer) $m[2]; - if ($n > 0) { - $args = preg_replace('#(^|/)page/([0-9]+)$#','',$args); - return $n; - } - } - - return false; - } - - protected static function serveDocument($tpl,$content_type='text/html',$http_cache=true,$http_etag=true) - { - $_ctx =& $GLOBALS['_ctx']; - $core =& $GLOBALS['core']; - - if ($_ctx->nb_entry_per_page === null) { - $_ctx->nb_entry_per_page = $core->blog->settings->system->nb_post_per_page; - } - - $tpl_file = $core->tpl->getFilePath($tpl); - - if (!$tpl_file) { - throw new Exception('Unable to find template '); - } - - $result = new ArrayObject; - - $_ctx->current_tpl = $tpl; - $_ctx->content_type = $content_type; - $_ctx->http_cache = $http_cache; - $_ctx->http_etag = $http_etag; - $core->callBehavior('urlHandlerBeforeGetData',$_ctx); - - if ($_ctx->http_cache) { - $GLOBALS['mod_files'][] = $tpl_file; - http::cache($GLOBALS['mod_files'],$GLOBALS['mod_ts']); - } - - header('Content-Type: '.$_ctx->content_type.'; charset=UTF-8'); - $result['content'] = $core->tpl->getData($_ctx->current_tpl); - $result['content_type'] = $_ctx->content_type; - $result['tpl'] = $_ctx->current_tpl; - $result['blogupddt'] = $core->blog->upddt; - - # --BEHAVIOR-- urlHandlerServeDocument - $core->callBehavior('urlHandlerServeDocument',$result); - - if ($_ctx->http_cache && $_ctx->http_etag) { - http::etag($result['content'],http::getSelfURI()); - } - echo $result['content']; - } - - public function getDocument() - { - $core =& $GLOBALS['core']; - - $type = $args = ''; - - if ($this->mode == 'path_info') - { - $part = substr($_SERVER['PATH_INFO'],1); - } - else - { - $part = ''; - - $qs = $this->parseQueryString(); - - # Recreates some _GET and _REQUEST pairs - if (!empty($qs)) - { - foreach ($_GET as $k => $v) { - if (isset($_REQUEST[$k])) { - unset($_REQUEST[$k]); - } - } - $_GET = $qs; - $_REQUEST = array_merge($qs,$_REQUEST); - - list($k,$v) = each($qs); - if ($v === null) { - $part = $k; - unset($_GET[$k]); - unset($_REQUEST[$k]); - } - } - } - - $_SERVER['URL_REQUEST_PART'] = $part; - - $this->getArgs($part,$type,$this->args); - - # --BEHAVIOR-- urlHandlerGetArgsDocument - $core->callBehavior('urlHandlerGetArgsDocument',$this); - - if (!$type) - { - $this->type = 'default'; - $this->callDefaultHandler($this->args); - } - else - { - $this->type = $type; - $this->callHandler($type,$this->args); - } - } - - public static function home($args) - { - $n = self::getPageNumber($args); - - if ($args && !$n) - { - # "Then specified URL went unrecognized by all URL handlers and - # defaults to the home page, but is not a page number. - self::p404(); - } - else - { - $core =& $GLOBALS['core']; - - if ($n) { - $GLOBALS['_page_number'] = $n; - $core->url->type = $n > 1 ? 'default-page' : 'default'; - } - - if (empty($_GET['q'])) { - self::serveDocument('home.html'); - $core->blog->publishScheduledEntries(); - } else { - self::search(); - } - } - } - - public static function search() - { - $_ctx =& $GLOBALS['_ctx']; - $core =& $GLOBALS['core']; - - $core->url->type='search'; - - $GLOBALS['_search'] = !empty($_GET['q']) ? rawurldecode($_GET['q']) : ''; - if ($GLOBALS['_search']) { - $params = new ArrayObject(array('search' => $GLOBALS['_search'])); - $core->callBehavior('publicBeforeSearchCount',$params); - $GLOBALS['_search_count'] = $core->blog->getPosts($params,true)->f(0); - } - - self::serveDocument('search.html'); - } - - public static function lang($args) - { - $_ctx =& $GLOBALS['_ctx']; - $core =& $GLOBALS['core']; - - $n = self::getPageNumber($args); - $params = new ArrayObject(array( - 'lang' => $args)); - - $core->callBehavior('publicLangBeforeGetLangs',$params,$args); - - $_ctx->langs = $core->blog->getLangs($params); - - if ($_ctx->langs->isEmpty()) { - # The specified language does not exist. - self::p404(); - } - else - { - if ($n) { - $GLOBALS['_page_number'] = $n; - } - $_ctx->cur_lang = $args; - self::home(null); - } - } - - public static function category($args) - { - $_ctx =& $GLOBALS['_ctx']; - $core =& $GLOBALS['core']; - - $n = self::getPageNumber($args); - - if ($args == '' && !$n) { - # No category was specified. - self::p404(); - } - else - { - $params = new ArrayObject(array( - 'cat_url' => $args, - 'post_type' => 'post')); - - $core->callBehavior('publicCategoryBeforeGetCategories',$params,$args); - - $_ctx->categories = $core->blog->getCategories($params); - - if ($_ctx->categories->isEmpty()) { - # The specified category does no exist. - self::p404(); - } - else - { - if ($n) { - $GLOBALS['_page_number'] = $n; - } - self::serveDocument('category.html'); - } - } - } - - public static function archive($args) - { - $_ctx =& $GLOBALS['_ctx']; - $core =& $GLOBALS['core']; - - $year = $month = $cat_url = null; - # Nothing or year and month - if ($args == '') - { - self::serveDocument('archive.html'); - } - elseif (preg_match('|^/([0-9]{4})/([0-9]{2})$|',$args,$m)) - { - $params = new ArrayObject(array( - 'year' => $m[1], - 'month' => $m[2], - 'type' => 'month')); - - $core->callBehavior('publicArchiveBeforeGetDates',$params,$args); - - $_ctx->archives = $core->blog->getDates($params); - - if ($_ctx->archives->isEmpty()) { - # There is no entries for the specified period. - self::p404(); - } - else - { - self::serveDocument('archive_month.html'); - } - } - else { - # The specified URL is not a date. - self::p404(); - } - } - - public static function post($args) - { - if ($args == '') { - # No entry was specified. - self::p404(); - } - else - { - $_ctx =& $GLOBALS['_ctx']; - $core =& $GLOBALS['core']; - - $core->blog->withoutPassword(false); - - $params = new ArrayObject(array( - 'post_url' => $args)); - - $core->callBehavior('publicPostBeforeGetPosts',$params,$args); - - $_ctx->posts = $core->blog->getPosts($params); - - $_ctx->comment_preview = new ArrayObject(); - $_ctx->comment_preview['content'] = ''; - $_ctx->comment_preview['rawcontent'] = ''; - $_ctx->comment_preview['name'] = ''; - $_ctx->comment_preview['mail'] = ''; - $_ctx->comment_preview['site'] = ''; - $_ctx->comment_preview['preview'] = false; - $_ctx->comment_preview['remember'] = false; - - $core->blog->withoutPassword(true); - - if ($_ctx->posts->isEmpty()) - { - # The specified entry does not exist. - self::p404(); - } - else - { - $post_id = $_ctx->posts->post_id; - $post_password = $_ctx->posts->post_password; - - # Password protected entry - if ($post_password != '' && !$_ctx->preview) - { - # Get passwords cookie - if (isset($_COOKIE['dc_passwd'])) { - $pwd_cookie = unserialize($_COOKIE['dc_passwd']); - } else { - $pwd_cookie = array(); - } - - # Check for match - if ((!empty($_POST['password']) && $_POST['password'] == $post_password) - || (isset($pwd_cookie[$post_id]) && $pwd_cookie[$post_id] == $post_password)) - { - $pwd_cookie[$post_id] = $post_password; - setcookie('dc_passwd',serialize($pwd_cookie),0,'/'); - } - else - { - self::serveDocument('password-form.html','text/html',false); - return; - } - } - - $post_comment = - isset($_POST['c_name']) && isset($_POST['c_mail']) && - isset($_POST['c_site']) && isset($_POST['c_content']) && - $_ctx->posts->commentsActive(); - - # Posting a comment - if ($post_comment) - { - # Spam trap - if (!empty($_POST['f_mail'])) { - http::head(412,'Precondition Failed'); - header('Content-Type: text/plain'); - echo "So Long, and Thanks For All the Fish"; - # Exits immediately the application to preserve the server. - exit; - } - - $name = $_POST['c_name']; - $mail = $_POST['c_mail']; - $site = $_POST['c_site']; - $content = $_POST['c_content']; - $preview = !empty($_POST['preview']); - - if ($content != '') - { - if ($core->blog->settings->system->wiki_comments) { - $core->initWikiComment(); - } else { - $core->initWikiSimpleComment(); - } - $content = $core->wikiTransform($content); - $content = $core->HTMLfilter($content); - } - - $_ctx->comment_preview['content'] = $content; - $_ctx->comment_preview['rawcontent'] = $_POST['c_content']; - $_ctx->comment_preview['name'] = $name; - $_ctx->comment_preview['mail'] = $mail; - $_ctx->comment_preview['site'] = $site; - - if ($preview) - { - # --BEHAVIOR-- publicBeforeCommentPreview - $core->callBehavior('publicBeforeCommentPreview',$_ctx->comment_preview); - - $_ctx->comment_preview['preview'] = true; - } - else - { - # Post the comment - $cur = $core->con->openCursor($core->prefix.'comment'); - $cur->comment_author = $name; - $cur->comment_site = html::clean($site); - $cur->comment_email = html::clean($mail); - $cur->comment_content = $content; - $cur->post_id = $_ctx->posts->post_id; - $cur->comment_status = $core->blog->settings->system->comments_pub ? 1 : -1; - $cur->comment_ip = http::realIP(); - - $redir = $_ctx->posts->getURL(); - $redir .= $core->blog->settings->system->url_scan == 'query_string' ? '&' : '?'; - - try - { - if (!text::isEmail($cur->comment_email)) { - throw new Exception(__('You must provide a valid email address.')); - } - - # --BEHAVIOR-- publicBeforeCommentCreate - $core->callBehavior('publicBeforeCommentCreate',$cur); - if ($cur->post_id) { - $comment_id = $core->blog->addComment($cur); - - # --BEHAVIOR-- publicAfterCommentCreate - $core->callBehavior('publicAfterCommentCreate',$cur,$comment_id); - } - - if ($cur->comment_status == 1) { - $redir_arg = 'pub=1'; - } else { - $redir_arg = 'pub=0'; - } - - header('Location: '.$redir.$redir_arg); - } - catch (Exception $e) - { - $_ctx->form_error = $e->getMessage(); - $_ctx->form_error; - } - } - } - - # The entry - self::serveDocument('post.html'); - } - } - } - - public static function preview($args) - { - $core = $GLOBALS['core']; - $_ctx = $GLOBALS['_ctx']; - - if (!preg_match('#^(.+?)/([0-9a-z]{40})/(.+?)$#',$args,$m)) { - # The specified Preview URL is malformed. - self::p404(); - } - else - { - $user_id = $m[1]; - $user_key = $m[2]; - $post_url = $m[3]; - if (!$core->auth->checkUser($user_id,null,$user_key)) { - # The user has no access to the entry. - self::p404(); - } - else - { - $_ctx->preview = true; - self::post($post_url); - } - } - } - - public static function feed($args) - { - $type = null; - $comments = false; - $cat_url = false; - $post_id = null; - $subtitle = ''; - - $mime = 'application/xml'; - - $_ctx =& $GLOBALS['_ctx']; - $core =& $GLOBALS['core']; - - if (preg_match('!^([a-z]{2}(-[a-z]{2})?)/(.*)$!',$args,$m)) { - $params = new ArrayObject(array('lang' => $m[1])); - - $args = $m[3]; - - $core->callBehavior('publicFeedBeforeGetLangs',$params,$args); - - $_ctx->langs = $core->blog->getLangs($params); - - if ($_ctx->langs->isEmpty()) { - # The specified language does not exist. - self::p404(); - return; - } else { - $_ctx->cur_lang = $m[1]; - } - } - - if (preg_match('#^rss2/xslt$#',$args,$m)) - { - # RSS XSLT stylesheet - self::serveDocument('rss2.xsl','text/xml'); - return; - } - elseif (preg_match('#^(atom|rss2)/comments/([0-9]+)$#',$args,$m)) - { - # Post comments feed - $type = $m[1]; - $comments = true; - $post_id = (integer) $m[2]; - } - elseif (preg_match('#^(?:category/(.+)/)?(atom|rss2)(/comments)?$#',$args,$m)) - { - # All posts or comments feed - $type = $m[2]; - $comments = !empty($m[3]); - if (!empty($m[1])) { - $cat_url = $m[1]; - } - } - else - { - # The specified Feed URL is malformed. - self::p404(); - return; - } - - if ($cat_url) - { - $params = new ArrayObject(array( - 'cat_url' => $cat_url, - 'post_type' => 'post')); - - $core->callBehavior('publicFeedBeforeGetCategories',$params,$args); - - $_ctx->categories = $core->blog->getCategories($params); - - if ($_ctx->categories->isEmpty()) { - # The specified category does no exist. - self::p404(); - return; - } - - $subtitle = ' - '.$_ctx->categories->cat_title; - } - elseif ($post_id) - { - $params = new ArrayObject(array( - 'post_id' => $post_id, - 'post_type' => '')); - - $core->callBehavior('publicFeedBeforeGetPosts',$params,$args); - - $_ctx->posts = $core->blog->getPosts($params); - - if ($_ctx->posts->isEmpty()) { - # The specified post does not exist. - self::p404(); - return; - } - - $subtitle = ' - '.$_ctx->posts->post_title; - } - - $tpl = $type; - if ($comments) { - $tpl .= '-comments'; - $_ctx->nb_comment_per_page = $core->blog->settings->system->nb_comment_per_feed; - } else { - $_ctx->nb_entry_per_page = $core->blog->settings->system->nb_post_per_feed; - $_ctx->short_feed_items = $core->blog->settings->system->short_feed_items; - } - $tpl .= '.xml'; - - if ($type == 'atom') { - $mime = 'application/atom+xml'; - } - - $_ctx->feed_subtitle = $subtitle; - - header('X-Robots-Tag: '.context::robotsPolicy($core->blog->settings->system->robots_policy,'')); - self::serveDocument($tpl,$mime); - if (!$comments && !$cat_url) { - $core->blog->publishScheduledEntries(); - } - } - - public static function trackback($args) - { - if (!preg_match('/^[0-9]+$/',$args)) { - # The specified trackback URL is not an number - self::p404(); - } else { - $tb = new dcTrackback($GLOBALS['core']); - $tb->receive($args); - } - } - - public static function rsd($args) - { - $core =& $GLOBALS['core']; - http::cache($GLOBALS['mod_files'],$GLOBALS['mod_ts']); - - header('Content-Type: text/xml; charset=UTF-8'); - echo - ''."\n". - ''."\n". - "\n". - " Dotclear\n". - " http://www.dotclear.org/\n". - ' '.html::escapeHTML($core->blog->url)."\n"; - - if ($core->blog->settings->system->enable_xmlrpc) - { - $u = sprintf(DC_XMLRPC_URL,$core->blog->url,$core->blog->id); - - echo - " \n". - ' '."\n". - ' '."\n". - ' '."\n". - ' '."\n". - " \n"; - } - - echo - "\n". - "\n"; - } - - public static function xmlrpc($args) - { - $core =& $GLOBALS['core']; - $blog_id = preg_replace('#^([^/]*).*#','$1',$args); - $server = new dcXmlRpc($core,$blog_id); - $server->serve(); - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/public/prepend.php b/v2/dotclear/inc/public/prepend.php deleted file mode 100644 index 29bc3a9..0000000 --- a/v2/dotclear/inc/public/prepend.php +++ /dev/null @@ -1,156 +0,0 @@ -setBlog(DC_BLOG_ID); - } catch (Exception $e) { - init_prepend_l10n(); - __error(__('Database problem') - ,DC_DEBUG ? - __('The following error was encountered while trying to read the database:').'

      • '.$e->getMessage().'
      ' : - __('Something went wrong while trying to read the database.') - ,20); - } -} - -if ($core->blog->id == null) { - __error(__('Blog is not defined.') - ,__('Did you change your Blog ID?') - ,30); -} - -if ((boolean)!$core->blog->status) { - $core->unsetBlog(); - __error(__('Blog is offline.') - ,__('This blog is offline. Please try again later.') - ,70); -} - -# Loading media -try { - $core->media = new dcMedia($core); -} catch (Exception $e) {} - -# Creating template context -$_ctx = new context(); -try { - $core->tpl = new dcTemplate(DC_TPL_CACHE,'$core->tpl',$core); -} catch (Exception $e) { - __error(__('Can\'t create template files.') - ,$e->getMessage() - ,40); -} - -# Loading locales -$_lang = $core->blog->settings->system->lang; -$_lang = preg_match('/^[a-z]{2}(-[a-z]{2})?$/',$_lang) ? $_lang : 'en'; - -if (l10n::set(dirname(__FILE__).'/../../locales/'.$_lang.'/date') === false && $_lang != 'en') { - l10n::set(dirname(__FILE__).'/../../locales/en/date'); -} -l10n::set(dirname(__FILE__).'/../../locales/'.$_lang.'/public'); -l10n::set(dirname(__FILE__).'/../../locales/'.$_lang.'/plugins'); - -# Loading plugins -try { - $core->plugins->loadModules(DC_PLUGINS_ROOT,'public',$_lang); -} catch (Exception $e) {} - -# Loading themes -$core->themes = new dcThemes($core); -$core->themes->loadModules($core->blog->themes_path); - -# Defining theme if not defined -if (!isset($__theme)) { - $__theme = $core->blog->settings->system->theme; -} - -if (!$core->themes->moduleExists($__theme)) { - $__theme = $core->blog->settings->system->theme = 'default'; -} - -$__parent_theme = $core->themes->moduleInfo($__theme,'parent'); -if ($__parent_theme) { - if (!$core->themes->moduleExists($__parent_theme)) { - $__theme = $core->blog->settings->system->theme = 'default'; - $__parent_theme = null; - } -} - -# If theme doesn't exist, stop everything -if (!$core->themes->moduleExists($__theme)) { - __error(__('Default theme not found.') - ,__('This either means you removed your default theme or set a wrong theme '. - 'path in your blog configuration. Please check theme_path value in '. - 'about:config module or reinstall default theme. ('.$__theme.')') - ,50); -} - -# Loading _public.php file for selected theme -$core->themes->loadNsFile($__theme,'public'); - -# Loading translations for selected theme -if ($__parent_theme) { - $core->themes->loadModuleL10N($__parent_theme,$_lang,'main'); -} -$core->themes->loadModuleL10N($__theme,$_lang,'main'); - -# --BEHAVIOR-- publicPrepend -$core->callBehavior('publicPrepend',$core); - -# Prepare the HTTP cache thing -$mod_files = get_included_files(); -$mod_ts = array(); -$mod_ts[] = $core->blog->upddt; - -$__theme_tpl_path = array( - $core->blog->themes_path.'/'.$__theme.'/tpl' -); -if ($__parent_theme) { - $__theme_tpl_path[] = $core->blog->themes_path.'/'.$__parent_theme.'/tpl'; -} - -$core->tpl->setPath( - $__theme_tpl_path, - dirname(__FILE__).'/default-templates', - $core->tpl->getPath()); - -$core->url->mode = $core->blog->settings->system->url_scan; - -try { - # --BEHAVIOR-- publicBeforeDocument - $core->callBehavior('publicBeforeDocument',$core); - - $core->url->getDocument(); - - # --BEHAVIOR-- publicAfterDocument - $core->callBehavior('publicAfterDocument',$core); -} catch (Exception $e) { - __error($e->getMessage() - ,__('Something went wrong while loading template file for your blog.') - ,60); -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/public/rs.extension.php b/v2/dotclear/inc/public/rs.extension.php deleted file mode 100644 index 4c58ae3..0000000 --- a/v2/dotclear/inc/public/rs.extension.php +++ /dev/null @@ -1,93 +0,0 @@ -addBehavior('coreBlogGetPosts',array('rsExtendPublic','coreBlogGetPosts')); -$core->addBehavior('coreBlogGetComments',array('rsExtendPublic','coreBlogGetComments')); - -class rsExtendPublic -{ - public static function coreBlogGetPosts($rs) - { - $rs->extend('rsExtPostPublic'); - } - - public static function coreBlogGetComments($rs) - { - $rs->extend('rsExtCommentPublic'); - } -} - -class rsExtPostPublic extends rsExtPost -{ - public static function getContent($rs,$absolute_urls=false) - { - # Not very nice hack but it does the job :) - if (isset($GLOBALS['_ctx']) && $GLOBALS['_ctx']->short_feed_items === true) { - $_ctx =& $GLOBALS['_ctx']; - $c = parent::getContent($rs,$absolute_urls); - $c = context::remove_html($c); - $c = context::cut_string($c,350); - - $c = - '

      '.$c.'... '. - ''.__('Read').' '. - html::escapeHTML($rs->post_title).'

      '; - - return $c; - } - - if ($rs->core->blog->settings->system->use_smilies) - { - return self::smilies(parent::getContent($rs,$absolute_urls),$rs->core->blog); - } - - return parent::getContent($rs,$absolute_urls); - } - - public static function getExcerpt($rs,$absolute_urls=false) - { - if ($rs->core->blog->settings->system->use_smilies) - { - return self::smilies(parent::getExcerpt($rs,$absolute_urls),$rs->core->blog); - } - - return parent::getExcerpt($rs,$absolute_urls); - } - - protected static function smilies($c,$blog) - { - if (!isset($GLOBALS['__smilies'])) { - $GLOBALS['__smilies'] = context::getSmilies($blog); - } - return context::addSmilies($c); - } -} - -class rsExtCommentPublic extends rsExtComment -{ - public static function getContent($rs,$absolute_urls=false) - { - if ($rs->core->blog->settings->system->use_smilies) - { - $c = parent::getContent($rs,$absolute_urls); - - if (!isset($GLOBALS['__smilies'])) { - $GLOBALS['__smilies'] = context::getSmilies($rs->core->blog); - } - return context::addSmilies($c); - } - - return parent::getContent($rs,$absolute_urls); - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/inc/swf/player_flv.swf b/v2/dotclear/inc/swf/player_flv.swf deleted file mode 100644 index 01ec373bb1f1f48fbe17200d9f01c6ae9e8f71a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12975 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 \ No newline at end of file diff --git a/v2/dotclear/locales/README b/v2/dotclear/locales/README deleted file mode 100644 index d021aa6..0000000 --- a/v2/dotclear/locales/README +++ /dev/null @@ -1 +0,0 @@ -Please see http://www.dotclear.org/translate diff --git a/v2/dotclear/locales/en/date.lang.php b/v2/dotclear/locales/en/date.lang.php deleted file mode 100644 index d56522b..0000000 --- a/v2/dotclear/locales/en/date.lang.php +++ /dev/null @@ -1,38 +0,0 @@ - \ No newline at end of file diff --git a/v2/dotclear/locales/en/date.po b/v2/dotclear/locales/en/date.po deleted file mode 100644 index 16faca8..0000000 --- a/v2/dotclear/locales/en/date.po +++ /dev/null @@ -1,116 +0,0 @@ -msgid "%Y-%m-%d %H:%M" -msgstr "" - -msgid "_Jan" -msgstr "Jan" - -msgid "_Feb" -msgstr "Feb" - -msgid "_Mar" -msgstr "Mar" - -msgid "_Apr" -msgstr "Apr" - -msgid "_May" -msgstr "May" - -msgid "_Jun" -msgstr "Jun" - -msgid "_Jul" -msgstr "Jul" - -msgid "_Aug" -msgstr "Aug" - -msgid "_Sep" -msgstr "Sep" - -msgid "_Oct" -msgstr "Oct" - -msgid "_Nov" -msgstr "Nov" - -msgid "_Dec" -msgstr "Dec" - -msgid "January" -msgstr "" - -msgid "February" -msgstr "" - -msgid "March" -msgstr "" - -msgid "April" -msgstr "" - -msgid "May" -msgstr "" - -msgid "June" -msgstr "" - -msgid "July" -msgstr "" - -msgid "August" -msgstr "" - -msgid "September" -msgstr "" - -msgid "October" -msgstr "" - -msgid "November" -msgstr "" - -msgid "December" -msgstr "" - -msgid "_Mon" -msgstr "Mon" - -msgid "_Tue" -msgstr "Tue" - -msgid "_Wed" -msgstr "Wed" - -msgid "_Thu" -msgstr "Thu" - -msgid "_Fri" -msgstr "Fri" - -msgid "_Sat" -msgstr "Sat" - -msgid "_Sun" -msgstr "Sun" - -msgid "Monday" -msgstr "" - -msgid "Tuesday" -msgstr "" - -msgid "Wednesday" -msgstr "" - -msgid "Thursday" -msgstr "" - -msgid "Friday" -msgstr "" - -msgid "Saturday" -msgstr "" - -msgid "Sunday" -msgstr "" diff --git a/v2/dotclear/locales/en/help/blog_pref.html b/v2/dotclear/locales/en/help/blog_pref.html deleted file mode 100644 index 487a4f2..0000000 --- a/v2/dotclear/locales/en/help/blog_pref.html +++ /dev/null @@ -1,148 +0,0 @@ - - - Blog settings - - - - -

      Blog details

      -
      -
      Blog ID
      -
      Unique ID of the blog. Mandatory, can only be modified by a super administrator.
      - -
      Blog name
      -
      Name of the blog, mandatory.
      - -
      Blog URL
      -
      Complete blog URL. Mandatory, can only be modified by a super administrator.
      - -
      Blog status
      -
      -
        -
      • online: blog open to visitors
      • -
      • offline: blog closed to visitors - but open to writers.
      • -
      • removed: blog closed to both visitors and writers.
      • -
      -
      - -
      Blog description
      -
      Here you can put any description you want for your blog. This is a - simple text, without formatting.
      -
      - -

      Blog configuration

      -
      -
      Blog editor's name
      -
      Name of the person responsible for the blog. It may be the owner or the - publisher if he exists.
      - -
      Copyright notice
      -
      Note about the reproduction rights for the blog.
      - -
      Default language
      -
      Language of the blog interface. Either this language is among the avalaible ones, - and the interface will be translated, or it is not, and the interface will then - default to English.
      - -
      Blog timezone
      -
      Defines the timezone that will be used for comments and trackbacks.
      - -
      Date formats
      -
      The date format of the blog posts. See the date and time - format reference section below for further details.
      - -
      Time format
      -
      The time format of the blog posts. See the date and time - format reference section below for further details.
      - -
      Display .. entries per page
      -
      The number will be used as the limit for the number of entries - on the homepage, the first page of each category and the rss feeds.
      - -
      Leave comments open for .. days
      -
      The number of days during wich comments and trackbacks will be open - after the post publication. When empty, the comments will be kept open - indefinitly.
      - -
      Display smilies on entries and comments
      -
      Display sequences of characters as :-) or ;-) as images.
      - -
      Accept comments
      -
      Globally accepts comments on the blog. Takes precedence over the - per post setting.
      - -
      Accept trackbacks
      -
      Globally accepts trackbacks on the blog. Takes precedence over the - per post setting.
      - -
      Moderate comments and trackbacks
      -
      With such an option, comments and trackbacks will be published after - editor agreement.
      - -
      Add "nofollow" relation on comments and trackbacks links
      -
      Adds an attribute on inks in comments and trackbacks, instructing the - search bots not to follow them. This antispam features has yet to - prove its value.
      - -
      Wiki syntax for comments
      -
      Allows a subset of the wiki syntax to be used in comments.
      -
      - -

      Format reference

      -

      Some fields can be configured to format the date and time to your needs. -Here is a reference:

      - -
        -
      • %a: abreviated week day (local).
      • -
      • %A: complete week day (local).
      • -
      • %b: abbreviated month name (local).
      • -
      • %B: complete month name (local).
      • -
      • %c: default local date and time display.
      • -
      • %C: century (the year, divided by 100 and - round up beetween 00 and 99)
      • -
      • %d: numeric month day (from 01 to 31)
      • -
      • %D: identical to %m/%d/%y
      • -
      • %e: numeric month day (from 1 to 31)
      • -
      • %g: identical to %G, 2 digits.
      • -
      • %G: The year on 4 digits, according to the week number - (cf. %V). Format and value identical to %Y, except that if the number of the - week belongs to the preceding or following year, the current year - will be used instead.
      • -
      • %h: identical to %b
      • -
      • %H: digital hour of the day, 24H mode - (from 00 to 23)
      • -
      • %I: digital hour of the day, 12H mode - (from 01 to 12)
      • -
      • %j: day of the year, digital (from 001 to 366)
      • -
      • %m: month, digital (from 1 à 12)
      • -
      • %M: minute, digital
      • -
      • %n: newline character
      • -
      • %p: either `am' or `pm', according to the absolute time, - or depending of the local settings.
      • -
      • %r: the hour, a.m. and p.m. format
      • -
      • %R: the hour, 24h format
      • -
      • %S: seconds, digital
      • -
      • %t: tab character
      • -
      • %T: the current time (identical to %H:%M:%S)
      • -
      • %u: day week, digit, from 1 to 7. (1 stands for monday)
      • -
      • %U: week number, the first sundqy of the year being the - first day of the first week.
      • -
      • %V: the week numpber as defined in ISO - 8601:1988, digital, from 01 to 53. The week 1 is the first week - with more than 4 days in the current year, whose monday is the first day. - (Use %G or %g for the year elements corresponding to the number of the - week for the considered timestamp.)
      • -
      • %W: number of the week in the year, the first monday of - the year being the start of the first week
      • -
      • %w: day of the week, digital, 0 stands for sunday
      • -
      • %x: prefered format for the date without the time
      • -
      • %X: prefered format for the time without the date
      • -
      • %y: the year, two digits (from 00 to 99)
      • -
      • %Y: the year, four digits
      • -
      • %Z ou %z: timezone, name or abbreviation
      • -
      • %%: a litteral `%' character
      • -
      - - - \ No newline at end of file diff --git a/v2/dotclear/locales/en/help/categories.html b/v2/dotclear/locales/en/help/categories.html deleted file mode 100644 index becd08f..0000000 --- a/v2/dotclear/locales/en/help/categories.html +++ /dev/null @@ -1,47 +0,0 @@ - - - Categories - - - -

      Categories list

      -
      -
      Create a new category
      -
      Choose the name you wish to use for your new category - then click on Save to validate its creation. you may leave it at the first level or choose its parent. - To modify your category, click on its name in the list.
      - -
      Delete a category
      -
      Choose the category you wish to delete in the selection menu and click ok. - A category can be deleted only if it contains no posts.
      - -
      Reorder categories
      -
      Use this option to place all categories at the same level. - If you wish to reorder a category respectively to other categories, - click on its name and choose its parent and its position respectively to its siblings.
      -
      - -

      Modifying a category

      -
      -
      Title
      -
      Choose the name you wish to give to your category - the click on Save to validate.
      - -
      URL
      -
      DotClear creates a default url for the category, making it reachable - with a path similar to this one : - http://monblog.tld/category/My-category. You can click - on the small lock on the right to modify it according to your needs.
      - -
      Description
      -
      What's inside the description field will be shown when selecting - one of the blog's categories. You can fill it with any kind of content - (paragraphs, lists, etc.) The format used for this field is HTML.
      - -
      Move this category
      -
      You can move the category as a child of any other by choosing its parent. - You can also specify the category position respectively to its siblings by placing it before or after any of them.
      -
      - - - \ No newline at end of file diff --git a/v2/dotclear/locales/en/help/comments.html b/v2/dotclear/locales/en/help/comments.html deleted file mode 100644 index 83338f2..0000000 --- a/v2/dotclear/locales/en/help/comments.html +++ /dev/null @@ -1,58 +0,0 @@ - - - Comments - - - -

      Filters for comment list

      -
      -
      Type:
      -
      None, comments or trackbacks.
      - -
      Status:
      -
        -
      • junk:
      • -
      • pending:
      • -
      • unpublished: offline ;
      • -
      • published: online.
      • -
      - -
      Order by:
      -
      Choose: date, entry title, author or status, then - choose the sort order.
      - -
      Sort
      -
      Choose whether the list will be sorted in ascending or descending order.
      - -
      Comment author.
      -
      The search is not case sensitive. If you want to search only a part of - the name, you can use the * generic character.
      - -
      Comments per page :
      -
      Allows you to choose the number of comments on each page of this list.
      -
      - -

      Modify or add a comment

      -
      -
      Author:
      -
      Author name. This field is mandatory.
      - -
      Email:
      -
      Author's email address.
      - -
      Web site:
      -
      URL of the comment author's blog or website.
      - -
      Status:
      -
        -
      • junk:
      • -
      • pending:
      • -
      • unpublished: offline
      • -
      • published: online
      • -
      - -
      Comment:
      -
      Comment's content. This field is html formated.
      -
      - - diff --git a/v2/dotclear/locales/en/help/media.html b/v2/dotclear/locales/en/help/media.html deleted file mode 100644 index 052f40f..0000000 --- a/v2/dotclear/locales/en/help/media.html +++ /dev/null @@ -1,90 +0,0 @@ - - - Media manager - - - - -

      Media list

      -

      The media manager's main page displays a list of available files (medias) -for the currently selected blog.

      - -

      You can click the icons or names of the medias in the folder or any -subfolder to display them.

      - -

      Selecting a MP3 sound file displays a player to immediately play -the file. The Flash plugin must be installed on your browser for -this player to operate.

      - -

      The images are displayed with a thumbnail when possible.

      - -

      Add files

      -
      -
      Choose a file
      -
      Here you can select one of your local files to send it on your - blog. Should the file be bigger than the maximum size, it will not be sent.
      - -
      Title
      -
      Optional title for the file you want to send.
      - -
      Private
      -
      Check this if you want the file to be private, i.e. accessible only by - its owner and not accessible from the blog.
      -
      - -

      New folder

      -

      This form allows you to create an new subfolder in the currently displayed -folder. Just choose a name for it as you would do on your own computer.

      - -

      Media details

      -

      This page displays a set of informations about the currently selected -file and allows you to perform a few operations.

      - -
      -
      File name
      -
      Change the file name of the current file.
      - -
      File title
      -
      Give a title to the file, or change the current one.
      - -
      File date
      -
      Change the file date.
      - -
      Private
      -
      Specify that the file will be hidden to anyone but its owner in the media manager.
      - -
      New directory
      -
      Allows you to move the file in another folder.
      - -
      Change file
      -
      With this form, you can replace the file while keeping all the attributes - (name, title...). As always, you have to respect the maximum file size.
      -
      - -

      A specific treatment for images

      -

      When you add an image, depending of its size, up to four versions will be made available:

      -
        -
      • square: a 48x48 pixels square thumbnail,
      • -
      • thumbnail: the image reduced to 100 pixels on its longest side.
      • -
      • small: the longuest side is reduced to 240 pixels.
      • -
      • medium: the longuest side is reduced to 500 pixels.
      • -
      • original: the original, unchanged image.
      • -
      -

      Default size for the versions thumbnail, small and medium can be modified in your blog's parameters.

      - -

      Add a file to an entry

      -

      You can easily attach a file to one of your posts. First, create a new post -and save it. Then click on "Add files to this entry" to open the media manager.

      - -

      Just click on the [+] icon (Attach this file to entry). The file will then -be attached to the post.

      - -

      The attached files will be shown on the post page, as a list beside the post content. -The MP3 files will be made available through the Flash player, so that they can easily by read by visitors.

      - -

      Podcast and broadcasting of music files

      -

      All attached files will be included in your RSS feeds, allowing for easy -podcasting of any type of file.

      - - - \ No newline at end of file diff --git a/v2/dotclear/locales/en/help/post.html b/v2/dotclear/locales/en/help/post.html deleted file mode 100644 index 8fa872b..0000000 --- a/v2/dotclear/locales/en/help/post.html +++ /dev/null @@ -1,125 +0,0 @@ - - - Editing an entry - - - - -

      Editing an entry

      - -
      -
      Entry title
      -
      Type in the entry title. This field is mandatory.
      - -
      Excerpt
      -
      The content of this field will be shown in pages showing entries as - a list, such as the homepage or categories pages, followed by a "continue reading" - link. It will also be visible at the begining of the page showing the - whole post. Should you leave it blank, the content field will be shown - on the homepage and other entry list pages.
      - -
      Content
      -
      The content of your entry. This field is mandatory.
      - -
      Notes
      -
      This text area is for personal use, for notes or memos. What you enter here - will never be displayed on the blog..
      - -
      Category
      -
      Your entry's category. To create a new category, please see the - "categories" section. You can choose to leave - you entry without a category by selecting the blank line.
      - -
      Entry status
      -
      Allows you to choose your post's status: -
        -
      • pending: the publication status has not yet been decided.
      • -
      • scheduled: the post will be set online at the time and date - set in the Published on field.
      • -
      • unpublished: the post is offline.
      • -
      • published: the post is online.
      • -
      -
      - -
      Published on
      -
      Here you can change the post's publication date and time. If the post's - status is scheduled, it will come online at the said date and time.
      - -
      Text formating
      -
      To choose the post syntax. Wiki is a simplified syntax - and will be converted to valid xhtml ; Unless you have a perfect - understanding of xhtml, we advise you to choose the wiki syntax. - See the Wiki syntax reference for more information.
      - -
      Accept comments
      -
      Select this box to allow your visitors to comment the entry. The corresponding - global setting is to be found in the blog settings.
      - -
      Accept trackbacks
      -
      A trackback is a way to let a portion of your entry as a comment on - another blog. Select this box to allow others to trackback your entry. The - corresponding global setting is to be found in the blog settings.
      - -
      Selected entry
      -
      The selected entries will be listed on your blog menu, under the title "Best - of me".
      - -
      Entry password
      -
      You can enter a password for your entry. A password protected entry will - not be displayed on your blog, it will only be reachable to those you will - give the entry url (see the view entry link) and password.
      - -
      Basename
      -
      By clicking on its lock, you can unprotect this field and and choose another - URL for your entry. If the URL you're trying to use is already used by another - entry, a number will be added to it.
      - -
      Entry lang.
      -
      The two character language code of your entry. It defaults to your (as a - user) language but you can change it to whatever language code you want, ie. - "en" or "fr-qc". This code is used for the entry's display, no chack is made - on it.
      - -
      Attachments
      -
      The attachments are all the medias you joined to the entry. The link add - file to this entry allows you to attach other files to the entry. Remember - to save your changes before clicking on this link. For further information, - see the media manager help.
      -
      - -

      Trackback

      -

      To make a trackback, click on the Ping blogs link. -You will not see this link if your entry's status is not published.

      - -
      -
      URLs to ping
      -
      Paste here the trackback URLs you found in the posts you want to ping.
      - - -
      Send excerpt
      -
      This field defaults to your entry's first few sentences. That's wht will be - sent to the blog you're pinging, along with a link to your post. You can modify - the excerpt by editing this field.
      - - -
      Auto discover ping URLs
      -
      If your entries links specific posts and if the blog carrying those posts - is set to allow it, this tool will find the URLs to ping for you.
      -
      - -

      Comments

      -
      -
      Comment list
      -
      On the Comments tab, you can read and change the status of - your entry's comments. If you're allowed to by the blog administrator, - you will be able to set your comments online or offline, to delete them or - to mark them as junk.
      - -
      Add a comment
      -
      On the Add a comment tab, you can reply to one of your entry's - comments without leaving your blog's backend. The syntax to be used here is - plain, unlimited, xhtml. Use the fields as if you were modifying a comment.
      -
      - - - diff --git a/v2/dotclear/locales/en/help/posts.html b/v2/dotclear/locales/en/help/posts.html deleted file mode 100644 index 82730c6..0000000 --- a/v2/dotclear/locales/en/help/posts.html +++ /dev/null @@ -1,65 +0,0 @@ - - - Managing entries - - - - -

      Filters for the entry list

      - -
      -
      Author
      -
      Allows you to filter by author.
      - -
      Category
      -
      Filter by category.
      - -
      Status
      -
        -
      • pending: posts whose publication status has not yet - been decided.
      • -
      • scheduled: post to be set online automatically.
      • -
      • unpublished: offline posts.
      • -
      • published: online posts.
      • -
      - -
      Selected
      -
      Only the selected posts, or the non selected ones.
      - -
      Month
      -
      Filter on a specific month and year.
      - -
      Language
      -
      Filter on the different languages used on the blog.
      - -
      Order by
      -
      Defines the list order, either on the date, the title, the author, - the status or the selected status.
      - -
      Sort
      -
      Choose whether the list will be sorted in ascending or descending order.
      - -
      Entries per page
      -
      Number of entries that will be displayed on each page of the resulting - set.
      -
      - -

      Selected entry actions

      -

      If your user permission level allows it, you can perform batch operations on the -entries you select in the list.

      - -
        -
      • Publish: set the entries online.
      • -
      • Unpublish: set the entries offline.
      • -
      • Schedule: schedule the entries to be set online at their - publication date.
      • -
      • Mark as pending: erase other publication status.
      • -
      • Change category: directs you to the category list to choose a - new one for the entries.
      • -
      • Change author: allows you to change the posts' author by - entering the new author's ID.
      • -
      • Delete: suppress the posts (this operation cannot be undone).
      • -
      - - - diff --git a/v2/dotclear/locales/en/help/user.html b/v2/dotclear/locales/en/help/user.html deleted file mode 100644 index fb9283c..0000000 --- a/v2/dotclear/locales/en/help/user.html +++ /dev/null @@ -1,71 +0,0 @@ - - - User - - - - -

      User information

      -
      -
      User name
      -
      At least 2 characters (non accentuated characters, numbers or symbols, no white space. This field is mandatory.
      - -
      Password
      -
      Write down twice your password in the fields Password and Confirm password. The minimal password length is 6 characters. - These two fields are mandatory.
      - -
      Name, First name
      -
      If the display name is empty, the author's name will be displayed - as his Firstname and Name as set here.
      - -
      Display name
      -
      You can choose here a nickname that will be displayed in your posts instead of your name and first name.
      - -
      Email
      -
      Address that will be used to send a new password on dotclear's new password generation page.
      - -
      URL
      -
      The user's web site. If set, the author name will be displayed as - a link to the said site.
      - -
      Preferred format
      -
      To choose the prefered post syntax. Wiki is a simplified syntax - and will be converted to valid xhtml ; Unless you have a perfect - understanding of html, we advise you to choose the wiki syntax.
      - -
      Default entry status
      -
      The default entry status can be set to: -
        -
      • pending: the publication status has not yet been decided.
      • -
      • scheduled: the post will be set online at the time and date - set in the Published on field.
      • -
      • unpublished: the post is offline.
      • -
      • published: the post is online.
      • -
      -
      - -
      Entry edit field height
      -
      The height of the Entry edit field. Defaults to 24.
      - -
      User language
      -
      The language in wich one publishes his posts. If the translation exists, - the interface will also be displayed in that language.
      - -
      User timezone
      -
      That choice will define the time displayed on post publication.
      - -
      Password change required to connect
      -
      Check this box to force the new user to change his password on login.
      - -
      Super administrator
      -
      This choice will give all permissions to the user on all of your installation's blogs.
      -
      - -

      Tags

      -
      -
      Tags list format
      -
      This choice allows, in post editing page, to display all available tags - or only most used ones.
      -
      - - \ No newline at end of file diff --git a/v2/dotclear/locales/en/help/user_pref.html b/v2/dotclear/locales/en/help/user_pref.html deleted file mode 100644 index a6de71b..0000000 --- a/v2/dotclear/locales/en/help/user_pref.html +++ /dev/null @@ -1,84 +0,0 @@ - - - User preferences - - - - -

      My profile

      -
      -
      Name, First name
      -
      If the display name is empty, the author's name will be displayed - as his Firstname and Name as set here.
      - -
      Display name
      -
      You can choose here a nickname that will be displayed in your posts instead of your name and first name.
      - -
      Email
      -
      Address where will be sent the new comment notifications.
      - -
      URL
      -
      The user's web site. If set, the author name will be displayed as - a link to the said site.
      - -
      User language
      -
      The language in wich one publishes his posts. If the translation exists, - the interface will also be displayed in that language.
      - -
      User timezone
      -
      That choice will define the time displayed on post publication.
      - -
      Change your password
      -
      To change your password, write down twice your password in the fields - New password and Confirm password. The minimal password length is 6 characters. - If no new password is provided, the current one is kept.
      -
      -

      My options

      -
      -
      Preferred format
      -
      To choose the prefered post syntax. Wiki is a simplified syntax - and will be converted to valid xhtml ; Unless you have a perfect - understanding of html, we advise you to choose the wiki syntax.
      - -
      Default entry status
      -
      The default entry status can be set to: -
        -
      • pending: the publication status has not yet been decided.
      • -
      • scheduled: the post will be set online at the time and date - set in the Published on field.
      • -
      • unpublished: the post is offline.
      • -
      • published: the post is online.
      • -
      -
      - -
      Entry edit field height
      -
      The height of the Entry edit field. Defaults to 24.
      - -
      Enable WYSIWYG mode
      -
      Allow the use of the WYSIWYG editor for the posts and description fields.
      - -
      Activate enhanced uploader in media manager
      -
      This option allows you to upload several files at the same time on your server. - Needs the presence of Flash plugin in your browser.
      - -
      Dashboard modules
      -
      Choices made in this zone will be reflected on your blog's dashboard.
      - -
      Tags list format
      -
      This choice allows, in post editing page, to display all available tags - or only most used ones.
      -
      -

      My favorites

      -
      -
      My favorites
      -
      This zone displays the chosen favorites on the blog's dashboard. - They can be reordered with your mouse if javascript is activated in your browser. - Otherwise, a field allows to give them an ordering number. When you are finished, do not forget - to save your changes. You may also select favorites to be deleted from the list.
      - -
      Available favorites
      -
      All plugins allowing to be put as favorites are diplayed here. Check the corresponding boxes - and add them to the dashboard.
      -
      - - \ No newline at end of file diff --git a/v2/dotclear/locales/en/help/wiki.html b/v2/dotclear/locales/en/help/wiki.html deleted file mode 100644 index 3bf005e..0000000 --- a/v2/dotclear/locales/en/help/wiki.html +++ /dev/null @@ -1,85 +0,0 @@ - - - Wiki syntax reference - - - - -

      Wiki syntax reference

      - -

      The wiki syntax is a way to enhance your text with a minimal set -of tags, studied to cover the basic needs (titles, paragraphs, quotes, -lists...)

      - -
      -
      Block elements
      -
      -
        -
      • Leave an empty line between two similar blocks.
      • -
      • Paragraph: free text, ended by an empty line if - another paragraph is to follow.
      • -
      • Title: !!! title, !! title - or ! title, allowing you to use three different levels of - heading.
      • -
      • Horizontal line: ----
      • -
      • Lists: Start each line with - * or # for unnumbered or numbered lists respectively. - List imbrication is done by mixing list markers this way: -
        -* item 1
        -** item 1.1
        -* item 2
        -*# item 2.1
        -...
        -
        -
      • -
      • Preformatted text: each line must start with a space.
      • -
      • Block quote: each line must start with a semicolon (>).
      • -
      -
      - -
      Formatting tags
      -
      -
        -
      • Emphasis: two quotes ''text''
      • -
      • Strong emphasis: two underscore __text__
      • -
      • New line: %%%
      • -
      • Insertion: two plusses ++text++
      • -
      • Deletion: two minuses --text--
      • -
      • Link: [url], [name|url], - [name|url|language] or [name|url|languagee|title]
      • -
      • Image: - ((url|alternative text)), - ((url|alternative text|position)) or - ((url|alternative text|position|long description)). -
        The position can be either L or G (left), R or D (right) or C (centered).
      • -
      • Anchor: ~anchor~
      • -
      • Acronym: ??acronym|title??
      • -
      • Inline HTML: two backquotes ``html code``
      • -
      • Inline quote: {{quote}}, - {{quote|language}} or {{quote|language|url}}
      • -
      • Code: @@code@@
      • -
      • Footnotes: $$footnote$$
      • -
      -
      - -
      Unformatted text
      -
      If you don't want one formatting character to be interpreted as such, add a -\ just before it. This way: -\[text in brackets without being a link\] -
      - -
      HTML Code
      -
      Even if you chose the wiki syntax, you may sometimes need a more -powerful formatting, i.e. HTML syntax. Do it the following way: -
      -///html
      -<p style="color:red">my text in red</p>
      -///
      -
      -
      -
      - - - - diff --git a/v2/dotclear/locales/en/main.lang.php b/v2/dotclear/locales/en/main.lang.php deleted file mode 100644 index 5b13df9..0000000 --- a/v2/dotclear/locales/en/main.lang.php +++ /dev/null @@ -1,19 +0,0 @@ - \ No newline at end of file diff --git a/v2/dotclear/locales/en/main.po b/v2/dotclear/locales/en/main.po deleted file mode 100644 index 39c6cfd..0000000 --- a/v2/dotclear/locales/en/main.po +++ /dev/null @@ -1,2785 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# This file is put in the public domain. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Dotclear 2\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-06 18:11+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "Dotclear has been upgraded." -msgstr "" - -msgid "Password reset" -msgstr "" - -msgid "Someone has requested to reset the password for the following site and username." -msgstr "" - -msgid "Username:" -msgstr "" - -msgid "To reset your password visit the following address, otherwise just ignore this email and nothing will happen." -msgstr "" - -#, php-format -msgid "The e-mail was sent successfully to %s." -msgstr "" - -msgid "Your new password" -msgstr "" - -msgid "Password:" -msgstr "" - -msgid "Your new password is in your mailbox." -msgstr "" - -msgid "Passwords don't match" -msgstr "" - -msgid "You didn't change your password." -msgstr "" - -msgid "You have to change your password before you can login." -msgstr "" - -msgid "In order to login, you have to change your password now." -msgstr "" - -msgid "Safe Mode can only be used for super administrators." -msgstr "" - -msgid "Wrong username or password" -msgstr "" - -msgid "Back to login screen" -msgstr "" - -msgid "Request a new password" -msgstr "" - -msgid "Email:" -msgstr "" - -msgid "recover" -msgstr "" - -msgid "Change your password" -msgstr "" - -msgid "New password:" -msgstr "" - -msgid "Confirm password:" -msgstr "" - -msgid "change" -msgstr "" - -msgid "Safe mode login" -msgstr "" - -msgid "This mode allows you to login without activating any of your plugins. This may be useful to solve compatibility problems" -msgstr "" - -msgid "Disable or delete any plugin suspected to cause trouble, then log out and log back in normally." -msgstr "" - -msgid "Remember my ID on this computer" -msgstr "" - -msgid "log in" -msgstr "" - -msgid "You must accept cookies in order to use the private area." -msgstr "" - -msgid "Get back to normal authentication" -msgstr "" - -msgid "Connection issue?" -msgstr "" - -msgid "I forgot my password" -msgstr "" - -msgid "I want to log in in safe mode" -msgstr "" - -msgid "New blog" -msgstr "" - -msgid "Blogs" -msgstr "" - -msgid "Blog ID:" -msgstr "" - -msgid "Required field" -msgstr "" - -msgid "At least 2 characters using letters, numbers or symbols." -msgstr "" - -msgid "Please note that changing your blog ID may require changes in your public index.php file." -msgstr "" - -msgid "Blog name:" -msgstr "" - -msgid "Blog URL:" -msgstr "" - -msgid "Blog description:" -msgstr "" - -msgid "Create" -msgstr "" - -msgid "No such blog ID" -msgstr "" - -msgid "Password verification failed" -msgstr "" - -msgid "Delete a blog" -msgstr "" - -msgid "Warning" -msgstr "" - -#, php-format -msgid "You are about to delete the blog %s. Every entry, comment and category will be deleted." -msgstr "" - -msgid "Please give your password to confirm the blog deletion." -msgstr "" - -msgid "Your password:" -msgstr "" - -msgid "Delete this blog" -msgstr "" - -msgid "No given blog id." -msgstr "" - -msgid "No such blog." -msgstr "" - -msgid "year/month/day/title" -msgstr "" - -msgid "year/month/title" -msgstr "" - -msgid "year/title" -msgstr "" - -msgid "title" -msgstr "" - -msgid "Title" -msgstr "" - -msgid "Title, Date" -msgstr "" - -msgid "Title, Country, Date" -msgstr "" - -msgid "Title, City, Country, Date" -msgstr "" - -msgid "I would like search engines and archivers to index and archive my blog's content." -msgstr "" - -msgid "I would like search engines and archivers to index but not archive my blog's content." -msgstr "" - -msgid "I would like to prevent search engines and archivers from indexing or archiving my blog's content." -msgstr "" - -msgid "That blog Id is already in use." -msgstr "" - -msgid "Invalid language code" -msgstr "" - -msgid "Blog settings" -msgstr "" - -msgid "Warning: except for special configurations, it is generally advised to have a trailing \"/\" in your blog URL in PATH_INFO mode." -msgstr "" - -msgid "Warning: except for special configurations, it is generally advised to have a trailing \"?\" in your blog URL in QUERY_STRING mode." -msgstr "" - -msgid "Blog has been successfully created." -msgstr "" - -msgid "Blog has been successfully updated." -msgstr "" - -msgid "Parameters" -msgstr "" - -msgid "Blog details" -msgstr "" - -msgid "URL scan method:" -msgstr "" - -msgid "Blog status:" -msgstr "" - -msgid "Blog configuration" -msgstr "" - -msgid "Blog editor name:" -msgstr "" - -msgid "Default language:" -msgstr "" - -msgid "Blog timezone:" -msgstr "" - -msgid "Copyright notice:" -msgstr "" - -msgid "New post URL format:" -msgstr "" - -msgid "Enable XML/RPC interface" -msgstr "" - -msgid "more information" -msgstr "" - -msgid "Comments and trackbacks" -msgstr "" - -msgid "Accept comments" -msgstr "" - -msgid "Moderate comments" -msgstr "" - -#, php-format -msgid "Leave comments open for %s days" -msgstr "" - -msgid "Leave blank to disable this feature." -msgstr "" - -msgid "Wiki syntax for comments" -msgstr "" - -msgid "Accept trackbacks" -msgstr "" - -msgid "Moderate trackbacks" -msgstr "" - -#, php-format -msgid "Leave trackbacks open for %s days" -msgstr "" - -msgid "Add \"nofollow\" relation on comments and trackbacks links" -msgstr "" - -msgid "Blog presentation" -msgstr "" - -msgid "Date format:" -msgstr "" - -msgid "Time format:" -msgstr "" - -msgid "Display smilies on entries and comments" -msgstr "" - -#, php-format -msgid "Display %s entries per page" -msgstr "" - -#, php-format -msgid "Display %s entries per feed" -msgstr "" - -#, php-format -msgid "Display %s comments per feed" -msgstr "" - -msgid "Truncate feeds" -msgstr "" - -msgid "Media and images" -msgstr "" - -msgid "Generated image sizes (in pixels)" -msgstr "" - -msgid "Thumbnails:" -msgstr "" - -msgid "Small:" -msgstr "" - -msgid "Medium:" -msgstr "" - -msgid "Inserted image title" -msgstr "" - -msgid "This defines image tag title when you insert it in a post from the media manager. It is retrieved from the picture's metadata." -msgstr "" - -msgid "Search engines robots policy" -msgstr "" - -msgid "Save" -msgstr "" - -msgid "XML/RPC interface" -msgstr "" - -msgid "XML/RPC interface allows you to edit your blog with an external client." -msgstr "" - -msgid "XML/RPC interface is not active. Change settings to enable it." -msgstr "" - -msgid "XML/RPC interface is active. You should set the following parameters on your XML/RPC client:" -msgstr "" - -msgid "Server URL:" -msgstr "" - -msgid "Blogging system:" -msgstr "" - -msgid "User name:" -msgstr "" - -msgid "your password" -msgstr "" - -msgid "Users" -msgstr "" - -msgid "Users on this blog" -msgstr "" - -msgid "No users" -msgstr "" - -msgid "Change permissions" -msgstr "" - -msgid "Super administrator" -msgstr "" - -msgid "You can't remove default theme." -msgstr "" - -msgid "Theme does not exist." -msgstr "" - -msgid "Unable to move uploaded file." -msgstr "" - -msgid "An error occurred while downloading the file." -msgstr "" - -#, php-format -msgid "by %s" -msgstr "" - -#, php-format -msgid "version %s" -msgstr "" - -#, php-format -msgid "(built on \"%s\")" -msgstr "" - -#, php-format -msgid "(requires \"%s\")" -msgstr "" - -msgid "Stylesheet" -msgstr "" - -msgid "Configure theme" -msgstr "" - -msgid "Blog appearance" -msgstr "" - -msgid "Theme has been successfully changed." -msgstr "" - -msgid "Theme has been successfully installed." -msgstr "" - -msgid "Theme has been successfully upgraded" -msgstr "" - -msgid "Theme has been successfully deleted." -msgstr "" - -#, php-format -msgid "You can find additional themes for your blog on %s." -msgstr "" - -msgid "To install or upgrade a theme you generally just need to upload it in \"Install or upgrade a theme\" section." -msgstr "" - -msgid "Themes" -msgstr "" - -#, php-format -msgid "You are currently using \"%s\"" -msgstr "" - -msgid "Use selected theme" -msgstr "" - -msgid "Delete selected theme" -msgstr "" - -msgid "Install or upgrade a theme" -msgstr "" - -msgid "You can install themes by uploading or downloading zip files." -msgstr "" - -msgid "Upload a zip file" -msgstr "" - -msgid "Theme zip file:" -msgstr "" - -msgid "Upload theme" -msgstr "" - -msgid "Download a zip file" -msgstr "" - -msgid "Theme zip file URL:" -msgstr "" - -msgid "Download theme" -msgstr "" - -msgid "To enable this function, please give write access to your themes directory." -msgstr "" - -msgid "Theme configuration" -msgstr "" - -msgid "back" -msgstr "" - -msgid "Last update" -msgstr "" - -msgid "Blog name" -msgstr "" - -msgid "Blog ID" -msgstr "" - -msgid "Descending" -msgstr "" - -msgid "Ascending" -msgstr "" - -msgid "List of blogs" -msgstr "" - -msgid "Blog has been successfully deleted." -msgstr "" - -msgid "Create a new blog" -msgstr "" - -msgid "Filters" -msgstr "" - -msgid "Order by:" -msgstr "" - -msgid "Sort:" -msgstr "" - -msgid "Search:" -msgstr "" - -msgid "Blogs per page" -msgstr "" - -msgid "Apply filters" -msgstr "" - -msgid "No blog" -msgstr "" - -msgid "Page(s)" -msgstr "" - -msgid "Entries" -msgstr "" - -msgid "Status" -msgstr "" - -#, php-format -msgid "Edit blog %s" -msgstr "" - -msgid "edit" -msgstr "" - -#, php-format -msgid "Switch to blog %s" -msgstr "" - -msgid "This category does not exist." -msgstr "" - -msgid "Categories" -msgstr "" - -msgid "The category has been successfully created." -msgstr "" - -msgid "The category has been successfully removed." -msgstr "" - -msgid "Categories have been successfully reordered." -msgstr "" - -msgid "The category has been successfully moved." -msgstr "" - -msgid "No category yet." -msgstr "" - -msgid "Categories list" -msgstr "" - -#, php-format -msgid "%d entries" -msgstr "" - -#, php-format -msgid "%d entry" -msgstr "" - -msgid "total:" -msgstr "" - -msgid "URL:" -msgstr "" - -msgid "Add a new category" -msgstr "" - -msgid "Title:" -msgstr "" - -msgid "Parent:" -msgstr "" - -msgid "Top level" -msgstr "" - -msgid "Remove a category" -msgstr "" - -msgid "Choose a category to remove:" -msgstr "" - -msgid "Delete" -msgstr "" - -msgid "Reorder categories" -msgstr "" - -msgid "This will relocate all categories on the top level" -msgstr "" - -msgid "Reorder" -msgstr "" - -msgid "New category" -msgstr "" - -msgid "Category has been successfully updated." -msgstr "" - -msgid "Category information" -msgstr "" - -msgid "Warning: If you set the URL manually, it may conflict with another category." -msgstr "" - -msgid "Description:" -msgstr "" - -msgid "Move this category" -msgstr "" - -msgid "Category parent" -msgstr "" - -msgid "Category sibling" -msgstr "" - -msgid "Move current category" -msgstr "" - -msgid "after" -msgstr "" - -msgid "before" -msgstr "" - -msgid "position: " -msgstr "" - -msgid "Entry does not exist." -msgstr "" - -msgid "No comment" -msgstr "" - -msgid "You can't edit this comment." -msgstr "" - -msgid "Edit comment" -msgstr "" - -msgid "Comment has been successfully updated." -msgstr "" - -#, php-format -msgid "Your comment on my blog %s" -msgstr "" - -#, php-format -msgid "" -"Hi!\n" -"\n" -"You wrote a comment on:\n" -"%s\n" -"\n" -"\n" -msgstr "" - -msgid "Send an e-mail" -msgstr "" - -msgid "IP address:" -msgstr "" - -msgid "Date:" -msgstr "" - -msgid "Author:" -msgstr "" - -msgid "Web site:" -msgstr "" - -msgid "Status:" -msgstr "" - -msgid "Comment:" -msgstr "" - -msgid "comment" -msgstr "" - -msgid "trackback" -msgstr "" - -msgid "Date" -msgstr "" - -msgid "Entry title" -msgstr "" - -msgid "Author" -msgstr "" - -msgid "publish" -msgstr "" - -msgid "unpublish" -msgstr "" - -msgid "mark as pending" -msgstr "" - -msgid "mark as junk" -msgstr "" - -msgid "Type:" -msgstr "" - -msgid "Comments per page" -msgstr "" - -msgid "Comment author:" -msgstr "" - -msgid "You have one spam comments." -msgstr "" - -msgid "Show it." -msgstr "" - -#, php-format -msgid "You have %s spam comments." -msgstr "" - -msgid "Show them." -msgstr "" - -msgid "Selected comments action:" -msgstr "" - -msgid "action: " -msgstr "" - -msgid "ok" -msgstr "" - -msgid "Comments" -msgstr "" - -#, php-format -msgid "%d comment" -msgstr "" - -#, php-format -msgid "%d comments" -msgstr "" - -msgid "New entry" -msgstr "" - -msgid "My preferences" -msgstr "" - -msgid "Documentation and support" -msgstr "" - -msgid "Latest news" -msgstr "" - -msgid "Dashboard" -msgstr "" - -msgid "Make this blog my default blog" -msgstr "" - -msgid "This blog is offline" -msgstr "" - -msgid "This blog is removed" -msgstr "" - -msgid "is not defined, you should edit your configuration file." -msgstr "" - -msgid "Following plugins have been installed:" -msgstr "" - -msgid "Following plugins have not been installed:" -msgstr "" - -#, php-format -msgid "Dotclear %s is available!" -msgstr "" - -msgid "Upgrade now" -msgstr "" - -msgid "Remind me later" -msgstr "" - -msgid "information about this version" -msgstr "" - -msgid "Some plugins are installed twice:" -msgstr "" - -msgid "Quick entry" -msgstr "" - -msgid "Content:" -msgstr "" - -msgid "Category:" -msgstr "" - -msgid "Save and publish" -msgstr "" - -#, php-format -msgid "PHP version is %s (5.0 or earlier needed)." -msgstr "" - -msgid "Multibyte string module (mbstring) is not available." -msgstr "" - -msgid "Iconv module is not available." -msgstr "" - -msgid "Output control functions are not available." -msgstr "" - -msgid "SimpleXML module is not available." -msgstr "" - -msgid "DOM XML module is not available." -msgstr "" - -msgid "PCRE engine does not support UTF-8 strings." -msgstr "" - -msgid "SPL module is not available." -msgstr "" - -#, php-format -msgid "MySQL version is %s (4.1 or earlier needed)." -msgstr "" - -msgid "MySQL InnoDB engine is not available." -msgstr "" - -#, php-format -msgid "PostgreSQL version is %s (8.0 or earlier needed)." -msgstr "" - -msgid "Please set a master key (DC_MASTER_KEY) in configuration file." -msgstr "" - -msgid "Dotclear is already installed." -msgstr "" - -msgid "Dotclear cannot be installed." -msgstr "" - -msgid "No user ID given" -msgstr "" - -msgid "User ID must contain at least 2 characters using letters, numbers or symbols." -msgstr "" - -msgid "Invalid email address" -msgstr "" - -msgid "No password given" -msgstr "" - -msgid "Password must contain at least 6 characters." -msgstr "" - -msgid "My first blog" -msgstr "" - -msgid "%A, %B %e %Y" -msgstr "" - -msgid "Welcome to Dotclear!" -msgstr "" - -msgid "This is your first entry. When you're ready to blog, log in to edit or delete it." -msgstr "" - -msgid "Dotclear Team" -msgstr "" - -msgid "" -"

      This is a comment.

      \n" -"

      To delete it, log in and view your blog's comments. Then you might remove or edit it.

      " -msgstr "" - -msgid "Dotclear Install" -msgstr "" - -msgid "show" -msgstr "" - -msgid "Dotclear installation" -msgstr "" - -#, php-format -msgid "Cache directory %s is not writable." -msgstr "" - -msgid "Errors:" -msgstr "" - -msgid "Configuration file has been successfully created." -msgstr "" - -msgid "User information" -msgstr "" - -msgid "Please provide the following information needed to create the first user." -msgstr "" - -msgid "First Name:" -msgstr "" - -msgid "Last Name:" -msgstr "" - -msgid "Username and password" -msgstr "" - -msgid "All done!" -msgstr "" - -msgid "Dotclear has been successfully installed. Here is some useful information you should keep." -msgstr "" - -msgid "Your account" -msgstr "" - -msgid "Your blog" -msgstr "" - -msgid "Blog address:" -msgstr "" - -msgid "Administration interface:" -msgstr "" - -msgid "Manage your blog now" -msgstr "" - -msgid "Installation can not be completed" -msgstr "" - -msgid "For the said reasons, Dotclear can not be installed. Please refer to the documentation to learn how to correct the problem." -msgstr "" - -#, php-format -msgid "File %s does not exist." -msgstr "" - -#, php-format -msgid "Cannot write %s file." -msgstr "" - -msgid "Dotclear installation wizard" -msgstr "" - -msgid "Welcome" -msgstr "" - -msgid "To complete your Dotclear installation and start writing on your blog, we just need to know how to access your database and who you are. Just fill this two steps wizard with this information and we will be done." -msgstr "" - -msgid "Attention:" -msgstr "" - -msgid "this wizard may not function on every host. If it does not work for you, please refer to the documentation to learn how to create the config.php file manually." -msgstr "" - -msgid "System information" -msgstr "" - -msgid "Please provide the following information needed to create your configuration file." -msgstr "" - -msgid "Database type:" -msgstr "" - -msgid "Database Host Name:" -msgstr "" - -msgid "Database Name:" -msgstr "" - -msgid "Database User Name:" -msgstr "" - -msgid "Database Password:" -msgstr "" - -msgid "Database Tables Prefix:" -msgstr "" - -msgid "Continue" -msgstr "" - -msgid "No such installed language" -msgstr "" - -msgid "You can't remove English language." -msgstr "" - -msgid "Permissions to delete language denied." -msgstr "" - -msgid "Invalid language file URL." -msgstr "" - -msgid "Languages management" -msgstr "" - -msgid "Language has been successfully deleted." -msgstr "" - -msgid "Language has been successfully installed." -msgstr "" - -msgid "Language has been successfully upgraded" -msgstr "" - -msgid "Here you can install, upgrade or remove languages for your Dotclear installation." -msgstr "" - -#, php-format -msgid "You can change your user language in your preferences or change your blog's main language in your blog settings." -msgstr "" - -msgid "Installed languages" -msgstr "" - -msgid "No additional language is installed." -msgstr "" - -msgid "Language" -msgstr "" - -msgid "Action" -msgstr "" - -msgid "Install or upgrade languages" -msgstr "" - -#, php-format -msgid "You can install or remove a language by adding or removing the relevant directory in your %s folder." -msgstr "" - -msgid "Available languages" -msgstr "" - -#, php-format -msgid "You can download and install a additional language directly from Dotclear.net. Proposed languages are based on your version: %s." -msgstr "" - -msgid "Language:" -msgstr "" - -msgid "Install language" -msgstr "" - -msgid "You can install languages by uploading zip files." -msgstr "" - -msgid "Language zip file:" -msgstr "" - -msgid "Upload language" -msgstr "" - -msgid "Invalid language zip file." -msgstr "" - -msgid "The zip file does not appear to be a valid Dotclear language pack." -msgstr "" - -msgid "An error occurred during language upgrade." -msgstr "" - -msgid "Error:" -msgstr "" - -msgid "By names, in ascending order" -msgstr "" - -msgid "By names, in descending order" -msgstr "" - -msgid "By dates, in ascending order" -msgstr "" - -msgid "By dates, in descending order" -msgstr "" - -msgid "Media manager" -msgstr "" - -msgid "confirm removal" -msgstr "" - -#, php-format -msgid "Are you sure you want to remove %s?" -msgstr "" - -msgid "Cancel" -msgstr "" - -msgid "Yes" -msgstr "" - -msgid "Directory has been successfully created." -msgstr "" - -msgid "Files have been successfully uploaded." -msgstr "" - -msgid "File has been successfully removed." -msgstr "" - -msgid "Directory has been successfully removed." -msgstr "" - -msgid "Directory has been successfully rebuilt." -msgstr "" - -msgid "Zip file has been successfully extracted." -msgstr "" - -#, php-format -msgid "Choose a file to attach to entry %s by clicking on %s." -msgstr "" - -msgid "Attach this file to entry" -msgstr "" - -#, php-format -msgid "Choose a file to insert into entry by clicking on %s." -msgstr "" - -msgid "No file." -msgstr "" - -msgid "Sort files:" -msgstr "" - -msgid "Sort" -msgstr "" - -msgid "Add files" -msgstr "" - -msgid "Please take care to publish media that you own and that are not protected by copyright." -msgstr "" - -msgid "Choose a file:" -msgstr "" - -#, php-format -msgid "Maximum size %s" -msgstr "" - -msgid "Private" -msgstr "" - -msgid "To send several files at the same time, you can activate the enhanced uploader in" -msgstr "" - -msgid "Send" -msgstr "" - -msgid "New directory" -msgstr "" - -msgid "Directory Name:" -msgstr "" - -msgid "Download this directory as a zip file" -msgstr "" - -msgid "open" -msgstr "" - -msgid "Insert this file into entry" -msgstr "" - -msgid "delete" -msgstr "" - -msgid "Not a valid file" -msgstr "" - -msgid "File has been successfully updated." -msgstr "" - -msgid "Thumbnails have been successfully updated." -msgstr "" - -msgid "Insert media item" -msgstr "" - -msgid "Image size:" -msgstr "" - -msgid "original" -msgstr "" - -msgid "Image alignment" -msgstr "" - -msgid "None" -msgstr "" - -msgid "Left" -msgstr "" - -msgid "Right" -msgstr "" - -msgid "Center" -msgstr "" - -msgid "Image insertion" -msgstr "" - -msgid "As a single image" -msgstr "" - -msgid "As a link to original image" -msgstr "" - -msgid "MP3 disposition" -msgstr "" - -msgid "Please note that you cannot insert mp3 files with visual editor." -msgstr "" - -msgid "Please note that you cannot insert video files with visual editor." -msgstr "" - -msgid "Video size" -msgstr "" - -msgid "Width:" -msgstr "" - -msgid "Height:" -msgstr "" - -msgid "Video disposition" -msgstr "" - -msgid "Media item will be inserted as a link." -msgstr "" - -msgid "Insert" -msgstr "" - -msgid "Media details" -msgstr "" - -msgid "Available sizes:" -msgstr "" - -msgid "File owner:" -msgstr "" - -msgid "File type:" -msgstr "" - -msgid "File size:" -msgstr "" - -msgid "File URL:" -msgstr "" - -msgid "Show entries containing this media" -msgstr "" - -msgid "Entries containing this media" -msgstr "" - -msgid "No entry seems contain this media." -msgstr "" - -msgid "Image details" -msgstr "" - -msgid "No detail" -msgstr "" - -msgid "Update thumbnails" -msgstr "" - -msgid "This will create or update thumbnails for this image." -msgstr "" - -msgid "Extract in a new directory" -msgstr "" - -msgid "Extract in current directory" -msgstr "" - -msgid "Extract archive" -msgstr "" - -msgid "This will extract archive in a new directory that should not exist yet." -msgstr "" - -msgid "This will extract archive in current directory and will overwrite existing files or directory." -msgstr "" - -msgid "Extract mode:" -msgstr "" - -msgid "Extract" -msgstr "" - -msgid "Change media properties" -msgstr "" - -msgid "File name:" -msgstr "" - -msgid "File title:" -msgstr "" - -msgid "File date:" -msgstr "" - -msgid "New directory:" -msgstr "" - -msgid "Change file" -msgstr "" - -msgid "No blog or user given." -msgstr "" - -msgid "permissions" -msgstr "" - -msgid "Permissions" -msgstr "" - -msgid "The permissions have been successfully updated." -msgstr "" - -#, php-format -msgid "You are about to change permissions on the following blogs for users %s." -msgstr "" - -msgid "Validate permissions" -msgstr "" - -msgid "choose a blog" -msgstr "" - -msgid "Choose a blog" -msgstr "" - -msgid "Entries per page" -msgstr "" - -#, php-format -msgid "Choose one or more blogs to which you want to give permissions to users %s." -msgstr "" - -msgid "Set permissions" -msgstr "" - -msgid "select" -msgstr "" - -msgid "No content found on this plugin." -msgstr "" - -msgid "Plugin not found" -msgstr "" - -msgid "The plugin you reached does not exist or does not have an admin page." -msgstr "" - -msgid "No such plugin." -msgstr "" - -msgid "You don't have permissions to delete this plugin." -msgstr "" - -msgid "You don't have permissions to deactivate this plugin." -msgstr "" - -msgid "Plugins management" -msgstr "" - -msgid "Plugin has been successfully deleted." -msgstr "" - -msgid "Plugin has been successfully installed." -msgstr "" - -msgid "Plugin has been successfully upgraded" -msgstr "" - -msgid "Plugins add new functionalities to Dotclear. Here you can activate or deactivate installed plugins." -msgstr "" - -#, php-format -msgid "You can find additional plugins for your blog on %s." -msgstr "" - -msgid "To install or upgrade a plugin you generally just need to upload it in \"Install or upgrade a plugin\" section." -msgstr "" - -msgid "To install or upgrade a plugin you just need to extract it in your plugins directory." -msgstr "" - -msgid "Plugins" -msgstr "" - -msgid "Activated plugins" -msgstr "" - -msgid "Plugin" -msgstr "" - -msgid "Version" -msgstr "" - -msgid "Details" -msgstr "" - -msgid "Deactivate" -msgstr "" - -msgid "Deactivated plugins" -msgstr "" - -msgid "Activate" -msgstr "" - -msgid "Install or upgrade a plugin" -msgstr "" - -msgid "You can install plugins by uploading or downloading zip files." -msgstr "" - -msgid "Plugin zip file:" -msgstr "" - -msgid "Upload plugin" -msgstr "" - -msgid "Plugin zip file URL:" -msgstr "" - -msgid "Download plugin" -msgstr "" - -msgid "To enable this function, please give write access to your plugins directory." -msgstr "" - -msgid "Add a link" -msgstr "" - -msgid "Available" -msgstr "" - -msgid "Most used" -msgstr "" - -msgid "Link URL:" -msgstr "" - -msgid "Link title:" -msgstr "" - -msgid "Link language:" -msgstr "" - -msgid "Add a link to an entry" -msgstr "" - -msgid "Search entry:" -msgstr "" - -msgid "Search" -msgstr "" - -msgid "cancel" -msgstr "" - -msgid "This entry does not exist." -msgstr "" - -msgid "Edit entry" -msgstr "" - -msgid "next entry" -msgstr "" - -msgid "previous entry" -msgstr "" - -msgid "Entry has been successfully updated." -msgstr "" - -msgid "Entry has been successfully created." -msgstr "" - -msgid "File has been successfully attached." -msgstr "" - -msgid "Attachment has been successfully removed." -msgstr "" - -msgid "Comment has been successfully created." -msgstr "" - -msgid "Don't forget to validate your XHTML conversion by saving your post." -msgstr "" - -msgid "Go to this entry on the site" -msgstr "" - -msgid "new window" -msgstr "" - -msgid "Excerpt:" -msgstr "" - -msgid "Notes:" -msgstr "" - -msgid "Preview" -msgstr "" - -msgid "Entry status:" -msgstr "" - -msgid "Published on:" -msgstr "" - -msgid "Text formating:" -msgstr "" - -msgid "Convert to XHTML" -msgstr "" - -msgid "Selected entry" -msgstr "" - -msgid "Entry lang:" -msgstr "" - -msgid "Entry password:" -msgstr "" - -msgid "Basename:" -msgstr "" - -msgid "Warning: If you set the URL manually, it may conflict with another entry." -msgstr "" - -msgid "Ping blogs" -msgstr "" - -msgid "Trackbacks" -msgstr "" - -msgid "No trackback" -msgstr "" - -msgid "Add a comment" -msgstr "" - -msgid "Name:" -msgstr "" - -msgid "IP address" -msgstr "" - -msgid "published" -msgstr "" - -msgid "unpublished" -msgstr "" - -msgid "pending" -msgstr "" - -msgid "junk" -msgstr "" - -msgid "select this comment" -msgstr "" - -msgid "select this trackback" -msgstr "" - -msgid "Edit this comment" -msgstr "" - -msgid "This attachment does not exist" -msgstr "" - -msgid "Remove attachment" -msgstr "" - -msgid "Attachment" -msgstr "" - -msgid "Are you sure you want to remove this attachment?" -msgstr "" - -msgid "selected" -msgstr "" - -msgid "not selected" -msgstr "" - -msgid "Category" -msgstr "" - -msgid "Selected" -msgstr "" - -msgid "Publish" -msgstr "" - -msgid "Unpublish" -msgstr "" - -msgid "Schedule" -msgstr "" - -msgid "Mark as pending" -msgstr "" - -msgid "Mark" -msgstr "" - -msgid "Mark as selected" -msgstr "" - -msgid "Mark as unselected" -msgstr "" - -msgid "Change" -msgstr "" - -msgid "Change category" -msgstr "" - -msgid "Change author" -msgstr "" - -msgid "Selected:" -msgstr "" - -msgid "Month:" -msgstr "" - -msgid "Lang:" -msgstr "" - -msgid "Selected entries action:" -msgstr "" - -msgid "This user does not exist" -msgstr "" - -msgid "Change category for entries" -msgstr "" - -msgid "Change author for entries" -msgstr "" - -msgid "Author ID:" -msgstr "" - -msgid "Default" -msgstr "" - -msgid "If you want to change your email or password you must provide your current password." -msgstr "" - -msgid "No favorite selected" -msgstr "" - -msgid "Personal information has been successfully updated." -msgstr "" - -msgid "Personal options has been successfully updated." -msgstr "" - -msgid "Favorites have been successfully added." -msgstr "" - -msgid "Favorites have been successfully updated." -msgstr "" - -msgid "Favorites have been successfully removed." -msgstr "" - -msgid "Default favorites have been successfully updated." -msgstr "" - -msgid "My profile" -msgstr "" - -msgid "Display name:" -msgstr "" - -msgid "User language:" -msgstr "" - -msgid "User timezone:" -msgstr "" - -msgid "If you have changed this user email or password you must provide your current password to save these modifications." -msgstr "" - -msgid "My options" -msgstr "" - -msgid "Preferred format:" -msgstr "" - -msgid "Default entry status:" -msgstr "" - -msgid "Entry edit field height:" -msgstr "" - -msgid "Enable WYSIWYG mode" -msgstr "" - -msgid "Activate enhanced uploader in media manager" -msgstr "" - -msgid "Iconset:" -msgstr "" - -msgid "Do not use standard favicon" -msgstr "" - -msgid "This will be applied for all users" -msgstr "" - -msgid "Accessibility options" -msgstr "" - -msgid "Disable javascript powered drag and drop for ordering items" -msgstr "" - -msgid "Numeric fields will allow to type the elements' ordering number." -msgstr "" - -msgid "Dashboard modules" -msgstr "" - -msgid "Display documentation links" -msgstr "" - -msgid "Display Dotclear news" -msgstr "" - -msgid "Display quick entry form" -msgstr "" - -msgid "My favorites" -msgstr "" - -#, php-format -msgid "position of %s" -msgstr "" - -msgid "Save order" -msgstr "" - -msgid "Delete selected favorites" -msgstr "" - -msgid "Are you sure you want to remove selected favorites?" -msgstr "" - -msgid "If you are a super administrator, you may define this set of favorites to be used by default on all blogs of this installation:" -msgstr "" - -msgid "Define as default favorites" -msgstr "" - -msgid "Currently no personal favorites." -msgstr "" - -msgid "Default favorites" -msgstr "" - -msgid "Those favorites are displayed when My Favorites list is empty." -msgstr "" - -msgid "Available favorites" -msgstr "" - -msgid "Add to my favorites" -msgstr "" - -msgid "Search options" -msgstr "" - -msgid "Query:" -msgstr "" - -msgid "Search entries" -msgstr "" - -msgid "Search comments" -msgstr "" - -msgid "schedule" -msgstr "" - -msgid "change category" -msgstr "" - -msgid "change author" -msgstr "" - -#, php-format -msgid "%d entries found" -msgstr "" - -#, php-format -msgid "%d entry found" -msgstr "" - -#, php-format -msgid "%d comment found" -msgstr "" - -#, php-format -msgid "%d comments found" -msgstr "" - -msgid "This entry does not exist or is not published" -msgstr "" - -msgid "All pings sent." -msgstr "" - -#, php-format -msgid "Back to \"%s\"" -msgstr "" - -msgid "Auto discover ping URLs" -msgstr "" - -msgid "URLs to ping:" -msgstr "" - -msgid "Send excerpt:" -msgstr "" - -msgid "Previously sent pings" -msgstr "" - -msgid "Dotclear update" -msgstr "" - -#, php-format -msgid "Unable to delete file %s" -msgstr "" - -#, php-format -msgid "Downloaded Dotclear archive seems to be corrupted. Try download it again." -msgstr "" - -msgid "The following files of your Dotclear installation have been modified so we won't try to update your installation. Please try to update manually." -msgstr "" - -#, php-format -msgid "The following files of your Dotclear installation are not readable. Please fix this or try to make a backup file named %s manually." -msgstr "" - -msgid "The following files of your Dotclear installation cannot be written. Please fix this or try to update manually." -msgstr "" - -msgid "No newer Dotclear version available." -msgstr "" - -#, php-format -msgid "Dotclear %s is available." -msgstr "" - -msgid "To upgrade your Dotclear installation simply click on the following button. A backup file of your current installation will be created in your root directory." -msgstr "" - -msgid "Update Dotclear" -msgstr "" - -msgid "Update backup files" -msgstr "" - -msgid "The following files are backups of previously updates. You can revert your previous installation or delete theses files." -msgstr "" - -msgid "Please note that reverting your Dotclear version may have some unwanted side-effects. Consider reverting only if you experience strong issues with this new version." -msgstr "" - -#, php-format -msgid "You should not revert to version prior to last one (%s)." -msgstr "" - -msgid "Delete selected file" -msgstr "" - -msgid "Revert to selected file" -msgstr "" - -msgid "Congratulations, you're one click away from the end of the update." -msgstr "" - -msgid "Finish the update." -msgstr "" - -msgid "new user" -msgstr "" - -#, php-format -msgid "User \"%s\" already exists." -msgstr "" - -msgid "User has been successfully updated." -msgstr "" - -msgid "User has been successfully created." -msgstr "" - -msgid "Warning:" -msgstr "" - -msgid "If you change your username, you will have to log in again." -msgstr "" - -msgid "Mandatory for password recovering procedure." -msgstr "" - -msgid "Password change required to connect" -msgstr "" - -msgid "Save and create another" -msgstr "" - -msgid "No permissions." -msgstr "" - -msgid "Add new permissions" -msgstr "" - -msgid "Username" -msgstr "" - -msgid "Last Name" -msgstr "" - -msgid "First Name" -msgstr "" - -msgid "Display name" -msgstr "" - -msgid "Number of entries" -msgstr "" - -msgid "users" -msgstr "" - -msgid "User has been successfully removed." -msgstr "" - -msgid "Create a new user" -msgstr "" - -msgid "Users per page" -msgstr "" - -msgid "Selected users action:" -msgstr "" - -msgid "Blog:" -msgstr "" - -msgid "Change blog" -msgstr "" - -msgid "Blogs:" -msgstr "" - -msgid "Go to site" -msgstr "" - -msgid "My dashboard" -msgstr "" - -#, php-format -msgid "Logout %s" -msgstr "" - -msgid "Safe mode" -msgstr "" - -msgid "You are in safe mode. All plugins have been temporarily disabled. Remind to log out then log in again normally to get back all functionalities" -msgstr "" - -#, php-format -msgid "Thank you for using %s." -msgstr "" - -msgid "Help" -msgstr "" - -msgid "uncover" -msgstr "" - -msgid "hide" -msgstr "" - -msgid "help" -msgstr "" - -msgid "no selection" -msgstr "" - -msgid "select all" -msgstr "" - -msgid "invert selection" -msgstr "" - -msgid "view entry" -msgstr "" - -#, php-format -msgid "Are you sure you want to delete selected entries (%s)?" -msgstr "" - -msgid "Are you sure you want to delete this entry?" -msgstr "" - -#, php-format -msgid "Are you sure you want to delete selected comments (%s)?" -msgstr "" - -msgid "Are you sure you want to delete this comment?" -msgstr "" - -msgid "Users with posts cannot be deleted." -msgstr "" - -#, php-format -msgid "Are you sure you want to delete selected users (%s)?" -msgstr "" - -#, php-format -msgid "Are you sure you want to delete category \"%s\"?" -msgstr "" - -msgid "Are you sure you want to reorder all categories?" -msgstr "" - -#, php-format -msgid "Are you sure you want to remove media \"%s\"?" -msgstr "" - -msgid "Are you sure you want to extract archive in current directory?" -msgstr "" - -#, php-format -msgid "Are you sure you want to remove attachment \"%s\"?" -msgstr "" - -#, php-format -msgid "Are you sure you want to delete \"%s\" language?" -msgstr "" - -#, php-format -msgid "Are you sure you want to delete \"%s\" plugin?" -msgstr "" - -msgid "Use this theme" -msgstr "" - -msgid "Remove this theme" -msgstr "" - -#, php-format -msgid "Are you sure you want to delete \"%s\" theme?" -msgstr "" - -msgid "Zip file content" -msgstr "" - -msgid "XHTML markup validator" -msgstr "" - -msgid "XHTML content is valid." -msgstr "" - -msgid "There are XHTML markup errors." -msgstr "" - -msgid "You have unsaved changes. Switch post format will loose these changes. Proceed anyway?" -msgstr "" - -msgid "Loading enhanced uploader, please wait." -msgstr "" - -msgid "You have unsaved changes." -msgstr "" - -msgid "close" -msgstr "" - -msgid "now" -msgstr "" - -msgid "visual" -msgstr "" - -msgid "source" -msgstr "" - -msgid "You can use the following shortcuts to format your text." -msgstr "" - -msgid "-- none --" -msgstr "" - -msgid "-- block format --" -msgstr "" - -msgid "Paragraph" -msgstr "" - -msgid "Level 1 header" -msgstr "" - -msgid "Level 2 header" -msgstr "" - -msgid "Level 3 header" -msgstr "" - -msgid "Level 4 header" -msgstr "" - -msgid "Level 5 header" -msgstr "" - -msgid "Level 6 header" -msgstr "" - -msgid "Strong emphasis" -msgstr "" - -msgid "Emphasis" -msgstr "" - -msgid "Inserted" -msgstr "" - -msgid "Deleted" -msgstr "" - -msgid "Inline quote" -msgstr "" - -msgid "Code" -msgstr "" - -msgid "Line break" -msgstr "" - -msgid "Blockquote" -msgstr "" - -msgid "Preformated text" -msgstr "" - -msgid "Unordered list" -msgstr "" - -msgid "Ordered list" -msgstr "" - -msgid "Link" -msgstr "" - -msgid "URL?" -msgstr "" - -msgid "Language?" -msgstr "" - -msgid "External image" -msgstr "" - -msgid "Media chooser" -msgstr "" - -msgid "Link to an entry" -msgstr "" - -msgid "Activate enhanced uploader" -msgstr "" - -msgid "Disable enhanced uploader" -msgstr "" - -msgid "File successfully uploaded." -msgstr "" - -msgid "Maximum file size allowed:" -msgstr "" - -msgid "Limit exceeded." -msgstr "" - -msgid "File size exceeds allowed limit." -msgstr "" - -msgid "Canceled." -msgstr "" - -msgid "HTTP Error:" -msgstr "" - -msgid "Choose file" -msgstr "" - -msgid "Choose files" -msgstr "" - -msgid "Clean" -msgstr "" - -msgid "Upload" -msgstr "" - -msgid "No file in queue." -msgstr "" - -msgid "1 file in queue." -msgstr "" - -#, php-format -msgid "%d files in queue." -msgstr "" - -msgid "Queue error:" -msgstr "" - -msgid "«prev." -msgstr "" - -msgid "next»" -msgstr "" - -msgid "No entry" -msgstr "" - -msgid "scheduled" -msgstr "" - -msgid "protected" -msgstr "" - -#, php-format -msgid "%d attachment" -msgstr "" - -#, php-format -msgid "%d attachments" -msgstr "" - -msgid "Type" -msgstr "" - -msgid "No user" -msgstr "" - -msgid "admin" -msgstr "" - -msgid "superadmin" -msgstr "" - -msgid "Database error" -msgstr "" - -msgid "There seems to be no Session table in your database. Is Dotclear completly installed?" -msgstr "" - -msgid "System" -msgstr "" - -msgid "Blog" -msgstr "" - -msgid "Updates" -msgstr "" - -msgid "Languages" -msgstr "" - -msgid "administrator" -msgstr "" - -msgid "manage their own entries and comments" -msgstr "" - -msgid "publish entries and comments" -msgstr "" - -msgid "delete entries and comments" -msgstr "" - -msgid "manage all entries and comments" -msgstr "" - -msgid "manage categories" -msgstr "" - -msgid "manage their own media items" -msgstr "" - -msgid "manage all media items" -msgstr "" - -msgid "That user does not exist in the database." -msgstr "" - -msgid "That key does not exist in the database." -msgstr "" - -msgid "You are not allowed to add categories" -msgstr "" - -msgid "You are not allowed to update categories" -msgstr "" - -msgid "You are not allowed to delete categories" -msgstr "" - -msgid "This category is not empty." -msgstr "" - -msgid "Category URL must be unique." -msgstr "" - -msgid "You must provide a category title" -msgstr "" - -msgid "You must provide a category URL" -msgstr "" - -msgid "You are not allowed to create an entry" -msgstr "" - -msgid "You are not allowed to update entries" -msgstr "" - -msgid "No such entry ID" -msgstr "" - -msgid "You are not allowed to edit this entry" -msgstr "" - -msgid "You are not allowed to change this entry status" -msgstr "" - -msgid "You are not allowed to change this entry category" -msgstr "" - -msgid "You are not allowed to mark this entry as selected" -msgstr "" - -msgid "You are not allowed to delete entries" -msgstr "" - -msgid "You are not allowed to delete this entry" -msgstr "" - -msgid "No entry title" -msgstr "" - -msgid "No entry content" -msgstr "" - -msgid "Empty entry URL" -msgstr "" - -msgid "You are not allowed to update comments" -msgstr "" - -msgid "No such comment ID" -msgstr "" - -msgid "You are not allowed to update this comment" -msgstr "" - -msgid "You are not allowed to change this comment's status" -msgstr "" - -msgid "You are not allowed to delete comments" -msgstr "" - -msgid "You are not allowed to delete this comment" -msgstr "" - -msgid "You must provide a comment" -msgstr "" - -msgid "You must provide an author name" -msgstr "" - -msgid "Email address is not valid." -msgstr "" - -msgid "online" -msgstr "" - -msgid "offline" -msgstr "" - -msgid "removed" -msgstr "" - -msgid "You are not an administrator" -msgstr "" - -msgid "Invalid user language code" -msgstr "" - -msgid "Blog ID must contain at least 2 characters using letters, numbers or symbols." -msgstr "" - -msgid "No blog name" -msgstr "" - -msgid "No blog URL" -msgstr "" - -msgid "No log message" -msgstr "" - -msgid "unknown" -msgstr "" - -msgid "No blog defined." -msgstr "" - -#, php-format -msgid "Directory %s does not exist." -msgstr "" - -msgid "You are not a super administrator." -msgstr "" - -msgid "Permission denied." -msgstr "" - -msgid "You are not the file owner." -msgstr "" - -msgid "This file is not allowed." -msgstr "" - -msgid "New file already exists." -msgstr "" - -msgid "File does not exist in the database." -msgstr "" - -#, php-format -msgid "Extract destination directory %s already exists." -msgstr "" - -msgid "Embedded Audio Player" -msgstr "" - -msgid "Embedded Video Player" -msgstr "" - -#, php-format -msgid "%s: in [%s] and [%s]" -msgstr "" - -msgid "Empty module zip file." -msgstr "" - -msgid "The zip file does not appear to be a valid Dotclear module." -msgstr "" - -msgid "An error occurred during module deletion." -msgstr "" - -#, php-format -msgid "Unable to upgrade \"%s\". (same version)" -msgstr "" - -msgid "Unable to read new _define.php file" -msgstr "" - -msgid "No such module." -msgstr "" - -msgid "Cannot remove module files" -msgstr "" - -msgid "Cannot deactivate plugin." -msgstr "" - -msgid "Cannot activate plugin." -msgstr "" - -#, php-format -msgid "Invalid setting dcNamespace: %s" -msgstr "" - -msgid "Unable to retrieve settings:" -msgstr "" - -#, php-format -msgid "%s is not a valid setting id" -msgstr "" - -msgid "No namespace specified" -msgstr "" - -msgid "Unable to retrieve workspaces:" -msgstr "" - -msgid "Unable to retrieve namespaces:" -msgstr "" - -#, php-format -msgid "Invalid setting namespace: %s" -msgstr "" - -#, php-format -msgid "%s has still been pinged" -msgstr "" - -msgid "Unable to ping URL" -msgstr "" - -#, php-format -msgid "%s is not a ping URL" -msgstr "" - -#, php-format -msgid "%s, ping error:" -msgstr "" - -msgid "Digests file not found." -msgstr "" - -msgid "No file to download" -msgstr "" - -msgid "Root directory is not writable." -msgstr "" - -msgid "An error occurred while downloading archive." -msgstr "" - -msgid "Archive not found." -msgstr "" - -msgid "Unable to read current digests file." -msgstr "" - -msgid "Downloaded file does not seem to be a valid archive." -msgstr "" - -msgid "Incomplete archive." -msgstr "" - -msgid "Unable to read digests file." -msgstr "" - -msgid "Invalid digests file." -msgstr "" - -#, php-format -msgid "Invalid dcWorkspace: %s" -msgstr "" - -msgid "Unable to retrieve prefs:" -msgstr "" - -#, php-format -msgid "%s is not a valid pref id" -msgstr "" - -msgid "No workspace specified" -msgstr "" - -msgid "SQLite Database Schema cannot be upgraded." -msgstr "" - -msgid "Something went wrong with auto upgrade:" -msgstr "" - -msgid "Unable to open directory." -msgstr "" - -msgid "Unable to create directory." -msgstr "" - -msgid "File is not writable." -msgstr "" - -msgid "Unable to open file." -msgstr "" - -msgid "Not an uploaded file." -msgstr "" - -msgid "The uploaded file exceeds the maximum file size allowed." -msgstr "" - -msgid "The uploaded file was only partially uploaded." -msgstr "" - -msgid "No file was uploaded." -msgstr "" - -msgid "Missing a temporary folder." -msgstr "" - -msgid "Failed to write file to disk." -msgstr "" - -#, php-format -msgid "%s is not a directory." -msgstr "" - -msgid "Bad range" -msgstr "" - -msgid "Invalid range" -msgstr "" - -msgid "Invalid line number" -msgstr "" - -msgid "Chunk is out of range" -msgstr "" - -msgid "Bad context" -msgstr "" - -msgid "Bad context (in deletion)" -msgstr "" - -msgid "Invalid diff format" -msgstr "" - -msgid "Uploading this file is not allowed." -msgstr "" - -msgid "Destination directory is not in jail." -msgstr "" - -msgid "File already exists." -msgstr "" - -msgid "Cannot write in this directory." -msgstr "" - -msgid "An error occurred while writing the file." -msgstr "" - -msgid "Source file does not exist." -msgstr "" - -msgid "File is not in jail." -msgstr "" - -msgid "Destination directory is not writable." -msgstr "" - -msgid "Unable to rename file." -msgstr "" - -msgid "File cannot be removed." -msgstr "" - -msgid "Directory is not in jail." -msgstr "" - -msgid "Directory cannot be removed." -msgstr "" - -msgid "Not enough memory to open image." -msgstr "" - -#, php-format -msgid "File %s is not compressed in the zip." -msgstr "" - -#, php-format -msgid "Trying to unzip a folder name %s" -msgstr "" - -msgid "Unable to write destination file." -msgstr "" - -msgid "Unable to write in target directory, permission denied." -msgstr "" - -msgid "Not enough memory to open file." -msgstr "" - -msgid "File does not exist" -msgstr "" - -msgid "Cannot read file" -msgstr "" - -msgid "Directory does not exist" -msgstr "" - -msgid "Cannot read directory" -msgstr "" - -msgid "Unable to connect to database" -msgstr "" - -#, php-format -msgid "

      This either means that the username and password information in your config.php file is incorrect or we can't contact the database server at \"%s\". This could mean your host's database server is down.

      • Are you sure you have the correct username and password?
      • Are you sure that you have typed the correct hostname?
      • Are you sure that the database server is running?

      If you're unsure what these terms mean you should probably contact your host. If you still need help you can always visit the Dotclear Support Forums.

      " -msgstr "" - -msgid "The following error was encountered while trying to read the database:" -msgstr "" diff --git a/v2/dotclear/locales/en/plugins.lang.php b/v2/dotclear/locales/en/plugins.lang.php deleted file mode 100644 index 0bb1271..0000000 --- a/v2/dotclear/locales/en/plugins.lang.php +++ /dev/null @@ -1,45 +0,0 @@ - \ No newline at end of file diff --git a/v2/dotclear/locales/en/plugins.po b/v2/dotclear/locales/en/plugins.po deleted file mode 100644 index 55a7780..0000000 --- a/v2/dotclear/locales/en/plugins.po +++ /dev/null @@ -1,1573 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# This file is put in the public domain. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: Dotclear 2\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-06 18:11+0100\n" -"PO-Revision-Date: 2011-10-25 15:52+0100\n" -"Last-Translator: Franck Paul \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "no" -msgstr "" - -msgid "yes" -msgstr "" - -msgid "Configuration successfully updated" -msgstr "" - -msgid "Settings definition successfully updated" -msgstr "" - -msgid "blog settings" -msgstr "" - -msgid "Value" -msgstr "" - -msgid "Description" -msgstr "" - -msgid "Goto:" -msgstr "" - -msgid "Ok" -msgstr "" - -msgid "global settings" -msgstr "" - -msgid "Akismet spam filter" -msgstr "" - -#, php-format -msgid "Filtered by %s." -msgstr "" - -msgid "Akismet API key:" -msgstr "" - -msgid "API key verified" -msgstr "" - -msgid "API key not verified" -msgstr "" - -msgid "Get your own API key" -msgstr "" - -msgid "Antispam" -msgstr "" - -msgid "Delete junk comments older than" -msgstr "" - -msgid "days" -msgstr "" - -msgid "IP Blacklist / Whitelist Filter" -msgstr "" - -#, php-format -msgid "Filtered by %1$s with rule %2$s." -msgstr "" - -msgid "IP address has been successfully added." -msgstr "" - -msgid "IP addresses have been successfully removed." -msgstr "" - -msgid "Blacklist" -msgstr "" - -msgid "Whitelist" -msgstr "" - -msgid "Add an IP address: " -msgstr "" - -msgid "Global IP" -msgstr "" - -msgid "Add" -msgstr "" - -msgid "No IP address in list." -msgstr "" - -msgid "IP list" -msgstr "" - -msgid "Checks sender IP address against DNSBL servers" -msgstr "" - -#, php-format -msgid "Filtered by %1$s with server %2$s." -msgstr "" - -msgid "IP Lookup servers" -msgstr "" - -msgid "Add here a coma separated list of servers." -msgstr "" - -msgid "Checks links in comments against surbl.org" -msgstr "" - -msgid "Words Blacklist" -msgstr "" - -#, php-format -msgid "Filtered by %1$s with word %2$s." -msgstr "" - -msgid "Words have been successfully added." -msgstr "" - -msgid "Word has been successfully added." -msgstr "" - -msgid "Words have been successfully removed." -msgstr "" - -msgid "Add a word " -msgstr "" - -msgid "Global word" -msgstr "" - -msgid "No word in list." -msgstr "" - -msgid "List of bad words" -msgstr "" - -msgid "Delete selected words" -msgstr "" - -msgid "Create default wordlist" -msgstr "" - -msgid "This word exists" -msgstr "" - -msgid "No description" -msgstr "" - -#, php-format -msgid "Filtered by %1$s (%2$s)" -msgstr "" - -msgid "Unknown filter." -msgstr "" - -msgid "This comment is a spam:" -msgstr "" - -#, php-format -msgid "(including %d spam comment)" -msgstr "" - -#, php-format -msgid "(including %d spam comments)" -msgstr "" - -msgid "Spam moderation" -msgstr "" - -msgid "Spam" -msgstr "" - -msgid "Ham" -msgstr "" - -msgid "Filter does not exist." -msgstr "" - -msgid "Filter has no user interface." -msgstr "" - -#, php-format -msgid "%s configuration" -msgstr "" - -msgid "Information" -msgstr "" - -msgid "Spam comments have been successfully deleted." -msgstr "" - -msgid "Junk comments:" -msgstr "" - -msgid "Published comments:" -msgstr "" - -msgid "Delete all spams" -msgstr "" - -#, php-format -msgid "All spam comments older than %s day(s) will be automatically deleted." -msgstr "" - -msgid "You can modify this duration in " -msgstr "" - -msgid "Blog preferences" -msgstr "" - -msgid "Filters configuration has been successfully saved." -msgstr "" - -msgid "Available spam filters" -msgstr "" - -msgid "Order" -msgstr "" - -msgid "Active" -msgstr "" - -msgid "Auto Del." -msgstr "" - -msgid "Filter name" -msgstr "" - -msgid "Filter configuration" -msgstr "" - -msgid "position" -msgstr "" - -msgid "Syndication" -msgstr "" - -msgid "Junk comments RSS feed" -msgstr "" - -msgid "Published comments RSS feed" -msgstr "" - -msgid "Attachments" -msgstr "" - -msgid "remove" -msgstr "" - -msgid "No attachment." -msgstr "" - -msgid "Add files to this entry" -msgstr "" - -msgid "Blogroll" -msgstr "" - -msgid "manage blogroll" -msgstr "" - -msgid "Links" -msgstr "" - -msgid "All categories" -msgstr "" - -msgid "Home page only" -msgstr "" - -msgid "You must provide a link title" -msgstr "" - -msgid "You must provide a link URL" -msgstr "" - -msgid "You need to provide a XBEL or OPML file." -msgstr "" - -msgid "File is not in XML format." -msgstr "" - -msgid "No such link or title" -msgstr "" - -msgid "Return to blogroll" -msgstr "" - -msgid "Category has been successfully updated" -msgstr "" - -msgid "Edit category" -msgstr "" - -msgid "Link has been successfully updated" -msgstr "" - -msgid "Edit link" -msgstr "" - -msgid "XFN" -msgstr "" - -msgid "_xfn_Me" -msgstr "Me" - -msgid "_xfn_Another link for myself" -msgstr "Another link for myself" - -msgid "_xfn_Friendship" -msgstr "Friendship" - -msgid "_xfn_Contact" -msgstr "Contact" - -msgid "_xfn_Acquaintance" -msgstr "Acquaintance" - -msgid "_xfn_Friend" -msgstr "Friend" - -msgid "_xfn_Physical" -msgstr "Physical" - -msgid "_xfn_Met" -msgstr "Met" - -msgid "_xfn_Professional" -msgstr "Professional" - -msgid "_xfn_Co-worker" -msgstr "Co-worker" - -msgid "_xfn_Colleague" -msgstr "Colleague" - -msgid "_xfn_Geographical" -msgstr "Geographical" - -msgid "_xfn_Co-resident" -msgstr "Co-resident" - -msgid "_xfn_Neighbor" -msgstr "Neighbor" - -msgid "_xfn_Family" -msgstr "Family" - -msgid "_xfn_Child" -msgstr "Child" - -msgid "_xfn_Parent" -msgstr "Parent" - -msgid "_xfn_Sibling" -msgstr "Sibling" - -msgid "_xfn_Spouse" -msgstr "Spouse" - -msgid "_xfn_Kin" -msgstr "Kin" - -msgid "_xfn_Romantic" -msgstr "Romantic" - -msgid "_xfn_Muse" -msgstr "Muse" - -msgid "_xfn_Crush" -msgstr "Crush" - -msgid "_xfn_Date" -msgstr "Date" - -msgid "_xfn_Sweetheart" -msgstr "Sweetheart" - -msgid "Nothing to import" -msgstr "" - -msgid "Import operation cancelled." -msgstr "" - -msgid "Items order has been successfully updated" -msgstr "" - -msgid "Items have been successfully removed." -msgstr "" - -msgid "Link has been successfully created." -msgstr "" - -msgid "category has been successfully created." -msgstr "" - -msgid "links have been successfully imported." -msgstr "" - -msgid "URL" -msgstr "" - -msgid "Lang" -msgstr "" - -msgid "select this link" -msgstr "" - -msgid "Delete selected links" -msgstr "" - -msgid "Are you sure you want to delete selected links?" -msgstr "" - -msgid "The link list is empty." -msgstr "" - -msgid "Add a new link" -msgstr "" - -msgid "Add a category" -msgstr "" - -msgid "Import links" -msgstr "" - -msgid "OPML or XBEL File:" -msgstr "" - -msgid "Import" -msgstr "" - -msgid "Light linear gradient" -msgstr "" - -msgid "Medium linear gradient" -msgstr "" - -msgid "Dark linear gradient" -msgstr "" - -msgid "Solid color" -msgstr "" - -msgid "Custom..." -msgstr "" - -msgid "Blowup configuration" -msgstr "" - -msgid "Predefined styles" -msgstr "" - -msgid "Apply code" -msgstr "" - -msgid "Choose a predefined style" -msgstr "" - -msgid "For the following reasons, images cannot be created. You won't be able to change some background properties." -msgstr "" - -msgid "Theme configuration has been successfully updated." -msgstr "" - -msgid "General" -msgstr "" - -msgid "Background color:" -msgstr "" - -msgid "Background color fill:" -msgstr "" - -msgid "Main text font:" -msgstr "" - -msgid "Main text font size:" -msgstr "" - -msgid "Main text color:" -msgstr "" - -msgid "Text line height:" -msgstr "" - -msgid "Links color:" -msgstr "" - -msgid "Visited links color:" -msgstr "" - -msgid "Focus links color:" -msgstr "" - -msgid "Page top" -msgstr "" - -msgid "Prelude color:" -msgstr "" - -msgid "Hide main title" -msgstr "" - -msgid "Main title font:" -msgstr "" - -msgid "Main title font size:" -msgstr "" - -msgid "Main title color:" -msgstr "" - -msgid "Main title alignment:" -msgstr "" - -msgid "center" -msgstr "" - -msgid "left" -msgstr "" - -msgid "right" -msgstr "" - -msgid "Main title position (x:y)" -msgstr "" - -msgid "Top image" -msgstr "" - -msgid "Choose \"Custom...\" to upload your own image." -msgstr "" - -msgid "Add your image:" -msgstr "" - -#, php-format -msgid "JPEG or PNG file, 800 pixels wide, maximum size %s" -msgstr "" - -msgid "Sidebar" -msgstr "" - -msgid "Sidebar position:" -msgstr "" - -msgid "Sidebar text font:" -msgstr "" - -msgid "Sidebar text font size:" -msgstr "" - -msgid "Sidebar text color:" -msgstr "" - -msgid "Sidebar titles font:" -msgstr "" - -msgid "Sidebar titles font size:" -msgstr "" - -msgid "Sidebar titles color:" -msgstr "" - -msgid "Sidebar 2nd level titles font:" -msgstr "" - -msgid "Sidebar 2nd level titles font size:" -msgstr "" - -msgid "Sidebar 2nd level titles color:" -msgstr "" - -msgid "Sidebar lines color:" -msgstr "" - -msgid "Sidebar links color:" -msgstr "" - -msgid "Sidebar visited links color:" -msgstr "" - -msgid "Sidebar focus links color:" -msgstr "" - -msgid "Date title font:" -msgstr "" - -msgid "Date title font size:" -msgstr "" - -msgid "Date title color:" -msgstr "" - -msgid "Entry title font:" -msgstr "" - -msgid "Entry title font size:" -msgstr "" - -msgid "Entry title color:" -msgstr "" - -msgid "Comment background color:" -msgstr "" - -msgid "Comment text color:" -msgstr "" - -msgid "My comment background color:" -msgstr "" - -msgid "My comment text color:" -msgstr "" - -msgid "Footer" -msgstr "" - -msgid "Footer font:" -msgstr "" - -msgid "Footer font size:" -msgstr "" - -msgid "Footer color:" -msgstr "" - -msgid "Footer links color:" -msgstr "" - -msgid "Footer background color:" -msgstr "" - -msgid "Additional CSS" -msgstr "" - -msgid "Configuration import / export" -msgstr "" - -msgid "You can share your configuration using the following code. To apply a configuration, paste the code, click on \"Apply code\" and save." -msgstr "" - -msgid "Copy this code:" -msgstr "" - -msgid "default" -msgstr "" - -msgid "At least one of the following functions is not available: imagecreatetruecolor, imagepng & imagecreatefrompng." -msgstr "" - -msgid "The 'public' directory does not exist." -msgstr "" - -#, php-format -msgid "The '%s' directory cannot be modified." -msgstr "" - -msgid "Unable to create images." -msgstr "" - -msgid "Invalid file type." -msgstr "" - -msgid "Uploaded image is not 800 pixels wide." -msgstr "" - -msgid "Unable to open image." -msgstr "" - -msgid "Checks trackback source for a link to the post" -msgstr "" - -msgid "Import/Export" -msgstr "" - -msgid "Flat file export" -msgstr "" - -msgid "Exports a blog or a full Dotclear installation to flat file." -msgstr "" - -msgid "Export file not found." -msgstr "" - -msgid "Export a blog" -msgstr "" - -#, php-format -msgid "This will create an export of your current blog: %s" -msgstr "" - -msgid "Export" -msgstr "" - -msgid "You may also want to download your media directory as a zip file" -msgstr "" - -msgid "Export all content" -msgstr "" - -msgid "Congratulation!" -msgstr "" - -msgid "Your blog has been successfully imported. Welcome on Dotclear 2!" -msgstr "" - -msgid "Why don't you blog this now?" -msgstr "" - -msgid "or" -msgstr "" - -msgid "visit your dashboard" -msgstr "" - -msgid "Dotclear 1.2 import" -msgstr "" - -msgid "Import a Dotclear 1.2 installation into your current blog." -msgstr "" - -#, php-format -msgid "This will import your Dotclear 1.2 content as new content in the current blog: %s." -msgstr "" - -msgid "Please note that this process will empty your categories, blogroll, entries and comments on the current blog." -msgstr "" - -msgid "Depending on the size of your blog, it could take a few minutes." -msgstr "" - -msgid "General information" -msgstr "" - -msgid "Import my blog now" -msgstr "" - -msgid "We first need some information about your old Dotclear 1.2 installation." -msgstr "" - -msgid "Entries import options" -msgstr "" - -msgid "Number of entries to import at once:" -msgstr "" - -msgid "Importing users" -msgstr "" - -msgid "Importing categories" -msgstr "" - -msgid "Importing blogroll" -msgstr "" - -#, php-format -msgid "Importing entries from %d to %d / %d" -msgstr "" - -msgid "Please read carefully" -msgstr "" - -msgid "Every newly imported user has received a random password and will need to ask for a new one by following the \"I forgot my password\" link on the login page (Their registered email address has to be valid.)" -msgstr "" - -#, php-format -msgid "Please note that Dotclear 2 has a new URL layout. You can avoid broken links by installing DC1 redirect plugin and activate it in your blog configuration." -msgstr "" - -msgid "next step" -msgstr "" - -msgid "Dotclear tables not found" -msgstr "" - -msgid "Feed import" -msgstr "" - -msgid "Imports a feed as new entries." -msgstr "" - -msgid "Cannot retrieve feed URL." -msgstr "" - -msgid "No items in feed." -msgstr "" - -msgid "Content successfully imported." -msgstr "" - -msgid "Import from a feed" -msgstr "" - -#, php-format -msgid "This will import a feed (RSS or Atom) a as new content in the current blog: %s." -msgstr "" - -msgid "Feed URL:" -msgstr "" - -msgid "Flat file import" -msgstr "" - -msgid "Imports a blog or a full Dotclear installation from flat file." -msgstr "" - -msgid "Single blog successfully imported." -msgstr "" - -msgid "Are you sure you want to import a full backup file?" -msgstr "" - -msgid "Import a single blog" -msgstr "" - -#, php-format -msgid "This will import a single blog backup as new content in the current blog: %s." -msgstr "" - -msgid "Upload a backup file" -msgstr "" - -msgid "or pick up a local file in your public directory" -msgstr "" - -msgid "Import a full backup file" -msgstr "" - -msgid "Warning: This will reset all the content of your database, except users." -msgstr "" - -msgid "WordPress import" -msgstr "" - -msgid "Import a WordPress installation into your current blog." -msgstr "" - -#, php-format -msgid "This will import your WordPress content as new content in the current blog: %s." -msgstr "" - -msgid "We first need some information about your old WordPress installation." -msgstr "" - -msgid "WordPress and Dotclear's handling of categories are quite different. You can assign several categories to a single post in WordPress. In the Dotclear world, we see it more like \"One category, several tags.\" Therefore Dotclear can only import one category per post and will chose the lowest numbered one. If you want to keep a trace of every category, you can import them as tags, with an optional prefix." -msgstr "" - -msgid "On the other hand, in WordPress, a post can not be uncategorized, and a default installation has a first category labelised \"Uncategorized\". If you did not change that category, you can just ignore it while importing your blog, as Dotclear allows you to actually keep your posts uncategorized." -msgstr "" - -msgid "Ignore the first category:" -msgstr "" - -msgid "Import lowest numbered category on posts:" -msgstr "" - -msgid "Import all categories as tags:" -msgstr "" - -msgid "Prefix such tags with:" -msgstr "" - -msgid "Content filters" -msgstr "" - -msgid "You may want to process your post and/or comment content with the following filters." -msgstr "" - -msgid "Post content formatter:" -msgstr "" - -msgid "Comment content formatter:" -msgstr "" - -msgid "WordPress tables not found" -msgstr "" - -msgid "No file to read." -msgstr "" - -msgid "File is not a DotClear backup." -msgstr "" - -msgid "File is not a single blog export." -msgstr "" - -msgid "File is not a full export." -msgstr "" - -msgid "The backup file does not appear to be well formed." -msgstr "" - -msgid "Please wait..." -msgstr "" - -msgid "Maintenance" -msgstr "" - -msgid "Optimization successful." -msgstr "" - -msgid "Comments and trackback counted." -msgstr "" - -msgid "Templates cache directory emptied." -msgstr "" - -msgid "Logs deleted." -msgstr "" - -#, php-format -msgid "Indexing entry %d to %d." -msgstr "" - -msgid "next" -msgstr "" - -msgid "Entries index done." -msgstr "" - -msgid "Back" -msgstr "" - -#, php-format -msgid "Indexing comment %d to %d." -msgstr "" - -msgid "Comments index done." -msgstr "" - -msgid "Optimize database room" -msgstr "" - -msgid "Vacuum tables" -msgstr "" - -msgid "Counters" -msgstr "" - -msgid "Reset comments and ping counters" -msgstr "" - -msgid "Search engine index" -msgstr "" - -msgid "This may take a very long time" -msgstr "" - -msgid "Index all posts" -msgstr "" - -msgid "Index all comments" -msgstr "" - -msgid "Vacuum logs" -msgstr "" - -msgid "Delete all logs" -msgstr "" - -msgid "Empty templates cache directory" -msgstr "" - -msgid "Empty directory" -msgstr "" - -msgid "Pages" -msgstr "" - -#, php-format -msgid "%d page" -msgstr "" - -#, php-format -msgid "%d pages" -msgstr "" - -msgid "manage pages" -msgstr "" - -msgid "Published on" -msgstr "" - -msgid "This page's comments feed" -msgstr "" - -msgid "You must provide a valid email address." -msgstr "" - -msgid "Page title" -msgstr "" - -msgid "Page position" -msgstr "" - -msgid "Publication date" -msgstr "" - -msgid "No page" -msgstr "" - -msgid "select this page" -msgstr "" - -msgid "Are you sure you want to delete selected pages?" -msgstr "" - -msgid "New page" -msgstr "" - -msgid "Selected pages action:" -msgstr "" - -msgid "This page does not exist." -msgstr "" - -msgid "Edit page" -msgstr "" - -msgid "next page" -msgstr "" - -msgid "previous page" -msgstr "" - -msgid "Are you sure you want to delete this page?" -msgstr "" - -msgid "Page has been successfully updated." -msgstr "" - -msgid "Page has been successfully created." -msgstr "" - -msgid "Go to this page on the site" -msgstr "" - -msgid "Page status:" -msgstr "" - -msgid "Page position:" -msgstr "" - -msgid "Page lang:" -msgstr "" - -msgid "Page password:" -msgstr "" - -msgid "Warning: If you set the URL manually, it may conflict with another page." -msgstr "" - -msgid "Add files to this page" -msgstr "" - -msgid "Pings" -msgstr "" - -msgid "Pings configuration" -msgstr "" - -msgid "Settings have been successfully updated." -msgstr "" - -msgid "Activate pings extension" -msgstr "" - -msgid "Service name:" -msgstr "" - -msgid "Service URI:" -msgstr "" - -msgid "error" -msgstr "" - -msgid "Test ping services" -msgstr "" - -msgid "Check all" -msgstr "" - -msgid "Pings:" -msgstr "" - -msgid "Simple menu" -msgstr "" - -msgid "Menu" -msgstr "" - -msgid "All months" -msgstr "" - -msgid "All tags" -msgstr "" - -msgid "Home" -msgstr "" - -msgid "Archive" -msgstr "" - -msgid "Page" -msgstr "" - -msgid "Tags" -msgstr "" - -msgid "User defined" -msgstr "" - -msgid "Label" -msgstr "" - -msgid "Recent posts" -msgstr "" - -#, php-format -msgid "Switch to %s language" -msgstr "" - -msgid "Recent Posts from this category" -msgstr "" - -msgid "Archives" -msgstr "" - -#, php-format -msgid "Posts from %s" -msgstr "" - -#, php-format -msgid "Recent posts for %s tag" -msgstr "" - -msgid "Label and URL of menu item are mandatory." -msgstr "" - -msgid "No menu items selected." -msgstr "" - -msgid "Label is mandatory." -msgstr "" - -msgid "URL is mandatory." -msgstr "" - -msgid "Menu item has been successfully added." -msgstr "" - -msgid "Menu items have been successfully removed." -msgstr "" - -msgid "Menu items have been successfully updated." -msgstr "" - -msgid "Add item" -msgstr "" - -msgid "Select type" -msgstr "" - -msgid "Type of item menu:" -msgstr "" - -msgid "Continue..." -msgstr "Continue…" - -msgid "Select language:" -msgstr "" - -msgid "Select category:" -msgstr "" - -msgid "Select month (if necessary):" -msgstr "" - -msgid "Select page:" -msgstr "" - -msgid "Select tag (if necessary):" -msgstr "" - -msgid "Label of item menu:" -msgstr "" - -msgid "Description of item menu:" -msgstr "" - -msgid "URL of item menu:" -msgstr "" - -msgid "Add this item" -msgstr "" - -msgid "Add an item" -msgstr "" - -msgid "Menu items list" -msgstr "" - -msgid "Update menu" -msgstr "" - -msgid "Delete selected menu items" -msgstr "" - -msgid "Are you sure you want to remove selected menu items?" -msgstr "" - -msgid "Currently no menu items" -msgstr "" - -msgid "Tags:" -msgstr "" - -#, php-format -msgid "Are you sure you want to remove this %s?" -msgstr "" - -#, php-format -msgid "Add a %s to this entry" -msgstr "" - -msgid "Choose from list" -msgstr "" - -msgid "all" -msgstr "" - -msgid "Tag" -msgstr "" - -msgid "used in %e - frequency %p%" -msgstr "" - -msgid "entry" -msgstr "" - -msgid "entries" -msgstr "" - -msgid "Enter tags separated by coma" -msgstr "" - -msgid "Add tags" -msgstr "" - -msgid "Remove tags" -msgstr "" - -msgid "Add tags to entries" -msgstr "" - -msgid "Tags to add:" -msgstr "" - -msgid "Remove selected tags from entries" -msgstr "" - -msgid "No tags for selected entries" -msgstr "" - -msgid "Following tags have been found in selected entries:" -msgstr "" - -msgid "short" -msgstr "" - -msgid "extended" -msgstr "" - -msgid "Tags list format:" -msgstr "" - -msgid "This tag's comments Atom feed" -msgstr "" - -msgid "This tag's entries Atom feed" -msgstr "" - -msgid "Limit (empty means no limit):" -msgstr "" - -msgid "Entries count" -msgstr "" - -msgid "Tag name" -msgstr "" - -msgid "Link to all tags:" -msgstr "" - -msgid "Edit tag" -msgstr "" - -msgid "Tag has been successfully renamed" -msgstr "" - -msgid "Back to tags list" -msgstr "" - -msgid "Actions for this tag" -msgstr "" - -msgid "Edit tag name:" -msgstr "" - -msgid "Rename" -msgstr "" - -msgid "Delete this tag:" -msgstr "" - -msgid "List of entries with this tag" -msgstr "" - -msgid "Tag has been successfully removed" -msgstr "" - -msgid "No tags on this blog." -msgstr "" - -msgid "Theme Editor" -msgstr "" - -msgid "No file" -msgstr "" - -msgid "File does not exist." -msgstr "" - -#, php-format -msgid "File %s is not readable" -msgstr "" - -#, php-format -msgid "Unable to write file %s. Please check your theme files and folders permissions." -msgstr "" - -msgid "Saving document..." -msgstr "" - -msgid "Document saved" -msgstr "" - -msgid "An error occurred:" -msgstr "" - -#, php-format -msgid "Your current theme on this blog is \"%s\"." -msgstr "" - -msgid "You can't edit default theme." -msgstr "" - -msgid "Please select a file to edit." -msgstr "" - -msgid "File editor" -msgstr "" - -#, php-format -msgid "Editing file %s" -msgstr "" - -msgid "This file is not writable. Please check your theme files permissions." -msgstr "" - -msgid "Templates files" -msgstr "" - -msgid "CSS files" -msgstr "" - -msgid "JavaScript files" -msgstr "" - -msgid "Preferences successfully updated" -msgstr "" - -msgid "Preferences definition successfully updated" -msgstr "" - -msgid "user preferences" -msgstr "" - -msgid "global preferences" -msgstr "" - -msgid "Presentation widgets" -msgstr "" - -msgid "Search engine" -msgstr "" - -msgid "Navigation links" -msgstr "" - -msgid "Selected entries" -msgstr "" - -msgid "Best of me" -msgstr "" - -msgid "Blog languages" -msgstr "" - -msgid "With entries counts" -msgstr "" - -msgid "Subscribe links" -msgstr "" - -msgid "Subscribe" -msgstr "" - -msgid "Feeds type:" -msgstr "" - -msgid "Feed reader" -msgstr "" - -msgid "Somewhere else" -msgstr "" - -msgid "Entries limit:" -msgstr "" - -msgid "Text" -msgstr "" - -msgid "Text:" -msgstr "" - -msgid "Last entries" -msgstr "" - -msgid "Uncategorized" -msgstr "" - -msgid "Tag:" -msgstr "" - -msgid "Last comments" -msgstr "" - -msgid "Comments limit:" -msgstr "" - -#, php-format -msgid "This blog's entries %s feed" -msgstr "" - -#, php-format -msgid "This blog's comments %s feed" -msgstr "" - -msgid "Entries feed" -msgstr "" - -msgid "Comments feed" -msgstr "" - -msgid "navigation" -msgstr "" - -msgid "extra" -msgstr "" - -msgid "custom" -msgstr "" - -msgid "Widgets" -msgstr "" - -msgid "Are you sure you want to reset sidebars?" -msgstr "" - -msgid "Available widgets" -msgstr "" - -msgid "Append to:" -msgstr "" - -msgid "Add widgets to sidebars" -msgstr "" - -msgid "Navigation sidebar" -msgstr "" - -msgid "Extra sidebar" -msgstr "" - -msgid "Custom sidebar" -msgstr "" - -msgid "Update sidebars" -msgstr "" - -msgid "Reset sidebars" -msgstr "" - -msgid "Use of widgets" -msgstr "" - -msgid "Widgets may be used to add various blocks of content to be displayed on your public pages. To add a widget, drag it from the Available widgets list on the left to one of the sidebars on the right of this page. You can order your widgets in a sidebar by dragging them up or down. You must update sidebars to apply your changes." -msgstr "" - -msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the + sign next to their name." -msgstr "" - -msgid "Reset sidebars to get back to default widgets installation." -msgstr "" - -msgid "Widget templates tags" -msgstr "" - -msgid "If you are allowed to edit your theme templates, you can directly add widgets as templates tags, with their own configuration." -msgstr "" - -msgid "To add a widget in your template, you need to write code like this:" -msgstr "" - -msgid "Widget ID" -msgstr "" - -msgid "Setting name" -msgstr "" - -msgid "Setting value" -msgstr "" - -msgid "Here are the following available widgets for your blog:" -msgstr "" - -msgid "Widget ID:" -msgstr "" - -msgid "No setting for this widget" -msgstr "" - -msgid "Setting name:" -msgstr "" - -msgid "No widget." -msgstr "" - -msgid "order" -msgstr "" - -msgid "Remove widget" -msgstr "" diff --git a/v2/dotclear/locales/en/public.lang.php b/v2/dotclear/locales/en/public.lang.php deleted file mode 100644 index 5b13df9..0000000 --- a/v2/dotclear/locales/en/public.lang.php +++ /dev/null @@ -1,19 +0,0 @@ - \ No newline at end of file diff --git a/v2/dotclear/locales/en/public.po b/v2/dotclear/locales/en/public.po deleted file mode 100644 index 74431fb..0000000 --- a/v2/dotclear/locales/en/public.po +++ /dev/null @@ -1,243 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# This file is put in the public domain. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Dotclear 2\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-13 05:22+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -# Not found strings -msgid "To content" -msgstr "" - -msgid "To menu" -msgstr "" - -msgid "To search" -msgstr "" - -msgid "By" -msgstr "" - -msgid "by" -msgstr "" - -msgid "on" -msgstr "" - -msgid "On" -msgstr "" - -msgid "Continue reading" -msgstr "" - -msgid "no comment" -msgstr "" - -msgid "one comment" -msgstr "" - -msgid "%d comments" -msgstr "" - -msgid "no trackback" -msgstr "" - -msgid "one trackback" -msgstr "" - -msgid "%d trackbacks" -msgstr "" - -msgid "no attachment" -msgstr "" - -msgid "one attachment" -msgstr "" - -msgid "%d attachments" -msgstr "" - -msgid "previous entries" -msgstr "" - -msgid "page" -msgstr "" - -msgid "of" -msgstr "" - -msgid "next entries" -msgstr "" - -msgid "Search" -msgstr "" - -msgid "Your search for %1$s returned no result." -msgstr "" - -msgid "Your search for %1$s returned %2$s result." -msgstr "" - -msgid "Your search for %1$s returned %2$s results." -msgstr "" - -msgid "Home" -msgstr "" - -msgid "All keywords" -msgstr "" - -msgid "Best of me" -msgstr "" - -msgid "Languages" -msgstr "" - -msgid "Categories" -msgstr "" - -msgid "Subcategories" -msgstr "" - -msgid "Archives" -msgstr "" - -msgid "Links" -msgstr "" - -msgid "Subscribe" -msgstr "" - -msgid "Entries feed" -msgstr "" - -msgid "Comments feed" -msgstr "" - -msgid "This blog's comments Atom feed" -msgstr "" - -msgid "This category's entries Atom feed" -msgstr "" - -msgid "This category's comments Atom feed" -msgstr "" - -msgid "This post's comments feed" -msgstr "" - -msgid "This post's comments Atom feed" -msgstr "" - -msgid "Attachments" -msgstr "" - -msgid "Permalink" -msgstr "" - -msgid "Comments" -msgstr "" - -msgid "Your comment" -msgstr "" - -msgid "Your comment has been published." -msgstr "" - -msgid "Your comment has been submitted and will be reviewed for publication." -msgstr "" - -msgid "Add a comment" -msgstr "" - -msgid "Name or nickname" -msgstr "" - -msgid "Email address" -msgstr "" - -msgid "Website" -msgstr "" - -msgid "optional" -msgstr "" - -msgid "Comment" -msgstr "" - -msgid "Comments can be formatted using a simple wiki syntax." -msgstr "" - -msgid "HTML code is displayed as text and web addresses are automatically converted." -msgstr "" - -msgid "Remember me on this blog" -msgstr "" - -msgid "preview" -msgstr "" - -msgid "send" -msgstr "" - -msgid "They posted on the same topic" -msgstr "" - -msgid "Trackback URL" -msgstr "" - -msgid "You must provide an author name" -msgstr "" - -msgid "You must provide a comment" -msgstr "" - -msgid "Email address is not valid" -msgstr "" - -msgid "Document not found" -msgstr "" - -msgid "The document you are looking for does not exist." -msgstr "" - -msgid "Powered by %s" -msgstr "" - -msgid "Subscribe to" -msgstr "" - -msgid "What is an RSS feed?" -msgstr "" - -msgid "RSS feed is a free blog summary. It provides content (either posts or comments) or summaries of content, together with links to the full versions, and other metadata. The last published items may then be read by your favorite RSS aggregator." -msgstr "" - -msgid "Simply copy the following URL into your aggregator:" -msgstr "" - -msgid "Password needed" -msgstr "" - -msgid "You must give a password to access this area." -msgstr "" - -msgid "Password:" -msgstr "" - -msgid "You must provide a valid email address." -msgstr "" - -msgid "Read" -msgstr "" diff --git a/v2/dotclear/locales/en/resources.php b/v2/dotclear/locales/en/resources.php deleted file mode 100644 index 52ce5ec..0000000 --- a/v2/dotclear/locales/en/resources.php +++ /dev/null @@ -1,35 +0,0 @@ - 'http://dotclear.org/documentation/2.0', - 'Dotclear 2 presentation' => 'http://dotclear.org/documentation/2.0/overview/tour', - "User manual" => 'http://dotclear.org/documentation/2.0/usage', - "Installation and administration guides" => 'http://dotclear.org/documentation/2.0/admin', - "Dotclear 2 support forum" => 'http://forum.dotclear.net/' -); - -$__resources['help'] = array( - 'core_blog_pref' => dirname(__FILE__).'/help/blog_pref.html', - 'core_categories' => dirname(__FILE__).'/help/categories.html', - 'core_comments' => dirname(__FILE__).'/help/comments.html', - 'core_media' => dirname(__FILE__).'/help/media.html', - 'core_post' => dirname(__FILE__).'/help/post.html', - 'core_posts' => dirname(__FILE__).'/help/posts.html', - 'core_user_pref' => dirname(__FILE__).'/help/user_pref.html', - 'core_user' => dirname(__FILE__).'/help/user.html', - 'core_wiki' => dirname(__FILE__).'/help/wiki.html' -); -?> \ No newline at end of file diff --git a/v2/dotclear/locales/fr/date.lang.php b/v2/dotclear/locales/fr/date.lang.php deleted file mode 100644 index 1fbb505..0000000 --- a/v2/dotclear/locales/fr/date.lang.php +++ /dev/null @@ -1,58 +0,0 @@ - \ No newline at end of file diff --git a/v2/dotclear/locales/fr/date.po b/v2/dotclear/locales/fr/date.po deleted file mode 100644 index 4ea100b..0000000 --- a/v2/dotclear/locales/fr/date.po +++ /dev/null @@ -1,136 +0,0 @@ -# French translation of DotClear -# Copyright (C) 2006. -# Olivier Meunier , 2006. -msgid "" -msgstr "" -"Project-Id-Version: Dotclear 2\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-04-15 16:27+0200\n" -"PO-Revision-Date: 2008-04-15 16:34+0100\n" -"Last-Translator: Olivier Meunier \n" -"Language-Team: \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Poedit-Language: French\n" - -msgid "%Y-%m-%d %H:%M" -msgstr "%d/%m/%Y %H:%M" - -msgid "_Jan" -msgstr "janv." - -msgid "_Feb" -msgstr "fév." - -msgid "_Mar" -msgstr "mar." - -msgid "_Apr" -msgstr "avr." - -msgid "_May" -msgstr "mai" - -msgid "_Jun" -msgstr "juin" - -msgid "_Jul" -msgstr "juil." - -msgid "_Aug" -msgstr "août" - -msgid "_Sep" -msgstr "sept." - -msgid "_Oct" -msgstr "oct." - -msgid "_Nov" -msgstr "nov." - -msgid "_Dec" -msgstr "déc." - -msgid "January" -msgstr "janvier" - -msgid "February" -msgstr "février" - -msgid "March" -msgstr "mars" - -msgid "April" -msgstr "avril" - -msgid "May" -msgstr "mai" - -msgid "June" -msgstr "juin" - -msgid "July" -msgstr "juillet" - -msgid "August" -msgstr "août" - -msgid "September" -msgstr "septembre" - -msgid "October" -msgstr "octobre" - -msgid "November" -msgstr "novembre" - -msgid "December" -msgstr "décembre" - -msgid "_Mon" -msgstr "lun." - -msgid "_Tue" -msgstr "mar." - -msgid "_Wed" -msgstr "mer." - -msgid "_Thu" -msgstr "jeu." - -msgid "_Fri" -msgstr "ven." - -msgid "_Sat" -msgstr "sam." - -msgid "_Sun" -msgstr "dim." - -msgid "Monday" -msgstr "lundi" - -msgid "Tuesday" -msgstr "mardi" - -msgid "Wednesday" -msgstr "mercredi" - -msgid "Thursday" -msgstr "jeudi" - -msgid "Friday" -msgstr "vendredi" - -msgid "Saturday" -msgstr "samedi" - -msgid "Sunday" -msgstr "dimanche" - -#~ msgid "%A, %B %e %Y" -#~ msgstr "%A %e %B %Y" diff --git a/v2/dotclear/locales/fr/help/blowupConfig.html b/v2/dotclear/locales/fr/help/blowupConfig.html deleted file mode 100644 index 9d41c14..0000000 --- a/v2/dotclear/locales/fr/help/blowupConfig.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - Configuration du thème Blowup - - - -

      En modifiant la configuration du thème Blowup, vous pouvez personnaliser votre -thème très facilement. Pour cela, renseignez simplement les champs de configuration -ou choisissez un style prédéfini.

      - -

      Couleurs

      - -

      Quand vous devez indiquer une valeur de couleur, celle-ci doit être au format -hexadécimal. Par exemple : "#FF0000" donnera du rouge. Vous pouvez vous aider -de la pipette à côté de chaque champs de couleur.

      -

      Si vous manquez d'inspiration vous pouvez consulter :

      - - -

      Unités de mesure

      - -

      Quand vous devez indiquer une taille, celle-ci doit être suivie d'une unité -de mesure. Par exemple : "1em". Si vous n'indiquez aucune unité, la valeur -donnée prendra des pixels comme unité par défaut.

      -

      Les unités possibles sont :

      -
        -
      • px
      • -
      • em
      • -
      • ex
      • -
      • pt
      • -
      • %
      • -
      - -

      Images d'en-tête

      - -

      Vous pouvez choisir une image d'en-tête parmi une liste de nombreuses images -afin de remplacer celle utilisée par défaut.

      - -

      En choisissant "Personnalisé..." parmi la liste d'images, vous pourrez -déposer votre propre image. Celle-ci doit être au format JPG ou PNG et -avoir une largeur exacte de 800 pixels. - -

      Si vous déposez une image au format JPG, un cadre sera ajouté autours de -l'image, ce qui n'est pas le cas avec une image au format PNG (dont la -transparence sera également préservée).

      - -

      Styles prédéfinis

      - -

      Vous pouvez choisir un style prédéfini dans la liste d'option "Styles prédéfinis". -Une fois le style choisi, vous devez valider le formulaire pour appliquer les -changements.

      - -

      Vous pouvez ensuite modifier le style prédéfini comme bon vous semble.

      - -

      Import / export de configuration

      - -

      À la fin des options de Blowup, vous pouvez afficher une zone appelée "Import -/ export de configuration". Dans cette zone de texte se trouve la configuration -en cours d'utilisation. Vous pouvez la copier pour la partager avec d'autres.

      - -

      Pour appliquer (importer) une configuration, il suffit simplement de remplacer -le contenu de la zone de texte par celui que vous voulez utiliser. N'oubliez pas -de cliquer sur "appliquer le code".

      - - - \ No newline at end of file diff --git a/v2/dotclear/locales/fr/help/core_blog_pref.html b/v2/dotclear/locales/fr/help/core_blog_pref.html deleted file mode 100644 index b9a79c1..0000000 --- a/v2/dotclear/locales/fr/help/core_blog_pref.html +++ /dev/null @@ -1,191 +0,0 @@ - - - Préférences du blog - - - - -

      Informations du blog

      -
      -
      Identifiant du blog
      -
      Identifiant unique du blog. Obligatoire, ne peut être modifié que par un - super administrateur.
      - -
      Nom du blog
      -
      Nom du blog, obligatoire.
      - -
      URL du blog
      -
      URL complète du blog. Obligatoire, ne peut être modifiée que par un super - administrateur.
      - -
      Méthode de lecture de l'URL
      -
      Définit le mode de lecture de l'URL. PATH_INFO est conseillé, QUERY_STRING - doit être utilisé si le premier ne fonctionne pas. En mode PATH_INFO, l'URL du - blog doit se terminer par un "/" et en mode QUERY_STRING, par un "?".
      - -
      État du blog
      -
      -
        -
      • en ligne : blog accessible aux visiteurs
      • -
      • hors ligne : blog inaccessible aux visiteurs - mais les rédacteurs peuvent se connecter
      • -
      • supprimé : blog inaccessible aux visiteurs - comme aux rédacteurs
      • -
      -
      - -
      Description du blog
      -
      Texte libre de description du blog. Il s'agit d'un texte simple, sans - formatage quelconque.
      -
      - -

      Configuration du blog

      -
      -
      Nom de l'éditeur du blog
      -
      Nom de la personne responsable du contenu du blog. Peut être le propriétaire - ou le directeur de publication s'il existe. Information affichée dans les - informations du flux de syndication.
      - -
      Note de copyright
      -
      Note indiquant les droits de reproduction autorisés pour le blog.
      - -
      Langue par défaut
      -
      Langue de l'interface du blog. Si cette langue existe parmi les - traductions, l'interface sera traduite dans celle-ci, sinon elle apparaîtra - en Anglais.
      - -
      Fuseau horaire du blog
      -
      Définit le fuseau horaire qui sera utilisé pour dater les commentaires et - trackbacks entrant sur le blog.
      - -
      Format des dates
      -
      Indique le format de la date d'un billet sur le blog. Voir la section - "formatage des dates" pour plus détails.
      - -
      Format des heures
      -
      Indique le format de l'heure d'un billet sur le blog. Voir la section - "formatage des dates" pour plus détails.
      - -
      Laisser les commentaires ouverts durant .. jours
      -
      Permet d'indiquer le nombre de jours durant lesquels les commentaires - sont possibles sur un billet après sa publication. Aucune valeur laissera - les commentaires toujours ouverts.
      - -
      Laisser les rétroliens ouverts durant .. jours
      -
      Permet d'indiquer le nombre de jours durant lesquels les rétroliens - sont possibles sur un billet après sa publication. Aucune valeur laissera - les rétroliens toujours ouverts.
      - -
      Accepter les commentaires
      -
      Accepter globalement les commentaires sur le blog. Ce paramètre est - supérieur à celui autorisant ou non les commentaires sur un billet.
      - -
      Accepter les rétroliens
      -
      Accepter globalement les rétroliens sur le blog. Ce paramètre est - supérieur à celui autorisant ou non les rétroliens sur un billet.
      - -
      Modérer les commentaires
      -
      Si cette option est activée, les commentaires ne seront publiés qu'après - l'approbation d'un rédacteur.
      - -
      Modérer les rétroliens
      -
      Si cette option est activée, les rétroliens ne seront publiés qu'après - l'approbation d'un rédacteur.
      - -
      Ajouter la relation "nofollow" aux liens des commentaires et rétroliens
      -
      Ajoute un attribut sur les liens des commentaires et rétroliens indiquant - aux robots des moteurs de recherche de ne pas les suivre. Cette mesure - est censée permettre de lutter contre le spam mais n'a pas encore vraiment - prouvé son efficacité.
      - -
      Syntaxe wiki pour les commentaires
      -
      Autoriser quelques éléments de la syntaxe wiki dans les commentaires.
      - -
      Afficher .. billets par page
      -
      Le nombre donné sera utilisé comme limite d'affichage des billets sur la - page d'accueil et la première page de chaque catégorie.
      - -
      Afficher des émoticônes dans les billets et commentaires
      -
      Remplacer certaines suites de caractères comme :-) ou ;-) par des images.
      - -
      Afficher .. billets par flux de syndication
      -
      Le nombre donné sera utilisé comme limite d'affichage des billets dans - les flux de syndication.
      - -
      Afficher .. commentaires par flux de syndication
      -
      Le nombre donné sera utilisé comme limite d'affichage des commentaires dans - les flux de syndication.
      - -
      Tronquer le flux de syndication
      -
      Cette option permet de ne fournir qu'un extrait des billets dans les flux - de syndication.
      -
      - -

      Formatage des dates

      -

      Certains champs permettent de formater les dates avec des caractères -particuliers dont voici la définition :

      - -
        -
      • %a : nom abrégé du jour de la semaine (local).
      • -
      • %A : nom complet du jour de la semaine (local).
      • -
      • %b : nom abrégé du mois (local).
      • -
      • %B : nom complet du mois (local).
      • -
      • %c : représentation préférée pour les dates et - heures, en local.
      • -
      • %C : numéro de siècle (l'année, divisée par 100 et - arrondie entre 00 et 99)
      • -
      • %d : jour du mois en numérique (intervalle 01 à - 31)
      • -
      • %D : identique à %m/%d/%y
      • -
      • %e : numéro du jour du mois. Les chiffres sont - précédés d'un espace (de ' 1' à '31')
      • -
      • %g : identique à %G, sur 2 chiffres.
      • -
      • %G : L'année sur 4 chiffres correspondant au numéro - de semaine (voir %V). Même format et valeur que %Y, excepté que si le numéro - de la semaine appartient à l'année précédente ou suivante, l'année courante - sera utilisé à la place.
      • -
      • %h : identique à %b
      • -
      • %H : heure de la journée en numérique, et sur - 24-heures (intervalle de 00 à 23)
      • -
      • %I : heure de la journée en numérique, et sur 12- - heures (intervalle 01 à 12)
      • -
      • %j : jour de l'année, en numérique (intervalle 001 à - 366)
      • -
      • %m : mois en numérique (intervalle 1 à 12)
      • -
      • %M : minute en numérique
      • -
      • %n : newline character
      • -
      • %p : soit `am' ou `pm' en fonction de l'heure - absolue, ou en fonction des valeurs enregistrées en local.
      • -
      • %r : l'heure au format a.m. et p.m.
      • -
      • %R : l'heure au format 24h
      • -
      • %S : secondes en numérique
      • -
      • %t : tabulation
      • -
      • %T : l'heure actuelle (égal à %H:%M:%S)
      • -
      • %u : le numéro de jour dans la semaine, de 1 à 7. (1 - représente Lundi)
      • -
      • %U : numéro de semaine dans l'année, en considérant - le premier dimanche de l'année comme le premier jour de la première - semaine.
      • -
      • %V : le numéro de semaine comme défini dans l'ISO - 8601:1988, sous forme décimale, de 01 à 53. La semaine 1 est la première - semaine qui a plus de 4 jours dans l'année courante, et dont Lundi est le - premier jour. (Utilisez %G ou %g pour les éléments de l'année qui - correspondent au numéro de la semaine pour le timestamp donné.)
      • -
      • %W : numéro de semaine dans l'année, en considérant - le premier lundi de l'année comme le premier jour de la première semaine
      • -
      • %w : jour de la semaine, numérique, avec Dimanche = - 0
      • -
      • %x : format préféré de représentation de la date - sans l'heure
      • -
      • %X : format préféré de représentation de l'heure - sans la date
      • -
      • %y : l'année, numérique, sur deux chiffres (de 00 à - 99)
      • -
      • %Y : l'année, numérique, sur quatre chiffres
      • -
      • %Z ou %z : fuseau horaire, ou nom ou - abréviation
      • -
      • %% : un caractère `%' littéral
      • -
      - - - \ No newline at end of file diff --git a/v2/dotclear/locales/fr/help/core_categories.html b/v2/dotclear/locales/fr/help/core_categories.html deleted file mode 100644 index 002800e..0000000 --- a/v2/dotclear/locales/fr/help/core_categories.html +++ /dev/null @@ -1,50 +0,0 @@ - - - Catégories - - - -

      Liste des categories

      -
      -
      Créer une nouvelle catégorie
      -
      Choisissez le nom que vous souhaitez donner à votre nouvelle catégorie - puis cliquer sur Enregistrer pour valider sa création. Vous pouvez choisir - sa catégorie parente ou la laisser au premier niveau. Pour modifier la catégorie, - cliquez sur son nom dans la liste.
      - -
      Supprimer une catégorie
      -
      Choisissez la catégorie que vous voulez supprimer et cliquez sur ok. - Une catégorie ne peut être supprimée que si elle ne contient aucun billet.
      - -
      Réordonner les catégories
      -
      Utilisez cette option pour placer toutes les catégories au même niveau. - Si vous voulez modifier l'ordre des catégories plus précisément, cliquez sur le nom de chacune d'entre elles - et choisissez sa catégorie parente ou sa position par rapport à ses voisines.
      -
      - -

      Modifier une catégorie

      -
      -
      Titre
      -
      Choisissez le nom que vous souhaitez donner à votre nouvelle catégorie - puis cliquer sur Enregistrer pour valider sa création.
      - -
      URL
      -
      DotClear crée une url par défaut de la catégorie, qui sera ainsi - accessible avec un chemin de la forme - http://monblog.tld/category/Ma-categorie. En cliquant sur le - petit verrou situé à la droite, vous pouvez la modifier comme il vous - plaira.
      - -
      Description
      -
      Le contenu de ce champ de description sera affiché lors de la sélection - d'une catégorie dans le blog. Vous pouvez le remplir avec toute forme de - contenu (paragraphes, listes, etc.) Le format du texte de la description est - HTML.
      - -
      Déplacer cette catégorie
      -
      Vous pouvez déplacer la catégorie dans n'importe quelle autre, qui deviendra sa parente. - Vous pouvez aussi spécifier sa position par rapport à ses voisines en la plaçant avant ou après l'une d'elles.
      -
      - - - \ No newline at end of file diff --git a/v2/dotclear/locales/fr/help/core_comments.html b/v2/dotclear/locales/fr/help/core_comments.html deleted file mode 100644 index 1fe0676..0000000 --- a/v2/dotclear/locales/fr/help/core_comments.html +++ /dev/null @@ -1,59 +0,0 @@ - - - Commentaires - - - -

      Filtres de la liste des commentaires

      -
      -
      Type :
      -
      Aucun ou commentaires ou rétroliens.
      - -
      État :
      -
        -
      • indésirable : reconnu comme spam ;
      • -
      • en attente : en attente de modération ;
      • -
      • non publié : hors ligne ;
      • -
      • publié : en ligne.
      • -
      - -
      Trier par :
      -
      Choisir : date, ou titre du billet, ou auteur ou état, puis indiquez si vous - souhaitez que les résultats s'affichent par ordre croissant ou décroissant.
      - -
      Trier
      -
      Indique l'ordre dans lequel on souhaite effectuer le tri.
      - -
      Auteur du commentaire.
      -
      Recherche indifféremment avec des minuscules ou majuscules. On peut chercher - sur une partie du nom en utilisant le caractère joker - *.
      - -
      Commentaires par page :
      -
      Détermine le nombre de commentaires affichés par page de cette liste.
      -
      - -

      Modifier ou ajouter un commentaire

      -
      -
      Auteur :
      -
      Nom de l'auteur. Ce champ est obligatoire.
      - -
      Email :
      -
      Adresse mail de l'auteur du commmentaire.
      - -
      Site web :
      -
      URL du site ou du blog de l'auteur du commentaire.
      - -
      État :
      -
        -
      • indésirable : reconnu comme spam ;
      • -
      • en attente : en attente de modération ;
      • -
      • non publié : hors ligne
      • -
      • publié : en ligne
      • -
      - -
      Commentaire :
      -
      Contenu du commentaire. Ce champ utilise la syntaxe HTML.
      -
      - - \ No newline at end of file diff --git a/v2/dotclear/locales/fr/help/core_media.html b/v2/dotclear/locales/fr/help/core_media.html deleted file mode 100644 index aeb6e85..0000000 --- a/v2/dotclear/locales/fr/help/core_media.html +++ /dev/null @@ -1,97 +0,0 @@ - - - Gestionnaire de media - - - - -

      Liste des médias

      -

      La page principale du gestionnaire de médias présente la liste des fichiers -(médias) disponibles pour le blog en cours d'utilisation.

      - -

      Il est possible d'afficher les médias dans des répertoires ou sous -répertoires en cliquant sur leurs icônes ou leurs noms.

      - -

      Les fichiers son au format MP3 sont présentés avec un lecteur permettant -d'en prendre immédiatement connaissance. Ce lecteur nécessite un lecteur (ou -plugin) Flash sur votre navigateur.

      - -

      Les images sont affichées avec une miniature quand cela est possible.

      - -

      Ajouter des fichiers

      -
      -
      Choisissez un fichier
      -
      Permet de choisir un fichier sur son disque dur pour l'envoyer sur le - blog. Si le fichier dépasse la taille maximale, il ne pourra être envoyé.
      - -
      Titre
      -
      Titre optionnel du fichier à envoyer.
      - -
      Privé
      -
      Indique que le fichier envoyé n'est visible que par son propriétaire tant - qu'il n'est pas publié sur le blog.
      -
      - -

      Nouveau répertoire

      -

      Ce formulaire permet de créer un nouveau répertoire dans le répertoire en -cours d'utilisation. Indiquez simplement un nom comme vous le feriez sur votre -ordinateur.

      - -

      Détails du média

      -

      La page individuelle d'un média présente un ensemble d'informations sur -celui-ci et permet d'effectuer quelques opérations.

      - -
      -
      Nom du fichier
      -
      Changer le nom du fichier en cours.
      - -
      Titre du fichier
      -
      Changer ou donner un titre au fichier en cours.
      - -
      Date du fichier
      -
      Changer la date du fichier.
      - -
      Privé
      -
      Changer le caractère privé ou non du média.
      - -
      Nouveau répertoire
      -
      Permet de changer l'emplacement du fichier.
      - -
      Changer le fichier
      -
      Ce formulaire permet de changer le fichier tout en conservant ses - attributs (nom, titre...). Comme toujours, il ne peut dépasser la taille - maximalle indiquée.
      -
      - -

      Cas particulier des images

      -

      Lors de l'ajout d'une image, jusqu'à quatre versions de celle-ci peuvent -être disponibles (selon la taille de l'image d'origine) :

      -
        -
      • carrée : image carrée de 48 pixels de côté,
      • -
      • miniature : image réduite à 100 pixels sur son plus grand côté,
      • -
      • petite : image réduite à 240 pixels sur son plus grand côté,
      • -
      • moyenne : image réduite à 500 pixes sur son plus grand côté,
      • -
      • originale : image originale non transformée.
      • -
      -

      Les tailles par défaut des versions miniature, petite et moyenne, peuvent être modifiées dans les paramètres du blog

      - -

      Attacher un fichier à un billet

      -

      Vous pouvez attacher un fichier à un billet très facilement. Commencez par -créer un nouveau billet et enregistrez-le. Cliquez alors sur "ajouter un fichier -au billet" pour ouvrir le gestionnaire de médias.

      - -

      En cliquant sur l'icône [+] (Attacher un fichier au billet) vous pourrez -joindre le fichier à votre billet.

      - -

      Les fichiers attachés à un billet seront visibles sur la page individuelle -du billet, sous la forme d'une liste après le contenu du billet. Les fichiers -MP3 seront automatiquement accompagnés d'un lecteur en Flash permettant la -lecture directe du fichier.

      - -

      Podcast et diffusion de fichiers musicaux

      -

      Tous les fichiers attachés à un billet seront présents dans les fils RSS de -vos billets, vous permettant ainsi de réaliser des podcast de n'importe quel -type de fichier.

      - - - \ No newline at end of file diff --git a/v2/dotclear/locales/fr/help/core_post.html b/v2/dotclear/locales/fr/help/core_post.html deleted file mode 100644 index 418a7ec..0000000 --- a/v2/dotclear/locales/fr/help/core_post.html +++ /dev/null @@ -1,137 +0,0 @@ - - - Rédaction d'un billet - - - - -

      Rédaction du billet

      - -
      -
      Titre du billet
      -
      Inscrivez le titre du billet. Ce champ est obligatoire.
      - -
      Extrait
      -
      Le contenu de ce champ s'affichera dans les pages présentant les listes de - billets telles que la page d'accueil ou le tri sur une catégorie, suivi d'un - lien « Lire la suite ». Il figurera également au début du billet dans le - contexte de l'affichage du billet seul. Si vous ne remplissez pas ce champ, le - champ Contenu sera intégralement affiché dès la page d'accueil.
      - -
      Contenu
      -
      Le contenu du billet. Ce champ est obligatoire.
      - -
      Notes
      -
      Cette zone de texte sert à la prise de notes ou pense-bête divers. Elle ne - sera jamais affichée sur le blog.
      - -
      Catégorie
      -
      La catégorie de votre billet. Pour créer une nouvelle catégorie, rendez vous - dans la section "catégories". Vous pouvez n'affecter - votre billet à aucune catégorie en choisissant la ligne vide.
      - -
      État du billet
      -
      Permet de choisir l'état du billet après enregistrement : -
        -
      • en attente : en attente de publication.
      • -
      • programmé : le billet sera mis en ligne aux date et heure - indiquées dans le champ Publié le.
      • -
      • non publié : billet hors ligne.
      • -
      • publié : billet en ligne.
      • -
      -
      - -
      Publié le
      -
      Permet de modifier la date et l'heure de publication du billet. Si vous avez - choisi le statut programmé il sera mis en ligne aux date et heure - définis dans ce champ.
      - -
      Format du texte
      -
      Permet de choisir la syntaxe de saisie du billet. Le wiki est une syntaxe - simplifiée et sera converti en xhtml valide ; à moins que vous maîtrisiez - parfaitement le xhtml nous vous conseillons de la choisir de préférence. - Consultez la référence de la syntaxe Wiki pour plus - d'informations.
      - -
      Accepter les commentaires
      -
      Cochez ou décochez la case selon que vous souhaitez permettre ou interdire - les commentaires sur le billet en particulier. L'option pour permettre ou - autoriser de façon générale les commentaires se situe dans le menu Préférences - du blog.
      - -
      Accepter les rétroliens
      -
      Un rétrolien permet de signaler un billet dans les commentaires d'un autre - blog. Cochez ou décochez la case selon que vous souhaitez permettre ou interdire - les rétroliens sur le billet. L'option pour permettre ou autoriser de façon - générale les rétroliens se situe dans le menu Préférences du blog.
      - -
      Billet sélectionné
      -
      Les billets marqués comme sélectionnés apparaîtront dans le menu de votre - blog, sous l'intitulé « A retenir ».
      - -
      Mot de passe du billet
      -
      Permet de déterminer un mot de passe d'accès à un billet dans le blog. Un - billet protégé par mot de passe ne sera visible nulle part sur votre blog, vous - pourrez en donner l'adresse à vos lecteurs en vous rendant sur le lien - voir le billet.
      - -
      URL spécifique
      -
      Ce champ permet de choisir une URL pour un billet autre que celle par défaut - après avoir cliqué sur le petit verrou placé à sa droite. Si vous essayez - d'utiliser une URL déjà existante, celle-ci se verra incrémentée d'un chiffre.
      - -
      Langue du billet
      -
      Code langue de votre billet. Par défaut, il s'agit du code de votre - langue. Vous pouvez le changer, par le code d'une autre langue, par - exemple "en", "fr-qc". Ce code est libre, il sera utilisé lors de l'affichage - des billets.
      - -
      Pièces jointes
      -
      Les pièces jointes sont tous les médias attachés au billet. Le lien - d'ajout d'une pièce jointe permet de choisir un fichier à ajouter au billet. - Pensez à sauvegarder votre billet avant de choisir une pièce jointe. Consultez - l'aide du gestionnaire de médias pour plus de détails.
      -
      - -

      Rétroliens

      -

      Pour faire un rétrolien cliquez sur le lien Faire des rétroliens. -Si vous ne voyez pas ce lien, vérifiez que votre billet est bien dans l'état -publié.

      - -
      -
      URLs à rétrolier
      -
      Indiquez ici la ou les URL que vous aurez relevé dans le billet vers lequel - vous souhaitez envoyer un rétrolien.
      - - -
      Envoyer l'extrait
      -
      Par défaut, ce champ comporte le début de votre billet. C'est ce qui sera - envoyé vers le blog que vous rétroliez avec un lien vers votre billet complet. - Vous pouvez modifier le contenu de cette "accroche" en saisissant directement le - texte de votre choix dans ce champ.
      - - -
      Découverte automatique des URLs à rétrolier
      -
      Si votre billet comporte des liens vers des billets précis et si la - plate-forme du blog destinataire est configurée pour le permettre, cette - fonction découvrira automatiquement les URLs spécifiques d'envoi de - rétrolien.
      -
      - -

      Commentaires

      -
      -
      Liste les commentaires
      -
      Depuis l'onglets Commentaires vous pouvez lire et changer l'état - des commentaires de votre billet. Suivant vos permissions, vous pouvez modifier, - mettre en ligne ou hors ligne, supprimer ou classer comme commentaire - indésirable.
      - -
      Ajouter un commentaire
      -
      Depuis l'onglet Ajouter un commentaire vous pouvez répondre - directement à un commentaire sans passer par votre blog. Cette interface vous - permet également de saisir votre commentaire en xhtml, sans limitation. Vous - devrez remplir les champs de la même manière qu'en modifiant un commentaire
      -
      - - - diff --git a/v2/dotclear/locales/fr/help/core_posts.html b/v2/dotclear/locales/fr/help/core_posts.html deleted file mode 100644 index 69b8cf1..0000000 --- a/v2/dotclear/locales/fr/help/core_posts.html +++ /dev/null @@ -1,65 +0,0 @@ - - - Gestion des billets - - - - -

      Filtres de la liste des billets

      - -
      -
      Auteur
      -
      Permet de filtrer les billets par auteur.
      - -
      Catégorie
      -
      Filtrer les billets par catégorie.
      - -
      État
      -
        -
      • en attente : en attente de publication.
      • -
      • programmé : le billet sera mis en ligne aux date et heure - indiquées dans le champ Publié le.
      • -
      • non publié : billet hors ligne.
      • -
      • publié : billet en ligne.
      • -
      - -
      Sélectionné
      -
      Aucun, billet marqué comme sélectionné ou non sélectionné.
      - -
      Mois
      -
      Filtre les billets d'un mois d'une année donné.
      - -
      Langue
      -
      Filtre les billets selon la langue indiquée dans le champ langue du - billet.
      - -
      Trier par
      -
      Permet de trier les résultats de filtrage selon la date, le titre, - la catégorie, l'auteur, l'état de publication ou l'état de sélection.
      - -
      Trier
      -
      Indique l'ordre dans lequel on souhaite effectuer le tri.
      - -
      Billets par page
      -
      Nombre de billets à afficher par page de résultat.
      -
      - -

      Actions par lot sur les billets

      -

      Il est possible d'effectuer un ensemble d'actions sur plusieurs billets, d'un -seul coup. Les actions possibles dépendent des permissions de l'utilisateur.

      - -
        -
      • Publier : mettre le billet en ligne,
      • -
      • Hors ligne : mettre le billet hors ligne,
      • -
      • Programmer : programmer le billet pour mise en ligne à la date de - publication,
      • -
      • En attente : en attente de publication,
      • -
      • Changer de catégorie : envoie sur la liste des catégories pour - changer celle des billets sélectionnés,
      • -
      • Changer l'auteur : permet de changer l'auteur du billet en indiquant - l'identifiant de l'utilisateur qui deviendra le nouvel auteur,
      • -
      • Supprimer : supprime le billet (cette opération est irréversible).
      • -
      - - - \ No newline at end of file diff --git a/v2/dotclear/locales/fr/help/core_user.html b/v2/dotclear/locales/fr/help/core_user.html deleted file mode 100644 index 9ebc52e..0000000 --- a/v2/dotclear/locales/fr/help/core_user.html +++ /dev/null @@ -1,74 +0,0 @@ - - - Utilisateur - - - - -

      Informations utilisateur

      -
      -
      Nom d'utilisateur
      -
      Il doit être composé d'au moins 2 caractères (lettres non accentuées, chiffres ou symboles, pas d'espace). Ce champ est obligatoire.
      - -
      Mot de passe
      -
      Indiquez deux fois le mot de passe dans les champs Mot de passe et Confirmer le mot de - passe. Le mot de passe doit être long d'au moins 6 caractères. - Ces deux champs sont obligatoires.
      - -
      Nom, Prénom
      -
      Si le pseudonyme n'est pas renseigné, le nom de l'auteur qui sera affiché - sera composé des noms et prénoms renseignés dans ces champs.
      - -
      Pseudonyme
      -
      Vous pouvez choisir ici le nom sous lequel vos billets seront signés. S'il est renseigné, le pseudonyme se substitue au nom et au prénom.
      - -
      Email
      -
      Cette adresse sera utilisée lors de la régénération du mot de passe depuis la fenêtre d'authentification de dotclear.
      - -
      URL
      -
      Indique le site web de l'utilisateur. S'il est indiqué, le nom du rédacteur - d'un billet sera présenté comme un lien vers le site donné.
      - -
      Format d'édition préféré
      -
      Choix de la syntaxe par défaut pour la saisie des billets. Le wiki est une - syntaxe simplifiée et sera converti en xhtml valide ; à moins que vous ne - maîtrisiez parfaitement le xhtml, nous vous conseillons le choix du wiki.
      - -
      État des billets par défaut
      -
      Le statut par défaut des billets peut être déterminé à : -
        -
      • en attente : le statut de publication n'a pas encore - été décidé.
      • -
      • programmé : le billet sera mis en ligne aux date et - heure indiquées dans le champ Publié le.
      • -
      • non publié : billet hors ligne.
      • -
      • publié : billet en ligne.
      • -
      -
      - -
      Taille de la zone d'édition
      -
      Fixe la hauteur de la zone d'édtion du billet. Par défaut ce paramètre est - réglé à la valeur 24.
      - -
      Langue de l'utilisateur
      -
      Indique la langue dans laquelle on souhaite publier ses billets. Si la - traduction existe, l'interface sera également traduite dans cette langue.
      - -
      Fuseau horaire de l'utilisateur
      -
      Ce choix déterminera l'affichage de l'heure de publication des billets.
      - -
      Changement de mot de passe requis pour la connexion
      -
      Cocher cette case permettra au nouvel utilisateur de choisir par lui-même son mot de passe de connexion.
      - -
      Super administrateur
      -
      Ce choix attribuera toutes les permissions au profil utilisateur sur l'ensemble des blogs de l'installation.
      -
      - -

      Tags

      -
      -
      Format de la liste des tags
      -
      Ce choix permet, dans la page d'édition d'un billet, d'afficher tous les tags - disponibles ou seulement les plus utilisés.
      -
      - - \ No newline at end of file diff --git a/v2/dotclear/locales/fr/help/core_user_pref.html b/v2/dotclear/locales/fr/help/core_user_pref.html deleted file mode 100644 index f119686..0000000 --- a/v2/dotclear/locales/fr/help/core_user_pref.html +++ /dev/null @@ -1,91 +0,0 @@ - - - Préférences utilisateur - - - - -

      Mon profil

      -
      -
      Nom, Prénom
      -
      Si le pseudonyme n'est pas renseigné, le nom de l'auteur qui sera affiché - sera composé des noms et prénoms renseignés dans ces champs.
      - -
      Pseudonyme
      -
      Vous pouvez choisir ici le nom sous lequel vos billets seront signés. S'il est renseigné, le pseudonyme se substitue au nom et au prénom.
      - -
      Email
      -
      Adresse à laquelle devront être envoyées les notifications de nouveaux - commentaires par email.
      - -
      URL
      -
      Indique le site web de l'utilisateur. S'il est indiqué, le nom du rédacteur - d'un billet sera présenté comme un lien vers le site donné.
      - -
      Langue de l'utilisateur
      -
      Indique la langue dans laquelle on souhaite publier ses billets. Si la - traduction existe, l'interface sera également traduite dans cette langue.
      - -
      Fuseau horaire de l'utilisateur
      -
      Ce choix déterminera l'affichage de l'heure de publication des billets.
      - -
      Changer le mot de passe
      -
      Pour changer votre mot de passe, indiquez deux fois le nouveau mot de passe - dans les champs Nouveau mot de passe et Confirmer le mot de - passe. Le mot de passe doit être long d'au moins 6 caractères. - Si aucun mot de passe n'est spécifié, il ne sera pas changé.
      -
      - -

      Mes options

      -
      -
      Format d'édition préféré
      -
      Choix de la syntaxe par défaut pour la saisie des billets. Le wiki est une - syntaxe simplifiée et sera converti en xhtml valide ; à moins que vous ne - maîtrisiez parfaitement le xhtml, nous vous conseillons le choix du wiki.
      - -
      État des billets par défaut
      -
      Le statut par défaut des billets peut être déterminé à : -
        -
      • en attente : le statut de publication n'a pas encore - été décidé.
      • -
      • programmé : le billet sera mis en ligne aux date et - heure indiquées dans le champ Publié le.
      • -
      • non publié : billet hors ligne.
      • -
      • publié : billet en ligne.
      • -
      -
      - -
      Taille de la zone d'édition
      -
      Fixe la hauteur de la zone d'édtion du billet. Par défaut ce paramètre est - réglé à la valeur 24.
      - -
      Activer l'éditeur visuel
      -
      Permet d'activer ou non l'éditeur visuel des billets et des catégories.
      - -
      Activer l'interface avancée du gestionnaire de médias
      -
      Cette option permet d'envoyer plusieurs fichiers à la fois sur le serveur. - Nécessite la présence du plugin Flash dans votre navigateur.
      - -
      Modules du tableau de bord
      -
      Les choix opérés dans cette zone détermineront l'affichage de - ces blocs sur le tableau de bord.
      - -
      Format de la liste de tags
      -
      Ce choix permet, dans la page d'édition d'un billet, d'afficher tous les tags - disponibles ou seulement les plus utilisés.
      -
      -

      Mes favoris

      -
      -
      Mes favoris
      -
      Cette zone affiche les favoris actuellement utilisés. Ils peuvent être réordonnés - au moyen de la souris si javascript est activé dans votre navigateur. Sinon, une case - permet d'attribuer à chaque favori un numéro d'ordre. Lorsque vous avez terminé, n'oubliez - pas d'enregistrer vos modifications. Vous pouvez aussi sélectionner les favoris à supprimer - du tableau de bord.
      - -
      Favoris disponibles
      -
      Tous les plugins permettant d'être mis en favoris sont listés ici. - Cochez les cases correspondantes aux favoris que vous souhaitez utiliser, puis ajoutez-les.
      -
      - - \ No newline at end of file diff --git a/v2/dotclear/locales/fr/help/core_wiki.html b/v2/dotclear/locales/fr/help/core_wiki.html deleted file mode 100644 index 1fb3b90..0000000 --- a/v2/dotclear/locales/fr/help/core_wiki.html +++ /dev/null @@ -1,85 +0,0 @@ - - - Référence de la syntaxe Wiki - - - - -

      Référence de la syntaxe Wiki

      - -

      La syntaxe Wiki est une manière d'écrire du texte avec un jeu de balises -réduit au minimum, permettant de couvrir les besoins les plus courants -(titres, paragraphes, citations, listes...).

      - -
      -
      Éléments de bloc
      -
      -
        -
      • Laissez une ligne vide entre chaque bloc de même nature.
      • -
      • Paragraphe : texte libre, terminé par une ligne - vide si suivi d'un second paragraphe.
      • -
      • Titre : !!! titre, !! titre - ou ! titre pour des titres plus ou moins importants.
      • -
      • Trait horizontal : ----
      • -
      • Listes : lignes débutant par * pour des - listes à puce ou # pour des listes numérotées. Vous pouvez faire - des listes imbriquées en mélangeant les codes de liste. Par exemple : -
        -* item 1
        -** item 1.1
        -* item 2
        -*# item 2.1
        -...
        -
        -
      • -
      • Texte préformaté : espace avant chaque ligne de texte.
      • -
      • Bloc de citation : > devant chaque - ligne de texte.
      • -
      -
      - -
      Éléments de formatage
      -
      -
        -
      • Emphase : deux apostrophes ''texte''
      • -
      • Forte emphase : deux soulignés __texte__
      • -
      • Retour forcé à la ligne : %%%
      • -
      • Insertion : deux plus ++texte++
      • -
      • Suppression : deux moins --texte--
      • -
      • Lien : [url], [nom|url], - [nom|url|langue] ou [nom|url|langue|titre]
      • -
      • Image : - ((url|texte alternatif)), - ((url|texte alternatif|position)) ou - ((url|texte alternatif|position|description longue)). -
        La position peut prendre les valeurs L ou G (gauche), R ou D (droite) ou C (centré).
      • -
      • Ancre : ~ancre~
      • -
      • Acronyme : ??acronyme|titre??
      • -
      • Code HTML en ligne: deux apostrophes inversées ``code html``
      • -
      • Citation en ligne : {{citation}}, - {{citation|langue}} ou {{citation|langue|url}}
      • -
      • Code : @@code ici@@
      • -
      • Note de bas de page : $$Corps de la note$$
      • -
      -
      - -
      Empêcher le formatage du texte
      -
      Pour insérer un caractère sans que celui-ci soit reconnu comme un caractère -de formatage, ajoutez le caractère \ avant celui-ci. Par exemple : -\[texte entre crochet qui n'est pas un lien\] -
      - -
      Insérer du code HTML
      -
      Vous pouvez ponctuellement avoir besoin d'insérer du code HTML dans votre -texte au format Wiki. Pour cela, utilisez le code suivant : -
      -///html
      -<p style="color:red">mon texte en rouge</p>
      -///
      -
      -
      -
      - - - - \ No newline at end of file diff --git a/v2/dotclear/locales/fr/help/themeEditor.html b/v2/dotclear/locales/fr/help/themeEditor.html deleted file mode 100644 index b79802b..0000000 --- a/v2/dotclear/locales/fr/help/themeEditor.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - Éditeur de thème - - - -

      L'éditeur de thème vous permet de modifier les fichiers template, les feuilles -de style et les fichiers JavaScript de votre thème en cours d'utilisation.

      - -

      La liste des fichiers est divisée en trois parties :

      -
        -
      • Fichiers template : les templates
      • -
      • Fichiers CSS : les feuilles de style
      • -
      • Fichiers JavaScript
      • -
      - -

      Une puce jaune contre le nom de chaque fichier indique que celui-ci fait partie -du thème. Une puce rouge indique qu'il se trouve dans le thème parent. -Une puce noire indique qu'il se trouve dans le thème "default".

      - -

      Si vous modifiez un fichier se trouvant dans le thème "default", celui-ci -sera copié dans votre thème en cours d'utilisation.

      - -

      Pour modifier un fichier, cliquez sur son nom, le contenu s'affichera alors -dans une zone d'édition. Si le fichier peut-être écrit vous pourrez sauvegarder -celui-ci en cliquant sur "enregistrer".

      - -

      Les modifications sont immédiatement appliquées lors de la sauvegarde, soyez -vigilants.

      - -

      Pour éditer vos templates, n'hésitez pas à consultez la -liste des marqueurs -de template.

      - - - \ No newline at end of file diff --git a/v2/dotclear/locales/fr/main.lang.php b/v2/dotclear/locales/fr/main.lang.php deleted file mode 100644 index 2609024..0000000 --- a/v2/dotclear/locales/fr/main.lang.php +++ /dev/null @@ -1,923 +0,0 @@ -This is a comment.

      -

      To delete it, log in and view your blog\'s comments. Then you might remove or edit it.

      '] = '

      Ceci est un commentaire

      Pour le supprimer, connectez-vous et affichez les commentaires de votre blog. Vous pourrez alors le supprimer ou le modifier.

      '; -$GLOBALS['__l10n']['Dotclear Install'] = 'Installation de Dotclear'; -$GLOBALS['__l10n']['show'] = 'voir'; -$GLOBALS['__l10n']['Dotclear installation'] = 'Installation de Dotclear'; -$GLOBALS['__l10n']['Cache directory %s is not writable.'] = 'Le répertoire de cache %s n\'est pas accessible en écriture.'; -$GLOBALS['__l10n']['Errors:'] = 'Erreurs :'; -$GLOBALS['__l10n']['Configuration file has been successfully created.'] = 'Le fichier de configuration a été créé avec succès.'; -$GLOBALS['__l10n']['User information'] = 'Informations utilisateur'; -$GLOBALS['__l10n']['Please provide the following information needed to create the first user.'] = 'Merci de fournir les informations suivantes pour créer le premier utilisateur.'; -$GLOBALS['__l10n']['First Name:'] = 'Prénom :'; -$GLOBALS['__l10n']['Last Name:'] = 'Nom :'; -$GLOBALS['__l10n']['Username and password'] = 'Identifiant et mot de passe'; -$GLOBALS['__l10n']['All done!'] = 'Terminé !'; -$GLOBALS['__l10n']['Dotclear has been successfully installed. Here is some useful information you should keep.'] = 'Dotclear a été installé avec succès. Conservez les informations suivantes précieusement.'; -$GLOBALS['__l10n']['Your account'] = 'Votre compte'; -$GLOBALS['__l10n']['Your blog'] = 'Votre blog'; -$GLOBALS['__l10n']['Blog address:'] = 'Adresse du blog :'; -$GLOBALS['__l10n']['Administration interface:'] = 'Interface d\'administration :'; -$GLOBALS['__l10n']['Manage your blog now'] = 'Gérez votre blog'; -$GLOBALS['__l10n']['Installation can not be completed'] = 'L\'installation ne peut pas être menée à bien'; -$GLOBALS['__l10n']['For the said reasons, Dotclear can not be installed. Please refer to the documentation to learn how to correct the problem.'] = 'Pour les raisons ci-dessus, Dotclear ne peut pas être installé. Référez-vous à la documentation pour savoir comment corriger le problème.'; -$GLOBALS['__l10n']['File %s does not exist.'] = 'Le fichier %s n\'existe pas.'; -$GLOBALS['__l10n']['Cannot write %s file.'] = 'Impossible d\'écrire le fichier %s.'; -$GLOBALS['__l10n']['Dotclear installation wizard'] = 'Assistant d\'installation de Dotclear'; -$GLOBALS['__l10n']['Welcome'] = 'Bienvenue'; -$GLOBALS['__l10n']['To complete your Dotclear installation and start writing on your blog, we just need to know how to access your database and who you are. Just fill this two steps wizard with this information and we will be done.'] = 'Pour achever votre installation de Dotclear, il ne manque plus que les informations concernant votre base de données, puis vos informations personnelles. Remplissez simplement les deux formulaires suivants et vous pourrez commencer à utiliser votre blog.'; -$GLOBALS['__l10n']['Attention:'] = 'Attention :'; -$GLOBALS['__l10n']['this wizard may not function on every host. If it does not work for you, please refer to the documentation to learn how to create the config.php file manually.'] = 'cet assistant peut ne pas fonctionner chez tous les hébergeurs. Si vous rencontrez un problème, vous trouverez comment créer le fichier de configuration dans la documentation.'; -$GLOBALS['__l10n']['System information'] = 'Informations système'; -$GLOBALS['__l10n']['Please provide the following information needed to create your configuration file.'] = 'Merci de fournir les informations suivantes :'; -$GLOBALS['__l10n']['Database type:'] = 'Type de base de données :'; -$GLOBALS['__l10n']['Database Host Name:'] = 'Nom d\'hôte de la base de données :'; -$GLOBALS['__l10n']['Database Name:'] = 'Nom de la base de données :'; -$GLOBALS['__l10n']['Database User Name:'] = 'Nom d\'utilisateur de la base de données :'; -$GLOBALS['__l10n']['Database Password:'] = 'Mot de passe de la base de données :'; -$GLOBALS['__l10n']['Database Tables Prefix:'] = 'Préfixe des tables de la base de données :'; -$GLOBALS['__l10n']['Continue'] = 'Continuer'; -$GLOBALS['__l10n']['No such installed language'] = 'Cette langue n\'est pas installée'; -$GLOBALS['__l10n']['You can\'t remove English language.'] = 'Vous ne pouvez pas supprimer la langue anglaise.'; -$GLOBALS['__l10n']['Permissions to delete language denied.'] = 'Permission de supprimer la langue refusée.'; -$GLOBALS['__l10n']['Invalid language file URL.'] = 'URL de fichier de langue invalide.'; -$GLOBALS['__l10n']['Languages management'] = 'Gestion des langues'; -$GLOBALS['__l10n']['Language has been successfully deleted.'] = 'La langue a été supprimée avec succès.'; -$GLOBALS['__l10n']['Language has been successfully installed.'] = 'La langue a été installée avec succès.'; -$GLOBALS['__l10n']['Language has been successfully upgraded'] = 'La langue a été mise à jour avec succès.'; -$GLOBALS['__l10n']['Here you can install, upgrade or remove languages for your Dotclear installation.'] = 'Sur cette page, vous pouvez installer, mettre à jour ou supprimer des langues de votre installation de Dotclear.'; -$GLOBALS['__l10n']['You can change your user language in your preferences or change your blog\'s main language in your blog settings.'] = 'Vous pouvez changer votre langue d\'utilisateur dans vos préférences ou changer la langue principale de votre blog dans vos paramètres de blog.'; -$GLOBALS['__l10n']['Installed languages'] = 'Langues installées'; -$GLOBALS['__l10n']['No additional language is installed.'] = 'Aucune langue supplémentaire n\'est installée.'; -$GLOBALS['__l10n']['Language'] = 'Langue'; -$GLOBALS['__l10n']['Action'] = 'Action'; -$GLOBALS['__l10n']['Install or upgrade languages'] = 'Installer ou mettre à jour une langue'; -$GLOBALS['__l10n']['You can install or remove a language by adding or removing the relevant directory in your %s folder.'] = 'Vous pouvez installer ou supprimer une langue en ajoutant ou supprimant le répertoire correspondant dans votre répertoire %s.'; -$GLOBALS['__l10n']['Available languages'] = 'Langues disponibles'; -$GLOBALS['__l10n']['You can download and install a additional language directly from Dotclear.net. Proposed languages are based on your version: %s.'] = 'Vous pouvez télécharger et installer une langue supplémentaire directement depuis Dotclear.net. Les langues proposées sont basées sur votre version : %s.'; -$GLOBALS['__l10n']['Language:'] = 'Langue :'; -$GLOBALS['__l10n']['Install language'] = 'Installer la langue'; -$GLOBALS['__l10n']['You can install languages by uploading zip files.'] = 'Vous pouvez installer des langues en déposant des fichiers zip.'; -$GLOBALS['__l10n']['Language zip file:'] = 'Fichier zip de la langue :'; -$GLOBALS['__l10n']['Upload language'] = 'Déposer la langue'; -$GLOBALS['__l10n']['Invalid language zip file.'] = 'Fichier zip de langue invalide.'; -$GLOBALS['__l10n']['The zip file does not appear to be a valid Dotclear language pack.'] = 'Le fichier zip ne semble pas être un fichier valide de langue Dotclear.'; -$GLOBALS['__l10n']['An error occurred during language upgrade.'] = 'Une erreur est survenue durant la mise à jour de la langue.'; -$GLOBALS['__l10n']['Error:'] = 'Erreur :'; -$GLOBALS['__l10n']['By names, in ascending order'] = 'Par noms, croissants'; -$GLOBALS['__l10n']['By names, in descending order'] = 'Par noms, décroissants'; -$GLOBALS['__l10n']['By dates, in ascending order'] = 'Par dates, croissantes'; -$GLOBALS['__l10n']['By dates, in descending order'] = 'Par dates, décroissantes'; -$GLOBALS['__l10n']['Media manager'] = 'Gestionnaire de médias'; -$GLOBALS['__l10n']['confirm removal'] = 'Confirmer la suppression'; -$GLOBALS['__l10n']['Are you sure you want to remove %s?'] = 'Êtes-vous certain de vouloir supprimer %s ?'; -$GLOBALS['__l10n']['Cancel'] = 'Annuler'; -$GLOBALS['__l10n']['Yes'] = 'oui'; -$GLOBALS['__l10n']['Directory has been successfully created.'] = 'Répertoire créé avec succès.'; -$GLOBALS['__l10n']['Files have been successfully uploaded.'] = 'Fichier chargé avec succès.'; -$GLOBALS['__l10n']['File has been successfully removed.'] = 'Fichier supprimé avec succès.'; -$GLOBALS['__l10n']['Directory has been successfully removed.'] = 'Répertoire supprimé avec succès.'; -$GLOBALS['__l10n']['Directory has been successfully rebuilt.'] = 'Répertoire reconstruit avec succès.'; -$GLOBALS['__l10n']['Zip file has been successfully extracted.'] = 'Le fichier zip a été extrait avec succès.'; -$GLOBALS['__l10n']['Choose a file to attach to entry %s by clicking on %s.'] = 'Choisissez un fichier à attacher au billet %s en cliquant sur %s.'; -$GLOBALS['__l10n']['Attach this file to entry'] = 'Attacher ce fichier au billet'; -$GLOBALS['__l10n']['Choose a file to insert into entry by clicking on %s.'] = 'Choisissez un fichier à insérer dans le billet en cliquant sur %s.'; -$GLOBALS['__l10n']['No file.'] = 'Aucun fichier.'; -$GLOBALS['__l10n']['Sort files:'] = 'Trier les fichiers :'; -$GLOBALS['__l10n']['Sort'] = 'Trier'; -$GLOBALS['__l10n']['Add files'] = 'Ajouter des fichiers'; -$GLOBALS['__l10n']['Please take care to publish media that you own and that are not protected by copyright.'] = 'Veuillez prendre garde à ne publier que des médias que vous possédez ou qui ne sont pas protégés contre la copie.'; -$GLOBALS['__l10n']['Choose a file:'] = 'Choisissez un fichier :'; -$GLOBALS['__l10n']['Maximum size %s'] = 'Taille maximale %s'; -$GLOBALS['__l10n']['Private'] = 'Privé'; -$GLOBALS['__l10n']['To send several files at the same time, you can activate the enhanced uploader in'] = 'Pour envoyer plusieurs fichiers à la fois, vous pouvez activer l\'interface avancée dans'; -$GLOBALS['__l10n']['Send'] = 'Envoyer'; -$GLOBALS['__l10n']['New directory'] = 'Nouveau répertoire'; -$GLOBALS['__l10n']['Directory Name:'] = 'Nom du répertoire :'; -$GLOBALS['__l10n']['Download this directory as a zip file'] = 'Télécharger ce répertoire dans un fichier zip'; -$GLOBALS['__l10n']['open'] = 'ouvrir'; -$GLOBALS['__l10n']['Insert this file into entry'] = 'Insérer ce fichier dans le billet'; -$GLOBALS['__l10n']['delete'] = 'supprimer'; -$GLOBALS['__l10n']['Not a valid file'] = 'Fichier invalide'; -$GLOBALS['__l10n']['File has been successfully updated.'] = 'Fichier mis à jour avec succès.'; -$GLOBALS['__l10n']['Thumbnails have been successfully updated.'] = 'Les miniatures ont été mises à jour avec succès.'; -$GLOBALS['__l10n']['Insert media item'] = 'Insérer un média'; -$GLOBALS['__l10n']['Image size:'] = 'Taille de l\'image :'; -$GLOBALS['__l10n']['original'] = 'originale'; -$GLOBALS['__l10n']['Image alignment'] = 'Alignement de l\'image'; -$GLOBALS['__l10n']['None'] = 'Aucun'; -$GLOBALS['__l10n']['Left'] = 'Gauche'; -$GLOBALS['__l10n']['Right'] = 'Droite'; -$GLOBALS['__l10n']['Center'] = 'Centre'; -$GLOBALS['__l10n']['Image insertion'] = 'Insertion de l\'image'; -$GLOBALS['__l10n']['As a single image'] = 'En tant qu\'image uniquement'; -$GLOBALS['__l10n']['As a link to original image'] = 'En tant que lien vers l\'image originale'; -$GLOBALS['__l10n']['MP3 disposition'] = 'Disposition du MP3'; -$GLOBALS['__l10n']['Please note that you cannot insert mp3 files with visual editor.'] = 'Merci de noter que vous ne pouvez pas insérer de fichier mp3 avec l\'éditeur visuel.'; -$GLOBALS['__l10n']['Please note that you cannot insert video files with visual editor.'] = 'Merci de noter que vous ne pouvez pas insérer de fichier vidéo avec l\'éditeur visuel.'; -$GLOBALS['__l10n']['Video size'] = 'Taille de la vidéo'; -$GLOBALS['__l10n']['Width:'] = 'Largeur :'; -$GLOBALS['__l10n']['Height:'] = 'Hauteur :'; -$GLOBALS['__l10n']['Video disposition'] = 'Disposition de la vidéo'; -$GLOBALS['__l10n']['Media item will be inserted as a link.'] = 'Le média sera inséré en tant que lien.'; -$GLOBALS['__l10n']['Insert'] = 'Insérer'; -$GLOBALS['__l10n']['Media details'] = 'Détails du média'; -$GLOBALS['__l10n']['Available sizes:'] = 'Tailles disponibles :'; -$GLOBALS['__l10n']['File owner:'] = 'Propriétaire du fichier :'; -$GLOBALS['__l10n']['File type:'] = 'Type de fichier :'; -$GLOBALS['__l10n']['File size:'] = 'Taille du fichier :'; -$GLOBALS['__l10n']['File URL:'] = 'URL du fichier :'; -$GLOBALS['__l10n']['Show entries containing this media'] = 'Afficher les billets contenant ce média'; -$GLOBALS['__l10n']['Entries containing this media'] = 'Billets contenant ce média'; -$GLOBALS['__l10n']['No entry seems contain this media.'] = 'Aucun billet ne semble contenir ce média.'; -$GLOBALS['__l10n']['Image details'] = 'Détails de l\'image'; -$GLOBALS['__l10n']['No detail'] = 'Aucun détail'; -$GLOBALS['__l10n']['Update thumbnails'] = 'Mettre à jour les miniatures'; -$GLOBALS['__l10n']['This will create or update thumbnails for this image.'] = 'Ceci va créer ou mettre à jour les miniatures pour cette image.'; -$GLOBALS['__l10n']['Extract in a new directory'] = 'Extraire dans un nouveau répertoire'; -$GLOBALS['__l10n']['Extract in current directory'] = 'Extraire dans le répertoire actuel'; -$GLOBALS['__l10n']['Extract archive'] = 'Extraire l\'archive'; -$GLOBALS['__l10n']['This will extract archive in a new directory that should not exist yet.'] = 'Ceci va extraire l\'archive dans un nouveau répertoire qui ne doit pas encore exister.'; -$GLOBALS['__l10n']['This will extract archive in current directory and will overwrite existing files or directory.'] = 'Ceci va extraire l\'archive dans le répertoire actuel et va écraser les fichiers ou répertoires existants.'; -$GLOBALS['__l10n']['Extract mode:'] = 'Mode d\'extraction :'; -$GLOBALS['__l10n']['Extract'] = 'Extrait'; -$GLOBALS['__l10n']['Change media properties'] = 'Changer les propriétés du média'; -$GLOBALS['__l10n']['File name:'] = 'Nom du fichier :'; -$GLOBALS['__l10n']['File title:'] = 'Titre du fichier :'; -$GLOBALS['__l10n']['File date:'] = 'Date du fichier :'; -$GLOBALS['__l10n']['New directory:'] = 'Nouveau répertoire :'; -$GLOBALS['__l10n']['Change file'] = 'Changer le fichier'; -$GLOBALS['__l10n']['No blog or user given.'] = 'Vous n\'avez pas indiqué de blog ou d\'utilisateur'; -$GLOBALS['__l10n']['permissions'] = 'permissions'; -$GLOBALS['__l10n']['Permissions'] = 'Permissions'; -$GLOBALS['__l10n']['The permissions have been successfully updated.'] = 'Permissions mises à jour avec succès.'; -$GLOBALS['__l10n']['You are about to change permissions on the following blogs for users %s.'] = 'Vous allez changer les permissions des utilisateurs %s pour ces blogs.'; -$GLOBALS['__l10n']['Validate permissions'] = 'Valider les permissions'; -$GLOBALS['__l10n']['choose a blog'] = 'choisissez un blog'; -$GLOBALS['__l10n']['Choose a blog'] = 'Choisissez un blog'; -$GLOBALS['__l10n']['Entries per page'] = 'Billets par page'; -$GLOBALS['__l10n']['Choose one or more blogs to which you want to give permissions to users %s.'] = 'Choisissez un ou plusieurs blogs pour lesquels les utilisateurs suivants auront des permissions : %s.'; -$GLOBALS['__l10n']['Set permissions'] = 'définir les permissions'; -$GLOBALS['__l10n']['select'] = 'sélectionner'; -$GLOBALS['__l10n']['No content found on this plugin.'] = 'Aucun contenu pour cette extension.'; -$GLOBALS['__l10n']['Plugin not found'] = 'Extension introuvable'; -$GLOBALS['__l10n']['The plugin you reached does not exist or does not have an admin page.'] = 'L\'extension que vous essayez d\'atteindre n\'existe pas ou n\'a pas de page d\'administration.'; -$GLOBALS['__l10n']['No such plugin.'] = 'Extension inexistante.'; -$GLOBALS['__l10n']['You don\'t have permissions to delete this plugin.'] = 'Vous n\'avez pas les permissions pour effacer cette extension'; -$GLOBALS['__l10n']['You don\'t have permissions to deactivate this plugin.'] = 'Vous n\'avez pas les permissions pour désactiver cette extension.'; -$GLOBALS['__l10n']['Plugins management'] = 'Gestion des extensions'; -$GLOBALS['__l10n']['Plugin has been successfully deleted.'] = 'L\'extension a été supprimée avec succès.'; -$GLOBALS['__l10n']['Plugin has been successfully installed.'] = 'L\'extension a été installée avec succès.'; -$GLOBALS['__l10n']['Plugin has been successfully upgraded'] = 'L\'extension a été mise à jour avec succès.'; -$GLOBALS['__l10n']['Plugins add new functionalities to Dotclear. Here you can activate or deactivate installed plugins.'] = 'Les extensions ajoutent de nouvelles fonctionnalités à Dotclear. Ici, vous pouvez activer ou désactiver les extensions installées.'; -$GLOBALS['__l10n']['You can find additional plugins for your blog on %s.'] = 'Vous pouvez trouver de nouvelles extensions pour votre blog sur %s.'; -$GLOBALS['__l10n']['To install or upgrade a plugin you generally just need to upload it in "Install or upgrade a plugin" section.'] = 'Tout ce que vous avez à faire pour installer ou mettre à jour une extension est généralement de la déposer dans la section "Installer ou mettre à jour une extension".'; -$GLOBALS['__l10n']['To install or upgrade a plugin you just need to extract it in your plugins directory.'] = 'Tout ce que vous avez à faire pour installer une extension est de l\'extraire dans votre répertoire d\'extensions.'; -$GLOBALS['__l10n']['Plugins'] = 'Extensions'; -$GLOBALS['__l10n']['Activated plugins'] = 'Extensions activées'; -$GLOBALS['__l10n']['Plugin'] = 'Extension'; -$GLOBALS['__l10n']['Version'] = 'Version'; -$GLOBALS['__l10n']['Details'] = 'Détails'; -$GLOBALS['__l10n']['Deactivate'] = 'Désactiver'; -$GLOBALS['__l10n']['Deactivated plugins'] = 'Extensions désactivées'; -$GLOBALS['__l10n']['Activate'] = 'Activer'; -$GLOBALS['__l10n']['Install or upgrade a plugin'] = 'Installer ou mettre à jour une extension'; -$GLOBALS['__l10n']['You can install plugins by uploading or downloading zip files.'] = 'Vous pouvez installer des extensions en déposant ou téléchargeant des fichiers zip.'; -$GLOBALS['__l10n']['Plugin zip file:'] = 'Fichier zip de l\'extension :'; -$GLOBALS['__l10n']['Upload plugin'] = 'Déposer l\'extension'; -$GLOBALS['__l10n']['Plugin zip file URL:'] = 'URL du fichier zip de l\'extension :'; -$GLOBALS['__l10n']['Download plugin'] = 'Télécharger l\'extension'; -$GLOBALS['__l10n']['To enable this function, please give write access to your plugins directory.'] = 'Pour activer cette fonction, donnez un accès en écriture à votre répertoire d\'extensions.'; -$GLOBALS['__l10n']['Add a link'] = 'Ajouter un lien'; -$GLOBALS['__l10n']['Available'] = 'Disponible'; -$GLOBALS['__l10n']['Most used'] = 'Plus utilisées'; -$GLOBALS['__l10n']['Link URL:'] = 'URL du lien :'; -$GLOBALS['__l10n']['Link title:'] = 'Titre du lien :'; -$GLOBALS['__l10n']['Link language:'] = 'Langue du lien :'; -$GLOBALS['__l10n']['Add a link to an entry'] = 'Ajouter un lien vers un billet'; -$GLOBALS['__l10n']['Search entry:'] = 'Rechercher un billet :'; -$GLOBALS['__l10n']['Search'] = 'Rechercher'; -$GLOBALS['__l10n']['cancel'] = 'Annuler'; -$GLOBALS['__l10n']['This entry does not exist.'] = 'Ce billet n\'existe pas.'; -$GLOBALS['__l10n']['Edit entry'] = 'Modifier le billet'; -$GLOBALS['__l10n']['next entry'] = 'billet suivant'; -$GLOBALS['__l10n']['previous entry'] = 'billet précédent'; -$GLOBALS['__l10n']['Entry has been successfully updated.'] = 'Billet mis à jour avec succès.'; -$GLOBALS['__l10n']['Entry has been successfully created.'] = 'Billet créé avec succès.'; -$GLOBALS['__l10n']['File has been successfully attached.'] = 'Fichier attaché avec succès.'; -$GLOBALS['__l10n']['Attachment has been successfully removed.'] = 'Pièce jointe retirée avec succès.'; -$GLOBALS['__l10n']['Comment has been successfully created.'] = 'Commentaire créé avec succès.'; -$GLOBALS['__l10n']['Don\'t forget to validate your XHTML conversion by saving your post.'] = 'Enregistrez votre billet pour valider la transformation en XHTML.'; -$GLOBALS['__l10n']['Go to this entry on the site'] = 'Voir ce billet sur le site'; -$GLOBALS['__l10n']['new window'] = 'nouvelle fenêtre'; -$GLOBALS['__l10n']['Excerpt:'] = 'Extrait :'; -$GLOBALS['__l10n']['Notes:'] = 'Notes :'; -$GLOBALS['__l10n']['Preview'] = 'Prévisualiser'; -$GLOBALS['__l10n']['Entry status:'] = 'État du billet :'; -$GLOBALS['__l10n']['Published on:'] = 'Publié le :'; -$GLOBALS['__l10n']['Text formating:'] = 'Format du texte :'; -$GLOBALS['__l10n']['Convert to XHTML'] = 'Convertir en XHTML'; -$GLOBALS['__l10n']['Selected entry'] = 'Billet sélectionné'; -$GLOBALS['__l10n']['Entry lang:'] = 'Langue du billet :'; -$GLOBALS['__l10n']['Entry password:'] = 'Mot de passe du billet :'; -$GLOBALS['__l10n']['Basename:'] = 'URL spécifique :'; -$GLOBALS['__l10n']['Warning: If you set the URL manually, it may conflict with another entry.'] = 'Attention : si vous indiquez l\'URL manuellement, celle-ci peut entrer en conflit avec un autre billet.'; -$GLOBALS['__l10n']['Ping blogs'] = 'Faire des rétroliens'; -$GLOBALS['__l10n']['Trackbacks'] = 'Rétroliens'; -$GLOBALS['__l10n']['No trackback'] = 'Aucun rétrolien'; -$GLOBALS['__l10n']['Add a comment'] = 'Ajouter un commentaire'; -$GLOBALS['__l10n']['Name:'] = 'Nom :'; -$GLOBALS['__l10n']['IP address'] = 'Adresse IP'; -$GLOBALS['__l10n']['published'] = 'publié'; -$GLOBALS['__l10n']['unpublished'] = 'non publié'; -$GLOBALS['__l10n']['pending'] = 'en attente'; -$GLOBALS['__l10n']['junk'] = 'indésirable'; -$GLOBALS['__l10n']['select this comment'] = 'Sélectionner ce commentaire'; -$GLOBALS['__l10n']['select this trackback'] = 'Sélectionner ce rétrolien'; -$GLOBALS['__l10n']['Edit this comment'] = 'Modifier ce commentaire'; -$GLOBALS['__l10n']['This attachment does not exist'] = 'Cette pièce jointe n\'existe pas'; -$GLOBALS['__l10n']['Remove attachment'] = 'Supprimer la pièce jointe'; -$GLOBALS['__l10n']['Attachment'] = 'Pièce jointe'; -$GLOBALS['__l10n']['Are you sure you want to remove this attachment?'] = 'Êtes-vous certain de vouloir supprimer cette pièce jointe ?'; -$GLOBALS['__l10n']['selected'] = 'sélectionné'; -$GLOBALS['__l10n']['not selected'] = 'non sélectionné'; -$GLOBALS['__l10n']['Category'] = 'Catégorie'; -$GLOBALS['__l10n']['Selected'] = 'Sélectionné'; -$GLOBALS['__l10n']['Publish'] = 'Publier'; -$GLOBALS['__l10n']['Unpublish'] = 'Mettre hors ligne'; -$GLOBALS['__l10n']['Schedule'] = 'Programmer'; -$GLOBALS['__l10n']['Mark as pending'] = 'Mettre en attente'; -$GLOBALS['__l10n']['Mark'] = 'Marquer'; -$GLOBALS['__l10n']['Mark as selected'] = 'Sélectionner'; -$GLOBALS['__l10n']['Mark as unselected'] = 'Désélectionner'; -$GLOBALS['__l10n']['Change'] = 'Changer'; -$GLOBALS['__l10n']['Change category'] = 'Changer la catégorie'; -$GLOBALS['__l10n']['Change author'] = 'Changer l\'auteur'; -$GLOBALS['__l10n']['Selected:'] = 'Sélectionné :'; -$GLOBALS['__l10n']['Month:'] = 'Mois :'; -$GLOBALS['__l10n']['Lang:'] = 'Langue :'; -$GLOBALS['__l10n']['Selected entries action:'] = 'Action sur les billets sélectionnés :'; -$GLOBALS['__l10n']['This user does not exist'] = 'Cet utilisateur n\'existe pas'; -$GLOBALS['__l10n']['Change category for entries'] = 'Changer de catégorie pour les billets'; -$GLOBALS['__l10n']['Change author for entries'] = 'Changer l\'auteur des billets'; -$GLOBALS['__l10n']['Author ID:'] = 'Identifiant de l\'utilisateur :'; -$GLOBALS['__l10n']['Default'] = 'Défaut'; -$GLOBALS['__l10n']['If you want to change your email or password you must provide your current password.'] = 'Si vous voulez changer votre adresse email ou votre mot de passe, vous devez indiquer votre mot de passe actuel.'; -$GLOBALS['__l10n']['No favorite selected'] = 'Aucun favori sélectionné'; -$GLOBALS['__l10n']['Personal information has been successfully updated.'] = 'Informations personnelles mises à jour avec succès.'; -$GLOBALS['__l10n']['Personal options has been successfully updated.'] = 'Vos options personnelles ont été enregistrées avec succès.'; -$GLOBALS['__l10n']['Favorites have been successfully added.'] = 'Les favoris ont été ajoutés avec succès.'; -$GLOBALS['__l10n']['Favorites have been successfully updated.'] = 'Les favoris ont été mis à jour avec succès.'; -$GLOBALS['__l10n']['Favorites have been successfully removed.'] = 'Les favoris ont été retirés avec succès.'; -$GLOBALS['__l10n']['Default favorites have been successfully updated.'] = 'Les favoris par défaut ont été enregistrés avec succès.'; -$GLOBALS['__l10n']['My profile'] = 'Mon profil'; -$GLOBALS['__l10n']['Display name:'] = 'Pseudonyme :'; -$GLOBALS['__l10n']['User language:'] = 'Langue de l\'utilisateur :'; -$GLOBALS['__l10n']['User timezone:'] = 'Fuseau horaire de l\'utilisateur :'; -$GLOBALS['__l10n']['If you have changed this user email or password you must provide your current password to save these modifications.'] = 'Si vous voulez changer votre adresse email ou votre mot de passe, vous devez indiquer votre mot de passe.'; -$GLOBALS['__l10n']['My options'] = 'Mes options'; -$GLOBALS['__l10n']['Preferred format:'] = 'Format d\'édition préféré :'; -$GLOBALS['__l10n']['Default entry status:'] = 'État des billets par défaut :'; -$GLOBALS['__l10n']['Entry edit field height:'] = 'Taille de la zone d\'édition :'; -$GLOBALS['__l10n']['Enable WYSIWYG mode'] = 'Activer l\'éditeur visuel'; -$GLOBALS['__l10n']['Activate enhanced uploader in media manager'] = 'Activer l\'interface avancée du gestionnaire de médias'; -$GLOBALS['__l10n']['Hide My favorites menu'] = 'Cacher le menu Mes Favoris'; -$GLOBALS['__l10n']['Iconset:'] = 'Jeu d\'icônes :'; -$GLOBALS['__l10n']['Do not use standard favicon'] = 'Ne pas utiliser le favicon standard'; -$GLOBALS['__l10n']['This will be applied for all users'] = 'Ce choix sera actif pour tous les utilisateurs'; -$GLOBALS['__l10n']['Accessibility options'] = 'Options d\'accessibilité'; -$GLOBALS['__l10n']['Disable javascript powered drag and drop for ordering items'] = 'Désactiver le drag and drop javascript pour ordonnancer les éléments'; -$GLOBALS['__l10n']['Numeric fields will allow to type the elements\' ordering number.'] = 'Des champs numériques permettront d\'indiquer la position des éléments.'; -$GLOBALS['__l10n']['Dashboard modules'] = 'Modules du tableau de bord'; -$GLOBALS['__l10n']['Display documentation links'] = 'Afficher les liens de documentation'; -$GLOBALS['__l10n']['Display Dotclear news'] = 'Afficher les nouvelles de Dotclear'; -$GLOBALS['__l10n']['Display quick entry form'] = 'Afficher le formulaire de billet rapide'; -$GLOBALS['__l10n']['My favorites'] = 'Mes favoris'; -$GLOBALS['__l10n']['position of %s'] = 'position de %s'; -$GLOBALS['__l10n']['Save order'] = 'Enregistrer l\'ordre'; -$GLOBALS['__l10n']['Delete selected favorites'] = 'Retirer les favoris sélectionnés'; -$GLOBALS['__l10n']['Are you sure you want to remove selected favorites?'] = 'Êtes-vous sûr de vouloir retirer les favoris sélectionnés ?'; -$GLOBALS['__l10n']['If you are a super administrator, you may define this set of favorites to be used by default on all blogs of this installation:'] = 'Si vous êtes super administrateur, vous pouvez définir ce jeu de favoris comme l\'ensemble par défaut pour tous les blogs de l\'installation :'; -$GLOBALS['__l10n']['Define as default favorites'] = 'Définir comme favoris par défaut'; -$GLOBALS['__l10n']['Currently no personal favorites.'] = 'La liste de vos favoris est vide pour le moment.'; -$GLOBALS['__l10n']['Default favorites'] = 'Favoris par défaut'; -$GLOBALS['__l10n']['Those favorites are displayed when My Favorites list is empty.'] = 'Favoris affichés quand la liste Mes Favoris est vide.'; -$GLOBALS['__l10n']['Available favorites'] = 'Favoris disponibles'; -$GLOBALS['__l10n']['Add to my favorites'] = 'Ajouter à mes favoris'; -$GLOBALS['__l10n']['Search options'] = 'Options de recherche'; -$GLOBALS['__l10n']['Query:'] = 'Requête :'; -$GLOBALS['__l10n']['Search entries'] = 'Rechercher des billets'; -$GLOBALS['__l10n']['Search comments'] = 'Rechercher des commentaires'; -$GLOBALS['__l10n']['schedule'] = 'programmer'; -$GLOBALS['__l10n']['change category'] = 'changer la catégorie'; -$GLOBALS['__l10n']['change author'] = 'changer l\'auteur'; -$GLOBALS['__l10n']['%d entries found'] = '%d billets trouvés'; -$GLOBALS['__l10n']['%d entry found'] = '%d billet trouvé'; -$GLOBALS['__l10n']['%d comment found'] = '%d commentaire trouvé'; -$GLOBALS['__l10n']['%d comments found'] = '%d commentaires trouvés'; -$GLOBALS['__l10n']['This entry does not exist or is not published'] = 'Ce billet n\'existe pas ou n\'est pas publié'; -$GLOBALS['__l10n']['All pings sent.'] = 'Tous les rétroliens ont été envoyés.'; -$GLOBALS['__l10n']['Back to "%s"'] = 'Retour à "%s"'; -$GLOBALS['__l10n']['Auto discover ping URLs'] = 'Découverte automatique des URL à rétrolier'; -$GLOBALS['__l10n']['URLs to ping:'] = 'URLs à rétrolier :'; -$GLOBALS['__l10n']['Send excerpt:'] = 'Envoyer l\'extrait :'; -$GLOBALS['__l10n']['Previously sent pings'] = 'Rétroliens déjà envoyés'; -$GLOBALS['__l10n']['Dotclear update'] = 'Mise à jour de Dotclear'; -$GLOBALS['__l10n']['Unable to delete file %s'] = 'Impossible de supprimer le fichier %s'; -$GLOBALS['__l10n']['Downloaded Dotclear archive seems to be corrupted. Try download it again.'] = 'L\'archive téléchargée de Dotclear semble être corrompue. Essayer de la télécharger à nouveau.'; -$GLOBALS['__l10n']['The following files of your Dotclear installation have been modified so we won\'t try to update your installation. Please try to update manually.'] = 'Comme les fichiers suivants de votre installation de Dotclear ont été modifiés, votre installation ne peut être mise à jour. Merci de mettre à jour manuellement.'; -$GLOBALS['__l10n']['The following files of your Dotclear installation are not readable. Please fix this or try to make a backup file named %s manually.'] = 'Les fichiers suivants de votre installation de Dotclear ne peuvent pas être lus. Veuillez corriger ceci ou créer un fichier de backup nommé %s manuellement.'; -$GLOBALS['__l10n']['The following files of your Dotclear installation cannot be written. Please fix this or try to update manually.'] = 'Les fichiers suivants de votre installation de Dotclear ne peuvent pas être écrits. Veuillez corriger ceci ou mettre à jour manuellement.'; -$GLOBALS['__l10n']['No newer Dotclear version available.'] = 'Aucune nouvelle version de Dotclear n\'est disponible.'; -$GLOBALS['__l10n']['Dotclear %s is available.'] = 'Dotclear %s est disponible.'; -$GLOBALS['__l10n']['To upgrade your Dotclear installation simply click on the following button. A backup file of your current installation will be created in your root directory.'] = 'Pour mettre à jour votre installation de Dotclear, cliquez sur le bouton suivant. Un fichier de sauvegarde de votre installation actuelle sera créé dans votre répertoire principal.'; -$GLOBALS['__l10n']['Update Dotclear'] = 'Mettre à jour Dotclear'; -$GLOBALS['__l10n']['Update backup files'] = 'Sauvegardes des mises à jour'; -$GLOBALS['__l10n']['The following files are backups of previously updates. You can revert your previous installation or delete theses files.'] = 'Les fichiers suivants sont des sauvegardes de mises à jour précédentes. Vous pouvez rétablir votre installation précédente ou supprimer ces fichiers.'; -$GLOBALS['__l10n']['Please note that reverting your Dotclear version may have some unwanted side-effects. Consider reverting only if you experience strong issues with this new version.'] = 'Merci de noter que rétablir votre version de Dotclear peut avoir des effets non désirés. N\'envisagez ceci que si vous rencontrez d\'importantes difficultés avec cette nouvelle version.'; -$GLOBALS['__l10n']['You should not revert to version prior to last one (%s).'] = 'Vous ne devez pas rétablir une version précédant la dernière (%s).'; -$GLOBALS['__l10n']['Delete selected file'] = 'Supprimer le fichier sélectionné'; -$GLOBALS['__l10n']['Revert to selected file'] = 'Rétablir le fichier sélectionné'; -$GLOBALS['__l10n']['Congratulations, you\'re one click away from the end of the update.'] = 'Félicitations, vous êtes à un clic de la fin de la mise à jour.'; -$GLOBALS['__l10n']['Finish the update.'] = 'Finir la mise à jour.'; -$GLOBALS['__l10n']['new user'] = 'nouvel utilisateur'; -$GLOBALS['__l10n']['User "%s" already exists.'] = 'L\'utilisateur "%s" existe déjà.'; -$GLOBALS['__l10n']['User has been successfully updated.'] = 'Utilisateur mis à jour avec succès.'; -$GLOBALS['__l10n']['User has been successfully created.'] = 'Utilisateur créé avec succès.'; -$GLOBALS['__l10n']['Warning:'] = 'Attention :'; -$GLOBALS['__l10n']['If you change your username, you will have to log in again.'] = 'Si vous changez votre login, vous devrez vous identifier à nouveau.'; -$GLOBALS['__l10n']['Mandatory for password recovering procedure.'] = 'Obligatoire pour la procédure de récupération de mot de passe.'; -$GLOBALS['__l10n']['Password change required to connect'] = 'Changement de mot de passe requis pour la connexion'; -$GLOBALS['__l10n']['Save and create another'] = 'Enregistrer et créer un nouveau'; -$GLOBALS['__l10n']['No permissions.'] = 'Aucune permission.'; -$GLOBALS['__l10n']['Add new permissions'] = 'Ajouter de nouvelles permissions'; -$GLOBALS['__l10n']['Username'] = 'Identifiant'; -$GLOBALS['__l10n']['Last Name'] = 'Nom'; -$GLOBALS['__l10n']['First Name'] = 'Prénom'; -$GLOBALS['__l10n']['Display name'] = 'Pseudonyme'; -$GLOBALS['__l10n']['Number of entries'] = 'Nombre de billets'; -$GLOBALS['__l10n']['users'] = 'utilisateurs'; -$GLOBALS['__l10n']['User has been successfully removed.'] = 'Utilisateur supprimé avec succès.'; -$GLOBALS['__l10n']['Create a new user'] = 'Créer un nouvel utilisateur'; -$GLOBALS['__l10n']['Users per page'] = 'Utilisateurs par page'; -$GLOBALS['__l10n']['Selected users action:'] = 'Action sur les utilisateurs sélectionnés :'; -$GLOBALS['__l10n']['Blog:'] = 'Blog :'; -$GLOBALS['__l10n']['Change blog'] = 'Changer de blog'; -$GLOBALS['__l10n']['Blogs:'] = 'Blogs :'; -$GLOBALS['__l10n']['Go to the content'] = 'Aller au contenu'; -$GLOBALS['__l10n']['Go to the menu'] = 'Aller au menu'; -$GLOBALS['__l10n']['Go to site'] = 'Aller sur le site'; -$GLOBALS['__l10n']['My dashboard'] = 'Mon tableau de bord'; -$GLOBALS['__l10n']['Logout %s'] = 'Déconnecter %s'; -$GLOBALS['__l10n']['Safe mode'] = 'Mode de secours'; -$GLOBALS['__l10n']['You are in safe mode. All plugins have been temporarily disabled. Remind to log out then log in again normally to get back all functionalities'] = 'Vous êtes en mode de secours. Tous les plugins ont été temporairement désactivés. N\'oubliez-pas de vous déconnecter puis de vous reconnecter normalement pour retrouver toutes les fonctionnalités'; -$GLOBALS['__l10n']['Thank you for using %s.'] = 'Merci d\'utiliser %s.'; -$GLOBALS['__l10n']['Help'] = 'Aide'; -$GLOBALS['__l10n']['uncover'] = 'dévoiler'; -$GLOBALS['__l10n']['hide'] = 'cacher'; -$GLOBALS['__l10n']['help'] = 'aide'; -$GLOBALS['__l10n']['no selection'] = 'aucune sélection'; -$GLOBALS['__l10n']['select all'] = 'tout sélectionner'; -$GLOBALS['__l10n']['invert selection'] = 'inverser la sélection'; -$GLOBALS['__l10n']['view entry'] = 'voir le billet'; -$GLOBALS['__l10n']['Are you sure you want to delete selected entries (%s)?'] = 'Êtes-vous certain de vouloir supprimer les billets sélectionnés (%s) ?'; -$GLOBALS['__l10n']['Are you sure you want to delete this entry?'] = 'Êtes-vous certain de vouloir supprimer ce billet ?'; -$GLOBALS['__l10n']['Are you sure you want to delete selected comments (%s)?'] = 'Êtes-vous certain de vouloir supprimer les commentaires sélectionnés (%s) ?'; -$GLOBALS['__l10n']['Are you sure you want to delete this comment?'] = 'Êtes-vous certain de vouloir supprimer ce commentaire ?'; -$GLOBALS['__l10n']['Users with posts cannot be deleted.'] = 'Les utilisateurs ayant écrit des billets ne peuvent être effacées.'; -$GLOBALS['__l10n']['Are you sure you want to delete selected users (%s)?'] = 'Êtes-vous certain de vouloir supprimer les utilisateurs sélectionnés (%s) ?'; -$GLOBALS['__l10n']['Are you sure you want to delete category "%s"?'] = 'Êtes-vous certain de vouloir supprimer la catégorie "%s" ?'; -$GLOBALS['__l10n']['Are you sure you want to reorder all categories?'] = 'Êtes-vous certain de vouloir réinitialiser l\'ordre des catégories ?'; -$GLOBALS['__l10n']['Are you sure you want to remove media "%s"?'] = 'Êtes-vous certain de vouloir supprimer le média "%s" ?'; -$GLOBALS['__l10n']['Are you sure you want to extract archive in current directory?'] = 'Êtes-vous certain de vouloir extraire l\'archive dans le répertoire actuel ?'; -$GLOBALS['__l10n']['Are you sure you want to remove attachment "%s"?'] = 'Êtes-vous certain de vouloir supprimer la pièce jointe "%s" ?'; -$GLOBALS['__l10n']['Are you sure you want to delete "%s" language?'] = 'Êtes-vous certain de vouloir supprimer la langue "%s" ?'; -$GLOBALS['__l10n']['Are you sure you want to delete "%s" plugin?'] = 'Êtes-vous certain de vouloir supprimer l\'extension "%s" ?'; -$GLOBALS['__l10n']['Use this theme'] = 'Utiliser ce thème'; -$GLOBALS['__l10n']['Remove this theme'] = 'Supprimer ce thème'; -$GLOBALS['__l10n']['Are you sure you want to delete "%s" theme?'] = 'Êtes-vous certain de vouloir supprimer le thème "%s" ?'; -$GLOBALS['__l10n']['Zip file content'] = 'Contenu du fichier zip'; -$GLOBALS['__l10n']['XHTML markup validator'] = 'Validation XHTML'; -$GLOBALS['__l10n']['XHTML content is valid.'] = 'Le contenu XHTML est valide.'; -$GLOBALS['__l10n']['There are XHTML markup errors.'] = 'Il y a des erreurs XHTML.'; -$GLOBALS['__l10n']['You have unsaved changes. Switch post format will loose these changes. Proceed anyway?'] = 'Vous avez des modifications non sauvegardées. Changer de format vous fera perdre ces modifications. Continuer ?'; -$GLOBALS['__l10n']['Loading enhanced uploader, please wait.'] = 'Chargement de l\'interface avancée.'; -$GLOBALS['__l10n']['You have unsaved changes.'] = 'Vous n\'avez pas enregistré vos modifications.'; -$GLOBALS['__l10n']['close'] = 'fermer'; -$GLOBALS['__l10n']['now'] = 'maintenant'; -$GLOBALS['__l10n']['visual'] = 'visuel'; -$GLOBALS['__l10n']['source'] = 'source'; -$GLOBALS['__l10n']['You can use the following shortcuts to format your text.'] = 'Vous pouvez utiliser les raccourcis suivants pour formater votre texte.'; -$GLOBALS['__l10n']['-- none --'] = '-- aucun --'; -$GLOBALS['__l10n']['-- block format --'] = '-- format bloc --'; -$GLOBALS['__l10n']['Paragraph'] = 'Paragraphe'; -$GLOBALS['__l10n']['Level 1 header'] = 'Titre de niveau 1'; -$GLOBALS['__l10n']['Level 2 header'] = 'Titre de niveau 2'; -$GLOBALS['__l10n']['Level 3 header'] = 'Titre de niveau 3'; -$GLOBALS['__l10n']['Level 4 header'] = 'Titre de niveau 4'; -$GLOBALS['__l10n']['Level 5 header'] = 'Titre de niveau 5'; -$GLOBALS['__l10n']['Level 6 header'] = 'Titre de niveau 6'; -$GLOBALS['__l10n']['Strong emphasis'] = 'Forte emphase'; -$GLOBALS['__l10n']['Emphasis'] = 'Emphase'; -$GLOBALS['__l10n']['Inserted'] = 'Insertion'; -$GLOBALS['__l10n']['Deleted'] = 'Suppression'; -$GLOBALS['__l10n']['Inline quote'] = 'Citation en ligne'; -$GLOBALS['__l10n']['Code'] = 'Code'; -$GLOBALS['__l10n']['Line break'] = 'Passage à la ligne'; -$GLOBALS['__l10n']['Blockquote'] = 'Bloc de citation'; -$GLOBALS['__l10n']['Preformated text'] = 'Texte préformaté'; -$GLOBALS['__l10n']['Unordered list'] = 'Liste à puces'; -$GLOBALS['__l10n']['Ordered list'] = 'Liste numérotée'; -$GLOBALS['__l10n']['Link'] = 'Lien'; -$GLOBALS['__l10n']['URL?'] = 'URL ?'; -$GLOBALS['__l10n']['Language?'] = 'Langue ?'; -$GLOBALS['__l10n']['External image'] = 'Image externe'; -$GLOBALS['__l10n']['Media chooser'] = 'Sélecteur de média'; -$GLOBALS['__l10n']['Link to an entry'] = 'Lien vers un billet'; -$GLOBALS['__l10n']['Activate enhanced uploader'] = 'Activer l\'interface avancée'; -$GLOBALS['__l10n']['Disable enhanced uploader'] = 'Désactiver l\'interface avancée'; -$GLOBALS['__l10n']['File successfully uploaded.'] = 'Fichier envoyé avec succès.'; -$GLOBALS['__l10n']['Maximum file size allowed:'] = 'Taille maximale de fichier autorisée :'; -$GLOBALS['__l10n']['Limit exceeded.'] = 'Limite dépassée.'; -$GLOBALS['__l10n']['File size exceeds allowed limit.'] = 'La taille du fichier dépasse la limite autorisée.'; -$GLOBALS['__l10n']['Canceled.'] = 'Annulé.'; -$GLOBALS['__l10n']['HTTP Error:'] = 'Erreur HTTP :'; -$GLOBALS['__l10n']['Choose file'] = 'Choisir un fichier'; -$GLOBALS['__l10n']['Choose files'] = 'Choisir des fichiers'; -$GLOBALS['__l10n']['Clean'] = 'Nettoyer'; -$GLOBALS['__l10n']['Upload'] = 'Envoyer'; -$GLOBALS['__l10n']['No file in queue.'] = 'Aucun fichier en file d\'attente.'; -$GLOBALS['__l10n']['1 file in queue.'] = '1 fichier en attente.'; -$GLOBALS['__l10n']['%d files in queue.'] = '%d fichiers en attente.'; -$GLOBALS['__l10n']['Queue error:'] = 'Erreur de file d\'attente :'; -$GLOBALS['__l10n']['«prev.'] = '«préc.'; -$GLOBALS['__l10n']['next»'] = 'suiv.»'; -$GLOBALS['__l10n']['No entry'] = 'Pas de billet'; -$GLOBALS['__l10n']['scheduled'] = 'programmé'; -$GLOBALS['__l10n']['protected'] = 'protégé'; -$GLOBALS['__l10n']['%d attachment'] = '%d annexe'; -$GLOBALS['__l10n']['%d attachments'] = '%d annexes'; -$GLOBALS['__l10n']['Type'] = 'Type'; -$GLOBALS['__l10n']['No user'] = 'Pas d\'utilisateur'; -$GLOBALS['__l10n']['admin'] = 'Administrateur'; -$GLOBALS['__l10n']['superadmin'] = 'Super administrateur'; -$GLOBALS['__l10n']['Database error'] = 'Erreur de base de données :'; -$GLOBALS['__l10n']['There seems to be no Session table in your database. Is Dotclear completly installed?'] = 'Il semble de la table Session n\'existe pas dans votre base de données. Dotclear est-il bien installé correctement?'; -$GLOBALS['__l10n']['System'] = 'Système'; -$GLOBALS['__l10n']['Blog'] = 'Blog'; -$GLOBALS['__l10n']['Updates'] = 'Mises à jour'; -$GLOBALS['__l10n']['Languages'] = 'Langues'; -$GLOBALS['__l10n']['administrator'] = 'administrateur'; -$GLOBALS['__l10n']['manage their own entries and comments'] = 'gérer ses propres billets et commentaires'; -$GLOBALS['__l10n']['publish entries and comments'] = 'publier des billets et des commentaires'; -$GLOBALS['__l10n']['delete entries and comments'] = 'supprimer des billets et des commentaires'; -$GLOBALS['__l10n']['manage all entries and comments'] = 'gérer tous les billets et commentaires'; -$GLOBALS['__l10n']['manage categories'] = 'gérer les catégories'; -$GLOBALS['__l10n']['manage their own media items'] = 'gérer ses propres médias'; -$GLOBALS['__l10n']['manage all media items'] = 'gérer tous les médias'; -$GLOBALS['__l10n']['That user does not exist in the database.'] = 'Cet utilisateur n\'existe pas dans la base de données.'; -$GLOBALS['__l10n']['That key does not exist in the database.'] = 'Cette clé n\'existe pas dans la base de données.'; -$GLOBALS['__l10n']['You are not allowed to add categories'] = 'Vous n\'êtes pas autorisé à créer des catégories'; -$GLOBALS['__l10n']['You are not allowed to update categories'] = 'Vous n\'êtes pas autorisé à modifier des catégories'; -$GLOBALS['__l10n']['You are not allowed to delete categories'] = 'Vous n\'êtes pas autorisé à supprimer des catégories'; -$GLOBALS['__l10n']['This category is not empty.'] = 'Cette catégorie n\'est pas vide.'; -$GLOBALS['__l10n']['You are not allowed to reset categories order'] = 'Vous n\'êtes pas autorisé à modifier l\'ordre des catégories'; -$GLOBALS['__l10n']['Category URL must be unique.'] = 'L\'URL de chaque catégorie doit être unique.'; -$GLOBALS['__l10n']['You must provide a category title'] = 'Vous devez indiquer un titre de catégorie'; -$GLOBALS['__l10n']['You must provide a category URL'] = 'Vous devez indiquer une URL de catégorie'; -$GLOBALS['__l10n']['You are not allowed to create an entry'] = 'Vous n\'êtes pas autorisé à créer des billets'; -$GLOBALS['__l10n']['You are not allowed to update entries'] = 'Vous n\'êtes pas autorisé à modifier les billets'; -$GLOBALS['__l10n']['No such entry ID'] = 'Identifiant du billet inconnu'; -$GLOBALS['__l10n']['You are not allowed to edit this entry'] = 'Vous n\'êtes pas autorisé à modifier ce billet'; -$GLOBALS['__l10n']['You are not allowed to change this entry status'] = 'Vous n\'êtes pas autorisé à modifier l\'état de ce billet'; -$GLOBALS['__l10n']['You are not allowed to change this entry category'] = 'Vous n\'êtes pas autorisé à modifier la catégorie de ce billet'; -$GLOBALS['__l10n']['You are not allowed to mark this entry as selected'] = 'Vous n\'êtes pas autorisé à marquer ce billet comme sélectionné'; -$GLOBALS['__l10n']['You are not allowed to delete entries'] = 'Vous n\'êtes pas autorisé à supprimer des billets'; -$GLOBALS['__l10n']['You are not allowed to delete this entry'] = 'Vous n\'êtes pas autorisé à supprimer ce billet'; -$GLOBALS['__l10n']['No entry title'] = 'Pas de titre de billet'; -$GLOBALS['__l10n']['No entry content'] = 'Pas de contenu de billet'; -$GLOBALS['__l10n']['Empty entry URL'] = 'URL du billet vide'; -$GLOBALS['__l10n']['You are not allowed to update comments'] = 'Vous n\'êtes pas autorisé à modifier des commentaires'; -$GLOBALS['__l10n']['No such comment ID'] = 'Identifiant du commentaire inconnu'; -$GLOBALS['__l10n']['You are not allowed to update this comment'] = 'Vous n\'êtes pas autorisé à modifier ce commentaire'; -$GLOBALS['__l10n']['You are not allowed to change this comment\'s status'] = 'Vous n\'êtes pas autorisé à changer l\'état de ce commentaire'; -$GLOBALS['__l10n']['You are not allowed to delete comments'] = 'Vous n\'êtes pas autorisé à supprimer des commentaires'; -$GLOBALS['__l10n']['You are not allowed to delete this comment'] = 'Vous n\'êtes pas autorisé à supprimer ce commentaire'; -$GLOBALS['__l10n']['You must provide a comment'] = 'Vous devez indiquer un commentaire'; -$GLOBALS['__l10n']['You must provide an author name'] = 'Vous devez indiquer un nom d\'auteur'; -$GLOBALS['__l10n']['Email address is not valid.'] = 'Adresse email invalide.'; -$GLOBALS['__l10n']['online'] = 'en ligne'; -$GLOBALS['__l10n']['offline'] = 'hors ligne'; -$GLOBALS['__l10n']['removed'] = 'supprimé'; -$GLOBALS['__l10n']['You are not an administrator'] = 'Vous n\'êtes pas administrateur'; -$GLOBALS['__l10n']['Invalid user language code'] = 'Code langue de l\'utilisateur invalide'; -$GLOBALS['__l10n']['Blog ID must contain at least 2 characters using letters, numbers or symbols.'] = 'L\'identifiant du blog doit contenir au moins 2 caractères composés de lettres, chiffres ou symboles.'; -$GLOBALS['__l10n']['No blog name'] = 'Pas de nom de blog'; -$GLOBALS['__l10n']['No blog URL'] = 'Pas d\'URL de blog'; -$GLOBALS['__l10n']['No log message'] = 'Pas de message dans le journal'; -$GLOBALS['__l10n']['unknown'] = 'inconnu'; -$GLOBALS['__l10n']['No blog defined.'] = 'Aucun blog défini.'; -$GLOBALS['__l10n']['Directory %s does not exist.'] = 'Le répertoire %s n\'existe pas.'; -$GLOBALS['__l10n']['You are not a super administrator.'] = 'Vous n\'êtes pas super administrateur.'; -$GLOBALS['__l10n']['Permission denied.'] = 'Permission refusée.'; -$GLOBALS['__l10n']['You are not the file owner.'] = 'Vous n\'êtes pas le propriétaire de ce fichier.'; -$GLOBALS['__l10n']['This file is not allowed.'] = 'Ce fichier n\'est pas autorisé.'; -$GLOBALS['__l10n']['New file already exists.'] = 'Le nouveau fichier existe déjà.'; -$GLOBALS['__l10n']['File does not exist in the database.'] = 'Ce fichier n\'existe pas dans la base de données.'; -$GLOBALS['__l10n']['Extract destination directory %s already exists.'] = 'Le répertoire de destination d\'extraction %s existe déjà.'; -$GLOBALS['__l10n']['Embedded Audio Player'] = 'Fichier audio intégré'; -$GLOBALS['__l10n']['Embedded Video Player'] = 'Fichier vidéo intégré'; -$GLOBALS['__l10n']['%s: in [%s] and [%s]'] = '%s: dans [%s] et [%s]'; -$GLOBALS['__l10n']['Empty module zip file.'] = 'Fichier zip de module vide.'; -$GLOBALS['__l10n']['The zip file does not appear to be a valid Dotclear module.'] = 'Le fichier zip ne semble pas être un fichier valide de module Dotclear.'; -$GLOBALS['__l10n']['An error occurred during module deletion.'] = 'Une erreur est survenue durant la suppression du module.'; -$GLOBALS['__l10n']['Unable to upgrade "%s". (same version)'] = 'Impossible de mettre à jour "%s" (même version).'; -$GLOBALS['__l10n']['Unable to read new _define.php file'] = 'Impossible de lire le nouveau fichier _define.php.'; -$GLOBALS['__l10n']['No such module.'] = 'Module inexistant.'; -$GLOBALS['__l10n']['Cannot remove module files'] = 'Impossible de supprimer les fichiers du module'; -$GLOBALS['__l10n']['Cannot deactivate plugin.'] = 'L\'extension ne peut pas être désactivée.'; -$GLOBALS['__l10n']['Cannot activate plugin.'] = 'L\'extension ne peut pas être activée.'; -$GLOBALS['__l10n']['Invalid setting dcNamespace: %s'] = 'Espace de nommage du paramètre invalide : %s'; -$GLOBALS['__l10n']['Unable to retrieve settings:'] = 'Impossible d\'obtenir les paramètres :'; -$GLOBALS['__l10n']['%s is not a valid setting id'] = '%s n\'est pas un identifiant de paramètre valide'; -$GLOBALS['__l10n']['No namespace specified'] = 'Aucun espace de nommage spécifié'; -$GLOBALS['__l10n']['Unable to retrieve workspaces:'] = 'Impossible d\'obtenir les espaces de travail :'; -$GLOBALS['__l10n']['Unable to retrieve namespaces:'] = 'Impossible d\'obtenir les espaces de nommage :'; -$GLOBALS['__l10n']['Invalid setting namespace: %s'] = 'Espace de nommage du paramètre invalide : %s'; -$GLOBALS['__l10n']['%s has still been pinged'] = 'Un rétrolien vers %s a déjà été fait'; -$GLOBALS['__l10n']['Unable to ping URL'] = 'Impossible de réaliser le rétrolien'; -$GLOBALS['__l10n']['%s is not a ping URL'] = '%s n\'est pas une URL de rétrolien'; -$GLOBALS['__l10n']['%s, ping error:'] = '%s, erreur de rétrolien :'; -$GLOBALS['__l10n']['Digests file not found.'] = 'Fichier de contrôle introuvable.'; -$GLOBALS['__l10n']['No file to download'] = 'Aucun fichier à télécharger.'; -$GLOBALS['__l10n']['Root directory is not writable.'] = 'Le répertoire principal n\'est pas accessible en écriture.'; -$GLOBALS['__l10n']['An error occurred while downloading archive.'] = 'Une erreur est survenue lors du téléchargement de l\'archive.'; -$GLOBALS['__l10n']['Archive not found.'] = 'L\'archive n\'a pas été trouvée.'; -$GLOBALS['__l10n']['Unable to read current digests file.'] = 'Impossible de lire le fichier de contrôle actuel.'; -$GLOBALS['__l10n']['Downloaded file does not seem to be a valid archive.'] = 'Le fichier téléchargé ne semble pas être une archive valide.'; -$GLOBALS['__l10n']['Incomplete archive.'] = 'Archive incomplète.'; -$GLOBALS['__l10n']['Unable to read digests file.'] = 'Impossible de lire le fichier de contrôle.'; -$GLOBALS['__l10n']['Invalid digests file.'] = 'Fichier de contrôle invalide.'; -$GLOBALS['__l10n']['Invalid dcWorkspace: %s'] = 'Espace de travail de la préférence invalide : %s'; -$GLOBALS['__l10n']['Unable to retrieve prefs:'] = 'Impossible d\'obtenir les préférences :'; -$GLOBALS['__l10n']['%s is not a valid pref id'] = '%s n\'est pas un identifiant de préférence valide'; -$GLOBALS['__l10n']['No workspace specified'] = 'Aucun espace de travail spécifié'; -$GLOBALS['__l10n']['SQLite Database Schema cannot be upgraded.'] = 'Le schema de base de données SQLite ne peut pas être mis à jour.'; -$GLOBALS['__l10n']['Something went wrong with auto upgrade:'] = 'Une erreur est survenue durant la mise à jour automatique :'; -$GLOBALS['__l10n']['Unable to open directory.'] = 'Impossible d\'ouvrir le répertoire.'; -$GLOBALS['__l10n']['Unable to create directory.'] = 'Impossible de créer le répertoire.'; -$GLOBALS['__l10n']['File is not writable.'] = 'Le fichier n\'est pas accessible en écriture.'; -$GLOBALS['__l10n']['Unable to open file.'] = 'Impossible d\'ouvrir le fichier.'; -$GLOBALS['__l10n']['Not an uploaded file.'] = 'Pas un fichier déposé.'; -$GLOBALS['__l10n']['The uploaded file exceeds the maximum file size allowed.'] = 'Le fichier déposé est plus grand que la taille maximale autorisée.'; -$GLOBALS['__l10n']['The uploaded file was only partially uploaded.'] = 'Le fichier n\'a été chargé qu\'en partie.'; -$GLOBALS['__l10n']['No file was uploaded.'] = 'Aucun fichier chargé.'; -$GLOBALS['__l10n']['Missing a temporary folder.'] = 'Il manque un répertoire temporaire.'; -$GLOBALS['__l10n']['Failed to write file to disk.'] = 'Impossible d\'écrire le fichier.'; -$GLOBALS['__l10n']['%s is not a directory.'] = '%s n\'est pas un répertoire.'; -$GLOBALS['__l10n']['Bad range'] = 'Mauvaises limites'; -$GLOBALS['__l10n']['Invalid range'] = 'Sélection invalide'; -$GLOBALS['__l10n']['Invalid line number'] = 'Numéro de ligne invalide invalide'; -$GLOBALS['__l10n']['Chunk is out of range'] = 'L\'extrait est hors limite'; -$GLOBALS['__l10n']['Bad context'] = 'Contexte invalide'; -$GLOBALS['__l10n']['Bad context (in deletion)'] = 'Contexte invalide (lors de la suppression)'; -$GLOBALS['__l10n']['Invalid diff format'] = 'Format de fichier diff invalide.'; -$GLOBALS['__l10n']['Uploading this file is not allowed.'] = 'L\'envoi de ce fichier n\'est pas autorisé.'; -$GLOBALS['__l10n']['Destination directory is not in jail.'] = 'Le répertoire cible n\'est pas en jail.'; -$GLOBALS['__l10n']['File already exists.'] = 'Le nouveau fichier existe déjà.'; -$GLOBALS['__l10n']['Cannot write in this directory.'] = 'Impossible d\'écrire dans ce répertoire.'; -$GLOBALS['__l10n']['An error occurred while writing the file.'] = 'Une erreur est survenue pendant l\'écriture du fichier.'; -$GLOBALS['__l10n']['Source file does not exist.'] = 'Le fichier source n\'existe pas'; -$GLOBALS['__l10n']['File is not in jail.'] = 'Le fichier n\'est pas en jail.'; -$GLOBALS['__l10n']['Destination directory is not writable.'] = 'Le répertoire cible n\'est pas accessible en écriture.'; -$GLOBALS['__l10n']['Unable to rename file.'] = 'Impossible de renommer le fichier.'; -$GLOBALS['__l10n']['File cannot be removed.'] = 'Ce fichier ne peut pas être supprimé.'; -$GLOBALS['__l10n']['Directory is not in jail.'] = 'Le répertoire n\'est pas en jail.'; -$GLOBALS['__l10n']['Directory cannot be removed.'] = 'Ce répertoire ne peut pas être supprimé.'; -$GLOBALS['__l10n']['Not enough memory to open image.'] = 'Mémoire insuffisante pour ouvrir l\'image.'; -$GLOBALS['__l10n']['File %s is not compressed in the zip.'] = 'Le fichier %s n\'est pas compressé dans le zip.'; -$GLOBALS['__l10n']['Trying to unzip a folder name %s'] = 'Tentative de décompresser un répertoire %s'; -$GLOBALS['__l10n']['Unable to write destination file.'] = 'Impossible d\'écrire le fichier de destination'; -$GLOBALS['__l10n']['Unable to write in target directory, permission denied.'] = 'Impossible d\'écrire dans le répertoire cible, permission refusée.'; -$GLOBALS['__l10n']['Not enough memory to open file.'] = 'Mémoire insuffisante pour ouvrir le fichier.'; -$GLOBALS['__l10n']['File does not exist'] = 'Le fichier n\'existe pas'; -$GLOBALS['__l10n']['Cannot read file'] = 'Impossible de lire le fichier'; -$GLOBALS['__l10n']['Directory does not exist'] = 'Le répertoire n\'existe pas'; -$GLOBALS['__l10n']['Cannot read directory'] = 'Impossible de lire le répertoire'; -$GLOBALS['__l10n']['Unable to connect to database'] = 'Connexion à la base de données impossible'; -$GLOBALS['__l10n']['

      This either means that the username and password information in your config.php file is incorrect or we can\'t contact the database server at "%s". This could mean your host\'s database server is down.

      • Are you sure you have the correct username and password?
      • Are you sure that you have typed the correct hostname?
      • Are you sure that the database server is running?

      If you\'re unsure what these terms mean you should probably contact your host. If you still need help you can always visit the Dotclear Support Forums.

      '] = '

      Cela signifie soit que les informations d\'identifiant ou de mot de passe de votre fichier config.php sont incorrects, soit que nous ne pouvons pas contacter le serveur de base de données à l\'adresse "%s". Cela peut vouloir dire que le serveur en question est éteint.

      • Êtes-vous sûr que l\'identifiant et le mot de passe sont corrects ?
      • Êtes-vous sûr d\'avoir entré le bon nom de serveur ?
      • Êtes-vous sûr que le serveur fonctionne ?

      S vous n\'êtes pas sûr de la signification de ces termes, vous devriez probablement contacter votre hébergeur. Si vous avez besoin d\'une aide supplémentaire, vous pouvez vous rendre sur le forum d\'entraide Dotclear.

      '; -$GLOBALS['__l10n']['The following error was encountered while trying to read the database:'] = 'L\'erreur suivante a été rencontrée lors de la tentative d\'accès à la base de données :'; -?> \ No newline at end of file diff --git a/v2/dotclear/locales/fr/main.po b/v2/dotclear/locales/fr/main.po deleted file mode 100644 index 2cceae3..0000000 --- a/v2/dotclear/locales/fr/main.po +++ /dev/null @@ -1,2896 +0,0 @@ -# French translation of DotClear -# Copyright (C) 2006. -# Olivier Meunier , 2006. -msgid "" -msgstr "" -"Project-Id-Version: Dotclear 2\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-08-13 10:46+0200\n" -"PO-Revision-Date: 2011-10-13 19:26+0100\n" -"Last-Translator: xave \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: \n" -"X-Poedit-Language: French\n" - -msgid "Dotclear has been upgraded." -msgstr "Dotclear a été mis à jour." - -msgid "Password reset" -msgstr "Réinitialisation du mot de passe" - -msgid "Someone has requested to reset the password for the following site and username." -msgstr "Quelqu'un a demandé la réinitialisation du mot de passe pour le site et l'utilisateur suivants." - -msgid "Username:" -msgstr "Nom d'utilisateur :" - -msgid "To reset your password visit the following address, otherwise just ignore this email and nothing will happen." -msgstr "Pour réinitialiser votre mot de passe, rendez-vous à l'adresse suivante. Sinon ignorez simplement ce message et rien ne se passera." - -#, php-format -msgid "The e-mail was sent successfully to %s." -msgstr "Le message a été envoyé avec succès à %s." - -msgid "Your new password" -msgstr "Votre nouveau mot de passe" - -msgid "Password:" -msgstr "Mot de passe :" - -msgid "Your new password is in your mailbox." -msgstr "Votre nouveau mot de passe est dans votre boîte à lettres." - -msgid "Passwords don't match" -msgstr "Les mots de passe ne correspondent pas" - -msgid "You didn't change your password." -msgstr "Vous n'avez pas changé votre mot de passe." - -msgid "You have to change your password before you can login." -msgstr "Vous devez changer de mot de passe avant de vous connecter." - -msgid "In order to login, you have to change your password now." -msgstr "Afin de vous connecter, vous devez changer votre mot de passe." - -msgid "Safe Mode can only be used for super administrators." -msgstr "Le mode sans échec ne peut être utilisé que par un super administrateur." - -msgid "Wrong username or password" -msgstr "Nom d'utilisateur ou mot de passe incorrect" - -msgid "Back to login screen" -msgstr "Retour à l'écran de connexion" - -msgid "Request a new password" -msgstr "Demander un nouveau mot de passe" - -msgid "Email:" -msgstr "Email :" - -msgid "recover" -msgstr "récupérer" - -msgid "Change your password" -msgstr "Changer votre mot de passe" - -msgid "New password:" -msgstr "Nouveau mot de passe :" - -msgid "Confirm password:" -msgstr "Confirmez le mot de passe :" - -msgid "change" -msgstr "changer" - -msgid "Safe mode login" -msgstr "Connexion en mode sans échec" - -msgid "This mode allows you to login without activating any of your plugins. This may be useful to solve compatibility problems" -msgstr "Ce mode vous permet de vous connecter sans activer de plugins. Il peut être utile pour résoudre un problème de compatibilité" - -msgid "Disable or delete any plugin suspected to cause trouble, then log out and log back in normally." -msgstr "Désactivez ou supprimez les plugins semblant en être la cause, puis déconnectez-vous et connectez-vous à nouveau normalement." - -msgid "Remember my ID on this computer" -msgstr "Se souvenir de mon identifiant sur cet ordinateur" - -msgid "log in" -msgstr "Se connecter" - -msgid "You must accept cookies in order to use the private area." -msgstr "Vous devez accepter les cookies pour utiliser l'interface privée." - -msgid "Get back to normal authentication" -msgstr "Retour à l'écran de connexion normal" - -msgid "Connection issue?" -msgstr "Problème de connexion ?" - -msgid "I forgot my password" -msgstr "J'ai oublié mon mot de passe" - -msgid "I want to log in in safe mode" -msgstr "Me connecter en mode sans échec" - -msgid "New blog" -msgstr "Nouveau blog" - -msgid "Blogs" -msgstr "Blogs" - -msgid "Blog ID:" -msgstr "Identifiant du blog :" - -msgid "Required field" -msgstr "Champ obligatoire" - -msgid "At least 2 characters using letters, numbers or symbols." -msgstr "Au moins 2 caractères, composés de lettres non accentuées, chiffres ou symboles." - -msgid "Please note that changing your blog ID may require changes in your public index.php file." -msgstr "Veuillez noter que changer l'identifiant de votre blog peut nécessiter des modifications dans votre fichier index.php public." - -msgid "Blog name:" -msgstr "Nom du blog :" - -msgid "Blog URL:" -msgstr "URL du blog :" - -msgid "Blog description:" -msgstr "Description du blog :" - -msgid "Create" -msgstr "Créer" - -msgid "No such blog ID" -msgstr "Identifiant de blog inconnu" - -msgid "Password verification failed" -msgstr "La vérification du mot de passe a échoué" - -msgid "Delete a blog" -msgstr "Supprimer un blog" - -msgid "Warning" -msgstr "Attention" - -#, php-format -msgid "You are about to delete the blog %s. Every entry, comment and category will be deleted." -msgstr "Vous êtes sur le point de supprimer le blog %s. Tous ses billets, commentaires et catégories seront supprimés." - -msgid "Please give your password to confirm the blog deletion." -msgstr "Veuillez indiquer votre mot de passe pour confirmer la suppression du blog." - -msgid "Your password:" -msgstr "Votre mot de passe :" - -msgid "Delete this blog" -msgstr "Supprimer ce blog" - -msgid "No given blog id." -msgstr "Pas d'identifiant de blog." - -msgid "No such blog." -msgstr "Blog inexistant." - -msgid "year/month/day/title" -msgstr "année/mois/jour/titre" - -msgid "year/month/title" -msgstr "année/mois/titre" - -msgid "year/title" -msgstr "année/titre" - -msgid "title" -msgstr "titre" - -msgid "Title" -msgstr "Titre" - -msgid "Title, Date" -msgstr "Titre, date" - -msgid "Title, Country, Date" -msgstr "Titre, pays, date" - -msgid "Title, City, Country, Date" -msgstr "Titre, ville, pays, date" - -msgid "I would like search engines and archivers to index and archive my blog's content." -msgstr "Je souhaite que mon blog soit indexé et archivé par les moteurs de recherche et archiveurs." - -msgid "I would like search engines and archivers to index but not archive my blog's content." -msgstr "Je souhaite que mon blog soit indexé mais pas archivé par les moteurs de recherche et archiveurs." - -msgid "I would like to prevent search engines and archivers from indexing or archiving my blog's content." -msgstr "Je souhaite que mon blog ne soit ni indexé ni archivé par les moteurs de recherche et archiveurs." - -msgid "That blog Id is already in use." -msgstr "Cet identifiant est déjà utilisé" - -msgid "Invalid language code" -msgstr "Code langue invalide" - -msgid "Blog settings" -msgstr "Paramètres du blog" - -msgid "Warning: except for special configurations, it is generally advised to have a trailing \"/\" in your blog URL in PATH_INFO mode." -msgstr "Attention: sauf cas particulier, il est généralement conseillé de terminer l'URL de votre blog par \"/\" en mode PATH_INFO." - -msgid "Warning: except for special configurations, it is generally advised to have a trailing \"?\" in your blog URL in QUERY_STRING mode." -msgstr "Attention: sauf cas particulier, il est généralement conseillé de terminer l'URL de votre blog par \"?\" en mode QUERY_STRING." - -msgid "Blog has been successfully created." -msgstr "Blog créé avec succès." - -msgid "Blog has been successfully updated." -msgstr "Blog mis à jour avec succès." - -msgid "Parameters" -msgstr "Paramètres" - -msgid "Blog details" -msgstr "Informations du blog" - -msgid "URL scan method:" -msgstr "Méthode de lecture de l'URL :" - -msgid "Blog status:" -msgstr "État du blog :" - -msgid "Blog configuration" -msgstr "Configuration du blog" - -msgid "Blog editor name:" -msgstr "Nom de l'éditeur du blog :" - -msgid "Default language:" -msgstr "Langue par défaut :" - -msgid "Blog timezone:" -msgstr "Fuseau horaire du blog :" - -msgid "Copyright notice:" -msgstr "Note de copyright :" - -msgid "New post URL format:" -msgstr "Format d'URL des nouveaux billets :" - -msgid "Enable XML/RPC interface" -msgstr "Activer l'interface XML/RPC" - -msgid "more information" -msgstr "plus d'informations" - -msgid "Comments and trackbacks" -msgstr "Commentaires et rétroliens" - -msgid "Accept comments" -msgstr "Accepter les commentaires" - -msgid "Moderate comments" -msgstr "Modérer les commentaires" - -#, php-format -msgid "Leave comments open for %s days" -msgstr "Laisser les commentaires ouverts durant %s jours" - -msgid "Leave blank to disable this feature." -msgstr "Laissez vide pour annuler ce comportement." - -msgid "Wiki syntax for comments" -msgstr "Syntaxe wiki pour les commentaires" - -msgid "Accept trackbacks" -msgstr "Accepter les rétroliens" - -msgid "Moderate trackbacks" -msgstr "Modérer les rétroliens" - -#, php-format -msgid "Leave trackbacks open for %s days" -msgstr "Laisser les rétroliens ouverts durant %s jours" - -msgid "Add \"nofollow\" relation on comments and trackbacks links" -msgstr "Ajouter la relation \"nofollow\" aux liens des commentaires et rétroliens" - -msgid "Blog presentation" -msgstr "Présentation du blog" - -msgid "Date format:" -msgstr "Format des dates :" - -msgid "Time format:" -msgstr "Format des heures :" - -msgid "Display smilies on entries and comments" -msgstr "Afficher des émoticones dans les billets et commentaires" - -#, php-format -msgid "Display %s entries per page" -msgstr "Afficher %s billets par page" - -#, php-format -msgid "Display %s entries per feed" -msgstr "Afficher %s billets par flux de syndication" - -#, php-format -msgid "Display %s comments per feed" -msgstr "Afficher %s commentaires par flux de syndication" - -msgid "Truncate feeds" -msgstr "Tronquer les flux de syndication" - -msgid "Media and images" -msgstr "Médias et images" - -msgid "Generated image sizes (in pixels)" -msgstr "Tailles des images générées (en pixels)" - -msgid "Thumbnails:" -msgstr "Miniatures :" - -msgid "Small:" -msgstr "Petites :" - -msgid "Medium:" -msgstr "Moyennes :" - -msgid "Inserted image title" -msgstr "Titres des images insérées" - -msgid "This defines image tag title when you insert it in a post from the media manager. It is retrieved from the picture's metadata." -msgstr "Ceci définit le titre de la balise d'une image insérée depuis le gestionnaire de media. Les informations sont obtenues depuis les métadonnées de l'image." - -msgid "Search engines robots policy" -msgstr "Paramètres d'indexation par les moteurs de recherche" - -msgid "Save" -msgstr "Enregistrer" - -msgid "XML/RPC interface" -msgstr "Interface XML/RPC" - -msgid "XML/RPC interface allows you to edit your blog with an external client." -msgstr "L'interface XML/RPC vous permet de publier sur votre blog avec un client externe." - -msgid "XML/RPC interface is not active. Change settings to enable it." -msgstr "L'interface XML/RPC n'est pas active. Changez vos paramètres pour l'activer." - -msgid "XML/RPC interface is active. You should set the following parameters on your XML/RPC client:" -msgstr "L'interface XML/RPC est active. Vous êtes invités à indiquer les paramètres suivants dans votre client XML/RPC :" - -msgid "Server URL:" -msgstr "URL du serveur :" - -msgid "Blogging system:" -msgstr "Système de blog :" - -msgid "User name:" -msgstr "Nom d'utilisateur :" - -msgid "your password" -msgstr "votre mot de passe" - -msgid "Users" -msgstr "Utilisateurs" - -msgid "Users on this blog" -msgstr "Utilisateurs de ce blog" - -msgid "No users" -msgstr "Aucun utilisateur" - -msgid "Change permissions" -msgstr "Changer les permissions" - -msgid "Super administrator" -msgstr "Super administrateur" - -msgid "You can't remove default theme." -msgstr "Vous ne pouvez pas supprimer le thème par défaut." - -msgid "Theme does not exist." -msgstr "Ce thème n'existe pas." - -msgid "Unable to move uploaded file." -msgstr "Impossible de déplacer le fichier téléchargé." - -msgid "An error occurred while downloading the file." -msgstr "Une erreur est survenue lors du téléchargement du fichier." - -#, php-format -msgid "by %s" -msgstr "par %s" - -#, php-format -msgid "version %s" -msgstr "version %s" - -#, php-format -msgid "(built on \"%s\")" -msgstr "(basé sur \"%s\")" - -#, php-format -msgid "(requires \"%s\")" -msgstr "(nécessite \"%s\")" - -msgid "Stylesheet" -msgstr "Feuille de style" - -msgid "Configure theme" -msgstr "Configurer le thème" - -msgid "Blog appearance" -msgstr "Apparence du blog" - -msgid "Theme has been successfully changed." -msgstr "Thème changé avec succès." - -msgid "Theme has been successfully installed." -msgstr "Le thème a été installé avec succès." - -msgid "Theme has been successfully upgraded" -msgstr "Le thème a été mis à jour avec succès." - -msgid "Theme has been successfully deleted." -msgstr "Le thème a été supprimé avec succès." - -#, php-format -msgid "You can find additional themes for your blog on %s." -msgstr "Vous pouvez trouver de nouveaux thèmes pour votre blog sur %s." - -msgid "To install or upgrade a theme you generally just need to upload it in \"Install or upgrade a theme\" section." -msgstr "Tout ce que vous avez à faire pour installer ou mettre à jour un thème est généralement de le déposer dans la section \"Installer ou mettre à jour un thème\"." - -msgid "Themes" -msgstr "Thèmes" - -#, php-format -msgid "You are currently using \"%s\"" -msgstr "Vous utilisez actuellement \"%s\"" - -msgid "Use selected theme" -msgstr "Utiliser le thème sélectionné" - -msgid "Delete selected theme" -msgstr "Supprimer le thème sélectionné" - -msgid "Install or upgrade a theme" -msgstr "Installer ou mettre à jour un thème" - -msgid "You can install themes by uploading or downloading zip files." -msgstr "Vous pouvez installer des thèmes en déposant ou téléchargeant des fichiers zip." - -msgid "Upload a zip file" -msgstr "Déposer un fichier zip" - -msgid "Theme zip file:" -msgstr "Fichier zip du thème :" - -msgid "Upload theme" -msgstr "Déposer un thème" - -msgid "Download a zip file" -msgstr "Télécharger un fichier zip" - -msgid "Theme zip file URL:" -msgstr "URL du fichier zip du thème :" - -msgid "Download theme" -msgstr "Télécharger le thème" - -msgid "To enable this function, please give write access to your themes directory." -msgstr "Pour activer cette fonction, donnez un accès en écriture à votre répertoire de thèmes." - -msgid "Theme configuration" -msgstr "Configurer le thème" - -msgid "back" -msgstr "retour" - -msgid "Last update" -msgstr "Dernière mise à jour" - -msgid "Blog name" -msgstr "Nom du blog" - -msgid "Blog ID" -msgstr "Identifiant du blog" - -msgid "Descending" -msgstr "Décroissant" - -msgid "Ascending" -msgstr "Croissant" - -msgid "List of blogs" -msgstr "Liste des blogs" - -msgid "Blog has been successfully deleted." -msgstr "Blog supprimé avec succès." - -msgid "Create a new blog" -msgstr "Créer un nouveau blog" - -msgid "Filters" -msgstr "Filtres" - -msgid "Order by:" -msgstr "Trier par :" - -msgid "Sort:" -msgstr "Ordre :" - -msgid "Search:" -msgstr "Chercher :" - -msgid "Blogs per page" -msgstr "Blogs par page" - -msgid "Apply filters" -msgstr "Appliquer les filtres" - -msgid "No blog" -msgstr "Pas de blog" - -msgid "Page(s)" -msgstr "Page(s)" - -msgid "Entries" -msgstr "Billets" - -msgid "Status" -msgstr "État" - -#, php-format -msgid "Edit blog %s" -msgstr "Modifier le blog %s" - -msgid "edit" -msgstr "modifier" - -#, php-format -msgid "Switch to blog %s" -msgstr "Passer au blog %s" - -msgid "This category does not exist." -msgstr "Cette catégorie n'existe pas." - -msgid "Categories" -msgstr "Catégories" - -msgid "The category has been successfully created." -msgstr "Catégorie créée avec succès." - -msgid "The category has been successfully removed." -msgstr "Catégorie supprimée avec succès." - -msgid "Categories have been successfully reordered." -msgstr "Catégories réordonnées avec succès." - -msgid "The category has been successfully moved." -msgstr "Catégorie déplacée avec succès." - -msgid "No category yet." -msgstr "Pas encore de catégorie." - -msgid "Categories list" -msgstr "Liste des catégories" - -#, php-format -msgid "%d entries" -msgstr "%d billets" - -#, php-format -msgid "%d entry" -msgstr "%d billet" - -msgid "total:" -msgstr "total :" - -msgid "URL:" -msgstr "URL :" - -msgid "Add a new category" -msgstr "Créer une nouvelle catégorie" - -msgid "Title:" -msgstr "Titre :" - -msgid "Parent:" -msgstr "Parent :" - -msgid "Top level" -msgstr "Premier niveau" - -msgid "Remove a category" -msgstr "Supprimer une catégorie" - -msgid "Choose a category to remove:" -msgstr "Choisissez une catégorie à supprimer :" - -msgid "Delete" -msgstr "Supprimer" - -msgid "Reorder categories" -msgstr "Réordonner les catégories" - -msgid "This will relocate all categories on the top level" -msgstr "Ceci va déplacer toutes les catégories au premier niveau" - -msgid "Reorder" -msgstr "Réordonner" - -msgid "New category" -msgstr "Nouvelle catégorie" - -msgid "Category has been successfully updated." -msgstr "Catégorie mise à jour avec succès." - -msgid "Category information" -msgstr "Détails de la catégorie" - -msgid "Warning: If you set the URL manually, it may conflict with another category." -msgstr "Attention : si vous indiquez l'URL manuellement, celle-ci peut entrer en conflit avec une autre catégorie." - -msgid "Description:" -msgstr "Description :" - -msgid "Move this category" -msgstr "Déplacer cette catégorie" - -msgid "Category parent" -msgstr "Catégorie parente" - -msgid "Category sibling" -msgstr "Catégorie voisine" - -msgid "Move current category" -msgstr "Déplacer la catégorie" - -msgid "after" -msgstr "après" - -msgid "before" -msgstr "avant" - -msgid "position: " -msgstr "position : " - -msgid "Entry does not exist." -msgstr "Ce billet n'existe pas." - -msgid "No comment" -msgstr "Aucun commentaire" - -msgid "You can't edit this comment." -msgstr "Vous ne pouvez pas modifier ce commentaire." - -msgid "Edit comment" -msgstr "Modifier le commentaire" - -msgid "Comment has been successfully updated." -msgstr "Commentaire mis à jour avec succès." - -#, php-format -msgid "Your comment on my blog %s" -msgstr "Votre commentaire sur mon blog %s" - -#, php-format -msgid "" -"Hi!\n" -"\n" -"You wrote a comment on:\n" -"%s\n" -"\n" -"\n" -msgstr "" -"Bonjour,\n" -"\n" -"Vous avez déposé un commentaire sur \n" -"%s\n" -"\n" -"\n" - -msgid "Send an e-mail" -msgstr "Envoyer un email" - -msgid "IP address:" -msgstr "Adresse IP :" - -msgid "Date:" -msgstr "Date :" - -msgid "Author:" -msgstr "Auteur :" - -msgid "Web site:" -msgstr "Site web :" - -msgid "Status:" -msgstr "État :" - -msgid "Comment:" -msgstr "Commentaire :" - -msgid "comment" -msgstr "commentaire" - -msgid "trackback" -msgstr "rétrolien" - -msgid "Date" -msgstr "Date" - -msgid "Entry title" -msgstr "Titre du billet" - -msgid "Author" -msgstr "Auteur" - -msgid "publish" -msgstr "publier" - -msgid "unpublish" -msgstr "hors ligne" - -msgid "mark as pending" -msgstr "en attente" - -msgid "mark as junk" -msgstr "indésirable" - -msgid "Type:" -msgstr "Type :" - -msgid "Comments per page" -msgstr "Commentaires par page" - -msgid "Comment author:" -msgstr "Auteur du commentaire :" - -msgid "You have one spam comments." -msgstr "Vous avez un commentaire indésirable." - -msgid "Show it." -msgstr "L'afficher" - -#, php-format -msgid "You have %s spam comments." -msgstr "Vous avez %s commentaires indésirables." - -msgid "Show them." -msgstr "Les afficher." - -msgid "Selected comments action:" -msgstr "Action sur les commentaires sélectionnés :" - -msgid "action: " -msgstr "action : " - -msgid "ok" -msgstr "ok" - -msgid "Comments" -msgstr "Commentaires" - -#, php-format -msgid "%d comment" -msgstr "%d commentaire" - -#, php-format -msgid "%d comments" -msgstr "%d commentaires" - -msgid "New entry" -msgstr "Nouveau billet" - -msgid "My preferences" -msgstr "Mes préférences" - -msgid "Documentation and support" -msgstr "Documentation et support" - -msgid "Latest news" -msgstr "Actualités" - -msgid "Dashboard" -msgstr "Tableau de bord" - -msgid "Make this blog my default blog" -msgstr "Définir comme blog par défaut" - -msgid "This blog is offline" -msgstr "Ce blog est hors ligne" - -msgid "This blog is removed" -msgstr "Ce blog est supprimé" - -msgid "is not defined, you should edit your configuration file." -msgstr "n'est pas défini, vous devriez corriger votre fichier de configuration." - -msgid "Following plugins have been installed:" -msgstr "Les extensions suivantes ont été installées :" - -msgid "Following plugins have not been installed:" -msgstr "Les extensions suivantes n'ont pas été installées :" - -#, php-format -msgid "Dotclear %s is available!" -msgstr "Dotclear %s est disponible !" - -msgid "Upgrade now" -msgstr "Mettre à jour maintenant" - -msgid "Remind me later" -msgstr "Me le rappeler plus tard" - -msgid "information about this version" -msgstr "Information à propos de cette version" - -msgid "Some plugins are installed twice:" -msgstr "Ces extensions sont installées en double :" - -msgid "Quick entry" -msgstr "Billet rapide" - -msgid "Content:" -msgstr "Contenu :" - -msgid "Category:" -msgstr "Catégorie :" - -msgid "Save and publish" -msgstr "Enregister et publier" - -#, php-format -msgid "PHP version is %s (5.0 or earlier needed)." -msgstr "La version de PHP est %s (5.0 ou plus récent nécessaire.)" - -msgid "Multibyte string module (mbstring) is not available." -msgstr "Le support des chaînes multi-octets (mbstring) n'est pas disponible." - -msgid "Iconv module is not available." -msgstr "Le module iconv n'est pas disponible." - -msgid "Output control functions are not available." -msgstr "Les fonctions de bufferisation de sortie ne sont pas disponibles." - -msgid "SimpleXML module is not available." -msgstr "Le module SimpleXML n'est pas disponible." - -msgid "DOM XML module is not available." -msgstr "Le module DOM XML n'est pas disponible." - -msgid "PCRE engine does not support UTF-8 strings." -msgstr "Le moteur d'expressions rationnelles PCRE ne gère pas les chaînes UTF-8." - -msgid "SPL module is not available." -msgstr "Le module SPL n'est pas disponible." - -#, php-format -msgid "MySQL version is %s (4.1 or earlier needed)." -msgstr "La version de MySQL est %s (4.1 ou plus récent nécessaire)." - -msgid "MySQL InnoDB engine is not available." -msgstr "Le gestionnaire de stockage InnoDB de MySQL n'est pas disponible." - -#, php-format -msgid "PostgreSQL version is %s (8.0 or earlier needed)." -msgstr "La version de PostgreSQL est %s (8.0 ou plus récent nécessaire)." - -msgid "Please set a master key (DC_MASTER_KEY) in configuration file." -msgstr "Veuillez indiquer une clé de référence (DC_MASTER_KEY) dans le fichier de configuration." - -msgid "Dotclear is already installed." -msgstr "Dotclear est déjà installé." - -msgid "Dotclear cannot be installed." -msgstr "Dotclear ne peut pas être installé." - -msgid "No user ID given" -msgstr "Aucun identifiant utilisateur spécifié" - -msgid "User ID must contain at least 2 characters using letters, numbers or symbols." -msgstr "L'identifiant utilisateur doit contenir au moins 2 caractères composés de lettres, chiffres ou symboles." - -msgid "Invalid email address" -msgstr "Adresse email incorrecte" - -msgid "No password given" -msgstr "Aucun mot de passe spécifié" - -msgid "Password must contain at least 6 characters." -msgstr "Le mot de passe doit contenir au moins 6 caractères." - -msgid "My first blog" -msgstr "Mon premier blog" - -msgid "%A, %B %e %Y" -msgstr "%A %e %B %Y" - -msgid "Welcome to Dotclear!" -msgstr "Bienvenue sur Dotclear !" - -msgid "This is your first entry. When you're ready to blog, log in to edit or delete it." -msgstr "Ceci est votre premier billet. Quand vous serez prêt à bloguer, connectez-vous pour le modifier ou le supprimer." - -msgid "Dotclear Team" -msgstr "L'équipe Dotclear" - -msgid "" -"

      This is a comment.

      \n" -"

      To delete it, log in and view your blog's comments. Then you might remove or edit it.

      " -msgstr "

      Ceci est un commentaire

      Pour le supprimer, connectez-vous et affichez les commentaires de votre blog. Vous pourrez alors le supprimer ou le modifier.

      " - -msgid "Dotclear Install" -msgstr "Installation de Dotclear" - -msgid "show" -msgstr "voir" - -msgid "Dotclear installation" -msgstr "Installation de Dotclear" - -#, php-format -msgid "Cache directory %s is not writable." -msgstr "Le répertoire de cache %s n'est pas accessible en écriture." - -msgid "Errors:" -msgstr "Erreurs :" - -msgid "Configuration file has been successfully created." -msgstr "Le fichier de configuration a été créé avec succès." - -msgid "User information" -msgstr "Informations utilisateur" - -msgid "Please provide the following information needed to create the first user." -msgstr "Merci de fournir les informations suivantes pour créer le premier utilisateur." - -msgid "First Name:" -msgstr "Prénom :" - -msgid "Last Name:" -msgstr "Nom :" - -msgid "Username and password" -msgstr "Identifiant et mot de passe" - -msgid "All done!" -msgstr "Terminé !" - -msgid "Dotclear has been successfully installed. Here is some useful information you should keep." -msgstr "Dotclear a été installé avec succès. Conservez les informations suivantes précieusement." - -msgid "Your account" -msgstr "Votre compte" - -msgid "Your blog" -msgstr "Votre blog" - -msgid "Blog address:" -msgstr "Adresse du blog :" - -msgid "Administration interface:" -msgstr "Interface d'administration :" - -msgid "Manage your blog now" -msgstr "Gérez votre blog" - -msgid "Installation can not be completed" -msgstr "L'installation ne peut pas être menée à bien" - -msgid "For the said reasons, Dotclear can not be installed. Please refer to the documentation to learn how to correct the problem." -msgstr "Pour les raisons ci-dessus, Dotclear ne peut pas être installé. Référez-vous à la documentation pour savoir comment corriger le problème." - -#, php-format -msgid "File %s does not exist." -msgstr "Le fichier %s n'existe pas." - -#, php-format -msgid "Cannot write %s file." -msgstr "Impossible d'écrire le fichier %s." - -msgid "Dotclear installation wizard" -msgstr "Assistant d'installation de Dotclear" - -msgid "Welcome" -msgstr "Bienvenue" - -msgid "To complete your Dotclear installation and start writing on your blog, we just need to know how to access your database and who you are. Just fill this two steps wizard with this information and we will be done." -msgstr "Pour achever votre installation de Dotclear, il ne manque plus que les informations concernant votre base de données, puis vos informations personnelles. Remplissez simplement les deux formulaires suivants et vous pourrez commencer à utiliser votre blog." - -msgid "Attention:" -msgstr "Attention :" - -msgid "this wizard may not function on every host. If it does not work for you, please refer to the documentation to learn how to create the config.php file manually." -msgstr "cet assistant peut ne pas fonctionner chez tous les hébergeurs. Si vous rencontrez un problème, vous trouverez comment créer le fichier de configuration dans la documentation." - -msgid "System information" -msgstr "Informations système" - -msgid "Please provide the following information needed to create your configuration file." -msgstr "Merci de fournir les informations suivantes :" - -msgid "Database type:" -msgstr "Type de base de données :" - -msgid "Database Host Name:" -msgstr "Nom d'hôte de la base de données :" - -msgid "Database Name:" -msgstr "Nom de la base de données :" - -msgid "Database User Name:" -msgstr "Nom d'utilisateur de la base de données :" - -msgid "Database Password:" -msgstr "Mot de passe de la base de données :" - -msgid "Database Tables Prefix:" -msgstr "Préfixe des tables de la base de données :" - -msgid "Continue" -msgstr "Continuer" - -msgid "No such installed language" -msgstr "Cette langue n'est pas installée" - -msgid "You can't remove English language." -msgstr "Vous ne pouvez pas supprimer la langue anglaise." - -msgid "Permissions to delete language denied." -msgstr "Permission de supprimer la langue refusée." - -msgid "Invalid language file URL." -msgstr "URL de fichier de langue invalide." - -msgid "Languages management" -msgstr "Gestion des langues" - -msgid "Language has been successfully deleted." -msgstr "La langue a été supprimée avec succès." - -msgid "Language has been successfully installed." -msgstr "La langue a été installée avec succès." - -msgid "Language has been successfully upgraded" -msgstr "La langue a été mise à jour avec succès." - -msgid "Here you can install, upgrade or remove languages for your Dotclear installation." -msgstr "Sur cette page, vous pouvez installer, mettre à jour ou supprimer des langues de votre installation de Dotclear." - -#, php-format -msgid "You can change your user language in your preferences or change your blog's main language in your blog settings." -msgstr "Vous pouvez changer votre langue d'utilisateur dans vos préférences ou changer la langue principale de votre blog dans vos paramètres de blog." - -msgid "Installed languages" -msgstr "Langues installées" - -msgid "No additional language is installed." -msgstr "Aucune langue supplémentaire n'est installée." - -msgid "Language" -msgstr "Langue" - -msgid "Action" -msgstr "Action" - -msgid "Install or upgrade languages" -msgstr "Installer ou mettre à jour une langue" - -#, php-format -msgid "You can install or remove a language by adding or removing the relevant directory in your %s folder." -msgstr "Vous pouvez installer ou supprimer une langue en ajoutant ou supprimant le répertoire correspondant dans votre répertoire %s." - -msgid "Available languages" -msgstr "Langues disponibles" - -#, php-format -msgid "You can download and install a additional language directly from Dotclear.net. Proposed languages are based on your version: %s." -msgstr "Vous pouvez télécharger et installer une langue supplémentaire directement depuis Dotclear.net. Les langues proposées sont basées sur votre version : %s." - -msgid "Language:" -msgstr "Langue :" - -msgid "Install language" -msgstr "Installer la langue" - -msgid "You can install languages by uploading zip files." -msgstr "Vous pouvez installer des langues en déposant des fichiers zip." - -msgid "Language zip file:" -msgstr "Fichier zip de la langue :" - -msgid "Upload language" -msgstr "Déposer la langue" - -msgid "Invalid language zip file." -msgstr "Fichier zip de langue invalide." - -msgid "The zip file does not appear to be a valid Dotclear language pack." -msgstr "Le fichier zip ne semble pas être un fichier valide de langue Dotclear." - -msgid "An error occurred during language upgrade." -msgstr "Une erreur est survenue durant la mise à jour de la langue." - -msgid "Error:" -msgstr "Erreur :" - -msgid "By names, in ascending order" -msgstr "Par noms, croissants" - -msgid "By names, in descending order" -msgstr "Par noms, décroissants" - -msgid "By dates, in ascending order" -msgstr "Par dates, croissantes" - -msgid "By dates, in descending order" -msgstr "Par dates, décroissantes" - -msgid "Media manager" -msgstr "Gestionnaire de médias" - -msgid "confirm removal" -msgstr "Confirmer la suppression" - -#, php-format -msgid "Are you sure you want to remove %s?" -msgstr "Êtes-vous certain de vouloir supprimer %s ?" - -msgid "Cancel" -msgstr "Annuler" - -msgid "Yes" -msgstr "oui" - -msgid "Directory has been successfully created." -msgstr "Répertoire créé avec succès." - -msgid "Files have been successfully uploaded." -msgstr "Fichier chargé avec succès." - -msgid "File has been successfully removed." -msgstr "Fichier supprimé avec succès." - -msgid "Directory has been successfully removed." -msgstr "Répertoire supprimé avec succès." - -msgid "Directory has been successfully rebuilt." -msgstr "Répertoire reconstruit avec succès." - -msgid "Zip file has been successfully extracted." -msgstr "Le fichier zip a été extrait avec succès." - -#, php-format -msgid "Choose a file to attach to entry %s by clicking on %s." -msgstr "Choisissez un fichier à attacher au billet %s en cliquant sur %s." - -msgid "Attach this file to entry" -msgstr "Attacher ce fichier au billet" - -#, php-format -msgid "Choose a file to insert into entry by clicking on %s." -msgstr "Choisissez un fichier à insérer dans le billet en cliquant sur %s." - -msgid "No file." -msgstr "Aucun fichier." - -msgid "Sort files:" -msgstr "Trier les fichiers :" - -msgid "Sort" -msgstr "Trier" - -msgid "Add files" -msgstr "Ajouter des fichiers" - -msgid "Please take care to publish media that you own and that are not protected by copyright." -msgstr "Veuillez prendre garde à ne publier que des médias que vous possédez ou qui ne sont pas protégés contre la copie." - -msgid "Choose a file:" -msgstr "Choisissez un fichier :" - -#, php-format -msgid "Maximum size %s" -msgstr "Taille maximale %s" - -msgid "Private" -msgstr "Privé" - -msgid "To send several files at the same time, you can activate the enhanced uploader in" -msgstr "Pour envoyer plusieurs fichiers à la fois, vous pouvez activer l'interface avancée dans" - -msgid "Send" -msgstr "Envoyer" - -msgid "New directory" -msgstr "Nouveau répertoire" - -msgid "Directory Name:" -msgstr "Nom du répertoire :" - -msgid "Download this directory as a zip file" -msgstr "Télécharger ce répertoire dans un fichier zip" - -msgid "open" -msgstr "ouvrir" - -msgid "Insert this file into entry" -msgstr "Insérer ce fichier dans le billet" - -msgid "delete" -msgstr "supprimer" - -msgid "Not a valid file" -msgstr "Fichier invalide" - -msgid "File has been successfully updated." -msgstr "Fichier mis à jour avec succès." - -msgid "Thumbnails have been successfully updated." -msgstr "Les miniatures ont été mises à jour avec succès." - -msgid "Insert media item" -msgstr "Insérer un média" - -msgid "Image size:" -msgstr "Taille de l'image :" - -msgid "original" -msgstr "originale" - -msgid "Image alignment" -msgstr "Alignement de l'image" - -msgid "None" -msgstr "Aucun" - -msgid "Left" -msgstr "Gauche" - -msgid "Right" -msgstr "Droite" - -msgid "Center" -msgstr "Centre" - -msgid "Image insertion" -msgstr "Insertion de l'image" - -msgid "As a single image" -msgstr "En tant qu'image uniquement" - -msgid "As a link to original image" -msgstr "En tant que lien vers l'image originale" - -msgid "MP3 disposition" -msgstr "Disposition du MP3" - -msgid "Please note that you cannot insert mp3 files with visual editor." -msgstr "Merci de noter que vous ne pouvez pas insérer de fichier mp3 avec l'éditeur visuel." - -msgid "Please note that you cannot insert video files with visual editor." -msgstr "Merci de noter que vous ne pouvez pas insérer de fichier vidéo avec l'éditeur visuel." - -msgid "Video size" -msgstr "Taille de la vidéo" - -msgid "Width:" -msgstr "Largeur :" - -msgid "Height:" -msgstr "Hauteur :" - -msgid "Video disposition" -msgstr "Disposition de la vidéo" - -msgid "Media item will be inserted as a link." -msgstr "Le média sera inséré en tant que lien." - -msgid "Insert" -msgstr "Insérer" - -msgid "Media details" -msgstr "Détails du média" - -msgid "Available sizes:" -msgstr "Tailles disponibles :" - -msgid "File owner:" -msgstr "Propriétaire du fichier :" - -msgid "File type:" -msgstr "Type de fichier :" - -msgid "File size:" -msgstr "Taille du fichier :" - -msgid "File URL:" -msgstr "URL du fichier :" - -msgid "Show entries containing this media" -msgstr "Afficher les billets contenant ce média" - -msgid "Entries containing this media" -msgstr "Billets contenant ce média" - -msgid "No entry seems contain this media." -msgstr "Aucun billet ne semble contenir ce média." - -msgid "Image details" -msgstr "Détails de l'image" - -msgid "No detail" -msgstr "Aucun détail" - -msgid "Update thumbnails" -msgstr "Mettre à jour les miniatures" - -msgid "This will create or update thumbnails for this image." -msgstr "Ceci va créer ou mettre à jour les miniatures pour cette image." - -msgid "Extract in a new directory" -msgstr "Extraire dans un nouveau répertoire" - -msgid "Extract in current directory" -msgstr "Extraire dans le répertoire actuel" - -msgid "Extract archive" -msgstr "Extraire l'archive" - -msgid "This will extract archive in a new directory that should not exist yet." -msgstr "Ceci va extraire l'archive dans un nouveau répertoire qui ne doit pas encore exister." - -msgid "This will extract archive in current directory and will overwrite existing files or directory." -msgstr "Ceci va extraire l'archive dans le répertoire actuel et va écraser les fichiers ou répertoires existants." - -msgid "Extract mode:" -msgstr "Mode d'extraction :" - -msgid "Extract" -msgstr "Extrait" - -msgid "Change media properties" -msgstr "Changer les propriétés du média" - -msgid "File name:" -msgstr "Nom du fichier :" - -msgid "File title:" -msgstr "Titre du fichier :" - -msgid "File date:" -msgstr "Date du fichier :" - -msgid "New directory:" -msgstr "Nouveau répertoire :" - -msgid "Change file" -msgstr "Changer le fichier" - -msgid "No blog or user given." -msgstr "Vous n'avez pas indiqué de blog ou d'utilisateur" - -msgid "permissions" -msgstr "permissions" - -msgid "Permissions" -msgstr "Permissions" - -msgid "The permissions have been successfully updated." -msgstr "Permissions mises à jour avec succès." - -#, php-format -msgid "You are about to change permissions on the following blogs for users %s." -msgstr "Vous allez changer les permissions des utilisateurs %s pour ces blogs." - -msgid "Validate permissions" -msgstr "Valider les permissions" - -msgid "choose a blog" -msgstr "choisissez un blog" - -msgid "Choose a blog" -msgstr "Choisissez un blog" - -msgid "Entries per page" -msgstr "Billets par page" - -#, php-format -msgid "Choose one or more blogs to which you want to give permissions to users %s." -msgstr "Choisissez un ou plusieurs blogs pour lesquels les utilisateurs suivants auront des permissions : %s." - -msgid "Set permissions" -msgstr "définir les permissions" - -msgid "select" -msgstr "sélectionner" - -msgid "No content found on this plugin." -msgstr "Aucun contenu pour cette extension." - -msgid "Plugin not found" -msgstr "Extension introuvable" - -msgid "The plugin you reached does not exist or does not have an admin page." -msgstr "L'extension que vous essayez d'atteindre n'existe pas ou n'a pas de page d'administration." - -msgid "No such plugin." -msgstr "Extension inexistante." - -msgid "You don't have permissions to delete this plugin." -msgstr "Vous n'avez pas les permissions pour effacer cette extension" - -msgid "You don't have permissions to deactivate this plugin." -msgstr "Vous n'avez pas les permissions pour désactiver cette extension." - -msgid "Plugins management" -msgstr "Gestion des extensions" - -msgid "Plugin has been successfully deleted." -msgstr "L'extension a été supprimée avec succès." - -msgid "Plugin has been successfully installed." -msgstr "L'extension a été installée avec succès." - -msgid "Plugin has been successfully upgraded" -msgstr "L'extension a été mise à jour avec succès." - -msgid "Plugins add new functionalities to Dotclear. Here you can activate or deactivate installed plugins." -msgstr "Les extensions ajoutent de nouvelles fonctionnalités à Dotclear. Ici, vous pouvez activer ou désactiver les extensions installées." - -#, php-format -msgid "You can find additional plugins for your blog on %s." -msgstr "Vous pouvez trouver de nouvelles extensions pour votre blog sur %s." - -msgid "To install or upgrade a plugin you generally just need to upload it in \"Install or upgrade a plugin\" section." -msgstr "Tout ce que vous avez à faire pour installer ou mettre à jour une extension est généralement de la déposer dans la section \"Installer ou mettre à jour une extension\"." - -msgid "To install or upgrade a plugin you just need to extract it in your plugins directory." -msgstr "Tout ce que vous avez à faire pour installer une extension est de l'extraire dans votre répertoire d'extensions." - -msgid "Plugins" -msgstr "Extensions" - -msgid "Activated plugins" -msgstr "Extensions activées" - -msgid "Plugin" -msgstr "Extension" - -msgid "Version" -msgstr "Version" - -msgid "Details" -msgstr "Détails" - -msgid "Deactivate" -msgstr "Désactiver" - -msgid "Deactivated plugins" -msgstr "Extensions désactivées" - -msgid "Activate" -msgstr "Activer" - -msgid "Install or upgrade a plugin" -msgstr "Installer ou mettre à jour une extension" - -msgid "You can install plugins by uploading or downloading zip files." -msgstr "Vous pouvez installer des extensions en déposant ou téléchargeant des fichiers zip." - -msgid "Plugin zip file:" -msgstr "Fichier zip de l'extension :" - -msgid "Upload plugin" -msgstr "Déposer l'extension" - -msgid "Plugin zip file URL:" -msgstr "URL du fichier zip de l'extension :" - -msgid "Download plugin" -msgstr "Télécharger l'extension" - -msgid "To enable this function, please give write access to your plugins directory." -msgstr "Pour activer cette fonction, donnez un accès en écriture à votre répertoire d'extensions." - -msgid "Add a link" -msgstr "Ajouter un lien" - -msgid "Available" -msgstr "Disponible" - -msgid "Most used" -msgstr "Plus utilisées" - -msgid "Link URL:" -msgstr "URL du lien :" - -msgid "Link title:" -msgstr "Titre du lien :" - -msgid "Link language:" -msgstr "Langue du lien :" - -msgid "Add a link to an entry" -msgstr "Ajouter un lien vers un billet" - -msgid "Search entry:" -msgstr "Rechercher un billet :" - -msgid "Search" -msgstr "Rechercher" - -msgid "cancel" -msgstr "Annuler" - -msgid "This entry does not exist." -msgstr "Ce billet n'existe pas." - -msgid "Edit entry" -msgstr "Modifier le billet" - -msgid "next entry" -msgstr "billet suivant" - -msgid "previous entry" -msgstr "billet précédent" - -msgid "Entry has been successfully updated." -msgstr "Billet mis à jour avec succès." - -msgid "Entry has been successfully created." -msgstr "Billet créé avec succès." - -msgid "File has been successfully attached." -msgstr "Fichier attaché avec succès." - -msgid "Attachment has been successfully removed." -msgstr "Pièce jointe retirée avec succès." - -msgid "Comment has been successfully created." -msgstr "Commentaire créé avec succès." - -msgid "Don't forget to validate your XHTML conversion by saving your post." -msgstr "Enregistrez votre billet pour valider la transformation en XHTML." - -msgid "Go to this entry on the site" -msgstr "Voir ce billet sur le site" - -msgid "new window" -msgstr "nouvelle fenêtre" - -msgid "Excerpt:" -msgstr "Extrait :" - -msgid "Notes:" -msgstr "Notes :" - -msgid "Preview" -msgstr "Prévisualiser" - -msgid "Entry status:" -msgstr "État du billet :" - -msgid "Published on:" -msgstr "Publié le :" - -msgid "Text formating:" -msgstr "Format du texte :" - -msgid "Convert to XHTML" -msgstr "Convertir en XHTML" - -msgid "Selected entry" -msgstr "Billet sélectionné" - -msgid "Entry lang:" -msgstr "Langue du billet :" - -msgid "Entry password:" -msgstr "Mot de passe du billet :" - -msgid "Basename:" -msgstr "URL spécifique :" - -msgid "Warning: If you set the URL manually, it may conflict with another entry." -msgstr "Attention : si vous indiquez l'URL manuellement, celle-ci peut entrer en conflit avec un autre billet." - -msgid "Ping blogs" -msgstr "Faire des rétroliens" - -msgid "Trackbacks" -msgstr "Rétroliens" - -msgid "No trackback" -msgstr "Aucun rétrolien" - -msgid "Add a comment" -msgstr "Ajouter un commentaire" - -msgid "Name:" -msgstr "Nom :" - -msgid "IP address" -msgstr "Adresse IP" - -msgid "published" -msgstr "publié" - -msgid "unpublished" -msgstr "non publié" - -msgid "pending" -msgstr "en attente" - -msgid "junk" -msgstr "indésirable" - -msgid "select this comment" -msgstr "Sélectionner ce commentaire" - -msgid "select this trackback" -msgstr "Sélectionner ce rétrolien" - -msgid "Edit this comment" -msgstr "Modifier ce commentaire" - -msgid "This attachment does not exist" -msgstr "Cette pièce jointe n'existe pas" - -msgid "Remove attachment" -msgstr "Supprimer la pièce jointe" - -msgid "Attachment" -msgstr "Pièce jointe" - -msgid "Are you sure you want to remove this attachment?" -msgstr "Êtes-vous certain de vouloir supprimer cette pièce jointe ?" - -msgid "selected" -msgstr "sélectionné" - -msgid "not selected" -msgstr "non sélectionné" - -msgid "Category" -msgstr "Catégorie" - -msgid "Selected" -msgstr "Sélectionné" - -msgid "Publish" -msgstr "Publier" - -msgid "Unpublish" -msgstr "Mettre hors ligne" - -msgid "Schedule" -msgstr "Programmer" - -msgid "Mark as pending" -msgstr "Mettre en attente" - -msgid "Mark" -msgstr "Marquer" - -msgid "Mark as selected" -msgstr "Sélectionner" - -msgid "Mark as unselected" -msgstr "Désélectionner" - -msgid "Change" -msgstr "Changer" - -msgid "Change category" -msgstr "Changer la catégorie" - -msgid "Change author" -msgstr "Changer l'auteur" - -msgid "Selected:" -msgstr "Sélectionné :" - -msgid "Month:" -msgstr "Mois :" - -msgid "Lang:" -msgstr "Langue :" - -msgid "Selected entries action:" -msgstr "Action sur les billets sélectionnés :" - -msgid "This user does not exist" -msgstr "Cet utilisateur n'existe pas" - -msgid "Change category for entries" -msgstr "Changer de catégorie pour les billets" - -msgid "Change author for entries" -msgstr "Changer l'auteur des billets" - -msgid "Author ID:" -msgstr "Identifiant de l'utilisateur :" - -msgid "Default" -msgstr "Défaut" - -msgid "If you want to change your email or password you must provide your current password." -msgstr "Si vous voulez changer votre adresse email ou votre mot de passe, vous devez indiquer votre mot de passe actuel." - -msgid "No favorite selected" -msgstr "Aucun favori sélectionné" - -msgid "Personal information has been successfully updated." -msgstr "Informations personnelles mises à jour avec succès." - -msgid "Personal options has been successfully updated." -msgstr "Vos options personnelles ont été enregistrées avec succès." - -msgid "Favorites have been successfully added." -msgstr "Les favoris ont été ajoutés avec succès." - -msgid "Favorites have been successfully updated." -msgstr "Les favoris ont été mis à jour avec succès." - -msgid "Favorites have been successfully removed." -msgstr "Les favoris ont été retirés avec succès." - -msgid "Default favorites have been successfully updated." -msgstr "Les favoris par défaut ont été enregistrés avec succès." - -msgid "My profile" -msgstr "Mon profil" - -msgid "Display name:" -msgstr "Pseudonyme :" - -msgid "User language:" -msgstr "Langue de l'utilisateur :" - -msgid "User timezone:" -msgstr "Fuseau horaire de l'utilisateur :" - -msgid "If you have changed this user email or password you must provide your current password to save these modifications." -msgstr "Si vous voulez changer votre adresse email ou votre mot de passe, vous devez indiquer votre mot de passe." - -msgid "My options" -msgstr "Mes options" - -msgid "Preferred format:" -msgstr "Format d'édition préféré :" - -msgid "Default entry status:" -msgstr "État des billets par défaut :" - -msgid "Entry edit field height:" -msgstr "Taille de la zone d'édition :" - -msgid "Enable WYSIWYG mode" -msgstr "Activer l'éditeur visuel" - -msgid "Activate enhanced uploader in media manager" -msgstr "Activer l'interface avancée du gestionnaire de médias" - -msgid "Hide My favorites menu" -msgstr "Cacher le menu Mes Favoris" - -msgid "Iconset:" -msgstr "Jeu d'icônes :" - -msgid "Do not use standard favicon" -msgstr "Ne pas utiliser le favicon standard" - -msgid "This will be applied for all users" -msgstr "Ce choix sera actif pour tous les utilisateurs" - -msgid "Accessibility options" -msgstr "Options d'accessibilité" - -msgid "Disable javascript powered drag and drop for ordering items" -msgstr "Désactiver le drag and drop javascript pour ordonnancer les éléments" - -msgid "Numeric fields will allow to type the elements' ordering number." -msgstr "Des champs numériques permettront d'indiquer la position des éléments." - -msgid "Dashboard modules" -msgstr "Modules du tableau de bord" - -msgid "Display documentation links" -msgstr "Afficher les liens de documentation" - -msgid "Display Dotclear news" -msgstr "Afficher les nouvelles de Dotclear" - -msgid "Display quick entry form" -msgstr "Afficher le formulaire de billet rapide" - -msgid "My favorites" -msgstr "Mes favoris" - -#, php-format -msgid "position of %s" -msgstr "position de %s" - -msgid "Save order" -msgstr "Enregistrer l'ordre" - -msgid "Delete selected favorites" -msgstr "Retirer les favoris sélectionnés" - -msgid "Are you sure you want to remove selected favorites?" -msgstr "Êtes-vous sûr de vouloir retirer les favoris sélectionnés ?" - -msgid "If you are a super administrator, you may define this set of favorites to be used by default on all blogs of this installation:" -msgstr "Si vous êtes super administrateur, vous pouvez définir ce jeu de favoris comme l'ensemble par défaut pour tous les blogs de l'installation :" - -msgid "Define as default favorites" -msgstr "Définir comme favoris par défaut" - -msgid "Currently no personal favorites." -msgstr "La liste de vos favoris est vide pour le moment." - -msgid "Default favorites" -msgstr "Favoris par défaut" - -msgid "Those favorites are displayed when My Favorites list is empty." -msgstr "Favoris affichés quand la liste Mes Favoris est vide." - -msgid "Available favorites" -msgstr "Favoris disponibles" - -msgid "Add to my favorites" -msgstr "Ajouter à mes favoris" - -msgid "Search options" -msgstr "Options de recherche" - -msgid "Query:" -msgstr "Requête :" - -msgid "Search entries" -msgstr "Rechercher des billets" - -msgid "Search comments" -msgstr "Rechercher des commentaires" - -msgid "schedule" -msgstr "programmer" - -msgid "change category" -msgstr "changer la catégorie" - -msgid "change author" -msgstr "changer l'auteur" - -#, php-format -msgid "%d entries found" -msgstr "%d billets trouvés" - -#, php-format -msgid "%d entry found" -msgstr "%d billet trouvé" - -#, php-format -msgid "%d comment found" -msgstr "%d commentaire trouvé" - -#, php-format -msgid "%d comments found" -msgstr "%d commentaires trouvés" - -msgid "This entry does not exist or is not published" -msgstr "Ce billet n'existe pas ou n'est pas publié" - -msgid "All pings sent." -msgstr "Tous les rétroliens ont été envoyés." - -#, php-format -msgid "Back to \"%s\"" -msgstr "Retour à \"%s\"" - -msgid "Auto discover ping URLs" -msgstr "Découverte automatique des URL à rétrolier" - -msgid "URLs to ping:" -msgstr "URLs à rétrolier :" - -msgid "Send excerpt:" -msgstr "Envoyer l'extrait :" - -msgid "Previously sent pings" -msgstr "Rétroliens déjà envoyés" - -msgid "Dotclear update" -msgstr "Mise à jour de Dotclear" - -#, php-format -msgid "Unable to delete file %s" -msgstr "Impossible de supprimer le fichier %s" - -#, php-format -msgid "Downloaded Dotclear archive seems to be corrupted. Try download it again." -msgstr "L'archive téléchargée de Dotclear semble être corrompue. Essayer de la télécharger à nouveau." - -msgid "The following files of your Dotclear installation have been modified so we won't try to update your installation. Please try to update manually." -msgstr "Comme les fichiers suivants de votre installation de Dotclear ont été modifiés, votre installation ne peut être mise à jour. Merci de mettre à jour manuellement." - -#, php-format -msgid "The following files of your Dotclear installation are not readable. Please fix this or try to make a backup file named %s manually." -msgstr "Les fichiers suivants de votre installation de Dotclear ne peuvent pas être lus. Veuillez corriger ceci ou créer un fichier de backup nommé %s manuellement." - -msgid "The following files of your Dotclear installation cannot be written. Please fix this or try to update manually." -msgstr "Les fichiers suivants de votre installation de Dotclear ne peuvent pas être écrits. Veuillez corriger ceci ou mettre à jour manuellement." - -msgid "No newer Dotclear version available." -msgstr "Aucune nouvelle version de Dotclear n'est disponible." - -#, php-format -msgid "Dotclear %s is available." -msgstr "Dotclear %s est disponible." - -msgid "To upgrade your Dotclear installation simply click on the following button. A backup file of your current installation will be created in your root directory." -msgstr "Pour mettre à jour votre installation de Dotclear, cliquez sur le bouton suivant. Un fichier de sauvegarde de votre installation actuelle sera créé dans votre répertoire principal." - -msgid "Update Dotclear" -msgstr "Mettre à jour Dotclear" - -msgid "Update backup files" -msgstr "Sauvegardes des mises à jour" - -msgid "The following files are backups of previously updates. You can revert your previous installation or delete theses files." -msgstr "Les fichiers suivants sont des sauvegardes de mises à jour précédentes. Vous pouvez rétablir votre installation précédente ou supprimer ces fichiers." - -msgid "Please note that reverting your Dotclear version may have some unwanted side-effects. Consider reverting only if you experience strong issues with this new version." -msgstr "Merci de noter que rétablir votre version de Dotclear peut avoir des effets non désirés. N'envisagez ceci que si vous rencontrez d'importantes difficultés avec cette nouvelle version." - -#, php-format -msgid "You should not revert to version prior to last one (%s)." -msgstr "Vous ne devez pas rétablir une version précédant la dernière (%s)." - -msgid "Delete selected file" -msgstr "Supprimer le fichier sélectionné" - -msgid "Revert to selected file" -msgstr "Rétablir le fichier sélectionné" - -msgid "Congratulations, you're one click away from the end of the update." -msgstr "Félicitations, vous êtes à un clic de la fin de la mise à jour." - -msgid "Finish the update." -msgstr "Finir la mise à jour." - -msgid "new user" -msgstr "nouvel utilisateur" - -#, php-format -msgid "User \"%s\" already exists." -msgstr "L'utilisateur \"%s\" existe déjà." - -msgid "User has been successfully updated." -msgstr "Utilisateur mis à jour avec succès." - -msgid "User has been successfully created." -msgstr "Utilisateur créé avec succès." - -msgid "Warning:" -msgstr "Attention :" - -msgid "If you change your username, you will have to log in again." -msgstr "Si vous changez votre login, vous devrez vous identifier à nouveau." - -msgid "Mandatory for password recovering procedure." -msgstr "Obligatoire pour la procédure de récupération de mot de passe." - -msgid "Password change required to connect" -msgstr "Changement de mot de passe requis pour la connexion" - -msgid "Save and create another" -msgstr "Enregistrer et créer un nouveau" - -msgid "No permissions." -msgstr "Aucune permission." - -msgid "Add new permissions" -msgstr "Ajouter de nouvelles permissions" - -msgid "Username" -msgstr "Identifiant" - -msgid "Last Name" -msgstr "Nom" - -msgid "First Name" -msgstr "Prénom" - -msgid "Display name" -msgstr "Pseudonyme" - -msgid "Number of entries" -msgstr "Nombre de billets" - -msgid "users" -msgstr "utilisateurs" - -msgid "User has been successfully removed." -msgstr "Utilisateur supprimé avec succès." - -msgid "Create a new user" -msgstr "Créer un nouvel utilisateur" - -msgid "Users per page" -msgstr "Utilisateurs par page" - -msgid "Selected users action:" -msgstr "Action sur les utilisateurs sélectionnés :" - -msgid "Blog:" -msgstr "Blog :" - -msgid "Change blog" -msgstr "Changer de blog" - -msgid "Blogs:" -msgstr "Blogs :" - -msgid "Go to the content" -msgstr "Aller au contenu" - -msgid "Go to the menu" -msgstr "Aller au menu" - -msgid "Go to site" -msgstr "Aller sur le site" - -msgid "My dashboard" -msgstr "Mon tableau de bord" - -#, php-format -msgid "Logout %s" -msgstr "Déconnecter %s" - -msgid "Safe mode" -msgstr "Mode de secours" - -msgid "You are in safe mode. All plugins have been temporarily disabled. Remind to log out then log in again normally to get back all functionalities" -msgstr "Vous êtes en mode de secours. Tous les plugins ont été temporairement désactivés. N'oubliez-pas de vous déconnecter puis de vous reconnecter normalement pour retrouver toutes les fonctionnalités" - -#, php-format -msgid "Thank you for using %s." -msgstr "Merci d'utiliser %s." - -msgid "Help" -msgstr "Aide" - -msgid "uncover" -msgstr "dévoiler" - -msgid "hide" -msgstr "cacher" - -msgid "help" -msgstr "aide" - -msgid "no selection" -msgstr "aucune sélection" - -msgid "select all" -msgstr "tout sélectionner" - -msgid "invert selection" -msgstr "inverser la sélection" - -msgid "view entry" -msgstr "voir le billet" - -#, php-format -msgid "Are you sure you want to delete selected entries (%s)?" -msgstr "Êtes-vous certain de vouloir supprimer les billets sélectionnés (%s) ?" - -msgid "Are you sure you want to delete this entry?" -msgstr "Êtes-vous certain de vouloir supprimer ce billet ?" - -#, php-format -msgid "Are you sure you want to delete selected comments (%s)?" -msgstr "Êtes-vous certain de vouloir supprimer les commentaires sélectionnés (%s) ?" - -msgid "Are you sure you want to delete this comment?" -msgstr "Êtes-vous certain de vouloir supprimer ce commentaire ?" - -msgid "Users with posts cannot be deleted." -msgstr "Les utilisateurs ayant écrit des billets ne peuvent être effacées." - -#, php-format -msgid "Are you sure you want to delete selected users (%s)?" -msgstr "Êtes-vous certain de vouloir supprimer les utilisateurs sélectionnés (%s) ?" - -#, php-format -msgid "Are you sure you want to delete category \"%s\"?" -msgstr "Êtes-vous certain de vouloir supprimer la catégorie \"%s\" ?" - -msgid "Are you sure you want to reorder all categories?" -msgstr "Êtes-vous certain de vouloir réinitialiser l'ordre des catégories ?" - -#, php-format -msgid "Are you sure you want to remove media \"%s\"?" -msgstr "Êtes-vous certain de vouloir supprimer le média \"%s\" ?" - -msgid "Are you sure you want to extract archive in current directory?" -msgstr "Êtes-vous certain de vouloir extraire l'archive dans le répertoire actuel ?" - -#, php-format -msgid "Are you sure you want to remove attachment \"%s\"?" -msgstr "Êtes-vous certain de vouloir supprimer la pièce jointe \"%s\" ?" - -#, php-format -msgid "Are you sure you want to delete \"%s\" language?" -msgstr "Êtes-vous certain de vouloir supprimer la langue \"%s\" ?" - -#, php-format -msgid "Are you sure you want to delete \"%s\" plugin?" -msgstr "Êtes-vous certain de vouloir supprimer l'extension \"%s\" ?" - -msgid "Use this theme" -msgstr "Utiliser ce thème" - -msgid "Remove this theme" -msgstr "Supprimer ce thème" - -#, php-format -msgid "Are you sure you want to delete \"%s\" theme?" -msgstr "Êtes-vous certain de vouloir supprimer le thème \"%s\" ?" - -msgid "Zip file content" -msgstr "Contenu du fichier zip" - -msgid "XHTML markup validator" -msgstr "Validation XHTML" - -msgid "XHTML content is valid." -msgstr "Le contenu XHTML est valide." - -msgid "There are XHTML markup errors." -msgstr "Il y a des erreurs XHTML." - -msgid "You have unsaved changes. Switch post format will loose these changes. Proceed anyway?" -msgstr "Vous avez des modifications non sauvegardées. Changer de format vous fera perdre ces modifications. Continuer ?" - -msgid "Loading enhanced uploader, please wait." -msgstr "Chargement de l'interface avancée." - -msgid "You have unsaved changes." -msgstr "Vous n'avez pas enregistré vos modifications." - -msgid "close" -msgstr "fermer" - -msgid "now" -msgstr "maintenant" - -msgid "visual" -msgstr "visuel" - -msgid "source" -msgstr "source" - -msgid "You can use the following shortcuts to format your text." -msgstr "Vous pouvez utiliser les raccourcis suivants pour formater votre texte." - -msgid "-- none --" -msgstr "-- aucun --" - -msgid "-- block format --" -msgstr "-- format bloc --" - -msgid "Paragraph" -msgstr "Paragraphe" - -msgid "Level 1 header" -msgstr "Titre de niveau 1" - -msgid "Level 2 header" -msgstr "Titre de niveau 2" - -msgid "Level 3 header" -msgstr "Titre de niveau 3" - -msgid "Level 4 header" -msgstr "Titre de niveau 4" - -msgid "Level 5 header" -msgstr "Titre de niveau 5" - -msgid "Level 6 header" -msgstr "Titre de niveau 6" - -msgid "Strong emphasis" -msgstr "Forte emphase" - -msgid "Emphasis" -msgstr "Emphase" - -msgid "Inserted" -msgstr "Insertion" - -msgid "Deleted" -msgstr "Suppression" - -msgid "Inline quote" -msgstr "Citation en ligne" - -msgid "Code" -msgstr "Code" - -msgid "Line break" -msgstr "Passage à la ligne" - -msgid "Blockquote" -msgstr "Bloc de citation" - -msgid "Preformated text" -msgstr "Texte préformaté" - -msgid "Unordered list" -msgstr "Liste à puces" - -msgid "Ordered list" -msgstr "Liste numérotée" - -msgid "Link" -msgstr "Lien" - -msgid "URL?" -msgstr "URL ?" - -msgid "Language?" -msgstr "Langue ?" - -msgid "External image" -msgstr "Image externe" - -msgid "Media chooser" -msgstr "Sélecteur de média" - -msgid "Link to an entry" -msgstr "Lien vers un billet" - -msgid "Activate enhanced uploader" -msgstr "Activer l'interface avancée" - -msgid "Disable enhanced uploader" -msgstr "Désactiver l'interface avancée" - -msgid "File successfully uploaded." -msgstr "Fichier envoyé avec succès." - -msgid "Maximum file size allowed:" -msgstr "Taille maximale de fichier autorisée :" - -msgid "Limit exceeded." -msgstr "Limite dépassée." - -msgid "File size exceeds allowed limit." -msgstr "La taille du fichier dépasse la limite autorisée." - -msgid "Canceled." -msgstr "Annulé." - -msgid "HTTP Error:" -msgstr "Erreur HTTP :" - -msgid "Choose file" -msgstr "Choisir un fichier" - -msgid "Choose files" -msgstr "Choisir des fichiers" - -msgid "Clean" -msgstr "Nettoyer" - -msgid "Upload" -msgstr "Envoyer" - -msgid "No file in queue." -msgstr "Aucun fichier en file d'attente." - -msgid "1 file in queue." -msgstr "1 fichier en attente." - -#, php-format -msgid "%d files in queue." -msgstr "%d fichiers en attente." - -msgid "Queue error:" -msgstr "Erreur de file d'attente :" - -msgid "«prev." -msgstr "«préc." - -msgid "next»" -msgstr "suiv.»" - -msgid "No entry" -msgstr "Pas de billet" - -msgid "scheduled" -msgstr "programmé" - -msgid "protected" -msgstr "protégé" - -#, php-format -msgid "%d attachment" -msgstr "%d annexe" - -#, php-format -msgid "%d attachments" -msgstr "%d annexes" - -msgid "Type" -msgstr "Type" - -msgid "No user" -msgstr "Pas d'utilisateur" - -msgid "admin" -msgstr "Administrateur" - -msgid "superadmin" -msgstr "Super administrateur" - -msgid "Database error" -msgstr "Erreur de base de données :" - -msgid "There seems to be no Session table in your database. Is Dotclear completly installed?" -msgstr "Il semble de la table Session n'existe pas dans votre base de données. Dotclear est-il bien installé correctement?" - -msgid "System" -msgstr "Système" - -msgid "Blog" -msgstr "Blog" - -msgid "Updates" -msgstr "Mises à jour" - -msgid "Languages" -msgstr "Langues" - -msgid "administrator" -msgstr "administrateur" - -msgid "manage their own entries and comments" -msgstr "gérer ses propres billets et commentaires" - -msgid "publish entries and comments" -msgstr "publier des billets et des commentaires" - -msgid "delete entries and comments" -msgstr "supprimer des billets et des commentaires" - -msgid "manage all entries and comments" -msgstr "gérer tous les billets et commentaires" - -msgid "manage categories" -msgstr "gérer les catégories" - -msgid "manage their own media items" -msgstr "gérer ses propres médias" - -msgid "manage all media items" -msgstr "gérer tous les médias" - -msgid "That user does not exist in the database." -msgstr "Cet utilisateur n'existe pas dans la base de données." - -msgid "That key does not exist in the database." -msgstr "Cette clé n'existe pas dans la base de données." - -msgid "You are not allowed to add categories" -msgstr "Vous n'êtes pas autorisé à créer des catégories" - -msgid "You are not allowed to update categories" -msgstr "Vous n'êtes pas autorisé à modifier des catégories" - -msgid "You are not allowed to delete categories" -msgstr "Vous n'êtes pas autorisé à supprimer des catégories" - -msgid "This category is not empty." -msgstr "Cette catégorie n'est pas vide." - -msgid "You are not allowed to reset categories order" -msgstr "Vous n'êtes pas autorisé à modifier l'ordre des catégories" - -msgid "Category URL must be unique." -msgstr "L'URL de chaque catégorie doit être unique." - -msgid "You must provide a category title" -msgstr "Vous devez indiquer un titre de catégorie" - -msgid "You must provide a category URL" -msgstr "Vous devez indiquer une URL de catégorie" - -msgid "You are not allowed to create an entry" -msgstr "Vous n'êtes pas autorisé à créer des billets" - -msgid "You are not allowed to update entries" -msgstr "Vous n'êtes pas autorisé à modifier les billets" - -msgid "No such entry ID" -msgstr "Identifiant du billet inconnu" - -msgid "You are not allowed to edit this entry" -msgstr "Vous n'êtes pas autorisé à modifier ce billet" - -msgid "You are not allowed to change this entry status" -msgstr "Vous n'êtes pas autorisé à modifier l'état de ce billet" - -msgid "You are not allowed to change this entry category" -msgstr "Vous n'êtes pas autorisé à modifier la catégorie de ce billet" - -msgid "You are not allowed to mark this entry as selected" -msgstr "Vous n'êtes pas autorisé à marquer ce billet comme sélectionné" - -msgid "You are not allowed to delete entries" -msgstr "Vous n'êtes pas autorisé à supprimer des billets" - -msgid "You are not allowed to delete this entry" -msgstr "Vous n'êtes pas autorisé à supprimer ce billet" - -msgid "No entry title" -msgstr "Pas de titre de billet" - -msgid "No entry content" -msgstr "Pas de contenu de billet" - -msgid "Empty entry URL" -msgstr "URL du billet vide" - -msgid "You are not allowed to update comments" -msgstr "Vous n'êtes pas autorisé à modifier des commentaires" - -msgid "No such comment ID" -msgstr "Identifiant du commentaire inconnu" - -msgid "You are not allowed to update this comment" -msgstr "Vous n'êtes pas autorisé à modifier ce commentaire" - -msgid "You are not allowed to change this comment's status" -msgstr "Vous n'êtes pas autorisé à changer l'état de ce commentaire" - -msgid "You are not allowed to delete comments" -msgstr "Vous n'êtes pas autorisé à supprimer des commentaires" - -msgid "You are not allowed to delete this comment" -msgstr "Vous n'êtes pas autorisé à supprimer ce commentaire" - -msgid "You must provide a comment" -msgstr "Vous devez indiquer un commentaire" - -msgid "You must provide an author name" -msgstr "Vous devez indiquer un nom d'auteur" - -msgid "Email address is not valid." -msgstr "Adresse email invalide." - -msgid "online" -msgstr "en ligne" - -msgid "offline" -msgstr "hors ligne" - -msgid "removed" -msgstr "supprimé" - -msgid "You are not an administrator" -msgstr "Vous n'êtes pas administrateur" - -msgid "Invalid user language code" -msgstr "Code langue de l'utilisateur invalide" - -msgid "Blog ID must contain at least 2 characters using letters, numbers or symbols." -msgstr "L'identifiant du blog doit contenir au moins 2 caractères composés de lettres, chiffres ou symboles." - -msgid "No blog name" -msgstr "Pas de nom de blog" - -msgid "No blog URL" -msgstr "Pas d'URL de blog" - -msgid "No log message" -msgstr "Pas de message dans le journal" - -msgid "unknown" -msgstr "inconnu" - -msgid "No blog defined." -msgstr "Aucun blog défini." - -#, php-format -msgid "Directory %s does not exist." -msgstr "Le répertoire %s n'existe pas." - -msgid "You are not a super administrator." -msgstr "Vous n'êtes pas super administrateur." - -msgid "Permission denied." -msgstr "Permission refusée." - -msgid "You are not the file owner." -msgstr "Vous n'êtes pas le propriétaire de ce fichier." - -msgid "This file is not allowed." -msgstr "Ce fichier n'est pas autorisé." - -msgid "New file already exists." -msgstr "Le nouveau fichier existe déjà." - -msgid "File does not exist in the database." -msgstr "Ce fichier n'existe pas dans la base de données." - -#, php-format -msgid "Extract destination directory %s already exists." -msgstr "Le répertoire de destination d'extraction %s existe déjà." - -msgid "Embedded Audio Player" -msgstr "Fichier audio intégré" - -msgid "Embedded Video Player" -msgstr "Fichier vidéo intégré" - -#, php-format -msgid "%s: in [%s] and [%s]" -msgstr "%s: dans [%s] et [%s]" - -msgid "Empty module zip file." -msgstr "Fichier zip de module vide." - -msgid "The zip file does not appear to be a valid Dotclear module." -msgstr "Le fichier zip ne semble pas être un fichier valide de module Dotclear." - -msgid "An error occurred during module deletion." -msgstr "Une erreur est survenue durant la suppression du module." - -#, php-format -msgid "Unable to upgrade \"%s\". (same version)" -msgstr "Impossible de mettre à jour \"%s\" (même version)." - -msgid "Unable to read new _define.php file" -msgstr "Impossible de lire le nouveau fichier _define.php." - -msgid "No such module." -msgstr "Module inexistant." - -msgid "Cannot remove module files" -msgstr "Impossible de supprimer les fichiers du module" - -msgid "Cannot deactivate plugin." -msgstr "L'extension ne peut pas être désactivée." - -msgid "Cannot activate plugin." -msgstr "L'extension ne peut pas être activée." - -#, php-format -msgid "Invalid setting dcNamespace: %s" -msgstr "Espace de nommage du paramètre invalide : %s" - -msgid "Unable to retrieve settings:" -msgstr "Impossible d'obtenir les paramètres :" - -#, php-format -msgid "%s is not a valid setting id" -msgstr "%s n'est pas un identifiant de paramètre valide" - -msgid "No namespace specified" -msgstr "Aucun espace de nommage spécifié" - -msgid "Unable to retrieve workspaces:" -msgstr "Impossible d'obtenir les espaces de travail :" - -msgid "Unable to retrieve namespaces:" -msgstr "Impossible d'obtenir les espaces de nommage :" - -#, php-format -msgid "Invalid setting namespace: %s" -msgstr "Espace de nommage du paramètre invalide : %s" - -#, php-format -msgid "%s has still been pinged" -msgstr "Un rétrolien vers %s a déjà été fait" - -msgid "Unable to ping URL" -msgstr "Impossible de réaliser le rétrolien" - -#, php-format -msgid "%s is not a ping URL" -msgstr "%s n'est pas une URL de rétrolien" - -#, php-format -msgid "%s, ping error:" -msgstr "%s, erreur de rétrolien :" - -msgid "Digests file not found." -msgstr "Fichier de contrôle introuvable." - -msgid "No file to download" -msgstr "Aucun fichier à télécharger." - -msgid "Root directory is not writable." -msgstr "Le répertoire principal n'est pas accessible en écriture." - -msgid "An error occurred while downloading archive." -msgstr "Une erreur est survenue lors du téléchargement de l'archive." - -msgid "Archive not found." -msgstr "L'archive n'a pas été trouvée." - -msgid "Unable to read current digests file." -msgstr "Impossible de lire le fichier de contrôle actuel." - -msgid "Downloaded file does not seem to be a valid archive." -msgstr "Le fichier téléchargé ne semble pas être une archive valide." - -msgid "Incomplete archive." -msgstr "Archive incomplète." - -msgid "Unable to read digests file." -msgstr "Impossible de lire le fichier de contrôle." - -msgid "Invalid digests file." -msgstr "Fichier de contrôle invalide." - -#, php-format -msgid "Invalid dcWorkspace: %s" -msgstr "Espace de travail de la préférence invalide : %s" - -msgid "Unable to retrieve prefs:" -msgstr "Impossible d'obtenir les préférences :" - -#, php-format -msgid "%s is not a valid pref id" -msgstr "%s n'est pas un identifiant de préférence valide" - -msgid "No workspace specified" -msgstr "Aucun espace de travail spécifié" - -msgid "SQLite Database Schema cannot be upgraded." -msgstr "Le schema de base de données SQLite ne peut pas être mis à jour." - -msgid "Something went wrong with auto upgrade:" -msgstr "Une erreur est survenue durant la mise à jour automatique :" - -msgid "Unable to open directory." -msgstr "Impossible d'ouvrir le répertoire." - -msgid "Unable to create directory." -msgstr "Impossible de créer le répertoire." - -msgid "File is not writable." -msgstr "Le fichier n'est pas accessible en écriture." - -msgid "Unable to open file." -msgstr "Impossible d'ouvrir le fichier." - -# pas compris -msgid "Not an uploaded file." -msgstr "Pas un fichier déposé." - -msgid "The uploaded file exceeds the maximum file size allowed." -msgstr "Le fichier déposé est plus grand que la taille maximale autorisée." - -msgid "The uploaded file was only partially uploaded." -msgstr "Le fichier n'a été chargé qu'en partie." - -msgid "No file was uploaded." -msgstr "Aucun fichier chargé." - -msgid "Missing a temporary folder." -msgstr "Il manque un répertoire temporaire." - -msgid "Failed to write file to disk." -msgstr "Impossible d'écrire le fichier." - -#, php-format -msgid "%s is not a directory." -msgstr "%s n'est pas un répertoire." - -msgid "Bad range" -msgstr "Mauvaises limites" - -msgid "Invalid range" -msgstr "Sélection invalide" - -msgid "Invalid line number" -msgstr "Numéro de ligne invalide invalide" - -msgid "Chunk is out of range" -msgstr "L'extrait est hors limite" - -msgid "Bad context" -msgstr "Contexte invalide" - -msgid "Bad context (in deletion)" -msgstr "Contexte invalide (lors de la suppression)" - -msgid "Invalid diff format" -msgstr "Format de fichier diff invalide." - -msgid "Uploading this file is not allowed." -msgstr "L'envoi de ce fichier n'est pas autorisé." - -# "en jail" ? c'est du geek ? -msgid "Destination directory is not in jail." -msgstr "Le répertoire cible n'est pas en jail." - -msgid "File already exists." -msgstr "Le nouveau fichier existe déjà." - -msgid "Cannot write in this directory." -msgstr "Impossible d'écrire dans ce répertoire." - -msgid "An error occurred while writing the file." -msgstr "Une erreur est survenue pendant l'écriture du fichier." - -msgid "Source file does not exist." -msgstr "Le fichier source n'existe pas" - -# geek ? -msgid "File is not in jail." -msgstr "Le fichier n'est pas en jail." - -msgid "Destination directory is not writable." -msgstr "Le répertoire cible n'est pas accessible en écriture." - -msgid "Unable to rename file." -msgstr "Impossible de renommer le fichier." - -msgid "File cannot be removed." -msgstr "Ce fichier ne peut pas être supprimé." - -# décidément ! mais que veut dire "jail" ? -msgid "Directory is not in jail." -msgstr "Le répertoire n'est pas en jail." - -msgid "Directory cannot be removed." -msgstr "Ce répertoire ne peut pas être supprimé." - -msgid "Not enough memory to open image." -msgstr "Mémoire insuffisante pour ouvrir l'image." - -#, php-format -msgid "File %s is not compressed in the zip." -msgstr "Le fichier %s n'est pas compressé dans le zip." - -#, php-format -msgid "Trying to unzip a folder name %s" -msgstr "Tentative de décompresser un répertoire %s" - -msgid "Unable to write destination file." -msgstr "Impossible d'écrire le fichier de destination" - -msgid "Unable to write in target directory, permission denied." -msgstr "Impossible d'écrire dans le répertoire cible, permission refusée." - -msgid "Not enough memory to open file." -msgstr "Mémoire insuffisante pour ouvrir le fichier." - -msgid "File does not exist" -msgstr "Le fichier n'existe pas" - -msgid "Cannot read file" -msgstr "Impossible de lire le fichier" - -msgid "Directory does not exist" -msgstr "Le répertoire n'existe pas" - -msgid "Cannot read directory" -msgstr "Impossible de lire le répertoire" - -msgid "Unable to connect to database" -msgstr "Connexion à la base de données impossible" - -#, php-format -msgid "

      This either means that the username and password information in your config.php file is incorrect or we can't contact the database server at \"%s\". This could mean your host's database server is down.

      • Are you sure you have the correct username and password?
      • Are you sure that you have typed the correct hostname?
      • Are you sure that the database server is running?

      If you're unsure what these terms mean you should probably contact your host. If you still need help you can always visit the Dotclear Support Forums.

      " -msgstr "

      Cela signifie soit que les informations d'identifiant ou de mot de passe de votre fichier config.php sont incorrects, soit que nous ne pouvons pas contacter le serveur de base de données à l'adresse \"%s\". Cela peut vouloir dire que le serveur en question est éteint.

      • Êtes-vous sûr que l'identifiant et le mot de passe sont corrects ?
      • Êtes-vous sûr d'avoir entré le bon nom de serveur ?
      • Êtes-vous sûr que le serveur fonctionne ?

      S vous n'êtes pas sûr de la signification de ces termes, vous devriez probablement contacter votre hébergeur. Si vous avez besoin d'une aide supplémentaire, vous pouvez vous rendre sur le forum d'entraide Dotclear.

      " - -msgid "The following error was encountered while trying to read the database:" -msgstr "L'erreur suivante a été rencontrée lors de la tentative d'accès à la base de données :" - -#~ msgid "medium" -#~ msgstr "moyenne" - -#~ msgid "small" -#~ msgstr "petite" - -#~ msgid "thumbnail" -#~ msgstr "miniature" - -#~ msgid "square" -#~ msgstr "carrée" - -#~ msgid "Blog themes" -#~ msgstr "Thèmes du blog" - -#~ msgid "Pages" -#~ msgstr "Pages" - -#~ msgid "Blogroll" -#~ msgstr "Liens / Blogroll" - -#~ msgid "update thumbnails" -#~ msgstr "mettre à jour les miniatures" - -#~ msgid "insert" -#~ msgstr "insérer" - -#~ msgid "View entry" -#~ msgstr "Voir le billet" - -#~ msgid "Go to this page on the site" -#~ msgstr "Voir cette page sur le site" - -#~ msgid "Attachments" -#~ msgstr "Pièces jointes" - -#~ msgid "remove" -#~ msgstr "supprimer" - -#~ msgid "Remove" -#~ msgstr "Supprimer" - -#~ msgid "No attachment." -#~ msgstr "Aucune pièce jointe" - -#~ msgid "Add files to this entry" -#~ msgstr "Ajouter un fichier au billet" - -#~ msgid "User:" -#~ msgstr "Utilisateur :" - -#~ msgid "Logout" -#~ msgstr "Déconnexion" - -#~ msgid "login" -#~ msgstr "login" - -#~ msgid "filter" -#~ msgstr "filtre" - -#~ msgid "User preferences" -#~ msgstr "Préférences utilisateur" - -#~ msgid "Documentation" -#~ msgstr "Documentation" - -#~ msgid "View site" -#~ msgstr "Voir le site" - -#~ msgid "The file %s already exists. If you need to reset any of the configuration items in this file, please delete it first or you may continue to install." -#~ msgstr "Le fichier %s existe déjà. Pour réinitialiser votre configuration, supprimez d'abord ce fichier ou bien continuez l'installation." - -#~ msgid "Login:" -#~ msgstr "Login :" - -#~ msgid "Login and password" -#~ msgstr "Identifiant et mot de passe" - -#~ msgid "User ID" -#~ msgstr "Identifiant utilisateur" - -#~ msgid "Name" -#~ msgstr "Nom" - -#~ msgid "Add this page to my favorites" -#~ msgstr "Ajouter cette page à mes favoris" - -#~ msgid "Modify numbers in fields to change favorites order." -#~ msgstr "Modifiez les nombres dans les champs pour changer l'ordre des favoris." diff --git a/v2/dotclear/locales/fr/plugins.lang.php b/v2/dotclear/locales/fr/plugins.lang.php deleted file mode 100644 index 526dd3e..0000000 --- a/v2/dotclear/locales/fr/plugins.lang.php +++ /dev/null @@ -1,530 +0,0 @@ -DC1 redirect plugin and activate it in your blog configuration.'] = 'Veuillez noter que Dotclear 2 a un nouveau format d\'URL. Vous pouvez éviter les liens morts en installant le plugin DC1 redirect et en l\'activant dans la configuration de votre blog.'; -$GLOBALS['__l10n']['next step'] = 'étape suivante'; -$GLOBALS['__l10n']['Dotclear tables not found'] = 'Tables Dotclear non trouvées'; -$GLOBALS['__l10n']['Feed import'] = 'Importer depuis un flux'; -$GLOBALS['__l10n']['Imports a feed as new entries.'] = 'Importe un flux comme nouveaux billets.'; -$GLOBALS['__l10n']['Cannot retrieve feed URL.'] = 'Impossible d\'atteindre l\'URL du fil.'; -$GLOBALS['__l10n']['No items in feed.'] = 'Aucun élément dans le feed.'; -$GLOBALS['__l10n']['Content successfully imported.'] = 'Contenu importé avec succès.'; -$GLOBALS['__l10n']['This will import a feed (RSS or Atom) a as new content in the current blog: %s.'] = 'Ceci va importer un fil (RSS ou Atom) comme un nouveau contenu dans le blog en cours : %s.'; -$GLOBALS['__l10n']['Feed URL:'] = 'URL du fil'; -$GLOBALS['__l10n']['Flat file import'] = 'Importer depuis un fichier texte'; -$GLOBALS['__l10n']['Imports a blog or a full Dotclear installation from flat file.'] = 'Importe un blog ou toutes les données depuis un fichier texte.'; -$GLOBALS['__l10n']['Single blog successfully imported.'] = 'Blog importé avec succès.'; -$GLOBALS['__l10n']['Are you sure you want to import a full backup file?'] = 'Êtes-vous certain de vouloir charger un fichier de sauvegarde complet ?'; -$GLOBALS['__l10n']['This will import a single blog backup as new content in the current blog: %s.'] = 'Ceci va charger une sauvegarde de blog comme un nouveau contenu dans le blog en cours : %s.'; -$GLOBALS['__l10n']['Upload a backup file'] = 'Charger un fichier de sauvegarde'; -$GLOBALS['__l10n']['or pick up a local file in your public directory'] = 'ou choisissez un fichier local dans votre répertoire public'; -$GLOBALS['__l10n']['This will reset all the content of your database, except users.'] = 'Ceci va remettre à zéro tout le contenu, sauf les utilisateurs.'; -$GLOBALS['__l10n']['Another file with same name exists.'] = 'Il existe déjà un fichier portant ce nom.'; -$GLOBALS['__l10n']['Failed to extract backup file.'] = 'Erreur à l\'extraction du fichier de sauvegarde.'; -$GLOBALS['__l10n']['No backup in compressed file.'] = 'Pas de sauvegarde dans le fichier compressé.'; -$GLOBALS['__l10n']['WordPress import'] = 'Importer depuis WordPress'; -$GLOBALS['__l10n']['Import a WordPress installation into your current blog.'] = 'Importe un blog WordPress dans votre blog en cours.'; -$GLOBALS['__l10n']['This will import your WordPress content as new content in the current blog: %s.'] = 'Ceci va importer votre blog WordPress comme un nouveau contenu dans le blog en cours : %s.'; -$GLOBALS['__l10n']['We first need some information about your old WordPress installation.'] = 'Nous avons d\'abord besoin de renseignements à propos de votre ancienne installation WordPress.'; -$GLOBALS['__l10n']['WordPress and Dotclear\'s handling of categories are quite different. You can assign several categories to a single post in WordPress. In the Dotclear world, we see it more like "One category, several tags." Therefore Dotclear can only import one category per post and will chose the lowest numbered one. If you want to keep a trace of every category, you can import them as tags, with an optional prefix.'] = 'WordPress et Dotclear gèrent les catégories différemment. Dans WordPress, un article peut être classé dans plusieurs catégories, alors que dans Dotclear, on voit ça plutôt comme "Une catégorie, plusieurs mots-clefs." Dotclear ne peut donc importer qu\'une seule catégorie par article et choisira dans ce cas la première créée. Si vous désirez garder une trace de chaque catégorie, vous pouvez les importer en tant que mots-clefs, avec un préfixe optionnel.'; -$GLOBALS['__l10n']['On the other hand, in WordPress, a post can not be uncategorized, and a default installation has a first category labelised "Uncategorized". If you did not change that category, you can just ignore it while importing your blog, as Dotclear allows you to actually keep your posts uncategorized.'] = 'Par contre, il est impossible dans WordPress de ne pas assigner une catégorie à un article, c\'est pourquoi lors de l\'installation est créée une première catégorie appelée "Non classée". Si vous n\'avez pas modifié cette catégorie, l\'importation peut simplement l\'ignorer. En effet, Dotclear vous permet d\'avoir des articles sans catégorie.'; -$GLOBALS['__l10n']['Ignore the first category:'] = 'Ignorer la première catégorie :'; -$GLOBALS['__l10n']['Import lowest numbered category on posts:'] = 'Importer la catégorie la plus ancienne sur les articles :'; -$GLOBALS['__l10n']['Import all categories as tags:'] = 'Importer les catégories comme des mots-clés :'; -$GLOBALS['__l10n']['Prefix such tags with:'] = 'Préfixer ces mots-clés avec :'; -$GLOBALS['__l10n']['Content filters'] = 'Filtres de contenu'; -$GLOBALS['__l10n']['You may want to process your post and/or comment content with the following filters.'] = 'Vous pouvez utiliser les filtres suivants sur vos articles et/ou commentaires.'; -$GLOBALS['__l10n']['Post content formatter:'] = 'Formatage des articles :'; -$GLOBALS['__l10n']['Comment content formatter:'] = 'Formatage des commentaires :'; -$GLOBALS['__l10n']['WordPress tables not found'] = 'Tables WordPress non trouvées'; -$GLOBALS['__l10n']['No file to read.'] = 'Aucun fichier lisible.'; -$GLOBALS['__l10n']['File is not a DotClear backup.'] = 'Le fichier n\'est pas une sauvegarde DotClear.'; -$GLOBALS['__l10n']['File is not a single blog export.'] = 'Le fichier n\'est pas un fichier d\'export simple.'; -$GLOBALS['__l10n']['File is not a full export.'] = 'Le fichier n\'est pas un fichier d\'export complet.'; -$GLOBALS['__l10n']['ID of "%3$s" does not match on record "%1$s" at line %2$s of backup file.'] = 'L\'ID de "%3$s" ne correspond pas sur l\'enregistrement "%1$s", ligne %2$s du fichier de sauvegarde.'; -$GLOBALS['__l10n']['Please wait...'] = 'Veuillez patienter...'; -$GLOBALS['__l10n']['Maintenance'] = 'Maintenance'; -$GLOBALS['__l10n']['Optimization successful.'] = 'Optimisation réalisée avec succès.'; -$GLOBALS['__l10n']['Comments and trackback counted.'] = 'Commentaires et rétroliens comptés.'; -$GLOBALS['__l10n']['Templates cache directory emptied.'] = 'Répertoire du cache des templates vidé.'; -$GLOBALS['__l10n']['Logs deleted.'] = 'Journaux effacés.'; -$GLOBALS['__l10n']['Indexing entry %d to %d.'] = 'Index des billets %d à %d'; -$GLOBALS['__l10n']['next'] = 'suivant'; -$GLOBALS['__l10n']['Entries index done.'] = 'Index des billets complet.'; -$GLOBALS['__l10n']['Back'] = 'Retour'; -$GLOBALS['__l10n']['Indexing comment %d to %d.'] = 'Index des commentaires %d à %d'; -$GLOBALS['__l10n']['Comments index done.'] = 'Index des commentaires complet.'; -$GLOBALS['__l10n']['Optimize database room'] = 'Optimiser l\'espace de la base de données'; -$GLOBALS['__l10n']['Vacuum tables'] = 'Nettoyer les tables'; -$GLOBALS['__l10n']['Counters'] = 'Compteurs'; -$GLOBALS['__l10n']['Reset comments and ping counters'] = 'Réinitialiser les compteurs des commentaires et rétroliens'; -$GLOBALS['__l10n']['Search engine index'] = 'Index du moteur de recherche'; -$GLOBALS['__l10n']['This may take a very long time'] = 'Ceci peut prendre beaucoup de temps'; -$GLOBALS['__l10n']['Index all posts'] = 'Indexer tous les billets'; -$GLOBALS['__l10n']['Index all comments'] = 'Indexer tous les commentaires'; -$GLOBALS['__l10n']['Vacuum logs'] = 'Vider les journaux'; -$GLOBALS['__l10n']['Delete all logs'] = 'Supprimer tous les journaux'; -$GLOBALS['__l10n']['Empty templates cache directory'] = 'Vider le répertoire du cache des templates'; -$GLOBALS['__l10n']['Empty directory'] = 'Vider le répertoire'; -$GLOBALS['__l10n']['Pages'] = 'Pages'; -$GLOBALS['__l10n']['%d page'] = '%d page'; -$GLOBALS['__l10n']['%d pages'] = '%d pages'; -$GLOBALS['__l10n']['manage pages'] = 'gérer les pages'; -$GLOBALS['__l10n']['Published on'] = 'Publié le'; -$GLOBALS['__l10n']['This page\'s comments feed'] = 'Fil des commentaires de cette page'; -$GLOBALS['__l10n']['You must provide a valid email address.'] = 'Vous devez indiquer une adresse email valide.'; -$GLOBALS['__l10n']['Page title'] = 'Titre de la page'; -$GLOBALS['__l10n']['Page position'] = 'Position de la page'; -$GLOBALS['__l10n']['Publication date'] = 'Date de publication'; -$GLOBALS['__l10n']['No page'] = 'Aucune page'; -$GLOBALS['__l10n']['select this page'] = 'sélectionner cette page'; -$GLOBALS['__l10n']['Are you sure you want to delete selected pages?'] = 'Êtes-vous certain de vouloir supprimer les pages sélectionnées ?'; -$GLOBALS['__l10n']['New page'] = 'Nouvelle page'; -$GLOBALS['__l10n']['Selected pages action:'] = 'Action sur les pages sélectionnées :'; -$GLOBALS['__l10n']['This page does not exist.'] = 'Cette page n\'existe pas.'; -$GLOBALS['__l10n']['Edit page'] = 'Modifier la page'; -$GLOBALS['__l10n']['next page'] = 'page suivante'; -$GLOBALS['__l10n']['previous page'] = 'page précédente'; -$GLOBALS['__l10n']['Are you sure you want to delete this page?'] = 'Êtes-vous certain de vouloir supprimer cette page ?'; -$GLOBALS['__l10n']['Page has been successfully updated.'] = 'La page a été mise à jour avec succès.'; -$GLOBALS['__l10n']['Page has been successfully created.'] = 'La page a été créée avec succès.'; -$GLOBALS['__l10n']['Go to this page on the site'] = 'Aller sur cette page'; -$GLOBALS['__l10n']['Page status:'] = 'État de la page :'; -$GLOBALS['__l10n']['Page position:'] = 'Position de la page :'; -$GLOBALS['__l10n']['Page lang:'] = 'Langue de la page :'; -$GLOBALS['__l10n']['Page password:'] = 'Mot de passe de la page :'; -$GLOBALS['__l10n']['Warning: If you set the URL manually, it may conflict with another page.'] = 'Attention : si vous indiquez l\'URL manuellement, celle-ci peut entrer en conflit avec une autre page.'; -$GLOBALS['__l10n']['Add files to this page'] = 'Ajouter un fichier à la page'; -$GLOBALS['__l10n']['Pings'] = 'Pings'; -$GLOBALS['__l10n']['Pings configuration'] = 'Configuration des pings'; -$GLOBALS['__l10n']['Settings have been successfully updated.'] = 'Paramètres enregistrés avec succès.'; -$GLOBALS['__l10n']['Activate pings extension'] = 'Activer le module de ping'; -$GLOBALS['__l10n']['Service name:'] = 'Nom du service :'; -$GLOBALS['__l10n']['Service URI:'] = 'URI du service :'; -$GLOBALS['__l10n']['error'] = 'erreur'; -$GLOBALS['__l10n']['Test ping services'] = 'Tester les services de ping'; -$GLOBALS['__l10n']['Check all'] = 'Tout cocher.'; -$GLOBALS['__l10n']['Pings:'] = 'Pings :'; -$GLOBALS['__l10n']['Simple menu'] = 'Menu simple'; -$GLOBALS['__l10n']['Menu'] = 'Menu'; -$GLOBALS['__l10n']['All months'] = 'Tous les mois'; -$GLOBALS['__l10n']['All tags'] = 'Tous les mots-clés'; -$GLOBALS['__l10n']['Home'] = 'Accueil'; -$GLOBALS['__l10n']['Archive'] = 'Archive'; -$GLOBALS['__l10n']['Page'] = 'Page'; -$GLOBALS['__l10n']['Tags'] = 'Mots-clés'; -$GLOBALS['__l10n']['User defined'] = 'Saisie libre'; -$GLOBALS['__l10n']['Label'] = 'Libellé'; -$GLOBALS['__l10n']['Recent posts'] = 'Billets récents'; -$GLOBALS['__l10n']['Switch to %s language'] = 'Basculer vers le %s'; -$GLOBALS['__l10n']['Recent Posts from this category'] = 'Billets récents de cette catégorie'; -$GLOBALS['__l10n']['Archives'] = 'Archives'; -$GLOBALS['__l10n']['Posts from %s'] = 'Billets de %s'; -$GLOBALS['__l10n']['Recent posts for %s tag'] = 'Billets récent pour le mot-clé %s'; -$GLOBALS['__l10n']['Label and URL of menu item are mandatory.'] = 'Les libellés et URL sont obligatoires.'; -$GLOBALS['__l10n']['No menu items selected.'] = 'Aucun item de menu sélectionné.'; -$GLOBALS['__l10n']['Label is mandatory.'] = 'Le libellé est obligatoire.'; -$GLOBALS['__l10n']['URL is mandatory.'] = 'l’URL est obligatoire.'; -$GLOBALS['__l10n']['Menu item has been successfully added.'] = 'L\'item de menu a été ajouté avec succès.'; -$GLOBALS['__l10n']['Menu items have been successfully removed.'] = 'Le ou les items de menu ont été supprimés avec succès.'; -$GLOBALS['__l10n']['Menu items have been successfully updated.'] = 'Le ou les items de menu ont été mis à jour avec succès.'; -$GLOBALS['__l10n']['Add item'] = 'Ajouter un item de menu'; -$GLOBALS['__l10n']['Select type'] = 'Sélection du type'; -$GLOBALS['__l10n']['Type of item menu:'] = 'Type d\'item de menu :'; -$GLOBALS['__l10n']['Continue...'] = 'Continuer…'; -$GLOBALS['__l10n']['Select language:'] = 'Sélectionnez la langue :'; -$GLOBALS['__l10n']['Select category:'] = 'Sélectionnez la catégorie :'; -$GLOBALS['__l10n']['Select month (if necessary):'] = 'Sélectionnez le mois (si nécessaire) :'; -$GLOBALS['__l10n']['Select page:'] = 'Sélectionnez la page :'; -$GLOBALS['__l10n']['Select tag (if necessary):'] = 'Sélectionnez le mot clé (si nécessaire) :'; -$GLOBALS['__l10n']['Label of item menu:'] = 'Libellé de l\'item de menu :'; -$GLOBALS['__l10n']['Description of item menu:'] = 'Description de l\'item de menu :'; -$GLOBALS['__l10n']['URL of item menu:'] = 'URL de l\'item de menu :'; -$GLOBALS['__l10n']['Add this item'] = 'Ajouter cet item'; -$GLOBALS['__l10n']['Add an item'] = 'Ajouter un item de menu'; -$GLOBALS['__l10n']['Menu items list'] = 'Liste des items de menu'; -$GLOBALS['__l10n']['Update menu'] = 'Mettre à jour le menu'; -$GLOBALS['__l10n']['Delete selected menu items'] = 'Supprimer les items de menu sélectionnés'; -$GLOBALS['__l10n']['Are you sure you want to remove selected menu items?'] = 'Êtes-vous sûr de vouloir supprimer les items de menu sélectionnés ?'; -$GLOBALS['__l10n']['Currently no menu items'] = 'Aucun item de menu pour l\'instant'; -$GLOBALS['__l10n']['Tags:'] = 'Mots-clés :'; -$GLOBALS['__l10n']['Are you sure you want to remove this %s?'] = 'Êtes vous certain de vouloir supprimer ce %s ?'; -$GLOBALS['__l10n']['Add a %s to this entry'] = 'Ajouter un %s à ce billet'; -$GLOBALS['__l10n']['Choose from list'] = 'Choisir depuis la liste'; -$GLOBALS['__l10n']['all'] = 'tous'; -$GLOBALS['__l10n']['Tag'] = 'Mot-clé'; -$GLOBALS['__l10n']['used in %e - frequency %p%'] = 'utilisé dans %e - fréquence %p%'; -$GLOBALS['__l10n']['entry'] = 'billet'; -$GLOBALS['__l10n']['entries'] = 'billets'; -$GLOBALS['__l10n']['Enter tags separated by coma'] = 'Entrer les mots-clés séparés par une virgule'; -$GLOBALS['__l10n']['Add tags'] = 'Ajouter des mots-clés'; -$GLOBALS['__l10n']['Remove tags'] = 'Supprimer des mots-clés'; -$GLOBALS['__l10n']['Add tags to entries'] = 'Ajouter des mots-clés aux billets'; -$GLOBALS['__l10n']['Tags to add:'] = 'Mots-clés à ajouter :'; -$GLOBALS['__l10n']['Remove selected tags from entries'] = 'Supprimer les mots-clés sélectionnés des billets'; -$GLOBALS['__l10n']['No tags for selected entries'] = 'Aucun mot-clé pour les billets sélectionnés'; -$GLOBALS['__l10n']['Following tags have been found in selected entries:'] = 'Les mots-clés suivants ont été trouvés dans les billets sélectionnés :'; -$GLOBALS['__l10n']['short'] = 'court'; -$GLOBALS['__l10n']['extended'] = 'étendu'; -$GLOBALS['__l10n']['Tags list format:'] = 'Format de la liste des mots-clés :'; -$GLOBALS['__l10n']['This tag\'s comments Atom feed'] = 'Fil Atom des commentaires de ce mot-clé'; -$GLOBALS['__l10n']['This tag\'s entries Atom feed'] = 'Fil Atom des billets de ce mot-clé'; -$GLOBALS['__l10n']['Limit (empty means no limit):'] = 'Limite (laisser vide pour aucune limite)'; -$GLOBALS['__l10n']['Entries count'] = 'Nombre de billets'; -$GLOBALS['__l10n']['Tag name'] = 'Nom du mot-clé'; -$GLOBALS['__l10n']['Link to all tags:'] = 'Lien vers tous les mots-clés :'; -$GLOBALS['__l10n']['Edit tag'] = 'Modifier le mot-clé'; -$GLOBALS['__l10n']['Tag has been successfully renamed'] = 'Mot-clé renommé avec succès'; -$GLOBALS['__l10n']['Back to tags list'] = 'Retour à la liste des mots-clés'; -$GLOBALS['__l10n']['Actions for this tag'] = 'Actions pour ce mot-clé'; -$GLOBALS['__l10n']['Edit tag name:'] = 'Renommer ce mot-clé :'; -$GLOBALS['__l10n']['Rename'] = 'Renommer'; -$GLOBALS['__l10n']['Delete this tag:'] = 'Supprimer ce mot-clé :'; -$GLOBALS['__l10n']['List of entries with this tag'] = 'Liste des billets avec ce mot-clé'; -$GLOBALS['__l10n']['Tag has been successfully removed'] = 'Mot-clé supprimé avec succès'; -$GLOBALS['__l10n']['No tags on this blog.'] = 'Aucun mot-clé sur ce blog'; -$GLOBALS['__l10n']['Theme Editor'] = 'Éditeur de thème'; -$GLOBALS['__l10n']['No file'] = 'Aucun fichier'; -$GLOBALS['__l10n']['File does not exist.'] = 'Le fichier n\'existe pas.'; -$GLOBALS['__l10n']['File %s is not readable'] = 'Le fichier %s n\'est pas lisible'; -$GLOBALS['__l10n']['Unable to write file %s. Please check your theme files and folders permissions.'] = 'Impossible d\'écrire le fichier %s. Veuillez vérifier les permissions des fichiers et répertoires de votre thème.'; -$GLOBALS['__l10n']['Saving document...'] = 'Sauvegarde du document...'; -$GLOBALS['__l10n']['Document saved'] = 'Document sauvegardé'; -$GLOBALS['__l10n']['An error occurred:'] = 'Une erreur s\'est produite :'; -$GLOBALS['__l10n']['Your current theme on this blog is "%s".'] = 'Le thème utilisé actuellement sur votre blog est "%s".'; -$GLOBALS['__l10n']['You can\'t edit default theme.'] = 'Vous ne pouvez pas modifier le thème par défaut.'; -$GLOBALS['__l10n']['Please select a file to edit.'] = 'Veuillez sélectionner un fichier à modifier.'; -$GLOBALS['__l10n']['File editor'] = 'Éditeur de fichier'; -$GLOBALS['__l10n']['Editing file %s'] = 'Modification du fichier %s'; -$GLOBALS['__l10n']['This file is not writable. Please check your theme files permissions.'] = 'Ce fichier ne peut pas être modifié. Veuillez vérifier les permissions des fichiers de votre thème.'; -$GLOBALS['__l10n']['Templates files'] = 'Fichiers template'; -$GLOBALS['__l10n']['CSS files'] = 'Fichiers CSS'; -$GLOBALS['__l10n']['JavaScript files'] = 'Fichiers JavaScript'; -$GLOBALS['__l10n']['Preferences successfully updated'] = 'Préférences mises à jour avec succès'; -$GLOBALS['__l10n']['Preferences definition successfully updated'] = 'Définition des préférences mise à jour avec succès'; -$GLOBALS['__l10n']['user preferences'] = 'préférences utilisateur'; -$GLOBALS['__l10n']['global preferences'] = 'préférences globales'; -$GLOBALS['__l10n']['Presentation widgets'] = 'Widgets de présentation'; -$GLOBALS['__l10n']['Search engine'] = 'Moteur de recherche'; -$GLOBALS['__l10n']['Navigation links'] = 'Liens de navigation'; -$GLOBALS['__l10n']['Selected entries'] = 'Billets sélectionnés'; -$GLOBALS['__l10n']['Best of me'] = 'À retenir'; -$GLOBALS['__l10n']['Blog languages'] = 'Langues du blog'; -$GLOBALS['__l10n']['With entries counts'] = 'Afficher le nombre de billets'; -$GLOBALS['__l10n']['Subscribe links'] = 'Liens d\'abonnement'; -$GLOBALS['__l10n']['Subscribe'] = 'S\'abonner'; -$GLOBALS['__l10n']['Feeds type:'] = 'Types de fil :'; -$GLOBALS['__l10n']['Feed reader'] = 'Lecteur de fils de nouvelles'; -$GLOBALS['__l10n']['Somewhere else'] = 'Ailleurs'; -$GLOBALS['__l10n']['Entries limit:'] = 'Nombre de billets maximum :'; -$GLOBALS['__l10n']['Text'] = 'Texte'; -$GLOBALS['__l10n']['Text:'] = 'Texte :'; -$GLOBALS['__l10n']['Last entries'] = 'Derniers billets'; -$GLOBALS['__l10n']['Uncategorized'] = 'Non catégorisé'; -$GLOBALS['__l10n']['Tag:'] = 'Mot-clé :'; -$GLOBALS['__l10n']['Last comments'] = 'Derniers commentaires'; -$GLOBALS['__l10n']['Comments limit:'] = 'Nombre de commentaires maximum :'; -$GLOBALS['__l10n']['This blog\'s entries %s feed'] = 'Fil %s des billets de ce blog'; -$GLOBALS['__l10n']['This blog\'s comments %s feed'] = 'Fil %s des commentaires de ce blog'; -$GLOBALS['__l10n']['Entries feed'] = 'Fil des billets'; -$GLOBALS['__l10n']['Comments feed'] = 'Fil des commentaires'; -$GLOBALS['__l10n']['navigation'] = 'navigation'; -$GLOBALS['__l10n']['extra'] = 'extra'; -$GLOBALS['__l10n']['custom'] = 'supplémentaire'; -$GLOBALS['__l10n']['Widgets'] = 'Widgets'; -$GLOBALS['__l10n']['Are you sure you want to reset sidebars?'] = 'Êtes-vous certain de vouloir réinitialiser les bandeaux ?'; -$GLOBALS['__l10n']['Available widgets'] = 'Widgets disponibles'; -$GLOBALS['__l10n']['Append to:'] = 'Ajouter à :'; -$GLOBALS['__l10n']['Add widgets to sidebars'] = 'Ajouter les widgets aux bandeaux'; -$GLOBALS['__l10n']['Navigation sidebar'] = 'Bandeau de navigation'; -$GLOBALS['__l10n']['Extra sidebar'] = 'Bandeau d\'extra'; -$GLOBALS['__l10n']['Custom sidebar'] = 'Bandeau supplémentaire'; -$GLOBALS['__l10n']['Update sidebars'] = 'Mettre à jour les bandeaux'; -$GLOBALS['__l10n']['Reset sidebars'] = 'Réinitialiser les bandeaux'; -$GLOBALS['__l10n']['Use of widgets'] = 'Utilisation des widgets'; -$GLOBALS['__l10n']['Widgets may be used to add various blocks of content to be displayed on your public pages. To add a widget, drag it from the Available widgets list on the left to one of the sidebars on the right of this page. You can order your widgets in a sidebar by dragging them up or down. You must update sidebars to apply your changes.'] = 'Les widgets sont utilisés pour ajouter des blocs de contenus divers dans vos pages publiques. Pour ajouter un widget, faites-le glisser depuis la liste des Widgets disponibles à gauche jusqu\'à l\'un des bandeaux sur la droite de la page. Vous pouvez ré-ordonner vos widgets dans un bandeau en le faisant glisser vers le haut ou vers le bas. Vous devez mettre à jour les bandeaux pour enregistrer vos modifications.'; -$GLOBALS['__l10n']['Once included in a sidebar, widgets have configuration options that you can reach by clicking on the + sign next to their name.'] = 'Une fois inclus dans un bandeau, les widgets ont généralement des options que vous pouvez configurer. Cliquez sur le signe + à côté de leur nom pour y accéder.'; -$GLOBALS['__l10n']['Reset sidebars to get back to default widgets installation.'] = 'Réinitialisez les bandeaux pour retrouver les widgets par défaut de votre installation.'; -$GLOBALS['__l10n']['Widget templates tags'] = 'Marqueurs de template des widgets'; -$GLOBALS['__l10n']['If you are allowed to edit your theme templates, you can directly add widgets as templates tags, with their own configuration.'] = 'Si vous avez le droit de modifier les templates de votre thème, vous pouvez directement ajouter des widgets à l\'aide de marqueurs de template, avec leur propre configuration.'; -$GLOBALS['__l10n']['To add a widget in your template, you need to write code like this:'] = 'Pour ajouter un widget dans votre template, vous devez écrire un code comme ceci :'; -$GLOBALS['__l10n']['Widget ID'] = 'Identifiant du widget'; -$GLOBALS['__l10n']['Setting name'] = 'Nom du paramètre'; -$GLOBALS['__l10n']['Setting value'] = 'Valeur du paramètre'; -$GLOBALS['__l10n']['Here are the following available widgets for your blog:'] = 'Voici les widgets disponibles pour votre blog :'; -$GLOBALS['__l10n']['Widget ID:'] = 'Identifiant du widget :'; -$GLOBALS['__l10n']['No setting for this widget'] = 'Aucun paramètre pour ce widget'; -$GLOBALS['__l10n']['Setting name:'] = 'Nom du paramètre :'; -$GLOBALS['__l10n']['No widget.'] = 'Aucun widget.'; -$GLOBALS['__l10n']['order'] = 'ordre'; -$GLOBALS['__l10n']['Remove widget'] = 'Supprimer le widget'; -?> \ No newline at end of file diff --git a/v2/dotclear/locales/fr/plugins.po b/v2/dotclear/locales/fr/plugins.po deleted file mode 100644 index 586b32e..0000000 --- a/v2/dotclear/locales/fr/plugins.po +++ /dev/null @@ -1,1769 +0,0 @@ -# French translation of DotClear -# Copyright (C) 2006. -# Olivier Meunier , 2006. -msgid "" -msgstr "" -"Project-Id-Version: Dotclear 2\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-08-13 10:46+0200\n" -"PO-Revision-Date: \n" -"Last-Translator: xave \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" - -msgid "no" -msgstr "non" - -msgid "yes" -msgstr "oui" - -msgid "Configuration successfully updated" -msgstr "Configuration mise à jour avec succès" - -msgid "Settings definition successfully updated" -msgstr "Définition des paramètres mise à jour avec succès" - -msgid "blog settings" -msgstr "paramètres du blog" - -msgid "Value" -msgstr "Valeur" - -msgid "Description" -msgstr "Description" - -msgid "Goto:" -msgstr "Aller à :" - -msgid "Ok" -msgstr "Valider" - -msgid "global settings" -msgstr "paramètres globaux" - -msgid "Akismet spam filter" -msgstr "Filtre de spam Akismet" - -#, php-format -msgid "Filtered by %s." -msgstr "Filtré par %s" - -msgid "Akismet API key:" -msgstr "Clé de l'interface Akismet :" - -msgid "API key verified" -msgstr "Clé vérifiée" - -msgid "API key not verified" -msgstr "Clé non vérifiée" - -msgid "Get your own API key" -msgstr "Obtenez votre clé Akismet" - -msgid "Antispam" -msgstr "Antispam" - -msgid "Delete junk comments older than" -msgstr "Supprimer les commentaires indésirables après" - -msgid "days" -msgstr "jours" - -msgid "IP Blacklist / Whitelist Filter" -msgstr "Liste noire / Liste blanche IP" - -#, php-format -msgid "Filtered by %1$s with rule %2$s." -msgstr "Filtré par %1$s avec la règle %2$s." - -msgid "IP address has been successfully added." -msgstr "L'adresse IP a été ajoutée avec succès." - -msgid "IP addresses have been successfully removed." -msgstr "L'adresse IP a été supprimée avec succès." - -msgid "Blacklist" -msgstr "Liste noire" - -msgid "Whitelist" -msgstr "Liste blanche" - -msgid "Add an IP address: " -msgstr "Ajouter une adresse IP" - -msgid "Global IP" -msgstr "IP globale" - -msgid "Add" -msgstr "Ajouter" - -msgid "No IP address in list." -msgstr "Aucune adresse IP dans la liste." - -msgid "IP list" -msgstr "Liste d'IP" - -msgid "Checks sender IP address against DNSBL servers" -msgstr "Vérifie l'adresse IP de l'auteur sur des serveurs DNSBL" - -#, php-format -msgid "Filtered by %1$s with server %2$s." -msgstr "Filtré par %1$s avec le serveur %2$s." - -msgid "IP Lookup servers" -msgstr "Serveurs de résolution d'IP" - -msgid "Add here a coma separated list of servers." -msgstr "Ajoutez ici une liste de serveurs, séparés par des virgules." - -msgid "Checks links in comments against surbl.org" -msgstr "Vérifie les liens dans les commentaires sur surbl.org" - -msgid "Words Blacklist" -msgstr "Liste de termes interdits" - -#, php-format -msgid "Filtered by %1$s with word %2$s." -msgstr "Filtré par %1$s avec le terme %2$s." - -msgid "Words have been successfully added." -msgstr "Les mots ont été ajouté avec succès." - -msgid "Word has been successfully added." -msgstr "Le mot a été ajouté avec succès." - -msgid "Words have been successfully removed." -msgstr "Les mots ont été supprimés avec succès." - -msgid "Add a word " -msgstr "Ajouter un mot" - -msgid "Global word" -msgstr "Mot global" - -msgid "No word in list." -msgstr "Aucun mot dans la liste." - -msgid "List of bad words" -msgstr "Liste de mots interdits" - -msgid "Delete selected words" -msgstr "Supprimer les mots sélectionnés" - -msgid "Create default wordlist" -msgstr "Créer une liste par défaut" - -msgid "This word exists" -msgstr "Ce mot existe" - -msgid "No description" -msgstr "Aucune description" - -#, php-format -msgid "Filtered by %1$s (%2$s)" -msgstr "Filtré par %1$s (%2$s)" - -msgid "Unknown filter." -msgstr "Filtre inconnu" - -msgid "This comment is a spam:" -msgstr "Ce commentaire est un indésirable :" - -#, php-format -msgid "(including %d spam comment)" -msgstr "(dont %d commentaire indésirable)" - -#, php-format -msgid "(including %d spam comments)" -msgstr "(dont %d commentaires indésirables)" - -msgid "Spam moderation" -msgstr "Modération des indésirables" - -msgid "Spam" -msgstr "Spam" - -msgid "Ham" -msgstr "Non spam" - -msgid "Filter does not exist." -msgstr "Le filtre n'existe pas." - -msgid "Filter has no user interface." -msgstr "Le filtre n'a pas d'interface utilisateur." - -#, php-format -msgid "%s configuration" -msgstr "%s configuration" - -msgid "Information" -msgstr "Informations" - -msgid "Spam comments have been successfully deleted." -msgstr "Les commentaires indésirables ont été supprimés avec succès." - -msgid "Junk comments:" -msgstr "Commentaires indésirables :" - -msgid "Published comments:" -msgstr "Commentaires publiés :" - -msgid "Delete all spams" -msgstr "Supprimer tous les indésirables" - -#, php-format -msgid "All spam comments older than %s day(s) will be automatically deleted." -msgstr "" -"Tous les indésirables de plus de %s jour(s) seront automatiquement supprimés." - -msgid "You can modify this duration in " -msgstr "Vous pouvez modifier cet intervalle dans" - -msgid "Blog preferences" -msgstr "Préférences du blog" - -msgid "Filters configuration has been successfully saved." -msgstr "La configuration des filtres a été enregistrée avec succès." - -msgid "Available spam filters" -msgstr "Filtres disponibles" - -msgid "Order" -msgstr "Ordre" - -msgid "Active" -msgstr "Actif" - -msgid "Auto Del." -msgstr "Suppr. Auto" - -msgid "Filter name" -msgstr "Nom du filtre" - -msgid "Filter configuration" -msgstr "Configuration du filtre" - -msgid "position" -msgstr "position" - -msgid "Syndication" -msgstr "Syndication" - -msgid "Junk comments RSS feed" -msgstr "Fil RSS des commentaires indésirables" - -msgid "Published comments RSS feed" -msgstr "Fil RSS des commentaires publiés" - -msgid "Attachments" -msgstr "Fichiers attachés" - -msgid "remove" -msgstr "supprimer" - -msgid "No attachment." -msgstr "Pas de fichier attaché" - -msgid "Add files to this entry" -msgstr "Ajouter des fichiers à la page" - -msgid "Blogroll" -msgstr "Liens / Blogroll" - -msgid "manage blogroll" -msgstr "gérer la liste de liens" - -msgid "Links" -msgstr "Liens" - -msgid "All categories" -msgstr "Toutes les catégories" - -msgid "Home page only" -msgstr "Page d'accueil uniquement" - -msgid "You must provide a link title" -msgstr "Vous devez indiquer un titre de lien" - -msgid "You must provide a link URL" -msgstr "Vous devez indiquer une URL" - -msgid "You need to provide a XBEL or OPML file." -msgstr "Vous devez fournir un fichier XBEL ou OPML." - -msgid "File is not in XML format." -msgstr "Le fichier n'est pas au format XML." - -msgid "No such link or title" -msgstr "Lien ou catégorie inexistant" - -msgid "Return to blogroll" -msgstr "Retour à la liste des liens" - -msgid "Category has been successfully updated" -msgstr "Catégorie mise à jour avec succès" - -msgid "Edit category" -msgstr "Modifier une catégorie" - -msgid "Link has been successfully updated" -msgstr "Lien mis à jour avec succès" - -msgid "Edit link" -msgstr "Modifier le lien" - -msgid "XFN" -msgstr "XFN" - -msgid "_xfn_Me" -msgstr "Moi" - -msgid "_xfn_Another link for myself" -msgstr "Autre lien m'appartenant" - -msgid "_xfn_Friendship" -msgstr "Amitié" - -msgid "_xfn_Contact" -msgstr "Contact" - -msgid "_xfn_Acquaintance" -msgstr "Connaissance" - -msgid "_xfn_Friend" -msgstr "Ami(e)" - -msgid "_xfn_Physical" -msgstr "Physique" - -msgid "_xfn_Met" -msgstr "Rencontré(e)" - -msgid "_xfn_Professional" -msgstr "Professionnel" - -msgid "_xfn_Co-worker" -msgstr "Camarade de travail" - -msgid "_xfn_Colleague" -msgstr "Collègue" - -msgid "_xfn_Geographical" -msgstr "Géographique" - -msgid "_xfn_Co-resident" -msgstr "Colocataire" - -msgid "_xfn_Neighbor" -msgstr "Voisin(e)" - -msgid "_xfn_Family" -msgstr "Famille" - -msgid "_xfn_Child" -msgstr "Enfant" - -msgid "_xfn_Parent" -msgstr "Parent" - -msgid "_xfn_Sibling" -msgstr "Frère/Soeur" - -msgid "_xfn_Spouse" -msgstr "Époux/Épouse" - -msgid "_xfn_Kin" -msgstr "Famille" - -msgid "_xfn_Romantic" -msgstr "Romantique" - -msgid "_xfn_Muse" -msgstr "Muse" - -msgid "_xfn_Crush" -msgstr "Bluette" - -msgid "_xfn_Date" -msgstr "Petit(e) ami(e)" - -msgid "_xfn_Sweetheart" -msgstr "Ami(e)" - -msgid "Nothing to import" -msgstr "Rien à importer" - -msgid "Import operation cancelled." -msgstr "Importation annulée." - -msgid "Items order has been successfully updated" -msgstr "L'ordre des éléments a été mis à jour avec succès" - -msgid "Items have been successfully removed." -msgstr "Éléments supprimés avec succès." - -msgid "Link has been successfully created." -msgstr "Lien créé avec succès." - -msgid "category has been successfully created." -msgstr "Catégorie mise à jour avec succès." - -msgid "links have been successfully imported." -msgstr "Liens importés avec succès." - -msgid "URL" -msgstr "URL" - -msgid "Lang" -msgstr "Langue" - -msgid "select this link" -msgstr "sélectionner ce lien" - -msgid "Delete selected links" -msgstr "Supprimer les liens sélectionnés" - -msgid "Are you sure you want to delete selected links?" -msgstr "Êtes-vous certain de vouloir supprimer les liens sélectionnés ?" - -msgid "The link list is empty." -msgstr "La liste des liens est vide." - -msgid "Add a new link" -msgstr "Ajouter un nouveau lien" - -msgid "Add a category" -msgstr "Ajouter une catégorie" - -msgid "Import links" -msgstr "Importer des liens" - -msgid "OPML or XBEL File:" -msgstr "Fichier OPML ou XBEL :" - -msgid "Import" -msgstr "Importer" - -msgid "Light linear gradient" -msgstr "Dégradé linéaire clair" - -msgid "Medium linear gradient" -msgstr "Dégradé linéaire moyen" - -msgid "Dark linear gradient" -msgstr "Dégradé linéaire foncé" - -msgid "Solid color" -msgstr "Couleur unie" - -msgid "Custom..." -msgstr "Personnalisé..." - -msgid "Blowup configuration" -msgstr "Configuration Blowup" - -msgid "Predefined styles" -msgstr "Styles prédéfinis" - -msgid "Apply code" -msgstr "Appliquer le code" - -msgid "Choose a predefined style" -msgstr "Sélectionnez un style prédéfini" - -msgid "" -"For the following reasons, images cannot be created. You won't be able to " -"change some background properties." -msgstr "" -"Pour les raisons qui suivent, les images ne pouvant être créées, vous ne " -"pourrez pas changer certaines propriétés." - -msgid "Theme configuration has been successfully updated." -msgstr "La configuration du thème a été mise à jour avec succès." - -msgid "General" -msgstr "Général" - -msgid "Background color:" -msgstr "Couleur de fond :" - -msgid "Background color fill:" -msgstr "Remplissage de la couleur de fond :" - -msgid "Main text font:" -msgstr "Police du texte principal :" - -msgid "Main text font size:" -msgstr "Taille du texte principal :" - -msgid "Main text color:" -msgstr "Couleur du texte principal :" - -msgid "Text line height:" -msgstr "Hauteur des lignes :" - -msgid "Links color:" -msgstr "Couleur des liens :" - -msgid "Visited links color:" -msgstr "Couleurs des liens visités :" - -msgid "Focus links color:" -msgstr "Couleur des liens survolés :" - -msgid "Page top" -msgstr "Haut de page" - -msgid "Prelude color:" -msgstr "Couleur du prélude :" - -msgid "Hide main title" -msgstr "Cacher le titre principal" - -msgid "Main title font:" -msgstr "Police du titre principal :" - -msgid "Main title font size:" -msgstr "Taille du titre principal :" - -msgid "Main title color:" -msgstr "Couleur du titre principal :" - -msgid "Main title alignment:" -msgstr "Alignement du titre principal :" - -msgid "center" -msgstr "centre" - -msgid "left" -msgstr "gauche" - -msgid "right" -msgstr "droite" - -msgid "Main title position (x:y)" -msgstr "Position du titre principal (x:y)" - -msgid "Top image" -msgstr "Image d'en-tête" - -msgid "Choose \"Custom...\" to upload your own image." -msgstr "Choisissez \"Personnalisé...\" pour déposer votre propre image." - -msgid "Add your image:" -msgstr "Ajouter votre image :" - -#, php-format -msgid "JPEG or PNG file, 800 pixels wide, maximum size %s" -msgstr "Fichier JPEG ou PNG, 800 pixels de large et de taille maximale %s" - -msgid "Sidebar" -msgstr "Bandeau" - -msgid "Sidebar position:" -msgstr "Position du bandeau" - -msgid "Sidebar text font:" -msgstr "Police du texte du bandeau :" - -msgid "Sidebar text font size:" -msgstr "Taille du texte du bandeau :" - -msgid "Sidebar text color:" -msgstr "Couleur du texte du bandeau :" - -msgid "Sidebar titles font:" -msgstr "Police des titres du bandeau :" - -msgid "Sidebar titles font size:" -msgstr "Taille des titres du bandeau :" - -msgid "Sidebar titles color:" -msgstr "Couleur des titres du bandeau :" - -msgid "Sidebar 2nd level titles font:" -msgstr "Police des titres de niveau 2 du bandeau :" - -msgid "Sidebar 2nd level titles font size:" -msgstr "Taille des titres de niveau 2 du bandeau :" - -msgid "Sidebar 2nd level titles color:" -msgstr "Couleur des titres de niveau 2 du bandeau :" - -msgid "Sidebar lines color:" -msgstr "Couleur des lignes du bandeau :" - -msgid "Sidebar links color:" -msgstr "Couleur des liens du bandeau :" - -msgid "Sidebar visited links color:" -msgstr "Couleurs des liens vistés du bandeau :" - -msgid "Sidebar focus links color:" -msgstr "Couleurs des liens survolés du bandeau :" - -msgid "Date title font:" -msgstr "Police des titres de dates :" - -msgid "Date title font size:" -msgstr "Taille des titres de dates :" - -msgid "Date title color:" -msgstr "Couleur des titres de date :" - -msgid "Entry title font:" -msgstr "Police des titres de billet :" - -msgid "Entry title font size:" -msgstr "Taille des titres des billets :" - -msgid "Entry title color:" -msgstr "Couleur des titres des billets :" - -msgid "Comment background color:" -msgstr "Couleur du fond des commentaires :" - -msgid "Comment text color:" -msgstr "Couleur du texte des commentaires :" - -msgid "My comment background color:" -msgstr "Couleur du fond de mes commentaires :" - -msgid "My comment text color:" -msgstr "Couleur du texte de mes commentaires :" - -msgid "Footer" -msgstr "Pied de page" - -msgid "Footer font:" -msgstr "Police du pied de page :" - -msgid "Footer font size:" -msgstr "Taille du texte du pied de page :" - -msgid "Footer color:" -msgstr "Couleur du texte du pied de page :" - -msgid "Footer links color:" -msgstr "Couleur des liens du pied de page :" - -msgid "Footer background color:" -msgstr "Couleur de fond du pied de page :" - -msgid "Additional CSS" -msgstr "Style additionnel" - -msgid "Configuration import / export" -msgstr "Import / export de configuration" - -msgid "" -"You can share your configuration using the following code. To apply a " -"configuration, paste the code, click on \"Apply code\" and save." -msgstr "" -"Vous pouvez partager votre configuration en utilisant le code suivant. Pour " -"appliquer une configuration, copiez le code, cliquez sur \"Appliquer le code" -"\" et enregistrez." - -msgid "Copy this code:" -msgstr "Copier ce code :" - -msgid "default" -msgstr "par défaut" - -msgid "" -"At least one of the following functions is not available: " -"imagecreatetruecolor, imagepng & imagecreatefrompng." -msgstr "" -"L'une de ces fonctions au moins est indisponible : imagecreatetruecolor, " -"imagepng & imagecreatefrompng." - -msgid "The 'public' directory does not exist." -msgstr "Le répertoire 'public' n'existe pas." - -#, php-format -msgid "The '%s' directory cannot be modified." -msgstr "Le répertoire '%s' ne peut pas être modifié." - -msgid "Unable to create images." -msgstr "Impossible de créer les images." - -msgid "Invalid file type." -msgstr "Type de fichier non valide." - -msgid "Uploaded image is not 800 pixels wide." -msgstr "L'image fournie de fait pas 800 pixels de large." - -msgid "Unable to open image." -msgstr "Impossible d'ouvrir l'image." - -msgid "Checks trackback source for a link to the post" -msgstr "Vérifie si la source du rétrolien possède un lien vers le billet" - -msgid "Import/Export" -msgstr "Import/Export" - -msgid "Flat file export" -msgstr "Exporter un fichier texte" - -msgid "Exports a blog or a full Dotclear installation to flat file." -msgstr "" -"Exporte un blog ou toutes les données de Dotclear dans un fichier texte." - -msgid "Export file not found." -msgstr "Fichier d'export non trouvé." - -msgid "Failed to compress export file." -msgstr "Erreur à la compression du fichier d'exportation" - -msgid "Single blog" -msgstr "Un seul blog" - -#, php-format -msgid "This will create an export of your current blog: %s" -msgstr "Ceci va exporter le contenu du blog en cours : %s." - -msgid "Compress file" -msgstr "Compresser le fichier" - -msgid "You may also want to download your media directory as a zip file" -msgstr "" -"Vous pouvez également télécharger votre répertoire de médias au format zip." - -msgid "Export" -msgstr "Exporter" - -msgid "Multiple blogs" -msgstr "Plusieurs blogs" - -msgid "This will create an export of all the content of your database." -msgstr "L'intégralité de votre base de données sera exportée." - -msgid "Congratulation!" -msgstr "Félicitations !" - -msgid "Your blog has been successfully imported. Welcome on Dotclear 2!" -msgstr "Votre blog a été importé avec succès. Bienvenue sur Dotclear 2 !" - -msgid "Why don't you blog this now?" -msgstr "Pourquoi ne pas le bloguer maintenant ?" - -msgid "or" -msgstr "ou" - -msgid "visit your dashboard" -msgstr "vous rendre sur votre tableau de bord" - -msgid "Dotclear 1.2 import" -msgstr "Importer depuis Dotclear 1.2" - -msgid "Import a Dotclear 1.2 installation into your current blog." -msgstr "Importe un blog Dotclear 1.2 dans votre blog en cours." - -#, php-format -msgid "" -"This will import your Dotclear 1.2 content as new content in the current " -"blog: %s." -msgstr "" -"Ceci va importer votre blog Dotclear 1.2 comme un nouveau contenu dans le " -"blog en cours : %s." - -msgid "" -"Please note that this process will empty your categories, blogroll, entries " -"and comments on the current blog." -msgstr "" -"Veuillez noter que cette opération va vider vos catégories, liens, billets " -"et commentaires sur le blog en cours." - -msgid "Depending on the size of your blog, it could take a few minutes." -msgstr "Selon la taille de votre blog, ceci peut prendre quelques minutes." - -msgid "General information" -msgstr "Informations générales" - -msgid "Import my blog now" -msgstr "Importer mon blog" - -msgid "" -"We first need some information about your old Dotclear 1.2 installation." -msgstr "" -"Nous avons d'abord besoin de renseignements à propos de votre ancienne " -"installation Dotclear 1.2." - -msgid "Entries import options" -msgstr "Options d'importation des billets" - -msgid "Number of entries to import at once:" -msgstr "Nombre de billets à importer à chaque étape :" - -msgid "Importing users" -msgstr "Importe les utilisateurs" - -msgid "Importing categories" -msgstr "Importe les catégories" - -msgid "Importing blogroll" -msgstr "Importe les liens" - -#, php-format -msgid "Importing entries from %d to %d / %d" -msgstr "Importation des billets %d à %d sur %d" - -msgid "Please read carefully" -msgstr "Merci de lire attentivement" - -msgid "" -"Every newly imported user has received a random password and will need to " -"ask for a new one by following the \"I forgot my password\" link on the " -"login page (Their registered email address has to be valid.)" -msgstr "" -"Chaque utilisateur nouvellement importé a reçu un mot de passe aléatoire et " -"devra en demander un nouveau en suivant le lien \"J'ai oublié mon mot de " -"passe\" sur la page de connexion à l'interface d'aministration." - -#, php-format -msgid "" -"Please note that Dotclear 2 has a new URL layout. You can avoid broken links " -"by installing DC1 redirect plugin and activate it in your " -"blog configuration." -msgstr "" -"Veuillez noter que Dotclear 2 a un nouveau format d'URL. Vous pouvez éviter " -"les liens morts en installant le plugin DC1 redirect et " -"en l'activant dans la configuration de votre blog." - -msgid "next step" -msgstr "étape suivante" - -msgid "Dotclear tables not found" -msgstr "Tables Dotclear non trouvées" - -msgid "Feed import" -msgstr "Importer depuis un flux" - -msgid "Imports a feed as new entries." -msgstr "Importe un flux comme nouveaux billets." - -msgid "Cannot retrieve feed URL." -msgstr "Impossible d'atteindre l'URL du fil." - -msgid "No items in feed." -msgstr "Aucun élément dans le feed." - -msgid "Content successfully imported." -msgstr "Contenu importé avec succès." - -#, php-format -msgid "" -"This will import a feed (RSS or Atom) a as new content in the current blog: " -"%s." -msgstr "" -"Ceci va importer un fil (RSS ou Atom) comme un nouveau contenu dans le blog " -"en cours : %s." - -msgid "Feed URL:" -msgstr "URL du fil" - -msgid "Flat file import" -msgstr "Importer depuis un fichier texte" - -msgid "Imports a blog or a full Dotclear installation from flat file." -msgstr "Importe un blog ou toutes les données depuis un fichier texte." - -msgid "Single blog successfully imported." -msgstr "Blog importé avec succès." - -msgid "Are you sure you want to import a full backup file?" -msgstr "" -"Êtes-vous certain de vouloir charger un fichier de sauvegarde complet ?" - -#, php-format -msgid "" -"This will import a single blog backup as new content in the current blog: %s." -msgstr "" -"Ceci va charger une sauvegarde de blog comme un nouveau contenu dans le blog " -"en cours : %s." - -msgid "Upload a backup file" -msgstr "Charger un fichier de sauvegarde" - -msgid "or pick up a local file in your public directory" -msgstr "ou choisissez un fichier local dans votre répertoire public" - -msgid "This will reset all the content of your database, except users." -msgstr "Ceci va remettre à zéro tout le contenu, sauf les utilisateurs." - -msgid "Another file with same name exists." -msgstr "Il existe déjà un fichier portant ce nom." - -msgid "Failed to extract backup file." -msgstr "Erreur à l'extraction du fichier de sauvegarde." - -msgid "No backup in compressed file." -msgstr "Pas de sauvegarde dans le fichier compressé." - -msgid "WordPress import" -msgstr "Importer depuis WordPress" - -msgid "Import a WordPress installation into your current blog." -msgstr "Importe un blog WordPress dans votre blog en cours." - -#, php-format -msgid "" -"This will import your WordPress content as new content in the current blog: " -"%s." -msgstr "" -"Ceci va importer votre blog WordPress comme un nouveau contenu dans le blog " -"en cours : %s." - -msgid "We first need some information about your old WordPress installation." -msgstr "" -"Nous avons d'abord besoin de renseignements à propos de votre ancienne " -"installation WordPress." - -msgid "" -"WordPress and Dotclear's handling of categories are quite different. You can " -"assign several categories to a single post in WordPress. In the Dotclear " -"world, we see it more like \"One category, several tags.\" Therefore " -"Dotclear can only import one category per post and will chose the lowest " -"numbered one. If you want to keep a trace of every category, you can import " -"them as tags, with an optional prefix." -msgstr "" -"WordPress et Dotclear gèrent les catégories différemment. Dans WordPress, un " -"article peut être classé dans plusieurs catégories, alors que dans Dotclear, " -"on voit ça plutôt comme \"Une catégorie, plusieurs mots-clefs.\" Dotclear ne " -"peut donc importer qu'une seule catégorie par article et choisira dans ce " -"cas la première créée. Si vous désirez garder une trace de chaque catégorie, " -"vous pouvez les importer en tant que mots-clefs, avec un préfixe optionnel." - -msgid "" -"On the other hand, in WordPress, a post can not be uncategorized, and a " -"default installation has a first category labelised \"Uncategorized\". If you did not change that category, you can just ignore it while " -"importing your blog, as Dotclear allows you to actually keep your posts " -"uncategorized." -msgstr "" -"Par contre, il est impossible dans WordPress de ne pas assigner une " -"catégorie à un article, c'est pourquoi lors de l'installation est créée une " -"première catégorie appelée \"Non classée\". Si vous n'avez pas " -"modifié cette catégorie, l'importation peut simplement l'ignorer. En effet, " -"Dotclear vous permet d'avoir des articles sans catégorie." - -msgid "Ignore the first category:" -msgstr "Ignorer la première catégorie :" - -msgid "Import lowest numbered category on posts:" -msgstr "Importer la catégorie la plus ancienne sur les articles :" - -msgid "Import all categories as tags:" -msgstr "Importer les catégories comme des mots-clés :" - -msgid "Prefix such tags with:" -msgstr "Préfixer ces mots-clés avec :" - -msgid "Content filters" -msgstr "Filtres de contenu" - -msgid "" -"You may want to process your post and/or comment content with the following " -"filters." -msgstr "" -"Vous pouvez utiliser les filtres suivants sur vos articles et/ou " -"commentaires." - -msgid "Post content formatter:" -msgstr "Formatage des articles :" - -msgid "Comment content formatter:" -msgstr "Formatage des commentaires :" - -msgid "WordPress tables not found" -msgstr "Tables WordPress non trouvées" - -msgid "No file to read." -msgstr "Aucun fichier lisible." - -msgid "File is not a DotClear backup." -msgstr "Le fichier n'est pas une sauvegarde DotClear." - -msgid "File is not a single blog export." -msgstr "Le fichier n'est pas un fichier d'export simple." - -msgid "File is not a full export." -msgstr "Le fichier n'est pas un fichier d'export complet." - -#, php-format -msgid "" -"ID of \"%3$s\" does not match on record \"%1$s\" at line %2$s of backup file." -msgstr "" -"L'ID de \"%3$s\" ne correspond pas sur l'enregistrement \"%1$s\", ligne %2$s " -"du fichier de sauvegarde." - -msgid "Please wait..." -msgstr "Veuillez patienter..." - -# French translation of DotClea" -msgid "Maintenance" -msgstr "Maintenance" - -msgid "Optimization successful." -msgstr "Optimisation réalisée avec succès." - -msgid "Comments and trackback counted." -msgstr "Commentaires et rétroliens comptés." - -msgid "Templates cache directory emptied." -msgstr "Répertoire du cache des templates vidé." - -msgid "Logs deleted." -msgstr "Journaux effacés." - -#, php-format -msgid "Indexing entry %d to %d." -msgstr "Index des billets %d à %d" - -msgid "next" -msgstr "suivant" - -msgid "Entries index done." -msgstr "Index des billets complet." - -msgid "Back" -msgstr "Retour" - -#, php-format -msgid "Indexing comment %d to %d." -msgstr "Index des commentaires %d à %d" - -msgid "Comments index done." -msgstr "Index des commentaires complet." - -msgid "Optimize database room" -msgstr "Optimiser l'espace de la base de données" - -msgid "Vacuum tables" -msgstr "Nettoyer les tables" - -msgid "Counters" -msgstr "Compteurs" - -msgid "Reset comments and ping counters" -msgstr "Réinitialiser les compteurs des commentaires et rétroliens" - -msgid "Search engine index" -msgstr "Index du moteur de recherche" - -msgid "This may take a very long time" -msgstr "Ceci peut prendre beaucoup de temps" - -msgid "Index all posts" -msgstr "Indexer tous les billets" - -msgid "Index all comments" -msgstr "Indexer tous les commentaires" - -msgid "Vacuum logs" -msgstr "Vider les journaux" - -msgid "Delete all logs" -msgstr "Supprimer tous les journaux" - -msgid "Empty templates cache directory" -msgstr "Vider le répertoire du cache des templates" - -msgid "Empty directory" -msgstr "Vider le répertoire" - -msgid "Pages" -msgstr "Pages" - -#, php-format -msgid "%d page" -msgstr "%d page" - -#, php-format -msgid "%d pages" -msgstr "%d pages" - -msgid "manage pages" -msgstr "gérer les pages" - -msgid "Published on" -msgstr "Publié le" - -msgid "This page's comments feed" -msgstr "Fil des commentaires de cette page" - -msgid "You must provide a valid email address." -msgstr "Vous devez indiquer une adresse email valide." - -msgid "Page title" -msgstr "Titre de la page" - -msgid "Page position" -msgstr "Position de la page" - -msgid "Publication date" -msgstr "Date de publication" - -msgid "No page" -msgstr "Aucune page" - -msgid "select this page" -msgstr "sélectionner cette page" - -msgid "Are you sure you want to delete selected pages?" -msgstr "Êtes-vous certain de vouloir supprimer les pages sélectionnées ?" - -msgid "New page" -msgstr "Nouvelle page" - -msgid "Selected pages action:" -msgstr "Action sur les pages sélectionnées :" - -msgid "This page does not exist." -msgstr "Cette page n'existe pas." - -msgid "Edit page" -msgstr "Modifier la page" - -msgid "next page" -msgstr "page suivante" - -msgid "previous page" -msgstr "page précédente" - -msgid "Are you sure you want to delete this page?" -msgstr "Êtes-vous certain de vouloir supprimer cette page ?" - -msgid "Page has been successfully updated." -msgstr "La page a été mise à jour avec succès." - -msgid "Page has been successfully created." -msgstr "La page a été créée avec succès." - -msgid "Go to this page on the site" -msgstr "Aller sur cette page" - -msgid "Page status:" -msgstr "État de la page :" - -msgid "Page position:" -msgstr "Position de la page :" - -msgid "Page lang:" -msgstr "Langue de la page :" - -msgid "Page password:" -msgstr "Mot de passe de la page :" - -msgid "" -"Warning: If you set the URL manually, it may conflict with another page." -msgstr "" -"Attention : si vous indiquez l'URL manuellement, celle-ci peut entrer en " -"conflit avec une autre page." - -msgid "Add files to this page" -msgstr "Ajouter un fichier à la page" - -msgid "Pings" -msgstr "Pings" - -msgid "Pings configuration" -msgstr "Configuration des pings" - -msgid "Settings have been successfully updated." -msgstr "Paramètres enregistrés avec succès." - -msgid "Activate pings extension" -msgstr "Activer le module de ping" - -msgid "Service name:" -msgstr "Nom du service :" - -msgid "Service URI:" -msgstr "URI du service :" - -msgid "error" -msgstr "erreur" - -msgid "Test ping services" -msgstr "Tester les services de ping" - -msgid "Check all" -msgstr "Tout cocher." - -msgid "Pings:" -msgstr "Pings :" - -msgid "Simple menu" -msgstr "Menu simple" - -msgid "Menu" -msgstr "Menu" - -msgid "All months" -msgstr "Tous les mois" - -msgid "All tags" -msgstr "Tous les mots-clés" - -msgid "Home" -msgstr "Accueil" - -msgid "Archive" -msgstr "Archive" - -msgid "Page" -msgstr "Page" - -msgid "Tags" -msgstr "Mots-clés" - -msgid "User defined" -msgstr "Saisie libre" - -msgid "Label" -msgstr "Libellé" - -msgid "Recent posts" -msgstr "Billets récents" - -#, php-format -msgid "Switch to %s language" -msgstr "Basculer vers le %s" - -msgid "Recent Posts from this category" -msgstr "Billets récents de cette catégorie" - -msgid "Archives" -msgstr "Archives" - -#, php-format -msgid "Posts from %s" -msgstr "Billets de %s" - -#, php-format -msgid "Recent posts for %s tag" -msgstr "Billets récent pour le mot-clé %s" - -msgid "Label and URL of menu item are mandatory." -msgstr "Les libellés et URL sont obligatoires." - -msgid "No menu items selected." -msgstr "Aucun item de menu sélectionné." - -msgid "Label is mandatory." -msgstr "Le libellé est obligatoire." - -msgid "URL is mandatory." -msgstr "l’URL est obligatoire." - -msgid "Menu item has been successfully added." -msgstr "L'item de menu a été ajouté avec succès." - -msgid "Menu items have been successfully removed." -msgstr "Le ou les items de menu ont été supprimés avec succès." - -msgid "Menu items have been successfully updated." -msgstr "Le ou les items de menu ont été mis à jour avec succès." - -msgid "Add item" -msgstr "Ajouter un item de menu" - -msgid "Select type" -msgstr "Sélection du type" - -msgid "Type of item menu:" -msgstr "Type d'item de menu :" - -msgid "Continue..." -msgstr "Continuer…" - -msgid "Select language:" -msgstr "Sélectionnez la langue :" - -msgid "Select category:" -msgstr "Sélectionnez la catégorie :" - -msgid "Select month (if necessary):" -msgstr "Sélectionnez le mois (si nécessaire) :" - -msgid "Select page:" -msgstr "Sélectionnez la page :" - -msgid "Select tag (if necessary):" -msgstr "Sélectionnez le mot clé (si nécessaire) :" - -msgid "Label of item menu:" -msgstr "Libellé de l'item de menu :" - -msgid "Description of item menu:" -msgstr "Description de l'item de menu :" - -msgid "URL of item menu:" -msgstr "URL de l'item de menu :" - -msgid "Add this item" -msgstr "Ajouter cet item" - -msgid "Add an item" -msgstr "Ajouter un item de menu" - -msgid "Menu items list" -msgstr "Liste des items de menu" - -msgid "Update menu" -msgstr "Mettre à jour le menu" - -msgid "Delete selected menu items" -msgstr "Supprimer les items de menu sélectionnés" - -msgid "Are you sure you want to remove selected menu items?" -msgstr "Êtes-vous sûr de vouloir supprimer les items de menu sélectionnés ?" - -msgid "Currently no menu items" -msgstr "Aucun item de menu pour l'instant" - -msgid "Tags:" -msgstr "Mots-clés :" - -#, php-format -msgid "Are you sure you want to remove this %s?" -msgstr "Êtes vous certain de vouloir supprimer ce %s ?" - -#, php-format -msgid "Add a %s to this entry" -msgstr "Ajouter un %s à ce billet" - -msgid "Choose from list" -msgstr "Choisir depuis la liste" - -msgid "all" -msgstr "tous" - -msgid "Tag" -msgstr "Mot-clé" - -msgid "used in %e - frequency %p%" -msgstr "utilisé dans %e - fréquence %p%" - -msgid "entry" -msgstr "billet" - -msgid "entries" -msgstr "billets" - -msgid "Enter tags separated by coma" -msgstr "Entrer les mots-clés séparés par une virgule" - -msgid "Add tags" -msgstr "Ajouter des mots-clés" - -msgid "Remove tags" -msgstr "Supprimer des mots-clés" - -msgid "Add tags to entries" -msgstr "Ajouter des mots-clés aux billets" - -msgid "Tags to add:" -msgstr "Mots-clés à ajouter :" - -msgid "Remove selected tags from entries" -msgstr "Supprimer les mots-clés sélectionnés des billets" - -msgid "No tags for selected entries" -msgstr "Aucun mot-clé pour les billets sélectionnés" - -msgid "Following tags have been found in selected entries:" -msgstr "Les mots-clés suivants ont été trouvés dans les billets sélectionnés :" - -msgid "short" -msgstr "court" - -msgid "extended" -msgstr "étendu" - -msgid "Tags list format:" -msgstr "Format de la liste des mots-clés :" - -msgid "This tag's comments Atom feed" -msgstr "Fil Atom des commentaires de ce mot-clé" - -msgid "This tag's entries Atom feed" -msgstr "Fil Atom des billets de ce mot-clé" - -msgid "Limit (empty means no limit):" -msgstr "Limite (laisser vide pour aucune limite)" - -msgid "Entries count" -msgstr "Nombre de billets" - -msgid "Tag name" -msgstr "Nom du mot-clé" - -msgid "Link to all tags:" -msgstr "Lien vers tous les mots-clés :" - -msgid "Edit tag" -msgstr "Modifier le mot-clé" - -msgid "Tag has been successfully renamed" -msgstr "Mot-clé renommé avec succès" - -msgid "Back to tags list" -msgstr "Retour à la liste des mots-clés" - -msgid "Actions for this tag" -msgstr "Actions pour ce mot-clé" - -msgid "Edit tag name:" -msgstr "Renommer ce mot-clé :" - -msgid "Rename" -msgstr "Renommer" - -msgid "Delete this tag:" -msgstr "Supprimer ce mot-clé :" - -msgid "List of entries with this tag" -msgstr "Liste des billets avec ce mot-clé" - -msgid "Tag has been successfully removed" -msgstr "Mot-clé supprimé avec succès" - -msgid "No tags on this blog." -msgstr "Aucun mot-clé sur ce blog" - -msgid "Theme Editor" -msgstr "Éditeur de thème" - -msgid "No file" -msgstr "Aucun fichier" - -msgid "File does not exist." -msgstr "Le fichier n'existe pas." - -#, php-format -msgid "File %s is not readable" -msgstr "Le fichier %s n'est pas lisible" - -#, php-format -msgid "" -"Unable to write file %s. Please check your theme files and folders " -"permissions." -msgstr "" -"Impossible d'écrire le fichier %s. Veuillez vérifier les permissions des " -"fichiers et répertoires de votre thème." - -msgid "Saving document..." -msgstr "Sauvegarde du document..." - -msgid "Document saved" -msgstr "Document sauvegardé" - -msgid "An error occurred:" -msgstr "Une erreur s'est produite :" - -#, php-format -msgid "Your current theme on this blog is \"%s\"." -msgstr "Le thème utilisé actuellement sur votre blog est \"%s\"." - -msgid "You can't edit default theme." -msgstr "Vous ne pouvez pas modifier le thème par défaut." - -msgid "Please select a file to edit." -msgstr "Veuillez sélectionner un fichier à modifier." - -msgid "File editor" -msgstr "Éditeur de fichier" - -#, php-format -msgid "Editing file %s" -msgstr "Modification du fichier %s" - -msgid "This file is not writable. Please check your theme files permissions." -msgstr "" -"Ce fichier ne peut pas être modifié. Veuillez vérifier les permissions des " -"fichiers de votre thème." - -msgid "Templates files" -msgstr "Fichiers template" - -msgid "CSS files" -msgstr "Fichiers CSS" - -msgid "JavaScript files" -msgstr "Fichiers JavaScript" - -msgid "Preferences successfully updated" -msgstr "Préférences mises à jour avec succès" - -msgid "Preferences definition successfully updated" -msgstr "Définition des préférences mise à jour avec succès" - -msgid "user preferences" -msgstr "préférences utilisateur" - -msgid "global preferences" -msgstr "préférences globales" - -msgid "Presentation widgets" -msgstr "Widgets de présentation" - -msgid "Search engine" -msgstr "Moteur de recherche" - -msgid "Navigation links" -msgstr "Liens de navigation" - -msgid "Selected entries" -msgstr "Billets sélectionnés" - -msgid "Best of me" -msgstr "À retenir" - -msgid "Blog languages" -msgstr "Langues du blog" - -msgid "With entries counts" -msgstr "Afficher le nombre de billets" - -msgid "Subscribe links" -msgstr "Liens d'abonnement" - -msgid "Subscribe" -msgstr "S'abonner" - -msgid "Feeds type:" -msgstr "Types de fil :" - -msgid "Feed reader" -msgstr "Lecteur de fils de nouvelles" - -msgid "Somewhere else" -msgstr "Ailleurs" - -msgid "Entries limit:" -msgstr "Nombre de billets maximum :" - -msgid "Text" -msgstr "Texte" - -msgid "Text:" -msgstr "Texte :" - -msgid "Last entries" -msgstr "Derniers billets" - -msgid "Uncategorized" -msgstr "Non catégorisé" - -msgid "Tag:" -msgstr "Mot-clé :" - -msgid "Last comments" -msgstr "Derniers commentaires" - -msgid "Comments limit:" -msgstr "Nombre de commentaires maximum :" - -#, php-format -msgid "This blog's entries %s feed" -msgstr "Fil %s des billets de ce blog" - -#, php-format -msgid "This blog's comments %s feed" -msgstr "Fil %s des commentaires de ce blog" - -msgid "Entries feed" -msgstr "Fil des billets" - -msgid "Comments feed" -msgstr "Fil des commentaires" - -msgid "navigation" -msgstr "navigation" - -msgid "extra" -msgstr "extra" - -msgid "custom" -msgstr "supplémentaire" - -msgid "Widgets" -msgstr "Widgets" - -msgid "Are you sure you want to reset sidebars?" -msgstr "Êtes-vous certain de vouloir réinitialiser les bandeaux ?" - -msgid "Available widgets" -msgstr "Widgets disponibles" - -msgid "Append to:" -msgstr "Ajouter à :" - -msgid "Add widgets to sidebars" -msgstr "Ajouter les widgets aux bandeaux" - -msgid "Navigation sidebar" -msgstr "Bandeau de navigation" - -msgid "Extra sidebar" -msgstr "Bandeau d'extra" - -msgid "Custom sidebar" -msgstr "Bandeau supplémentaire" - -msgid "Update sidebars" -msgstr "Mettre à jour les bandeaux" - -msgid "Reset sidebars" -msgstr "Réinitialiser les bandeaux" - -msgid "Use of widgets" -msgstr "Utilisation des widgets" - -msgid "" -"Widgets may be used to add various blocks of content to be displayed on your " -"public pages. To add a widget, drag it from the Available widgets list on " -"the left to one of the sidebars on the right of this page. You can order " -"your widgets in a sidebar by dragging them up or down. You must update " -"sidebars to apply your changes." -msgstr "" -"Les widgets sont utilisés pour ajouter des blocs de contenus divers dans vos " -"pages publiques. Pour ajouter un widget, faites-le glisser depuis la liste " -"des Widgets disponibles à gauche jusqu'à l'un des bandeaux sur la droite de " -"la page. Vous pouvez ré-ordonner vos widgets dans un bandeau en le faisant " -"glisser vers le haut ou vers le bas. Vous devez mettre à jour les bandeaux " -"pour enregistrer vos modifications." - -msgid "" -"Once included in a sidebar, widgets have configuration options that you can " -"reach by clicking on the + sign next to their name." -msgstr "" -"Une fois inclus dans un bandeau, les widgets ont généralement des options " -"que vous pouvez configurer. Cliquez sur le signe + à côté de leur nom pour y " -"accéder." - -msgid "Reset sidebars to get back to default widgets installation." -msgstr "" -"Réinitialisez les bandeaux pour retrouver les widgets par défaut de votre " -"installation." - -msgid "Widget templates tags" -msgstr "Marqueurs de template des widgets" - -msgid "" -"If you are allowed to edit your theme templates, you can directly add " -"widgets as templates tags, with their own configuration." -msgstr "" -"Si vous avez le droit de modifier les templates de votre thème, vous pouvez " -"directement ajouter des widgets à l'aide de marqueurs de template, avec leur " -"propre configuration." - -msgid "To add a widget in your template, you need to write code like this:" -msgstr "" -"Pour ajouter un widget dans votre template, vous devez écrire un code comme " -"ceci :" - -msgid "Widget ID" -msgstr "Identifiant du widget" - -msgid "Setting name" -msgstr "Nom du paramètre" - -msgid "Setting value" -msgstr "Valeur du paramètre" - -msgid "Here are the following available widgets for your blog:" -msgstr "Voici les widgets disponibles pour votre blog :" - -msgid "Widget ID:" -msgstr "Identifiant du widget :" - -msgid "No setting for this widget" -msgstr "Aucun paramètre pour ce widget" - -msgid "Setting name:" -msgstr "Nom du paramètre :" - -msgid "No widget." -msgstr "Aucun widget." - -msgid "order" -msgstr "ordre" - -msgid "Remove widget" -msgstr "Supprimer le widget" - -#~ msgid "Export a blog" -#~ msgstr "Exporter un blog" - -#~ msgid "Export all content" -#~ msgstr "Exporter tout le contenu" - -#~ msgid "Import from a feed" -#~ msgstr "Importer depuis un fil de nouvelles" - -#~ msgid "Import a full backup file" -#~ msgstr "Import d'un fichier de sauvegarde complet" - -#~ msgid "The backup file does not appear to be well formed." -#~ msgstr "Le fichier de sauvegarde ne semble pas être correctement formaté" - -#~ msgid "List" -#~ msgstr "Liste" - -#~ msgid "Return to filters" -#~ msgstr "Retour aux filtres" - -#~ msgid "import" -#~ msgstr "importer" - -#~ msgid "Preview" -#~ msgstr "Prévisualiser" - -#~ msgid "Send" -#~ msgstr "Envoyer" - -#~ msgid "View page" -#~ msgstr "Voir la page" - -#~ msgid "Preview page" -#~ msgstr "Prévisualiser la page" - -#~ msgid "Save order" -#~ msgstr "Enregistrer l'ordre" - -#~ msgid "External media" -#~ msgstr "Média externe" - -#~ msgid "External media selector" -#~ msgstr "Sélecteur de médias externes" - -#~ msgid "Supported media services" -#~ msgstr "Services de média supportés" - -#~ msgid "" -#~ "Please enter the URL of the page containing the video you want to include " -#~ "in your post." -#~ msgstr "" -#~ "Entrez l'URL de la page contenant la video que vous voulez intégrer à " -#~ "votre billet." - -#~ msgid "Page URL:" -#~ msgstr "URL de la page :" - -#~ msgid "Media alignment" -#~ msgstr "Alignement du média" - -#~ msgid "Media title" -#~ msgstr "Titre du média" - -#~ msgid "Unsupported service" -#~ msgstr "Service non pris en charge" - -#~ msgid "Invalid page URL" -#~ msgstr "URL de la page non valide" diff --git a/v2/dotclear/locales/fr/public.lang.php b/v2/dotclear/locales/fr/public.lang.php deleted file mode 100644 index fac7047..0000000 --- a/v2/dotclear/locales/fr/public.lang.php +++ /dev/null @@ -1,94 +0,0 @@ -%1$s returned no result.'] = 'Votre recherche de %1$s n\'a donné aucun résultat.'; -$GLOBALS['__l10n']['Your search for %1$s returned %2$s result.'] = 'Votre recherche de %1$s a donné %2$s résultat.'; -$GLOBALS['__l10n']['Your search for %1$s returned %2$s results.'] = 'Votre recherche de %1$s a donné %2$s résultats.'; -$GLOBALS['__l10n']['Home'] = 'Accueil'; -$GLOBALS['__l10n']['All keywords'] = 'Tous les mots clés'; -$GLOBALS['__l10n']['Best of me'] = 'À retenir'; -$GLOBALS['__l10n']['Languages'] = 'Langues'; -$GLOBALS['__l10n']['Categories'] = 'Catégories'; -$GLOBALS['__l10n']['Subcategories'] = 'Sous-catégories'; -$GLOBALS['__l10n']['Archives'] = 'Archives'; -$GLOBALS['__l10n']['Links'] = 'Liens'; -$GLOBALS['__l10n']['Subscribe'] = 'S\'abonner'; -$GLOBALS['__l10n']['Entries feed'] = 'Fil des billets'; -$GLOBALS['__l10n']['Comments feed'] = 'Fil des commentaires'; -$GLOBALS['__l10n']['This blog\'s comments Atom feed'] = 'Fil Atom des commentaires de ce blog'; -$GLOBALS['__l10n']['This category\'s entries Atom feed'] = 'Fil Atom des billets de cette catégorie'; -$GLOBALS['__l10n']['This category\'s comments Atom feed'] = 'Fil Atom des commentaires de cette catégorie'; -$GLOBALS['__l10n']['This post\'s comments feed'] = 'Fil des commentaires de ce billet'; -$GLOBALS['__l10n']['This post\'s comments Atom feed'] = 'Fil Atom des commentaires de ce billet'; -$GLOBALS['__l10n']['Attachments'] = 'Annexes'; -$GLOBALS['__l10n']['Permalink'] = 'Lien permanent'; -$GLOBALS['__l10n']['Comments'] = 'Commentaires'; -$GLOBALS['__l10n']['Your comment'] = 'Votre commentaire'; -$GLOBALS['__l10n']['Your comment has been published.'] = 'Votre commentaire a été publié.'; -$GLOBALS['__l10n']['Your comment has been submitted and will be reviewed for publication.'] = 'Votre commentaire a été enregistré et sera publié après validation.'; -$GLOBALS['__l10n']['Add a comment'] = 'Ajouter un commentaire'; -$GLOBALS['__l10n']['Name or nickname'] = 'Nom ou pseudo'; -$GLOBALS['__l10n']['Email address'] = 'Adresse email'; -$GLOBALS['__l10n']['Website'] = 'Site web'; -$GLOBALS['__l10n']['optional'] = 'facultatif'; -$GLOBALS['__l10n']['Comment'] = 'Commentaire'; -$GLOBALS['__l10n']['Comments can be formatted using a simple wiki syntax.'] = 'Les commentaires peuvent être formatés en utilisant une syntaxe wiki simplifiée.'; -$GLOBALS['__l10n']['HTML code is displayed as text and web addresses are automatically converted.'] = 'Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.'; -$GLOBALS['__l10n']['Remember me on this blog'] = 'Se souvenir de moi sur ce blog'; -$GLOBALS['__l10n']['preview'] = 'prévisualiser'; -$GLOBALS['__l10n']['send'] = 'envoyer'; -$GLOBALS['__l10n']['They posted on the same topic'] = 'La discussion continue ailleurs'; -$GLOBALS['__l10n']['Trackback URL'] = 'URL de rétrolien'; -$GLOBALS['__l10n']['You must provide an author name'] = 'Vous devez indiquer un nom'; -$GLOBALS['__l10n']['You must provide a comment'] = 'Vous devez écrire un commentaire'; -$GLOBALS['__l10n']['Email address is not valid'] = 'Adresse email incorrecte'; -$GLOBALS['__l10n']['Document not found'] = 'Document non trouvé'; -$GLOBALS['__l10n']['The document you are looking for does not exist.'] = 'Le document que vous cherchez n\'existe pas.'; -$GLOBALS['__l10n']['Powered by %s'] = 'Propulsé par %s'; -$GLOBALS['__l10n']['Subscribe to'] = 'S\'abonner à'; -$GLOBALS['__l10n']['What is an RSS feed?'] = 'Qu\'est ce qu\'un fil RSS ?'; -$GLOBALS['__l10n']['RSS feed is a free blog summary. It provides content (either posts or comments) or summaries of content, together with links to the full versions, and other metadata. The last published items may then be read by your favorite RSS aggregator.'] = 'Un fil RSS recueille les informations de mise à jour d\'un site. Il fournit le contenu des billets ou des commentaires ou un extrait de ceux-ci, ainsi qu\'un lien vers les versions complètes et quelques autres informations. Ce fil a pour vocation d\'être lu par un agrégateur RSS.'; -$GLOBALS['__l10n']['Simply copy the following URL into your aggregator:'] = 'Copier simplement l\'adresse suivante dans votre agrégateur :'; -$GLOBALS['__l10n']['Password needed'] = 'Mot de passe nécessaire'; -$GLOBALS['__l10n']['You must give a password to access this area.'] = 'Vous devez indiquer un mot de passe pour accéder à cette partie.'; -$GLOBALS['__l10n']['Password:'] = 'Mot de passe :'; -$GLOBALS['__l10n']['You must provide a valid email address.'] = 'Vous devez indiquer une adresse e-mail valide.'; -$GLOBALS['__l10n']['Read'] = 'Lire'; -?> \ No newline at end of file diff --git a/v2/dotclear/locales/fr/public.po b/v2/dotclear/locales/fr/public.po deleted file mode 100644 index ce50b8e..0000000 --- a/v2/dotclear/locales/fr/public.po +++ /dev/null @@ -1,241 +0,0 @@ -# French translation of DotClear -# Copyright (C) 2006. -# Olivier Meunier , 2006. -msgid "" -msgstr "" -"Project-Id-Version: Dotclear 2\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-13 05:22+0200\n" -"PO-Revision-Date: 2011-01-15 22:47+0100\n" -"Last-Translator: xave \n" -"Language-Team: \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Poedit-Language: French\n" - -msgid "To content" -msgstr "Aller au contenu" - -msgid "To menu" -msgstr "Aller au menu" - -msgid "To search" -msgstr "Aller à la recherche" - -msgid "By" -msgstr "Par" - -msgid "by" -msgstr "par" - -msgid "on" -msgstr "le" - -msgid "On" -msgstr "Le" - -msgid "Continue reading" -msgstr "Lire la suite" - -msgid "no comment" -msgstr "aucun commentaire" - -msgid "one comment" -msgstr "un commentaire" - -msgid "%d comments" -msgstr "%d commentaires" - -msgid "no trackback" -msgstr "aucun rétrolien" - -msgid "one trackback" -msgstr "un rétrolien" - -msgid "%d trackbacks" -msgstr "%d rétroliens" - -msgid "no attachment" -msgstr "aucune annexe" - -msgid "one attachment" -msgstr "une annexe" - -msgid "%d attachments" -msgstr "%d annexes" - -msgid "previous entries" -msgstr "billets précédents" - -msgid "page" -msgstr "page" - -msgid "of" -msgstr "de" - -msgid "next entries" -msgstr "billets suivants" - -msgid "Search" -msgstr "Recherche" - -msgid "Your search for %1$s returned no result." -msgstr "Votre recherche de %1$s n'a donné aucun résultat." - -msgid "Your search for %1$s returned %2$s result." -msgstr "Votre recherche de %1$s a donné %2$s résultat." - -msgid "Your search for %1$s returned %2$s results." -msgstr "Votre recherche de %1$s a donné %2$s résultats." - -msgid "Home" -msgstr "Accueil" - -msgid "All keywords" -msgstr "Tous les mots clés" - -msgid "Best of me" -msgstr "À retenir" - -msgid "Languages" -msgstr "Langues" - -msgid "Categories" -msgstr "Catégories" - -msgid "Subcategories" -msgstr "Sous-catégories" - -msgid "Archives" -msgstr "Archives" - -msgid "Links" -msgstr "Liens" - -msgid "Subscribe" -msgstr "S'abonner" - -msgid "Entries feed" -msgstr "Fil des billets" - -msgid "Comments feed" -msgstr "Fil des commentaires" - -msgid "This blog's comments Atom feed" -msgstr "Fil Atom des commentaires de ce blog" - -msgid "This category's entries Atom feed" -msgstr "Fil Atom des billets de cette catégorie" - -msgid "This category's comments Atom feed" -msgstr "Fil Atom des commentaires de cette catégorie" - -msgid "This post's comments feed" -msgstr "Fil des commentaires de ce billet" - -msgid "This post's comments Atom feed" -msgstr "Fil Atom des commentaires de ce billet" - -msgid "Attachments" -msgstr "Annexes" - -msgid "Permalink" -msgstr "Lien permanent" - -msgid "Comments" -msgstr "Commentaires" - -msgid "Your comment" -msgstr "Votre commentaire" - -msgid "Your comment has been published." -msgstr "Votre commentaire a été publié." - -msgid "Your comment has been submitted and will be reviewed for publication." -msgstr "Votre commentaire a été enregistré et sera publié après validation." - -msgid "Add a comment" -msgstr "Ajouter un commentaire" - -msgid "Name or nickname" -msgstr "Nom ou pseudo" - -msgid "Email address" -msgstr "Adresse email" - -msgid "Website" -msgstr "Site web" - -msgid "optional" -msgstr "facultatif" - -msgid "Comment" -msgstr "Commentaire" - -msgid "Comments can be formatted using a simple wiki syntax." -msgstr "Les commentaires peuvent être formatés en utilisant une syntaxe wiki simplifiée." - -msgid "HTML code is displayed as text and web addresses are automatically converted." -msgstr "Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées." - -msgid "Remember me on this blog" -msgstr "Se souvenir de moi sur ce blog" - -msgid "preview" -msgstr "prévisualiser" - -msgid "send" -msgstr "envoyer" - -msgid "They posted on the same topic" -msgstr "La discussion continue ailleurs" - -msgid "Trackback URL" -msgstr "URL de rétrolien" - -msgid "You must provide an author name" -msgstr "Vous devez indiquer un nom" - -msgid "You must provide a comment" -msgstr "Vous devez écrire un commentaire" - -msgid "Email address is not valid" -msgstr "Adresse email incorrecte" - -msgid "Document not found" -msgstr "Document non trouvé" - -msgid "The document you are looking for does not exist." -msgstr "Le document que vous cherchez n'existe pas." - -msgid "Powered by %s" -msgstr "Propulsé par %s" - -msgid "Subscribe to" -msgstr "S'abonner à" - -msgid "What is an RSS feed?" -msgstr "Qu'est ce qu'un fil RSS ?" - -msgid "RSS feed is a free blog summary. It provides content (either posts or comments) or summaries of content, together with links to the full versions, and other metadata. The last published items may then be read by your favorite RSS aggregator." -msgstr "Un fil RSS recueille les informations de mise à jour d'un site. Il fournit le contenu des billets ou des commentaires ou un extrait de ceux-ci, ainsi qu'un lien vers les versions complètes et quelques autres informations. Ce fil a pour vocation d'être lu par un agrégateur RSS." - -msgid "Simply copy the following URL into your aggregator:" -msgstr "Copier simplement l'adresse suivante dans votre agrégateur :" - -msgid "Password needed" -msgstr "Mot de passe nécessaire" - -msgid "You must give a password to access this area." -msgstr "Vous devez indiquer un mot de passe pour accéder à cette partie." - -msgid "Password:" -msgstr "Mot de passe :" - -msgid "You must provide a valid email address." -msgstr "Vous devez indiquer une adresse e-mail valide." - -msgid "Read" -msgstr "Lire" diff --git a/v2/dotclear/locales/fr/resources.php b/v2/dotclear/locales/fr/resources.php deleted file mode 100644 index d0e57b7..0000000 --- a/v2/dotclear/locales/fr/resources.php +++ /dev/null @@ -1,23 +0,0 @@ - 'http://doc.dotclear.net/2.0', - 'Présentation de Dotclear 2' => 'http://doc.dotclear.net/2.0/overview/tour', - "Manuel de l'utilisateur" => 'http://doc.dotclear.net/2.0/usage', - "Guide d'installation et d'administration" => 'http://doc.dotclear.net/2.0/admin', - "Forum de support de Dotclear 2" => 'http://forum.dotclear.net/' -); -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/.htaccess b/v2/dotclear/plugins/.htaccess deleted file mode 100644 index 14249c5..0000000 --- a/v2/dotclear/plugins/.htaccess +++ /dev/null @@ -1 +0,0 @@ -Deny from all \ No newline at end of file diff --git a/v2/dotclear/plugins/aboutConfig/_admin.php b/v2/dotclear/plugins/aboutConfig/_admin.php deleted file mode 100644 index 7a161a0..0000000 --- a/v2/dotclear/plugins/aboutConfig/_admin.php +++ /dev/null @@ -1,17 +0,0 @@ -addItem('about:config','plugin.php?p=aboutConfig','index.php?pf=aboutConfig/icon.png', - preg_match('/plugin.php\?p=aboutConfig(&.*)?$/',$_SERVER['REQUEST_URI']), - $core->auth->isSuperAdmin()); -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/aboutConfig/_define.php b/v2/dotclear/plugins/aboutConfig/_define.php deleted file mode 100644 index 271c26e..0000000 --- a/v2/dotclear/plugins/aboutConfig/_define.php +++ /dev/null @@ -1,20 +0,0 @@ -registerModule( - /* Name */ "about:config", - /* Description*/ "Manage every blog configuration directive", - /* Author */ "Olivier Meunier", - /* Version */ '0.4' -); -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/aboutConfig/icon-big.png b/v2/dotclear/plugins/aboutConfig/icon-big.png deleted file mode 100644 index f5e9c5d80fe3a12b5b91330bdc9056f093f5acfe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9886 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 Q2LJ#707*qoM6N<$f;BkRnE(I) diff --git a/v2/dotclear/plugins/aboutConfig/icon.png b/v2/dotclear/plugins/aboutConfig/icon.png deleted file mode 100644 index adbbf0f3058c0349a65ad7a777bb8241310b0023..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1679 zcmbVNYfuwc6b>MWpnwRsY(tVg2FwqdT*E&%O72-+9k& z(j_dM;uYe>;c%vC79o0e^>e0(P!ecocHC1uP~7 zH$|)kwWJC+TNdR}cw$~c5|(GhWF~Ih0wC5QX9;XLV+0(wEITcCD7YiMa#nU8^SQu? z3S(7pN1ZZgb%2VXa6rrhqcBhc0uqP^2}M$=bUq*eA&?IW_>dq9lFEewIS2w{50|w@ znKI;h1Rb-*?i5@z!;o@5KQ}j*mn-BER3;yi$z)Crfgp<2h@#in8KWc0PR|)v5XMrZBc18FR+LZ0_D{$f?MBBVR&U*rFJ-5CY4#;dVxYD7fqm&tx&l5itxy zGE@*PRf1{|VnrbW!y>g%jH0MWpd9CT9abb(OHmmjQHoFj1gSw-s#3wQ079gYNFoy; z<5-QIW{h?WAGd2^?T%r^Z^X(~6mDb)Dv2Pn#ydb~CK!S?6C|KY6ay(1yNSr9oy8fA z6~QS>4sJpz!Ul|FS8jQYbzyWgEL9?i8dZv%QNt1hg4M8C0D>w=Dr2J_#hU(4#`vr= zd}nLC(kkOeZ2vjMmyOSEUXBiKXXk}t2P1whSjOSFp3@+3lB2USQA_wQ4N$nbxnFLn z^sCuFcl(3~d!|60*G0M;+LhVH_kvQYt4{S@Y+l`urd-_nw|AFlHZNpG2_(^BskUXE zPd6MrAqI6}XIfn@Z+RH5!P2G8b;I^siaTBOAjToBR_ij@k6f|#S@(CVnrGe2p4jZ0 zs*dj%27ASG!hCK99X4p+syOh|suzLlBt^Q%SJSSqEO>voxcB;H&X<{4o?`z~GkaTl zDVa$Syrr~sxBg&@S(Kia7gD@yvtQjED7PGbd)I}Y&kA^Vf0_R$>gf7FR=TMR1Y z-79$K|De8VY@89+T3`%nnnwl=3+t;Nwfp1Ij+n#0%~+S-b0U12TV%4gPkluH<2*Qj zxB?+~KmFaq{VASIlszdtqzpij;y2>F`kl!Y!|f+*qAZ zu@KgiZ3o()McuyL73f7i?@z6|7wM&*RQm|;^W^k@NYm3gvbG<)_c#xkSl}BoH>|CC zef3(?{eqn7JKv>JTkzU;ce5y@vST1;&ygd($#sF!^RYiC2KN+;Pb59@thrk6Xly9H zawh+HQrmP8ex-m9N?cf-|;!fm$hYjZt({ReN0E*V}N^Hwi?@O+^UzOU3fW=TuJ zuYIn5XyZ+Hxb1wFV5ZBp&*`*yp>+rgPZ>O$f4p{s6^=>%y{zVL(qgospOH`YElbOh zpcO@zx`%Xe_dS9exzDR6^_3^oHb9|6-*n{f{tIzw!@fn6JMKLE5!!nCMt@O+#$Yhi z>_@p%gC=_fc)7PxiQo6XGxgr^Gbk>uOn(qboqZuRG&CqAL&fKs(fV5aP zP5)RqdxEPA*okecI@#2;r2-L!?7M+AEQzq}G_Q^hYh4hLx_Ej?{Xe0xKUBm;Ks_<7 n-9wS(A8iGSjvB5!Ny&HN4D8VRFarbYoxcc;Isy4wnYR94&(d^R diff --git a/v2/dotclear/plugins/aboutConfig/index.php b/v2/dotclear/plugins/aboutConfig/index.php deleted file mode 100644 index dda5716..0000000 --- a/v2/dotclear/plugins/aboutConfig/index.php +++ /dev/null @@ -1,240 +0,0 @@ - $s) - { - $core->blog->settings->addNamespace($ns); - - foreach ($s as $k => $v) { - $core->blog->settings->$ns->put($k,$v); - } - - $core->blog->triggerBlog(); - } - - http::redirect($p_url.'&upd=1'); - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } -} - -# Global settings update -if (!empty($_POST['gs']) && is_array($_POST['gs'])) -{ - try - { - foreach ($_POST['gs'] as $ns => $s) - { - $core->blog->settings->addNamespace($ns); - - foreach ($s as $k => $v) { - $core->blog->settings->$ns->put($k,$v,null,null,true,true); - } - - $core->blog->triggerBlog(); - } - - http::redirect($p_url.'&upd=1&part=global'); - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } -} - -$part = !empty($_GET['part']) && $_GET['part'] == 'global' ? 'global' : 'local'; - -function settingLine($id,$s,$ns,$field_name,$strong_label) -{ - if ($s['type'] == 'boolean') { - $field = form::combo(array($field_name.'['.$ns.']['.$id.']',$field_name.'_'.$id), - array(__('yes') => 1, __('no') => 0),$s['value']); - } else { - $field = form::field(array($field_name.'['.$ns.']['.$id.']',$field_name.'_'.$id),40,null, - html::escapeHTML($s['value'])); - } - - $slabel = $strong_label ? '%s' : '%s'; - - return - ''. - ''. - ''.$field.''. - ''.$s['type'].''. - ''.html::escapeHTML($s['label']).''. - ''; -} -?> - - - about:config - - - - - - -'.__('Configuration successfully updated').'

      '; -} - -if (!empty($_GET['upda'])) { - echo '

      '.__('Settings definition successfully updated').'

      '; -} -?> -

      blog->name); ?> › about:config

      - -
      - -%s'. -''. -''."\n". -' Setting ID'."\n". -' '.__('Value').''."\n". -' '.__('Type').''."\n". -' '.__('Description').''."\n". -''."\n". -''."\n". -''; -$table_footer = ''; - -$settings = array(); -foreach ($core->blog->settings->dumpNamespaces() as $ns => $namespace) { - foreach ($namespace->dumpSettings() as $k => $v) { - $settings[$ns][$k] = $v; - } -} -ksort($settings); -if (count($settings) > 0) { - $ns_combo = array(); - foreach ($settings as $ns => $s) { - $ns_combo[$ns] = '#l_'.$ns; - } - echo - '
      '. - '

      '. - ' '.form::combo('ls_nav',$ns_combo). - ' '. - ''. - $core->formNonce().'

      '; -} -?> - -
      - - $s) -{ - ksort($s); - echo sprintf($table_header,'l_'.$ns,$ns); - foreach ($s as $k => $v) - { - echo settingLine($k,$v,$ns,'s',!$v['global']); - } - echo $table_footer; -} -?> - -

      - -formNonce(); ?>

      -
      -
      - -
      - -blog->settings->dumpNamespaces() as $ns => $namespace) { - foreach ($namespace->dumpGlobalSettings() as $k => $v) { - $settings[$ns][$k] = $v; - } -} - -ksort($settings); - -if (count($settings) > 0) { - $ns_combo = array(); - foreach ($settings as $ns => $s) { - $ns_combo[$ns] = '#g_'.$ns; - } - echo - '
      '. - '

      '. - ' '.form::combo('gs_nav',$ns_combo). - ' '. - ''. - $core->formNonce().'

      '; -} -?> - -
      - - $s) -{ - ksort($s); - echo sprintf($table_header,'g_'.$ns,$ns); - foreach ($s as $k => $v) - { - echo settingLine($k,$v,$ns,'gs',false); - } - echo $table_footer; -} -?> - -

      - -formNonce(); ?>

      -
      -
      - - - \ No newline at end of file diff --git a/v2/dotclear/plugins/akismet/_define.php b/v2/dotclear/plugins/akismet/_define.php deleted file mode 100644 index 599cf82..0000000 --- a/v2/dotclear/plugins/akismet/_define.php +++ /dev/null @@ -1,24 +0,0 @@ -registerModule( - /* Name */ "Akismet", - /* Description*/ "Akismet interface for Dotclear", - /* Author */ "Olivier Meunier", - /* Version */ '1.1', - array( - 'permissions' => 'usage,contentadmin', - 'priority' => 200 - ) -); -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/akismet/_prepend.php b/v2/dotclear/plugins/akismet/_prepend.php deleted file mode 100644 index c65fb2d..0000000 --- a/v2/dotclear/plugins/akismet/_prepend.php +++ /dev/null @@ -1,17 +0,0 @@ -spamfilters[] = 'dcFilterAkismet'; -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/akismet/class.dc.filter.akismet.php b/v2/dotclear/plugins/akismet/class.dc.filter.akismet.php deleted file mode 100644 index 44530a4..0000000 --- a/v2/dotclear/plugins/akismet/class.dc.filter.akismet.php +++ /dev/null @@ -1,260 +0,0 @@ -auth->isSuperAdmin()) { - $this->has_gui = false; - } - } - - protected function setInfo() - { - $this->description = __('Akismet spam filter'); - } - - public function getStatusMessage($status,$comment_id) - { - return sprintf(__('Filtered by %s.'),$this->guiLink()); - } - - private function akInit() - { - $blog =& $this->core->blog; - - if (!$blog->settings->akismet->ak_key) { - return false; - } - - return new akismet($blog->url,$blog->settings->akismet->ak_key); - } - - public function isSpam($type,$author,$email,$site,$ip,$content,$post_id,&$status) - { - if (($ak = $this->akInit()) === false) { - return; - } - - $blog =& $this->core->blog; - - try - { - if ($ak->verify()) - { - $post = $blog->getPosts(array('post_id' => $post_id)); - - $c = $ak->comment_check( - $post->getURL(), - $type, - $author, - $email, - $site, - $content - ); - - if ($c) { - $status = 'Filtered by Akismet'; - return true; - } - } - } catch (Exception $e) {} # If http or akismet is dead, we don't need to know it - } - - public function trainFilter($status,$filter,$type,$author,$email,$site,$ip,$content,$rs) - { - # We handle only false positive from akismet - if ($status == 'spam' && $filter != 'dcFilterAkismet') - { - return; - } - - $f = $status == 'spam' ? 'submit_spam' : 'submit_ham'; - - if (($ak = $this->akInit()) === false) { - return; - } - - try - { - if ($ak->verify()) { - $ak->{$f}($rs->getPostURL(),$type,$author,$email,$site,$content); - } - } catch (Exception $e) {} # If http or akismet is dead, we don't need to know it - } - - public function gui($url) - { - $blog =& $this->core->blog; - - $ak_key = $blog->settings->akismet->ak_key; - $ak_verified = null; - - if (isset($_POST['ak_key'])) - { - try - { - $ak_key = $_POST['ak_key']; - - $blog->settings->addNamespace('akismet'); - $blog->settings->akismet->put('ak_key',$ak_key,'string'); - - http::redirect($url.'&up=1'); - } - catch (Exception $e) - { - $this->core->error->add($e->getMessage()); - } - } - - if ($blog->settings->akismet->ak_key) - { - try { - $ak = new akismet($blog->url,$blog->settings->akismet->ak_key); - $ak_verified = $ak->verify(); - } catch (Exception $e) { - $this->core->error->add($e->getMessage()); - } - } - - $res = - '
      '. - '

      '; - - if ($ak_verified !== null) { - if ($ak_verified) { - $res .= ' '.__('API key verified'); - } else { - $res .= ' '.__('API key not verified'); - } - } - - $res .= '

      '; - - $res .= - '

      '.__('Get your own API key').'

      '. - '

      '. - $this->core->formNonce().'

      '. - '
      '; - - return $res; - } -} - -class akismet extends netHttp -{ - protected $base_host = 'rest.akismet.com'; - protected $ak_host = ''; - protected $ak_version = '1.1'; - protected $ak_path = '/%s/%s'; - - protected $ak_key = null; - protected $blog_url; - - protected $timeout = 3; - - public function __construct($blog_url,$api_key) - { - $this->blog_url = $blog_url; - $this->ak_key = $api_key; - - $this->ak_path = sprintf($this->ak_path,$this->ak_version,'%s'); - $this->ak_host = $this->ak_key.'.'.$this->base_host; - - parent::__construct($this->ak_host,80); - } - - public function verify() - { - $this->host = $this->base_host; - $path = sprintf($this->ak_path,'verify-key'); - - $data = array( - 'key' => $this->ak_key, - 'blog' => $this->blog_url - ); - - if ($this->post($path,$data,'UTF-8')) - { - return $this->getContent() == 'valid'; - } - - return false; - } - - public function comment_check($permalink,$type,$author,$email,$url,$content) - { - $info_ignore = array('HTTP_COOKIE'); - $info = array(); - - foreach ($_SERVER as $k => $v) { - if (strpos($k,'HTTP_') === 0 && !in_array($k,$info_ignore)) { - $info[$k] = $v; - } - } - - return $this->callFunc('comment-check',$permalink,$type,$author,$email,$url,$content,$info); - } - - public function submit_spam($permalink,$type,$author,$email,$url,$content) - { - $this->callFunc('submit-spam',$permalink,$type,$author,$email,$url,$content); - return true; - } - - public function submit_ham($permalink,$type,$author,$email,$url,$content) - { - $this->callFunc('submit-ham',$permalink,$type,$author,$email,$url,$content); - return true; - } - - protected function callFunc($function,$permalink,$type,$author,$email,$url,$content,$info=array()) - { - $ua = isset($info['HTTP_USER_AGENT']) ? $info['HTTP_USER_AGENT'] : ''; - $referer = isset($info['HTTP_REFERER']) ? $info['HTTP_REFERER'] : ''; - - # Prepare comment data - $data = array( - 'blog' => $this->blog_url, - 'user_ip' => http::realIP(), - 'user_agent' => $ua, - 'referrer' => $referer, - 'permalink' => $permalink, - 'comment_type' => $type, - 'comment_author' => $author, - 'comment_author_email' => $email, - 'comment_author_url' => $url, - 'comment_content' => $content - ); - - $data = array_merge($data,$info); - - $this->host = $this->ak_host; - $path = sprintf($this->ak_path,$function); - - if (!$this->post($path,$data,'UTF-8')) { - throw new Exception('HTTP error: '.$this->getError()); - } - - return $this->getContent() == 'true'; - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/antispam/_admin.php b/v2/dotclear/plugins/antispam/_admin.php deleted file mode 100644 index 838301d..0000000 --- a/v2/dotclear/plugins/antispam/_admin.php +++ /dev/null @@ -1,73 +0,0 @@ -addItem(__('Antispam'),'plugin.php?p=antispam','index.php?pf=antispam/icon.png', - preg_match('/plugin.php\?p=antispam(&.*)?$/',$_SERVER['REQUEST_URI']), - $core->auth->check('admin',$core->blog->id)); - -$core->addBehavior('coreAfterCommentUpdate',array('dcAntispam','trainFilters')); -$core->addBehavior('adminAfterCommentDesc',array('dcAntispam','statusMessage')); -$core->addBehavior('adminDashboardIcons',array('dcAntispam','dashboardIcon')); - -$core->addBehavior('adminDashboardFavs','antispamDashboardFavs'); -$core->addBehavior('adminDashboardFavsIcon','antispamDashboardFavsIcon'); - -function antispamDashboardFavs($core,$favs) -{ - $favs['antispam'] = new ArrayObject(array('antispam','Antispam','plugin.php?p=antispam', - 'index.php?pf=antispam/icon.png','index.php?pf=antispam/icon-big.png', - 'admin',null,null)); -} - -function antispamDashboardFavsIcon($core,$name,$icon) -{ - // Check if it is comments favs - if ($name == 'comments') { - // Hack comments title if there is at least one spam - $str = dcAntispam::dashboardIconTitle($core); - if ($str != '') { - $icon[0] .= $str; - } - } -} - -if (!DC_ANTISPAM_CONF_SUPER || $core->auth->isSuperAdmin()) { - $core->addBehavior('adminBlogPreferencesForm',array('antispamBehaviors','adminBlogPreferencesForm')); - $core->addBehavior('adminBeforeBlogSettingsUpdate',array('antispamBehaviors','adminBeforeBlogSettingsUpdate')); -} - -class antispamBehaviors -{ - public static function adminBlogPreferencesForm($core,$settings) - { - $ttl = $settings->antispam->antispam_moderation_ttl; - echo - '
      Antispam'. - '

      '. - '
      '; - } - - public static function adminBeforeBlogSettingsUpdate($settings) - { - $settings->addNamespace('antispam'); - $settings->antispam->put('antispam_moderation_ttl',(integer)$_POST['antispam_moderation_ttl']); - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/antispam/_define.php b/v2/dotclear/plugins/antispam/_define.php deleted file mode 100644 index 554194a..0000000 --- a/v2/dotclear/plugins/antispam/_define.php +++ /dev/null @@ -1,24 +0,0 @@ -registerModule( - /* Name */ "Antispam", - /* Description*/ "Generic antispam plugin for Dotclear", - /* Author */ "Alain Vagner", - /* Version */ '1.3.1', - array( - 'permissions' => 'usage,contentadmin', - 'priority' => 10 - ) -); -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/antispam/_install.php b/v2/dotclear/plugins/antispam/_install.php deleted file mode 100644 index ca13f6b..0000000 --- a/v2/dotclear/plugins/antispam/_install.php +++ /dev/null @@ -1,56 +0,0 @@ -plugins->moduleInfo('antispam','version'); -if (version_compare($core->getVersion('antispam'),$version,'>=')) { - return; -} - -/* Database schema --------------------------------------------------------- */ -$s = new dbStruct($core->con,$core->prefix); - -$s->spamrule - ->rule_id ('bigint', 0, false) - ->blog_id ('varchar', 32, true) - ->rule_type ('varchar', 16, false, "'word'") - ->rule_content ('varchar', 128, false) - - ->primary('pk_spamrule','rule_id') - ; - -$s->spamrule->index('idx_spamrule_blog_id','btree','blog_id'); -$s->spamrule->reference('fk_spamrule_blog','blog_id','blog','blog_id','cascade','cascade'); - -if ($s->driver() == 'pgsql') { - $s->spamrule->index('idx_spamrule_blog_id_null','btree','(blog_id IS NULL)'); -} - -# Schema installation -$si = new dbStruct($core->con,$core->prefix); -$changes = $si->synchronize($s); - -# Creating default wordslist -if ($core->getVersion('antispam') === null) { - $_o = new dcFilterWords($core); - $_o->defaultWordsList(); - unset($_o); -} - -$settings = new dcSettings($core,null); -$settings->addNamespace('antispam'); -$settings->antispam->put('antispam_moderation_ttl',0,'integer','Antispam Moderation TTL (days)',false); - -$core->setVersion('antispam',$version); -return true; -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/antispam/_prepend.php b/v2/dotclear/plugins/antispam/_prepend.php deleted file mode 100644 index 1dba929..0000000 --- a/v2/dotclear/plugins/antispam/_prepend.php +++ /dev/null @@ -1,30 +0,0 @@ -spamfilters = array('dcFilterIP','dcFilterWords','dcFilterIpLookup','dcFilterLinksLookup'); - -$core->url->register('spamfeed','spamfeed','^spamfeed/(.+)$',array('dcAntispamURL','spamFeed')); -$core->url->register('hamfeed','hamfeed','^hamfeed/(.+)$',array('dcAntispamURL','hamFeed')); -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/antispam/_public.php b/v2/dotclear/plugins/antispam/_public.php deleted file mode 100644 index c3c3d97..0000000 --- a/v2/dotclear/plugins/antispam/_public.php +++ /dev/null @@ -1,17 +0,0 @@ -addBehavior('publicBeforeCommentCreate',array('dcAntispam','isSpam')); -$core->addBehavior('publicBeforeTrackbackCreate',array('dcAntispam','isSpam')); -$core->addBehavior('publicBeforeDocument',array('dcAntispam','purgeOldSpam')); -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/antispam/antispam.js b/v2/dotclear/plugins/antispam/antispam.js deleted file mode 100644 index 8f243e9..0000000 --- a/v2/dotclear/plugins/antispam/antispam.js +++ /dev/null @@ -1,3 +0,0 @@ - -var dragsort=ToolMan.dragsort();$(function(){$("#filters-list").each(function(){dragsort.makeTableSortable(this,dotclear.sortable.setHandle,dotclear.sortable.saveOrder);});});dotclear.sortable={setHandle:function(item){var handle=$(item).find('td.handle').get(0);while(handle.firstChild){handle.removeChild(handle.firstChild);} -item.toolManDragGroup.setHandle(handle);$(handle).addClass('handler');},saveOrder:function(item){var group=item.toolManDragGroup;var order=$('#filters_order').get(0);group.register('dragend',function(){order.value='';items=item.parentNode.getElementsByTagName('tr');for(var i=0;i{dK;=FInHLH~Yy`f+UH-R#Ee1*%X0sR+(bD=AMbN@eg(OfJgLO-;#6RB+2IN-fVX$}U#$ zjo3X=O9iMl-_yl0ghN*K%tgKy0}hwKF0Z9q=dP7R7<-R53@b1ojd%BVXn{$lNC=ChHjIezxBZ)FW<@0E}|`sxY81i7u7 tIM>Dr9hR8+?B2cqCzV<&|Gt(!%&$Fzt=)8b_H>}t44$rjF6*2UngITyu7v;q diff --git a/v2/dotclear/plugins/antispam/filters/class.dc.filter.ip.php b/v2/dotclear/plugins/antispam/filters/class.dc.filter.ip.php deleted file mode 100644 index d3869e0..0000000 --- a/v2/dotclear/plugins/antispam/filters/class.dc.filter.ip.php +++ /dev/null @@ -1,312 +0,0 @@ -con =& $core->con; - $this->table = $core->prefix.'spamrule'; - } - - protected function setInfo() - { - $this->description = __('IP Blacklist / Whitelist Filter'); - } - - public function getStatusMessage($status,$comment_id) - { - return sprintf(__('Filtered by %1$s with rule %2$s.'),$this->guiLink(),$status); - } - - public function isSpam($type,$author,$email,$site,$ip,$content,$post_id,&$status) - { - if (!$ip) { - return; - } - - # White list check - if ($this->checkIP($ip,'white') !== false) { - return false; - } - - # Black list check - if (($s = $this->checkIP($ip,'black')) !== false) { - $status = $s; - return true; - } - } - - public function gui($url) - { - global $default_tab; - $core =& $this->core; - - # Set current type and tab - $ip_type = 'black'; - if (!empty($_REQUEST['ip_type']) && $_REQUEST['ip_type'] == 'white') { - $ip_type = 'white'; - } - $default_tab = 'tab_'.$ip_type; - - # Add IP to list - if (!empty($_POST['addip'])) - { - try - { - $global = !empty($_POST['globalip']) && $core->auth->isSuperAdmin(); - - $this->addIP($ip_type,$_POST['addip'],$global); - http::redirect($url.'&added=1&ip_type='.$ip_type); - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } - } - - # Remove IP from list - if (!empty($_POST['delip']) && is_array($_POST['delip'])) - { - try { - $this->removeRule($_POST['delip']); - http::redirect($url.'&removed=1&ip_type='.$ip_type); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } - } - - /* DISPLAY - ---------------------------------------------- */ - $res = ''; - - if (!empty($_GET['added'])) { - $res .= '

      '.__('IP address has been successfully added.').'

      '; - } - if (!empty($_GET['removed'])) { - $res .= '

      '.__('IP addresses have been successfully removed.').'

      '; - } - - $res .= - $this->displayForms($url,'black',__('Blacklist')). - $this->displayForms($url,'white',__('Whitelist')); - - return $res; - } - - private function displayForms($url,$type,$title) - { - $core =& $this->core; - - $res = - '
      '. - - '
      '. - form::hidden(array('ip_type'),$type). - ''; - if ($core->auth->isSuperAdmin()) { - $res .= ' '; - } - - $res .= - $core->formNonce(). - '

      '. - '

      '. - '
      '; - - $rs = $this->getRules($type); - - if ($rs->isEmpty()) - { - $res .= '

      '.__('No IP address in list.').'

      '; - } - else - { - $res .= - '
      '. - '

      ' . __('IP list') . '

      '. - '
      '; - - while ($rs->fetch()) - { - $bits = explode(':',$rs->rule_content); - $pattern = $bits[0]; - $ip = $bits[1]; - $bitmask = $bits[2]; - - $disabled_ip = false; - $p_style = $this->style_p; - if (!$rs->blog_id) { - $disabled_ip = !$core->auth->isSuperAdmin(); - $p_style .= $this->style_global; - } - - $res .= - '

      '; - } - $res .= - '
      '. - '

      '. - $core->formNonce(). - form::hidden(array('ip_type'),$type). - '

      '. - '
      '; - } - - $res .= '
      '; - - return $res; - } - - private function ipmask($pattern,&$ip,&$mask) - { - $bits = explode('/',$pattern); - - # Set IP - $bits[0] .= str_repeat(".0", 3 - substr_count($bits[0], ".")); - $ip = ip2long($bits[0]); - - if (!$ip || $ip == -1) { - throw new Exception('Invalid IP address'); - } - - # Set mask - if (!isset($bits[1])) { - $mask = -1; - } elseif (strpos($bits[1],'.')) { - $mask = ip2long($bits[1]); - if (!$mask) { - $mask = -1; - } - } else { - $mask = ~((1 << (32 - $bits[1])) - 1); - } - } - - private function addIP($type,$pattern,$global) - { - $this->ipmask($pattern,$ip,$mask); - $pattern = long2ip($ip).($mask != -1 ? '/'.long2ip($mask) : ''); - $content = $pattern.':'.$ip.':'.$mask; - - $old = $this->getRuleCIDR($type,$global,$ip,$mask); - $cur = $this->con->openCursor($this->table); - - if ($old->isEmpty()) - { - $id = $this->con->select('SELECT MAX(rule_id) FROM '.$this->table)->f(0) + 1; - - $cur->rule_id = $id; - $cur->rule_type = (string) $type; - $cur->rule_content = (string) $content; - - if ($global && $this->core->auth->isSuperAdmin()) { - $cur->blog_id = null; - } else { - $cur->blog_id = $this->core->blog->id; - } - - $cur->insert(); - } - else - { - $cur->rule_type = (string) $type; - $cur->rule_content = (string) $content; - $cur->update('WHERE rule_id = '.(integer) $old->rule_id); - } - } - - private function getRules($type='all') - { - $strReq = - 'SELECT rule_id, rule_type, blog_id, rule_content '. - 'FROM '.$this->table.' '. - "WHERE rule_type = '".$this->con->escape($type)."' ". - "AND (blog_id = '".$this->core->blog->id."' OR blog_id IS NULL) ". - 'ORDER BY blog_id ASC, rule_content ASC '; - - return $this->con->select($strReq); - } - - private function getRuleCIDR($type,$global,$ip,$mask) - { - $strReq = - 'SELECT * FROM '.$this->table.' '. - "WHERE rule_type = '".$this->con->escape($type)."' ". - "AND rule_content LIKE '%:".(integer) $ip.":".(integer) $mask."' ". - 'AND blog_id '.($global ? 'IS NULL ' : "= '".$this->core->blog->id."' "); - - return $this->con->select($strReq); - } - - private function checkIP($cip,$type) - { - $core =& $this->core; - - $strReq = - 'SELECT DISTINCT(rule_content) '. - 'FROM '.$this->table.' '. - "WHERE rule_type = '".$this->con->escape($type)."' ". - "AND (blog_id = '".$this->core->blog->id."' OR blog_id IS NULL) ". - 'ORDER BY rule_content ASC '; - - $rs = $this->con->select($strReq); - while ($rs->fetch()) - { - list($pattern,$ip,$mask) = explode(':',$rs->rule_content); - if ((ip2long($cip) & (integer) $mask) == ((integer) $ip & (integer) $mask)) { - return $pattern; - } - } - return false; - } - - private function removeRule($ids) - { - $strReq = 'DELETE FROM '.$this->table.' '; - - if (is_array($ids)) { - foreach ($ids as $i => $v) { - $ids[$i] = (integer) $v; - } - $strReq .= 'WHERE rule_id IN ('.implode(',',$ids).') '; - } else { - $ids = (integer) $ids; - $strReq .= 'WHERE rule_id = '.$ids.' '; - } - - if (!$this->core->auth->isSuperAdmin()) { - $strReq .= "AND blog_id = '".$this->core->blog->id."' "; - } - - $this->con->execute($strReq); - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/antispam/filters/class.dc.filter.iplookup.php b/v2/dotclear/plugins/antispam/filters/class.dc.filter.iplookup.php deleted file mode 100644 index 540ae7b..0000000 --- a/v2/dotclear/plugins/antispam/filters/class.dc.filter.iplookup.php +++ /dev/null @@ -1,121 +0,0 @@ -auth->isSuperAdmin()) { - $this->has_gui = false; - } - } - - protected function setInfo() - { - $this->description = __('Checks sender IP address against DNSBL servers'); - } - - public function getStatusMessage($status,$comment_id) - { - return sprintf(__('Filtered by %1$s with server %2$s.'),$this->guiLink(),$status); - } - - public function isSpam($type,$author,$email,$site,$ip,$content,$post_id,&$status) - { - if (!$ip || long2ip(ip2long($ip)) != $ip) { - return; - } - - $match = array(); - - $bls = $this->getServers(); - $bls = preg_split('/\s*,\s*/',$bls); - - foreach ($bls as $bl) - { - if ($this->dnsblLookup($ip,$bl)) { - $match[] = $bl; - } - } - - if (!empty($match)) { - $status = substr(implode(', ',$match),0,128); - return true; - } - } - - public function gui($url) - { - $bls = $this->getServers(); - - if (isset($_POST['bls'])) - { - try { - $this->core->blog->settings->addNamespace('antispam'); - $this->core->blog->settings->antispam->put('antispam_dnsbls',$_POST['bls'],'string','Antispam DNSBL servers',true,false); - http::redirect($url.'&upd=1'); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } - } - - /* DISPLAY - ---------------------------------------------- */ - $res = ''; - - $res .= - '
      '. - '
      ' . __('IP Lookup servers') . ''. - '

      '. - '

      '. - $this->core->formNonce().'

      '. - '
      '. - '
      '; - - return $res; - } - - private function getServers() - { - $bls = $this->core->blog->settings->antispam->antispam_dnsbls; - if ($bls === null) { - $this->core->blog->settings->addNamespace('antispam'); - $this->core->blog->settings->antispam->put('antispam_dnsbls',$this->default_bls,'string','Antispam DNSBL servers',true,false); - return $this->default_bls; - } - - return $bls; - } - - private function dnsblLookup($ip,$bl) - { - $revIp = implode('.',array_reverse(explode('.',$ip))); - - $host = $revIp.'.'.$bl.'.'; - if (gethostbyname($host) != $host) { - return true; - } - - return false; - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/antispam/filters/class.dc.filter.linkslookup.php b/v2/dotclear/plugins/antispam/filters/class.dc.filter.linkslookup.php deleted file mode 100644 index 7bd87a0..0000000 --- a/v2/dotclear/plugins/antispam/filters/class.dc.filter.linkslookup.php +++ /dev/null @@ -1,74 +0,0 @@ -description = __('Checks links in comments against surbl.org'); - } - - public function getStatusMessage($status,$comment_id) - { - return sprintf(__('Filtered by %1$s with server %2$s.'),$this->guiLink(),$status); - } - - public function isSpam($type,$author,$email,$site,$ip,$content,$post_id,&$status) - { - if (!$ip || long2ip(ip2long($ip)) != $ip) { - return; - } - - $urls = $this->getLinks($content); - array_unshift($urls,$site); - - foreach ($urls as $u) - { - $b = parse_url($u); - if (!isset($b['host']) || !$b['host']) { - continue; - } - - $domain = preg_replace('/^(.*\.)([^.]+\.[^.]+)$/','$2',$b['host']); - $host = $domain.'.'.$this->server; - - if (gethostbyname($host) != $host) { - $status = substr($domain,0,128); - return true; - } - } - } - - private function getLinks($text) - { - $res = array(); - - # href attribute on "a" tags - if (preg_match_all('/]+)>/ms', $text, $match, PREG_SET_ORDER)) - { - for ($i = 0; $i \ No newline at end of file diff --git a/v2/dotclear/plugins/antispam/filters/class.dc.filter.words.php b/v2/dotclear/plugins/antispam/filters/class.dc.filter.words.php deleted file mode 100644 index 5444bce..0000000 --- a/v2/dotclear/plugins/antispam/filters/class.dc.filter.words.php +++ /dev/null @@ -1,356 +0,0 @@ -con =& $core->con; - $this->table = $core->prefix.'spamrule'; - } - - protected function setInfo() - { - $this->description = __('Words Blacklist'); - } - - public function getStatusMessage($status,$comment_id) - { - return sprintf(__('Filtered by %1$s with word %2$s.'),$this->guiLink(),''.$status.''); - } - - public function isSpam($type,$author,$email,$site,$ip,$content,$post_id,&$status) - { - $str = $author.' '.$email.' '.$site.' '.$content; - - $rs = $this->getRules(); - - while ($rs->fetch()) - { - $word = $rs->rule_content; - - if (substr($word,0,1) == '/' && substr($word,-1,1) == '/') { - $reg = substr(substr($word,1),0,-1); - } else { - $reg = preg_quote($word, '/'); - $reg = '(^|\s+|>|<)'.$reg.'(>|<|\s+|\.|$)'; - } - - if (preg_match('/'.$reg.'/msiu',$str)) { - $status = $word; - return true; - } - } - } - - public function gui($url) - { - $core =& $this->core; - - # Create list - if (!empty($_POST['createlist'])) - { - try { - $this->defaultWordsList(); - http::redirect($url.'&list=1'); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } - } - - # Adding a word - if (!empty($_POST['swa'])) - { - $globalsw = !empty($_POST['globalsw']) && $core->auth->isSuperAdmin(); - - try { - $this->addRule($_POST['swa'],$globalsw); - http::redirect($url.'&added=1'); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } - } - - # Removing spamwords - if (!empty($_POST['swd']) && is_array($_POST['swd'])) - { - try { - $this->removeRule($_POST['swd']); - http::redirect($url.'&removed=1'); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } - } - - /* DISPLAY - ---------------------------------------------- */ - $res = ''; - - if (!empty($_GET['list'])) { - $res .= '

      '.__('Words have been successfully added.').'

      '; - } - if (!empty($_GET['added'])) { - $res .= '

      '.__('Word has been successfully added.').'

      '; - } - if (!empty($_GET['removed'])) { - $res .= '

      '.__('Words have been successfully removed.').'

      '; - } - - $res .= - '
      '. - '

      '; - - if ($core->auth->isSuperAdmin()) { - $res .= ' '; - } - - $res .= - $core->formNonce(). - '

      '. - '

      '. - '
      '; - - $rs = $this->getRules(); - if ($rs->isEmpty()) - { - $res .= '

      '.__('No word in list.').'

      '; - } - else - { - $res .= - '
      '. - '

      ' . __('List of bad words') . '

      '. - '
      '; - - while ($rs->fetch()) - { - $disabled_word = false; - $p_style = $this->style_p; - if (!$rs->blog_id) { - $disabled_word = !$core->auth->isSuperAdmin(); - $p_style .= $this->style_global; - } - - $res .= - '

      '; - } - - $res .= - '
      '. - '

      '.form::hidden(array('spamwords'),1). - $core->formNonce(). - '

      '. - '
      '; - } - - if ($core->auth->isSuperAdmin()) - { - $res .= - '
      '. - '

      '. - form::hidden(array('spamwords'),1). - form::hidden(array('createlist'),1). - $core->formNonce().'

      '. - '
      '; - } - - return $res; - } - - private function getRules() - { - $strReq = 'SELECT rule_id, blog_id, rule_content '. - 'FROM '.$this->table.' '. - "WHERE rule_type = 'word' ". - "AND ( blog_id = '".$this->con->escape($this->core->blog->id)."' ". - "OR blog_id IS NULL ) ". - 'ORDER BY blog_id ASC, rule_content ASC '; - - return $this->con->select($strReq); - } - - private function addRule($content,$general=false) - { - $strReq = 'SELECT rule_id FROM '.$this->table.' '. - "WHERE rule_type = 'word' ". - "AND rule_content = '".$this->con->escape($content)."' "; - $rs = $this->con->select($strReq); - - if (!$rs->isEmpty()) { - throw new Exception(__('This word exists')); - } - - $rs = $this->con->select('SELECT MAX(rule_id) FROM '.$this->table); - $id = (integer) $rs->f(0) + 1; - - $cur = $this->con->openCursor($this->table); - $cur->rule_id = $id; - $cur->rule_type = 'word'; - $cur->rule_content = (string) $content; - - if ($general && $this->core->auth->isSuperAdmin()) { - $cur->blog_id = null; - } else { - $cur->blog_id = $this->core->blog->id; - } - - $cur->insert(); - } - - private function removeRule($ids) - { - $strReq = 'DELETE FROM '.$this->table.' '; - - if (is_array($ids)) { - foreach ($ids as &$v) { - $v = (integer) $v; - } - $strReq .= 'WHERE rule_id IN ('.implode(',',$ids).') '; - } else { - $ids = (integer) $ids; - $strReq .= 'WHERE rule_id = '.$ids.' '; - } - - if (!$this->core->auth->isSuperAdmin()) { - $strReq .= "AND blog_id = '".$this->con->escape($this->core->blog->id)."' "; - } - - $this->con->execute($strReq); - } - - public function defaultWordsList() - { - $words = array( - '/-credit(\s+|$)/', - '/-digest(\s+|$)/', - '/-loan(\s+|$)/', - '/-online(\s+|$)/', - '4u', - 'adipex', - 'advicer', - 'ambien', - 'baccarat', - 'baccarrat', - 'blackjack', - 'bllogspot', - 'bolobomb', - 'booker', - 'byob', - 'car-rental-e-site', - 'car-rentals-e-site', - 'carisoprodol', - 'cash', - 'casino', - 'casinos', - 'chatroom', - 'cialis', - 'craps', - 'credit-card', - 'credit-report-4u', - 'cwas', - 'cyclen', - 'cyclobenzaprine', - 'dating-e-site', - 'day-trading', - 'debt', - 'digest-', - 'discount', - 'discreetordering', - 'duty-free', - 'dutyfree', - 'estate', - 'favourits', - 'fioricet', - 'flowers-leading-site', - 'freenet', - 'freenet-shopping', - 'gambling', - 'gamias', - 'health-insurancedeals-4u', - 'holdem', - 'holdempoker', - 'holdemsoftware', - 'holdemtexasturbowilson', - 'hotel-dealse-site', - 'hotele-site', - 'hotelse-site', - 'incest', - 'insurance-quotesdeals-4u', - 'insurancedeals-4u', - 'jrcreations', - 'levitra', - 'macinstruct', - 'mortgage', - 'online-gambling', - 'onlinegambling-4u', - 'ottawavalleyag', - 'ownsthis', - 'palm-texas-holdem-game', - 'paxil', - 'pharmacy', - 'phentermine', - 'pills', - 'poker', - 'poker-chip', - 'poze', - 'prescription', - 'rarehomes', - 'refund', - 'rental-car-e-site', - 'roulette', - 'shemale', - 'slot', - 'slot-machine', - 'soma', - 'taboo', - 'tamiflu', - 'texas-holdem', - 'thorcarlson', - 'top-e-site', - 'top-site', - 'tramadol', - 'trim-spa', - 'ultram', - 'v1h', - 'vacuum', - 'valeofglamorganconservatives', - 'viagra', - 'vicodin', - 'vioxx', - 'xanax', - 'zolus' - ); - - foreach ($words as $w) { - try { - $this->addRule($w,true); - } catch (Exception $e) {} - } - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/antispam/icon-big.png b/v2/dotclear/plugins/antispam/icon-big.png deleted file mode 100644 index 5a9f0f4676b09093da744b024428042d699499e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5758 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 BdQt!Y diff --git a/v2/dotclear/plugins/antispam/icon.png b/v2/dotclear/plugins/antispam/icon.png deleted file mode 100644 index bf069ccf5cdca9a566b7659d2982382835c465bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1734 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m{T%CB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPA){ffi_eM3D1{oGuTzrd=COM+4n&cLd=IHa;5RX-@T zIKQ+g85kdF$}r8qu)}W=NFmTQR{lkqz(`5Vami0E%}vcK@pQ3O0?O#6WTsfTSUNfy zTDloom^&G`8W;kZ#x9PICa%V&Zfx;JP@U)zv)QP(42V?rROX^?=? zOwTte+m_2!uX}zd-Mi<-a>=>Ivp(BB-))r4)7RgB-}ljzT;|QXOKUtmw>rO`cI_A2 z0f+Z9BCnYyziHxrce^RxY<91GUteFH=oj&eO25p`e-2-MS@V#Ai-_)qE@6vM?)bWI zd|Fq36-+JGF_tb2JZN(1gZjhyDz&-H876mZIGlbo_Mc2?`dQ;QK{RSzgL<6X`m1dz zdI5z8vtrL&607_5()45t>hT|Ry z<@4O3OiO}(-un7k!C`CI;dk%!&i!FHYt>#*e&CLr&b`Ky&q^$sd~Ui0Go5&(;%PAV zY=Ck@?(H3OVw4Icd}{m*vo>@!oO^B%q%*2?*Fs$U3Xh=S24bP zCFydsadWBkitqYf4skCo&b{7V@%|g%0pSA+L;WW7s=v7Vcb-?)g}bi;lEhz>?*8$i zId{+3wE7UHEn(^hrzFZ1TTIF2^G*CB@RG-ToArgTxwlSE_${S>sr-1hqgUysYf-aB zr2alJx{|50`of`RzjcW_*e~8YzBYROfkGLb>E0Fd+RJwHUM~$^dUdkUffQYgD+tJ}~8u+aNbLe(k&eMTZKfmI*7GetSR6w`EtblGTx$H*elQi8=8#KI`glscd}z`@XJNx4h2jS==Azu>9vTV3_0F VP>>nC;5Mjc@pScbS?83{1OQFcoOS>J diff --git a/v2/dotclear/plugins/antispam/inc/class.dc.spamfilter.php b/v2/dotclear/plugins/antispam/inc/class.dc.spamfilter.php deleted file mode 100644 index 59f0fe2..0000000 --- a/v2/dotclear/plugins/antispam/inc/class.dc.spamfilter.php +++ /dev/null @@ -1,161 +0,0 @@ -dcCore Dotclear core object - */ - public function __construct($core) - { - $this->core =& $core; - $this->setInfo(); - - if (!$this->name) { - $this->name = get_class($this); - } - - $this->gui_url = 'plugin.php?p=antispam&f='.get_class($this); - } - - /** - This method is called by the constructor and allows you to change some - object properties without overloading object constructor. - */ - protected function setInfo() - { - $this->description = __('No description'); - } - - /** - This method should return if a comment is a spam or not. If it returns true - or false, execution of next filters will be stoped. If should return nothing - to let next filters apply. - - Your filter should also fill $status variable with its own information if - comment is a spam. - - @param type string Comment type (comment or trackback) - @param author string Comment author - @param email string Comment author email - @param site string Comment author website - @param ip string Comment author IP address - @param content string Comment content - @param post_id integer Comment post_id - @param[out] status integer Comment status - @return boolean - */ - public function isSpam($type,$author,$email,$site,$ip,$content,$post_id,&$status) - { - } - - /** - This method is called when a non-spam (ham) comment becomes spam or when a - spam becomes a ham. - - @param type string Comment type (comment or trackback) - @param filter string Filter name - @param author string Comment author - @param email string Comment author email - @param site string Comment author website - @param ip string Comment author IP address - @param content string Comment content - @param post_url string Post URL - @param rs record Comment record - @return boolean - */ - public function trainFilter($status,$filter,$type,$author,$email,$site,$ip,$content,$rs) - { - } - - /** - This method returns filter status message. You can overload this method to - return a custom message. Message is shown in comment details and in - comments list. - - @param status string Filter status. - @param comment_id record Comment record - @return string - */ - public function getStatusMessage($status,$comment_id) - { - return sprintf(__('Filtered by %1$s (%2$s)'),$this->guiLink(),$status); - } - - /** - This method is called when you enter filter configuration. Your class should - have $has_gui property set to "true" to enable GUI. - - In this method you should put everything related to filter configuration. - $url variable is the URL of GUI unescaped. - - @param url string GUI URL. - */ - public function gui($url) - { - } - - public function hasGUI() - { - if (!$this->core->auth->check('admin',$this->core->blog->id)) { - return false; - } - - if (!$this->has_gui) { - return false; - } - - return true; - } - - public function guiURL() - { - if (!$this->hasGui()) { - return false; - } - - return $this->gui_url; - } - - /** - Returns a link to filter GUI if exists or only filter name if has_gui - property is false. - - @return string - */ - public function guiLink() - { - if (($url = $this->guiURL()) !== false) { - $url = html::escapeHTML($url); - $link = '
      %1$s'; - } else { - $link = '%1$s'; - } - - return sprintf($link,$this->name,$url); - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/antispam/inc/class.dc.spamfilters.php b/v2/dotclear/plugins/antispam/inc/class.dc.spamfilters.php deleted file mode 100644 index 2983aaa..0000000 --- a/v2/dotclear/plugins/antispam/inc/class.dc.spamfilters.php +++ /dev/null @@ -1,164 +0,0 @@ -core =& $core; - } - - public function init($filters) - { - foreach ($filters as $f) - { - if (!class_exists($f)) { - continue; - } - - $r = new ReflectionClass($f); - $p = $r->getParentClass(); - - if (!$p || $p->name != 'dcSpamFilter') { - continue; - } - - $this->filters[$f] = new $f($this->core); - } - - $this->setFilterOpts(); - if (!empty($this->filters_opt)) { - uasort($this->filters,array($this,'orderCallBack')); - } - } - - public function getFilters() - { - return $this->filters; - } - - public function isSpam($cur) - { - foreach ($this->filters as $fid => $f) - { - if (!$f->active) { - continue; - } - - $type = $cur->comment_trackback ? 'trackback' : 'comment'; - $author = $cur->comment_author; - $email = $cur->comment_email; - $site = $cur->comment_site; - $ip = $cur->comment_ip; - $content = $cur->comment_content; - $post_id = $cur->post_id; - - $is_spam = $f->isSpam($type,$author,$email,$site,$ip,$content,$post_id,$status); - - if ($is_spam === true) { - if ($f->auto_delete) { - $cur->clean(); - } else { - $cur->comment_status = -2; - $cur->comment_spam_status = $status; - $cur->comment_spam_filter = $fid; - } - return true; - } elseif ($is_spam === false) { - return false; - } - } - - return false; - } - - public function trainFilters($rs,$status,$filter_name) - { - foreach ($this->filters as $fid => $f) - { - if (!$f->active) { - continue; - } - - $type = $rs->comment_trackback ? 'trackback' : 'comment'; - $author = $rs->comment_author; - $email = $rs->comment_email; - $site = $rs->comment_site; - $ip = $rs->comment_ip; - $content = $rs->comment_content; - - $f->trainFilter($status,$filter_name,$type,$author,$email,$site,$ip,$content,$rs); - } - } - - public function statusMessage($rs,$filter_name) - { - $f = isset($this->filters[$filter_name]) ? $this->filters[$filter_name] : null; - - if ($f === null) - { - return __('Unknown filter.'); - } - else - { - $status = $rs->exists('comment_spam_status') ? $rs->comment_spam_status : null; - - return $f->getStatusMessage($status,$rs->comment_id); - } - } - - public function saveFilterOpts($opts,$global=false) - { - $this->core->blog->settings->addNamespace('antispam'); - if ($global) { - $this->core->blog->settings->antispam->drop('antispam_filters'); - } - $this->core->blog->settings->antispam->put('antispam_filters',serialize($opts),'string','Antispam Filters',true,$global); - } - - private function setFilterOpts() - { - if ($this->core->blog->settings->antispam->antispam_filters !== null) { - $this->filters_opt = @unserialize($this->core->blog->settings->antispam->antispam_filters); - } - - # Create default options if needed - if (!is_array($this->filters_opt)) { - $this->saveFilterOpts(array(),true); - $this->filters_opt = array(); - } - - foreach ($this->filters_opt as $k => $o) - { - if (isset($this->filters[$k]) && is_array($o)) { - $this->filters[$k]->active = isset($o[0])?$o[0]:false; - $this->filters[$k]->order = isset($o[1])?$o[1]:0; - $this->filters[$k]->auto_delete = isset($o[2])?$o[2]:false; - } - } - } - - private function orderCallBack($a,$b) - { - if ($a->order == $b->order) { - return 0; - } - - return $a->order > $b->order ? 1 : -1; - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/antispam/inc/lib.dc.antispam.php b/v2/dotclear/plugins/antispam/inc/lib.dc.antispam.php deleted file mode 100644 index fe788a1..0000000 --- a/v2/dotclear/plugins/antispam/inc/lib.dc.antispam.php +++ /dev/null @@ -1,211 +0,0 @@ -spamfilters)) { - return; - } - - self::$filters = new dcSpamFilters($core); - self::$filters->init($core->spamfilters); - } - - public static function isSpam($cur) - { - self::initFilters(); - self::$filters->isSpam($cur); - } - - public static function trainFilters($blog,$cur,$rs) - { - $status = null; - # From ham to spam - if ($rs->comment_status != -2 && $cur->comment_status == -2) { - $status = 'spam'; - } - - # From spam to ham - if ($rs->comment_status == -2 && $cur->comment_status == 1) { - $status = 'ham'; - } - - # the status of this comment has changed - if ($status) - { - $filter_name = $rs->exists('comment_spam_filter') ? $rs->comment_spam_filter : null; - - self::initFilters(); - self::$filters->trainFilters($rs,$status,$filter_name); - } - } - - public static function statusMessage($rs) - { - if ($rs->exists('comment_status') && $rs->comment_status == -2) - { - $filter_name = $rs->exists('comment_spam_filter') ? $rs->comment_spam_filter : null; - - self::initFilters(); - - return - '

      '.__('This comment is a spam:').' '. - self::$filters->statusMessage($rs,$filter_name).'

      '; - } - } - - public static function dashboardIcon($core, $icons) - { - if (($count = self::countSpam($core)) > 0) { - $str = ($count > 1) ? __('(including %d spam comments)') : __('(including %d spam comment)'); - $icons['comments'][0] .= '
      '.sprintf($str,$count).''; - } - } - - public static function dashboardIconTitle($core) - { - if (($count = self::countSpam($core)) > 0) { - $str = ($count > 1) ? __('(including %d spam comments)') : __('(including %d spam comment)'); - return '
      '.sprintf($str,$count).''; - } else { - return ''; - } - } - - public static function countSpam($core) - { - return $core->blog->getComments(array('comment_status'=>-2),true)->f(0); - } - - public static function countPublishedComments($core) - { - return $core->blog->getComments(array('comment_status'=>1),true)->f(0); - } - - public static function delAllSpam($core, $beforeDate = null) - { - $strReq = - 'SELECT comment_id '. - 'FROM '.$core->prefix.'comment C '. - 'JOIN '.$core->prefix.'post P ON P.post_id = C.post_id '. - "WHERE blog_id = '".$core->con->escape($core->blog->id)."' ". - 'AND comment_status = -2 '; - if ($beforeDate) { - $strReq .= 'AND comment_dt < \''.$beforeDate.'\' '; - } - - $rs = $core->con->select($strReq); - $r = array(); - while ($rs->fetch()) { - $r[] = (integer) $rs->comment_id; - } - - if (empty($r)) { - return; - } - - $strReq = - 'DELETE FROM '.$core->prefix.'comment '. - 'WHERE comment_id '.$core->con->in($r).' '; - - $core->con->execute($strReq); - } - - public static function getUserCode($core) - { - $code = - pack('a32',$core->auth->userID()). - pack('H*',crypt::hmac(DC_MASTER_KEY,$core->auth->getInfo('user_pwd'))); - return bin2hex($code); - } - - public static function checkUserCode($core,$code) - { - $code = pack('H*',$code); - - $user_id = trim(@pack('a32',substr($code,0,32))); - $pwd = @unpack('H40hex',substr($code,32,40)); - - if ($user_id === false || $pwd === false) { - return false; - } - - $pwd = $pwd['hex']; - - $strReq = 'SELECT user_id, user_pwd '. - 'FROM '.$core->prefix.'user '. - "WHERE user_id = '".$core->con->escape($user_id)."' "; - - $rs = $core->con->select($strReq); - - if ($rs->isEmpty()) { - return false; - } - - if (crypt::hmac(DC_MASTER_KEY,$rs->user_pwd) != $pwd) { - return false; - } - - $permissions = $core->getBlogPermissions($core->blog->id); - - if ( empty($permissions[$rs->user_id]) ) { - return false; - } - - return $rs->user_id; - } - - public static function purgeOldSpam($core) - { - $defaultDateLastPurge = time(); - $defaultModerationTTL = '7'; - $init = false; - - // settings - $core->blog->settings->addNamespace('antispam'); - - $dateLastPurge = $core->blog->settings->antispam->antispam_date_last_purge; - if ($dateLastPurge === null) { - $init = true; - $core->blog->settings->antispam->put('antispam_date_last_purge',$defaultDateLastPurge,'integer','Antispam Date Last Purge (unix timestamp)',true,false); - $dateLastPurge = $defaultDateLastPurge; - } - $moderationTTL = $core->blog->settings->antispam->antispam_moderation_ttl; - if ($moderationTTL === null) { - $core->blog->settings->antispam->put('antispam_moderation_ttl',$defaultModerationTTL,'integer','Antispam Moderation TTL (days)',true,false); - $moderationTTL = $defaultModerationTTL; - } - - if ($moderationTTL < 0) { - // disabled - return; - } - - // we call the purge every day - if ((time()-$dateLastPurge) > (86400)) { - // update dateLastPurge - if (!$init) { - $core->blog->settings->antispam->put('antispam_date_last_purge',time(),null,null,true,false); - } - $date = date('Y-m-d H:i:s', time() - $moderationTTL*86400); - dcAntispam::delAllSpam($core, $date); - } - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/antispam/inc/lib.dc.antispam.url.php b/v2/dotclear/plugins/antispam/inc/lib.dc.antispam.url.php deleted file mode 100644 index 4161fb2..0000000 --- a/v2/dotclear/plugins/antispam/inc/lib.dc.antispam.url.php +++ /dev/null @@ -1,99 +0,0 @@ -auth->checkUser($user_id,null,null); - - header('Content-Type: application/xml; charset=UTF-8'); - - $title = $core->blog->name.' - '.__('Spam moderation'). ' - '; - $params = array(); - $end_url = ''; - if ($type == 'spam') { - $title .= __('Spam'); - $params['comment_status'] = -2; - $end_url = '?status=-2'; - } else { - $title .= __('Ham'); - $params['sql'] = ' AND comment_status IN (1,-1) '; - } - - echo - ''."\n". - ''."\n". - ''."\n". - ''.html::escapeHTML($title).''."\n". - ''.(DC_ADMIN_URL ? DC_ADMIN_URL.'comments.php'.$end_url : 'about:blank').''."\n". - ''."\n"; - - $rs = $core->blog->getComments($params); - $maxitems = 20; - $nbitems = 0; - - while ($rs->fetch() && ($nbitems < $maxitems)) - { - $nbitems++; - $uri = DC_ADMIN_URL ? DC_ADMIN_URL.'comment.php?id='.$rs->comment_id : 'about:blank'; - $author = $rs->comment_author; - $title = $rs->post_title.' - '.$author; - if ($type == 'spam') { - $title .= '('.$rs->comment_spam_filter.')'; - } - $id = $rs->getFeedID(); - - $content = '

      IP: '.$rs->comment_ip; - - if (trim($rs->comment_site)) { - $content .= '
      URL:
      '.$rs->comment_site.''; - } - $content .= "


      \n"; - $content .= $rs->comment_content; - - echo - ''."\n". - ' '.html::escapeHTML($title).''."\n". - ' '.$uri.''."\n". - ' '.$id.''."\n". - ' '.$rs->getRFC822Date().''."\n". - ' '.html::escapeHTML($author).''."\n". - ' '.html::escapeHTML($content).''."\n". - ''; - } - - echo "\n"; - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/antispam/index.php b/v2/dotclear/plugins/antispam/index.php deleted file mode 100644 index a13eb1b..0000000 --- a/v2/dotclear/plugins/antispam/index.php +++ /dev/null @@ -1,233 +0,0 @@ -getFilters(); - -$page_name = __('Antispam'); -$filter_gui = false; -$default_tab = null; - -try -{ - # Show filter configuration GUI - if (!empty($_GET['f'])) - { - if (!isset($filters[$_GET['f']])) { - throw new Exception(__('Filter does not exist.')); - } - - if (!$filters[$_GET['f']]->hasGUI()) { - throw new Exception(__('Filter has no user interface.')); - } - - $filter = $filters[$_GET['f']]; - $filter_gui = $filter->gui($filter->guiURL()); - } - - # Remove all spam - if (!empty($_POST['delete_all'])) - { - $ts = dt::str('%Y-%m-%d %H:%M:%S',$_POST['ts'],$core->blog->settings->system->blog_timezone); - - dcAntispam::delAllSpam($core,$ts); - http::redirect($p_url.'&del=1'); - } - - # Update filters - if (isset($_POST['filters_upd'])) - { - $filters_opt = array(); - $i = 0; - foreach ($filters as $fid => $f) { - $filters_opt[$fid] = array(false,$i); - $i++; - } - - # Enable active filters - if (isset($_POST['filters_active']) && is_array($_POST['filters_active'])) { - foreach ($_POST['filters_active'] as $v) { - $filters_opt[$v][0] = true; - } - } - - # Order filters - if (!empty($_POST['f_order']) && empty($_POST['filters_order'])) - { - $order = $_POST['f_order']; - asort($order); - $order = array_keys($order); - } - elseif (!empty($_POST['filters_order'])) - { - $order = explode(',',trim($_POST['filters_order'],',')); - } - - if (isset($order)) { - foreach ($order as $i => $f) { - $filters_opt[$f][1] = $i; - } - } - - # Set auto delete flag - if (isset($_POST['filters_auto_del']) && is_array($_POST['filters_auto_del'])) { - foreach ($_POST['filters_auto_del'] as $v) { - $filters_opt[$v][2] = true; - } - } - - dcAntispam::$filters->saveFilterOpts($filters_opt); - http::redirect($p_url.'&upd=1'); - } -} -catch (Exception $e) -{ - $core->error->add($e->getMessage()); -} -?> - - - <?php echo $page_name; ?> - - - - -'.html::escapeHTML($core->blog->name).' › '.$page_name.''. - ' › '.sprintf(__('%s configuration'),$filter->name).''; - - echo $filter_gui; -} -else -{ - echo '

      '.html::escapeHTML($core->blog->name).' › '.$page_name.'

      '; - - # Information - $spam_count = dcAntispam::countSpam($core); - $published_count = dcAntispam::countPublishedComments($core); - $moderationTTL = $core->blog->settings->antispam->antispam_moderation_ttl; - - echo - '
      '. - '

      '.__('Information').'

      '; - - if (!empty($_GET['del'])) { - echo '

      '.__('Spam comments have been successfully deleted.').'

      '; - } - - echo - ''; - - if ($spam_count > 0) - { - echo - '

      '.$core->formNonce(). - form::hidden('ts',time()). - '

      '; - } - if ($moderationTTL != null && $moderationTTL >=0) { - echo '

      '.sprintf(__('All spam comments older than %s day(s) will be automatically deleted.'), $moderationTTL).' '. - __('You can modify this duration in '). - ' '.__('Blog preferences').'

      '; - } - echo '
      '; - - - # Filters - echo - '
      '; - - if (!empty($_GET['upd'])) { - echo '

      '.__('Filters configuration has been successfully saved.').'

      '; - } - - echo - ''. - ''. - ''. - ''. - ''. - ''. - ''. - ''. - ''. - ''; - - $i = 0; - foreach ($filters as $fid => $f) - { - $gui_link = ' '; - if ($f->hasGUI()) { - $gui_link = - ''. - ''.__('Filter configuration').''; - } - - echo - ''. - ''. - ''. - ''. - ''. - ''. - ''. - ''; - $i++; - } - echo - '
      '.__('Available spam filters').'
      '.__('Order').''.__('Active').''.__('Auto Del.').''.__('Filter name').''.__('Description').'
      '.form::field(array('f_order['.$fid.']'),2,5,(string) $i, '', '', false, 'title="'.__('position').'"').''.form::checkbox(array('filters_active[]'),$fid,$f->active, '', '', false, 'title="'.__('Active').'"').''.form::checkbox(array('filters_auto_del[]'),$fid,$f->auto_delete, '', '', false, 'title="'.__('Auto Del.').'"').''.$f->name.''.$f->description.''.$gui_link.'
      '. - '

      '.form::hidden('filters_order',''). - $core->formNonce(). - '

      '. - '
      '; - - - # Syndication - if (DC_ADMIN_URL) - { - $ham_feed = $core->blog->url.$core->url->getURLFor( - 'hamfeed', - $code = dcAntispam::getUserCode($core) - ); - $spam_feed = $core->blog->url.$core->url->getURLFor( - 'spamfeed', - $code = dcAntispam::getUserCode($core) - ); - - echo - '

      '.__('Syndication').'

      '. - ''; - } -} -?> - - - \ No newline at end of file diff --git a/v2/dotclear/plugins/antispam/style.css b/v2/dotclear/plugins/antispam/style.css deleted file mode 100644 index c93cf1a..0000000 --- a/v2/dotclear/plugins/antispam/style.css +++ /dev/null @@ -1,23 +0,0 @@ -ul.spaminfo { - display: block; - list-style: none; - margin: 1em 0; - padding: 0; -} -ul.spaminfo li { - margin: 0.5em 0; - padding-left: 16px; - /*background: url(index.php?pf=antispam/feed.png) no-repeat center left;*/ - background-color: transparent; - background-position: center left; - background-repeat: no-repeat; -} -ul.spaminfo .spamcount { - background-image: url(images/junk.png); -} -ul.spaminfo .hamcount { - background-image: url(images/check-on.png); -} -ul.spaminfo .feed { - background-image: url(index.php?pf=antispam/feed.png); -} \ No newline at end of file diff --git a/v2/dotclear/plugins/attachments/_admin.php b/v2/dotclear/plugins/attachments/_admin.php deleted file mode 100644 index 70ca40f..0000000 --- a/v2/dotclear/plugins/attachments/_admin.php +++ /dev/null @@ -1,75 +0,0 @@ -addBehavior ('adminPostFormSidebar',array('attachmentAdmin','adminPostFormSidebar')); -$core->addBehavior ('adminPostAfterForm',array('attachmentAdmin','adminPostAfterForm')); - -class attachmentAdmin -{ - public static function adminPostFormSidebar($post) - { - if ($post !== null) - { - $core =& $GLOBALS['core']; - $post_media = $core->media->getPostMedia($post->post_id); - echo - '

      '.__('Attachments').'

      '; - foreach ($post_media as $f) - { - $ftitle = $f->media_title; - if (strlen($ftitle) > 18) { - $ftitle = substr($ftitle,0,16).'...'; - } - echo - '
      '. - ''. - ''. - ''. - '
      '; - } - unset($f); - - if (empty($post_media)) { - echo '

      '.__('No attachment.').'

      '; - } else { - } - echo '

      '.__('Add files to this entry').'

      '; - } - } - - public static function adminPostAfterForm($post) { - if ($post !== null) - { - $core =& $GLOBALS['core']; - echo - '
      '. - '
      '.form::hidden(array('post_id'),$post->post_id). - form::hidden(array('media_id'),''). - form::hidden(array('remove'),1). - $core->formNonce().'
      '; - } - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/attachments/_define.php b/v2/dotclear/plugins/attachments/_define.php deleted file mode 100644 index 99b4d2f..0000000 --- a/v2/dotclear/plugins/attachments/_define.php +++ /dev/null @@ -1,24 +0,0 @@ -registerModule( - /* Name */ "attachments", - /* Description*/ "Manage post attachments", - /* Author */ "Dotclear Team", - /* Version */ '1.0', - array( - 'permissions' => 'usage,contentadmin,pages', - 'priority' => 999 - ) -); -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/attachments/_public.php b/v2/dotclear/plugins/attachments/_public.php deleted file mode 100644 index b08c450..0000000 --- a/v2/dotclear/plugins/attachments/_public.php +++ /dev/null @@ -1,248 +0,0 @@ -tpl->addBlock('Attachments',array('attachmentTpl','Attachments')); -$core->tpl->addBlock('AttachmentsHeader',array('attachmentTpl','AttachmentsHeader')); -$core->tpl->addBlock('AttachmentsFooter',array('attachmentTpl','AttachmentsFooter')); -$core->tpl->addValue('AttachmentMimeType',array('attachmentTpl','AttachmentMimeType')); -$core->tpl->addValue('AttachmentType',array('attachmentTpl','AttachmentType')); -$core->tpl->addValue('AttachmentFileName',array('attachmentTpl','AttachmentFileName')); -$core->tpl->addValue('AttachmentSize',array('attachmentTpl','AttachmentSize')); -$core->tpl->addValue('AttachmentTitle',array('attachmentTpl','AttachmentTitle')); -$core->tpl->addValue('AttachmentThumbnailURL',array('attachmentTpl','AttachmentThumbnailURL')); -$core->tpl->addValue('AttachmentURL',array('attachmentTpl','AttachmentURL')); -$core->tpl->addValue('MediaURL',array('attachmentTpl','MediaURL')); -$core->tpl->addBlock('AttachmentIf',array('attachmentTpl','AttachmentIf')); - -$core->tpl->addValue('EntryAttachmentCount',array('attachmentTpl','EntryAttachmentCount')); - -$core->addBehavior('tplIfConditions',array('attachmentBehavior','tplIfConditions')); - -class attachmentTpl { - - /*dtd - - */ - public static function Attachments($attr,$content) - { - $res = - "posts !== null && $core->media) {'."\n". - '$_ctx->attachments = new ArrayObject($core->media->getPostMedia($_ctx->posts->post_id));'."\n". - "?>\n". - - 'attachments as $attach_i => $attach_f) : '. - '$GLOBALS[\'attach_i\'] = $attach_i; $GLOBALS[\'attach_f\'] = $attach_f;'. - '$_ctx->file_url = $attach_f->file_url; ?>'. - $content. - 'attachments = null; unset($attach_i,$attach_f,$_ctx->file_url); ?>'. - - "\n"; - - return $res; - } - - /*dtd - - */ - public static function AttachmentsHeader($attr,$content) - { - return - "". - $content. - ""; - } - - /*dtd - - */ - public static function AttachmentsFooter($attr,$content) - { - return - "attachments)) : ?>". - $content. - ""; - } - - /*dtd - - - */ - public static function AttachmentIf($attr,$content) - { - $if = array(); - - $operator = isset($attr['operator']) ? $this->getOperator($attr['operator']) : '&&'; - - if (isset($attr['is_image'])) { - $sign = (boolean) $attr['is_image'] ? '' : '!'; - $if[] = $sign.'$attach_f->media_image'; - } - - if (isset($attr['has_thumb'])) { - $sign = (boolean) $attr['has_thumb'] ? '' : '!'; - $if[] = $sign.'isset($attach_f->media_thumb[\'sq\'])'; - } - - if (isset($attr['is_mp3'])) { - $sign = (boolean) $attr['is_mp3'] ? '==' : '!='; - $if[] = '$attach_f->type '.$sign.' "audio/mpeg3"'; - } - - if (isset($attr['is_flv'])) { - $sign = (boolean) $attr['is_flv'] ? '' : '!'; - $if[] = $sign. - '($attach_f->type == "video/x-flv" || '. - '$attach_f->type == "video/mp4" || '. - '$attach_f->type == "video/x-m4v")'; - } - - if (count($if) != 0) { - return ''.$content.''; - } else { - return $content; - } - } - - /*dtd - - */ - public static function AttachmentMimeType($attr) - { - $f = $GLOBALS['core']->tpl->getFilters($attr); - return 'type').'; ?>'; - } - - /*dtd - - */ - public static function AttachmentType($attr) - { - $f = $GLOBALS['core']->tpl->getFilters($attr); - return 'media_type').'; ?>'; - } - - /*dtd - - */ - public static function AttachmentFileName($attr) - { - $f = $GLOBALS['core']->tpl->getFilters($attr); - return 'basename').'; ?>'; - } - - /*dtd - - - */ - public static function AttachmentSize($attr) - { - $f = $GLOBALS['core']->tpl->getFilters($attr); - if (!empty($attr['full'])) { - return 'size').'; ?>'; - } - return 'size)').'; ?>'; - } - - /*dtd - - */ - public static function AttachmentTitle($attr) - { - $f = $GLOBALS['core']->tpl->getFilters($attr); - return 'media_title').'; ?>'; - } - - /*dtd - - */ - public static function AttachmentThumbnailURL($attr) - { - $f = $GLOBALS['core']->tpl->getFilters($attr); - return - 'media_thumb[\'sq\'])) {'. - 'echo '.sprintf($f,'$attach_f->media_thumb[\'sq\']').';'. - '}'. - '?>'; - } - - /*dtd - - */ - public static function AttachmentURL($attr) - { - $f = $GLOBALS['core']->tpl->getFilters($attr); - return 'file_url').'; ?>'; - } - - public static function MediaURL($attr) - { - $f = $GLOBALS['core']->tpl->getFilters($attr); - return 'file_url').'; ?>'; - } - - /*dtd - - - */ - public static function EntryAttachmentCount($attr) - { - $none = 'no attachment'; - $one = 'one attachment'; - $more = '%d attachments'; - - if (isset($attr['none'])) { - $none = addslashes($attr['none']); - } - if (isset($attr['one'])) { - $one = addslashes($attr['one']); - } - if (isset($attr['more'])) { - $more = addslashes($attr['more']); - } - - return - "posts->countMedia() == 0) {\n". - " printf(__('".$none."'),(integer) \$_ctx->posts->countMedia());\n". - "} elseif (\$_ctx->posts->countMedia() == 1) {\n". - " printf(__('".$one."'),(integer) \$_ctx->posts->countMedia());\n". - "} else {\n". - " printf(__('".$more."'),(integer) \$_ctx->posts->countMedia());\n". - "} ?>"; - } -} - -class attachmentBehavior -{ - public static function tplIfConditions($tag,$attr,$content,$if) - { - if ($tag == "EntryIf" && isset($attr['has_attachment'])) { - $sign = (boolean) $attr['has_attachment'] ? '' : '!'; - $if[] = $sign.'$_ctx->posts->countMedia()'; - } - } -} -?> diff --git a/v2/dotclear/plugins/blogroll/_admin.php b/v2/dotclear/plugins/blogroll/_admin.php deleted file mode 100644 index cc14260..0000000 --- a/v2/dotclear/plugins/blogroll/_admin.php +++ /dev/null @@ -1,34 +0,0 @@ -addBehavior('adminDashboardIcons','blogroll_dashboard'); -$core->addBehavior('adminDashboardFavs','blogroll_dashboard_favs'); -function blogroll_dashboard($core,$icons) -{ - $icons['blogroll'] = new ArrayObject(array(__('Blogroll'),'plugin.php?p=blogroll','index.php?pf=blogroll/icon.png')); -} -function blogroll_dashboard_favs($core,$favs) -{ - $favs['blogroll'] = new ArrayObject(array('blogroll','Blogroll','plugin.php?p=blogroll', - 'index.php?pf=blogroll/icon-small.png','index.php?pf=blogroll/icon.png', - 'usage,contentadmin',null,null)); -} - -$_menu['Plugins']->addItem(__('Blogroll'),'plugin.php?p=blogroll','index.php?pf=blogroll/icon-small.png', - preg_match('/plugin.php\?p=blogroll(&.*)?$/',$_SERVER['REQUEST_URI']), - $core->auth->check('usage,contentadmin',$core->blog->id)); - -$core->auth->setPermissionType('blogroll',__('manage blogroll')); - -require dirname(__FILE__).'/_widgets.php'; -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/blogroll/_define.php b/v2/dotclear/plugins/blogroll/_define.php deleted file mode 100644 index f0f6b22..0000000 --- a/v2/dotclear/plugins/blogroll/_define.php +++ /dev/null @@ -1,23 +0,0 @@ -registerModule( - /* Name */ "Blogroll", - /* Description*/ "Manage your blogroll", - /* Author */ "Olivier Meunier", - /* Version */ '1.2', - array( - 'permissions' => 'blogroll' - ) -); -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/blogroll/_install.php b/v2/dotclear/plugins/blogroll/_install.php deleted file mode 100644 index b5857b1..0000000 --- a/v2/dotclear/plugins/blogroll/_install.php +++ /dev/null @@ -1,46 +0,0 @@ -plugins->moduleInfo('blogroll','version'); - -if (version_compare($core->getVersion('blogroll'),$version,'>=')) { - return; -} - -/* Database schema --------------------------------------------------------- */ -$s = new dbStruct($core->con,$core->prefix); - -$s->link - ->link_id ('bigint', 0, false) - ->blog_id ('varchar', 32, false) - ->link_href ('varchar', 255, false) - ->link_title ('varchar', 255, false) - ->link_desc ('varchar', 255, true) - ->link_lang ('varchar', 5, true) - ->link_xfn ('varchar', 255, true) - ->link_position ('integer', 0, false, 0) - - ->primary('pk_link','link_id') - ; - -$s->link->index('idx_link_blog_id','btree','blog_id'); -$s->link->reference('fk_link_blog','blog_id','blog','blog_id','cascade','cascade'); - -# Schema installation -$si = new dbStruct($core->con,$core->prefix); -$changes = $si->synchronize($s); - -$core->setVersion('blogroll',$version); -return true; -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/blogroll/_prepend.php b/v2/dotclear/plugins/blogroll/_prepend.php deleted file mode 100644 index d39e7bd..0000000 --- a/v2/dotclear/plugins/blogroll/_prepend.php +++ /dev/null @@ -1,15 +0,0 @@ - \ No newline at end of file diff --git a/v2/dotclear/plugins/blogroll/_public.php b/v2/dotclear/plugins/blogroll/_public.php deleted file mode 100644 index 7f24029..0000000 --- a/v2/dotclear/plugins/blogroll/_public.php +++ /dev/null @@ -1,233 +0,0 @@ -tpl->addValue('Blogroll',array('tplBlogroll','blogroll')); -$core->tpl->addValue('BlogrollXbelLink',array('tplBlogroll','blogrollXbelLink')); - -$core->url->register('xbel','xbel','^xbel(?:/?)$',array('urlBlogroll','xbel')); - -class tplBlogroll -{ - public static function blogroll($attr) - { - $category='

      %s

      '; - $block='
        %s
      '; - $item='%1$s'; - - if (isset($attr['category'])) { - $category = addslashes($attr['category']); - } - - if (isset($attr['block'])) { - $block = addslashes($attr['block']); - } - - if (isset($attr['item'])) { - $item = addslashes($attr['item']); - } - - $only_cat = 'null'; - if (!empty($attr['only_category'])) { - $only_cat = "'".addslashes($attr['only_category'])."'"; - } - - return - ''; - } - - public static function blogrollXbelLink($attr) - { - $f = $GLOBALS['core']->tpl->getFilters($attr); - return 'blog->url.$core->url->getURLFor("xbel")').'; ?>'; - } - - public static function getList($cat_title='

      %s

      ',$block='
        %s
      ',$item='
    • %s
    • ',$category=null) - { - $blogroll = new dcBlogroll($GLOBALS['core']->blog); - - try { - $links = $blogroll->getLinks(); - } catch (Exception $e) { - return false; - } - - $res = ''; - - $hierarchy = $blogroll->getLinksHierarchy($links); - - if ($category) { - if (!isset($hierarchy[$category])) { - return ''; - } - $hierarchy = array($hierarchy[$category]); - } - - foreach ($hierarchy as $k => $v) - { - if ($k != '') { - $res .= sprintf($cat_title,html::escapeHTML($k))."\n"; - } - - $res .= self::getLinksList($v,$block,$item); - } - - return $res; - } - - private static function getLinksList($links,$block='
        %s
      ',$item='%1$s') - { - $list = ''; - - # Find current link item if any - $current = -1; - $current_size = 0; - $self_uri = http::getSelfURI(); - - foreach ($links as $k => $v) - { - if (!preg_match('$^([a-z][a-z0-9.+-]+://)$',$v['link_href'])) { - $url = http::concatURL($self_uri,$v['link_href']); - if (strlen($url) > $current_size && preg_match('/^'.preg_quote($url,'/').'/',$self_uri)) { - $current = $k; - $current_size = strlen($url); - } - } - } - - foreach ($links as $k => $v) - { - $title = $v['link_title']; - $href = $v['link_href']; - $desc = $v['link_desc']; - $lang = $v['link_lang']; - $xfn = $v['link_xfn']; - - $link = - ''. - html::escapeHTML($title). - ''; - - $current_class = $current == $k ? ' class="active"' : ''; - - $list .= sprintf($item,$link,$current_class)."\n"; - } - - return sprintf($block,$list)."\n"; - } - - # Widget function - public static function linksWidget($w) - { - global $core; - - if ($w->homeonly && $core->url->type != 'default') { - return; - } - - $links = self::getList('

      %s

      ','
        %s
      ','%1$s',$w->category); - - if (empty($links)) { - return; - } - - return - ''; - } -} - -class urlBlogroll extends dcUrlHandlers -{ - public static function xbel($args) - { - $blogroll = new dcBlogroll($GLOBALS['core']->blog); - - try { - $links = $blogroll->getLinks(); - } catch (Exception $e) { - self::p404(); - return; - } - - if ($args) { - self::p404(); - return; - } - - http::cache($GLOBALS['mod_files'],$GLOBALS['mod_ts']); - - header('Content-Type: text/xml; charset=UTF-8'); - - echo - ''."\n". - ''."\n". - ''."\n". - ''.html::escapeHTML($GLOBALS['core']->blog->name)." blogroll\n"; - - $i = 1; - foreach ($blogroll->getLinksHierarchy($links) as $cat_title => $links) - { - if ($cat_title != '') { - echo - ''."\n". - "".html::escapeHTML($cat_title)."\n"; - } - - foreach ($links as $k => $v) - { - $lang = $v['link_lang'] ? ' xml:lang="'.$v['link_lang'].'"' : ''; - - echo - ''."\n". - ''.html::escapeHTML($v['link_title'])."\n"; - - if ($v['link_desc']) { - echo ''.html::escapeHTML($v['link_desc'])."\n"; - } - - if ($v['link_xfn']) { - echo - "\n". - ''.$v['link_xfn']."\n". - "\n"; - } - - echo - "\n"; - } - - if ($cat_title != '') { - echo "\n"; - } - - $i++; - } - - echo - ''; - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/blogroll/_widgets.php b/v2/dotclear/plugins/blogroll/_widgets.php deleted file mode 100644 index b0f54ed..0000000 --- a/v2/dotclear/plugins/blogroll/_widgets.php +++ /dev/null @@ -1,44 +0,0 @@ -addBehavior('initWidgets',array('blogrollWidgets','initWidgets')); -$core->addBehavior('initDefaultWidgets',array('blogrollWidgets','initDefaultWidgets')); - -class blogrollWidgets -{ - public static function initWidgets($w) - { - $w->create('links',__('Blogroll'),array('tplBlogroll','linksWidget')); - $w->links->setting('title',__('Title:'),__('Links')); - - $br = new dcBlogroll($GLOBALS['core']->blog); - $h = $br->getLinksHierarchy($br->getLinks()); - $h = array_keys($h); - $categories = array(__('All categories') => ''); - foreach ($h as $v) { - if ($v) { - $categories[$v] = $v; - } - } - unset($br,$h); - $w->links->setting('category',__('Category'),'','combo',$categories); - - $w->links->setting('homeonly',__('Home page only'),1,'check'); - } - - public static function initDefaultWidgets($w,$d) - { - $d['extra']->append($w->links); - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/blogroll/class.dc.blogroll.php b/v2/dotclear/plugins/blogroll/class.dc.blogroll.php deleted file mode 100644 index da0b8e0..0000000 --- a/v2/dotclear/plugins/blogroll/class.dc.blogroll.php +++ /dev/null @@ -1,198 +0,0 @@ -blog =& $blog; - $this->con =& $blog->con; - $this->table = $this->blog->prefix.'link'; - } - - public function getLinks($params=array()) - { - $strReq = 'SELECT link_id, link_title, link_desc, link_href, '. - 'link_lang, link_xfn, link_position '. - 'FROM '.$this->table.' '. - "WHERE blog_id = '".$this->con->escape($this->blog->id)."' "; - - if (isset($params['link_id'])) { - $strReq .= 'AND link_id = '.(integer) $params['link_id'].' '; - } - - $strReq .= 'ORDER BY link_position '; - - $rs = $this->con->select($strReq); - $rs = $rs->toStatic(); - - $this->setLinksData($rs); - - return $rs; - } - - public function getLink($id) - { - $params['link_id'] = $id; - - $rs = $this->getLinks($params); - - return $rs; - } - - public function addLink($title,$href,$desc='',$lang='', $xfn='') - { - $cur = $this->con->openCursor($this->table); - - $cur->blog_id = (string) $this->blog->id; - $cur->link_title = (string) $title; - $cur->link_href = (string) $href; - $cur->link_desc = (string) $desc; - $cur->link_lang = (string) $lang; - $cur->link_xfn = (string) $xfn; - - if ($cur->link_title == '') { - throw new Exception(__('You must provide a link title')); - } - - if ($cur->link_href == '') { - throw new Exception(__('You must provide a link URL')); - } - - $strReq = 'SELECT MAX(link_id) FROM '.$this->table; - $rs = $this->con->select($strReq); - $cur->link_id = (integer) $rs->f(0) + 1; - - $cur->insert(); - $this->blog->triggerBlog(); - } - - public function updateLink($id,$title,$href,$desc='',$lang='', $xfn='') - { - $cur = $this->con->openCursor($this->table); - - $cur->link_title = (string) $title; - $cur->link_href = (string) $href; - $cur->link_desc = (string) $desc; - $cur->link_lang = (string) $lang; - $cur->link_xfn = (string) $xfn; - - if ($cur->link_title == '') { - throw new Exception(__('You must provide a link title')); - } - - if ($cur->link_href == '') { - throw new Exception(__('You must provide a link URL')); - } - - $cur->update('WHERE link_id = '.(integer) $id. - " AND blog_id = '".$this->con->escape($this->blog->id)."'"); - $this->blog->triggerBlog(); - } - - public function updateCategory($id,$desc) - { - $cur = $this->con->openCursor($this->table); - - $cur->link_desc = (string) $desc; - - if ($cur->link_desc == '') { - throw new Exception(__('You must provide a category title')); - } - - $cur->update('WHERE link_id = '.(integer) $id. - " AND blog_id = '".$this->con->escape($this->blog->id)."'"); - $this->blog->triggerBlog(); - } - - public function addCategory($title) - { - $cur = $this->con->openCursor($this->table); - - $cur->blog_id = (string) $this->blog->id; - $cur->link_desc = (string) $title; - $cur->link_href = ''; - $cur->link_title = ''; - - if ($cur->link_desc == '') { - throw new Exception(__('You must provide a category title')); - } - - $strReq = 'SELECT MAX(link_id) FROM '.$this->table; - $rs = $this->con->select($strReq); - $cur->link_id = (integer) $rs->f(0) + 1; - - $cur->insert(); - $this->blog->triggerBlog(); - - return $cur->link_id; - } - - public function delItem($id) - { - $id = (integer) $id; - - $strReq = 'DELETE FROM '.$this->table.' '. - "WHERE blog_id = '".$this->con->escape($this->blog->id)."' ". - 'AND link_id = '.$id.' '; - - $this->con->execute($strReq); - $this->blog->triggerBlog(); - } - - public function updateOrder($id,$position) - { - $cur = $this->con->openCursor($this->table); - $cur->link_position = (integer) $position; - - $cur->update('WHERE link_id = '.(integer) $id. - " AND blog_id = '".$this->con->escape($this->blog->id)."'"); - $this->blog->triggerBlog(); - } - - - private function setLinksData($rs) - { - $cat_title = null; - while ($rs->fetch()) { - $rs->set('is_cat',!$rs->link_title && !$rs->link_href); - - if ($rs->is_cat) { - $cat_title = $rs->link_desc; - $rs->set('cat_title',null); - } else { - $rs->set('cat_title',$cat_title); - } - } - $rs->moveStart(); - } - - public function getLinksHierarchy($rs) - { - $res = array(); - - foreach ($rs->rows() as $k => $v) - { - if (!$v['is_cat']) { - $res[$v['cat_title']][] = $v; - } - } - - return $res; - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/blogroll/class.dc.importblogroll.php b/v2/dotclear/plugins/blogroll/class.dc.importblogroll.php deleted file mode 100644 index a7317e3..0000000 --- a/v2/dotclear/plugins/blogroll/class.dc.importblogroll.php +++ /dev/null @@ -1,101 +0,0 @@ -_parseXBEL($data); - } - elseif (preg_match('!_parseOPML($data); - } - else { - throw new Exception(__('You need to provide a XBEL or OPML file.')); - } - } - - - protected function _parseOPML($data) - { - $xml = @simplexml_load_string($data); - if (!$xml) throw new Exception(__('File is not in XML format.')); - - $outlines = $xml->xpath("//outline"); - - $this->entries = array(); - foreach ($outlines as $outline) { - if (isset($outline['htmlUrl'])) { - $link = $outline['htmlUrl']; - } - elseif (isset($outline['url'])) { - $link = $outline['url']; - } - else continue; - $entry = new StdClass(); - $entry->link = $link; - $entry->title = (!empty($outline['title']))?$outline['title']:''; - if (empty($entry->title)) { - $entry->title = (!empty($outline['text']))?$outline['text']:$entry->link; - } - $entry->desc = (!empty($outline['description']))?$outline['description']:''; - $this->entries[] = $entry; - } - } - - protected function _parseXBEL($data) - { - $xml = @simplexml_load_string($data); - if (!$xml) throw new Exception(__('File is not in XML format.')); - - $outlines = $xml->xpath("//bookmark"); - - $this->entries = array(); - foreach ($outlines as $outline) { - if (!isset($outline['href'])) continue; - $entry = new StdClass(); - $entry->link = $outline['href']; - $entry->title = (!empty($outline->title))?$outline->title:''; - if (empty($entry->title)) { - $entry->title = $entry->link; - } - $entry->desc = (!empty($outline->desc))?$outline->desc:''; - $this->entries[] = $entry; - } - } - - - public function getAll() - { - if (!$this->entries) return null; - return $this->entries; - } - -} - -class dcImportBlogroll { - - public static function loadFile($file) - { - if (file_exists($file) && is_readable($file)) { - $importer = new linksImporter(); - $importer->parse(file_get_contents($file)); - return $importer->getAll(); - } - return false; - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/blogroll/edit.php b/v2/dotclear/plugins/blogroll/edit.php deleted file mode 100644 index 6a6aa39..0000000 --- a/v2/dotclear/plugins/blogroll/edit.php +++ /dev/null @@ -1,241 +0,0 @@ -getLink($id); -} catch (Exception $e) { - $core->error->add($e->getMessage()); -} - -if (!$core->error->flag() && $rs->isEmpty()) { - $core->error->add(__('No such link or title')); -} else { - $link_title = $rs->link_title; - $link_href = $rs->link_href; - $link_desc = $rs->link_desc; - $link_lang = $rs->link_lang; - $link_xfn = $rs->link_xfn; -} - -# Update a link -if (isset($rs) && !$rs->is_cat && !empty($_POST['edit_link'])) -{ - $link_title = $_POST['link_title']; - $link_href = $_POST['link_href']; - $link_desc = $_POST['link_desc']; - $link_lang = $_POST['link_lang']; - - $link_xfn = ''; - - if (!empty($_POST['identity'])) - { - $link_xfn .= $_POST['identity']; - } - else - { - if(!empty($_POST['friendship'])) { - $link_xfn .= ' '.$_POST['friendship']; - } - if(!empty($_POST['physical'])) { - $link_xfn .= ' met'; - } - if(!empty($_POST['professional'])) { - $link_xfn .= ' '.implode(' ',$_POST['professional']); - } - if(!empty($_POST['geographical'])) { - $link_xfn .= ' '.$_POST['geographical']; - } - if(!empty($_POST['family'])) { - $link_xfn .= ' '.$_POST['family']; - } - if(!empty($_POST['romantic'])) { - $link_xfn .= ' '.implode(' ',$_POST['romantic']); - } - } - - try { - $blogroll->updateLink($id,$link_title,$link_href,$link_desc,$link_lang,trim($link_xfn)); - http::redirect($p_url.'&edit=1&id='.$id.'&upd=1'); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } -} - - -# Update a category -if (isset($rs) && $rs->is_cat && !empty($_POST['edit_cat'])) -{ - $link_desc = $_POST['link_desc']; - - try { - $blogroll->updateCategory($id,$link_desc); - http::redirect($p_url.'&edit=1&id='.$id.'&upd=1'); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } -} - -?> - - - Blogroll - - - -'.__('Return to blogroll').'

      '; ?> - -is_cat) -{ - if (!empty($_GET['upd'])) { - echo '

      '.__('Category has been successfully updated').'

      '; - } - - echo - '
      '. - '
      '.__('Edit category').''. - - '

      '. - - form::hidden('edit',1). - form::hidden('id',$id). - $core->formNonce(). - '

      '. - '
      '. - '
      '; -} -if (isset($rs) && !$rs->is_cat) -{ - if (!empty($_GET['upd'])) { - echo '

      '.__('Link has been successfully updated').'

      '; - } - - echo - '
      '. - '
      '.__('Edit link').''. - - '

      '. - - '

      '. - - '

      '. - - '

      '. - - '

      '.form::hidden('p','blogroll'). - form::hidden('edit',1). - form::hidden('id',$id). - $core->formNonce(). - '

      '. - '
      '. - - - # XFN nightmare - '
      '.__('XFN').''. - ''. - - ''. - ''. - ''. - ''. - - ''. - ''. - ''. - ''. - - ''. - ''. - ''. - ''. - - ''. - ''. - ''. - ''. - - ''. - ''. - ''. - ''. - - ''. - ''. - ''. - ''. - - ''. - ''. - ''. - ''. - '
      '.__('_xfn_Me').'

      '.'

      '.__('_xfn_Friendship').'

      '. - ' '. - ' '. - ' '. - ''. - '

      '.__('_xfn_Physical').'

      '. - ''. - '

      '.__('_xfn_Professional').'

      '. - ' '. - ''. - '

      '.__('_xfn_Geographical').'

      '. - ' '. - ' '. - ''. - '

      '.__('_xfn_Family').'

      '. - ' '. - ' '. - ' '. - ' '. - ' '. - ''. - '

      '.__('_xfn_Romantic').'

      '. - ' '. - ' '. - ' '. - ' '. - '

      '. - - '
      '. - - '
      '; -} -?> - - \ No newline at end of file diff --git a/v2/dotclear/plugins/blogroll/icon-small.png b/v2/dotclear/plugins/blogroll/icon-small.png deleted file mode 100644 index 935a9e475e46ec75a961f69ec4ae9754b353e517..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1810 zcmbVNc~BE~6b^?p$e>&b=rFEPJP?vBA?7dwVw%-ut~bn;jhJ zZ##RzY#a_}D_X}7!A3jNi?_nQi-tbRu)!4-NKrAe6V=PKFpdKukuV@q$rNx1EQ8`> z@4_q`&H_?Oq^LAtBU6s3h%%E6(V)^`XdI5^YtYE#(J%@`!V0CDO&F+cAOK2;P1s5e zAO~o8aFlXgf)*Ah1WM!y(Q*bv@LdbA3`~qb1*0;+po&rJm|fr3nc5Osv*@N)(ndl0l{+fkZM%r831eWvxR);D6ls zqP0#EuYpM+unvjS%CY;{xnu^6P*R;{-$ z3D{)sKpHLy!Vexa7~QC>Aq&GRNA9rg;__6FG|9%zf-=j_s}Gf7v`e&$C#$pdk4KVi zdBJu9H)WY?Geh6P9*sy>c%E2w|BkpkKEuJEy=>fRx5~e}7GB=<X#3;evut9#?sLSMH)Bu4Ao}6 z{Or?W|1kGE?rT;wqj`mI{K7H~RTbl{4T&YXq#=*YcegpXzRu;vKji6K1_pYJ_ZZdv z^oO|zbQPOpcd4Dnmzd*^&_h!Hn8+$?Hq4#XURN`6VMWfo1E}$LlBLHiNMO8}5$n@& z>v{IFwrwtsh4^$yx}PPv_y)Yzg>pS)P`=$4y>^=WA)kU5mYNST7$Km9Q?92&SVa!HIYjdQ-EIHKcRNc+ooQ?ut z>$7IARV0oB4griZ#$1m-#YeL;?5qOkzq$F)EsWmH-Qvb0wm0n(7=N-pKEOT3mh|r* zn`~9y5>tO((DW?FBWM4I{$qZg5y-6aHmfqb9S6gf9-h+`4!L}v*tzXW-pVNPOODK8 zBy}V-=|yI*tFU#e;!y7JpySD^%qM$%hE;`+>urzID__~Kt2|UBc+)gV2+F_V>|Xig z?W(TV$Te24MNqfYeghH#nQf+Aup4f&=F1P+xpf;GLVJfjJ-^*O&niWp;W+WyRuSK4 zk#j#~fpwMaba?$@rywH1MPy(hc~yBQBARjwqFDG-=freR^HEX7%kX!@hr6FjQ+Cal zHq^gpt8VQsI5G8?5(xtN7r8sq{|0Z*!R7z} diff --git a/v2/dotclear/plugins/blogroll/icon.png b/v2/dotclear/plugins/blogroll/icon.png deleted file mode 100644 index bc426a44f2d7803a8c60e60d0239ecf3f4db7ebe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7485 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 - -if (!empty($_REQUEST['edit']) && !empty($_REQUEST['id'])) { - include dirname(__FILE__).'/edit.php'; - return; -} - -$default_tab = ''; -$link_title = $link_href = $link_desc = $link_lang = ''; -$cat_title = ''; - -# Import links -if (!empty($_POST['import_links']) && !empty($_FILES['links_file'])) -{ - $default_tab = 'import-links'; - - try - { - files::uploadStatus($_FILES['links_file']); - $ifile = DC_TPL_CACHE.'/'.md5(uniqid()); - if (!move_uploaded_file($_FILES['links_file']['tmp_name'],$ifile)) { - throw new Exception(__('Unable to move uploaded file.')); - } - - require_once dirname(__FILE__).'/class.dc.importblogroll.php'; - try { - $imported = dcImportBlogroll::loadFile($ifile); - @unlink($ifile); - } catch (Exception $e) { - @unlink($ifile); - throw $e; - } - - - if (empty($imported)) { - unset($imported); - throw new Exception(__('Nothing to import')); - } - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } -} - -if (!empty($_POST['import_links_do'])) { - foreach ($_POST['entries'] as $idx) { - $link_title = $_POST['title'][$idx]; - $link_href = $_POST['url'][$idx]; - $link_desc = $_POST['desc'][$idx]; - try { - $blogroll->addLink($link_title,$link_href,$link_desc,''); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - $default_tab = 'import-links'; - } - } - http::redirect($p_url.'&importlinks=1'); -} - -if (!empty($_POST['cancel_import'])) { - $core->error->add(__('Import operation cancelled.')); - $default_tab = 'import-links'; -} - -# Add link -if (!empty($_POST['add_link'])) -{ - $link_title = $_POST['link_title']; - $link_href = $_POST['link_href']; - $link_desc = $_POST['link_desc']; - $link_lang = $_POST['link_lang']; - - try { - $blogroll->addLink($link_title,$link_href,$link_desc,$link_lang); - http::redirect($p_url.'&addlink=1'); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - $default_tab = 'add-link'; - } -} - -# Add category -if (!empty($_POST['add_cat'])) -{ - $cat_title = $_POST['cat_title']; - - try { - $blogroll->addCategory($cat_title); - http::redirect($p_url.'&addcat=1'); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - $default_tab = 'add-cat'; - } -} - -# Delete link -if (!empty($_POST['removeaction']) && !empty($_POST['remove'])) { - foreach ($_POST['remove'] as $k => $v) - { - try { - $blogroll->delItem($v); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - break; - } - } - - if (!$core->error->flag()) { - http::redirect($p_url.'&removed=1'); - } -} - -# Order links -$order = array(); -if (empty($_POST['links_order']) && !empty($_POST['order'])) { - $order = $_POST['order']; - asort($order); - $order = array_keys($order); -} elseif (!empty($_POST['links_order'])) { - $order = explode(',',$_POST['links_order']); -} - -if (!empty($_POST['saveorder']) && !empty($order)) -{ - foreach ($order as $pos => $l) { - $pos = ((integer) $pos)+1; - - try { - $blogroll->updateOrder($l,$pos); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } - } - - if (!$core->error->flag()) { - http::redirect($p_url.'&neworder=1'); - } -} - - -# Get links -try { - $rs = $blogroll->getLinks(); -} catch (Exception $e) { - $core->error->add($e->getMessage()); -} - -?> - - - <?php echo __('Blogroll'); ?> - - - auth->user_prefs->addWorkspace('accessibility'); - $user_dm_nodragdrop = $core->auth->user_prefs->accessibility->nodragdrop; - ?> - - - - - - - -

      blog->name); ?> ›

      - -'.__('Items order has been successfully updated').'

      '; -} - -if (!empty($_GET['removed'])) { - echo '

      '.__('Items have been successfully removed.').'

      '; -} - -if (!empty($_GET['addlink'])) { - echo '

      '.__('Link has been successfully created.').'

      '; -} - -if (!empty($_GET['addcat'])) { - echo '

      '.__('category has been successfully created.').'

      '; -} - -if (!empty($_GET['importlinks'])) { - echo '

      '.__('links have been successfully imported.').'

      '; -} -?> - -
      - -
      - -'. -''. -'
      '; - -echo -'
      '. -'
      '. -'
      '.__('Add a new category').''. -'

      '. -form::hidden(array('p'),'blogroll'). -$core->formNonce(). -'

      '. -'
      '. -'
      '. -'
      '; - -echo -''; - -dcPage::helpBlock('blogroll'); -?> - - - \ No newline at end of file diff --git a/v2/dotclear/plugins/blogroll/locales/en/help/blogroll.html b/v2/dotclear/plugins/blogroll/locales/en/help/blogroll.html deleted file mode 100644 index b1eeb8f..0000000 --- a/v2/dotclear/plugins/blogroll/locales/en/help/blogroll.html +++ /dev/null @@ -1,41 +0,0 @@ - - - Blogroll - - - - -

      Blogroll

      -

      Blogroll allows you to display on your blog a list of links to other blogs or websites that -you wish to suggest to your visitors.

      -
      -
      Links
      -
      Here are displayed your links and categories. Categories are displayed in bold characters. - You can reorder this list by dragging its items upwards or downwards. Once done, clic on "save order". - The order chosen here will be applied to links displayed on the blog with the Blogroll widget. - Clic on a link or category to edit it.
      - -
      Delete selected links
      -
      Allows you to delete links or categories by checking the boxes next to each of them.
      - -
      Add a new link
      -
      -
        -
      • Title : Type here the anchor text. For example "Jules and Julie". This field is mandatory.
      • -
      • URL : Type here the link's destination. It must begin with http://. This field is mandatory.
      • -
      • Description : Type here a short description for the link (will be displayed in a tooltip). For example "Jules and Julie world trip".
      • -
      • Language : Type here a two characters code for the destination language (for example en for english).
      • -
      -
      - - -
      Add a category
      -
      Links categories allow you to classify links diplayed by the Blogroll widget. They are displayed in bold characters. - Type here the category's name.
      - -
      Import links
      -
      This option allows you to import links from an OPML or XBEL file.
      - -
      - - \ No newline at end of file diff --git a/v2/dotclear/plugins/blogroll/locales/en/resources.php b/v2/dotclear/plugins/blogroll/locales/en/resources.php deleted file mode 100644 index f690ced..0000000 --- a/v2/dotclear/plugins/blogroll/locales/en/resources.php +++ /dev/null @@ -1,18 +0,0 @@ - \ No newline at end of file diff --git a/v2/dotclear/plugins/blogroll/locales/fr/help/blogroll.html b/v2/dotclear/plugins/blogroll/locales/fr/help/blogroll.html deleted file mode 100644 index 0d48812..0000000 --- a/v2/dotclear/plugins/blogroll/locales/fr/help/blogroll.html +++ /dev/null @@ -1,38 +0,0 @@ - - - Liens - - - - -

      Liens

      -

      La gestion des liens vous permet d'afficher sur votre blog un "blogroll" ou liste de liens vers d'autres blogs ou sites que vous souhaitez porter à l'attention de vos visiteurs.

      -
      -
      Liens
      -
      Sur cet onglet s'affichent les liens que vous avez ajoutés, ainsi que les catégories de lien que vous avez créées. Les catégories apparaissent en gras. Vous pouvez réordonner votre liste en cliquant sur les flèches bleues à gauche et en faisant glisser le lien vers le haut ou vers le bas afin de le placer à l'endroit désiré. Une fois vos liens ordonnés, cliquez sur "enregistrer l'ordre" afin d'appliquer les changements. L'ordre que vous choisissez sur cet écran sera l'ordre dans lequel s'afficheront les liens sur vos bandeaux de navigation par le biais du widget 'liens'.
      -Cliquer sur un lien vous mènera à sa fenêtre d'édition
      - -
      Supprimer les liens sélectionnés
      -
      Vous permet de supprimer les liens que vous avez sélectionnés au moyen de la case à cocher à gauche de chaque lien.
      - -
      Ajouter un lien
      -
      -
        -
      • Titre : Entrez ici le texte que vous voulez afficher sur votre blog. Par exemple "Jules et Julie". Ce champ est obligatoire.
      • -
      • URL : Saisissez ici l'adresse du lien. L'url doit commencer avec http://. Ce champ est obligatoire.
      • -
      • Description : Saisissez ici une courte description du lien (permet l'affichage d'info-bulles par survol de la souris). Par exemple "Le blog du voyage de Jules et Julie à travers le monde".
      • -
      • Langue : Saisissez ici le code à deux lettres de la langue du lien (par exemple fr pour le français).
      • -
      -
      - - -
      Ajouter une catégorie
      -
      Il s'agit là de catégories de liens, qui vous permettent d'agencer l'affichage de vos liens par le biais du widget "Liens". - Les catégories s'affichent en gras dans la liste.Saisissez le titre de la catégorie. Par exemple "Blogs des copains"
      - -
      Importer des liens
      -
      Permet d'importer des liens à partir d'un fichier externe au format OPML (format des listes de flux RSS) ou XBEL (format de partage de marque-pages ou favoris).
      - -
      - - \ No newline at end of file diff --git a/v2/dotclear/plugins/blogroll/locales/fr/resources.php b/v2/dotclear/plugins/blogroll/locales/fr/resources.php deleted file mode 100644 index f690ced..0000000 --- a/v2/dotclear/plugins/blogroll/locales/fr/resources.php +++ /dev/null @@ -1,18 +0,0 @@ - \ No newline at end of file diff --git a/v2/dotclear/plugins/blowupConfig/_admin.php b/v2/dotclear/plugins/blowupConfig/_admin.php deleted file mode 100644 index 193844a..0000000 --- a/v2/dotclear/plugins/blowupConfig/_admin.php +++ /dev/null @@ -1,26 +0,0 @@ -addBehavior('adminCurrentThemeDetails','blowup_config_details'); - -if (!isset($__resources['help']['blowupConfig'])) { - $__resources['help']['blowupConfig'] = dirname(__FILE__).'/help.html'; -} - -function blowup_config_details($core,$id) -{ - if ($id == 'default' && $core->auth->check('admin',$core->blog->id)) { - return '

      '.__('Theme configuration').'

      '; - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/blowupConfig/_define.php b/v2/dotclear/plugins/blowupConfig/_define.php deleted file mode 100644 index 4cb2b9c..0000000 --- a/v2/dotclear/plugins/blowupConfig/_define.php +++ /dev/null @@ -1,23 +0,0 @@ -registerModule( - /* Name */ "Blowup Config", - /* Description*/ "Configure your Blowup Theme", - /* Author */ "Olivier Meunier", - /* Version */ '1.1', - array( - 'permissions' => 'admin' - ) -); -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/blowupConfig/_install.php b/v2/dotclear/plugins/blowupConfig/_install.php deleted file mode 100644 index 9fb9499..0000000 --- a/v2/dotclear/plugins/blowupConfig/_install.php +++ /dev/null @@ -1,25 +0,0 @@ -plugins->moduleInfo('blowupConfig','version'); -if (version_compare($core->getVersion('blowupConfig'),$version,'>=')) { - return; -} - -$settings = new dcSettings($core,null); -$settings->addNamespace('themes'); -$settings->themes->put('blowup_style','','string','Blow Up custom style',false); - -$core->setVersion('blowupConfig',$version); -return true; -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/blowupConfig/_public.php b/v2/dotclear/plugins/blowupConfig/_public.php deleted file mode 100644 index ad7967a..0000000 --- a/v2/dotclear/plugins/blowupConfig/_public.php +++ /dev/null @@ -1,196 +0,0 @@ -blog->settings->system->theme != 'default') { - return; -} - -require dirname(__FILE__).'/lib/class.blowup.config.php'; -$core->addBehavior('publicHeadContent',array('tplBlowupTheme','publicHeadContent')); - -class tplBlowUpTheme -{ - public static function publicHeadContent($core) - { - echo '\n"; - } - - public static function blowUpStyleHelper() - { - $s = $GLOBALS['core']->blog->settings->themes->blowup_style; - - if ($s === null) { - return; - } - - $s = @unserialize($s); - if (!is_array($s)) { - return; - } - - $css = array(); - - /* Sidebar position - ---------------------------------------------- */ - if ($s['sidebar_position'] == 'left') { - $css['#wrapper']['background-position'] = '-300px 0'; - $css['#main']['float'] = 'right'; - $css['#sidebar']['float'] = 'left'; - } - - /* Properties - ---------------------------------------------- */ - self::prop($css,'body','background-color',$s['body_bg_c']); - - self::prop($css,'body','color',$s['body_txt_c']); - self::prop($css,'.post-tags li a:link, .post-tags li a:visited, .post-info-co a:link, .post-info-co a:visited','color',$s['body_txt_c']); - self::prop($css,'#page','font-size',$s['body_txt_s']); - self::prop($css,'body','font-family',blowupConfig::fontDef($s['body_txt_f'])); - - self::prop($css,'.post-content, .post-excerpt, #comments dd, #pings dd, dd.comment-preview','line-height',$s['body_line_height']); - - if (!$s['blog_title_hide']) - { - self::prop($css,'#top h1 a','color',$s['blog_title_c']); - self::prop($css,'#top h1','font-size',$s['blog_title_s']); - self::prop($css,'#top h1','font-family',blowupConfig::fontDef($s['blog_title_f'])); - - if ($s['blog_title_a'] == 'right' || $s['blog_title_a'] == 'left') { - $css['#top h1'][$s['blog_title_a']] = '0px'; - $css['#top h1']['width'] = 'auto'; - } - - if ($s['blog_title_p']) - { - $_p = explode(':',$s['blog_title_p']); - $css['#top h1']['top'] = $_p[1].'px'; - if ($s['blog_title_a'] != 'center') { - $_a = $s['blog_title_a'] == 'right' ? 'right' : 'left'; - $css['#top h1'][$_a] = $_p[0].'px'; - } - } - } - else - { - self::prop($css,'#top h1 span','text-indent','-5000px'); - self::prop($css,'#top h1','top','0px'); - $css['#top h1 a'] = array( - 'display' => 'block', - 'height' => $s['top_height'] ? ($s['top_height']-10).'px' : '120px', - 'width' => '800px' - ); - } - self::prop($css,'#top','height',$s['top_height']); - - self::prop($css,'.day-date','color',$s['date_title_c']); - self::prop($css,'.day-date','font-family',blowupConfig::fontDef($s['date_title_f'])); - self::prop($css,'.day-date','font-size',$s['date_title_s']); - - self::prop($css,'a','color',$s['body_link_c']); - self::prop($css,'a:visited','color',$s['body_link_v_c']); - self::prop($css,'a:hover, a:focus, a:active','color',$s['body_link_f_c']); - - self::prop($css,'#comment-form input, #comment-form textarea','color',$s['body_link_c']); - self::prop($css,'#comment-form input.preview','color',$s['body_link_c']); - self::prop($css,'#comment-form input.preview:hover','background',$s['body_link_f_c']); - self::prop($css,'#comment-form input.preview:hover','border-color',$s['body_link_f_c']); - self::prop($css,'#comment-form input.submit','color',$s['body_link_c']); - self::prop($css,'#comment-form input.submit:hover','background',$s['body_link_f_c']); - self::prop($css,'#comment-form input.submit:hover','border-color',$s['body_link_f_c']); - - self::prop($css,'#sidebar','font-family',blowupConfig::fontDef($s['sidebar_text_f'])); - self::prop($css,'#sidebar','font-size',$s['sidebar_text_s']); - self::prop($css,'#sidebar','color',$s['sidebar_text_c']); - - self::prop($css,'#sidebar h2','font-family',blowupConfig::fontDef($s['sidebar_title_f'])); - self::prop($css,'#sidebar h2','font-size',$s['sidebar_title_s']); - self::prop($css,'#sidebar h2','color',$s['sidebar_title_c']); - - self::prop($css,'#sidebar h3','font-family',blowupConfig::fontDef($s['sidebar_title2_f'])); - self::prop($css,'#sidebar h3','font-size',$s['sidebar_title2_s']); - self::prop($css,'#sidebar h3','color',$s['sidebar_title2_c']); - - self::prop($css,'#sidebar ul','border-top-color',$s['sidebar_line_c']); - self::prop($css,'#sidebar li','border-bottom-color',$s['sidebar_line_c']); - self::prop($css,'#topnav ul','border-bottom-color',$s['sidebar_line_c']); - - self::prop($css,'#sidebar li a','color',$s['sidebar_link_c']); - self::prop($css,'#sidebar li a:visited','color',$s['sidebar_link_v_c']); - self::prop($css,'#sidebar li a:hover, #sidebar li a:focus, #sidebar li a:active','color',$s['sidebar_link_f_c']); - self::prop($css,'#search input','color',$s['sidebar_link_c']); - self::prop($css,'#search .submit','color',$s['sidebar_link_c']); - self::prop($css,'#search .submit:hover','background',$s['sidebar_link_f_c']); - self::prop($css,'#search .submit:hover','border-color',$s['sidebar_link_f_c']); - - self::prop($css,'.post-title','color',$s['post_title_c']); - self::prop($css,'.post-title a, .post-title a:visited','color',$s['post_title_c']); - self::prop($css,'.post-title','font-family',blowupConfig::fontDef($s['post_title_f'])); - self::prop($css,'.post-title','font-size',$s['post_title_s']); - - self::prop($css,'#comments dd','background-color',$s['post_comment_bg_c']); - self::prop($css,'#comments dd','color',$s['post_comment_c']); - self::prop($css,'#comments dd.me','background-color',$s['post_commentmy_bg_c']); - self::prop($css,'#comments dd.me','color',$s['post_commentmy_c']); - - self::prop($css,'#prelude, #prelude a','color',$s['prelude_c']); - - self::prop($css,'#footer p','background-color',$s['footer_bg_c']); - self::prop($css,'#footer p','color',$s['footer_c']); - self::prop($css,'#footer p','font-size',$s['footer_s']); - self::prop($css,'#footer p','font-family',blowupConfig::fontDef($s['footer_f'])); - self::prop($css,'#footer p a','color',$s['footer_l_c']); - - /* Images - ------------------------------------------------------ */ - self::backgroundImg($css,'body',$s['body_bg_c'],'body-bg.png'); - self::backgroundImg($css,'body',$s['body_bg_g'] != 'light','body-bg.png'); - self::backgroundImg($css,'body',$s['prelude_c'],'body-bg.png'); - self::backgroundImg($css,'#top',$s['body_bg_c'],'page-t.png'); - self::backgroundImg($css,'#top',$s['body_bg_g'] != 'light','page-t.png'); - self::backgroundImg($css,'#top',$s['uploaded'] || $s['top_image'],'page-t.png'); - self::backgroundImg($css,'#footer',$s['body_bg_c'],'page-b.png'); - self::backgroundImg($css,'#comments dt',$s['post_comment_bg_c'],'comment-t.png'); - self::backgroundImg($css,'#comments dd',$s['post_comment_bg_c'],'comment-b.png'); - self::backgroundImg($css,'#comments dt.me',$s['post_commentmy_bg_c'],'commentmy-t.png'); - self::backgroundImg($css,'#comments dd.me',$s['post_commentmy_bg_c'],'commentmy-b.png'); - - $res = ''; - foreach ($css as $selector => $values) { - $res .= $selector." {\n"; - foreach ($values as $k => $v) { - $res .= $k.':'.$v.";\n"; - } - $res .= "}\n"; - } - - $res .= $s['extra_css']; - - return $res; - } - - protected static function prop(&$css,$selector,$prop,$value) - { - if ($value) { - $css[$selector][$prop] = $value; - } - } - - protected static function backgroundImg(&$css,$selector,$value,$image) - { - $file = blowupConfig::imagesPath().'/'.$image; - if ($value && file_exists($file)){ - $css[$selector]['background-image'] = 'url('.blowupConfig::imagesURL().'/'.$image.')'; - } - } -} -?> diff --git a/v2/dotclear/plugins/blowupConfig/alpha-img/comment-b.png b/v2/dotclear/plugins/blowupConfig/alpha-img/comment-b.png deleted file mode 100644 index b1d37c6decab7eed6f600371942c8fb8e0088cfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1328 zcmcIkO=uHA7~N{EHCn_XA|f)Zd+^ZB>~7MgSvIL{(w|5ZN)s@8a6U+G~M)PpUZY46^rg_vxSVJ}xg92)%P)J*srYTtRER6sz$S62XX0MZG*vEIj)6#AH&6*f+bk)t9sFl~jjHLjpw|+% z?&VJDtyUh$rtSNI$Tvg}GRfBX;92_nD5sLcxtSxI8y)G+;nSDbA>y7rSPl1PKFgQ5 z`^;Tt?aRwMTxy%| qQ*MQpUa!xhbe;R<=3l*-z4@bS(|P=joH&%HX_?e$Ci#5i#_c~8c3(LF diff --git a/v2/dotclear/plugins/blowupConfig/alpha-img/comment-t.png b/v2/dotclear/plugins/blowupConfig/alpha-img/comment-t.png deleted file mode 100644 index b320da374aaa3d423feab93f4c1b137606e3b95a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1549 zcmeAS@N?(olHy`uVBq!ia0y~yVEh7POLDLQ$>Y^`l7JLTv6E*A2N2Y7q;vrJoCO|{ z#S9GGLLkg|>2BR0prA~NYeY$Kep*R+Vo@rCV@iHfs)Ac)QEGX9QFgI{bFlG@Yi`Uy zbz&fO&PAz-C7Jno3L%-fsSF0D`UXb&1{N>OJL-V834&Ba`1)8S=jZArf(+8D$Sq*7 zv9BmdOwLX%QAkQn&&;z`QczG(QpilPRSGxtHSjHPPR+>ls47YguJQ{>uF6ifOi{A8 zg`H`7rFPApOIO3YI*GFLD%FaQ!pR)&UFCWb)AfPs=77m&6oN=dT{ za&d#&3FO%-Wt5Z@Sn2DRmzV368|&p4rRy77T3Uj9Ze*kjRH0j3nOBlnp_^B%3^4>| zj!SBBa#3ahIJ`jSCMM;Vme?vOfh>XpsOJ(3;1=Z-Ljw;OjQSOc1^R}12KsQ5ff{Xq zf>z*|$S(@X&(E>L5@|LdohXVBwj%VWx+IpQ+5yAELf61Z*T6Ky(A)}$Oe~|2^g|S( zY4^=f$xN$6*KTBJWn^MyUb)jCk(It(eyqz{=dq!{4;mK6qS>Hy|0Uo9slVX@j=IP(p;(Qk2%|a@>+OKN;!V4G~&7WLj|Cy z^z`lLxF4v1SzFI>Ka2z#XRen%SNu?~if2;HvCDgyWK=zc9>1MiI3v7aF;HyJUjNTt zK;u1owtqEQ&(RGO`g2{9f5%ZH&q+@nZFnHYZ}EHjM}O^Uo|9Cw_xKVF#ttuHS4bo4<_D$uph5)M`t%mPYATJZKwR`E3BJ`U7%`@6X1$F;AXu5Nz@ QERq>KUHx3vIVCg!0MY@?hX4Qo diff --git a/v2/dotclear/plugins/blowupConfig/alpha-img/gradient-d.png b/v2/dotclear/plugins/blowupConfig/alpha-img/gradient-d.png deleted file mode 100644 index 74bf9cfbd6ccab96707908bb980714fb9389325d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1432 zcmcIkO-vI(6ke5RsbC@p62-%0jq#xE{M`rLoaV z?e3Fqf*{&s!_jd(v$(%;9meC@+FgXF7IPq$bYZ*gl5D(h)rW7G1aY*(=?BW+XST4j z6AezFhyev8Ybr>}3MA-mie@RgcOziWV8kg0ki{>)mlWu18=-9xfU% zQ5;Q*#jF^V$iA?fw>V5zAQFJ3L^J~eznAfd zw9gOxJzh4z1_M3kK|(-aL{I@604z=8f#n#6^E0@ZijiSAo_Rw`apTdUT28zRkr{+^ zj-vAUyf^RjYDSu3g2AAp5X*Wn!ebUxBv>BRJY5a49VZG+(UA3uu1;KGN}EO@l5`T) zt#&v;uP0K?ns``7$`W*n@zPX1GA8oa$yIJlGm@H?3;*Lvc!#+I)X3W4!>E8@80*pN zp;-^zon!(WZvNoSCVmyPiyqe`IaSy}XM9P<&-ntl)#y#28l9&cA)17#sP3F;mmlmQ zm?YNq(x;7Ff;p%_6`5EwW~XM7$fYzx5l~oGgfygdHO*5E=YQ*~R*jzpewI}I zU2d0Nzsh}CG<4sW@YSIEndC=e#E(Cb&#`EK()#vm{dMai-PW>5@wa}THJ+Cjmdf&M z*ywX*g+py<8ZrGXoHP+UJt6w%(T?d=(ajv+T{RHkTzQxBQ NVuPd6R|As|{sQz3b~^w7 diff --git a/v2/dotclear/plugins/blowupConfig/alpha-img/gradient-l.png b/v2/dotclear/plugins/blowupConfig/alpha-img/gradient-l.png deleted file mode 100644 index c39567946ea756bcc4a7760c21489c6d251bb4be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1443 zcmcIkOK1~O6dkpeHnj^~h!l~>v`druWZE=Cl75n=Nj0T3BgTT@bmk?QCiCgcluScy ztE+V3Mrx}IcY@eLLDapAf*`sn8iHUqx^ScJ{2}O@B+aLYy6NT3`&`bs_r7xMdJjf5uAN~7;_TPvE2#U&FhEyi$^YeTlsCKk}SU5i{YFs$Q*{T<6uI5B1Kb|&C zjU|X&F6YX*U8 zz01AQYppzxO-}Hr%bOdY(%M#9AN(&{3_4nB_MVC46A#vAUPgMjb59!i3jyoV=Gu)?A(XA5?ag-l zYe)O*N$1LoQeo!Wa+7^qICU!$*$(&6Lifhe!?x|T-n=s!EKU*P=c~-UjUSi0h8nXB Z;%9b+*;k?Ot4rvnSaf7Ov^9L?`fu~~fRg|K diff --git a/v2/dotclear/plugins/blowupConfig/alpha-img/gradient-m.png b/v2/dotclear/plugins/blowupConfig/alpha-img/gradient-m.png deleted file mode 100644 index b25c6bafd5a507ba4fa37b744097067b493d8d81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1446 zcmcIkOHUI~6dogDEolsx5MMDjW8%to9vvv1wB^yE4`LB$4amYc%-oi-org2Gb|3^3 zU5E=Y#tjQ&+?%i`a}ojvsHr#b=!t0I*Dpl zJ)CIN5@}XdJS-z+iw4E`XsQ+&6GPa^mv2lrGrC@g{NYMM4)YMGp0&=0f{0)Q>(S+< zSufp@VFEmETyVUBUjZGVr*v7#P935%{tUzM{s3-OdIP9R4^fT~4Z@UFcg}Rg5B?#T zEYjh_X6mQ?Ls z9+Y0Y%41p7bw8Hym7vF&=Yq7dw73-*zO{1Y*+ucdJCi`G_%WjKS zQG|Mx`l4XZO|_niAbRLg4?TG3K@>gJB9sbVdvG>MleQE+b=aN9&-Z=*Ki>@VXfWO1 z;yL310JJ0r5<>tqK{9u{kC5I~m|Y~pVWTIRb(416El!hlvo>(m0N~gu=XZVnHnl~9 zXU*ObGo$8Bi`Oye7S&M<`y?G(s$Mi;JmY`9+Sf#IryX2e$Gj=23d~9}26Pb7ETY@j zL(@|v+ers8lDfhPs_f$(A)hU4Akt}Tyimj@9K{7miBb?k3QA&>$^}z&N{iz$X<$;v znaOlkm@Eomk?M?jA~r|JGB$Z=%O%C&>?l>yyv!?*4MCQsNyl;w!vz>pOr=pV4;dr6nCFHPeYKoq6{W^Z zQ{xb_EX!y4eX3qSOgJ2NcFwY1g76v>ipkqv#kf!v+15#5L(nCy;+Lb#kE-Kll%kwO z^;X*)uhkPNM$J58BeHo7F+LjAl?gFIf?VY!R6VPzrPw})7IB!nK#i;oK2Go^juAiF zy)^5kgIOlTkuMOwwu4^mizjuAVIskrX!X-^#f$1qW- z`=yQRrOL600>ULMW5qOxXUuNTM1jkzy3Cs~N#+X}X-Xl28o__oSFM^{3vw+{{a$XD zUO&nMnKXPq5c#U;K_+?p>g^nPKCEP-J8Qc(mY3xRgD1L{H`bqZ&Cm2)oat&tpUw}p zJ}rIJW?#&&5a>%Qy>t|S-|z2~y#U<%DgRmE4gp}VFn7ztH(UUG-7K$eJ#c``%FwZf379IFJNFnNOWOiV+57EBu&~1!PL|Fems5Od+)w`zNgityW{Dr zX#l`@dA_s^Knn78dL+fiE&T2~pHlHm*&ZDo{jz`W8{eL*F50sP2M2q5d%MLggImVJ z`PCSJ^B2W8^6BftUjUrFz-Cw2N@dY>sIOp`t`jBkLtsrMA$D4X!FAH~g1iJFl%VJ4 zrTY^VwGtM|hBv(tNfe zw_z@q=K3-DE-!5`7McikIvu5xQE1denqe47)se2t93jWs0mF$L#5a0Q4*ir!>_lG3 zJQ_gZ7q8PzmX{ovBI(=}T)Ol^{j z+NU1@_30K8LL3pMtGYPT3H$#9bDe=+;bzqCUW@A>(k4C$Sj;ukj%(&RW`jmPW(Cj3 zO@hLpX`!LD9^IX%rFcRoJ;&0mab;&G_a2J7I6 zfWK7itIu=d1-dM7-QpI%jqUjaWK^W)cz>~9dCd`5%B5-h=5uH5&6%~gPpQ_ diff --git a/v2/dotclear/plugins/blowupConfig/alpha-img/page-t/animals.png b/v2/dotclear/plugins/blowupConfig/alpha-img/page-t/animals.png deleted file mode 100644 index 4db1e880b28da32d9aa1204aaaa1973245713897..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28044 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 X)1FU#uRCTg8bDoHN2yZLI`sbl`^Pc) diff --git a/v2/dotclear/plugins/blowupConfig/alpha-img/page-t/blank.png b/v2/dotclear/plugins/blowupConfig/alpha-img/page-t/blank.png deleted file mode 100644 index 18ae6e8e9783b2ba9f724dce0cbe89b9df220e16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1892 zcmcIkOK1~87@j_mSgBYkiVtvDPol{_k~Ynn#A?&@K~riIwALQF-JP~;lHFx@HEF3* ztAh0+h@c>%;#Ix$;z7k;dh?*5hho8#52_#tMZtsrY|?F4ieB1*o&DyY|NH0r|9MRJ zbhp*k?5;rw)poQedJ(F^fTw($pnuWzXdC>htz#V-AG8Udauvp#jrLO(LR+@euj0+Z zh2LP@Yq$2piNzS>#1sKjGs|Gd#m>fQtK#+{Oe zg)kO44mv^Pc`?L;7^gAu8u&*|WmxP@B+F~UD8`K1wjr`?p->1Ef&tweVfjcT!g2yD z2!8PJTVt9n75$pEzZ7ISPJ&pnsT#JbYnaBBhV-*`jA7_PZYw7z8SX-wRW2Tsku6FF z%Lh2tjSR#n7{wNoNVaZfbUhbeV@slx>2X?Fb%jq7l1<`Jk0w7S`1xRlZxFeV$Z`Fv z_$8;m=qX)MhsRdYLw+Gd=|P}}%k))FWqOpQg;-S>r|LAPzwG}jm?FFNGR~SgXIm7R zB{`BOnr%VNcyG-VSsd2Qyky7Kyfi{sLmP>*E5?87E2)NK0mqVc&*idocPlpptkiu& z!k2<>*07dmV|Rnd1Dn_p`NA&GoIX z4@__WTz~jMedqnli*r||ld0+xpKg9X7ycELpB;bo_VIirLO&OlMyJOn(y6y+f(U&; z*@pAit}i4JdUr#P5Y*xY6`=I^_jasbleg zbz{z_Kpm~!i6_Sfr~Ux1 CnuJLJ diff --git a/v2/dotclear/plugins/blowupConfig/alpha-img/page-t/butterflies.png b/v2/dotclear/plugins/blowupConfig/alpha-img/page-t/butterflies.png deleted file mode 100644 index 2a790c5df64dba45018fd7327cee1a0550ce60a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6350 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 diff --git a/v2/dotclear/plugins/blowupConfig/alpha-img/page-t/default.png b/v2/dotclear/plugins/blowupConfig/alpha-img/page-t/default.png deleted file mode 100644 index 1ea06207790cb086cab882a4f2e3ddc166f83f30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1926 zcmc&#S!feM7@oFKW2In46g-Emf}qJBiH%v3*dzAPrb-iN?UUQxNnD#f+})bAs1)^~ zeGwn5R7CJq6c3^(h(`qxL42rKP&^QQQUrYyRB&dKZo3*3gyIjG{pZ{7zrGnZqq{m= zYpPdN0|08;+u~gSR6*@P9FONrYUGsto|rf?5QWQ3pQ&8 zf+yxe(+S1}_}XvV4%m&Dci8s_`>oNNK(+-cqWG zcTsAuW$8Rk=W;oJF5uUU49$kaVWJSn`7pz04yu-r_o-%GG0AkEI5I^;)@@x$UZGDL zu%Z-23OQC9PSBk~s#y{b%Sh)1oo4+E?PSJ*5e)M7iD^bk)3UKLM-m~CF49cZnRpZz zEEL0fZ1FLij}4^Q%{&w28K!que3A4^ctVrp^q@ODm|{abLo$@YXOT+b5t;}wOBh>q zGSe?O{EJ|c=;);n7+L#RB#}m0q#)HYv1Y7WGfCvrnxP0*Ojd*pqIESBp=ZE9_E+p0 zUkiLKY3E)}x9%L}oH#SO&q?}X(zz^>oI1V%fXa#Xcw;L6;?v8kHTN5q&YRfyX#LIP z)6pIK7oNPb&eI0rz2)ZyCxf30V^7vR!yldTiCVl?R07~7pR(VahGC47S8k`$Q$k$M zVu;BEaXG`FqKLR1&q!T4wiEAWlZ-av@s@L71I|TWxg9c&jkuihlRC4zCv|3bO=@#~ zoAlp$AO3$jw3bzETF2qLH7B|+OnvBDecHA|ci+8U^6~4nediB^0>lbyvzJfhzU&{U zv$x;gUfNkp#U2yO_8xoxe9R6zd+W!Sqo&O$6mA^fXD+b)Ggp-N-M7-j>N5}Zsv>xO Z<;TdIb>ALv_|Fr7_HCWoN@pF diff --git a/v2/dotclear/plugins/blowupConfig/alpha-img/page-t/flamingo.png b/v2/dotclear/plugins/blowupConfig/alpha-img/page-t/flamingo.png deleted file mode 100644 index 71388ee1432c56077f346b458a39df1e3851e966..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12864 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 EUod-0?f?J) diff --git a/v2/dotclear/plugins/blowupConfig/alpha-img/page-t/flourish-1.png b/v2/dotclear/plugins/blowupConfig/alpha-img/page-t/flourish-1.png deleted file mode 100644 index 48c01e3b2aa2fe8944b2263e2a346e4612b2de73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5045 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 EA5xVMK>z>% diff --git a/v2/dotclear/plugins/blowupConfig/alpha-img/page-t/flourish-2.png b/v2/dotclear/plugins/blowupConfig/alpha-img/page-t/flourish-2.png deleted file mode 100644 index 2707e5a21c7c00130b3ba6285426c925bfaac252..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12838 zcmcJ0c{tSH`*#?OrHQc?!;Gb}FD)2LV{BuI?7IkQk!5CNn=-b@GKL~lB!jXqWtXIy zNh12#WoHbs3ne{M)aU#CUC;GAfBnvNnR(B-&N=sb?)!D_^LG23slh?^BkTtb95`r* z(zQ5nfC)-}jsUXIKVO&>bJ4#57^I;Uklt`Wk68L|Hb0a-=D-0C@UK6H?$0-O=$-sn zJv*!p+S3ht+1CeZb@`g-0i_cPipmO#ss?A92I(V&e~qy8y@(BTLwg?3_VB&n3Dv)h z_6+nzU&TOmEKj8O>NC-)asL`;ch&^%?t4w%?bk5*plf~yG|mM1xw&8U#6mB4dR_L> z6oW#cV$jPTnqs!6&MKbu)A77?85M%|v z3W0%v@_{GhebHVDN@{9qzci$*EJq(9hY9w!`Co(nrTXuDPhB^xrxslws&b0Ta!Mzxlup4FPr?-y9sXnf-k|?6{j9IY<%_}p zJ^iGWk_ue$*9!a7|6|bpbPa`Hiue!3{MPy}nf^yV^#7wU5BI^%mc4}I2M)-&8R}|V1r2_A7&=Vosb3lmvtcb5ypq}mleS{# zMoPltUg=vIA$iSB^SBI?AH-kOoyF@uesWY85}*B$Ddyb(6JwtX}64pl3Wy0Yyw8k#U)Z*&_Bn9yb!d6C!7h=}|O@N;~ zPBUG@lPLDzYaNFQ3tMBZ_S|OZ?vi7m%^v&){5G-kK?9V7|II1ms}}R^H#$^5r@Iwc zC+2VAy9nP;g{FJFGDk(`uErbWkaRGoYTr&eB&}&)Iro=G)vf7CyCjZc96^GVYi2_G z$jRkI?Sj24vFH80^f`p8YNhkWrD-BTCe8$YvM-bq@U5!gUm;b4rgA|><1B^-Nl~QS zFvf2GNLQ}eBY}?me}yA>14za|+H7h$*69u&I}BtAe|zzx#GoGPD4Am&qgh3G?a1e>>o0@ZKc>}9Xjxx z5bW%MAFsLkeiU%#P3EU}yS>i67_s)(mbpf^4K%%BMnyt(i%I?_giuO>lB+OHP{bUr zudQ(B@+~Ch$LdKlc66z9}p`7%&F`FX6Rcru=2SB$w)nC;jbB zXtP4*aHpZ7OvlZD%iMVzuLSkXsjLjGDI!bMP_#hW;-QAsRrm~tP z?T|z$?^bGqL2A@U?y{H8KU#|Y%O%SvDqMmD@_HNi-nt0b?VoDYEL3-wp!%6Ii6RRc z!#O{&Z#n<*TB+_w^$ZdHLQ$~~-e&l>8Qc>~-tz@EW3sB^3*xHwzJf_x%&!5@^mUIz zr>RelOo^9bNdt)*1nh7o5qs(AY@Kw(Qo_G1^iiR)so+;~cAje(iIlo{b9jn3r=Tr- z@xVQScbocu)&xe*>u@b(KDw^RIHjYiJ`K<(^ zQI#p;tjDF!$*_nhy{T(z;!EFYq|b>OhP02v%pJ0oOSk^;&!TOsY3*>dT62~6+gQoY zB|vVC7y^>hW>hvJD-reZ<68FSuC*?Fv9i`N-j@63u|HM@gUUf`mx_%V{11Uc*T}FZ z!jbq-61+oTF}>HQSS>T2CM2>XcIU=FZ*7WkAy|*DL|m~B{4G5o7`meSOKi73WX*Ni zr=}^3ETkVgtCBb!1(bJs4VPV46-)Y}77X7oyoPNz?42nGMt3h0|e3G9P*ZltY*Z`pV zSYfwCxh2=uStR1Pm21d$A=)I;TL*4N)jNj-dB0&F$`z;EJdKDo zNjMH+xv}G>we}G#mR5!pycnthm~kx{diO^g-E0>f#mXPd_#Y~loLW4hyuIge=OicV=73G0k%6s#{2n`1L~O_tSF zS*`8%Ptt)eKCji&pk7vu$;P&$QRD@|?h3Bip2opHs(H*>cnsG6AR7Mx;H!^ZjEtHc zt0>@)N?0`B*ik3O40}2zG|E{@-5)h?#K+5 zof2Lr!$M1cfX7lwtn+zrPPB9Z3%CdiPpehy<3I6H2?1vcA94bC%CmJbTr3i+r&d86 zEAzz_zffD1?h=`LS}JGtv#PO_RD#xFBeFR3F78h@ep)-%#nIA>16-(%nne@^B#$(A z96Br^q04&9n0wge%b3v}8H;GJe{$mN0e0;v zF>ah8TUX1dBx?)i0Uqzb+Lgqi4^`^V4>05t4N=cT-+O;h24WtHok}6l*bK=!QbsWs zZ7@sta)8h>jYbwe2d1wMAmjH89E=ynJG7P>MNsAB=|j zpGowY+C~}lqwD-h?%H%1v19b!M+CE%-cUV!ToN7%3`hGz1jExo%Yz~$hUYHK_R}j- z2-cTO5T`izLU&0N_2q+jX`_()y{8am>70n?W%1$ir-qTKUsayo;Nn14-6gqSdDXq* zitMgXyoD7MSyPSs<94;sCz;Y;7~CSH#9{H=xX&48e%4VJo*xmbWOuB%bwTpAA`3%h z$6=bns*X2JG2Qyke0XxY5I_^ESRibIiIrG?Bmzk_hl{+^fs5$)m^W)sGkz~kER=*2 zlR~+4<@j29a)FJd@5e;2fpclVUe>spB{-!SnR=Q_L-y_VhqT89FYgeOzY`Ck4@I2g zIVT@+E-IBEB+KGflzCB6ka1nYdNjWh3%1J=_|iXm%_jowo9OhI?wk z_}D1)jET;H=O!qMJFt4t3o7!^`pqJ3Ggf8p4%hnJf!a_jx?_elO3$-Cj%+JvaYzy< zL7+2GR@uUq@LP7A%qnitZ$1hIOULjJ_)Y>-!`xr0b}Px;!nSwX!8yg<+fVGFGHV?K zv7lU6;^G;f+o-|SE?`SBEo(7_Czq1`ldn0)fBF?2+D%b#5dsWi%tUJ4F`m7dSiYE2;y>EX|uLs2|dPP@cYGGJu^)xhnzpx<%t0bP^+ue#lC${1hhP}-9( z)e!*|O}ZWB&EtI^+UVZa=bQKvlTReR>yO(w!^k*3FAVNheZ4UVtqlV*m&!;rdhvTmB#5(<%F*7>u~wpi7BxH;Q& z7kb3f=Q36|k_^h#j8PPPc`$^MDyUHHk@z8?m|q%@r7yppRum|k^#&)H1s)zJ5^|JC z?j#+!zTLlxdiLIZLC1bF|DMV~S z04j!tk{4o{oA2#huKDzWk~i5EMRNB<(G-h3IKb(SdudcU8xQ3=-SSKhX6EQv>ERM< zcoX)?}!wEaDFMmA< z2mIGc^-3$G8Tw^(3US0EKIXYE5~X~ z6G2i{O@I8xY9YLWLBq?C0vBcTFS!LUj0NpFOw}gk08b`H{bM>iVA4r6j>b7XZEKqb zAwT*UM~|R4lHcgZQ{{Y&5pW63*H!&Z%*|u~2dT5%uz&G3NMCaa7ECaGeuPkbl`bv7+fp0()N~ zj$PL~Xwb2eXlt49nSwDS7YcT}Q2`lpAw7Qrz+L9kf#QB6QDY&wlCXJh5=~C8-v0as z7qvJ)@`iOqXg!EseM{IyxJQy|`MrLYX$U#a)AemJbX~Y%jkR(E+GrTvx@sZCTTw=tO>CUa1fe)#Yg#B3M zJ2Vf!7YjYd8YRvI@VHGRUT4!R0O6N(%5S`2U+k)&fD=B8WV3zc=<1(y6+$859;OCA zG#G!Uq@xNnB*QwIRxLs*ThI0gw^HfoGJ}dL+GR6bAV3@>}*}( zeTUgt9`zIhHsWt+^#QaC*bwT+{Jv-b%e|oIC2iebhRWr9>?zaQ+>+Zmhq^WH*&^eb z+4ebC{2rF_fWQ*0^)s1*Vf!RlZq^1?egq^fSc{xOL#R(kKl6QUE9xtFey#?q0XN) zNsA)2mVq;+Og~2NrQt|>1YxsZUcy6#ar_83QwAKE>7q@Plbm|Yn8v7eB)ou4w;@Jj z(L+M@{UWW3`&=gyq&q3x4SPSW6<62ASN?+Wd_SJo_Xqa+Yrc->V~whgLa z9$JNE;oj>E>v5eV4cLeX+zrfpg3$K!ZHDM=$ z?3)TNM;MOVJ{{JC4|*&+i{=@9FPDvlLcXcb9k2fSCY2DtW*k#|t9M^;qvR;U>zP1& zGI0_qGQ`NRcHJ1cC?yrap!O{$N>}46KqBKjqbXOIif;5(&P#>1nu&6@qreyC5;~Rd zFSs*yyR}WvHQwdn$)d(vFTTZJJFzq3SlAuseewOEc+gk%mCu*MH3t2iDhy+u##M_& ztL?#9k}G3(+oUE87W&HPzIopCxj;K`rPAE#QeLL6c&qKV(Q-VhUgCUBLUo|mVO}fA zl82isf}G2x9%D`DalhE9M=`oi%W-;9-=&5W%ett-M(ZciLG#=tuRW-1kpUo`0_d*E zOH94vB0C=)>0jancQ?i|w&hxHFVZH#s$MF5O-heIPMg6vnf_~rZ|D0{rY~Hj%VRXt zf%1Pb^khr~LPv_@da}?v*0sM;Cx)I{IE`ucdqGwz9nYzADu0t+H^`W*4G6MqrYB~I zo}kr8PFtXvFL({tYW?gjeyu|J8Iz3YsN46{N_+W|0`W1Q!FYCzdpy@?8b zBAZf&wXNQ~{!Ib&1rt4)rnwc(8GGY5LktVmwZ~o=k$(ia@ThiLdQPJoJQbA0 zee|TEHE-&{|aX?#d``;#}| znY`mmq%uk28|KsR%amNf-EJxmaeRGhQqx|01p^Y45iOdM;|x|l4P~9U*4Ux~t}Lb8 ziJvc8{ru^96qYinp@~GrNZtGX%zEI;v55B>=_ec&IhP#L`JO^)iU%3I+&GdS&Nd2f z3-EB1KOUo}3x*lL{9kF~@gsqc2c?80f|{=trxHG`P#>l?{9!@)+V)<>iB3PF#85PJ zp+>?(6yWi+)8E+2eiJJWb6(?&AZ%P(@|OeS&laq(>YgiMTG$o&teH98AooVS)XRx& zMeB?eJvZ(q^k-HZPrcK)Ma6X+C`&9kZW+dmYXdr!51gL$>eYnHcc3)p#zUL5w^dj; z#UbWLm^#RFR=!D}R<|Es8ZWnjXWnj}PgpvIg1fZQkCHrXYL|T)_IJuh#>Y%0X0miB zQQ7Nn;!cMQeJDyRH&ZqUIAJR;cp`N4?B=?F-Z`%kWnUzsmV2`#axgi_-C6V1^J5O+ z$8}w~4wT7AlDnA1xTLj>zHM5MvpASi;J)kqu77@v36*6G7r{UK@V0SF@*v>oo78-tKjHFl zk6Q_K2JPkD3~~VysZ}lc+JD%}T=G2%Rm0U{dN3&*2tM1)WxKgvBKGKnSmi(pk@_ZU zhq~Mwrkg&@VmK}4vnJkjTgK!kW%G(g{N_e41K_s@&T`k zRv6@Hfjj?9ONS&;yDY0}&EhU0m^;s157|9F*HvM&eeZowQDEd$+btc$)Yn27q0?%! z_9%?jA3pj|1#^EI>NikBoo0-%)SX$NqnNNO6Kc^yClat{)yKP{G-vwoZcl*`ESk2w@^`;A6gM|-M{I`Ze= zT|A9Sa;}?$87ph8kBhh8mxCONC@6W^3-UXaBq>;X<#vN&QYyV7F9YeWfZxJSeM)r7 zw%x>B_A2qCpZpI2+FOkx|K8y$6bD8&;J z7)|H6#u0(Xh(w&QFYJ@>xR3B|kc4gfyc>ivc6f0wWXDdeT`jgwN(E{?m%vGGbx)ko zn3Nx;-k+$dPaYH1xS7%yG(1gG7Gm~v;THy->uyUd7S7Co&E&yXo!`R7MIwk_b*ujgu=|sw#!*I z*O(r$F0nA0c(m$nb4knXxWNbEcvN|;Q%7lWui~xJOdm|6Em^$cIBhLzo>`0Usy2K9E?zCv&Cx3@>Oze@$Au`n-_RaGaR`A=Mm>3W3T>r;P%JHa?wrsFc7$J#)kU}NL^{)J z_P>gRhG*%x+jeg0jS>DX@rh$)Lexn%7NxpgBBvC}!IU&zBL6 zdNOhwcgqW^i^2F^CQ$2@wP_!Vjp#JTi zZIMD;63DXY%7t*|*J*_9G;DwB+mnIcuW|34w@A|Lu`ai_=;ympM=6<(+trdo%8^FSaLQVINp#W^!JFi7QU z|IpT^V)}m3jv#ONjR{oKE0=7SIWU-a`9MbI}VaWmrm^ zbssssbC-UE%5@HpSQQeMfyfm*B@4lXD#uCNnoBJ^&-bxG;bRQn&GlsBr~!pzTN$b_ z#bb<2=}$RDNj|nxEG_deljFyLey`f#+vGzP*C=N2XTlm0B_<)Mq-xbg;q33eQO(V# z$LtF^F56|W8Z%C{DrD0SZN)9sC8w3BRmpS!C+zU(5sv5{YHgfN+Gs(-zdorn@?dG& zs5rW}{jCrFu-QI_q9hd-CwQ02*}KsVK=Y4Jioyx%AQyTLK^A;DZl~ehE!hV_RU~&M z#(>bFe-tII*YJ_EqI9nYmuc!{^HHl}Cqp@4v9AP;wM4AzgqXh34+~Du#j@pWwJ_gm z3;P9^#~GQY1LMC~&usQ9kFAl%H=%EIY>s{E{3mnYAW@4QKfH{QH-SXr@w|}G+pZTQ z>1k1ARL(xhF1$OSu=tFQ{Atod&IFYqj*7?Qb5BZ`){6iK<=6(Gi<|Yrok3Nq*9)a( z9EGA^JYN4&hL%WXHT;D+b%#?Wu4?((5`3nZ+1o_9)gZU3kivazGOA1QquVY!i>D^{ zORLg5dZ<|5c7T3yM?+T(SPXK@cKTAR?aQj-myl-UNyGq zZ{(_yy!wofGF&*E7t-qUuF`m;8m#^8D$M?l_RH&qWYlt_^!d`Ba%=i__w!Vj}febxil8A^-_tvz6h!s6n>1hU6R zDf-_>!Fzt68jjK2?U_8!C?V07RvaoE-hP~~G&JOioc%=Okd?jEKhUfXP&=Urc0-nj z)RlVa^S7+4+P*!=(I(VPmr~(+xO`8*;S=7-XelX3C!91{cYvliiwQ9Fzd6l+`h#gx z1koR%)sw9I;%NBV={LTUHCr_+bzIlw-~|@H-)XS8jCi#2SQ19hTRi~)nu_1!+QYgR?Idvr#6jeX5 zrXm&ibR!wJ?SqSt|tzyR+w37434c0v@(@e^sku2 zL$=wL^jrf$wEkHl;Vg)@Wq^5kH*)-;jcKAwi+#GAqKhSptYuzz1^24YE+I_(e55a6 zzohw;mr+b&%G5irvc`i38rdirdz~tvECEdqHnEoNnLh^8rX!;VCgJdU*`Dv#BEhh=H`}LUaG!o!wP_DB z5sRQ-Z+nFftZdc*9{jY`>fFejtjdm>`kdYkyDxpQTado$ycp}uIA`PvTOsb9llWb) z0&LR&68?f`Rsew6!vRmN7{SV_6>G>5Hve|s)P~Ud^DeO+_D`fbo~uY0TXKG!3oYhs zxmZyU7BjijxuN!xSuN`eJNa~;0(x043dT)4_gKj_ZcX;i@+fbx;vHpP;ywD_Mc0uF zfAyGBl~N2ek`R@co}Zkz+JU`9~IR3ZadArR!E<9c$*Ov;x6La(vo2`RcLY zGc~)7&7E}uQ8=wS>67|^B6*v9D5O$pOj7Ct<_!JF#}<|}I-KYCL*4p~2!!?K{lm^- zr9{G+3k{QpTp9Kgk{)8gqRClYBn@TEIYSAwKM~0a?K{F9SDOsiW|jvbE=Bv)!jUox?!$lxCKwjv({%U zcSgl5bSYIz@Z1~k086r$96?bZ+ZZv7 zUkzS9JTf-_^YbhJ5le2@m>bo%dsjq(N+)F_mi3Ye_jHWNAnRU1KYOF_We^NMIf5s5)l;1T?}XI3^-;CH?btk9sbdA z(V^R|n*FA8%F4?n_X7GoLdLhzF~ELNr~!{+d*^_VXE$GYr+A`e{+1!A^UcZZu~p{m z@1s%8OVi&%=QTcP?y3ml&lHL1z^fw*{7b#)mC;b_`q>=t-DHqG!@@`c<1V@zR?VU1 zV1dtR%M3X}+tMr6p9_oc+ppKzGkeI4lnb%Z?C^+%BH%wpv-RfHH|u6;YqE66=Eyn} z@W$pjd$#|BvS{+{wBmtnVKfi;Nt2_?ODn#|v3~nNDfKJ@dni6kK-;W_5#UCBvg-U8;~&yaT01in z?y?~`=@8zvnQJ68wEfvvl&s_n*9tU!d83b#teYiM&{~Ye@=~kvTIq#-)tsI~Qjp5^ z<#o=Rj=7L-H#gAafkIqjQD;eF=0fjFh2Z=;5u1>(C&v@_e#PAe5qA@ z@6~6}6{A|Ra6i!*0YFID%}_$Bk=bp- zY8%v57j&vH>e6k*$EJftM}E>=g>0frH!cw;Z}zbcXS*m}7WHeK?|;-eDr^pS3A|QT z*%6$Tgr$f;6kczcvI55yyK}m3m}ODMR8EoU06N26+Vi3N@O%amzWaV+Nm{=QyyvKK zXAvDdz7B_CQ4Epg6@|~#v3Bc5h^B-kbK~|VwMAprr4Q%_UXhcvP=<{A1=vQZ8e6rF zhAtT7dfo8-)%1dVE+HvMHhaj$@{-OpkW}cJQJlByDGMX=Pllfd9rnBw{gDI6c(>UR z+}(uNP6xGzCE(@DLhSV?lt6tP_1OpAzAlI_*Cc)6THbEV)A1=oKM0IX!Zwz*-D|%F zb}PM7SP9y+fSWK^Bp&v@JotqOy3@IK%rdzcC^=G^4sH_{X`OAI#sR(!os@X*~boliK@Bx`vN3B_7{!H~8UR=8ug_tGEAlZ&VpG%qbl z(hir@ZKnM+7MX?KsHI;Rl{ueJP1C<2*mLKVljZ3AVeYcEh)E5|4Xq(10yg%Gwb}NA zu)-v4dYiTAt)~u>Q>~Ja{PBs;Qa`WD^Sy%Q>6D&)t{^or{(01cPa|YshvgiU)c!>` ziK!)jnI#Dc*tcsx&$~a0oRKShMjL@ViRdwR-Q8ipEjGkb`#havrnhm9!qhb$qIThh zB#@)(4vDVVK^kUvQn62-wnZ_LXcl)J`lJsNwt#c0e=^yz$xHm9wV6!FE^k}Mz0+2- zx;zSQUNOE~Vz=j^ybtkE)VBSCx(XPr$Bm*~uzsO~tthv9Guw%Oy?~~2ZY>-arS(I8 z-I(BP346Qromw2v|2imZ4O1K; zTd;RG=qf;*?#JwoUN|*Xfb@9--t2|2y$O?HOp{PLR*GT8eN7hbUhyIRde4WU?+L@Z ziucpsBvVGCCkH3sbg_=i)@(OfrX@ib=%Kmxvn`tIptl#tk%wR&u52dt;9^RJaBIuI z%`M4y4E&IOe&P^>u>RW&hI2kY)+6F}Ua3ut{cR|}9Sd#baZ%xaTZUomM70e49pU{( zz>+~3ejWc3Xi5G$>(Msm@Aq#bX{J%J;^;=KRNSDWc>|>Md<&r PallZ|RJRoA8u5Ps3?YkO diff --git a/v2/dotclear/plugins/blowupConfig/alpha-img/page-t/image-mask.png b/v2/dotclear/plugins/blowupConfig/alpha-img/page-t/image-mask.png deleted file mode 100644 index 998613bcd9d98b2c37c322a7d7601df34b395eef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1982 zcmds1U1%It6u!G%%^DNfDio2Tmuaa`GCM!JX}ZJicAHGnY}ySayVCdrc6R1&G9)`Q z&P?4&kaVe4TU%(26t#WvA^0SPVpCD6qV&n1LPbSF+c!axf?^*k^ucpycW1L{)u+68 zVP?)f_dDNr?{|iKeE;~K-tNb{5kkHBQF#KP4H)7h(FfuE*}e~A@QFBs`BD_d%TetZ z%pbBwpK%a+_!0VqzPqt-7m}OZ;Yqh>R@|Cm6SP}1%LI?;HmRBRjDv@YiFbY+*#Njr z6gOlO#nnv%m-H$@LW1K(j^DYbaCrsPHd4f7VV|U$)wn{5;$GE4>0O?ss58XHWiq83 z83tp_U|q{F2l@+q!5Sjd`sln(iu2rKd z%U6M#n?b;zFe+oGu)nI%#?ZgI2Cf(Dr>@=o_T#DRS-kiJJ(8|H{j|OWw+@ z>w9}&$vyV!wHND=J{;;AT^c`Kk8CY{dF%ZX+j>r2eCzzxH?7(WcV3^^zIZbKME(-o zJl8+E{9L*3z+z8+)432_cYXQSKD^_tL=l?)<>M2vKOlFP9kdr->VN9p#oG@cbntND zhtJO`* zedg*8mT zdfISA7DIjc6md1T6w;8E{kPATZ=%%J z?(WV)?Cf4%UTj|6Y)-CL?3{vvg6tez>|9)|FA}V7K924t-mH#pG=Gi!mmO&fH#1io zXLlPXN6!X69x>mQJn?ChlT34klI>?9Pr>BJBUu`2XqO zU$0+i@j^@X|K{a?x&Gf%`G4i)e{lc5V*anu|C^miNC-&1BoU&2lEWX;{u2&bHVzg5 zu9qOwq;_94R2ILJ%o(E{uEr&2fwN8%x>W z=~&0rPRH2C@$nvyfCi`K!Pt?m)QgK+Z2hqGHpI0+xKm$%SU5-`1Re#4Rv!A#31=cd zzz?^*jV{k=O1yx?+Yi6J4d(RQxZ{5cr8BGoPTO!NZb$%mzcvm4$6=nR|7GCC5`?A+ zYwd;``7?m>f73#f6QJ`C_fc5f7rG6O~H*!K8R!$5mM$gyKLbI*F~>v!{D+7$T-DVA<6}Ffy zL=TWF%#nZ0m;sevS#6$95C_4Vp*fd68$D){t`;w}wT#9D^KsambB-w@s;OXpRT@2U zdN||x<$eCUoSUqVM`_h2AP(5=cX>}r_;;ZF%4-1F_@G>(kaZuJuxcr$RYr+EUAk&4 zaLqF+&;ig*L12prwGB#$0Gh($*q#MnVZVIPWEW-E2kx22_!XY0bK%H(f_>Dly+ za$5Z8Kb?yCF+!C>fh}V(i(VD|i9her38E{1T;qv&dSCp(WfNQzJz8#9Qw}iCc_Lfd z_q51||HhoaQvk*du7ZvK>J1eNOZpt*oBH1IVU%YklylYb`_S*0_#IP9P7p4rdjXac zfBT_p=#2UErl;;-JU|kbx~&K^XDT-U>Mb+c)=C{Vn1V`L%N$f-g@lg?4A4izk2dXQVUlL?Tc|2Bahc3zPgvu7vDDydw;qkg zDk2taNz7V)?92T^r6FNc%pk%)QT0(WOxJ`w>&2+UdF>}jF_~YVB_6CL<*(s_fi_Bz z18=CLMZ))=z|JFEyqhuu`-+Gr2#QNd+I^K4PxC&DA|I*$vyJ9y}-2OziIy?Wy6PTzkckxS4>^ne7s;#|%{tSj+FO#&ZS2djRFA(=*( z=4D*4TNmcO|EiLOiY@uEdN9$+4w-!IQ@|-ZVDPLC1}PW$Z>W*M^}AKVY`&s#?3zK< zKw~Km*h;F&bw5`x7^jeIgp>UAOrqguNWhqhroH{mkYz{ca4X;=R)lr$wJ@8!@vE^( zLNpvO)1O?#A~mW#)`AG-w^TR0uK-QKP>}*e4E#uFW+bD#5GOZ5xB%mP)x6FE%C z>od?MI|DfjmEIdAD>LMQV;ALmmKrVoow^9+pU~U!8=`K#ob_=`Ie4MJ0Sp)5AqhBuFVS`KZ32+Tkezxck50s@S4bpmxOh%v z8R{y6y7`?$a<+E9>Ddyt>fdOqh3h9Bt&8~#+MLmaN-)dMhfssMWqZPZD~=g_L@|k? z&g;UHUf7VHvxz7NpgrJ;zu*Tew#-OXv~_GM1NbLI4?@2HS~yc1JsBP+QsV>3)iC^|Oc~oS>f-UkUx{Bkp=} zjKTFG{4wIMO&-8`v;m-L?$KH{yyO)Pfk#%T{wbX#Egv9HyTB!q$_7F5(;%T2Gid3F z+>#XkBe|H`oP%hcrT}P9YbbvEdN+sk9m^;vm3r|@+krjn|*Y$(s z57?C%OZwD7bFA6qd@&uymv?P47?OT03nZK*z)n?A!M*ot>7+(7>G^f{g6>?ju8JY8Te4CD{@N_N~-;bf9dZWbNnWGgC4qqlZd&HWeG)rl07~Q z+1QemvS4I%P`8$7bs2FdcWGp#PIUioqmKu$?$DI)j_v*V#~Ci7OMT6JpnthX2iITx z5dmxnmiMxkCzph;pz3Z$&?jS39R|>9G$GKGG+o3x57~|+S-?>#sT&S&;2tJV9ej4b z{}CuQ7iAr<(v^srTl_=(Z?*;D0|Y%VL4kp};nmE6$?446xbNWMD?r_drwQ2&VaP1; z=LEwFDsI2@iGex5b*&>2)E>y!`HNu}Cy{BHsJPEjEk?Dn2805aWq((&0svI)CC&Ef z1bVgiB%_B+9P~BxgqVxlB2&G2)t$;vs5*@j-$WN?kd(vbP~_OLcHMZjqIh`BTi9ix zmWLA8_f+Zc?0+SYr1AE_KQ4;=b5~m+X7yj&=ESZ$hukmhb;3dh6#-3gpq0<`M;~P} z2EtJz*IyBpnhIU~pi?=4B(=7t*KF$qVwH7Ye}C=~XCtqwsO;lj5Wn|${bS(4M+&>^ zk43KhCDHqGJHTxQ0t1UCRe>dyjjp6fvsti*XSt}kQU&l}4yuZrF8t=i74LP#iJbT- zwTH;v=RNRamr*ZMc558_*m^sR;$N!R1I`5-0Oz~=NNBIMi;K1#0%U2yb&}Grs$x*8 z-!Rn)6P(28Q;A?p)~vc*ta#I>mTw(!MMg%15Kei~%wW}$#VgAkIl_)`E zq+xSnG11enfv$zM7T@~90eXC_Qovt~jJ`YLfnQrXrF&UTD!(Me5xO{UdDaUMeR`yS z&(>hitnhEvLj;SRkbs}w%N9DQB2ToHfFbX^SdyujB^K0~3m%LTo2d*R)zDIvM^Zc< z2C>zS6C)AR((#|{)=IUzEq`7{S_v6bBJ=)RS-JFcTYY_54che6BxPBNG$Nos>b^e$ zsdu~Gl;sf#Q8au|WEb?93-&t1p^Rm40_MCYU)7E-tdrb+(2sFmEy!|Ge@_aDPpQ<{ zJQKaB0R_dCiX;A6`2Zk#fa|Rek~jJ+0&2;HJU)MXlUWaBcgn5Do&3{iiD#dpdqlY> zvQ269wZy*d?3C9L@ZEg(_SC}eX#>YzK+3^7_hEFMIYN5MgcTtw_+N*)`G2etfGOTS zZJ84IyCGA}^@akzNXT!JOSZq5TsR24=?fs5#n^+ORS!kib#u5qN2g{COAKk{re@&V zy>AzIxA9{@^XnMZ_21I`cd}Iu1%NmN*v>~$fJ$Wrkjc85%Q8V$l3yu(PX*;g-iyK5 zgT>x|BQmFmzeS@_^LQmnQHX!1b!Q#6pn}#u%*G5kS@ZgI``DO$BGMfamh}CPr`?P} z4+$?UT#+Q);(M_V{pAfzCXWF_K;4WG)30xSCbQ+D5-2tyK=U4K8`%xC*&#`RWQkEF zJBvujT4IOCq92@?W8BDDJ}{4oduE&@Zu_gWvImu~UOjaD>IlL9<9!M|sO@Fhc{&KD z9C#J>ddEYHOg>CL(+2shRcXk0g(g{t4*3@aYxPI^dLUOXYvjl`ZO=1D2Q`&^gTR3` z*Q#MT`+Js+3KCT!h?;?in*p@YoI~HiKY(EzL)K zpX0>)o4t!gc2;1|m%~LCAi0-=CPnGhw&J+KAfB-DE3bhZ)2^3-b`ziW1TU#hThu8e z%B84$lxd$&%|fGMS)(HhUy_W;Mr4~NvgHbiBy@Cnnw3E-gpF4ek;`ZaFVE_skZg`SYS9tr#I<)n zx=kA7G&c2!tZlyhT}QxjAlA41j1$dK6UmADmzRynJ5GKRF9nI8RdAdjtmGFg4rNf- z<@1~AOZm)Tpa=Yq<|!yGQAr4J#V$PMqTTgac|Zt{l8Zq4a57v-{llCGs@^B>xF5JU zEJlnJyRxj)LlO<_TrZ5sz{M~N8YB+H5@;gEpK)uBHm!g53 zpKSpX8*Or`k0GR#N@E7H01iXKlX67JcC;AQ`uq!Jzm-{K;)0pjBZsZV;kK>vqUh3o zx?1>g7?pn!X(lr1$6p=+`b}XrtALWPiEFezt>D)Ld8`8S_QMT><86@{3E2+MDR*EX z&POR0iBWyrQp1^ryUyt~y&=PM2}zsPzgRXte7F2@uGI}S3g87u|H*)YJVAbYHn70N zxzOtA$&zPb5=lU?e5S-WNl+S$B+)Pm?K?@=5Zjb;HZ&ySAbG4XXPtec#d0v8QwrG) zE+xn~fZ}@M>Q(5f_W>F^{q^>^|IqCAz|@L8Od1)0{!fjp3=hp1h1pz`JDuY>O&1Jv z#*kY0s#%i)gaHak&Fm?=P;F_oF6sx}L7PqW6k6fHT=61&4kr)M89BlQTOZ&K8qxLJ z1;~dCr-W5gPJdt`iG2QR7(N{ZJlb|h06rdr1wECiYDVJc-+Pk;L2-&UfjBfc{JEym z+d)9Y3stLuNjAMg5=wgnYQ##tr9$KCaM)d^oh1zLDf(k73rxp^$NXwz7VBC%eRirp z-NzF@)<6jS&~l>nqMiSgh24{}WLX5hw}j_Ax}h>IoN6N910U_XxV9 z0551E`@ZuCrtF=s(H~QwVJ^M+;w4o1t@kot&`9?XHf3H9(4yABx_BcQy5``awz-{E z<)j4LHPMn8EFAiGTREWMRF;EM@Rmag10>vyt#-4hnHWKvDUzhH$?(B5<4Wim2 zV0;&>*JO^LW2=LHtf|y^wz|C|RjF4$NTT+8Dvs+=1BS;fD&tO>r*upC>j3w+X`YaY z$B!x7j?!k4-?~zqBonJgxbx`b^NagMH*&o0IHt`43jVkbbVZyM=usRs-Mtark? zLLT{R!hrr6JkS8bq8`*CAdbX1O4vA?Uai(-im_vLM4hC(&Y-Fd7S*j!2@+HpH267W zn}rnT!{Htq_iNUvt!VP^uLuXvah9s)I@|Fnc$Dc4>MnrbcktC zsP0U$*KbmqL4nT-kvCSglgB2Vw7}T=nd`k){L%Pa)efQp^Zhn7Ki%l2y6eg<+ktHQ zt8D&TR^gVcCQaVNxJ01?ua3umt{#V`yFRLP#x7h1i0Xo$Ha~q2*e6D2^^hcacZ90S zUs9e8^C2h~pV~#LCmie@4n+qN;TT6Hu~Tiasm&Y6;cu~zin5B*dpNaR1y`)l3-2EQU##EOnoQ_2Y}4jSP-! zNZmo=(R*n`go|K@8edCKPFVuPH=Dap#rkIDKl}R9cI2t1B4Hovrc7cm;oL?hIOz|-J&u&DKYxm$#e> z^TKmrYMuDO79pS;lia@T|5YIUwr|X&%!{-h#Yd}u{@SRie8|L1^xP`p;0*!rEjTilqR`B+0+^e>@P0@z`ou!7W)yVJqSv{R`)g7SeH%XEYn_2M zv2+l9sCx%Qp|`w}b=$J4nHXYyfHDN9nz;GhsdhHVU0koSsF0aY;8VXIsX#C;#bV@e zg;#As&_AUp-~#|34FONA^hfgJcD5T@f1-E*Dw4IFv(R)LT__EPVGYRrS0^rcE*qI3 zQ939J{(_?9JFJ_=V9Faw0zMeD(F#&~U%BC|vCh$)B`4z+w;`B&BiOmK3wAS&oHnjj z-9a^vNf9gLt}Kkk64;KuYopZLd$r>}&LP4z({w_R{;mO|re@NPdpqH%xQ51Go;PsclCB+yKtc62;%6B3?GG zU0$2D7}hjXnJWi1V^K);pw0MpL$PT-&I0X zG@G+~NbQFrdSa}t>RqDD+6WQ>K#35M)+z}%GGf1K*;5!b;Rj<5$t-=xTe%yF-B|+g zK87_Ml?RXttp9{Ow~Nd z^jN*BCDv0xFy?x>{jF5qHRD~NsWe(- zdF@|ZS~B$UH&hjasq4e%%T_+nWKkM-Z_{n;NvNe`FbzFC{m_pA+!L23G-OKiN)Fb; zzLXn_pU=Hl7TW-Hi4a4pIneBC(U$0j3!1QyITN(1;btC*62OWN-tDJHb_Gzqp@Zr# zelDy;eiJAM1TBDYtU%H4!C|7`b6giz-uua;NR!Y>+p|(fjB(EMmZ8P=*3tPK1_Elo zdK2*TDte#$pRpVbyj@-H)LcVkc$rp);4WhO@n1Px&DOEC@X%T%B9me#6J)WV{F)$^ zrWTCirvg4>V)p^lG%Z!6>9L%ih|Dj|R6xW%1*3YwohwNVAA|t|j^Z!Pnl8Aojpc`N zC8aB8zQ>q`^$6HXqv=yte#$uCIS$%?dlpQbFq3jW5hO-A47*vdx-Fl;wu`W$o^bx~ zc{{FGR8P|Mn}BtvLVScfQnP^(4s-@bU39Ac*eyk}BJRi3A`8d%o~q#TQGEvbv6&jf zP98q*TYbcD2nKOIDu)tBvHUG+f)`*&wzqsx?Sno!J;+p-xwDhHQ}qu1)}ST!$~U^G*8uj8PmQZ=qGwDaHJSl&?6kpl^h&uxy!GlH}puabmg!N!ulHF+?fBBJFjZh ziAY~|PO6PB9BV7&YWe^b6samYbM)0Ar?dghu^D!%teP&VCt_T-_>e9#bR}$1=}PK1 z>aZ^YJ^8e7BR)ZqzVsIa=|&{k2)w<$7I-&z1K(LrR{=z2PqP$qpg6_xcDeL1&g&xm zl@R<*B9qXf>=XUd$P9<#Q4cG&wfw@%3=Xx%|>y2AWiE;Wx!n8;O+wl{3THaF;bWE0&(RVOqO@df2{0t z%!wmZ-|1Syd#(YMk81txT39)7AMpYR4D!^ZEbq&?Rxy`L8f3xJoE8ArNtvMAy7SS%DISN*r z7v@Wk8}Zw;aW?iUXEf(tvF^O?aAj?C998YR_U@hG_G()6hJ}nfpvk z*W%so7%=o`z`ak_y;I*#)2mBcM2}4RY42yf!Dj3#YiM<^8p}BKmR6_QuNhB?0Oq!& zDsY%ORh*uYS(rcR5JSqmPf@(57%Vk)LACdX8h6I<;yiZZS!myKnr$pKVk7K;#NIGT zEq*Bki|Zmm=I97b0_Zs=3hzrGW6 zQ@W2cj9cr#(l5=H%h>Pe7iaK{7yp8e+zyx@^opf~nbe(R7~1-wE!)?1!k3wOA^y!P=#0c|>&`)YncXDv`B zSQQVW+nysheYvZW6?siAk$(~%`+0}adp5H~Q{?Q;&5=IVFib@?ZPx_d_63g5;e0@i zcRF)}+ocL00EXf-%4z>15tB@N1ZXm0>*eB(GksW$H%5Ml{;u_c{bkqeDJT z&I6_-Fw|G7R7^SXAF;3{2|1vI;cb0;cv0C2mh1 zA)9p;LTXA2aG`oL0hNM*Zp5$W^4_Th$5R3K`dyPNHm1nlg(6EXlm42;0dHsQTOWGM zzH@*E)6tMti1y94gexF;?EkJG4;7Ow*pSj%yL&jJ(!;>M@`~1a`zB=iO=f>PCf-de z2j5&@<76JNB zBjRnAj|we1KkXyhz&(oygf(?Z*m`TP@p+6LiV1JPTX(;<=z8J``=+(Gp{0U?n47>sMp5^KS7}ckC;N*n4yAD3^sK*Oo|l}PBbE`&}utdI^udL zbYNTlYZ>2bZ>2BheB;1)Jx~(9SuT`o1O+p4hOi08Al}!7LrM~sg(^Noa5^Q${%11h zpnj)+YYj%G!5ty*5Izt2(gB-}$d^d5=SzL??rE0u>DxQwJS!8kebJRs)|k=`IUm1% z66~xHh8g+^ID{e3Ao*q9n0rrz_uSSBU0WRhoW=uGKHTW9Q}rp8dde}RI?9@fbiZw+ zwk<|YHV%SCMi5XQ!F^T9T?7J#?Y)g4&*yspyV|?I^9kzV=<#~5-*i!+lf0pLtSjAnF?!K~Fy!*&M`2*J5Kwb6mNe}-+H9cRW=EjOU$u#g?Es9@ z1X8zNaLU+xjykH8kaip~lWu3FJZm=}gHt$*SgxI8!c9O5Uoa3wjf;L5UskE_J^Ni0 zangPqU#wM#_OntkAnVA?%FT#BO#3VQ=)8kEjc8v9@F5g_z?m{My0`u_W zV9j|q?y^)W%e}f26sn-Ee~elFKq{p}oxMzA_F5u)x9Vaz9*-mw;nPP74Hl+w-=L42 z?Gk*B2Ic`)7hjtwlqRn91&p^`6+iGA4>zY)C~bT^S`9MMV!>T72-dAwl$L~xxbvDg zK|bA`1$L7|Iq+iTn<6*6VP(G*a9^Fg;}0DfGAkrG>4+dDgzt6Zk1NIOugMK>HA+Nh zmtG#i#6W1$Jn5XX?XE;f#!tZKvWLTdJ_!}>|422xmSiBmvJYmT4}fogPpV!{?lWJm zWb+eoK1}i^NwhuCVog8&T| z6@u&1wa7V>R1eUg-f7-`lyC5z3D;_ajZdiD%^`yhml?saW(f5b)0h>IR3Ox}T1Wvi5>N9{6&hMERG&GJBWVL zdo)X}k1c96LBow80}HZG+7hkF!X=aDS~B>H%krU=sg+EUe8tRsseRoRtvd2n1+_bMP{`Y>H56Ay5{{`Qyge4 zL~U~0^T&JRZlWIc-RR`P%abN(WXoV_)w}osJ+7E)tvh6V|8Ut&NbNz(G~Rg+6n}xq zwx+&jBKa<4EOIB8(+$OJyoasU{&mtbcGH_s#UGfPHmY16>c`iTuiN5%?iTJ&Iwo(^ ziWNVt+KbF^yL_|w#br0vwFVhxr72mG9Q4mdZCt=2{y-g?T-o~}J=X3$jRm03;jwO+ zSOZM0NV#^n@r-t$_DnhpIQOv1GCQ8-8(SCsMjr9#b5ud)uq)Y$EAqwZ^9X%cawSzw zWpKa9NeXGYg04l{8u>r>h4cr`gOok0NwWD{KIb2_6mk3{Z;)_~PlxKSNru$n$QLGk4p*d?7?8`o z48E)U9wL7^2F<;M?I!#nrp6+%M*}=zO7yfCih$S64C&D`6E%~Dp4Hycr^SwTOf-dH zxga*Z#|EkI-RMc;&*)_|65uMpDVTbX&n6&A6!TN+5N^7n@PR?mRPul(i~P*==!KIG z;HOfx1x)-ceS%x2j8Is+uc2Iicn1zwEz38Zh<3k{eyPE2RAu%k_4MPNPAbzZVM7B! zcmqLf)790(B@v1Ae(qOC%?J3Y8xn)$$t4Y|WfLjXD^GY zyOr=976MtKYon=y#<;Z1(5m zd_ND8i-1LZc#hDz45rWKt;Q(Tfk={K!SZ5=n{;7*unB~qrcilG*zX7fN?=Erl~4hg zDkSq#D%z32%IK$93vs9>d_=U)7YL*sGJT>jT@G8(jt94n2Yh8L6dvmYTNjMS-#&rS zze}&X6c&3D!rN{>gL8E$nUjdvN5;K0DyVggVsRi_&PwWnVp@XNVB%as@JwIXDB$vq zUgig1sgcLk8@-Xqq`-G63;F&dW@W!+#OD0Q#psoS)N3K;xzsOPbmzZ6X_QyY#(oy9 zNZS)}jgx*WQ8RTCZQv1H`Q7enSVu;Y#dc)LaK;uMr##1x@D>*dFwFG(&RYd2*1_2R`chxSus>gc2{r`I+* z>GV!5mx_lH+!S4GbrhLoXvMeYOoRmp!4E{7#PsSR{f2C(tG-SvA0KZ#Ks@CL3#+_n z3j27ys)B$yc|qy|L!uZbk8fTON0o2`KF6W9tWQ_@~Lym3yTWiIIn@ z`3HH~luTGI%V-DHtQGI-j3n zRry@Xfo|blA5lb_?%UR`YoGJ&06ur9*sA+@BF9T2-dUC_A@m&RFeBrRt3U`OWlMmY z(22}qgv4htgYlDqn&Sl>Ch`JG8{^&DhPCXM?Vjw9+aVl=aE6bCm8UBk7g~UUQM) zxi$<%cEBw%Z3E~B?B?5GSq0+OY#c`L3y6GRcT@uY;9bPYt0CxmQAomXpMnfEJ3Hk8 z4KBr~sgo4xo~&rsQ!t9qT_T!WUnyc`v#`Yh$pOG(l!f5dOFcO8bMm0=Y3(xS_umQ- z`xVz71koX}A{Kr1?D+Ei<}Ev1P5jQx>h6N;~ove){#KAeohPF~-au&LVHjI~M#6cHp&h!W&rjUjKo@ z=$i6)mw3bmb-OOdWhTQs4S5X0VTE{Zno(?mH2Q%O>F(n%l-H@(^)M|ZG|L=T0WwMD%rICGWg;-wZ+Po5UV5=msN zWcXeCGjQL98j)BHG4wHF^4QZqX2iHdz%q<&k^jMz5@GHNX-r#;YtI*L`a7viPnt@9~53e2>36zZbq z9*Py3a%*J0|8_|K20qMdv%VrYc0P??kC48C90?Ye*^Z`3P&oOLHP80DS`v%`g7v`p zO3MPo)hJR>f|@<~M$VCU`q`oqmgn0I!k`X86oU_BBwxJa?kq==_9QreaW3bPgzfm@ zMm|5|mUAp8aL)!FN)t=$vMng}c<++PW%(frTjB>?u3_yAQ~1~H?@^ZCIwA!HN=Ca@ zkx30rIreSgW?u&H1c<7A3phDU7fbGbD%B(sQOa$kh%}MUFEOj3R5mz-R=ZHsGlr!i zg3LO)C(=&M+zIxFeCR1{<~^z7<7!+Xh=M4)b>TC(JpvYwFkF57DI_ z`H<l0a!;pyN1=!wEJjE_Y6u@l|H^#yyqBUP(IsV4 z^}KR3`^^|FC&vhBA$YUHBILti=CZ%YAZ^UGfbVOFYP z(exQ*T2els)~UPTPNZwhT=;8#*4Rs64RVeTXI?!@1rEqD^=EqpeTSb!OWr1o!pv23 z_fy(`^&^}b!2H5Z$S8hN`P-Lu1omwk;Oz_4ZK$se8y(fP){#aJ-dH$lF**2=+B=Um zn+T)1oRC=aEyjl9Wb+kQ50G*8dEyc)Yg*cTE1SXIs;4mdAaDL2+m=_UXgF)opM3(T zF`Ce`h1a5`l9V{2u6_s1=v&x-DJg=23|qs>7N1cUN!u!Z<+Hf%vFY~h#~gA-innMj z7zWFWYSwYU#_t2lm@BsMevl&2_^`&uAK8iKd{cX?r%s!$L$*9yW7X6UT?f-AfXkoW zg}m5>OiG8lrq`Qpbh2$|7y`29n^G{SE`lQi?d04(Qe~m0x~7)qfL4A4TR(eZ z2(a-u%eOhG+55bp0dD(6Ure4~BddY+QmSn$XWiw-&GD=}Zp8RC90cn5?Bx(smaQhNkqw zemuoHes=jTu|0JC5L0PWgkXHb#tJKwtzn#~@6x5LR6cCXM%STsZpq+~-}{tx(;Jbw zn=k@GkxPDvgkI0Q30JSEE`EP;4K!JD!vd|g|9my1U!Fd2PSF&o;JBR3W!UKZ@t16@ z{Nj!DF)pKZzHOAbgfCBTc)`%>AYZbRCCONgmBY7Z^VUYHD~i?cbS?XP_82r%&rd29 zG>N4qwfW8caQsScMF$=nNJK4iKdHBQJZ(R?z)*BKY6qAJ_crUgV3Kw-=50zzx8%Hp ze3bV+_v`aurqdk^0j_>sJG5SX1S2_qkLU#h=ou?V7Ff2SV_j={6u46%^8~))3cpj! z9-R4}GqLHST|ml~EB!n?Pp&wA?2t^%@<>F>4m=Wn-Ch$&3031cHQLjEC2V}|+rKnE zQ~Dv_U~QLRb6=+5AQfbWzchMQyC$-cQmSNXIQVGd?-Z7&|y;6G;x-aDj)p&dSN?V{tLQZiI$K`YdE*gxb-t8U)&Q>+0Y4NS)_7D z*$y<*ANwDmHC)QH0d)%v$4#Cc&4ILRxby@)aw zYCHU?)SW5ERh7$gu?42`oq0JN2YiLPH`18L)E)*h5qKh8+6N<(44y}hdb#j%4t5lr zY{f8;#lqO_479nP$L2;#lJK-4#5kXFavv9Qc?9y72H?9#;KY-Pbjv&IHScm;CjmEX zCa}~|w^O@h6LNJULeqOh4TiGtmvTGbt>9p`E-!Q0!$wEUiyX%}g==}Q)Vegxf-%~n zMC^V18c)En5FC0GYRp2LlCO)8tFpl`pBHHOT#fk(^no znJ-EKbz*4nP@=Id;_Y#^RCcz>7hQC~lPMhC)6ytnR_CmrGzoXXnIe)n9&w@R1v7&Xvq1w46hamaEn+O zQ@R?@>?*buZTwF7d!)x+%jR~iQ;t+l738yKJzlA&YtVVNBb<( z#dUli(>$nTdqO?v3yikD$DQ8kSo_U3IkMy8asSRV@LY&ihSfio)TyfpZN?p~|MR{B z%VRd{ZT7%K>rKG~xdS$%*KM{;)?m}oV(3~-l82pi-N16~UFgh!p4@I9%1kx2Fj|@X z&@013h1gcYn6htm$vr8;H_Uk=K8Hl+o>X4EVkrR7@Y7e$0PRm>(RNN}yQ`NRa9D|* zq01L<-^RfWwle*=L+W09$;wYeb%APy{mH4g+;7xT_(t0&nml)WV91suVzVWh1F*RQ z5XnUISqT{MCvfR>7=P+;adnZ5#e0XK7lpZIQsK+|sv{k$QfqZhH&c~JUt~QAe)MgB zV!d+oIw_4lALz@ygkkVE>`skEP(G^fS;vDo25&4fJ)Z2#7$t5_f2WUnU##9U?c;pk zU!B}7q#Ez=IXG+B^rtWAgTSYV9f1vV{BHp&VGwOd-Ul|@c}^_XNAJoSTe#9X z;=S7w{MhfF0Cm2EVOg$2hOLmtTc=<9+p|+evd6Xq6&WR46zd(Z=OZ%Iom2!)Vr$=y z;);Vk@_gARL}UwITi@e{nT*>sd&XD3s)2oZy>Fnr|nmoko{e{tDj%3j; z@Ux=`BkX`CvMTW16Br@hDG*U{B?ptd3Fm#$I*+Nt03>I+>I}tV8sdmI6T9@NnAYmV z6&P6*bm&CD$MPVn#RMR<*@e_Gvu~~Lt>!Wjo+UOP%YJ&U*sm_|$--a9OY(zQ-_UnI ziAoRLzg*CO2c*C&NOXiC`&YUO`;G=)?PnMAIyazMc50(m*rou%I2wt3*A|Ib1hx5g zu5Zq1+Uh&lwP=*(v-AEli7BZ<;(KCPD9Fh8l+@bEooUmOGb&ccHN3Kecw9b|uP7gc zrQ@E_sUKhCFUFowFZ&TJ8ocXzy43NYl%gAPbW31p6}J=#{Mm%iO&3IlBh(FPu{beW zIPn?Coi+f6-CO(r4rpE`T}ZI?nwR?YW~NLV`%~IrD%mAmYgc!3C1f{j7=CMug3wZ#4|XEOD8A-=zS+g@oVisAvmod&xlLZbNv1@T&fhm)tX+#fa@y zc;Uvr9B`mzP)6?Uhu1tqjsiPOY@lY0rT}7_2iVPhpQ8x3x9S|VQbTHC9I1@j^48^N*d;38YWOP{C^VYTai+ypu+nvv zY!wF&=n4?;n~9jLd@71jPh}QL&#c{Fpkt6_QB7i-sy7*4o)1YUh8nD$HB{ZMtxC|I zNL9XVKYqwD^?DkE?w4-!7M1LCe-o76e{yr02dryuBTJsUc=SO{vpAVE1e#f>c?NmW zcE45g1dlH;)o27C$ZmTC8kKyCP}Qm4YW+y4peTdspyf$27h#@uB*D4#`^wF?&GaI| z&QR&HiD9BYwRfd&mSuqLH%uSuiTIF?Bq;JDQmzQ}L8V(qynBED1bpu$ zr!ORbVx7aV`m|fWU}M-C>wZPOd50^n!*0hck4QRIV=|Kn4OOPfKN&eiCM%2*oxl^~ znl&u+W?X}~FRek7^YQwSzL1bHz{vg33$y%m-m!_W6_7u9Z#h5KeN6aLYfB!Ahs`}o zHaQmFcto!;f?>bpMcO&L7cJH2Etaxd5I1PEOZJZ0TI0*Gpm?;hQ_KfOi0`0C>{`Av z>$~_|L2llUW5*>v$$(6S+&zH;nW>m9%-(`ppfXa@JpC32)1JI=iyvw)7FmZ#G18!m z2<_})9}Dq#0MvZ{jph+{>Mi=I+TrEC1c|6QQ2H*UbPid+bauCY1)-H8ejHRYz#Ls~ zAk(k8ntL5QxaIz%<)izLWnu26CXzIG7fmc`46~3uH%~jUEbh^ESebw%TRRzhOaT`` zN@bUc8qu6(tK$wh#Bey@ZKD0(A1i-SLBWUO;O~#v+JxdSG%N9}*)l^5ueSfy2=g&p zeg5OjS8If`Hx*?2L8nU}qGemDFK&j~5069XFEmM=@hab-@@O;BKpkss#jT6K4o6ez z&E$r9yxBeUP1y)u*a6!P&(>(%ho5T=JJ~5I5X%?!qBAzIzWHXPH*Nkvwz;2OpYT1z z-6(WPww{$zJHgTT^w@Q)^et8TmA~8K0N4mRdi%j(Tj1)6x>}Z2wN6RffxC$n?bV)# z&N1|5o(klzP!QAJ*Z8Jf0@)8~w`9+s69y9u&?ief)dSVX& zP@*83{Y9tT2ct4cvFaKK#3Np~#p9JrWjH@+fkqd^b;5MzVE@3MO`o2F%d@6_OvCi1 zvc;X!tuW(NB;zDRXLMy7>AFtX{<;-AgVjFq@E1`>sOxUOVYznds*YZHWx$sj&`Sa3 zXE7H5t4z98ODPWbG3RAH*DEwIYJ+VW^t&GNpzPnjS_qC%Sk+ba4~G@fGKeMmXU)gdrC^>f0fEySC9<9jM`AW6e`vra{n$iG$b<(C#F{6RsOEP^1s^$kOsKsvig8(RqPZPGfou0dkqO810| zSA~MOy&*LQx6=nvtg9t8?HG8Q^$|sm4F+fbl-16;7 zd&83qzGS0+sDup_wM0dR(^5ULPECkBfc@nb2@+voPra9D$G%rcUuCRiJvt~UqvaZ|(6LV1Ie+4fq(9|n) z(JJbT6qXTYG6w`^i;-jIdcYR$989)KOPjUCEr_#^dBr)%u&4RJRm_PP9&epK)8w$0 zhspeqIf|-cTOxT6tBdbrb@>B`-P@r32Owlwth$;d0%HS?Z-L`y^2*ie=F>|n0?^Q*;yS9a9_^~5witu;oTy!^O29F0Ka+bh z5ZR0o)3_Roz-B_VIHK;q(e@1mB)eZg?B7-yw$g`yyl@00K%13>*R^{%n9jitG60=!~@)n}~TM)aq9A?<6fo~Q|LZ{&94iMi|7LxcbWb~|Z-P(LgCslw3a_T6C z$&=kvzFckq8N z?9FYje@)1^-e}nkR_Ym!VrfYUwcKgxi&~X zU1N_Q^rd%QP_kVitXerDT@WyaKwPtObc{C6+&2>KTBWj86>h5BmZaQrvuw(oP~834 z+C^5MaudcIMdd096zUnaT&Mi4OXj+D0v4xWaSMoVLattbjP5{2xARoMEN&F;Tdna> zJbwN=uqVIOJMEm?GPf$7Ee)wo+x&Axdz~$9|E@|-kUj))OMDtds-0K&kZxW>a{5Ii zXJ17c-9aQy5Je|ygO!^rM-CvIV4psQ%nNR|Z)tMd252oq=kw>z0pyQyUBy`+9t}Kh z)ARbXoY>KQzk3#0EW`s=k)fI=4H)TCjCx?ipsQq6@c1C#M?TxP)HE)6?bfhd(?d@?JRp0_xK*uRBn_ZCF*A;j+O0yyO39(dI8 zXwhwO{5;ar*O8q5Dw4A=LDDL>JP`@R(U}^X+`XYESz;$2m0Z8u+P@czXzlbm9Jvy#zkuZQi%3^5fGN&h-?^kc3b8^g&U6Bv_BNB8VlOX{^0vbT zt8N2fG+9JjK->e!pJ187hv{fO?uhAN_dIR~Rao64joMBSM$b-0dhw9IW|zM@>1w-K zHmz90i0HA5&`c9z5dfA!M`jt3yl(`tyU4R{cLwvg3tw?x_SHm$#R;c_Lic0O>tE0X z@;2G6`oV*Gz@zOv)Z3>7B#3v2ul^pZC*MVM^+UCDD4(<_QltZG&(*@c`6QClU%~$L zSDZt~s1yin3LEBDfpHNgZB`Befy}K+xmKZ6U#UHGob$Be#e9@j<2ZO^r62M)H;@Hz znA{AFjLGc2GW9HQLdLhj;uJEvtCVhSIjO2lWq2$$5t~I8N6x7wsHn`ArTsO^Cvgdpd6{6&QKt2J|$GXnTB_MYOmZ%ImPQf}|a(ePP?DfV8Xr&3Djkqb>z$+RF zBYnR1!md6k_bF6$HL6;1v>aTS0ZCDR#20*!;oIOMZX_>!Sh#AHgE;$l=WW#}n+2Mu zpP4Nx_gc5L=sDWPKiNY+@D|rbJ*sGVA#9Fi^!(JS*0qgq8cMBOs1+&`%pR+YzryOt zw-IfBrfYXx*0NcZ>U6}^}gd546(k%Suw0NCmTtwX%kY6M)v>=v;vcovO@Sv%GiXlt!Xq06GW&-n<$}|7{vxOoN zo;b&`?S0U|Z>fbhMyA9a8S9Y;mZuL9Uw$8}C*OnE{#3bIHR3yj-YvYVcMD%fa`HK( zCtpy|VN}O}4En1baPT1Z(TKh`W>hqR0|Xtv5$BeUvddM&>RJj6&o((^9*+h9asW77 zZ{4-E5m}sst;a4I0LRcBlXdN^vF=(XYi?FwA}y>W$%lyc??UX~hDbg{wEKm27kZ@K zg|-?>Qp{(u6*}8i1c(?wtTq~GrT&1xVhxB>1urFwNp`%9Z-KF{KD)exkQZoJBY3N! z;tIr416ZQ07a3IWUT3Wu+YY785^=85eXn0ex_(us`~EaQF{IWls@Cel_EW`XuKY|C zV=ZoI{iJ1UjZ-A)6QsP?o0VOg9UZZzK3%Yu0wC_YI4$HHzIIjp0}YQl2bqJ&U;sD` zPW)YtCEe{goFBfK2`F>bit?R9ySNed+UKg)k<3D(Qd~;Z3m|e&y#OBZE=&Mq%ueu_ zal)SGl!a}y@L2HZ8V7A-mxj+mCPD7?-$@9T5a|P~o_rValkcc>qm97w%uV4Oa&-@K z^J(nQzKrzbb)CT~*6kJeJjpTEv$aa1sec~;X@6k$u9Tfay)}n z8Jc!)LnQC2Oik&>5Xt+X+L&s<^u(qc7bsb_uGxB(=2w-9v={9W-pPPG4wRKl5pDH z?o`cGB>;*HfunBWC<^~IfrDq8t){KnrnV8=4I*+dX4^Myh{jqjJpoAtO41_88p=|l zf~!AJP@;pakv>+*AmkOmd*zD6=|aK8m)aI-SF%l>aSzcgRnT#D4>EpU%~$brMQx!* z{S-nGBi0ST%ylpD@^J!@*dP|0Ry~P1#Xfxk$-5GOaNEq#eto|H@~79jkGN4R=9-Kh z1jn2c6jg838Z^ZlO4|=t~LkU)bXh%ap;GS{;X7W1$cOKfGWy5LvUIGkMBV2-fV&g z#b9w$SvyWXjs59Yke+-VGP+gTF?0(Z)VjH2Uk_w5Y;Z@*Q+citdX9;-YgLgwsQLc7 zfJ6VCTSR$A+o1_?xSv<3a%hVUi-xXfiZ*0DUygCt8U-Yyp(M+?h1``Z+Wr)jehiU5 zRB3?u3S$4Es@$GFRzM=J0PM9(lbqR|%b`w|gT_jwA*PMa_;my6>Sf6ICOCRVLC5CP zDh;vLV+spLsb3Ja_GlVh(zrAqaH(GsB8ssRr@CliZC>IO+w`$s^JPc>90Cw;E?CzY zKxo1=IY(OE`60(1PR3M&wyA$&k;>NzjF9>9OcwXRCos z(I|rBReE75ZmVGU=%y;d7~Ozey;On?%F_umQNx|D(I<#o<2uTlHr%-((Omh2jspS3 zwIh^UVUM4EAF4wyjnmmj{rbec$*mQ&Tz~SB-x-8`&PrzR z+^GOf2s9t6XxA%rf98xpkIeJ<2J%^SCe8;}r#TH0yA%ugSydD(ibm zw~sGrQ`qe+!o!Zp25En3?3zn9q4#FrYnxW`opKE(;L>WGxpaL5N>n;vk=zH6KqL=T zKsXp8y--2$V1P4NxvIUur1;aB(m4XK(!uPdt%xjuole#K6P-bd?B^RQJC!(5>4L=# z@am;fwf9WFpcYrEwq9nC41;Rl<+fv+aUaE7Wz91YR`Iz?GEstJW=6_8BM3*Dlxb0nnBaKPZ8IIDEGH|rRkH?Mr3}&$vf+J_Vb(3viN5?J zmz}oqKvAt!@R^NbJXTe* zvwAeoLId#8eh;KG?htQPI^9R#g4q5Dw12+QUWdoxHP^#KUZPn%!V)ru@V^R?bk=zH#ZO^+GkntT=B(ZWM zE6DY0+Vau0acK$}=KZ)cUuVsLW|yQJd755gRSzT*)eK7+~n=O96Gm4G$bER?DXR9E;3B?GB1{RNUP`h^5Y5)li z10>w1logheBB)(zB`7U?&W)`lH1o`2Q)`50n19Iddej3F9ZxgT>Otj{u7=a8UVJLo?U+zG+Z%MS@vrOSyV!7uN`+5F zWdo!QHu5`SnOinw&AKtCJJsyK(K8RZyOMnjmbsP0_UQ4R1!n7nODJ)nGYzbfEOTIK zQE&&|lg37>`75<G{-8#nj(%KwD zJwT!qma;oW#X>S@j-T2;Y~3KZ8t7iKmH@If(7jkc#*TbB!?<9}Z+l+6xeoy93vd0v zpsh$V)f`x5ncR1*YUX2_p-{f!z4F;9m)A`s~~f%O1q3>-vbX= zk@{Wqrdc_t;;&!Ce~BVkyi~-LN|unin?!YN6tP%-tQ+j1_a6&zn4HCSZSn;qruWk` zA2^7kq$zWjQ~hMt-8QRZ$E6-&wYf{fEye@4AV_EcS(gAr#eo&^9~SV@2_V0EJpp9g ztEXjkMy6}j4sIt99%D&ho(Lnt;j=Zb%EI!Q*rJdlm8;8VKq7K5Dcm)vve3}1eWL%} zm7zrasthAsbK@$HJ+7phwo5xbC8Z`$oG)mGF)Iue1nyBz4Ek+n`~}s(BSEx(2djsF zfcWD3ssOGReMMP3RxhZ+T!XuiOMwnj0k%}P4pEVcyOfr@l8mAT zDCO9VYL#*6*}B1AdcHs4=s(~5`SlzF2~9d0lM0ZMTemAWaN+}4{8;Uj2!ySf?W_h1eq z~o?q&qWhjZ#nuMJFtEjU4`4`Vn$aQXl~5eEkIKO1fmG5=o~^s zrRhh-f28uNR)DbY>H7iXx$|Ff4IqDh4IqOTdw)DSgBQ;*_zu0xFebiYIF_VgspyUD zGPs_w@tx(-_iqj>bt_3`4arL!gdFihLsPh!wTEO2dEQ*v*1y|Tf~q41gpp2g4q5HlzyZ#($ESVKLfdbtppyo zRjNvI4IZ}8L9NObL8Z(jUAQmHSeK8ba!`0vV>5(}YHXC-K=C<%gFPI2Ou*rGUi1Yd z-Q#>NDDk^FL%m67{MW9r{XTPBn{>>{RDKF-Y&%tc*A{n1&F2A zzxCkOA(bAWh~19|g0XnV`-NGSC%rIRHs-jF$$w)g*X7fn~pF8w<{W2?95`LiahgF zQLa^Xs~zHtzr^a{A3;lJkFx{rNuw$9FowW5{&HBPvO71F*BX zqdFe4v4A`q9kSXQl}vRQfF*s8m6X-0{}pv~WYGgh!NweM8a@HT=W`rkF}qQpP6rb^ z*DdQig1Kwi(sZ+_7Cf5-4cs$x^I+YX!b6KXuB++=t)nwtb4-1b@*ey2Nh$kPAAE4@ zx?BJBxf{Ri8bJPhu>fzTBU3?$3dq)MBYw+OJOFFpxcOcgA+)sib6gukkB-K#MU*+PKhKB??xXdxPNgdDT$Qt1`EAAoW+&E&{{J8 zoH4lT)Yw&T$$y@^#mJJ9nU+46wd--`b@~+PamE(v=`D<*+8opg$us~T(DkiSh~z$2 zkNybpqi=!szW~X{>SJ*mynYeMjo(z@v3gO*cnG6ng>8#+E3D^WAv6$kVZEpTa}`p! z&2_3146CkF1!%|$aG(UV(*nfjiqlvQaM<6;bpnp%1IaijaRDiiZp`yg zD_7>1Ca7}pS|%*jsfKAFBV6gi%{klh3<6t zHkstEGIjS@OgJwa-l0JybR)%zr#(N@xZ?ylcn|fuBie0+NCAodS?w~HE4Wt`Wty#D z^ThGM9j-szxP}6i3`S%%OIQB;GO)0rn#l&m2&rF5=X{{ z>d_yndLGF~>bb=Y@ajdRXJ5kp_P>H$y`-~RiHgOnJY8fpFPiX+0xl{LK^-Hr3@Y8> zncY2w8}F%HX9HYzrz#cUWRt$O6!kg)M*tFcP%^ZAc3gVYJfP8kbTMP~10T0-H?@AB zh!BYlVsQe}v44^i?9+>y`xTpQe{lD6JbU8{jsfKIFRtAHb*tnanyL;n*qIOYj;6V) zxTx}O5JjjUb~8klJlZ14dSFqf)KHsyYh zat&U1>hbncN{v0 z_aZA7mC^?5zZ(_aX+q%saf?mSPAeR(1BrIGg4{wp`L7Tk|9jBYkCeL=Mc~!T;PbCQ z-ufEk$u9w7tz$fd{n#-wDwJX|+T7qOwPDIx&$MMD`!1t(=g;g$jubZ7?STO}o)#c6 zIG)_z!|3_TJ#2h#TfI{xDfL=l)JB=3-x8Y6R5V4CL?bGwNJ;5f!PXq1x|`Msy5 zX`kc1)*TPpR`;j(y{jUKlVE3Jm2_huv3{op=U|%fM#$Ow;LeOpZ5g0+VMVIfIVs{&y4#UJ z9_Nfhj+a3QqxxLLAi0Hj_)Ulh{|UJIDTue=_*wAD=fJmr5Aw!8(clp^z@sfDrnz`E z3rZHpW^GYvdWfa1|{qyo@GL?A-jC%5FjcEs)7?741 zR7y=noB+F@Bl_t720i&MkbVS2cfco~hrIQBkT-q<5GT3CgS#r|R*LJD0RuoASd{OJ zo9S=6`&NBNZrIv!)UXkNBgjI5#O^3^edz_Mn>_N+Hfu)B7DDC?rs^C;h(#9v!ARs4 zQn_m;HnD(@Spnq2Gl1}d2G1d{;jA5)7x7$ton2mNy28nwN%$OOH6!xaK4jc?N4Grt zObE~dBpqpLi>be!23AzhK%&KdBF49ZRsW*y(Z}UwjC;PWDw#uW5k34bi0=PqAbAf! z3|_yA^!C>vZ~k*g+UOIAQXeikI#mi5bn4$9KRKfjL6cN?|jR4CR?OixFx2mtTjfC1z#} zz!BtnfQjoBbM8LP&W<)LNNfQhssj2603eau9_t4W+@4vc#=B>qbqpZe?;nX`&?ds` z+1(rSX<_Gay!0?Hu&wm137>tGoQ|0>u?p;@2$c`(+LGM(rq)d$hxcj@AN56wdx5k3 zF9{)ch#vhhRuBIGNH4(gGf2;W3+eekfsF2`Y*&LYG~{x?=ErjX(d_Hp`B1R=F!#Vq z84p1Mm@NE?^Y(DIy8GUYWMp!@KrA*8Vg+W_u^)+9s&~VUpZag^oPNeNfc(vJ`#1AZ z4IKBy43}-KasPT8KCd{Wm4=*xdi%Z!O};gD{tjGQN!;$dv3CIR18u{*WK?-J0zjNX z?A}8B@V_9s`bRJ#q&I&D$@%YqBW3ZJ>eFE33C#l;V%&qr^?;2496qJYy)fr33B|9!m~ZAJ%AJ+5CB1I#9{*g*f*>nZ18v{wvy^^?wo$w zEr48Z|Mm!&la8n3^RcwW@?&BAFyx{85_x&A0}%r=JtG~sPxHdY!r1E=07&Vd3{ut1 zAt93ch#!6vV)t{%^{YtFe^Y@6Vja*zmIH2RNwZ(*`k`a#pfT>iqo^$sBuJ3i=YJXn zAcRP4AZP{2d!%yPQ+#!JUN+qbx_$boV+D};NtZpxh`9Gb^5q(KM5a*Ug+DVb`h475 z6~bYxijzWAuAiM3J{G3}NbxTQ*HXu)h^~Hw`0=;F@pDMez67~`(F{CV-}MOaFtT=7 zWM?@-&hADj#0Eppb9@IMc)kc=5hO?uM{C01Z(3qOB3eO+HJDRv{gBq+(LLLA&q23N zKIs}j{^0;GVeUy*czlv&?}+dfB7p_fQ=wQo^}8kgpdZ02t;BH zq6n$nLUIcCuCQGI^4fI(kcBGgvz^~J#LV#uj?rE0xEB0=%gkZY+xAbNeE2>=bB=TJ z)Xj#Fqh8R8^>1jxxHL%1>=Hcw|Mt$dw~-nMz#iwVS6Xp!2=Vs+{}cj&1Ud->CnOMU zuF3ErsW?iz*=)x4c=ma|oi6HT$76e*tnF2QeHz&S0RIBANXxuQn)btQJ)d*{$nZF2 zE+BW?ZwpsZE%tr{JN_+~`o&(FcRbINyLJ_mm(JG}qgbfPu-Z0Hq}rvmz;VW-PCk=U z`C!ozMoeUSZcnOLptC;%0DKF`lmGc(T+gyhSypMM_epi1#=PBp{0KEXcHLfmV=W-x z_1TWakJ+s_i4}DFeSpI2KNWEW zVaWAw%iU3-9h3$d=}DMWxrV2M87AGaO3_$(c)EJ(Sl)}<=YLNx^vs^C9gY@=1^~33 z$4|W-UD6`uyh{7WrB@@D#f}@nPJiNN^R=yj+--m8q~RJ&03sFdj$+wm>{P?X?GQVy z^u2PWh?U)}Ur%Z^O9J~8$ZBkA? z4g&I(t$^HjBOqr?AvI2BQVHEn+6s{bxyICjzn2k(`yp%3-MlYDGrhmVKSm}gR z()MYHSO7q12{{PJ;`ri0O*;C=QOh5XZZ=<93&@ZD+bg#!7Asy?TTPHTc3i6#k?o6| zs(Y7;p3>D;7N5SvwC1x=lgVn-RbG}I?I70?4FHHHAkTkFlE~sX!tF-YizSxJezg9g zQvqqPZ^BD4)1){&t5}Q?=WwT=IV-m8mLEwceb&p8IH~XrrOEyd1OosNkQ1L0NjWXk zK0O?VK&vOujRj=;@RP%`N}64{w51&#~JG|xrpBMy`EPb$Y= zi)0-D089{&qkPzmqSO9L0Rj1Wwngys?K1NMJy_?Ro#-~tUvbnX9=@Zv{G0zi`B5YR z0Kn;-DQ2VdxbcM8nQma9kG8y+|rj>NcOt=duLpBX-jo005K| zkjqDCn=$^?%2+_&9|feJA}n{4IBf%^4%<#>I|PVaub#_NWHJH(0PppP-FW|M^~PF2 zexVVo7ABoc{@uOjB-7r3Ma+F1UH2Dc8vr1FEn9Y;yjp!~Eg-)#Q97~9^53+h_$o!y zY}?*>pXzRZ7JUf-Ah?K>pEs{opV$h>!~VB^i>fdu8s(rJ!fOH9Y2I{PNcI`?o^u`P z004+BB6a80&GNOifc)OV973c-oRg|3R>-M&_wRV8&e5j<0Kif}KDHK+cTA?utDl(n z7yBq-4SZ*jH!0`9DT#Cd06-bm%UfFk*|YDr$6grvvE>?r=`y69NJN z0EGl(VJ;wlP=rvBP*WpOb-IYvdZvVjO@$2r0Ps|l<#hl66cFP61137+ z?BuFkgt(x3%BtvLB91^z>lnm$EH`CiPXGXi=+6gfb|v@@QAp#ZVC1FiYU||#^{@fR zSi4%6j2be2>;YG(oh$(a&_j0{;9_8>+A*)m-2OkS~=Qy zfh=w8>|G=vAP@)wvbUCi7z%0dYPiYSytG&L_ps6Rf2L>U?`S1z4Uv+>7WWlHG0h;$0sJphv>{d2SgGZaTWKlwiVNnSNvBe;+q8I zrI(kR7!Qw+j}Nzx0Jp1$9S@(Vs3;FFKMy}Y7orB2r=N=#)R)V}li{zB|0PG>#?#8f z-p$M2)dloNF4WT1+e-oh`J?DR$G;B;b^DJZ7tepeL%_)63w7h+fcXdYKhN}kEC2rk%-ZTd zc)59dIQ=s$)>b?=PBzXqE?%Ap%=rFy%&e`%Y+XH^p|ai0Gv{QvCV z-(Dlk0%4Xs|FO&e)%E`j<^PeJ|H1wLi1@!k|4%BBk$EDAAQ6f`f%= zC{zK9k&D$pg^VjMbGwM&EYoSiK-(sTEZ*SVfsPwowSiI1K!u$pmXQ?)7&;Wb4&kgP zq^|pUv_c(n{qbjBPVn8xWZq|i&nt+J=c?PS4D|T+sh#ZyO`&t0-00}L` zI3Ws0#Uf%*Uy&#Q^$$g#P=JF&T^maB6}HHT>^V%4d>F@;%ai z{nxIMw}k&C1s=9d9+UHUJj!m4_Fp|@9EG3K6AL^7isxMZyH8PB3$Zz(%h7+IgHy;RC>UvzZtR!@x~yVve9eeB$LIk~%x1AC-E|+RyFRJxiF(bPeM>aI}7F6)geA zfm*64E^@R5I9$+4FN~;e>DluRB;kKdXH+5U(8xkRW&^;O@%D+zk+;FKbD-?&m5S3I z)DjB9L>VBRDCC>!mt2m+K>Rp1ioTG>Z_;aBbXpP zxr8VyAgV%)d?vxBNg|tvgiZl?n=$#T)=7AkAKe@PT+?SL34+noPDdmEupGKHPOO@4 zHaimwWPOkf+qHyQ{+b;)c%9+i!na0Ck=ML?37;irM~40Nf_O-HXqMp!LgnuHNAvN_ zdSSA8sYZV_3ILY8Cnlxr*mf!l%vd1}Usaw5vu%_qAh&-oG<_orOs_6eEAo zrLti<1C52*Sv)K5&^R!9xquGduA_1B*1UDu>N(Av?gXw`%vO8dMpP6RMQ5HSw2Bnn zT=?RaClJ&JneZs*vimLHO5pz`$*2s1-{|n@e55jL0xFwGFB74NSWuWz0*Li=mA(uc zoLY`9Te(=|sx_Jj3?~C_wjdjcN?{nhzoxS1m8Ue>?v7hW zTgJ`0ahUa^gx~>o9Zw8pw?pQmIY zU$CrSUXR`k@`Nr+1$Vstri^z3$JbGRQWE$KIUH5dGM%YB?eT+`Z77&8Er-SWsET*) zhLe1cDUoQYny^hKrnVcm8`K+3)WsR!`2wxS(?iM!i~eAC#M)2)?KhXtLOkJ5?}p1S z!|T>=ss5Vx@62Rp1Zbr`{v3gG71SxB#$A=N+HEHO^2qfRa`4AMI5K87rGRK;p5br_ z8mk+zyb%?ZKUzxn(oF?SProjxw+|=^)>vqstgGAryHH}ki?=*P0k-?=bbe2AYYE_Z zTHv|hjPftl+e{=o`=i4Hlw1Rza8*`pT$qDwQD*|5l~u&Slm{vB($md*L%&ZF_nRIO z_FG_JvT;OL`z!m)DVv}zYJ_dC_IxIN7PYs2xJ%Wl+h!cHz9~iHMDfFowyk07_$EB> z3wB_1YKN0wRPo*4`KJy0)O`(bIKXkJPq($~AUmdksE{Z)uzz z$d-%Ylu<61Yabr!YvRz6az!SjD>}RWH2?nQlD3Tk*l#}F)ulA>`&MoC$?atWMWv;F zmKERKIhsuLtyWLg+`d>|FSnM;KOSscau@p^2M2_1QzZn0lgXmm0Ex7%BjL^1PAcx} z{lux(^Yw!4ND*_VhUi0K7ja^_A^8EweQxkg4}u^+$X!I*i)6(@kHNXqf}6+`Fp2xu z)2rJkI=rSJliv>eXq4EUPo)2)+-ksSCJSI}jD8!f;QZvK_R5Zcp|nGG?d?+AguBGm4F!=t-3P7RflH3n8-Qy9xezff%}hpsihV!n*YK9x%#5Qhf*t};X^*w#!(pzTC}dH zv7)fwwFymH6grvNAR{?ZLNE=TGtR0_lQ?f7oZ=7LR!w zXX-36!A1;)s%oTX$ylxTch}6quC$Muy<5DGuAKg3F=Lw7=9T64GfFxw&h9qoa?O*G8$O^Xh`EM_zTTi(>j?!}0_~FW3Y#5=#w35&4lUjV9 z(s@%cOc2pu<4KP9i*YQ_)z~0Gyuio$p2&oa>JUU;9V_{6Cj%hDyv*{Yeb&?Bwdy-GWeKwfJ5ODXGOnG(S4dlF#56s}6)m^|1A1XK^f7&Uqd`9U$eRvRCbD$(*m6v zco%a3hwK1}2zId8TuQ8C8wC}{`Hx90ue^9$wAU(-Ax_$Zfo$6Yexi#3&tfKA)7CJK zWX7nGSzEUxs32eS%p^A+7B-uvF-EW3JN#eWAj<>(YV(-+P97K_-Q9C#fyEB_YBU&5 zF-IgjXdzO7q->j4K1L&}g%U1i?Pj$GOx#=rfSr%J3yIpkJ2U=}8Cv7ZKO!X%kc>jj zswq}>29&z4q6~1c_4u+xao;X^FM+#2a=sq_D{L&@Ca zi9g3I*?}d?kzW%NDZ*eRb@GV@aoHq1W6AVT%hWs6x@fjUm%n3hrQ^HV?+RoE z+7F!1Z`Arx=mzXqGY@?6x~p%^TI_bmt?+q=?rT>@x~OIyH##B$Llgg*4jP=UZv#5s*!?#h~gvfL?m-bORXst;1gFzxhctFNqY-`cjHz{-@%I9bN{Mc8TDPu?rq44Amc zuE8tfwfP(Abb_Ow9WYqcLQyZhXnr3ZXwdeS-}{|o@px!QWqGS#{x;Knv6O_L__YU%EW?_;99(Kk$@r26H7CIX@9$@<@6)$%DiB`uoC*zu6wUOihIf2Jz1 zL3~65J~O-2a`oU$pcJ}L!GQvvGu7sAxxop~WGf%-^bS9niqFXeW|=;$wTgz@OKOX{ z7@Dd9C#8Ky#(%wGRzLXqk_i>A?#-+TED0_}B6{vCkBVf4CW{D=nL=~YpJ;es%FxP^ zJsQvb-24L6(KeXIl8w^yT09F5sy^%P!qbRz?N}>*)icw$nO=x`35CAriD^bhKSB~r z+IbC(BK>FZrc54W5YycJ$kT}RsN1(V6)(eqmGG!loRUoybT9+Bj>>Ms=#U|q#>YZB zJVkj}{DZ$z=e2`|QKhm%kE1K-$@^Bq0*!o)%*&5-T8)sO| z%g{}ucobD`kUYd@s^g7edIXjA51Dd@pG{57))*fLlzPIy#7W&gcD>=v0H4Wpvdu3a z`Ua66frnwqrm@|z7iPy9YQf3YQdWK51YftzFaiGtdhn3*sVIc4o|fj9zktn1$@)tv zbCFaP^FillQv75w>p|7S+UQ`~sZVCHHf5qPMvobeL3~KHA!u=h8uFCAMK0d!Q%|d* zfSlBLvnHA!rY}XMh%)ui0$N4X31gEV-61&CUryf;^d;KceZnq8a{lLE;to)HsDCSt zGD=Q=m_HG@*k4c9jT1EM*Oc`_lmR9PNL4`s@1wzRbIAG=(!XBQQU}0%Qawdjbp2uVZ6iZXj z$MAkuRq#~hvHEZh?eB1bc~l#Y*;SgI+qPt)Mw8v`8|-iJ=%MNl6U*(%(aqB`mozP4 zN{N5m5|`_7@N;f3(svw!tEofFZ_+V*GWp{p?2*=#H&K|7L3yKih6H&W%%9m#X6ZjA zo{`!3e|^*GhR5IlLPY9rX2qUAHNv543;vx=&vvII6iW`=O1jhgxHAd@Wfp;o@g4sD@gfZXk1hz^m%jd9^g#u6gpj4PS zDzRIPYR?Si8a`l~5W^^>%WBH%$Xs5h584D3DOfi{J+1Q3!^uIL>4ag(8 z?S3Jd{ws3?&XqDbR<%(KkllY^R%>@XxTf?uA|JRP(fgMb6d&H%wcH_(9-9FG#^^9O znk)oTJ&a5YPOtg-P>xxplH;CNmaS^MpI4*nl!H^Q{z4<3wv(#4GnJdR;Fk5_W6=)E zgo7BJQ4nUso7UYWK**T}7M%;0Z=jOsEP8R3aLvE&6&|p|B5*o3}mo6YGoy;zgG- z+tZdn_`E#EEFJX9pxZj4WTA;X?06?eTr0KpijIbBpzB*Y{7}F=NN@1;>r9>rjWy-` z!d*19Da18U*6%O8n~=wd4#ax%*pwGwj{^2ytdmoo$I)?MNtKHMS#Y8XZzA|1e!85) zHysQ^nq=Hk#v7BRl&`#1c|U7|PAJT(X(m1RhUO*;NFT)2PV+g7yzKCP|J70ODbu$* zX7A-%oDOZhd zJKv(g*E)N_Mh8f;%8fR<-khvJopWsCL{!wTX)!_4%3pY3?iDy=vy7FwowQE4b>Wv3 z7tU>&fHlQ>*V51n!^?`Z?(X!a;)x#yg+l19WX7+hzd47{U6o1I;Tj&1a}9^kKf(W( z_A|kcd9HwK*R_>4IQiZl)&{$t-c_x%;w!^ZOxA7jR5TdEiT3NI^%&oN=3RxCsQHf@ zD}Qk(OfC17qo^~OWDj_{*p4T{F5{mZ6My>ivp{dY>f&XH{P?~~?f+bHLZ??-Nn z$HI6)?^Eq#l$OMB-6*C1T_}5HJpMdGSe4qlrgTQSYzJZz!b z(kk+>dXQ71Aq`km=z2*Vy=K&Cb0n{J83_7ovtBNqZCtumkYlD4>=4;^F)v7R ztcWwq^?v`P!TWE{RQ6$)$M-Vy?hpqZAJ*|dsRlvze8Y9BesPD8=2fKcJ*NOr zAihXxn|v*;?C6(j_&E=WHkvE|6Ow=mWgs(3hG33MQlFah3FrWH$DU-DKS@at)YMTz zlQtDAF+6+vx}!#fr7HI|<*U6M-cQ+1rzgLEbJ^|%arOl1img^X`!Q=4yUVnj_yNae zuloQ$H9>N{@lQ%SG!}Hc;-^Q8^T>e+K_5l!2u6XV4X;74r_z|l;Ibd&kUGj;u(5o^ z8f%USkGQH14KtB|t+K82fGqbM37+ztTq0TQ(Gaf#wo>Iofzvy69gHDkZu?Fy4*Ef* z0foX{E4>5>A63_onj_Jt2eJhyt0D}ao|;m({0;+<{fUj-2z#wZ-A{SC4=AM{)?Cdy zft-f>EXL^4LOk;OSbTyIy)#jVTkZRp^ha}f7^%!6-3SFvIEac@sH@e`v@+d0Z`?1{ ze|}%PD!lxiMLEvLROUrqUtq;~?!ld@4Z(Is))S~Q0fy`QA08d3Cugi16Wt@Pa44)a z3Cu4|Wv!2I)y-v&*m>ZHzO=Q5%4EU3GPS4jYI`Xl$PWuVe(3PWO=KiYAK#pBjBode zKkdhzS%y?PSJ4^flFPyn?y6**QT^mCF_rH+SsR!|$1)_-lATh(T#$=1Kw^Buz&}~# zdgP*w-tDAvPJ-1U)T_{tr0q;6t|JO|ojr=Z-G0$T0M9!lcJsRR?wJ0*YiiO9J@fOZ z4cMy^%c%7j`U6ps`&a2r{yyv%CH3W!k0E0sp?ABk;+>`_y*k_D=cje(GNUJ{8GU7| zd}a$=UG0S+#7hx>8mK@LFIkR~jT@$nK_okL7%Iex!<>xasCH$5#ITfn7{@3Qoy&Wk zv*vk{a+qO2Z#KKMdfZ$m?iI=Lb3?*G67kw#H8D=&s)t8X6{97J$t8r72aP>E7|5s$ zNMs5h(zi)_7Nur>bj(F9iP_t8eu~!vI4wi~R_yT6Gnu@&HTD1i_U4JDlhr~_Y4<5V ziBd=1_{KV{Djy@BwI{T~u!BqXCei1m+ph+mAm(#6#t5$7ueP?U-}$CZw# z(a}BL?u)1Q6Ojaf-xG)#T`Fj6Ci2a=FhLH@3+2iSP1kVv&=mKE(Vh=7%m|R%Cc;RD zT3;4mCdezEK@=b$dQ1z^SN;UE`zl*CUf1_+w!0l><0&B9EUBAcBCcoWuA zX7>7_#)paHjvaF8hcqVSQJ_exf5x1bCpD;y#$5lQK)T#Esw|RhHkh0cDn!&O8OJ+D zJU2viWGKq1wh2<<;~2jzp|jOLe6>m@Uj}_@GG>A<6dprXC!YL{yV!8~bo&xXQ*8SS z-Gh*+6wxJ}%lEZ#9*oKQA|^nL6Oul;I}{N;_sUOO!3)<|G)=k;C+VFRD!&x3(Df$- zP42?pY^vuB-|^fc?Ec3^bk>is+ZHl-jUEqWh1-MmctH|7UuKd@d^Gj8gj}-{p)e#Y z1~WXbCQ?e*pWzI0F0u^E*<-mm?ftm$tvQ|RO3)bB zEVv~(_1nG3*uLm^_wG>eQEtbGgKx6RhW^*3!YZ$s8{>SQx;G>OMy>}oPWH&EKMS{g2$dvEJ znY?}-@B8g#Ejvg!ac|F}GRTF-)C|d!N><)f`2eo3UWB-TH=r?LE_;L}K@?<|8&QK^ z4ZbSa1S;~BF;3)d;0Qmta||vInIzrV6~-ZZ_7rwd$yH1`QmL|$9nQ;&fjTVt#gkJ9 zH9#W)Q}u24Jg@=0N`Cn}*n5oQXSsR{MbQ43goxs0;D{I!&cIqd_ZST=)B;I4>`sl z;NF(+3qt4Lmnp-8RlFeSlCQXwCSThRRRDsSErjCSg7W<2N{~9i&2XZz1XyETb(e9R z@v3Io4&ght`)Zm2WYBfen@S_*WaWF&{o5$Pt`jrTmgcdY8cmJnxhR_nEPvxftR>;O zG_`z;RuR~TeQwEw5yn4Rr7V&s75B&2sEOQgnO(QXn(*$Qjd|irolJDnWo_UVN=d+a zE#iGg$WkidmEbu<1&i5!M@6#x)+FQdZ z0+sqK>y^3rJNO&%6o&>eYUx32cCsN&19L4G-2V#j7BqT-&e%-9J?5!2#KhZtWklVvh-fo4&O;}s)K zpZYA22O67)bKl-7hcefZZ!h>1CMb@sUrrb-*{L{B=ieuz92rryt=t|c)*$I|Gdsaq zm|AeOICY`t!f!NsXTbGY7@=JTbuuf3SQmkBzT3N*3Qfo0oC{N;zF%v6n&5>*_&Km7 zlAzp8NB_lrRqgUQ4(M?g2N|@hf4q2JT%*o|GQ6C80M_oZ@<)MHERliuzxc|%jJ*>5 zSY<`~mgqKi(4Bp^*!V^~d2@A+_^SpebvwmK9Fk$qB+QCL#uVwCiB9XrwH4fKVm-EW z-0__J>(cQ>XV&t)WS)q6Ge^h%kp?xRdCpRD3TPLHI;i^R+$oG3HS_~2hBwVqL|&U# zEc=_}bY=lwwA~>NsA4Ori{07`iKhNz+H!xdRRo-w;wLtw-P&{IjIEnkpVnYT>d^-= z7p(CEF!PCN@QGkp*+gv>*#9DE z$dj}>WdD|23bo2rxAu#Rikfn!ZjL!XeH+!wtQ@IAZx2Z1t$h~G?ZHF%3VWz2OWqw%K*V|ffN-NB|9RH2cF-H4-$nj4 z0)%%cqdmXw1F{k%Bd_$E*?7t>>)4;}o4bq`viB_?D77}DyDLzBX<&BBZgri!G8C`8X}mN>X4N3`SfFr!8&K%O*^~Hkurc5QfEg2RYQvsjiES| z@X}~`w|Su@bz4>I`%LyxD)=~10(44)&fF6Cs~k<%>2QD7k3qg^T7Mn*8ntLI6bM4( z=aSJ}k|5QrP~*d~Gi7+s(I;vn#Y4P;1Y;;&(bn!oN~%!&hZ)io|k2 zhcg98@0p{%Dv+ArvX^U6CO{R_yeZ-1b3E2~S4bgZCMN(t|A^$FfL-Y3sV`%Nxs^u8 z%^B&dzHyi|QXTHDLM|k~Iw!^8Z1kn)rV_EHTj=reuC%zIRaV4_kyFlm&j&6#E-{G>XMcwpFDMc!LL%TYq^+rh&u9LyST{n)Mv|yMr)qB4RosR{yy%5-@o*dTAfAj zx%U-Vnss(dRSVvmVZ3|mB+jdpkCI^*OMHKtd@vG+O1kfHdYk9B=q z>@RI@8~6gNuoR6N;Z4rJKmQ=LryiLOE>ycVT^Ux$y+Pm2x#MiwouVai+w(4V_Rn>T zc04`no&{O$N#M~YuA+;q7oq>)?L*H=fRYvc${^n?Id7Y?(V#=lEmks=j~XLXUwn@# z?;hmOqvE#>TJke^<)!H&vQJ}1>V7JLF76We?l$rR>zJb}Wzkr!5S2}ayAidO>1QpK z&!Hx)?Y2FVy@W{sf1SOWl+gJ2OGLTdPRnV5f# zdjc;uwvG^MnMTPdR{nSuY*yGPZ@{;&hm_)Hc!3?Gj1yDj&GzCJrv`+)2cQ)$U!{HGR40=ZXXglaM+IL6 z?1;T-C3Ra|eVXqM6A~rg6SEhvNU_C(@JDEo`c_bSs!CZS6XotkC)j4#E}o=({@lzm z3Y`DIO&jyFw~tggdqoDOC0sT&fW=YsL?_{c!YD|lFxj*>x;t`E8gRP6or3|(YSp>H z9FxTpJTHK=+h;~JoSU)5uR{2c7{>jhO{c4Dh6L4D;%wDicJ2|wN~fVq^M**k_#6mz ztRT&jtnCS%wADoSl#rkJ@H@NXeO6XEdqV5E-3cD;LGz?H(N|A*t+dkU(71TyXOl-h zI}n&t{z9N1Q&B0HQx%7nOcTu*&&Xw@k%_D$K%#=M+ElT1TBy8U3ghdpOw{}5r1nU% z7n$&l(Swuzi?dXC6BJ@nfa4Rk`^IkX{d4l|>&oqW)cF=Z(j!6?RxZVrunF+$o?SxC zM~sg$;oKinKMosm4@9FY?tH8>j;LdHsORz*fm5H!d>c;21o4-`0S<9jKAgyFr=M zP0*M$qdg$SAB{`6yHm(l`-MULQUfaW^7k7%$5#b zp{7tW7bA-R8LjE7_Zp*yONHAUrY$`LUKCw4Wzo2_AUL6|G7i(X9_s#jrxCAi0ySg; z23Mm><)58kZ#hEyK3M%pCLB-oIYoejIpN1;)uiKsFK3&^YqM#peh>EY$U=&yZoUth?hk0wBI;ObZt4g4@@5uladDwy=4a#J|Ma+3YcW zXtB}ord0Evjt)K`2kUIXLxmwU~W0&yscHy9&eEe2bFmYmz3NR*1XzgCF zF#y#VS1I?5E~;MaG)CadRxVK`D{Md8<0CXc-T3lk*q?Lf8Z3AsH^X+ykC7t4RxgmY zs5#rF#HddWG}(?u2c{@;AXA@dVwYF7Z6w>*N2D1J3K@o*B#hLoOy4q>66D`Wlx10r zx|~n-4DAMl@PbUu{eHNes|q415j$mzvk!ZE;*QJ)@95R4nFS+#Dw)f~bc@wt?EAky_``{ltXCQ1!1@#Au9j!PX3r1kCbG zly;9Atzg}KHpZ@zPYc3MzX0y{j4(@y+R&VA9Bh5WBr`-kw6jWIEpB)WI5q4Ja+j<7otM0S zkn~33i7JaL<~%X^N08<52XiOlZKyGIeeZ=f>_Qnt7N6QP5uBv(@{9fJuu*e-NV)aJ zI8KGL{Ae}7z-9x{5LILzhifxFosRH8`l$zH$7$x&yMgRtwiMs%YTHxN)n5n4Pt0;u&LtIQH|$3j$xnqNf}q)O6=$ z^Ab3lw>gox3VbO+ai-&t5nXdkt>c0_fUPr^_Vr9f5!h@QMqSFOEkVbt-KB!XRcV|5 zCV|E8diAHcQW;IWvDp(NtDxBnl$mzXDxg&u+`*OTcJW>G%eL=|fPExhc6(nx@cWI*ASMnOy{fR*Fjtm^Su`EBu6ULDJ7gSoU2Pl5B8CJob5J z%fWPb7okP~gW|I?4qI;YWwTxvhZg}FKFP*>@|T=rj&{)a;m~OdJ!}<@L&W_bSs2~%i4&<_d$TjqP3s&? z>!`<98pl;3_R<+xSjf%C+!5GE;;P9N&Gt(x4w*}YPdQIi{xUs{<+ailvPd#P#1+4j(^Bi41LBsQ}5-v z8$I9;@GPiOep|6Gm$QgXYr{Ij7Bc?;nhz>Ac6_bw?xbePymUWaLIokE!Zad9^Y5U4S8qOhDn;I=pPH{#y6oDz}@2nY~pfPqBnZE2Hi2o|o?d$&YyD$A` zeer$~!Yz3(ZNlqvUxc$EEK@`v_3AR)GKWM$EWZ+rIgbo8s~>g2dsBGP21yQYq& zMg_d`Y#VA49(;U;!~>PTvP#9Z@4qQqJmrqS#QR-sD*b&--BOcnEtlVs_zRAj^o4kN zwdP%X*4)9N1xn0ZpS)3};au{O&PBgj4*gNi2cEHbFG(jT5ObNB2&umEYY~9MJlsk z>A&9RCJ!_IGBocxM5OIR*8Hz@c*G`x+uDU!?Wr@-IAZjOqm-@6t3qQ^ONnMmN^cMh zc6fFfQ#bobiyslZcQlf)ctDvdDwTAK14$V}`yCPK9lfQ~n*1Ktv4F9MfvK5t% zxT0hX_1gs`A>@jK*<@pDgh-Alqy2ADp^=!5DcDrvj~#sWxj~f7lZE?4o%&lP3!>60 zUeSsK?YP=j3eQx=bGijG5>|}S84w`==VKr~gDHBX9}LftbW)+Oz%mKiKxN136Hw6u zuE3Q>wUA|V`NaJ&%R%4T4w&_kDPt;#aCMFOXjvX*gN4#sfn!VhQr^CgHEWPMB|Bm? zQ5&Xhz9IWT8z#}6KQv*i_wieP`I9v9tGH~c^B>IqW839ZtG|^N&g}@J-G_N!rjkxap>8YI_6m^JMZlRiblD@BH!|44+%`c)096fM&X62iArNo zw$vI?K(7)O`&*rWGp12l)l2pZG`y&csEn9-(LZ?QB{xyI9=Pdq&rax?GfOf!JtE^B zjtK>}73spQk#|+<*~sk}se%}5)?YZNj_O5Y&emdRc)q1`&|*(~PMaGZiWv{DXkv{> zX!BtpirI9u0khu-Z< zZdL4F_$?^(BWERzNBqF~k3Ult?{{9sGAcRQF^Oz$OjQVj`E_+Dp`!t7P4sfZ= zkYw5*r}*{L?%u?5r%cI!)$SjfX;;1FbnaVP|$h&uKD zC!4`GL-n{BP$$7HP9qqxeOksck)S@DLCeOAh*7vMny~P>js)s6ds-Hw!k+1&W;V-% z8Rt<`3Grf$yjd~|WP#@+GUuF(n>5OpY^=Ag4=rVwsRH_GLWyf$<^CGSanDmmDZZi2 zw^yqO8t#Y}Ok3o5kZ)tHhBurxIm%ivji>f6q*p}5RFv@=hAcRn?-FT|%(G0C+sq$} zid=GCK2`BsRpNlICy*;ZckcPTGT4R2W<5gvWL_pT;V4gZk5>BH6q1v6LCQ}TCW@utAfkfg+Ov*q7E)=m&05+aqU#DdldDa55M->WU@Ho}!@IPMS z1~9#UE(QD&^frvxg>Iz!BZ!YJb#7mRLRGXyLnKHJzPNv_!&2cOwgC1NI9Qj>pZ3c+ zb}#fi*gSMApik^AIBHC%ECnn3K|Z;c!_{!@NU2f(NXXh4n`G}*C>m%2@Lqb%7X z!@A@BWUKKdb_!&(dGC1yu+-1?k{iW$rJXAb(_6B}*XC2}8Z4_nH`%;U9F*6kOWPBA zeI?e{&!EHjqgFA#z&=g9)>c2JZKEl4q(Z^ZkzR2Tx3kgVxn?Q}!8HGt;|8I27k!g3 z%C(RO-{VP%|7$&VXxJW;|NL74$Z%BlX2j3q&Cg@C78;VhGG64m40J!!MW`tw z2YuUvWDa<+S$dv~F5J@29h1P#D7`rITu#`yCZ^iqOOv><83tqmS#Asmrw_`$%gdkf zRle$3iO_oJ&;ayZxc3o|8KL1P7-b2h@biPug6k#VAqC>!3;oeLw0bkYWOfRcZ`~kl0EdtNC+FeLqI) z)Ujo_mD4G4^%lVKln*8@Gl>!N8#nxI46odv0OllrYiqBuv@wMNIy+k;+!9yCs_a9Y zUNu88-hsmOI*H?xB9lLVWG!{{649{I1MD1LIT);f+jP-*pD|gnH}Y;%+F5{^8t6!_gSFO6UZxs8 zOdg8Qd5`%$tOuXr24sup$pSOnTKjJaw{7ADUQQNlsmfDqXUH>@zs{zxn9{{4L4||% z^DnL0e_3R1>hTj9n-NbuNH#^8?BrVw5z7vD)*raW##%VV3IwuWlLiW2dnbGcUzU)c z?9aRylsaRO+DAkO*PiI`c*`))`IJ^AjEg->`vF3;Yo&W+lhx>StPgjT_WPd~$d%ZQ zaV(jP?{8irLBem0k=rG&`Zv=?ogl&D6IRThCuMnCaDRp(-%ywu1K9kT@45dpB~&CvUWD<4m_mV!J)N)xYQ( zF-0IYssCX)lp!KKv=4K&N!-RP7$&x|;nIxb_fM2XU(c8FiPUk8H;{ETJhQRIlKOZCdfTuZ^mIdk zkUWP+kU6gR| ze)J<(q?XE>qNilAqNF&MVselHjlYbts$LYl$z!T!VSDyjq5sBG)}5{Ufbt{KC~ zKB2R0OD3cT?dT2$W=1H+foynH_+(`{lwXnx)F;Y2S!pg0CHYbXoRhpN$#P>ovKS_` z<>a0BRT&5C8>gN*$8&DjJ5&2K(%&02EU;3eXhqW1eA2AEf#^Xt!31Sh)W5x>j`B*oerrlDCYh2TE zqo@2iZ~ztZCbB(mNv7#grG=MjGtJmeLeDg*w6kOHQhD8W)i|guolrdaHs4R43~N6? zAT~k|l46{Z)X!m=S8cquVxY0txD)9{O0|dPt0BrDOp!8tJCukMnOkyvIjBy%5gi_N z7M8bxRJL%xxpB1h2{L_>IZ;=1X8aNMk=jI*!lwLzKLe1#``Y-tr*v zFPh6A!UZwp^~7D_s0?L(H3?u>O*3Pv9}^c6}lwV556n1n)P4?j`h9Ik7#2RR&i%PHvt>u&ta5GSX&=IlLQD%$$h$*PE(yub1>(SNzhky$J0D< zzs~)wd}>@hew!WZ_*>?D>-YN~g}qkYQC5^lxOdd_m&-9Hg}1{U$6sS(F(ieBrV|v| zd61+pvYSzd(Sh#{OB?Sf$zGAlTaNFgyC$Q$BtWWnKtvaSlm{F<)qJJGNu7hK+3Mz3 z<`QaD;^gfo)eSzdCUd+mljAq3UCS2kmJA8Jud50wK(GSRP5fa4(Ao2N&?P0knM{veap6E z>qpm3D!Pr#JMi#Ny5Y`<>}0-8U3qfOK-DZQ^Jk2%0?bcv2)4YAy4X^`F)*ri6`)#8 zzNA(0qHX*khL3P2vXx=4bL7-tp4me_y(A1(80q&Rzv`NTc(B(;tJFxL{Ui35j|vp} zSgIryaJ>B#GQi@eV^!mLs*U1eR|D_Ft)w&0#V@8k(U_yU*(a4DPlX--A059=WDhTs%5|0V|RLHZq5jD3GthHQR{gVjU)b1ab;Es zZbUB73F-+eRDL8oDq9;?rdtLu5C4j{Ox|u`z>;Q8H>xGQ?>J*-D$yA)g?QB(sb&iEL4Y zA1JCa9}KyPB@aD?3=qW)CHjGxV=Pb-v<58umc@UyBuzw`+y{^=WVlN*<#sp?(gly$ z1m40b9-y|J>3;Qw!O?Qr8SO!7Epn_;#2qaW3A~p3#5(ye7%UUuma<ep9SnPt19Ui+@PN+Sa_T*?@zMzt;y$)axe?b5q;!r|LW|Dm$2p0_mbs zD4%m;k%eik=B*8`jRYn{^Y#X9`h4laJPY7GOBrvSrg$_UKxkS}p*fD*SC=q&$Y%sJu5;*wXyNRH@56xlyB~s;zoN zE@dv4pa^%#n`l=^f%=VMUe2|eo~!TE@Ri@um{4v23WB*$hcJQ)86ZbD2kLS-c%H*C z5h+%X;Ewz*?(+9=o8QcVV;5uI!-S6zVLE8_sm!`xBxsKz^Lz-2F%q!}DOR!)x44EW zt>6q39O61sL^!2Q9AgWBz%=j2k#!Hrs^=691he@oOK6o$tpP+((d2NU5M`lF3_^;H z^c{@&2os!OLq0)7Gi>lq_HW+Bg!duj2_im3#Ak^31ToJL;nZ7oFNOfq2$EKiign27 z24?Y1oQS(PitpkudJ%ikUF`D)4pM=GRNz!*N$v@kOXXT&0s2O_RS+>5iKM2=qV8B+ zF`60IDz>jRx)81=_;8(fIvHiyeg1)AUa{?8=tRP>t+p?TGS?J((U>xi$c=G?jaXo; z$sN+(1Fi#zdJYK#Qz`M*Ns5Ql6w^GMkJOc)XkN)}L=tN>!;A78`0?~ta7X?zR^$#6 zv57~~2k`6BpU0d0Dvo4~S&sS4i{5Mh*N=M60r?-khddzt7F^-w_u4{;evxm;50U!s zbYWRlRjLh$prQ}}S%Ow6VLguK^|nP`S9|zprH9rcJnJN7Jg#&cEt1xoDq`6xSlJc| zcCuu#)svtL`(g`>sQ)CG77l8>*VY`64vFN;46Pb+T)BoWb*^yb`GyPyAf3UZGN(`n z=&0?VCxIHb(LhI&7ex)lDw_O_a}UP~&2Wt$;tu}+&&VI(DgFW0<$X-#R4sZ=;Sj7R|z!_GtPq#3o4ID&wGwXdGmXR`nL7CE=w;%*a z=}6w3#A_Q1rd&qTF^O~k3>5)idGkcVyoq9j6dUQ=nD8Ms@dzt?gll{s6P#d6-bc)b zh~xocd4d>O!oJ9S6}?8eM1+(kn9(|Bw1ru84SV7)9@Aay&{KFKUc^D3+&*Q28An-f z5_OJk@D|iUuS`W$)N<|Y4iq{Mi!Jn6_r3PK8^ELqXxhx3UHg&Qnm(JhscL>D!-lTR zx3={6B7uD*2wSnhtx<%{nDS^5vc6XWC|9p48K7z2`{k|E1P`Y&YZh5N3uZ78Vv<;; z6u0;-d?Ni#yg&T|tjl*HIKfGD2X987z;8x>9uMSooN(6YQ*t>EmI3@bAMp$z|Li3J z5WZsPK#od`8AM2*Fhu~%`b)4lmTMEk#gFSOjnIGymB_y+Uza6jT^mK%hy+Gr;ew=d z=y(mNO`5Wfqq~X3VInbQE_+2Pld4oo{^=6XsR2f~0VLYOh{=K^xfw`c021RuVNzyW z0SNVao)@8Hu+Ot;@}4r->&xI9Xodw3a_~slL#%8b5i@w`D_lj8n2^K@C0L;Zx8xgm zfxn46`~%#OZ())?#svEq^NF_-xCLk=7$c!cUfF2_iP*#$ZDXHq;}DtGVxMl|j5e_o zy^I+$1tQ6TBAIs+k02phgL7T!F+&D943egXZe-YS5#l02V8oOn0h zJJ`k(Z1Y2`^CL{;9#)cjh~xo8x(C5W5b_j)&p?Y}rX7r0MRNNpW?~aFx`vbJ2A9>E7ATwH+VlZC+Skr zQM=wy%Xz5fJXTb@GL1=71W5HA5Tu6@k^e|cnMY(*5bmr*xHfP2T>pJWJtQmx5vmzj zPgBNg$208AvPR9wGnXbpVx3O$vGlj_!Q^wep1zI=?;)WT9Ej)e<>;62#pv(DfgIyh zih0kN1$ZnxAph=1J%?cZ_pg!%WC^iZ{gxHGHHaNS#FQ9ShmHEnQ>~T-G?bmJEXpO& zfv!4DC7*2vlM5t$Q4m+W|~Qzv4B0( z1YffVvAbskI%`)6jP&D%Y}P7nf*5W+{tJa>C<}WV*74z8A?bG>;MOYqFh&>lbi_8` zq084mOYqQ_(52cou9dEu`hFBjMMM%~l31k#t2D!1`As~>-@&u|J#3`+vBFO0XwXP^jnK z24^+tmksNbOFsoyMbMN_qqD#j%2=#emDhy8Mx2#JU5kJ?e{L~lsq-0fC0I$`#3XqK zljH#==|fD?`-qYq2)TzS-G|_lIh1q($RfFYMk|=n8fM};reYh9#fx}M&tjLJ!6We! zPH1cHA(`>wnU%*wd6H*~A*%`jdT?kTepT*+Wyo6rti@BDj9P4-r?|sBRNa6a_BD-H zt?o0QpUVA(YIBcrFj3Q=XkN~DYb0=cEU;A=Xi;v2S&aG8d&i4;wRmS!$v8?G-#MD$ zBux>K#5$efmGq1Fi2NLGr{Bd|dJhDN6LAyw#fR{_(J$k5@nIaw5vGz#-VRp62#av` zf8RHN{4-yDyXVAtK0@bs&gAqPG|08+JtAZ*A7@(hp#hOvfCw8Dv!c1-jDek*#NI5$K`Jqmi(C;|@l2?bwp*fK`PU^k zdl^jbcN2`bDB&(O;Ef?$Osy2_3=rnH8HHgP7l zu}9C~P+Z3z-^OEc7l(8UhvH_Yq_RMgclJ&>x1w7Lw^7UYhAK_Tbjl!=`efJ@y*4ws zpr#~YwFg7CUaUui&5^*G$eIC;2#5rg@_p))hy*wRSb`yu$QdwufOz%}R+4+zlJ8(k z-or#bK`eJMk_Q;^Nv|-v3<@Wh(Hf>=8#A$u9q}9<(_QS*Q+O1;ghRT6X&$yURiCeE z-Z$iZ*wznSxUg-FGUg;U!Uj9%gSgDqt_=-sMoek}C%P(E>N{f21z8-hnscTbo}2lk#8lMV-6r{XgYxZn{NR5r@uOk2jntVEa!9novt9V7?@;j zrn9i{k`+XBWhcwf(cHAFteBLy7fN{6MkH`;l!a)GazJtQiumYYT|JJ>L$r!qktcbl z_2X1xCi4bT&`i2q{-x%8jdJNlZtzT)lzCZoXLkS+*SZ^M`&qt9JR7syMc$Ps+2B-N*Ediii&}x_*+<@qk0_G)3HWVyd=MZ=j3YfeOHN|DKAxE%}_3}*Fwl6u7}m#`~y9})N7 zRc-P@sMWea_AzS+`7>=-oqwuE5?v07ATk(tv;5f=A#i6B;nrAWhS@^rGQ~D(;v`R` z#FLX9{P^jAgu7?IgH3)2i74}WL_dPRCw>Xv6Q95#k1&;D4j5`dgW~VPNLn<&{0~3o z89@HRSFc70Ru}t3UwgZh!~BMGSxrNA7A=TS6;?FLL&XbWsti-M5KyfmS7|%w>+cue zsa}!oQIt0~%$gmFbM%U!@QN@n&2vTelQfI3%oEoW6I8GsLYiR2mh@L0Yv$Y#*1ivH zt(0Xr&lXVPl6>f7_2=_Z^gE=qbPs8gKIZ~IMIG80MY@28wwx{LtI60r6r}ZjkR`lo zp%j$CB}*hzIixJQ6SBA)dt}dLBFU98PEx zXL;xLENqJwp|1``EY3Ts+dLZ0o)tD4!c2X!T=GL~s%jfAHyjHj*f4}FK&u0ivX_Et zq3b0b2r%cs<^NNR{jFHw?j*)qOc;|r@`Wq!e<~Sga)#*Ockz>F{~=c80~|+B07EVG{$OHau6vuI1g6q!X^g^ePHyIp5#^UE+F zt2%&SJ#cVsEiqdi+LSwO0uPawDUFG+A_yC?z-B~PkF&lBQBlgB^tmX^$jja`Qf3^c zSseUvDshzN&Hf}KodXBg*F0_6dv)B%Jg+3dm?TC>ab3Qddr2PP7Qcy2c@JaW#YFD) z0+I}*BFr$sRIFo0+n9=N?9g32qUZ2P+{F&v#R1*M3=yVM;0!SmF6WVyAVTXEXRA@n zy%Lst0=@k>c36f3tT@ez)C?w6F#?o3px1L}MdRF84-KRSy(<=(*YDX$jGJRpB10-+ zSQTSJ@!c$y*qI*Vg_FO9P5CaqPCtVm(g(4h#+c@n@1&Y&o|oDMFG8@2{Ewm&YK(-`66{IQ{8&B_^&Wb;%o#5n`KC96%DhO zf?)QhxYlZKiZ{21Ls>wn@u>(013?Q5wj4%z=Z^D%f50N=#l9_gPzUgsLx#qJC`gyb zLE7V&Js{;drASI%7gOBe`*;z5j92AXa6`U^qtRhpuN3+FflFz zNkkGOO0x=FNU_Baaa;ZXxA-mG<~K?}GUDT2IYUL*))}qmUXp7#6nC&gS=iP?dNG6C zB9DYK$en>;3kj}zIJ)G2$R@*63r~oPq1R-fZ5!6!loz6F)?A$nbx>UO(VPoIWucdFDe-*K zI5Pu$2JoMK+%tgucfWG^La_K84}4yEB7O2hx_}63Jwxghw?qdJF>PPBIw@WeB5cHj zYjNIDRM30@J2$TgmlN0blPqz4FL(7%bBmm`mDnv_Ze7Bm21dv-S=VzzptpwEl$*-2 zUBh*3MHRV4PD<1H)u5xryJS?{r28999_Iu;$GMOVK?v^QR{cF5fIiep8%os@JScB! zH=-1)xwqqe^2>OEzlG=JH?f{RzzXkTgi|M_P(mQV1ZT8~)94nC#BDsp3wS_xai3no zWAPlOJen(iscMZT`};r|<)x`9sDp}PxRpfJZBnT4%uH^=$ ztyo~3C*j6oG3S@=ecq2CL6OJ7*iR*nlgz_$nr7aOBJ8R#66w|ywg6TwFNN!nW$JNK zgl%O&l461soBR-W^C3oj+N)G^HEiolT*r*I@ld>gM|cK1 z^fVrbmvDkDO!Kg~*f7f#)2S&E2a_ z-~pJDyQ?5lDU(aOlDcFJ!&=nXr`q>LQYLADC?<&&l2{jKc#7Y^EBHEImS4jbzk@aT z0AoHugv3d~o6;Ii={nBDbv&jQ@HV|4@6fAwES|?1=Sjl6ND?NCm!Yhju@)RkLUTV90Y(Ig5ha)ii3!bcL%xMO{5o#) z+qjK4G9XExV8U4$=cX~)49R)e7Oi1QS+%VvbQe2x2ao73cIcVhOOl1)Oy?zl^IQ@& z0ogR4a(%qD&HZTdcGybrb_s*0j@y;yG}3`JS))a4(H~UGhviyDE(Q?i;i9XQU|a0r zuKXUNXcfHvNr-5i={jupg3Ki2{xrq+j}jcG8A>KxE~`5axyk{hp8EmC6TbEaE^13%c46Nc+?kZQj&^=p%I{|m_^ajZ7i}* zzZ>EV@0VY}`}r$)R(>1n>3vMl9AZ`Ea-3lUr_oIuil^~5y@Gr6BHj@{f+K9H1@;tW^L8F$C9qK{I%81H?4X?OnR0+jO5UI+U@pXSGj<0w!qi z3abh0g?EuCgVu3g27E=#a5w!Xo|E6ii~LQDc^3(7;2YzA7-t)Q5)_RG#2v&*z^>{J%c+v|j-EN56EnJs_9GlhTz-%wZwi3PemV znrXsaY$NLX8yXsxy&q%1R>}|?ycVoi4*GyelX0VM9}M4l z7*5-y7h~?SC1`3ZTUk1dt5$DVlFPO5LFS5AqV|1#&WPsTjwx>8K7NG1gjeKOu`S=m zntXr}P7uL-(^Ev4VFjnOjnn8R_UIYBO|RfhdKLG@D>&s*UM(g|W3Qfy!kPw{JbmS4kN`E6|SyI4sdV4Rg1z!YmZj9$POC;uc)H+~LLG(v>( zyj1q6a^4+1!CR*(rg`;FR*Z>@@T+nd*8H`NHuPo+0aWws~G7+w2CHGs}bRPUPWs~&;mxNi>)w7M zagc{;B}(~7qi2Mbg!Klcz8db))bP+YUaH5ICgPCxdhfMkI##u6@_rE9Ju6&WPHex< zof`b{lII9lUthaMf@JiFl*6U$;6V-Gq4j!@nwVbof-*+LSQRNYXo{Ek>v%tZ6)(!K zV?*A@3h!CH9a(7ADo*J}-VONuc#B@aTl4|!;ttL@OW2%g;^ocOV0}d)9cmN1&tMlfv4h*#QK5t> zF9V!;Oi~CZPl*jo+8Bk{04mgS{v<78+Px;iq6Z0$hj?z7nGY0(0B509BJ+f;P=YP_ z0MGJw@if1VXZSlAska1Q#B*1_5si*t`$UpL>kc55_A*IXpQp=r) zOnZ~H0gq|2u6iu0N`+}ZL7GJa1}{n;qpK^KSL|1G%pD8DT9kEN-;M=Va~O%{WgY1p z#xCcc5zIpi_Gc1%NfxSgR`HBf>#%b^>ASeH>sBas@<5m>^4Jy(t_2UXbsw8*Z>uxk z^*yOp9P9rsvk_B#^erKe-j}v{9>(&vR9{#LFjub1!9rNUgY;mdsU$Ndi8V39b=t$L z_$oe_egU`m^*p!Z*ceB@fR5`p7Ps*heGqSnSMe5o5Qo^p3CDRZ$0B*$t|*lip&Doa zC75XHKwbYS(t1s7pyA6)S6u}%FGp65XFV3!j0LXc|BVGLs#Z}MW{Sk{S>Ai&Ajv$x z2dSKwFVCQ(m^QfextsDknCl)8QU*OYzy{Ty#{4-{y&PN_ueE#>lX1?nmPUE0-xZNr z#<%$)o|3QQ4&KC5{ASjzop-zgNoGUJLbqnLf*DpZ71tCfxq$;*#{s~SHBU*oKEAP3a4pWa?indyWF!ddB^W6zdRb{ZqGgP8z0#}Z zjO^twa*#-z776V6B5teW&UxIXi)E?EeJC#oj-_x}|9ZJLF_fKs3}#4>EtD(w3S92z z(e4V!c@Oq97gY02YW#DPRjWwpxuGt?Wa#msSPhl_4%P3A-;0Uo;Bg!G@L~RY zc!j@&Yw2594P}n3_7NH$8k3FrBTBgOCAlbTHE!X&pjK;99fN@ zC!$(ORD!u;9y!b>HHBQWJ!xKS%8Pl#d4l*@WVsyMqYOA!qeb#~q?8m@^EhV6lE;tI ztodI79@E^*JDcafu{D>98(bhZV;gJN2J_lSmAn!%{7$X>Fjv+bQ5!>~~C5~)>@ z)X$^5!d8|)lKuY{Kg3h~I_}^tJdHQ7CGTU*yBNy@jB(;EWUB@x7-L3jn2AkHX&VQ0 z3x~Ld2Y4DgxQ#=)iCwyj1d-w`selQ$pKsZz5pH|^#thzeZKxjA!Fi9NtSs}0vJks5 zrMSUw;x@m58+d>_{5H1uT};v)OmKh^A0x)BHh&fQXs5J|WAPN;jXsRm#E;@N@d+Hs z2~K6!M`#ie-oF;(#wZIpFZP{#V8M_C9LyxXvY+LFOr;V+t(4d;yd2=N$AeK$NdJ`| z_Y5GvJQ#os1QpeRCvj*c$z1V$9Y)QwNZqv zn6MU!GH_5Cw&wGZWSlZDyc~(damq*~=J_0K01o5%TgG_F!$H*UJyF~=wLFoE;Y?q8 zSHA|D`bC%uJyfq@aSS#Z3)F=6EQcfu+uFth+>t-T4cy05cpEqPZA|1Y#&Qp1WJ+$| zDqHorDes4aaqcNuLqc0f#5xY?1`c@(5AhTZu#E${iAVG@62wTEFasfFLc)~)TR=iU zGPPSrdd{!<&{LB(%Mc_HL+1TCWEMI{jF=d!e1L269bCtK+`uDTqsO?x_b`%s7|UIZ zag=+jW?F+uaX-&!11I7RcEs~|gFcM!(kHM(Pve-!IAf(i0B7&*%~6C`)?=(hR4O6O zN}al+RN`9)Gu%H*aVi%%AoB*)#~|N zx|UR3l%veT7^Zm#_WdMFWx2zPbjpqHZ>L&TWX?%NC#oM96u(QVwP_u>2ENAVi{DE4_f53dqPSK-iC zD(}@Yqje8PH9xCv$uU*Kf(2|;xYt&~BlCc58jGUnyMZiUVc)II5rquDM~3d$i@ZcbQhFu% zy_}G)U+>Cm9oG`ytM3CtA1SbSr_}06nFW3w2Y8x)fID~-H}Md6@I#E#eN1=c|6*RY4{IK>)vaTBN5z@E5^6j@o|tkERp z>mNbpz{2_Q(>(vAzloeP^dY&pmz0H0&Hn~xp;RQXAs=CbpI`&KSm%9Qrzcp&DQ@8& zVm?I7hZxBNjQ9j2oHcr)7UjOzaUyQxKsquxO@rKI3{(IcAny9uJa5sMb;L9Vxsg>f|9CnhnCF{4^-#E}e2~)?f!P zX_G%;1EglJ1sd;*m*?jA-uuW$vR3xts+t3>*8{rhR?wHkExxaI^(~dx)p$H~zda&} zRgrTTSg` z6{72jPx;8FC8`X0$?O**ohMb20Wqn8z+>x*0CclF_^e%4V9=7CzJZ$T5 zFfU0RPNFR79pibPNlIg+w24%#AjKN?u#GdU;EX5O!*xgq9AOJb*aSdG5n*3EjWgP) z>3c<)X0`b*p#X}yJ|mD~OTL2@J_2%(yMcR%kYJ1{u3-lerP#(ECOAMOPZ04TVm`%) zPZ9A9BRYdXVy(7Uz6U}n_k9b8bSDoDeHCwskKjm-aLQ5M(6rp_P%19aVob#(@brqn z``1R8M5N4Pi}8P$Fur*>!@bi4Cn@S45UBk=l-v-M`+$HMzxI=!t6=@vO8_A9B7lW@ zbLFzGyM1(dn{C@%29d4)x!!vr(VV+c0t)2bDr5K2vUL?2WlCphGF3X!L5aX3>9UA{ z-i$IBS;-q{MS0$cpydH%b!|;ibYW+l%B-TyLBcplB~F#v`Ki(Xk!v9nAzgGAj+)Hbfz6;{||p#yGdR4Bb?iuqgz9%>S?+DAuJz(fs~5*m=1 zTW}3|Al3OK%kM~Vop$jf{1tqNzkoaP2UwT)FvdyA&n6)-#Tt&q4eX0&@dkYeKg0*| zhWId!d5lw;E!+~Mf$Vyp9UUZc1vrWjA7;I`khCDrns-A3{$zveX3${Pg`zIgX$+Aj`#KxtVOxcVWSl3q z-^4q(!*AmzJ;WV;3uE5HNbY0A#~9%hBTOOkR)x#b^U@qrBx0l(W&foSQW^m)kkS}Z ztU}T%7*TEieQe{5C(6BGtkW^pa9Fzzfm1~C1VU!>jKC~|37#TC3c(3tnj!PIbh{5( zKF0`Ctl^9{a4K%%v3MT$@FL!%S834$j;+gpKwmC74-IiQs2uZVNzSE zhlhKAYYHfv$2voRgkI6n_2bZfhvo$HBGif+nsF82af5d75&Qu@B7Yy(<(pXL#~3S# z<%PH76q`5_PvL&_3cig`;dOin``E&<9AV0$WTYy}Olm`$G+sZR&s~}-aXL`pYQi|1 zw}qi&v;{V5-O)AUsj${Zpm{iHEOMhsl)=W>#XJJ<9U?FEF562WMIHN60#dYk_Q@BSj;2z(_J$f0tbQ`BK&b_o**cq{6 zkl?H_AuC`jk$qNt&$RHSu117c*GG72B|<#UUs}v%2Z_Wt4-&j<0Fc5Uljd{LqWTpt zKF@#mH-E}Afc*VmxH=(N=L<7*Vb7NbIQ!NK>#!$%)xXm;DwKNfhPsE&-EMPN*C%Xq zu1OKf5EEe{kXaR#I`~CSNkrX81ND5aRUnzkyt8mB=T&K@mA)fsC7V2TX;f&5UvD~B z*#b;RV|OymY_j8f(6;M2w}6$Qa!Hzd^3+rzw`PKXF^Syd(NGi7b)C+2;BlRH@KJmL zACbR{8}bdT@)L}3Hh$C;sh@SC@H)oBcvD$&Z{}4*y2Yylsv$7dW=o%<2t{Ku{=P` z`xx^nVxA(VQxvtX-Yb%MYetx11yfqVl&)baw(*#r#eIGnk8ub0@e+3F4$e5j84Jv0 zgjuCzfmHrx&D&6nT}gVQ%7lRDR%5)pKEi}bCXqRSe0_h0duJ)8Qt9`>l}_gcfMAga zq5=pQ`0RTHKzt2j9|`E)&tG@$97|t--Q|a%1hC;h^~Ru07v^BAOaDx>WYzM(ZbOOJdu)kk=XkqB-13C`yyi zC|3emj>r1k|0MmWVLj>S{BCtkrH)2Hx5d?CuoqfjHiQXQ zk7cQDRahUn;oV@vcn0iE*-FYWEt1AZdAL+oFe965wqt>bAZ{85Bv`>rY+^?1c!1}zhi&ZeO+2Aza9_L+ryOG{2~!q% zE=L{~nhy-s+cEcOQtk!G3lo$ZEmB_grSOF0-z(whPmLpdaC3xpL8T%>3}AOA@rS!- z*qt$EQkMh5wUWFlfXoes41D&dJp;&}zJeZ*g@_&lZ`lLA<1fnLu4^!_2-$y&8oVO) z?}S5AU$cj!er~Jds#>w2nv%9uu+Jx&L^4uj*3h#& zWa}th{5RE<{54knaZoC%eMg%1;|4Hktq3(JKy4~&xivg&`9gC0_mL|WRGy=q4i>29 z^$?Y^y1K@LP2pD55NX?&MHiEq)T za33$ulQNUMjJI~I81gev>EmGvt5Q853vUB!$GP?Qun7G!LawRXc@BB=a4KY8j;)yT z+zo;4nC701YA=qolEX2TS;F{nBC(fd)$^w5qLg>atgQ;yw}~cq01n-bP5bHA5a#AS zDJ74p@}S7!YU>rQ%;CdTn5b6DQunG>&;ra2IjJG%(PZRPLo0RbtkH|3x!3-X4u9aR`>uBpCIC6#C(D%&$q~uxRbmX?=r)svWi_2 z86>2X<(?!oL5eYEViPH?;gq(p!`E<#E$s6a9?-Km!6u&2UCcPb850r~m`Z^eqD3P{ zWi*MVcZe6vOa{=NH$CNr>R0^Ib}aD8?FqJGD!n@?0}rMtzPvZZ?o2L9Vwb!gDsXVA zuU0io>+kpmkU#bNR~bNjL&6X~g<-rfJ{4TDS*sj&sKSV@0lTfcXl5ZWPsAqgg&tN& z`@NL*a4~()1kzq(5ocW}3*$UoYcmqqhy~W7g%S}9ntN2v1AdFiNA-Xtj5&xDHT};t zUJ?m?{CksLZBqVS6n)ltQ(Uaf4ZqbzxpH|=+0#7J6t<`vpSJg+>h&mlFA7Wgq6&+y z)446&Du%?Wkk}HZ_#}QCACtdR^LS)oR;xG`PvL=h8Q-N(;9K-*?D95_nKKLTdsnAat!tGyZ(lhvrE0)W00uL%@fD%xq+M1xmU2X;+OfXn9Iq9LEmdzEA*Y~#F? zZA=pD@)0($gB3o;Hl84+1l!ofgtEM^bw0v6WeMYgPZ0A7ggmYMPLd^za{@AGMv@ju z>}r^v6st%nOJbK0IO262VLh+5wShz4z$sR-i<>yXCU(WMNH{{mgc%d2Icy{lc{$*U zH@~7Bap^@NV+rjde@N=aW*!473uBK`BtvpGCvQdqpW2>adqgFWol3@=Cn>&hFvWht z^Kk284k?V1Qh6`cDq^gD$H3qH8P5Rni{}I&m&*~iT|ii zrE`hORq05RFM{0Tu}Tt~;uIgmm+%SxZ9L82#hQFD2al{O%sLLmQ+StN#W(3E@ICPf z9Lfn!WKlj>|13;!P=$^vVCae}Ff3jU<8QGRXlxz;6*eN!JV#@5MA*oIV=X3(DGR5H zP!6Y(45Y~NHVWuCN+k9Y&i|YB;YbuHk)@`h3q_;PT)`dQBNyOsouiob?+rH@%xWc$ zx$#{j4T)$KaoEext7`*mKevHKGmz8_0QnbW@Qj#&slG1Tpri>%bhC2S%r7f<8@vlk%5L5GBhw-?GHrSaY^&gDOS7}tkFl*@5{zEEMok40nM9{z(+U7xHHLe zz=}OjB;&h>GkpIj$s-$ba8c$k6-KH6QiYMf`?H<_u1JXxl>z{KXJY54X`Me#@ zNw&Ms+7iE(2}&5eA|?xN6+~F)U9shLH9_Q8Rb7w+77;(87ohYFA!rHqqQ=1HtY3E*P;e0tL;Ew-E`w!G&-6CT~ttm~)d(X6;j? z*{^667*!MyLN?zBGMk^&CWh)5O7kEu$>f~>XZ3)pe^o*|sXAX6j$MLSChgIwq#;(q zJUKIHet2_)XC@IMMHM}qNqqHShPO`>Ol3Lrvf2Yg1rQZJ)a(DeZx6_4e(z!c$Wj#P zb970x522z9cmHe?uJiqNNLn|AXt4u~P-_?|LzCzjG6I!4bw-ttt%wR`CAW@7 z0%MVPFV3OF1|)rluycYtFRZhv66P^eyd`InaVC-X5mfy@Z{sETHEiVI0iXmP z-= zCpexbYv6-y-V%130JUAw$$SW1_*D6Gb4gu0V34(N|F`ik;+5=>B3uAXC z@%uYx*qLP^nMK&N-utoWgwC2dl^OWmpL@nHfc*Rt0OT@-Tk(asP`YsUmwTSEuUrw^ zj1Nnj+e~BM-)63@}wBc5a2{AUr4A0Qp_$mA;0h6zsS26n{r_%?kC-@vEw zfS<-Ok1&;4mvWPWuj}8zmGY9c?WhVEtOpJ@LkBAhFk#U*L*(#4`TI5!z`79FjI-|I z6Ctn}FM4gnO1Kp%_5BOjD7=IxX!Hb$t?d&ZJwA`ye4cp`7V{QfUNVY+k!>i7Ckg8YW0$z3u~DQA5|qlkUi1drLRZ% zxO%TgQQ7J?J;9ITH}PTqU2LZJu!7wZcsvm=;Oq3$_y&FgPk0+A9OwBRr1f&>7IoGn zhgUr!P0+zM=-|aW66IQ5oZm}9gh@o0h^*W2SP)hsU?UP3i3Rx28~ky$PZ7pYP8827 z&K;%_dowu?shY_}<*KIs8(qh^O#yG)t-J~xZTIaO*41Q*c6tvT@1@CF&yI$(CLpmF zNwEV-Qy(i`Bi<&jMiZ2{frt6}>i2-`Yocv#r1l0L`@?H}SddgJB31j(EIiffJhwd(`1JM|H^(BIgBUnTCBAhy!*`DooTfZC=mF*Msx|=f z1>XSjGrxEFb3lervE@0_2A^A@R)0V?gjWO-PWd9bNz!yoqINK%1tf4Pp98QWv z!otf^wer}`LCrmBn+R?Tk#w1PQ`h%`xDrxD#zgZnC{U>gf~l{EvBH%yrp0``WtFYA z#VJ0?zl|T|-@#4!I#&4!V$6_Wgk!piC*no?k@%S$Jg(tb#-+q^D-amKqaKDuwVVzU zbQCv6P?paj@@i6ovime9U?uMuzLt9#M|s{x0sRG#L~}UF#(?UvOXhty7O=5D%l>sCJ~aRC$4y4%?Ms{t~a zH41J$mTa(LdS{H#!K{T1C}CK|zl#nsL^ZA`J*jz0NPcWVi@C1~q1R%8pS(WCwXpy= zo0s+z#vksT;r>~QM3y58)Oqq;0pzDXfA!1oUL;jsdN>bY1eU*-8&qk?qukre*F;P96P{@69CUaf;V%s9QT@B4D;?WDmYVIkSTW^(q0@a0) z&u!S0COy^jkt%R(v%RW{~+moXT zAJwwBLV*lb$*6WP7pRA12x6>|#8z~M5AhfADSQr3$?suZ-p2@MNDMpDMIP~MA?$nrB*^TvIvIb>`^G*1AJ z@`^m=kVd71C+j>L+4wtB%HW>l<54YvJCk+TXbT)ecsDLOaOj|8DBy72uF+~gu!qDc ze5#?!R>^qg^gCz-4;bL2X1RP*)01@-=mpFrA%q>-8HmRCFqIj;0 zuv22-_E_N4*C*JHvzdM-8TZaod~q)ezmi;@H`U%Ai%_h^wdoSjB^ZDBbI%3BQ2+?AW>8mWXaD^J}yIkmLO#iyMO!)yiJLZpvBt+v4xTG)oFUPBRPRQ6e#At|f^}O{m?ny&EpTFcfg0 z<$l%s-{!i929CC?B{gi|3M5TU0bN6K(KClf+ zECmzF<$3j`4@lE-kkA~~ogHy8a$;iKU5WAWtuZ!p06A8|uTIj%RirJvA64Uz1mlaB z0YH{rk?FjJF3LUQF6Z9w>?IF(-)! z=-eJg7)>4vag^(388t#{6V%IN_Ib@&=CTbGyN|c4MY{a4jBXO?u6%~KT z=;BF(K&m8N;J zlCDz3`p&mg09a@sMfF^$;YXqb9JKHpXyAk9WnvktBE@zz#mD&b_#}T8H{}no#*aae zIHL_5iKp>H@niS`{TV#KvpCMdgCUgXpWO$_^D5NmJy-qaTQpNt`q(I-aguv8iZH%|M9%X$W_j)Wgcpmj*5cVyF>X@YyF&~2 z0+s+Amk&rxYm#eUkM_VrmNloHam}X=#4WdJ6FyiS%cf?j#r0MTn3SM{>d&c|^M$rE zJ(rHN5)po6eS{CJ$5@R7W|HyFS&Bd0J;Oo5^N{6guAHp)N2*lD0_p(r72g2z=@5c7 z7-+}=Ca>k=+;Gt04MdbLqzy(~tS_vu$!?$g?crKBAYlWLI5l>%^*6DB36o{PE8jD! zcuS)E{N^wc5k?{lbt&TN<2+%v@U#e}oatp7k9An7R}oP|wF-ysU?iA;JtZ zTE|KB4DQDt!*`=UiTlxqFvS=|Q68+9UC~Hno{I%cRg@F1kKJ-|d^SAiP~ngW3IHq% zPt^i0Ql%^Sev&oxJ5Cu#sl-&G1R6Cj2`9CjHq?x9%q@!OR1p?wF+MXgHEQJUA4xls+V zD#B=4NnBT-)<#75|IqU&$IcRV!iDy&q*GS@wZ<0QnQY zb9DiP!?j${YjK-RsNsgV7R#W@4Qv~x)ui~B|JHj)80|bHU7@6Dabia+++rfp#VFIf z3YSp&9TbqV9%nK56OrYYjPsJgYU8%W{+Z<+gbQ2ujXUn6mL4uXl_-ZTssN)KGxhSI zWbB%(D*20llNMUkeIqc&lwci?@$&SuxO@6ptfcQCmPbg$8m7_HcryM`yfgWE?8G0$ z6cZ#Ifk_yfn3cQ|Fqf8Pi}GE)??pe10xFVu-VY#ixR^@DL0%#4AjuNMkENW4O_jVL z%EDSL_s~0T$QBD4jf(HqdqWqS)?tHm=yfxb*Xu6&?m*afr%@e*v`KXX!HRS z8yvg5qq;KT<@64&%;PlQKxbGg%3l?pWYr5&^bZlmJWqt}Sl}nGPjF|FnR51K5})5W z!=tIJH5LTAhhH&(uLS^UUKo5%1{d)>FDLNOpnKb3MD6Y1;u$eb)Ud#a*-AuC-C=D_ z3|*29o1S4)r4<;?z0IOfD4wEHT}$L%kfL|VB#+%6=aq@paxY2-B@1s!0Vtv+pwNXI z`yIzT*)57%1%gbKZ!~e>U_>M_!5MB(zl0Z#{|44)-$yJTgArpIKZD)LC-Cm%7qB<_ z5Y8|`3IVD5vKl(h+rXo&_WK`QQ-wq!?o6;EYWy1%6c=b<_+Ig#R5=@eNg~PJ_)N6Irn@i zFT$H(wj7cfG>o6st(XE5V@j|o-@@}J{|#=++q-{Q+C2Y$&hj(Z)X!6r{ zEwJKqKIXRnwpN#8D~!}CZE{@)DBnx2R2{4IaZ*CVS()d@g7D&6j8ANju^tij6UN`$ zJ;OVvDW;OOJ(pw+M!42LiBS)~0)Vgmf@c8vghv2*FHaPnd7%D4=Pkt4vv)4g< zh9tg)qxcovTlowgjz5hlRxm?U0}nMhf1YrkgGBLtqAY4DX8@7rc`;MDXfiofLZ>7c zsazBQC_rVF!;6#^%bcPB7-O_64JoT@lxzVA%YY3#)V2TYG6F}?CHetLvoVNT!9Y{v z-$tXD1E93MzRo%-w;N|R(9q2{#XoeV{)_F3PUVXn5Uz!?ss(iFeV!J-w;l<6bZdkU ztd9^A;qB7|U)Vjv{)`u1Uqk8Lxv|DlnimxS`T8&1^$Q?B_Ss|iSS+ZL8yYLP=yKPEX@pxQ5PCI~VEhzmrjiPi;V6p%t#gn0?ddO;M; z7>lY(W2K~P(I27&C;3SVjWRE&yl@JXD^mFuVGLn#^L{YOIUvRVMvxfO44dhjcOt*5y>Y=#dREvUd7v!&*1*((>TKfQ;xE5t9%(rEBP!%`C?`uk&KfZDvH0;ygJy7 z%RMz@k$WMt`6W?4Vcjs#hdgRzj?Fc_t0vVtrwwjUwIGyP^Gz-L1O;INn=O z;_4-7+Sh%3aXW^6ouN+G-UcdM!NgXUSNDA_T8+&{$x>mEc_EVW^Dq_0xi-r3Kc1Py zIF*dA?N9OjqZv+R9X_gaYXKKF??<)r-!}q)EJxv|_wco!$NiCVx#wrIs^}&@mue*H zcG5HncbKGY3Ftb=A&v6xvS^sVME112xr`MTE0@c$i_)_KYSTH?JRjKvpIz-nytu!k zJOoT#BsTJXC@LVVM?(ATU3#Rb=VSwr8hlW7!Q@f}m1^SoqWdmmL=vlXiuX-_9WR~z zD#qzUNRDw7KacN^ei5&aeil!X367;e%GuQxrH6}!=rENfuSVekkxGLrwNp4lEnll& z6#sLezh&VZfQUg00=_)za#$tWPStsOtqO2DsZ}fuFm%g3Vaq$uz~^d2)u` znJo3G0!-DdSPLksS4UQwGJfk9Jp;(cemmrV_z(`)dSOY*o~YffOkmSQ?P@*J0g0=% zsVM=yTIScOI!fb$LC*Vjxu4|gfwtO|<~byVL{;yCrtxB-=nGKkWhlHacDP-HkeN1% zDy0@h#Rbolg)|kgAu6z`=E6vpSfK>Z)A#YS_}h3!eh0)e9Ehj!b^2+19Y28`zJcR3 z!VEMIqbe$+sNLdgr5p1NCG^!)pw^X#4k#84A*=foN^yBVP0f9SC9;dRqc3PQ!NxLy zqbcD$07rn5u27;g(zSt;F6+i%x=hRJaW3zbEd-k@Z~?9xoKW2c)rPa#-z$Rf{`C<) zzCDHj@U6oczI8CeabYNG2_M|x{TKv5KI#EL&TVqxOMd(SJB?tlOc-&Q1p5F<4Gc`j zb_msSff91K#zqivx;Ip^;5Y$?E1<|O=i|C;`X5_r?uqT*ljY{bqz8|ZcZ;cH87uYs zAVLJjge113DLzfVjh~`l$C!_BL^ts@{3O20KaR)pI*w(88E1iK+UixT)Q~qVR!Sa- zZXp9#LjkHDk8%?%pdMx=b#ot=)Dy)S?48$dpMfjuB}$!0Ohmv`d15ckh(R6X~;7vvd6*r^Ja zej;-{hc-~+TDRTRqQwnyywviM`EbWmhlSBRK9?gSs&p-frs*K7o)|SJg)kP3jVQtM z;%$6J{2E@s_aGtg75-^_89y}#k0}dd&3iUj|4jAand|Y!U;-vv(pjr5;i=(Yy zN1Nt=Z9_7a;n`@V5Lu4HE!F=396`JpjCz`Zh`OEM5M#S5w3h&c^;Iy-rF826QY4~R zD`L)jHxY1s6yfJ@POuRRymp-6%X?ECrLsPUSHZ%;`vKI$uK?gX-T~xuZ(K=Ln8S?d zZB_6If)}|b3OS5TR~TT&3AnB6dI%_SvOGC}33phmoB_q-!bF{3CGvhulf)JP5lYzA z{ImQ71b`L6xE{~&C+PF|B>g@nG{tNDBlsf!G~VTBaG1uJvan7UTrsLtfusruY9iy} zvv!qMiaEPj^lTl6jXg)W-86U}uu)YA`W$-*;0PgAL0TE1_6){elFyIczsz1 zo|)x)XyzXVBHg?!&K7nuPfK0mX@>w3b~%nCm~^dt(zIwfmyL8-9EOP__Tim#8_-n` zh^SQLngfUeAu%yFB8l5#2R|Qu4ljrw;tlx%zRW+4d;Bbp(imq8< zjv5b%ve?bRMC!p~e$48fVi*@xU!Y-{YuLk+wZTR!2&;3;+(D(k7Zvgr1 zTNmi@UNQywy*%^qML(?HBB?$qIaR-w);QAUq;}nBkK;Ap5 zy}TeV_Iu*CvyVfFL7o9MoLtw$zP3<;7ErSh$X1cJ?y?{`HoL+d)%%=b3~+V zKDAhY7ClVH#8?#)pB{Y`&xv>Owe&-{$IszV#+XVf^;s#E@zpNAWb{s`AyvAnRi)13 z+6ApVHx?DP0DWD3*)j=x2+%M>1G}6{S8xfy5hQ@hWz{-;0SJ&+SwuYtWFiRfTaWRv ztr6~>N_=H+ii1R!!J`2_05|VP6+pi48$ez?2LPcL{*feG?FXPBEIUaa}b1|UTedNG2>g7Lx8TaXMq!c#cq z5l(aPa5?w#u%c2q-QwOzz>>7crEeG zAeSDds&n{!g``Tj6*SETEnbk#nDArUV>~s9@b`A6^W2Z>{9J_(7z{(z{62Mttsd_O zR{=mSI>5*RYz7Y&^Z9J7bsDx95q2n6NIRD!v~l&!3m>#`Q5%rkL2@t z_ZU1e)fXvsu|m<|9jd#2aSy5%H&b$cHS|YUKDYXBSy;#n;4udm6-J<`%u?HjTYEFQ zKtb(12Jn;&0UK?ABfv(GAeRV0sy#lG9Yn=ww-OOvS `#t2{BJ;Q@DS<3y;mE2X~ zqx2oO^L_xp>wo`qo&n@HE-QcxYt5ER9kgM|xGJ#WdeA|>E9p4z1!8~>ee7{vnN=5>QWHsTu4-krxamsuvQ_ct zj*xNwpwSIBoW2je1y{b2>sxEw{oDWkqDb5WKbr3Ouhdwu?3Ld6~%(beO?)#?Of6+ms?GOsU5hTdf z1`u`LChc*uS$;hxd|-Wq6pZg5B{)t@p{;K4q5d0iYXJL(Zvc7ezkTb<4T3OfhbMSp z$4C#Nao44VwQ`sHu<%*7c}BC02myFiF;;Zv{O*i%F4@i7Mvz}VDE z))q51f=%1R?yi8*2q4_U!4X1&N5T852IXHO4pgXE;bC5^eL; zX85RmZpi)60m$3GocITzZsmi! zyxT*}1*UwNh{`3FDPIV*5K>yq3{}RcKK#oI6X%t!%AipN4^xf@3=3D&f;NQW@9NEP zoe72jjQ|@#f&>7mekTl{6J@xpUXyk4v^6n zGy-e{2@(Lr1R!PLpjwd-n-?S&gq!1RecYK!%&MKrErmU7@BvMUbW`$q@y~a>dq94z zAArbE@hYrP;Z|JQConXa*ndNGRN|@EIh6oJ`nr~30K^I*4vhwzMu4rHZh0Z%TC$@{ zj)xDpXft1QnO6d61PKyk2msN|&o%(jC8&=C;l@~CcP5cY*47fz_E_o&AF#~p@BCTM z0CM-&-Z<9>b;xxYRK-t!G0&*T6i zS}d*dl1$4N6LbPtT)K1Oa2kEzspU2MqkiX!CB|Ag07w-=bimAwKZXFYiKeZ?}2XsdFoPoK(0y%)a6-LLljkjvSkmPA+MXREa?t2H}b$!RRD}2 zL4sVBHJVy@v%56xWrw-i7kmJ~gFp9d0Fa=J2h}!6crkpA;$HjG<#_~rP8xmyiy%RQ z1OVv{A% z210BgLJsq=3wYS}bD7^Cdk2vJI(R_354HdfK`yg4e)UyJIrtn903t|`AVGpO1BerZ z5Vcxg7D?pX3@Hup(Fh>_Kmd>+&LYAD@LppI8Pv-lL4pJc667N2AiA(Ba@x-hB5lCK z2Yd_yAUA#`07y{gg9HiScsV2hW{@C3f?TGxtSf}*U<5tEqbqy_0103aBuJ2e8bN{t z2@>Rz0Eh`f+JZ>iwZauXT-TeOf53AY-Wz{ActFDHAHedxETOb=kRU;V1PL-6fV72> zrti4r=Y8P=0Cod_1UX+Y3t$jnB1n)RL4pJc;tN8W_G?tlI)FzT_y_3D-W_X2~Zy-NRS{wf>;6Mmji$V2@)ho z1z1BJtsp^y1PK!4@&L%+2mlf!$W;*;tocEL1PKx(ND$9*@DDxf7eF=xfCLE=BuJ1T kL4pJc62u4~Zhb)h|CFu^@vH#ft^fc407*qoM6N<$g7D#;*8l(j diff --git a/v2/dotclear/plugins/blowupConfig/alpha-img/page-t/light-trails-3.png b/v2/dotclear/plugins/blowupConfig/alpha-img/page-t/light-trails-3.png deleted file mode 100644 index d1dacc23c59c622c9854094e56facd0a78bce4ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38308 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

      UVQ$3oVlO**JLXmyfJTxbYS0 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 Ue@Im32f)wv%sHzn3$OV90ps@!^8f$< diff --git a/v2/dotclear/plugins/blowupConfig/alpha-img/page-t/light-trails-4.png b/v2/dotclear/plugins/blowupConfig/alpha-img/page-t/light-trails-4.png deleted file mode 100644 index 901b6e736949c701c6f7875392918de9ca33f339..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32171 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

      ^_vOrcjvKKoBXHFAtkXs3L*w}ej@ovTfb_w# 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 UrOm%c|FCjO6QKhygWU=HFT|>S6aWAK diff --git a/v2/dotclear/plugins/blowupConfig/alpha-img/page-t/typo.png b/v2/dotclear/plugins/blowupConfig/alpha-img/page-t/typo.png deleted file mode 100644 index ef7689d1032fe5123e26c8eca5be51f3562e91e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15365 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 ');$(styles_combo).append('');$(styles_combo).attr('title',dotclear.msg.predefined_style_title);for(var style in dotclear.blowup_styles){styles_option=document.createElement('option');styles_option.value=dotclear.blowup_styles[style];$(styles_option).append(style);$(styles_combo).append(styles_option);} -$('#theme_config').prepend(styles_combo);$(styles_combo).wrap('

      ').before(''+dotclear.msg.predefined_styles+'').wrap('

      ');$(styles_combo).change(function(){if(this.value=='none'){$(this.form).find('input[type=text]').val('').css({backgroundColor:'#FFF',color:'#000'});$(this.form).find('select').not($(this)).val('');$('#top_image').val('default');}else{applyBlowupValues(this.value);}});var e=$('#bu_export ~ fieldset:first');e.toggle();var img=document.createElement('img');img.src=dotclear.img_plus_src;img.alt=dotclear.img_plus_alt;img.className='expand';$(img).css('cursor','pointer');$(document.createTextNode(' ')).prependTo('#bu_export');$(img).prependTo('#bu_export');$(img).click(function(){if(e.css('display')=='none'){this.src=dotclear.img_minus_src;this.alt=dotclear.img_minus_alt;}else{this.src=dotclear.img_plus_src;this.alt=dotclear.img_plus_alt;} -e.toggle();});var a=document.createElement('a');a.href='#';$(a).text(dotclear.msg.apply_code);e.append(a);$(a).click(function(){var code=e.find('#export_code');if(code.size()==0){return false;} -applyBlowupValues(code.val());return false;});function toggleDisable(e){if(e.attr('disabled')){e.removeAttr('disabled');}else{e.attr('disabled','disabled');}} -function applyBlowupValues(code){code=code.replace("\n","");var re=/(^| )([a-zA-Z0-9_]+):"(.*?)"(;|$)/g;var s=code.match(re);if(typeof(s)=='object'&&s.length>0){var member,target,value,t_e;var reg=new RegExp('^(.+):"(.*)"(;?)\s*$');for(var i=0;i0.5?'#000':'#fff'});}} -function getColorLum(color) -{var rgb=[parseInt('0x'+color.substring(1,3))/255,parseInt('0x'+color.substring(3,5))/255,parseInt('0x'+color.substring(5,7))/255];return(Math.min(rgb[0],Math.min(rgb[1],rgb[2]))+Math.max(rgb[0],Math.max(rgb[1],rgb[2])))/2;}});dotclear.blowup_styles={'Spring Time':'body_bg_c:"#E0E0E0"; body_bg_g:"light"; body_txt_f:"ss1"; body_txt_s:"1.2em"; body_txt_c:"#6B6B6B"; body_line_height:"1.4em"; top_image:"light-trails-1"; blog_title_hide:"0"; blog_title_f:""; blog_title_s:"3.5em"; blog_title_c:"#9AC528"; blog_title_a:"center"; blog_title_p:""; body_link_c:"#279AC4"; body_link_f_c:"#6D8824"; body_link_v_c:"#279AC4"; sidebar_position:""; sidebar_text_f:""; sidebar_text_s:""; sidebar_text_c:"#6B6B6B"; sidebar_title_f:""; sidebar_title_s:""; sidebar_title_c:"#8FB22F"; sidebar_title2_f:""; sidebar_title2_s:""; sidebar_title2_c:"#279AC4"; sidebar_line_c:"#FFD02C"; sidebar_link_c:"#6B6B6B"; sidebar_link_f_c:"#9AC528"; sidebar_link_v_c:"#6B6B6B"; date_title_f:""; date_title_s:"1em"; date_title_c:"#279AC4"; post_title_f:""; post_title_s:"1.7em"; post_title_c:"#9AC528"; post_comment_bg_c:"#FFFAD1"; post_comment_c:"#6B6B6B"; post_commentmy_bg_c:"#F5F9D9"; post_commentmy_c:"#6B6B6B"; prelude_c:"#EDEDED"; footer_f:""; footer_s:"1.2em"; footer_c:"#9AC528"; footer_l_c:"#6D8824"; footer_bg_c:"#E0E0E0"','Forest':'body_bg_c:"#80661A"; body_bg_g:"light"; body_txt_f:""; body_txt_s:""; body_txt_c:"#0A0A00"; body_line_height:"1.4em"; top_image:"default"; blog_title_hide:"0"; blog_title_f:"s3"; blog_title_s:"4em"; blog_title_c:"#D9D9BF"; blog_title_a:""; blog_title_p:""; body_link_c:"#666600"; body_link_f_c:"#CC9933"; body_link_v_c:"#8D8D40"; sidebar_position:""; sidebar_text_f:""; sidebar_text_s:""; sidebar_text_c:"#0A0A00"; sidebar_title_f:"s2"; sidebar_title_s:"1.6em"; sidebar_title_c:"#4D4D00"; sidebar_title2_f:"s2"; sidebar_title2_s:""; sidebar_title2_c:"#575700"; sidebar_line_c:"#D9D9BF"; sidebar_link_c:"#40330D"; sidebar_link_f_c:"#666600"; sidebar_link_v_c:"#40330D"; date_title_f:""; date_title_s:""; date_title_c:"#B3B380"; post_title_f:"s2"; post_title_s:"2em"; post_title_c:"#4D4D00"; post_comment_bg_c:"#F0F0E6"; post_comment_c:"#0A0A00"; prelude_c:"#140F05"; footer_f:""; footer_s:""; footer_c:"#FFFFFF"; footer_l_c:"#D9AD2B"; footer_bg_c:"#33260D"','Flamingo':'body_bg_c:"#CC9999"; body_bg_g:"light"; body_txt_f:"ss3"; body_txt_s:"1.2em"; body_txt_c:"#1A1A00"; body_line_height:"1.5em"; top_image:"flamingo"; blog_title_hide:"0"; blog_title_f:"ss1"; blog_title_s:"3.5em"; blog_title_c:"#FFFFFF"; blog_title_a:""; blog_title_p:""; body_link_c:"#AD8282"; body_link_f_c:"#8282D9"; body_link_v_c:"#997373"; sidebar_position:""; sidebar_text_f:""; sidebar_text_s:""; sidebar_text_c:""; sidebar_title_f:"ss4"; sidebar_title_s:"1.4em"; sidebar_title_c:"#8282D9"; sidebar_title2_f:"ss3"; sidebar_title2_s:"1.2em"; sidebar_title2_c:"#AD8282"; sidebar_line_c:"#CDCDFF"; sidebar_link_c:"#262640"; sidebar_link_f_c:"#AD8282"; sidebar_link_v_c:"#262640"; date_title_f:"ss4"; date_title_s:""; date_title_c:"#D9B3B3"; post_title_f:"ss4"; post_title_s:"1.8em"; post_title_c:"#8282D9"; post_comment_bg_c:"#F2E5E5"; post_comment_c:""; prelude_c:"#140F0F"; footer_f:""; footer_s:""; footer_c:"#FFFFFF"; footer_l_c:""; footer_bg_c:"#140F0F"','Iceberg':'body_bg_c:"#5280A3"; body_bg_g:"dark"; body_txt_f:"ss3"; body_txt_s:"1.1em"; body_txt_c:"#757575"; body_line_height:"1.5em"; top_image:"default"; blog_title_hide:"0"; blog_title_f:"s2"; blog_title_s:"3em"; blog_title_c:"#FFFFFF"; blog_title_a:""; blog_title_p:""; body_link_c:"#BDB000"; body_link_f_c:"#F3E66D"; body_link_v_c:"#BDB000"; sidebar_position:"left"; sidebar_text_f:""; sidebar_text_s:""; sidebar_text_c:""; sidebar_title_f:"ss3"; sidebar_title_s:"1.4em"; sidebar_title_c:"#689B9C"; sidebar_title2_f:"ss3"; sidebar_title2_s:"1.2em"; sidebar_title2_c:"#737300"; sidebar_line_c:"#E6E6CD"; sidebar_link_c:"#66664D"; sidebar_link_f_c:"#5280A3"; sidebar_link_v_c:"#66664D"; date_title_f:""; date_title_s:""; date_title_c:"#000000"; post_title_f:"s2"; post_title_s:"1.8em"; post_title_c:"#6F6800"; post_comment_bg_c:"#E4E4E2"; post_comment_c:""; prelude_c:"#0E2734"; footer_f:""; footer_s:""; footer_c:"#FFFFFF"; footer_l_c:""; footer_bg_c:"#0E2734"','Night':'body_bg_c:"#0D1A26"; body_bg_g:"dark"; body_txt_f:"ss3"; body_txt_s:"1.1em"; body_txt_c:"#050A0F"; body_line_height:"1.5em"; top_image:"default"; blog_title_hide:"0"; blog_title_f:"s2"; blog_title_s:"3.5em"; blog_title_c:"#F2F2E5"; blog_title_a:""; body_link_c:"#336699"; body_link_f_c:"#66664D"; body_link_v_c:"#2B5782"; sidebar_position:""; sidebar_text_f:""; sidebar_text_s:""; sidebar_text_c:""; sidebar_title_f:"ss3"; sidebar_title_s:"1.4em"; sidebar_title_c:"#336699"; sidebar_title2_f:"ss3"; sidebar_title2_s:"1.2em"; sidebar_title2_c:"#737300"; sidebar_line_c:"#E6E6CD"; sidebar_link_c:"#66664D"; sidebar_link_f_c:"#336699"; sidebar_link_v_c:"#66664D"; date_title_f:""; date_title_s:""; date_title_c:"#ADAD82"; post_title_f:"s2"; post_title_s:"1.8em"; post_title_c:"#737300"; post_comment_bg_c:"#E6E6CD"; post_comment_c:""; prelude_c:"#070E14"; footer_f:""; footer_s:""; footer_c:"#FFFFFF"; footer_l_c:""; footer_bg_c:"#14140F"; blog_title_p:""','Peas & Carrots':'body_bg_c:"#9DCA25"; body_bg_g:"light"; body_txt_f:"ss1"; body_txt_s:"1.2em"; body_txt_c:"#383839"; body_line_height:"1.5em"; top_image:"butterflies"; blog_title_hide:"0"; blog_title_f:"ss4"; blog_title_s:"3em"; blog_title_c:"#DBDB9D"; blog_title_a:"left"; blog_title_p:""; body_link_c:"#646B10"; body_link_f_c:"#DF6C01"; body_link_v_c:"#919924"; sidebar_position:"left"; sidebar_text_f:""; sidebar_text_s:""; sidebar_text_c:""; sidebar_title_f:"ss4"; sidebar_title_s:""; sidebar_title_c:"#FE9017"; sidebar_title2_f:"s2"; sidebar_title2_s:"1.2em"; sidebar_title2_c:"#826228"; sidebar_line_c:"#D3EB8B"; sidebar_link_c:"#858547"; sidebar_link_f_c:"#FE9017"; sidebar_link_v_c:"#8F9645"; date_title_f:""; date_title_s:""; date_title_c:"#826228"; post_title_f:"ss4"; post_title_s:"1.8em"; post_title_c:"#806432"; post_comment_bg_c:"#EFFDCC"; post_comment_c:"#826228"; prelude_c:"#C8E186"; footer_f:""; footer_s:"1em"; footer_c:"#FFFFFF"; footer_l_c:"#FFFFFF"; footer_bg_c:"#484432"','Rabbit':'body_bg_c:"#8F9645"; body_bg_g:"solid"; body_txt_f:"ss1"; body_txt_s:"1.2em"; body_txt_c:"#625D47"; body_line_height:"1.4em"; top_image:"rabbit"; blog_title_hide:"0"; blog_title_f:"ss1"; blog_title_s:"3.5em"; blog_title_c:"#DBDB9D"; blog_title_a:""; blog_title_p:"130:70"; body_link_c:"#646B10"; body_link_f_c:"#484C12"; body_link_v_c:"#919924"; sidebar_position:""; sidebar_text_f:""; sidebar_text_s:""; sidebar_text_c:"#858547"; sidebar_title_f:""; sidebar_title_s:""; sidebar_title_c:"#8F9645"; sidebar_title2_f:"s2"; sidebar_title2_s:""; sidebar_title2_c:"#826228"; sidebar_line_c:"#95956B"; sidebar_link_c:"#858547"; sidebar_link_f_c:"#826228"; sidebar_link_v_c:"#8F9645"; date_title_f:"s2"; date_title_s:"1em"; date_title_c:"#826228"; post_title_f:"s2"; post_title_s:"1.6em"; post_title_c:"#806432"; post_comment_bg_c:"#D6DE91"; post_comment_c:"#826228"; prelude_c:"#484432"; footer_f:""; footer_s:"1em"; footer_c:"#A6AF50"; footer_l_c:"#DBDB9D"; footer_bg_c:"#484432"','Rec Room':'body_bg_c:"#9B5E1C"; body_bg_g:"dark"; body_txt_f:"ss3"; body_txt_s:"1.1em"; body_txt_c:"#757575"; body_line_height:"1.5em"; top_image:"default"; blog_title_hide:"0"; blog_title_f:"s2"; blog_title_s:"3em"; blog_title_c:"#F9FAD6"; blog_title_a:""; blog_title_p:""; body_link_c:"#D1BF1D"; body_link_f_c:"#EEE168"; body_link_v_c:"#D1BF1D"; sidebar_position:"left"; sidebar_text_f:""; sidebar_text_s:""; sidebar_text_c:""; sidebar_title_f:"ss3"; sidebar_title_s:"1.2em"; sidebar_title_c:"#689B9C"; sidebar_title2_f:"ss3"; sidebar_title2_s:"1.2em"; sidebar_title2_c:"#737300"; sidebar_line_c:"#E6E6CD"; sidebar_link_c:"#66664D"; sidebar_link_f_c:"#689B9C"; sidebar_link_v_c:"#66664D"; date_title_f:""; date_title_s:""; date_title_c:"#000000"; post_title_f:"s2"; post_title_s:"1.8em"; post_title_c:"#689B9C"; post_comment_bg_c:"#E4E4E2"; post_comment_c:""; prelude_c:"#3B2C16"; footer_f:""; footer_s:""; footer_c:"#FFFFFF"; footer_l_c:""; footer_bg_c:"#3B2C16"','Seville':'body_bg_c:"#B51A0D"; body_bg_g:"dark"; body_txt_f:"ss3"; body_txt_s:"1.1em"; body_txt_c:"#383839"; body_line_height:"1.5em"; top_image:"default"; blog_title_hide:"0"; blog_title_f:"s2"; blog_title_s:"3em"; blog_title_c:"#FFFFFF"; blog_title_a:""; blog_title_p:""; body_link_c:"#F18A32"; body_link_f_c:"#F1B232"; body_link_v_c:"#F18A32"; sidebar_position:"left"; sidebar_text_f:""; sidebar_text_s:""; sidebar_text_c:""; sidebar_title_f:"ss3"; sidebar_title_s:"1.4em"; sidebar_title_c:"#97471C"; sidebar_title2_f:"ss3"; sidebar_title2_s:"1.2em"; sidebar_title2_c:"#737300"; sidebar_line_c:"#E6E6CD"; sidebar_link_c:"#6E6E72"; sidebar_link_f_c:"#F18A32"; sidebar_link_v_c:"#6E6E72"; date_title_f:""; date_title_s:""; date_title_c:"#97471C"; post_title_f:"s2"; post_title_s:"1.8em"; post_title_c:"#F18A32"; post_comment_bg_c:"#E4E4E2"; post_comment_c:""; prelude_c:"#381A1A"; footer_f:""; footer_s:""; footer_c:"#FFFFFF"; footer_l_c:""; footer_bg_c:"#381A1A"','Typo':'body_bg_c:"#FFFFFF"; body_bg_g:"solid"; body_txt_f:"ss1"; body_txt_s:"1.2em"; body_txt_c:"#000000"; body_line_height:"1.4em"; top_image:"typo"; blog_title_hide:"0"; blog_title_f:"s2"; blog_title_s:"3.5em"; blog_title_c:"#B11508"; blog_title_a:"left"; blog_title_p:"140:50"; body_link_c:"#B11508"; body_link_f_c:"#000000"; body_link_v_c:"#4D4D4D"; sidebar_position:""; sidebar_text_f:""; sidebar_text_s:""; sidebar_text_c:"#000000"; sidebar_title_f:"s2"; sidebar_title_s:""; sidebar_title_c:"#B11508"; sidebar_title2_f:"s2"; sidebar_title2_s:""; sidebar_title2_c:"#000000"; sidebar_line_c:"#000000"; sidebar_link_c:"#000000"; sidebar_link_f_c:"#B11508"; sidebar_link_v_c:"#000000"; date_title_f:"s2"; date_title_s:"1em"; date_title_c:"#000000"; post_title_f:"s2"; post_title_s:"1.6em"; post_title_c:"#B11508"; post_comment_bg_c:"#FFFFFF"; post_comment_c:"#000000"; prelude_c:"#FFFFFF"; footer_f:""; footer_s:"1em"; footer_c:"#000000"; footer_l_c:"#B11508"; footer_bg_c:"#FFFFFF"'}; \ No newline at end of file diff --git a/v2/dotclear/plugins/blowupConfig/help.html b/v2/dotclear/plugins/blowupConfig/help.html deleted file mode 100644 index 8442326..0000000 --- a/v2/dotclear/plugins/blowupConfig/help.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - Blowup theme configuration - - - -

      Modifying Blowup theme configuration allows you to customize your theme very easily. To do so, simply fill in the configuration fields or choose a predefined style.

      - -

      Colors

      - -

      When you have to enter a color value, you should use the hexadecimal format. For example: "#FF0000" will give you red. You may also use the color picker located next to every color field.

      -

      If you lack inspiration, try and visit the following pages:

      -
      - -

      Measurement units

      - -

      When you have to indicate a size, it must be followed by a measurement unit. For example: "1em". If you do not include the unit, pixels will be used as default measurement unit.

      -

      The following measurement units are available:

      -
        -
      • px
      • -
      • em
      • -
      • ex
      • -
      • pt
      • -
      • %
      • -
      - -

      Header images

      - -

      You can choose a header image among the list to use in place of the default one.

      - -

      When you choose "Custom..." in the image list, you will be able to upload your own image. The image file must be in JPG or PNG format and must be precisely 800px wide. - -

      If you upload a JPG image, a border will be added to the image, which is not the case with PNG images (the transparency of which will also be kept).

      - -

      Predefined styles

      - -

      You can choose a predefined style in the "Predefinite styles" drop-down list. -Once you have chosen the style, you have to submit the form to apply the modifications.

      - -

      You may then modify the predefined style according to your taste and needs.

      - -

      Configuration import / export

      - -

      At the end of Blowup options, you can display an area names "Configuration import/export". This text area contains the configuration you are currently using. You can copy it to share it with others.

      - -

      To apply (import) a configuration, you simply need to replace the content of the text area with the configuration you want to use. Don't forget to click on "apply code".

      - - - diff --git a/v2/dotclear/plugins/blowupConfig/index.php b/v2/dotclear/plugins/blowupConfig/index.php deleted file mode 100644 index 34e7248..0000000 --- a/v2/dotclear/plugins/blowupConfig/index.php +++ /dev/null @@ -1,464 +0,0 @@ -error->flag()) { - $notices = $core->error->toHTML(); - $core->error->reset(); -} - -$blowup_base = array( - 'body_bg_c' => null, - 'body_bg_g' => 'light', - - 'body_txt_f' => null, - 'body_txt_s' => null, - 'body_txt_c' => null, - 'body_line_height' => null, - - 'top_image' => 'default', - 'top_height' => null, - 'uploaded' => null, - - 'blog_title_hide' => null, - 'blog_title_f' => null, - 'blog_title_s' => null, - 'blog_title_c' => null, - 'blog_title_a' => null, - 'blog_title_p' => null, - - 'body_link_c' => null, - 'body_link_f_c' => null, - 'body_link_v_c' => null, - - 'sidebar_position' => null, - 'sidebar_text_f' => null, - 'sidebar_text_s' => null, - 'sidebar_text_c' => null, - 'sidebar_title_f' => null, - 'sidebar_title_s' => null, - 'sidebar_title_c' => null, - 'sidebar_title2_f' => null, - 'sidebar_title2_s' => null, - 'sidebar_title2_c' => null, - 'sidebar_line_c' => null, - 'sidebar_link_c' => null, - 'sidebar_link_f_c' => null, - 'sidebar_link_v_c' => null, - - 'date_title_f' => null, - 'date_title_s' => null, - 'date_title_c' => null, - - 'post_title_f' => null, - 'post_title_s' => null, - 'post_title_c' => null, - 'post_comment_bg_c' => null, - 'post_comment_c' => null, - 'post_commentmy_bg_c' => null, - 'post_commentmy_c' => null, - - 'prelude_c' => null, - 'footer_f' => null, - 'footer_s' => null, - 'footer_c' => null, - 'footer_l_c' => null, - 'footer_bg_c' => null, - - 'extra_css' => null -); - -$blowup_user = $core->blog->settings->themes->blowup_style; - -$blowup_user = @unserialize($blowup_user); -if (!is_array($blowup_user)) { - $blowup_user = array(); -} - -$blowup_user = array_merge($blowup_base,$blowup_user); - -$gradient_types = array( - __('Light linear gradient') => 'light', - __('Medium linear gradient') => 'medium', - __('Dark linear gradient') => 'dark', - __('Solid color') => 'solid' -); - -$top_images = array(__('Custom...') => 'custom'); -$top_images = array_merge($top_images,array_flip(blowupConfig::$top_images)); - - -if (!empty($_POST)) -{ - try - { - $blowup_user['body_txt_f'] = $_POST['body_txt_f']; - $blowup_user['body_txt_s'] = blowupConfig::adjustFontSize($_POST['body_txt_s']); - $blowup_user['body_txt_c'] = blowupConfig::adjustColor($_POST['body_txt_c']); - $blowup_user['body_line_height'] = blowupConfig::adjustFontSize($_POST['body_line_height']); - - $blowup_user['blog_title_hide'] = (integer) !empty($_POST['blog_title_hide']); - $update_blog_title = !$blowup_user['blog_title_hide'] && ( - !empty($_POST['blog_title_f']) || !empty($_POST['blog_title_s']) || - !empty($_POST['blog_title_c']) || !empty($_POST['blog_title_a']) || - !empty($_POST['blog_title_p']) - ); - - if ($update_blog_title) - { - $blowup_user['blog_title_f'] = $_POST['blog_title_f']; - $blowup_user['blog_title_s'] = blowupConfig::adjustFontSize($_POST['blog_title_s']); - $blowup_user['blog_title_c'] = blowupConfig::adjustColor($_POST['blog_title_c']); - $blowup_user['blog_title_a'] = preg_match('/^(left|center|right)$/',$_POST['blog_title_a']) ? $_POST['blog_title_a'] : null; - $blowup_user['blog_title_p'] = blowupConfig::adjustPosition($_POST['blog_title_p']); - } - - $blowup_user['body_link_c'] = blowupConfig::adjustColor($_POST['body_link_c']); - $blowup_user['body_link_f_c'] = blowupConfig::adjustColor($_POST['body_link_f_c']); - $blowup_user['body_link_v_c'] = blowupConfig::adjustColor($_POST['body_link_v_c']); - - $blowup_user['sidebar_text_f'] = $_POST['sidebar_text_f']; - $blowup_user['sidebar_text_s'] = blowupConfig::adjustFontSize($_POST['sidebar_text_s']); - $blowup_user['sidebar_text_c'] = blowupConfig::adjustColor($_POST['sidebar_text_c']); - $blowup_user['sidebar_title_f'] = $_POST['sidebar_title_f']; - $blowup_user['sidebar_title_s'] = blowupConfig::adjustFontSize($_POST['sidebar_title_s']); - $blowup_user['sidebar_title_c'] = blowupConfig::adjustColor($_POST['sidebar_title_c']); - $blowup_user['sidebar_title2_f'] = $_POST['sidebar_title2_f']; - $blowup_user['sidebar_title2_s'] = blowupConfig::adjustFontSize($_POST['sidebar_title2_s']); - $blowup_user['sidebar_title2_c'] = blowupConfig::adjustColor($_POST['sidebar_title2_c']); - $blowup_user['sidebar_line_c'] = blowupConfig::adjustColor($_POST['sidebar_line_c']); - $blowup_user['sidebar_link_c'] = blowupConfig::adjustColor($_POST['sidebar_link_c']); - $blowup_user['sidebar_link_f_c'] = blowupConfig::adjustColor($_POST['sidebar_link_f_c']); - $blowup_user['sidebar_link_v_c'] = blowupConfig::adjustColor($_POST['sidebar_link_v_c']); - - $blowup_user['sidebar_position'] = ($_POST['sidebar_position'] == 'left') ? 'left' : null; - - $blowup_user['date_title_f'] = $_POST['date_title_f']; - $blowup_user['date_title_s'] = blowupConfig::adjustFontSize($_POST['date_title_s']); - $blowup_user['date_title_c'] = blowupConfig::adjustColor($_POST['date_title_c']); - - $blowup_user['post_title_f'] = $_POST['post_title_f']; - $blowup_user['post_title_s'] = blowupConfig::adjustFontSize($_POST['post_title_s']); - $blowup_user['post_title_c'] = blowupConfig::adjustColor($_POST['post_title_c']); - $blowup_user['post_comment_c'] = blowupConfig::adjustColor($_POST['post_comment_c']); - $blowup_user['post_commentmy_c'] = blowupConfig::adjustColor($_POST['post_commentmy_c']); - - - $blowup_user['footer_f'] = $_POST['footer_f']; - $blowup_user['footer_s'] = blowupConfig::adjustFontSize($_POST['footer_s']); - $blowup_user['footer_c'] = blowupConfig::adjustColor($_POST['footer_c']); - $blowup_user['footer_l_c'] = blowupConfig::adjustColor($_POST['footer_l_c']); - $blowup_user['footer_bg_c'] = blowupConfig::adjustColor($_POST['footer_bg_c']); - - - $blowup_user['extra_css'] = blowupConfig::cleanCSS($_POST['extra_css']); - - if ($can_write_images) - { - $uploaded = null; - if ($blowup_user['uploaded'] && is_file(blowupConfig::imagesPath().'/'.$blowup_user['uploaded'])) { - $uploaded = blowupConfig::imagesPath().'/'.$blowup_user['uploaded']; - } - - if (!empty($_FILES['upfile']) && !empty($_FILES['upfile']['name'])) { - files::uploadStatus($_FILES['upfile']); - $uploaded = blowupConfig::uploadImage($_FILES['upfile']); - $blowup_user['uploaded'] = basename($uploaded); - } - - $blowup_user['top_image'] = in_array($_POST['top_image'],$top_images) ? $_POST['top_image'] : 'default'; - - $blowup_user['body_bg_c'] = blowupConfig::adjustColor($_POST['body_bg_c']); - $blowup_user['body_bg_g'] = in_array($_POST['body_bg_g'],$gradient_types) ? $_POST['body_bg_g'] : ''; - $blowup_user['post_comment_bg_c'] = blowupConfig::adjustColor($_POST['post_comment_bg_c']); - $blowup_user['post_commentmy_bg_c'] = blowupConfig::adjustColor($_POST['post_commentmy_bg_c']); - $blowup_user['prelude_c'] = blowupConfig::adjustColor($_POST['prelude_c']); - blowupConfig::createImages($blowup_user,$uploaded); - } - - $core->blog->settings->addNamespace('themes'); - $core->blog->settings->themes->put('blowup_style',serialize($blowup_user)); - $core->blog->triggerBlog(); - - http::redirect($p_url.'&upd=1'); - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } -} -?> - - - <?php echo __('Blowup configuration'); ?> - - - - - - -'.html::escapeHTML($core->blog->name). -' › '.__('Blog appearance').''.__('Blowup configuration').''. -'

      '.__('back').'

      '; - - -if (!$can_write_images) { - echo '
      '. - __('For the following reasons, images cannot be created. You won\'t be able to change some background properties.'). - $notices.'
      '; -} - -if (!empty($_GET['upd'])) { - echo '

      '.__('Theme configuration has been successfully updated.').'

      '; -} - -echo '
      '; - -echo '
      '.__('General').''; - -if ($can_write_images) { - echo - '

      '. - - '

      '; -} - -echo -'

      '. - -'

      '. - -'

      '. - -'

      '. -'
      '. - -'
      '.__('Links').''. -'

      '. - -'

      '. - -'

      '. -'
      '. - -'
      '.__('Page top').''; - -if ($can_write_images) { - echo - '

      '; -} - -echo -'

      '. - -'

      '. - -'

      '. - -'

      '. - -'

      '. - -'

      '. -'
      '; - -if ($can_write_images) { - if ($blowup_user['top_image'] == 'custom' && $blowup_user['uploaded']) { - $preview_image = http::concatURL($core->blog->url,blowupConfig::imagesURL().'/page-t.png'); - } else { - $preview_image = 'index.php?pf=blowupConfig/alpha-img/page-t/'.$blowup_user['top_image'].'.png'; - } - - echo - '
      '.__('Top image').''. - '

      '. - '

      '.__('Choose "Custom..." to upload your own image.').'

      '. - - '

      '. - - '

      '.__('Preview').'

      '. - '
      '. - ''. - '
      '. - '
      '; -} - -echo -'
      '.__('Sidebar').''. -'

      '. - -'

      '. - -'

      '. - -'

      '. - -'

      '. - -'

      '. - -'

      '. - -'

      '. - -'

      '. - -'

      '. - -'

      '. - -'

      '. - -'

      '. - -'

      '. -'
      '. - -'
      '.__('Entries').''. -'

      '. - -'

      '. - -'

      '. - -'

      '. - -'

      '. - -'

      '; - -if ($can_write_images) { - echo - '

      '; -} - -echo -'

      '; - -if ($can_write_images) { - echo - '

      '; -} - -echo -'

      '. -'
      '. - -'
      '.__('Footer').''. -'

      '. - -'

      '. - -'

      '. - -'

      '. - -'

      '. -'
      '; - -echo -'
      '.__('Additional CSS').''. -'

      '.form::textarea('extra_css',72,5,html::escapeHTML($blowup_user['extra_css']),'maximal','',false,'title="'.__('Additional CSS').'"').'

      '. -'
      '; - - - -// Import / Export configuration -$tmp_array = array(); -$tmp_exclude = array('uploaded','top_height'); -if ($blowup_user['top_image'] == 'custom') { - $tmp_exclude[] = 'top_image'; -} -foreach ($blowup_user as $k => $v) { - if (!in_array($k,$tmp_exclude)) { - $tmp_array[] = $k.':'.'"'.$v.'"'; - } -} -echo -'

      '.__('Configuration import / export').'

      '. -'

      '.__('You can share your configuration using the following code. To apply a configuration, paste the code, click on "Apply code" and save.').'

      '. -'

      '.form::textarea('export_code',72,5,implode('; ',$tmp_array),'maximal','',false,'title="'.__('Copy this code:').'"').'

      '. -'
      '; - -echo -'

      '. -$core->formNonce().'

      '. -'
      '; - -dcPage::helpBlock('blowupConfig'); -?> - - diff --git a/v2/dotclear/plugins/blowupConfig/lib/class.blowup.config.php b/v2/dotclear/plugins/blowupConfig/lib/class.blowup.config.php deleted file mode 100644 index a7fe577..0000000 --- a/v2/dotclear/plugins/blowupConfig/lib/class.blowup.config.php +++ /dev/null @@ -1,429 +0,0 @@ - array( - 'ss1' => 'Arial, Helvetica, sans-serif', - 'ss2' => 'Verdana,Geneva, Arial, Helvetica, sans-serif', - 'ss3' => '"Lucida Grande", "Lucida Sans Unicode", sans-serif', - 'ss4' => '"Trebuchet MS", Helvetica, sans-serif', - 'ss5' => 'Impact, Charcoal, sans-serif' - ), - - 'serif' => array( - 's1' => 'Times, "Times New Roman", serif', - 's2' => 'Georgia, serif', - 's3' => 'Baskerville, "Palatino Linotype", serif' - ), - - 'monospace' => array( - 'm1' => '"Andale Mono", "Courier New", monospace', - 'm2' => '"Courier New", Courier, mono, monospace' - ) - ); - - protected static $fonts_combo = array(); - protected static $fonts_list = array(); - - public static $top_images = array( - 'default' => 'Default', - 'blank' => 'Blank', - 'light-trails-1' => 'Light Trails 1', - 'light-trails-2' => 'Light Trails 2', - 'light-trails-3' => 'Light Trails 3', - 'light-trails-4' => 'Light Trails 4', - 'butterflies' => 'Butterflies', - 'flourish-1' => 'Flourished 1', - 'flourish-2' => 'Flourished 2', - 'animals' => 'Animals', - 'flamingo' => 'Flamingo', - 'rabbit' => 'Rabbit', - 'roadrunner-1' => 'Road Runner 1', - 'roadrunner-2' => 'Road Runner 2', - 'typo' => 'Typo' - ); - - public static function fontsList() - { - if (empty(self::$fonts_combo)) - { - self::$fonts_combo[__('default')] = ''; - foreach (self::$fonts as $family => $g) - { - $fonts = array(); - foreach ($g as $code => $font) { - $fonts[str_replace('"','',$font)] = $code; - } - self::$fonts_combo[$family] = $fonts; - } - } - - return self::$fonts_combo; - } - - public static function fontDef($c) - { - if (empty(self::$fonts_list)) - { - foreach (self::$fonts as $family => $g) - { - foreach ($g as $code => $font) { - self::$fonts_list[$code] = $font; - } - } - } - - return isset(self::$fonts_list[$c]) ? self::$fonts_list[$c] : null; - } - - public static function adjustFontSize($s) - { - if (preg_match('/^([0-9.]+)\s*(%|pt|px|em|ex)?$/',$s,$m)) { - if (empty($m[2])) { - $m[2] = 'px'; - } - return $m[1].$m[2]; - } - - return null; - } - - public static function adjustPosition($p) - { - if (!preg_match('/^[0-9]+(:[0-9]+)?$/',$p)) { - return null; - } - - $p = explode(':',$p); - - return $p[0].(count($p) == 1 ? ':0' : ':'.$p[1]); - } - - public static function adjustColor($c) - { - if ($c === '') { - return ''; - } - - $c = strtoupper($c); - - if (preg_match('/^[A-F0-9]{3,6}$/',$c)) { - $c = '#'.$c; - } - - if (preg_match('/^#[A-F0-9]{6}$/',$c)) { - return $c; - } - - if (preg_match('/^#[A-F0-9]{3,}$/',$c)) { - return '#'.substr($c,1,1).substr($c,1,1).substr($c,2,1).substr($c,2,1).substr($c,3,1).substr($c,3,1); - } - - return ''; - } - - public static function cleanCSS($css) - { - // TODO ? - return $css; - } - - public static function imagesPath() - { - global $core; - return path::real($core->blog->public_path).'/blowup-images'; - } - - public static function imagesURL() - { - global $core; - return $core->blog->settings->system->public_url.'/blowup-images'; - } - - public static function canWriteImages($create=false) - { - global $core; - - $public = path::real($core->blog->public_path); - $imgs = self::imagesPath(); - - if (!function_exists('imagecreatetruecolor') || !function_exists('imagepng') || !function_exists('imagecreatefrompng')) { - $core->error->add(__('At least one of the following functions is not available: '. - 'imagecreatetruecolor, imagepng & imagecreatefrompng.')); - return false; - } - - if (!is_dir($public)) { - $core->error->add(__('The \'public\' directory does not exist.')); - return false; - } - - if (!is_dir($imgs)) { - if (!is_writable($public)) { - $core->error->add(sprintf(__('The \'%s\' directory cannot be modified.'),'public')); - return false; - } - if ($create) { - files::makeDir($imgs); - } - return true; - } - - if (!is_writable($imgs)) { - $core->error->add(sprintf(__('The \'%s\' directory cannot be modified.'),'public/blowup-images')); - return false; - } - - return true; - } - - public static function uploadImage($f) - { - if (!self::canWriteImages(true)) { - throw new Exception(__('Unable to create images.')); - } - - $name = $f['name']; - $type = files::getMimeType($name); - - if ($type != 'image/jpeg' && $type != 'image/png') { - throw new Exception(__('Invalid file type.')); - } - - $dest = self::imagesPath().'/uploaded'.($type == 'image/png' ? '.png' : '.jpg'); - - if (@move_uploaded_file($f['tmp_name'],$dest) === false) { - throw new Exception(__('An error occurred while writing the file.')); - } - - $s = getimagesize($dest); - if ($s[0] != 800) { - throw new Exception(__('Uploaded image is not 800 pixels wide.')); - } - - return $dest; - } - - public static function createImages(&$config,$uploaded) - { - $body_color = $config['body_bg_c']; - $prelude_color = $config['prelude_c']; - $gradient = $config['body_bg_g']; - $comment_color = $config['post_comment_bg_c']; - $comment_color_my = $config['post_commentmy_bg_c']; - $top_image = $config['top_image']; - - $config['top_height'] = null; - - if ($top_image != 'custom' && !isset(self::$top_images[$top_image])) { - $top_image = 'default'; - } - if ($uploaded && !is_file($uploaded)) { - $uploaded = null; - } - - if (!self::canWriteImages(true)) { - throw new Exception(__('Unable to create images.')); - } - - $body_fill = array( - 'light' => dirname(__FILE__).'/../alpha-img/gradient-l.png', - 'medium' => dirname(__FILE__).'/../alpha-img/gradient-m.png', - 'dark' => dirname(__FILE__).'/../alpha-img/gradient-d.png' - ); - - $body_g = isset($body_fill[$gradient]) ? $body_fill[$gradient] : false; - - if ($top_image == 'custom' && $uploaded) { - $page_t = $uploaded; - } else { - $page_t = dirname(__FILE__).'/../alpha-img/page-t/'.$top_image.'.png'; - } - - $body_bg = dirname(__FILE__).'/../alpha-img/body-bg.png'; - $page_t_mask = dirname(__FILE__).'/../alpha-img/page-t/image-mask.png'; - $page_b = dirname(__FILE__).'/../alpha-img/page-b.png'; - $comment_t = dirname(__FILE__).'/../alpha-img/comment-t.png'; - $comment_b = dirname(__FILE__).'/../alpha-img/comment-b.png'; - $default_bg = '#e0e0e0'; - $default_prelude = '#ededed'; - - self::dropImage(basename($body_bg)); - self::dropImage('page-t.png'); - self::dropImage(basename($page_b)); - self::dropImage(basename($comment_t)); - self::dropImage(basename($comment_b)); - - $body_color = self::adjustColor($body_color); - $prelude_color = self::adjustColor($prelude_color); - $comment_color = self::adjustColor($comment_color); - - if ($top_image || $body_color || $gradient != 'light' || $prelude_color || $uploaded) - { - if (!$body_color) { - $body_color = $default_bg; - } - $body_color = sscanf($body_color,'#%2X%2X%2X'); - - # Create body gradient with color - $d_body_bg = imagecreatetruecolor(50,180); - $fill = imagecolorallocate($d_body_bg,$body_color[0],$body_color[1],$body_color[2]); - imagefill($d_body_bg,0,0,$fill); - - # User choosed a gradient - if ($body_g) { - $s_body_bg = imagecreatefrompng($body_g); - imagealphablending($s_body_bg,true); - imagecopy($d_body_bg,$s_body_bg,0,0,0,0,50,180); - imagedestroy($s_body_bg); - } - - if (!$prelude_color) { - $prelude_color = $default_prelude; - } - $prelude_color = sscanf($prelude_color,'#%2X%2X%2X'); - - $s_prelude = imagecreatetruecolor(50,30); - $fill = imagecolorallocate($s_prelude,$prelude_color[0],$prelude_color[1],$prelude_color[2]); - imagefill($s_prelude,0,0,$fill); - imagecopy($d_body_bg,$s_prelude,0,0,0,0,50,30); - - imagepng($d_body_bg,self::imagesPath().'/'.basename($body_bg)); - } - - if ($top_image || $body_color || $gradient != 'light') - { - # Create top image from uploaded image - $size = getimagesize($page_t); - $size = $size[1]; - $type = files::getMimeType($page_t); - - $d_page_t = imagecreatetruecolor(800,$size); - - if ($type == 'image/png') { - $s_page_t = @imagecreatefrompng($page_t); - } else { - $s_page_t = @imagecreatefromjpeg($page_t); - } - - if (!$s_page_t) { - throw new exception(__('Unable to open image.')); - } - - $fill = imagecolorallocate($d_page_t,$body_color[0],$body_color[1],$body_color[2]); - imagefill($d_page_t,0,0,$fill); - - if ($type == 'image/png') - { - # PNG, we only add body gradient and image - imagealphablending($s_page_t,true); - imagecopyresized($d_page_t,$d_body_bg,0,0,0,50,800,130,50,130); - imagecopy($d_page_t,$s_page_t,0,0,0,0,800,$size); - } - else - { - # JPEG, we add image and a frame with rounded corners - imagecopy($d_page_t,$s_page_t,0,0,0,0,800,$size); - - imagecopy($d_page_t,$d_body_bg,0,0,0,50,8,4); - imagecopy($d_page_t,$d_body_bg,0,4,0,54,4,4); - imagecopy($d_page_t,$d_body_bg,792,0,0,50,8,4); - imagecopy($d_page_t,$d_body_bg,796,4,0,54,4,4); - - $mask = imagecreatefrompng($page_t_mask); - imagealphablending($mask,true); - imagecopy($d_page_t,$mask,0,0,0,0,800,11); - imagedestroy($mask); - - $fill = imagecolorallocate($d_page_t,255,255,255); - imagefilledrectangle($d_page_t,0,11,3,$size-1,$fill); - imagefilledrectangle($d_page_t,796,11,799,$size-1,$fill); - imagefilledrectangle($d_page_t,0,$size-9,799,$size-1,$fill); - } - - $config['top_height'] = ($size).'px'; - - imagepng($d_page_t,self::imagesPath().'/page-t.png'); - - imagedestroy($d_body_bg); - imagedestroy($d_page_t); - imagedestroy($s_page_t); - - # Create bottom image with color - $d_page_b = imagecreatetruecolor(800,8); - $fill = imagecolorallocate($d_page_b,$body_color[0],$body_color[1],$body_color[2]); - imagefill($d_page_b,0,0,$fill); - - $s_page_b = imagecreatefrompng($page_b); - imagealphablending($s_page_b,true); - imagecopy($d_page_b,$s_page_b,0,0,0,0,800,160); - - imagepng($d_page_b,self::imagesPath().'/'.basename($page_b)); - - imagedestroy($d_page_b); - imagedestroy($s_page_b); - } - - if ($comment_color) { - self::commentImages($comment_color,$comment_t,$comment_b,basename($comment_t),basename($comment_b)); - } - if ($comment_color_my) { - self::commentImages($comment_color_my,$comment_t,$comment_b,'commentmy-t.png','commentmy-b.png'); - } - } - - protected static function commentImages($comment_color,$comment_t,$comment_b,$dest_t,$dest_b) - { - $comment_color = sscanf($comment_color,'#%2X%2X%2X'); - - $d_comment_t = imagecreatetruecolor(500,25); - $fill = imagecolorallocate($d_comment_t,$comment_color[0],$comment_color[1],$comment_color[2]); - imagefill($d_comment_t,0,0,$fill); - - $s_comment_t = imagecreatefrompng($comment_t); - imagealphablending($s_comment_t,true); - imagecopy($d_comment_t,$s_comment_t,0,0,0,0,500,25); - - imagepng($d_comment_t,self::imagesPath().'/'.$dest_t); - imagedestroy($d_comment_t); - imagedestroy($s_comment_t); - - $d_comment_b = imagecreatetruecolor(500,7); - $fill = imagecolorallocate($d_comment_b,$comment_color[0],$comment_color[1],$comment_color[2]); - imagefill($d_comment_b,0,0,$fill); - - $s_comment_b = imagecreatefrompng($comment_b); - imagealphablending($s_comment_b,true); - imagecopy($d_comment_b,$s_comment_b,0,0,0,0,500,7); - - imagepng($d_comment_b,self::imagesPath().'/'.$dest_b); - imagedestroy($d_comment_b); - imagedestroy($s_comment_b); - } - - public static function dropImage($img) - { - $img = path::real(self::imagesPath().'/'.$img); - if (is_writable(dirname($img))) { - @unlink($img); - @unlink(dirname($img).'/.'.basename($img,'.png').'_sq.jpg'); - @unlink(dirname($img).'/.'.basename($img,'.png').'_m.jpg'); - @unlink(dirname($img).'/.'.basename($img,'.png').'_s.jpg'); - @unlink(dirname($img).'/.'.basename($img,'.png').'_sq.jpg'); - @unlink(dirname($img).'/.'.basename($img,'.png').'_t.jpg'); - } - } -} -?> diff --git a/v2/dotclear/plugins/fairTrackbacks/_define.php b/v2/dotclear/plugins/fairTrackbacks/_define.php deleted file mode 100644 index 6b4197d..0000000 --- a/v2/dotclear/plugins/fairTrackbacks/_define.php +++ /dev/null @@ -1,24 +0,0 @@ -registerModule( - /* Name */ "Fair Trackbacks", - /* Description*/ "Trackback validity check", - /* Author */ "Olivier Meunier", - /* Version */ '1.1', - array( - 'permissions' => 'usage,contentadmin', - 'priority' => 200 - ) -); -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/fairTrackbacks/_prepend.php b/v2/dotclear/plugins/fairTrackbacks/_prepend.php deleted file mode 100644 index 9b6f2fd..0000000 --- a/v2/dotclear/plugins/fairTrackbacks/_prepend.php +++ /dev/null @@ -1,22 +0,0 @@ -spamfilters[] = 'dcFilterFairTrackbacks'; -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/fairTrackbacks/_public.php b/v2/dotclear/plugins/fairTrackbacks/_public.php deleted file mode 100644 index 4fd2644..0000000 --- a/v2/dotclear/plugins/fairTrackbacks/_public.php +++ /dev/null @@ -1,18 +0,0 @@ -spamfilters[] = 'dcFilterFairTrackbacks'; -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/fairTrackbacks/class.dc.filter.fairtrackbacks.php b/v2/dotclear/plugins/fairTrackbacks/class.dc.filter.fairtrackbacks.php deleted file mode 100644 index 1248ea1..0000000 --- a/v2/dotclear/plugins/fairTrackbacks/class.dc.filter.fairtrackbacks.php +++ /dev/null @@ -1,85 +0,0 @@ -description = __('Checks trackback source for a link to the post'); - } - - - public function isSpam($type,$author,$email,$site,$ip,$content,$post_id,&$status) - { - if ($type != 'trackback') { - return; - } - - try - { - $default_parse = array('scheme'=>'','host'=>'','path'=>'','query'=>''); - $S = array_merge($default_parse,parse_url($site)); - - if ($S['scheme'] != 'http' || !$S['host'] || !$S['path']) { - throw new Exception('Invalid URL'); - } - - # Check incomink link page - $post = $this->core->blog->getPosts(array('post_id' => $post_id)); - $post_url = $post->getURL(); - $P = array_merge($default_parse,parse_url($post_url)); - - if ($post_url == $site) { - throw new Exception('Same source and destination'); - } - - $o = netHttp::initClient($site,$path); - $o->setTimeout(3); - $o->get($path); - - # Trackback source does not return 200 status code - if ($o->getStatus() != 200) { - throw new Exception('Invalid Status Code'); - } - - $tb_page = $o->getContent(); - - # Do we find a link to post in trackback source? - if ($S['host'] == $P['host']) { - $pattern = $P['path'].($P['query'] ? '?'.$P['query'] : ''); - } else { - $pattern = $post_url; - } - $pattern = preg_quote($pattern,'/'); - - if (!preg_match('/'.$pattern.'/',$tb_page)) { - throw new Exception('Unfair'); - } - } - catch (Exception $e) - { - throw new Exception('Trackback not allowed for this URL.'); - } - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/importExport/_admin.php b/v2/dotclear/plugins/importExport/_admin.php deleted file mode 100644 index ec5dbae..0000000 --- a/v2/dotclear/plugins/importExport/_admin.php +++ /dev/null @@ -1,35 +0,0 @@ -addItem( - __('Import/Export'), - 'plugin.php?p=importExport', - 'index.php?pf=importExport/icon.png', - preg_match('/plugin.php\?p=importExport(&.*)?$/',$_SERVER['REQUEST_URI']), - $core->auth->check('admin',$core->blog->id) -); - -$core->addBehavior('adminDashboardFavs','importExportDashboardFavs'); - -function importExportDashboardFavs($core,$favs) -{ - $favs['importExport'] = new ArrayObject(array( - 'importExport', - __('Import/Export'), - 'plugin.php?p=importExport', - 'index.php?pf=importExport/icon.png', - 'index.php?pf=importExport/icon-big.png', - 'admin',null,null - )); -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/importExport/_define.php b/v2/dotclear/plugins/importExport/_define.php deleted file mode 100644 index 0a45722..0000000 --- a/v2/dotclear/plugins/importExport/_define.php +++ /dev/null @@ -1,21 +0,0 @@ -registerModule( - /* Name */ "Import / Export", - /* Description*/ "Import and Export your blog", - /* Author */ "Olivier Meunier & Contributors", - /* Version */ '3.1', - /* Perm */ 'admin' -); -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/importExport/_prepend.php b/v2/dotclear/plugins/importExport/_prepend.php deleted file mode 100644 index 34c66df..0000000 --- a/v2/dotclear/plugins/importExport/_prepend.php +++ /dev/null @@ -1,42 +0,0 @@ -addBehavior('importExportModules','registerIeModules'); - -function registerIeModules($modules) -{ - $modules['import'][] = 'dcImportFlat'; - $modules['import'][] = 'dcImportFeed'; - - $modules['export'][] = 'dcExportFlat'; - - if ($GLOBALS['core']->auth->isSuperAdmin()) { - $modules['import'][] = 'dcImportDC1'; - $modules['import'][] = 'dcImportWP'; - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/importExport/icon-big.png b/v2/dotclear/plugins/importExport/icon-big.png deleted file mode 100644 index e4a6303cf2264790c8bd751406dbf90f52a14380..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6024 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%0D%d|{ zdIHWu+@d`_sC&&n*?Rx%{&vtDb$n!$Cw*HF$kRLmzfeVHl^_vJvYWAE&Ik-mFp6kGsLa^Fn{v#Q-c|Hch<&2-AO HT*Ceb3w6Gp diff --git a/v2/dotclear/plugins/importExport/icon.png b/v2/dotclear/plugins/importExport/icon.png deleted file mode 100644 index 274b67c427db8b8be8988c5c4e92ed1d64f1ee6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1666 zcmbVNeM}Q)7_X>&35F?ZL_W^e7&2*lcNF>o71~}8TPdrhj-q2y+Cw^MuU@aT1wV1P z5dz3$C^BPW1eFC7!Qux3y3Hai#js-HoNnmQxfvs(+i=>sD^RyTh=1&oyZ3qD_xb&v z?_8BKDy8f~uLpw^HYMW#T98(CVP4$E#dQ)n73HO+3;>WVQED8RNFOhWpT?mjwT z&7X%?{AHk*xQOJw21RyM@v^L-pJ%%n7!7Ke${+LPTjEd2E71D z5{V!_3iG&PPzpknn23l(9BE<_ilQ7??B|#bi^7ORBH{7H5RVT*Qcw(wKq(5tAP<2> z5(xEUWhM)$HR&+FT?1uz2FrUZRv;lTEr}Cq953;AfU*cDaZ3?y1|-=@K#swr$88p0 zai(KMFv3uZ=}`hV0#n%)7-qAM^7s-+!sUv@l;5*OJ&o1>pNz37XV|{h_)n|&kEs6h ziEkR8+PoPZ%tXx#K@A4on;S!;1)P;3BDMV%N9A6>Vnf8P?p$YXK}U1AVq`TU3#P|@ zQ@6go#UQJstCXVSam$2D%i|}5B9HfX**nziK&C39ZHZ_VM}4VzEZ=+5rPm$4Uh^{f zW$A&e%#^US2R%oQ{MpETq4 z%DY>02dt{b*Vo3Ji^2jISABfCcz>ouc1kn3qb#Z#p(zroLlz1{4(3*lzq|Cz7gt(x zDxEiOG#si}7RF#Ozys?zf58#KCR1p|sI1JpbJxA<_&dyp4d{2urqS|=;S;*rUw+-b zHm(YN;Oehm<*uo@T5!hYLJxXgkYvMaAfLh7Y)(|7n{T zm&yk3KjVPCKa&fe|L!*8j9N*>?o!+E-MfP$k(ZhxrHz>ILpJUV7?8JoHMzZ489(nF z+8DEW)25?`(pk%H-8^}!pm23mO;p&vi;d|~Jv}|ntD+T=(kAzVuCA_^3l>~^j6Suy zu?wwp#e>{HVLCiFo4D{n`iLIB^7l`Bha%^@hmJKL_IkZ}d3n)F>E(kdX=x|Yf4pnv zHM=X~SIOijJeA@(zd>Q1+qX;3{h)0K4-X&Td*h>+=;&8#F4N?D>RydkKa2DI6=c#Z Jtype = 'export'; - $this->name = __('Flat file export'); - $this->description = __('Exports a blog or a full Dotclear installation to flat file.'); - } - - public function process($do) - { - # Export a blog - if ($do == 'export_blog' && $this->core->auth->check('admin',$this->core->blog->id)) - { - $fullname = $this->core->blog->public_path.'/.backup_'.sha1(uniqid()); - $blog_id = $this->core->con->escape($this->core->blog->id); - - try - { - $exp = new flatExport($this->core->con,$fullname,$this->core->prefix); - fwrite($exp->fp,'///DOTCLEAR|'.DC_VERSION."|single\n"); - - $exp->export('category', - 'SELECT * FROM '.$this->core->prefix.'category '. - "WHERE blog_id = '".$blog_id."'" - ); - $exp->export('link', - 'SELECT * FROM '.$this->core->prefix.'link '. - "WHERE blog_id = '".$blog_id."'" - ); - $exp->export('setting', - 'SELECT * FROM '.$this->core->prefix.'setting '. - "WHERE blog_id = '".$blog_id."'" - ); - $exp->export('post', - 'SELECT * FROM '.$this->core->prefix.'post '. - "WHERE blog_id = '".$blog_id."'" - ); - $exp->export('meta', - 'SELECT meta_id, meta_type, M.post_id '. - 'FROM '.$this->core->prefix.'meta M, '.$this->core->prefix.'post P '. - 'WHERE P.post_id = M.post_id '. - "AND P.blog_id = '".$blog_id."'" - ); - $exp->export('media', - 'SELECT * FROM '.$this->core->prefix."media WHERE media_path = '". - $this->core->con->escape($this->core->blog->settings->system->public_path)."'" - ); - $exp->export('post_media', - 'SELECT media_id, M.post_id '. - 'FROM '.$this->core->prefix.'post_media M, '.$this->core->prefix.'post P '. - 'WHERE P.post_id = M.post_id '. - "AND P.blog_id = '".$blog_id."'" - ); - $exp->export('ping', - 'SELECT ping.post_id, ping_url, ping_dt '. - 'FROM '.$this->core->prefix.'ping ping, '.$this->core->prefix.'post P '. - 'WHERE P.post_id = ping.post_id '. - "AND P.blog_id = '".$blog_id."'" - ); - $exp->export('comment', - 'SELECT C.* '. - 'FROM '.$this->core->prefix.'comment C, '.$this->core->prefix.'post P '. - 'WHERE P.post_id = C.post_id '. - "AND P.blog_id = '".$blog_id."'" - ); - - # --BEHAVIOR-- exportSingle - $this->core->callBehavior('exportSingle',$this->core,$exp,$blog_id); - - $_SESSION['export_file'] = $fullname; - $_SESSION['export_filename'] = $_POST['file_name']; - $_SESSION['export_filezip'] = !empty($_POST['file_zip']); - http::redirect($this->getURL().'&do=ok'); - } - catch (Exception $e) - { - @unlink($fullname); - throw $e; - } - } - - # Export all content - if ($do == 'export_all' && $this->core->auth->isSuperAdmin()) - { - $fullname = $this->core->blog->public_path.'/.backup_'.sha1(uniqid()); - try - { - $exp = new flatExport($this->core->con,$fullname,$this->core->prefix); - fwrite($exp->fp,'///DOTCLEAR|'.DC_VERSION."|full\n"); - $exp->exportTable('blog'); - $exp->exportTable('category'); - $exp->exportTable('link'); - $exp->exportTable('setting'); - $exp->exportTable('user'); - $exp->exportTable('pref'); - $exp->exportTable('permissions'); - $exp->exportTable('post'); - $exp->exportTable('meta'); - $exp->exportTable('media'); - $exp->exportTable('post_media'); - $exp->exportTable('log'); - $exp->exportTable('ping'); - $exp->exportTable('comment'); - $exp->exportTable('spamrule'); - $exp->exportTable('version'); - - # --BEHAVIOR-- exportFull - $this->core->callBehavior('exportFull',$this->core,$exp); - - $_SESSION['export_file'] = $fullname; - $_SESSION['export_filename'] = $_POST['file_name']; - $_SESSION['export_filezip'] = !empty($_POST['file_zip']); - http::redirect($this->getURL().'&do=ok'); - } - catch (Exception $e) - { - @unlink($fullname); - throw $e; - } - } - - # Send file content - if ($do == 'ok') - { - if (!file_exists($_SESSION['export_file'])) { - throw new Exception(__('Export file not found.')); - } - - ob_end_clean(); - - if (substr($_SESSION['export_filename'],-4) == '.zip') { - $_SESSION['export_filename'] = substr($_SESSION['export_filename'],0,-4);//.'.txt'; - } - - # Flat export - if (empty($_SESSION['export_filezip'])) { - - header('Content-Disposition: attachment;filename='.$_SESSION['export_filename']); - header('Content-Type: text/plain; charset=UTF-8'); - readfile($_SESSION['export_file']); - - unlink($_SESSION['export_file']); - unset($_SESSION['export_file'],$_SESSION['export_filename'],$_SESSION['export_filezip']); - exit; - } - # Zip export - else { - try - { - $file_zipname = $_SESSION['export_filename'].'.zip'; - - $fp = fopen('php://output','wb'); - $zip = new fileZip($fp); - $zip->addFile($_SESSION['export_file'],$_SESSION['export_filename']); - - header('Content-Disposition: attachment;filename='.$file_zipname); - header('Content-Type: application/x-zip'); - - $zip->write(); - - unlink($_SESSION['export_file']); - unset($zip,$_SESSION['export_file'],$_SESSION['export_filename'],$file_zipname); - exit; - } - catch (Exception $e) - { - unset($zip,$_SESSION['export_file'],$_SESSION['export_filename'],$file_zipname); - @unlink($_SESSION['export_file']); - - throw new Exception(__('Failed to compress export file.')); - } - } - } - } - - public function gui() - { - echo - '
      '. - '
      '.__('Single blog').''. - '

      '.sprintf(__('This will create an export of your current blog: %s'),html::escapeHTML($this->core->blog->name)).'

      '. - - '

      '. - form::field(array('file_name','file_name'),50,255,date('Y-m-d-').html::escapeHTML($this->core->blog->id.'-backup.txt')). - '

      '. - - '

      '. - '

      '. - - '

      '. - __('You may also want to download your media directory as a zip file').'

      '. - - '

      '. - form::hidden(array('do'),'export_blog'). - $this->core->formNonce().'

      '. - - '
      '. - '
      '; - - if ($this->core->auth->isSuperAdmin()) - { - echo - '
      '. - '
      '.__('Multiple blogs').''. - '

      '.__('This will create an export of all the content of your database.').'

      '. - - '

      '. - form::field(array('file_name','file_name2'),50,255,date('Y-m-d-').'dotclear-backup.txt'). - '

      '. - - '

      '. - '

      '. - - '

      '. - form::hidden(array('do'),'export_all'). - $this->core->formNonce().'

      '. - - '
      '. - '
      '; - } - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/importExport/inc/class.dc.ieModule.php b/v2/dotclear/plugins/importExport/inc/class.dc.ieModule.php deleted file mode 100644 index bfd9f2a..0000000 --- a/v2/dotclear/plugins/importExport/inc/class.dc.ieModule.php +++ /dev/null @@ -1,80 +0,0 @@ -core =& $core; - $this->setInfo(); - - if (!in_array($this->type,array('import','export'))) { - throw new Exception(sprintf('Unknow type for module %s',get_class($this))); - } - - if (!$this->name) { - $this->name = get_class($this); - } - - $this->id = get_class($this); - $this->url = sprintf('plugin.php?p=importExport&type=%s&module=%s',$this->type,$this->id); - } - - public function init() - { - } - - abstract protected function setInfo(); - - final public function getURL($escape=false) - { - return $escape ? html::escapeHTML($this->url) : $this->url; - } - - abstract public function process($do); - - abstract public function gui(); - - protected function progressBar($percent) - { - $percent = ceil($percent); - if ($percent > 100) { - $percent = 100; - } - return '
      '.$percent.' %
      '; - } - - protected function autoSubmit() - { - return form::hidden(array('autosubmit'),1); - } - - protected function congratMessage() - { - return - '

      '.__('Congratulation!').'

      '. - '

      '.__('Your blog has been successfully imported. Welcome on Dotclear 2!').'

      '. - ''; - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/importExport/inc/class.dc.import.dc1.php b/v2/dotclear/plugins/importExport/inc/class.dc.import.dc1.php deleted file mode 100644 index 7ddb23e..0000000 --- a/v2/dotclear/plugins/importExport/inc/class.dc.import.dc1.php +++ /dev/null @@ -1,625 +0,0 @@ - '', - 'db_name' => '', - 'db_user' => '', - 'db_pwd' => '', - 'db_prefix' => 'dc_', - 'post_limit' => 20, - 'cat_ids' => array() - ); - - protected function setInfo() - { - $this->type = 'import'; - $this->name = __('Dotclear 1.2 import'); - $this->description = __('Import a Dotclear 1.2 installation into your current blog.'); - } - - public function init() - { - $this->con =& $this->core->con; - $this->prefix = $this->core->prefix; - $this->blog_id = $this->core->blog->id; - - if (!isset($_SESSION['dc1_import_vars'])) { - $_SESSION['dc1_import_vars'] = $this->base_vars; - } - $this->vars =& $_SESSION['dc1_import_vars']; - - if ($this->vars['post_limit'] > 0) { - $this->post_limit = $this->vars['post_limit']; - } - } - - public function resetVars() - { - $this->vars = $this->base_vars;; - unset($_SESSION['dc1_import_vars']); - } - - public function process($do) - { - $this->action = $do; - } - - # We handle process in another way to always display something to - # user - protected function guiprocess($do) - { - switch ($do) - { - case 'step1': - $this->vars['db_host'] = $_POST['db_host']; - $this->vars['db_name'] = $_POST['db_name']; - $this->vars['db_user'] = $_POST['db_user']; - $this->vars['db_pwd'] = $_POST['db_pwd']; - $this->vars['post_limit'] = abs((integer) $_POST['post_limit']) > 0 ? $_POST['post_limit'] : 0; - $this->vars['db_prefix'] = $_POST['db_prefix']; - $db = $this->db(); - $db->close(); - $this->step = 2; - echo $this->progressBar(1); - break; - case 'step2': - $this->step = 2; - $this->importUsers(); - $this->step = 3; - echo $this->progressBar(3); - break; - case 'step3': - $this->step = 3; - $this->importCategories(); - if ($this->core->plugins->moduleExists('blogroll')) { - $this->step = 4; - echo $this->progressBar(5); - } else { - $this->step = 5; - echo $this->progressBar(7); - } - break; - case 'step4': - $this->step = 4; - $this->importLinks(); - $this->step = 5; - echo $this->progressBar(7); - break; - case 'step5': - $this->step = 5; - $this->post_offset = !empty($_REQUEST['offset']) ? abs((integer) $_REQUEST['offset']) : 0; - if ($this->importPosts($percent) === -1) { - http::redirect($this->getURL().'&do=ok'); - } else { - echo $this->progressBar(ceil($percent*0.93)+7); - } - break; - case 'ok': - $this->resetVars(); - $this->core->blog->triggerBlog(); - $this->step = 6; - echo $this->progressBar(100); - break; - } - } - - public function gui() - { - try { - $this->guiprocess($this->action); - } catch (Exception $e) { - $this->error($e); - } - - switch ($this->step) - { - case 1: - echo - '

      '.sprintf(__('This will import your Dotclear 1.2 content as new content in the current blog: %s.'), - ''.html::escapeHTML($this->core->blog->name).'').'

      '. - '

      '.__('Please note that this process '. - 'will empty your categories, blogroll, entries and comments on the current blog.').'

      '. - '

      '.__('Depending on the size of your blog, it could take a few minutes.').'

      '; - - printf($this->imForm(1,__('General information'),__('Import my blog now')), - '

      '.__('We first need some information about your old Dotclear 1.2 installation.').'

      '. - '

      '. - '

      '. - '

      '. - '

      '. - '

      '. - '

      '.__('Entries import options').'

      '. - '

      ' - ); - break; - case 2: - printf($this->imForm(2,__('Importing users')), - $this->autoSubmit() - ); - break; - case 3: - printf($this->imForm(3,__('Importing categories')), - $this->autoSubmit() - ); - break; - case 4: - printf($this->imForm(4,__('Importing blogroll')), - $this->autoSubmit() - ); - break; - case 5: - $t = sprintf(__('Importing entries from %d to %d / %d'),$this->post_offset, - min(array($this->post_offset+$this->post_limit,$this->post_count)),$this->post_count); - printf($this->imForm(5,$t), - form::hidden(array('offset'),$this->post_offset). - $this->autoSubmit() - ); - break; - case 6: - echo - '

      '.__('Please read carefully').'

      '. - '
        '. - '
      • '.__('Every newly imported user has received a random password '. - 'and will need to ask for a new one by following the "I forgot my password" link on the login page '. - '(Their registered email address has to be valid.)').'
      • '. - - '
      • '.sprintf(__('Please note that Dotclear 2 has a new URL layout. You can avoid broken '. - 'links by installing DC1 redirect plugin and activate it in your blog configuration.'), - 'http://plugins.dotaddict.org/dc2/details/dc1redirect').'
      • '. - '
      '. - - $this->congratMessage(); - - break; - } - } - - # Simple form for step by step process - protected function imForm($step,$legend,$submit_value=null) - { - if (!$submit_value) { - $submit_value = __('next step').' >'; - } - - return - '
      '. - '
      '.$legend.''. - $this->core->formNonce(). - form::hidden(array('do'),'step'.$step). - '%s'. - '

      '. - '
      '. - '
      '; - } - - # Error display - protected function error($e) - { - echo '
      '.__('Errors:').''. - '

      '.$e->getMessage().'

      '; - } - - # Database init - protected function db() - { - $db = dbLayer::init('mysql',$this->vars['db_host'],$this->vars['db_name'],$this->vars['db_user'],$this->vars['db_pwd']); - - $rs = $db->select("SHOW TABLES LIKE '".$this->vars['db_prefix']."%'"); - if ($rs->isEmpty()) { - throw new Exception(__('Dotclear tables not found')); - } - - while ($rs->fetch()) { - $this->has_table[$rs->f(0)] = true; - } - - # Set this to read data as they were written in Dotclear 1 - try { - $db->execute('SET NAMES DEFAULT'); - } catch (Exception $e) {} - - $db->execute('SET CHARACTER SET DEFAULT'); - $db->execute("SET COLLATION_CONNECTION = DEFAULT"); - $db->execute("SET COLLATION_SERVER = DEFAULT"); - $db->execute("SET CHARACTER_SET_SERVER = DEFAULT"); - $db->execute("SET CHARACTER_SET_DATABASE = DEFAULT"); - - $this->post_count = $db->select( - 'SELECT COUNT(post_id) FROM '.$this->vars['db_prefix'].'post ' - )->f(0); - - return $db; - } - - protected function cleanStr($str) - { - return text::cleanUTF8(@text::toUTF8($str)); - } - - # Users import - protected function importUsers() - { - $db = $this->db(); - $prefix = $this->vars['db_prefix']; - $rs = $db->select('SELECT * FROM '.$prefix.'user'); - - try - { - $this->con->begin(); - - while ($rs->fetch()) - { - if (!$this->core->userExists($rs->user_id)) - { - $cur = $this->con->openCursor($this->prefix.'user'); - $cur->user_id = $rs->user_id; - $cur->user_name = $rs->user_nom; - $cur->user_firstname = $rs->user_prenom; - $cur->user_displayname = $rs->user_pseudo; - $cur->user_pwd = crypt::createPassword(); - $cur->user_email = $rs->user_email; - $cur->user_lang = $rs->user_lang; - $cur->user_tz = $this->core->blog->settings->system->blog_timezone; - $cur->user_post_status = $rs->user_post_pub ? 1 : -2; - $cur->user_options = new ArrayObject(array( - 'edit_size' => (integer) $rs->user_edit_size, - 'post_format' => $rs->user_post_format - )); - - $permissions = array(); - switch ($rs->user_level) - { - case '0': - $cur->user_status = 0; - break; - case '1': # editor - $permissions['usage'] = true; - break; - case '5': # advanced editor - $permissions['contentadmin'] = true; - $permissions['categories'] = true; - $permissions['media_admin'] = true; - break; - case '9': # admin - $permissions['admin'] = true; - break; - } - - $this->core->addUser($cur); - $this->core->setUserBlogPermissions( - $rs->user_id, - $this->blog_id, - $permissions - ); - } - } - - $this->con->commit(); - $db->close(); - } - catch (Exception $e) - { - $this->con->rollback(); - $db->close(); - throw $e; - } - } - - # Categories import - protected function importCategories() - { - $db = $this->db(); - $prefix = $this->vars['db_prefix']; - $rs = $db->select('SELECT * FROM '.$prefix.'categorie ORDER BY cat_ord ASC'); - - try - { - $this->con->execute( - 'DELETE FROM '.$this->prefix.'category '. - "WHERE blog_id = '".$this->con->escape($this->blog_id)."' " - ); - - $ord = 2; - while ($rs->fetch()) - { - $cur = $this->con->openCursor($this->prefix.'category'); - $cur->blog_id = $this->blog_id; - $cur->cat_title = $this->cleanStr(htmlspecialchars_decode($rs->cat_libelle)); - $cur->cat_desc = $this->cleanStr($rs->cat_desc); - $cur->cat_url = $this->cleanStr($rs->cat_libelle_url); - $cur->cat_lft = $ord++; - $cur->cat_rgt = $ord++; - - $cur->cat_id = $this->con->select( - 'SELECT MAX(cat_id) FROM '.$this->prefix.'category' - )->f(0) + 1; - $this->vars['cat_ids'][$rs->cat_id] = $cur->cat_id; - $cur->insert(); - } - - $db->close(); - } - catch (Exception $e) - { - $db->close(); - throw $e; - } - } - - # Blogroll import - protected function importLinks() - { - $db = $this->db(); - $prefix = $this->vars['db_prefix']; - $rs = $db->select('SELECT * FROM '.$prefix.'link ORDER BY link_id ASC'); - - try - { - $this->con->execute( - 'DELETE FROM '.$this->prefix.'link '. - "WHERE blog_id = '".$this->con->escape($this->blog_id)."' " - ); - - while ($rs->fetch()) - { - $cur = $this->con->openCursor($this->prefix.'link'); - $cur->blog_id = $this->blog_id; - $cur->link_href = $this->cleanStr($rs->href); - $cur->link_title = $this->cleanStr($rs->label); - $cur->link_desc = $this->cleanStr($rs->title); - $cur->link_lang = $this->cleanStr($rs->lang); - $cur->link_xfn = $this->cleanStr($rs->rel); - $cur->link_position = (integer) $rs->position; - - $cur->link_id = $this->con->select( - 'SELECT MAX(link_id) FROM '.$this->prefix.'link' - )->f(0) + 1; - $cur->insert(); - } - - $db->close(); - } - catch (Exception $e) - { - $db->close(); - throw $e; - } - } - - # Entries import - protected function importPosts(&$percent) - { - $db = $this->db(); - $prefix = $this->vars['db_prefix']; - - $count = $db->select('SELECT COUNT(post_id) FROM '.$prefix.'post')->f(0); - - $rs = $db->select( - 'SELECT * FROM '.$prefix.'post ORDER BY post_id ASC '. - $db->limit($this->post_offset,$this->post_limit) - ); - - try - { - if ($this->post_offset == 0) - { - $this->con->execute( - 'DELETE FROM '.$this->prefix.'post '. - "WHERE blog_id = '".$this->con->escape($this->blog_id)."' " - ); - } - - while ($rs->fetch()) { - $this->importPost($rs,$db); - } - - $db->close(); - } - catch (Exception $e) - { - $db->close(); - throw $e; - } - - if ($rs->count() < $this->post_limit) { - return -1; - } else { - $this->post_offset += $this->post_limit; - } - - if ($this->post_offset > $this->post_count) { - $percent = 100; - } else { - $percent = $this->post_offset * 100 / $this->post_count; - } - } - - protected function importPost($rs,$db) - { - $cur = $this->con->openCursor($this->prefix.'post'); - $cur->blog_id = $this->blog_id; - $cur->user_id = $rs->user_id; - $cur->cat_id = (integer) $this->vars['cat_ids'][$rs->cat_id]; - $cur->post_dt = $rs->post_dt; - $cur->post_creadt = $rs->post_creadt; - $cur->post_upddt = $rs->post_upddt; - $cur->post_title = html::decodeEntities($this->cleanStr($rs->post_titre)); - - $cur->post_url = date('Y/m/d/',strtotime($cur->post_dt)).$rs->post_id.'-'.$rs->post_titre_url; - $cur->post_url = substr($cur->post_url,0,255); - - $cur->post_format = $rs->post_content_wiki == '' ? 'xhtml' : 'wiki'; - $cur->post_content_xhtml = $this->cleanStr($rs->post_content); - $cur->post_excerpt_xhtml = $this->cleanStr($rs->post_chapo); - - if ($cur->post_format == 'wiki') { - $cur->post_content = $this->cleanStr($rs->post_content_wiki); - $cur->post_excerpt = $this->cleanStr($rs->post_chapo_wiki); - } else { - $cur->post_content = $this->cleanStr($rs->post_content); - $cur->post_excerpt = $this->cleanStr($rs->post_chapo); - } - - $cur->post_notes = $this->cleanStr($rs->post_notes); - $cur->post_status = (integer) $rs->post_pub; - $cur->post_selected = (integer) $rs->post_selected; - $cur->post_open_comment = (integer) $rs->post_open_comment; - $cur->post_open_tb = (integer) $rs->post_open_tb; - $cur->post_lang = $rs->post_lang; - - $cur->post_words = implode(' ',text::splitWords( - $cur->post_title.' '. - $cur->post_excerpt_xhtml.' '. - $cur->post_content_xhtml - )); - - $cur->post_id = $this->con->select( - 'SELECT MAX(post_id) FROM '.$this->prefix.'post' - )->f(0) + 1; - - $cur->insert(); - $this->importComments($rs->post_id,$cur->post_id,$db); - $this->importPings($rs->post_id,$cur->post_id,$db); - - # Load meta if we have some in DC1 - if (isset($this->has_table[$this->vars['db_prefix'].'post_meta'])) { - $this->importMeta($rs->post_id,$cur->post_id,$db); - } - } - - # Comments import - protected function importComments($post_id,$new_post_id,$db) - { - $count_c = $count_t = 0; - - $rs = $db->select( - 'SELECT * FROM '.$this->vars['db_prefix'].'comment '. - 'WHERE post_id = '.(integer) $post_id.' ' - ); - - while ($rs->fetch()) - { - $cur = $this->con->openCursor($this->prefix.'comment'); - $cur->post_id = (integer) $new_post_id; - $cur->comment_author = $this->cleanStr($rs->comment_auteur); - $cur->comment_status = (integer) $rs->comment_pub; - $cur->comment_dt = $rs->comment_dt; - $cur->comment_upddt = $rs->comment_upddt; - $cur->comment_email = $this->cleanStr($rs->comment_email); - $cur->comment_content = $this->cleanStr($rs->comment_content); - $cur->comment_ip = $rs->comment_ip; - $cur->comment_trackback = (integer) $rs->comment_trackback; - - $cur->comment_site = $this->cleanStr($rs->comment_site); - if ($cur->comment_site != '' && !preg_match('!^http://.*$!',$cur->comment_site)) { - $cur->comment_site = substr('http://'.$cur->comment_site,0,255); - } - - if ($rs->exists('spam') && $rs->spam && $rs->comment_status = 0) { - $cur->comment_status = -2; - } - - $cur->comment_words = implode(' ',text::splitWords($cur->comment_content)); - - $cur->comment_id = $this->con->select( - 'SELECT MAX(comment_id) FROM '.$this->prefix.'comment' - )->f(0) + 1; - - $cur->insert(); - - if ($cur->comment_trackback && $cur->comment_status == 1) { - $count_t++; - } elseif ($cur->comment_status == 1) { - $count_c++; - } - } - - if ($count_t > 0 || $count_c > 0) - { - $this->con->execute( - 'UPDATE '.$this->prefix.'post SET '. - 'nb_comment = '.$count_c.', '. - 'nb_trackback = '.$count_t.' '. - 'WHERE post_id = '.(integer) $new_post_id.' ' - ); - } - } - - # Pings import - protected function importPings($post_id,$new_post_id,$db) - { - $urls = array(); - - $rs = $db->select( - 'SELECT * FROM '.$this->vars['db_prefix'].'ping '. - 'WHERE post_id = '.(integer) $post_id - ); - - while ($rs->fetch()) - { - $url = $this->cleanStr($rs->ping_url); - if (isset($urls[$url])) { - continue; - } - - $cur = $this->con->openCursor($this->prefix.'ping'); - $cur->post_id = (integer) $new_post_id; - $cur->ping_url = $url; - $cur->ping_dt = $rs->ping_dt; - $cur->insert(); - - $urls[$url] = true; - } - } - - # Meta import - protected function importMeta($post_id,$new_post_id,$db) - { - $rs = $db->select( - 'SELECT * FROM '.$this->vars['db_prefix'].'post_meta '. - 'WHERE post_id = '.(integer) $post_id.' ' - ); - - if ($rs->isEmpty()) { - return; - } - - while ($rs->fetch()) { - $this->core->meta->setPostMeta($new_post_id,$this->cleanStr($rs->meta_key),$this->cleanStr($rs->meta_value)); - } - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/importExport/inc/class.dc.import.feed.php b/v2/dotclear/plugins/importExport/inc/class.dc.import.feed.php deleted file mode 100644 index cca76c1..0000000 --- a/v2/dotclear/plugins/importExport/inc/class.dc.import.feed.php +++ /dev/null @@ -1,99 +0,0 @@ -type = 'import'; - $this->name = __('Feed import'); - $this->description = __('Imports a feed as new entries.'); - } - - public function process($do) - { - if ($do == 'ok') { - $this->status = true; - return; - } - - if (empty($_POST['feed_url'])) { - return; - } - - $this->feed_url = $_POST['feed_url']; - - $feed = feedReader::quickParse($this->feed_url); - if ($feed === false) { - throw new Exception(__('Cannot retrieve feed URL.')); - } - if (count($feed->items) == 0) { - throw new Exception(__('No items in feed.')); - } - - $cur = $this->core->con->openCursor($this->core->prefix.'post'); - $this->core->con->begin(); - foreach ($feed->items as $item) - { - $cur->clean(); - $cur->user_id = $this->core->auth->userID(); - $cur->post_content = $item->content ? $item->content : $item->description; - $cur->post_title = $item->title ? $item->title : text::cutString(html::clean($cur->post_content),60); - $cur->post_format = 'xhtml'; - $cur->post_status = -2; - $cur->post_dt = strftime('%Y-%m-%d %H:%M:%S',$item->TS); - - try { - $post_id = $this->core->blog->addPost($cur); - } catch (Exception $e) { - $this->core->con->rollback(); - throw $e; - } - - foreach ($item->subject as $subject) { - $this->core->meta->setPostMeta($post_id,'tag',dcMeta::sanitizeMetaID($subject)); - } - } - - $this->core->con->commit(); - http::redirect($this->getURL().'&do=ok'); - - } - - public function gui() - { - if ($this->status) { - echo '

      '.__('Content successfully imported.').'

      '; - } - - echo - '
      '. - '
      '.__('Single blog').''. - '

      '.sprintf(__('This will import a feed (RSS or Atom) a as new content in the current blog: %s.'),html::escapeHTML($this->core->blog->name)).'

      '. - - '

      '. - form::field('feed_url',50,300,html::escapeHTML($this->feed_url)).'

      '. - - '

      '. - $this->core->formNonce(). - form::hidden(array('do'),1). - '

      '. - - '
      '. - '
      '; - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/importExport/inc/class.dc.import.flat.php b/v2/dotclear/plugins/importExport/inc/class.dc.import.flat.php deleted file mode 100644 index 96f2c6c..0000000 --- a/v2/dotclear/plugins/importExport/inc/class.dc.import.flat.php +++ /dev/null @@ -1,325 +0,0 @@ -type = 'import'; - $this->name = __('Flat file import'); - $this->description = __('Imports a blog or a full Dotclear installation from flat file.'); - } - - public function process($do) - { - if ($do == 'single' || $do == 'full') { - $this->status = $do; - return; - } - - $to_unlink = false; - - # Single blog import - $files = $this->getPublicFiles(); - $single_upl = null; - if (!empty($_POST['public_single_file']) && in_array($_POST['public_single_file'],$files)) { - $single_upl = false; - } elseif (!empty($_FILES['up_single_file'])) { - $single_upl = true; - } - - if ($single_upl !== null) - { - if ($single_upl) { - files::uploadStatus($_FILES['up_single_file']); - $file = DC_TPL_CACHE.'/'.md5(uniqid()); - if (!move_uploaded_file($_FILES['up_single_file']['tmp_name'],$file)) { - throw new Exception(__('Unable to move uploaded file.')); - } - $to_unlink = true; - } else { - $file = $_POST['public_single_file']; - } - - try { - # Try to unzip file - $unzip_file = $this->unzip($file); - if (false !== $unzip_file) { - $bk = new flatImport($this->core,$unzip_file); - } - # Else this is a normal file - else { - $bk = new flatImport($this->core,$file); - } - - $bk->importSingle(); - } catch (Exception $e) { - @unlink($unzip_file); - if ($to_unlink) { - @unlink($file); - } - throw $e; - } - @unlink($unzip_file); - if ($to_unlink) { - @unlink($file); - } - http::redirect($this->getURL().'&do=single'); - } - - # Full import - $full_upl = null; - if (!empty($_POST['public_full_file']) && in_array($_POST['public_full_file'],$files)) { - $full_upl = false; - } elseif (!empty($_FILES['up_full_file'])) { - $full_upl = true; - } - - if ($full_upl !== null && $this->core->auth->isSuperAdmin()) - { - if (empty($_POST['your_pwd']) || !$this->core->auth->checkPassword(crypt::hmac(DC_MASTER_KEY,$_POST['your_pwd']))) { - throw new Exception(__('Password verification failed')); - } - - if ($full_upl) { - files::uploadStatus($_FILES['up_full_file']); - $file = DC_TPL_CACHE.'/'.md5(uniqid()); - if (!move_uploaded_file($_FILES['up_full_file']['tmp_name'],$file)) { - throw new Exception(__('Unable to move uploaded file.')); - } - $to_unlink = true; - } else { - $file = $_POST['public_full_file']; - } - - try { - # Try to unzip file - $unzip_file = $this->unzip($file); - if (false !== $unzip_file) { - $bk = new flatImport($this->core,$unzip_file); - } - # Else this is a normal file - else { - $bk = new flatImport($this->core,$file); - } - - $bk->importFull(); - } catch (Exception $e) { - @unlink($unzip_file); - if ($to_unlink) { - @unlink($file); - } - throw $e; - } - @unlink($unzip_file); - if ($to_unlink) { - @unlink($file); - } - http::redirect($this->getURL().'&do=full'); - } - - header('content-type:text/plain'); - var_dump($_POST); - exit; - - $this->status = true; - } - - public function gui() - { - if ($this->status == 'single') - { - echo '

      '.__('Single blog successfully imported.').'

      '; - return; - } - if ($this->status == 'full') - { - echo '

      '.__('Content successfully imported.').'

      '; - return; - } - - $public_files = array_merge(array('-' => ''),$this->getPublicFiles()); - $has_files = (boolean) (count($public_files) - 1); - - echo - '\n"; - - echo - '
      '. - '
      '.__('Single blog').''. - '

      '.sprintf(__('This will import a single blog backup as new content in the current blog: %s.'),html::escapeHTML($this->core->blog->name)).'

      '. - - '

      '. - ''. - '

      '; - - if ($has_files) { - echo - '

      '; - } - - echo - '

      '. - $this->core->formNonce(). - form::hidden(array('do'),1). - form::hidden(array('MAX_FILE_SIZE'),DC_MAX_UPLOAD_SIZE). - '

      '. - - '
      '. - '
      '; - - if ($this->core->auth->isSuperAdmin()) - { - echo - '
      '. - '
      '.__('Multiple blogs').''. - '

      '.__('This will reset all the content of your database, except users.').'

      '. - - '

      '. - ''. - '

      '; - - if ($has_files) { - echo - '

      '. - form::combo('public_full_file',$public_files). - '

      '; - } - - echo - '

      '. - form::password('your_pwd',20,255).'

      '. - - '

      '. - $this->core->formNonce(). - form::hidden(array('do'),1). - form::hidden(array('MAX_FILE_SIZE'),DC_MAX_UPLOAD_SIZE). - '

      '. - - '
      '. - '
      '; - } - } - - protected function getPublicFiles() - { - $public_files = array(); - $dir = @dir($this->core->blog->public_path); - if ($dir) - { - while (($entry = $dir->read()) !== false) { - $entry_path = $dir->path.'/'.$entry; - - if (is_file($entry_path) && is_readable($entry_path)) - { - # Do not test each zip file content here, its too long - if (substr($entry_path,-4) == '.zip') { - $public_files[$entry] = $entry_path; - } - elseif (self::checkFileContent($entry_path)) { - $public_files[$entry] = $entry_path; - } - } - } - } - return $public_files; - } - - protected static function checkFileContent($entry_path) - { - $ret = false; - - $fp = fopen($entry_path,'rb'); - $ret = strpos(fgets($fp),'///DOTCLEAR|') === 0; - fclose($fp); - - return $ret; - } - - private function unzip($file) - { - $zip = new fileUnzip($file); - - if ($zip->isEmpty()) { - $zip->close(); - return false;//throw new Exception(__('File is empty or not a compressed file.')); - } - - foreach($zip->getFilesList() as $zip_file) - { - # Check zipped file name - if (substr($zip_file,-4) != '.txt') { - continue; - } - - # Check zipped file contents - $content = $zip->unzip($zip_file); - if (strpos($content,'///DOTCLEAR|') !== 0) { - unset($content); - continue; - } - - $target = path::fullFromRoot($zip_file,dirname($file)); - - # Check existing files with same name - if (file_exists($target)) { - $zip->close(); - unset($content); - throw new Exception(__('Another file with same name exists.')); - } - - # Extract backup content - if (file_put_contents($target,$content) === false) { - $zip->close(); - unset($content); - throw new Exception(__('Failed to extract backup file.')); - } - - $zip->close(); - unset($content); - - # Return extracted file name - return $target; - } - - $zip->close(); - throw new Exception(__('No backup in compressed file.')); - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/importExport/inc/class.dc.import.wp.php b/v2/dotclear/plugins/importExport/inc/class.dc.import.wp.php deleted file mode 100644 index 3336f11..0000000 --- a/v2/dotclear/plugins/importExport/inc/class.dc.import.wp.php +++ /dev/null @@ -1,788 +0,0 @@ - '', - 'db_name' => '', - 'db_user' => '', - 'db_pwd' => '', - 'db_prefix' => 'wp_', - 'ignore_first_cat' => 1, - 'cat_import' => 1, - 'cat_as_tags' => '', - 'cat_tags_prefix' => 'cat: ', - 'post_limit' => 20, - 'post_formater' => 'xhtml', - 'comment_formater' => 'xhtml', - 'user_ids' => array(), - 'cat_ids' => array(), - 'permalink_template' => 'p=%post_id%', - 'permalink_tags' => array( - '%year%', - '%monthnum%', - '%day%', - '%hour%', - '%minute%', - '%second%', - '%postname%', - '%post_id%', - '%category%', - '%author%' - ) - ); - protected $formaters; - - protected function setInfo() - { - $this->type = 'import'; - $this->name = __('WordPress import'); - $this->description = __('Import a WordPress installation into your current blog.'); - } - - public function init() - { - $this->con =& $this->core->con; - $this->prefix = $this->core->prefix; - $this->blog_id = $this->core->blog->id; - - if (!isset($_SESSION['wp_import_vars'])) { - $_SESSION['wp_import_vars'] = $this->base_vars; - } - $this->vars =& $_SESSION['wp_import_vars']; - - if ($this->vars['post_limit'] > 0) { - $this->post_limit = $this->vars['post_limit']; - } - - foreach ($this->core->getFormaters() as $v) { - $this->formaters[$v] = $v; - } - } - - public function resetVars() - { - $this->vars = $this->base_vars;; - unset($_SESSION['wp_import_vars']); - } - - public function process($do) - { - $this->action = $do; - } - - # We handle process in another way to always display something to - # user - protected function guiprocess($do) - { - switch ($do) - { - case 'step1': - $this->vars['db_host'] = $_POST['db_host']; - $this->vars['db_name'] = $_POST['db_name']; - $this->vars['db_user'] = $_POST['db_user']; - $this->vars['db_pwd'] = $_POST['db_pwd']; - $this->vars['db_prefix'] = $_POST['db_prefix']; - $this->vars['ignore_first_cat'] = isset($_POST['ignore_first_cat']); - $this->vars['cat_import'] = isset($_POST['cat_import']); - $this->vars['cat_as_tags'] = isset($_POST['cat_as_tags']); - $this->vars['cat_tags_prefix'] = $_POST['cat_tags_prefix']; - $this->vars['post_limit'] = abs((integer) $_POST['post_limit']) > 0 ? $_POST['post_limit'] : 0; - $this->vars['post_formater'] = isset($this->formaters[$_POST['post_formater']]) ? $_POST['post_formater'] : 'xhtml'; - $this->vars['comment_formater'] = isset($this->formaters[$_POST['comment_formater']]) ? $_POST['comment_formater'] : 'xhtml'; - $db = $this->db(); - $db->close(); - $this->step = 2; - echo $this->progressBar(1); - break; - case 'step2': - $this->step = 2; - $this->importUsers(); - $this->step = 3; - echo $this->progressBar(3); - break; - case 'step3': - $this->step = 3; - $this->importCategories(); - if ($this->core->plugins->moduleExists('blogroll')) { - $this->step = 4; - echo $this->progressBar(5); - } else { - $this->step = 5; - echo $this->progressBar(7); - } - break; - case 'step4': - $this->step = 4; - $this->importLinks(); - $this->step = 5; - echo $this->progressBar(7); - break; - case 'step5': - $this->step = 5; - $this->post_offset = !empty($_REQUEST['offset']) ? abs((integer) $_REQUEST['offset']) : 0; - if ($this->importPosts($percent) === -1) { - http::redirect($this->getURL().'&do=ok'); - } else { - echo $this->progressBar(ceil($percent*0.93)+7); - } - break; - case 'ok': - $this->resetVars(); - $this->core->blog->triggerBlog(); - $this->step = 6; - echo $this->progressBar(100); - break; - } - } - - public function gui() - { - try { - $this->guiprocess($this->action); - } catch (Exception $e) { - $this->error($e); - } - - switch ($this->step) - { - case 1: - echo - '

      '.sprintf(__('This will import your WordPress content as new content in the current blog: %s.'), - ''.html::escapeHTML($this->core->blog->name).'').'

      '. - '

      '.__('Please note that this process '. - 'will empty your categories, blogroll, entries and comments on the current blog.').'

      '. - '

      '.__('Depending on the size of your blog, it could take a few minutes.').'

      '; - - printf($this->imForm(1,__('General information'),__('Import my blog now')), - '

      '.__('We first need some information about your old WordPress installation.').'

      '. - '

      '. - '

      '. - '

      '. - '

      '. - '

      '. - '

      '.__('Entries import options').'

      '. - '

      '.__('WordPress and Dotclear\'s handling of categories are quite different. '. - 'You can assign several categories to a single post in WordPress. In the Dotclear world, '. - 'we see it more like "One category, several tags." Therefore Dotclear can only import one '. - 'category per post and will chose the lowest numbered one. If you want to keep a trace of '. - 'every category, you can import them as tags, with an optional prefix.').'

      '. - '

      '.__('On the other hand, in WordPress, a post can not be uncategorized, and a default '. - 'installation has a first category labelised "Uncategorized". If you did not change that '. - 'category, you can just ignore it while importing your blog, as Dotclear allows you to '. - 'actually keep your posts uncategorized.').'

      '. - '

      '. - '

      '. - '

      '. - '

      '. - '

      '. - - '

      '.__('Content filters').'

      '. - '

      '.__('You may want to process your post and/or comment content with the following filters.').'

      '. - '

      '. - '

      ' - ); - break; - case 2: - printf($this->imForm(2,__('Importing users')), - $this->autoSubmit() - ); - break; - case 3: - printf($this->imForm(3,__('Importing categories')), - $this->autoSubmit() - ); - break; - case 4: - printf($this->imForm(4,__('Importing blogroll')), - $this->autoSubmit() - ); - break; - case 5: - $t = sprintf(__('Importing entries from %d to %d / %d'),$this->post_offset, - min(array($this->post_offset+$this->post_limit,$this->post_count)),$this->post_count); - printf($this->imForm(5,$t), - form::hidden(array('offset'),$this->post_offset). - $this->autoSubmit() - ); - break; - case 6: - echo - '

      '.__('Every newly imported user has received a random password '. - 'and will need to ask for a new one by following the "I forgot my password" link on the login page '. - '(Their registered email address has to be valid.)').'

      '. - $this->congratMessage(); - break; - } - } - - # Simple form for step by step process - protected function imForm($step,$legend,$submit_value=null) - { - if (!$submit_value) { - $submit_value = __('next step').' >'; - } - - return - '
      '. - '
      '.$legend.''. - $this->core->formNonce(). - form::hidden(array('do'),'step'.$step). - '%s'. - '

      '. - '
      '. - '
      '; - } - - # Error display - protected function error($e) - { - echo '
      '.__('Errors:').''. - '

      '.$e->getMessage().'

      '; - } - - # Database init - protected function db() - { - $db = dbLayer::init('mysql',$this->vars['db_host'],$this->vars['db_name'],$this->vars['db_user'],$this->vars['db_pwd']); - - $rs = $db->select("SHOW TABLES LIKE '".$this->vars['db_prefix']."%'"); - if ($rs->isEmpty()) { - throw new Exception(__('WordPress tables not found')); - } - - while ($rs->fetch()) { - $this->has_table[$rs->f(0)] = true; - } - - # Set this to read data as they were written - try { - $db->execute('SET NAMES DEFAULT'); - } catch (Exception $e) {} - - $db->execute('SET CHARACTER SET DEFAULT'); - $db->execute("SET COLLATION_CONNECTION = DEFAULT"); - $db->execute("SET COLLATION_SERVER = DEFAULT"); - $db->execute("SET CHARACTER_SET_SERVER = DEFAULT"); - $db->execute("SET CHARACTER_SET_DATABASE = DEFAULT"); - - $this->post_count = $db->select( - 'SELECT COUNT(ID) FROM '.$this->vars['db_prefix'].'posts '. - 'WHERE post_type = \'post\' OR post_type = \'page\'' - )->f(0); - - return $db; - } - - protected function cleanStr($str) - { - return text::cleanUTF8(@text::toUTF8($str)); - } - - # Users import - protected function importUsers() - { - $db = $this->db(); - $prefix = $this->vars['db_prefix']; - $rs = $db->select('SELECT * FROM '.$prefix.'users'); - - try - { - $this->con->begin(); - - while ($rs->fetch()) - { - $user_login = preg_replace('/[^A-Za-z0-9@._-]/','-',$rs->user_login); - $this->vars['user_ids'][$rs->ID] = $user_login; - if (!$this->core->userExists($user_login)) - { - $cur = $this->con->openCursor($this->prefix.'user'); - $cur->user_id = $user_login; - $cur->user_pwd = crypt::createPassword(); - $cur->user_displayname = $rs->user_nicename; - $cur->user_email = $rs->user_email; - $cur->user_url = $rs->user_url; - $cur->user_creadt = $rs->user_registered; - $cur->user_lang = $this->core->blog->settings->system->lang; - $cur->user_tz = $this->core->blog->settings->system->blog_timezone; - $permissions = array(); - - $rs_meta = $db->select('SELECT * FROM '.$prefix.'usermeta WHERE user_id = '.$rs->ID); - while ($rs_meta->fetch()) - { - switch ($rs_meta->meta_key) - { - case 'first_name': - $cur->user_firstname = $this->cleanStr($rs_meta->meta_value); - break; - case 'last_name': - $cur->user_name = $this->cleanStr($rs_meta->meta_value); - break; - case 'description': - $cur->user_desc = $this->cleanStr($rs_meta->meta_value); - break; - case 'rich_editing': - $cur->user_options = new ArrayObject(array( - 'enable_wysiwyg' => $rs_meta->meta_value == 'true' ? true : false - )); - break; - case 'wp_user_level': - switch ($rs_meta->meta_value) - { - case '0': # Subscriber - $cur->user_status = 0; - break; - case '1': # Contributor - $permissions['usage'] = true; - $permissions['publish'] = true; - $permissions['delete'] = true; - break; - case '2': # Author - case '3': - case '4': - $permissions['contentadmin'] = true; - $permissions['media'] = true; - break; - case '5': # Editor - case '6': - case '7': - $permissions['contentadmin'] = true; - $permissions['categories'] = true; - $permissions['media_admin'] = true; - $permissions['pages'] = true; - $permissions['blogroll'] = true; - break; - case '8': # Administrator - case '9': - case '10': - $permissions['admin'] = true; - break; - } - break; - } - } - $this->core->addUser($cur); - $this->core->setUserBlogPermissions( - $cur->user_id, - $this->blog_id, - $permissions - ); - } - } - $this->con->commit(); - $db->close(); - } - catch (Exception $e) - { - $this->con->rollback(); - $db->close(); - throw $e; - } - } - - # Categories import - protected function importCategories() - { - $db = $this->db(); - $prefix = $this->vars['db_prefix']; - $rs = $db->select( - 'SELECT * FROM '.$prefix.'terms AS t, '.$prefix.'term_taxonomy AS x '. - 'WHERE x.taxonomy = \'category\' '. - 'AND t.term_id = x.term_id '. - ($this->vars['ignore_first_cat'] ? 'AND t.term_id <> 1 ' : ''). - 'ORDER BY t.term_id ASC' - ); - - try - { - $this->con->execute( - 'DELETE FROM '.$this->prefix.'category '. - "WHERE blog_id = '".$this->con->escape($this->blog_id)."' " - ); - - $ord = 2; - while ($rs->fetch()) - { - $cur = $this->con->openCursor($this->prefix.'category'); - $cur->blog_id = $this->blog_id; - $cur->cat_title = $this->cleanStr($rs->name); - $cur->cat_desc = $this->cleanStr($rs->description); - $cur->cat_url = $this->cleanStr($rs->slug); - $cur->cat_lft = $ord++; - $cur->cat_rgt = $ord++; - - $cur->cat_id = $this->con->select( - 'SELECT MAX(cat_id) FROM '.$this->prefix.'category' - )->f(0) + 1; - $this->vars['cat_ids'][$rs->term_id] = $cur->cat_id; - $cur->insert(); - } - - $db->close(); - } - catch (Exception $e) - { - $db->close(); - throw $e; - } - } - - # Blogroll import - protected function importLinks() - { - $db = $this->db(); - $prefix = $this->vars['db_prefix']; - $rs = $db->select('SELECT * FROM '.$prefix.'links ORDER BY link_id ASC'); - - try - { - $this->con->execute( - 'DELETE FROM '.$this->prefix.'link '. - "WHERE blog_id = '".$this->con->escape($this->blog_id)."' " - ); - - while ($rs->fetch()) - { - $cur = $this->con->openCursor($this->prefix.'link'); - $cur->blog_id = $this->blog_id; - $cur->link_href = $this->cleanStr($rs->link_url); - $cur->link_title = $this->cleanStr($rs->link_name); - $cur->link_desc = $this->cleanStr($rs->link_description); - $cur->link_xfn = $this->cleanStr($rs->link_rel); - - $cur->link_id = $this->con->select( - 'SELECT MAX(link_id) FROM '.$this->prefix.'link' - )->f(0) + 1; - $cur->insert(); - } - - $db->close(); - } - catch (Exception $e) - { - $db->close(); - throw $e; - } - } - - # Entries import - protected function importPosts(&$percent) - { - $db = $this->db(); - $prefix = $this->vars['db_prefix']; - - $plink = $db->select( - 'SELECT option_value FROM '.$prefix.'options '. - "WHERE option_name = 'permalink_structure'" - )->option_value; - if ($plink) { - $this->vars['permalink_template'] = substr($plink,1); - } - - $rs = $db->select( - 'SELECT * FROM '.$prefix.'posts '. - 'WHERE post_type = \'post\' OR post_type = \'page\' '. - 'ORDER BY ID ASC '. - $db->limit($this->post_offset,$this->post_limit) - ); - - try - { - if ($this->post_offset == 0) - { - $this->con->execute( - 'DELETE FROM '.$this->prefix.'post '. - "WHERE blog_id = '".$this->con->escape($this->blog_id)."' " - ); - } - - while ($rs->fetch()) { - $this->importPost($rs,$db); - } - - $db->close(); - } - catch (Exception $e) - { - $db->close(); - throw $e; - } - - if ($rs->count() < $this->post_limit) { - return -1; - } else { - $this->post_offset += $this->post_limit; - } - - if ($this->post_offset > $this->post_count) { - $percent = 100; - } else { - $percent = $this->post_offset * 100 / $this->post_count; - } - } - - protected function importPost($rs,$db) - { - $post_date = !@strtotime($rs->post_date) ? '1970-01-01 00:00' : $rs->post_date; - if (!isset($this->vars['user_ids'][$rs->post_author])) { - $user_id = $this->core->auth->userID(); - } else { - $user_id = $this->vars['user_ids'][$rs->post_author]; - } - - $cur = $this->con->openCursor($this->prefix.'post'); - $cur->blog_id = $this->blog_id; - $cur->user_id = $user_id; - $cur->post_dt = $post_date; - $cur->post_creadt = $post_date; - $cur->post_upddt = $rs->post_modified; - $cur->post_title = $this->cleanStr($rs->post_title); - - if (!$cur->post_title) { - $cur->post_title = 'No title'; - } - - if ($this->vars['cat_import'] || $this->vars['cat_as_tags']) - { - $old_cat_ids = $db->select( - 'SELECT * FROM '.$this->vars['db_prefix'].'terms AS t, '. - $this->vars['db_prefix'].'term_taxonomy AS x, '. - $this->vars['db_prefix'].'term_relationships AS r '. - 'WHERE t.term_id = x.term_id '. - ($this->vars['ignore_first_cat'] ? 'AND t.term_id <> 1 ' : ''). - 'AND x.taxonomy = \'category\' '. - 'AND t.term_id = r.term_taxonomy_id '. - 'AND r.object_id ='.$rs->ID. - ' ORDER BY t.term_id ASC ' - ); - if (!$old_cat_ids->isEmpty() && $this->vars['cat_import']) - { - $cur->cat_id = $this->vars['cat_ids'][(integer) $old_cat_ids->term_id]; - } - } - - $permalink_infos = array( - date('Y',strtotime($cur->post_dt)), - date('m',strtotime($cur->post_dt)), - date('d',strtotime($cur->post_dt)), - date('H',strtotime($cur->post_dt)), - date('i',strtotime($cur->post_dt)), - date('s',strtotime($cur->post_dt)), - $rs->post_name, - $rs->ID, - $cur->cat_id, - $cur->user_id - ); - $cur->post_url = str_replace( - $this->vars['permalink_tags'], - $permalink_infos, - $rs->post_type== 'post' ? $this->vars['permalink_template'] : '%postname%' - ); - $cur->post_url = substr($cur->post_url,0,255); - - if (!$cur->post_url) { - $cur->post_url = $rs->ID; - } - - $cur->post_format = $this->vars['post_formater']; - $_post_content = explode('',$rs->post_content,2); - if (count($_post_content) == 1) { - $cur->post_excerpt = NULL; - $cur->post_content = $this->cleanStr(array_shift($_post_content)); - } else { - $cur->post_excerpt = $this->cleanStr(array_shift($_post_content)); - $cur->post_content = $this->cleanStr(array_shift($_post_content)); - } - - $cur->post_content_xhtml = $this->core->callFormater($this->vars['post_formater'],$cur->post_content); - $cur->post_excerpt_xhtml = $this->core->callFormater($this->vars['post_formater'],$cur->post_excerpt); - - switch ($rs->post_status) - { - case 'publish': - $cur->post_status = 1; - break; - case 'draft': - $cur->post_status = 0; - break; - case 'pending': - $cur->post_status = -2; - break; - default: - $cur->post_status = -2; - } - $cur->post_type = $rs->post_type; - $cur->post_password = $rs->post_password ? $rs->post_password : NULL; - $cur->post_open_comment = $rs->comment_status == 'open' ? 1 : 0; - $cur->post_open_tb = $rs->ping_status == 'open' ? 1 : 0; - - $cur->post_words = implode(' ',text::splitWords( - $cur->post_title.' '. - $cur->post_excerpt_xhtml.' '. - $cur->post_content_xhtml - )); - - $cur->post_id = $this->con->select( - 'SELECT MAX(post_id) FROM '.$this->prefix.'post' - )->f(0) + 1; - - $cur->post_url = $this->core->blog->getPostURL($cur->post_url,$cur->post_dt,$cur->post_title,$cur->post_id); - - $cur->insert(); - $this->importComments($rs->ID,$cur->post_id,$db); - $this->importPings($rs->ID,$cur->post_id,$db); - - # Create tags - $this->importTags($rs->ID,$cur->post_id,$db); - - if (!$old_cat_ids->isEmpty() && $this->vars['cat_as_tags']) - { - $old_cat_ids->moveStart(); - while ($old_cat_ids->fetch()) { - $this->core->meta->setPostMeta($cur->post_id,'tag',$this->cleanStr($this->vars['cat_tags_prefix'].$old_cat_ids->name)); - } - } - } - - # Comments import - protected function importComments($post_id,$new_post_id,$db) - { - $count_c = $count_t = 0; - - $rs = $db->select( - 'SELECT * FROM '.$this->vars['db_prefix'].'comments '. - 'WHERE comment_post_ID = '.(integer) $post_id.' ' - ); - - while ($rs->fetch()) - { - $cur = $this->con->openCursor($this->prefix.'comment'); - $cur->post_id = (integer) $new_post_id; - $cur->comment_author = $this->cleanStr($rs->comment_author); - $cur->comment_status = (integer) $rs->comment_approved ; - $cur->comment_dt = $rs->comment_date; - $cur->comment_email = $this->cleanStr($rs->comment_author_email); - $cur->comment_content = $this->core->callFormater($this->vars['comment_formater'],$this->cleanStr($rs->comment_content)); - $cur->comment_ip = $rs->comment_author_IP; - $cur->comment_trackback = $rs->comment_type == 'trackback' ? 1 : 0; - $cur->comment_site = substr($this->cleanStr($rs->comment_author_url),0,255); - if ($cur->comment_site == '') $cur->comment_site = NULL; - - if ($rs->comment_approved == 'spam') { - $cur->comment_status = -2; - } - - $cur->comment_words = implode(' ',text::splitWords($cur->comment_content)); - - $cur->comment_id = $this->con->select( - 'SELECT MAX(comment_id) FROM '.$this->prefix.'comment' - )->f(0) + 1; - - $cur->insert(); - - if ($cur->comment_trackback && $cur->comment_status == 1) { - $count_t++; - } elseif ($cur->comment_status == 1) { - $count_c++; - } - } - - if ($count_t > 0 || $count_c > 0) - { - $this->con->execute( - 'UPDATE '.$this->prefix.'post SET '. - 'nb_comment = '.$count_c.', '. - 'nb_trackback = '.$count_t.' '. - 'WHERE post_id = '.(integer) $new_post_id.' ' - ); - } - } - - # Pings import - protected function importPings($post_id,$new_post_id,$db) - { - $urls = array(); - $pings = array(); - - $rs = $db->select( - 'SELECT pinged FROM '.$this->vars['db_prefix'].'posts '. - 'WHERE ID = '.(integer) $post_id - ); - $pings = explode ("\n",$rs->pinged); - unset ($pings[0]); - - foreach($pings as $ping_url) - { - $url = $this->cleanStr($ping_url); - if (isset($urls[$url])) { - continue; - } - - $cur = $this->con->openCursor($this->prefix.'ping'); - $cur->post_id = (integer) $new_post_id; - $cur->ping_url = $url; - $cur->insert(); - - $urls[$url] = true; - } - } - - # Meta import - protected function importTags($post_id,$new_post_id,$db) - { - $rs = $db->select( - 'SELECT * FROM '.$this->vars['db_prefix'].'terms AS t, '. - $this->vars['db_prefix'].'term_taxonomy AS x, '. - $this->vars['db_prefix'].'term_relationships AS r '. - 'WHERE t.term_id = x.term_id '. - 'AND x.taxonomy = \'post_tag\' '. - 'AND t.term_id = r.term_taxonomy_id '. - 'AND r.object_id ='.$post_id. - ' ORDER BY t.term_id ASC' - ); - - if ($rs->isEmpty()) { - return; - } - - while ($rs->fetch()) { - $this->core->meta->setPostMeta($new_post_id,'tag',$this->cleanStr($rs->name)); - } - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/importExport/inc/flat/class.flat.backup.php b/v2/dotclear/plugins/importExport/inc/flat/class.flat.backup.php deleted file mode 100644 index 7e61cad..0000000 --- a/v2/dotclear/plugins/importExport/inc/flat/class.flat.backup.php +++ /dev/null @@ -1,148 +0,0 @@ -(\\\\\\\\)*+)(\\\\n)/u' => "\$1\n", - '/(?(\\\\\\\\)*+)(\\\\r)/u' => "\$1\r", - '/(?(\\\\\\\\)*+)(\\\\")/u' => '$1"', - '/(\\\\\\\\)/' => '\\' - ); - - public function __construct($file) - { - if (file_exists($file) && is_readable($file)) { - $this->fp = fopen($file,'rb'); - $this->line_num = 1; - } else { - throw new Exception(__('No file to read.')); - } - } - - public function __destruct() - { - if ($this->fp) { - fclose($this->fp); - } - } - - public function getLine() - { - if (($line = $this->nextLine()) === false) { - return false; - } - - if (substr($line,0,1) == '[') - { - $this->line_name = substr($line,1,strpos($line,' ')-1); - - $line = substr($line,strpos($line,' ')+1,-1); - $this->line_cols = explode(',',$line); - - return $this->getLine(); - } - elseif (substr($line,0,1) == '"') - { - $line = preg_replace('/^"|"$/','',$line); - $line = preg_split('/(^"|","|"$)/m',$line); - - if (count($this->line_cols) != count($line)) { - throw new Exception(sprintf('Invalid row count at line %s',$this->line_num)); - } - - $res = array(); - - for ($i=0; $iline_cols[$i]] = - preg_replace(array_keys($this->replacement),array_values($this->replacement),$line[$i]); - } - - return new flatBackupItem($this->line_name,$res,$this->line_num); - } - else - { - return $this->getLine(); - } - } - - private function nextLine() - { - if (feof($this->fp)) { - return false; - } - $this->line_num++; - - $line = fgets($this->fp); - $line = trim($line); - - return empty($line) ? $this->nextLine() : $line; - } -} - -class flatBackupItem -{ - public $__name; - public $__line; - private $__data = array(); - - public function __construct($name,$data,$line) - { - $this->__name = $name; - $this->__data = $data; - $this->__line = $line; - } - - public function f($name) - { - return iconv('UTF-8','UTF-8//IGNORE',$this->__data[$name]); - } - - public function __get($name) - { - return $this->f($name); - } - - public function __set($n,$v) - { - $this->__data[$n] = $v; - } - - public function exists($n) - { - return isset($this->__data[$n]); - } - - public function drop() - { - foreach (func_get_args() as $n) { - if (isset($this->__data[$n])) { - unset($this->__data[$n]); - } - } - } - - public function substitute($old,$new) - { - if (isset($this->__data[$old])) { - $this->__data[$new] = $this->__data[$old]; - unset($this->__data[$old]); - } - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/importExport/inc/flat/class.flat.export.php b/v2/dotclear/plugins/importExport/inc/flat/class.flat.export.php deleted file mode 100644 index eec2b75..0000000 --- a/v2/dotclear/plugins/importExport/inc/flat/class.flat.export.php +++ /dev/null @@ -1,106 +0,0 @@ -con =& $con; - $this->prefix = $prefix; - - if (($this->fp = fopen($out,'w')) === false) { - return false; - } - @set_time_limit(300); - } - - function __destruct() - { - if (is_resource($this->fp)) { - fclose($this->fp); - } - } - - function export($name,$sql) - { - $rs = $this->con->select($sql); - - if (!$rs->isEmpty()) - { - fwrite($this->fp,"\n[".$name.' '.implode(',',$rs->columns())."]\n"); - while ($rs->fetch()) { - fwrite($this->fp,$this->getLine($rs)); - } - fflush($this->fp); - } - } - - function exportAll() - { - $tables = $this->getTables(); - - foreach ($tables as $table) - { - $this->exportTable($table); - } - } - - function exportTable($table) - { - $req = 'SELECT * FROM '.$this->con->escapeSystem($this->prefix.$table); - - $this->export($table,$req); - } - - function getTables() - { - $schema = dbSchema::init($this->con); - $db_tables = $schema->getTables(); - - $tables = array(); - foreach ($db_tables as $t) - { - if ($this->prefix) { - if (strpos($t,$this->prefix) === 0) { - $tables[] = $t; - } - } else { - $tables[] = $t; - } - } - - return $tables; - } - - function getLine($rs) - { - $l = array(); - $cols = $rs->columns(); - foreach ($cols as $i => &$c) { - $s = $rs->f($c); - $s = preg_replace($this->line_reg,$this->line_rep,$s); - $s = '"'.$s.'"'; - $l[$i] = $s; - } - return implode(',',$l)."\n"; - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/importExport/inc/flat/class.flat.import.php b/v2/dotclear/plugins/importExport/inc/flat/class.flat.import.php deleted file mode 100644 index bdbd55b..0000000 --- a/v2/dotclear/plugins/importExport/inc/flat/class.flat.import.php +++ /dev/null @@ -1,869 +0,0 @@ - array(), - 'post' => array(), - 'media' => array() - ); - - public $stack = array( - 'categories'=>null, - 'cat_id'=>1, - 'cat_lft'=>array(), - 'post_id'=>1, - 'media_id'=>1, - 'comment_id'=>1, - 'link_id'=>1 - ); - - public $has_categories = false; - - public function __construct($core,$file) - { - parent::__construct($file); - - $first_line = fgets($this->fp); - if (strpos($first_line,'///DOTCLEAR|') !== 0) { - throw new Exception(__('File is not a DotClear backup.')); - } - - @set_time_limit(300); - - $l = explode('|',$first_line); - - if (isset($l[1])) { - $this->dc_version = $l[1]; - } - - $this->mode = isset($l[2]) ? strtolower(trim($l[2])) : 'single'; - if ($this->mode != 'full' && $this->mode != 'single') { - $this->mode = 'single'; - } - - if (version_compare('1.2',$this->dc_version,'<=') && - version_compare('1.3',$this->dc_version,'>')) { - $this->dc_major_version = '1.2'; - } else { - $this->dc_major_version = '2.0'; - } - - $this->core =& $core; - $this->con =& $core->con; - $this->prefix = $core->prefix; - - $this->cur_blog = $this->con->openCursor($this->prefix.'blog'); - $this->cur_category = $this->con->openCursor($this->prefix.'category'); - $this->cur_link = $this->con->openCursor($this->prefix.'link'); - $this->cur_setting = $this->con->openCursor($this->prefix.'setting'); - $this->cur_user = $this->con->openCursor($this->prefix.'user'); - $this->cur_pref = $this->con->openCursor($this->prefix.'pref'); - $this->cur_permissions = $this->con->openCursor($this->prefix.'permissions'); - $this->cur_post = $this->con->openCursor($this->prefix.'post'); - $this->cur_meta = $this->con->openCursor($this->prefix.'meta'); - $this->cur_media = $this->con->openCursor($this->prefix.'media'); - $this->cur_post_media = $this->con->openCursor($this->prefix.'post_media'); - $this->cur_log = $this->con->openCursor($this->prefix.'log'); - $this->cur_ping = $this->con->openCursor($this->prefix.'ping'); - $this->cur_comment = $this->con->openCursor($this->prefix.'comment'); - $this->cur_spamrule = $this->con->openCursor($this->prefix.'spamrule'); - $this->cur_version = $this->con->openCursor($this->prefix.'version'); - - # --BEHAVIOR-- importInit - $this->core->callBehavior('importInit',$this,$this->core); - } - - public function importSingle() - { - if ($this->mode != 'single') { - throw new Exception(__('File is not a single blog export.')); - } - - if (!$this->core->auth->check('admin',$this->core->blog->id)) { - throw new Exception(__('Permission denied.')); - } - - $this->blog_id = $this->core->blog->id; - - $this->stack['categories'] = $this->con->select( - 'SELECT cat_id, cat_title, cat_url '. - 'FROM '.$this->prefix.'category '. - "WHERE blog_id = '".$this->con->escape($this->blog_id)."' " - ); - - $rs = $this->con->select('SELECT MAX(cat_id) FROM '.$this->prefix.'category'); - $this->stack['cat_id'] = ((integer) $rs->f(0))+1; - - $rs = $this->con->select('SELECT MAX(link_id) FROM '.$this->prefix.'link'); - $this->stack['link_id'] = ((integer) $rs->f(0))+1; - - $rs = $this->con->select('SELECT MAX(post_id) FROM '.$this->prefix.'post'); - $this->stack['post_id'] = ((integer) $rs->f(0))+1; - - $rs = $this->con->select('SELECT MAX(media_id) FROM '.$this->prefix.'media'); - $this->stack['media_id'] = ((integer) $rs->f(0))+1; - - $rs = $this->con->select('SELECT MAX(comment_id) FROM '.$this->prefix.'comment'); - $this->stack['comment_id'] = ((integer) $rs->f(0))+1; - - $rs = $this->con->select( - 'SELECT MAX(cat_rgt) AS cat_rgt FROM '.$this->prefix.'category '. - "WHERE blog_id = '".$this->con->escape($this->core->blog->id)."'" - ); - - if ((integer) $rs->cat_rgt > 0) { - $this->has_categories = true; - $this->stack['cat_lft'][$this->core->blog->id] = (integer) $rs->cat_rgt + 1; - } - - $this->con->begin(); - - try - { - $last_line_name = ''; - $constrained = array('post', 'meta', 'post_media', 'ping', 'comment'); - - while (($line = $this->getLine()) !== false) - { - # import DC 1.2.x, we fix lines before insert - if ($this->dc_major_version == '1.2') { - $this->prepareDC12line($line); - } - - if ($last_line_name != $line->__name) { - if (in_array($last_line_name,$constrained)) { - # UNDEFER - if ($this->con->driver() == 'mysql') $this->con->execute('SET foreign_key_checks = 1'); - if ($this->con->driver() == 'pgsql') $this->con->execute('SET CONSTRAINTS ALL DEFERRED'); - } - - if (in_array($line->__name,$constrained)) { - # DEFER - if ($this->con->driver() == 'mysql') $this->con->execute('SET foreign_key_checks = 0'); - if ($this->con->driver() == 'pgsql') $this->con->execute('SET CONSTRAINTS ALL IMMEDIATE'); - } - - $last_line_name = $line->__name; - } - - switch ($line->__name) - { - case 'category': - $this->insertCategorySingle($line); - break; - case 'link': - $this->insertLinkSingle($line); - break; - case 'post': - $this->insertPostSingle($line); - break; - case 'meta': - $this->insertMetaSingle($line); - break; - case 'media': - $this->insertMediaSingle($line); - break; - case 'post_media': - $this->insertPostMediaSingle($line); - break; - case 'ping': - $this->insertPingSingle($line); - break; - case 'comment': - $this->insertCommentSingle($line); - break; - } - - # --BEHAVIOR-- importSingle - $this->core->callBehavior('importSingle',$line,$this,$this->core); - } - - if ($this->con->driver() == 'mysql') $this->con->execute('SET foreign_key_checks = 1'); - if ($this->con->driver() == 'pgsql') $this->con->execute('SET CONSTRAINTS ALL DEFERRED'); - } - catch (Exception $e) - { - $this->con->rollback(); - throw $e; - } - - $this->con->commit(); - } - - public function importFull() - { - if ($this->mode != 'full') { - throw new Exception(__('File is not a full export.')); - } - - if (!$this->core->auth->isSuperAdmin()) { - throw new Exception(__('Permission denied.')); - } - - $this->con->begin(); - $this->con->execute('DELETE FROM '.$this->prefix.'blog'); - $this->con->execute('DELETE FROM '.$this->prefix.'media'); - $this->con->execute('DELETE FROM '.$this->prefix.'spamrule'); - $this->con->execute('DELETE FROM '.$this->prefix.'setting'); - - try - { - while (($line = $this->getLine()) !== false) - { - switch ($line->__name) - { - case 'blog': - $this->insertBlog($line); - break; - case 'category': - $this->insertCategory($line); - break; - case 'link': - $this->insertLink($line); - break; - case 'setting': - $this->insertSetting($line); - break; - case 'user': - $this->insertUser($line); - break; - case 'pref': - $this->insertPref($line); - break; - case 'permissions': - $this->insertPermissions($line); - break; - case 'post': - $this->insertPost($line); - break; - case 'meta': - $this->insertMeta($line); - break; - case 'media': - $this->insertMedia($line); - break; - case 'post_media': - $this->insertPostMedia($line); - break; - case 'log'; - $this->insertLog($line); - break; - case 'ping': - $this->insertPing($line); - break; - case 'comment': - $this->insertComment($line); - break; - case 'spamrule': - $this->insertSpamRule($line); - break; - } - # --BEHAVIOR-- importFull - $this->core->callBehavior('importFull',$line,$this,$this->core); - } - } - catch (Exception $e) - { - $this->con->rollback(); - throw $e; - } - - $this->con->commit(); - } - - private function insertBlog($blog) - { - $this->cur_blog->clean(); - - $this->cur_blog->blog_id = (string) $blog->blog_id; - $this->cur_blog->blog_uid = (string) $blog->blog_uid; - $this->cur_blog->blog_creadt = (string) $blog->blog_creadt; - $this->cur_blog->blog_upddt = (string) $blog->blog_upddt; - $this->cur_blog->blog_url = (string) $blog->blog_url; - $this->cur_blog->blog_name = (string) $blog->blog_name; - $this->cur_blog->blog_desc = (string) $blog->blog_desc; - - $this->cur_blog->blog_status = $blog->exists('blog_status') ? (integer) $blog->blog_status : 1; - - $this->cur_blog->insert(); - } - - private function insertCategory($category) - { - $this->cur_category->clean(); - - $this->cur_category->cat_id = (string) $category->cat_id; - $this->cur_category->blog_id = (string) $category->blog_id; - $this->cur_category->cat_title = (string) $category->cat_title; - $this->cur_category->cat_url = (string) $category->cat_url; - $this->cur_category->cat_desc = (string) $category->cat_desc; - - if (!$this->has_categories && $category->exists('cat_lft') && $category->exists('cat_rgt')) { - $this->cur_category->cat_lft = (integer) $category->cat_lft; - $this->cur_category->cat_rgt = (integer) $category->cat_rgt; - } else { - if (!isset($this->stack['cat_lft'][$category->blog_id])) { - $this->stack['cat_lft'][$category->blog_id] = 2; - } - $this->cur_category->cat_lft = $this->stack['cat_lft'][$category->blog_id]++; - $this->cur_category->cat_rgt = $this->stack['cat_lft'][$category->blog_id]++; - } - - $this->cur_category->insert(); - } - - private function insertLink($link) - { - $this->cur_link->clean(); - - $this->cur_link->link_id = (integer) $link->link_id; - $this->cur_link->blog_id = (string) $link->blog_id; - $this->cur_link->link_href = (string) $link->link_href; - $this->cur_link->link_title = (string) $link->link_title; - $this->cur_link->link_desc = (string) $link->link_desc; - $this->cur_link->link_lang = (string) $link->link_lang; - $this->cur_link->link_xfn = (string) $link->link_xfn; - $this->cur_link->link_position = (integer) $link->link_position; - - $this->cur_link->insert(); - } - - private function insertSetting($setting) - { - $this->cur_setting->clean(); - - $this->cur_setting->setting_id = (string) $setting->setting_id; - $this->cur_setting->blog_id = !$setting->blog_id ? null : (string) $setting->blog_id; - $this->cur_setting->setting_ns = (string) $setting->setting_ns; - $this->cur_setting->setting_value = (string) $setting->setting_value; - $this->cur_setting->setting_type = (string) $setting->setting_type; - $this->cur_setting->setting_label = (string) $setting->setting_label; - - $this->cur_setting->insert(); - } - - private function insertPref($pref) - { - if ($this->prefExists($pref->pref_ws,$pref->pref_id,$pref->user_id)) { - return; - } - - $this->cur_pref->clean(); - - $this->cur_pref->pref_id = (string) $pref->pref_id; - $this->cur_pref->user_id = !$pref->user_id ? null : (string) $pref->user_id; - $this->cur_pref->pref_ws = (string) $pref->pref_ws; - $this->cur_pref->pref_value = (string) $pref->pref_value; - $this->cur_pref->pref_type = (string) $pref->pref_type; - $this->cur_pref->pref_label = (string) $pref->pref_label; - - $this->cur_pref->insert(); - } - - private function insertUser($user) - { - if ($this->userExists($user->user_id)) { - return; - } - - $this->cur_user->clean(); - - $this->cur_user->user_id = (string) $user->user_id; - $this->cur_user->user_super = (integer) $user->user_super; - $this->cur_user->user_pwd = (string) $user->user_pwd; - $this->cur_user->user_recover_key = (string) $user->user_recover_key; - $this->cur_user->user_name = (string) $user->user_name; - $this->cur_user->user_firstname = (string) $user->user_firstname; - $this->cur_user->user_displayname = (string) $user->user_displayname; - $this->cur_user->user_email = (string) $user->user_email; - $this->cur_user->user_url = (string) $user->user_url; - $this->cur_user->user_default_blog = !$user->user_default_blog ? null : (string) $user->user_default_blog; - $this->cur_user->user_lang = (string) $user->user_lang; - $this->cur_user->user_tz = (string) $user->user_tz; - $this->cur_user->user_post_status = (integer) $user->user_post_status; - $this->cur_user->user_creadt = (string) $user->user_creadt; - $this->cur_user->user_upddt = (string) $user->user_upddt; - - $this->cur_user->user_desc = $user->exists('user_desc') ? (string) $user->user_desc : null; - $this->cur_user->user_options = $user->exists('user_options') ? (string) $user->user_options : null; - $this->cur_user->user_status = $user->exists('user_status') ? (integer) $user->user_status : 1; - - $this->cur_user->insert(); - - $this->stack['users'][$user->user_id] = true; - } - - private function insertPermissions($permissions) - { - $this->cur_permissions->clean(); - - $this->cur_permissions->user_id = (string) $permissions->user_id; - $this->cur_permissions->blog_id = (string) $permissions->blog_id; - $this->cur_permissions->permissions = (string) $permissions->permissions; - - $this->cur_permissions->insert(); - } - - private function insertPost($post) - { - $this->cur_post->clean(); - - $cat_id = (integer) $post->cat_id; - if (!$cat_id) { - $cat_id = null; - } - - $post_password = $post->post_password ? (string) $post->post_password : null; - - $this->cur_post->post_id = (integer) $post->post_id; - $this->cur_post->blog_id = (string) $post->blog_id; - $this->cur_post->user_id = (string) $this->getUserId($post->user_id); - $this->cur_post->cat_id = $cat_id; - $this->cur_post->post_dt = (string) $post->post_dt; - $this->cur_post->post_creadt = (string) $post->post_creadt; - $this->cur_post->post_upddt = (string) $post->post_upddt; - $this->cur_post->post_password = $post_password; - $this->cur_post->post_type = (string) $post->post_type; - $this->cur_post->post_format = (string) $post->post_format; - $this->cur_post->post_url = (string) $post->post_url; - $this->cur_post->post_lang = (string) $post->post_lang; - $this->cur_post->post_title = (string) $post->post_title; - $this->cur_post->post_excerpt = (string) $post->post_excerpt; - $this->cur_post->post_excerpt_xhtml = (string) $post->post_excerpt_xhtml; - $this->cur_post->post_content = (string) $post->post_content; - $this->cur_post->post_content_xhtml = (string) $post->post_content_xhtml; - $this->cur_post->post_notes = (string) $post->post_notes; - $this->cur_post->post_words = (string) $post->post_words; - $this->cur_post->post_meta = (string) $post->post_meta; - $this->cur_post->post_status = (integer) $post->post_status; - $this->cur_post->post_selected = (integer) $post->post_selected; - $this->cur_post->post_open_comment = (integer) $post->post_open_comment; - $this->cur_post->post_open_tb = (integer) $post->post_open_tb; - $this->cur_post->nb_comment = (integer) $post->nb_comment; - $this->cur_post->nb_trackback = (integer) $post->nb_trackback; - - $this->cur_post->post_tz = $post->exists('post_tz') ? (string) $post->post_tz : 'UTC'; - - $this->cur_post->insert(); - } - - private function insertMeta($meta) - { - $this->cur_meta->clean(); - - $this->cur_meta->meta_id = (string) $meta->meta_id; - $this->cur_meta->meta_type = (string) $meta->meta_type; - $this->cur_meta->post_id = (integer) $meta->post_id; - - $this->cur_meta->insert(); - } - - private function insertMedia($media) - { - $this->cur_media->clean(); - - $this->cur_media->media_id = (integer) $media->media_id; - $this->cur_media->user_id = (string) $media->user_id; - $this->cur_media->media_path = (string) $media->media_path; - $this->cur_media->media_title = (string) $media->media_title; - $this->cur_media->media_file = (string) $media->media_file; - $this->cur_media->media_meta = (string) $media->media_meta; - $this->cur_media->media_dt = (string) $media->media_dt; - $this->cur_media->media_creadt = (string) $media->media_creadt; - $this->cur_media->media_upddt = (string) $media->media_upddt; - $this->cur_media->media_private = (integer) $media->media_private; - - $this->cur_media->media_dir = $media->exists('media_dir') ? (string) $media->media_dir : dirname($media->media_file); - - if (!$this->mediaExists()) { - $this->cur_media->insert(); - } - } - - private function insertPostMedia($post_media) - { - $this->cur_post_media->clean(); - - $this->cur_post_media->media_id = (integer) $post_media->media_id; - $this->cur_post_media->post_id = (integer) $post_media->post_id; - - $this->cur_post_media->insert(); - } - - private function insertLog($log) - { - $this->cur_log->clean(); - - $this->cur_log->log_id = (integer) $log->log_id; - $this->cur_log->user_id = (string) $log->user_id; - $this->cur_log->log_table = (string) $log->log_table; - $this->cur_log->log_dt = (string) $log->log_dt; - $this->cur_log->log_ip = (string) $log->log_ip; - $this->cur_log->log_msg = (string) $log->log_msg; - - $this->cur_log->insert(); - } - - private function insertPing($ping) - { - $this->cur_ping->clean(); - - $this->cur_ping->post_id = (integer) $ping->post_id; - $this->cur_ping->ping_url = (string) $ping->ping_url; - $this->cur_ping->ping_dt = (string) $ping->ping_dt; - - $this->cur_ping->insert(); - } - - private function insertComment($comment) - { - $this->cur_comment->clean(); - - $this->cur_comment->comment_id = (integer) $comment->comment_id; - $this->cur_comment->post_id = (integer) $comment->post_id; - $this->cur_comment->comment_dt = (string) $comment->comment_dt; - $this->cur_comment->comment_upddt = (string) $comment->comment_upddt; - $this->cur_comment->comment_author = (string) $comment->comment_author; - $this->cur_comment->comment_email = (string) $comment->comment_email; - $this->cur_comment->comment_site = (string) $comment->comment_site; - $this->cur_comment->comment_content = (string) $comment->comment_content; - $this->cur_comment->comment_words = (string) $comment->comment_words; - $this->cur_comment->comment_ip = (string) $comment->comment_ip; - $this->cur_comment->comment_status = (integer) $comment->comment_status; - $this->cur_comment->comment_spam_status = (integer) $comment->comment_spam_status; - $this->cur_comment->comment_trackback = (integer) $comment->comment_trackback; - - $this->cur_comment->comment_tz = $comment->exists('comment_tz') ? (string) $comment->comment_tz : 'UTC'; - $this->cur_comment->comment_spam_filter = $comment->exists('comment_spam_filter') ? (integer) $comment->comment_spam_filter : null; - - $this->cur_comment->insert(); - } - - private function insertSpamRule($spamrule) - { - $this->cur_spamrule->clean(); - - $this->cur_spamrule->rule_id = (integer) $spamrule->rule_id; - $this->cur_spamrule->blog_id = !$spamrule->blog_id ? null : (string) $spamrule->blog_id; - $this->cur_spamrule->rule_type = (string) $spamrule->rule_type; - $this->cur_spamrule->rule_content = (string) $spamrule->rule_content; - - $this->cur_spamrule->insert(); - } - - private function insertCategorySingle($category) - { - $this->cur_category->clean(); - - $m = $this->searchCategory($this->stack['categories'],$category->cat_url); - - $old_id = $category->cat_id; - if ($m !== false) - { - $cat_id = $m; - } - else - { - $cat_id = $this->stack['cat_id']; - $category->cat_id = $cat_id; - $category->blog_id = $this->blog_id; - - $this->insertCategory($category); - $this->stack['cat_id']++; - } - - $this->old_ids['category'][(integer) $old_id] = $cat_id; - } - - private function insertLinkSingle($link) - { - $link->blog_id = $this->blog_id; - $link->link_id = $this->stack['link_id']; - - $this->insertLink($link); - $this->stack['link_id']++; - } - - private function insertPostSingle($post) - { - if (!$post->cat_id || isset($this->old_ids['category'][(integer) $post->cat_id])) { - $post_id = $this->stack['post_id']; - $this->old_ids['post'][(integer) $post->post_id] = $post_id; - - $cat_id = $post->cat_id ? $this->old_ids['category'][(integer) $post->cat_id] : null; - - $post->post_id = $post_id; - $post->cat_id = $cat_id; - $post->blog_id = $this->blog_id; - - $post->post_url = $this->core->blog->getPostURL( - $post->post_url,$post->post_dt,$post->post_title,$post->post_id - ); - - $this->insertPost($post); - $this->stack['post_id']++; - } else { - self::throwIdError($post->__name,$post->__line,'category'); - } - } - - private function insertMetaSingle($meta) - { - if (isset($this->old_ids['post'][(integer) $meta->post_id])) { - $meta->post_id = $this->old_ids['post'][(integer) $meta->post_id]; - $this->insertMeta($meta); - } else { - self::throwIdError($meta->__name,$meta->__line,'post'); - } - } - - private function insertMediaSingle($media) - { - $media_id = $this->stack['media_id']; - $old_id = $media->media_id; - - $media->media_id = $media_id; - $media->media_path = $this->core->blog->settings->system->public_path; - $media->user_id = $this->getUserId($media->user_id); - - $this->insertMedia($media); - $this->stack['media_id']++; - $this->old_ids['media'][(integer) $old_id] = $media_id; - } - - private function insertPostMediaSingle($post_media) - { - if (isset($this->old_ids['media'][(integer) $post_media->media_id]) && - isset($this->old_ids['post'][(integer) $post_media->post_id])) { - $post_media->media_id = $this->old_ids['media'][(integer) $post_media->media_id]; - $post_media->post_id = $this->old_ids['post'][(integer) $post_media->post_id]; - - $this->insertPostMedia($post_media); - } elseif (!isset($this->old_ids['media'][(integer) $post_media->media_id])) { - self::throwIdError($post_media->__name,$post_media->__line,'media'); - }else { - self::throwIdError($post_media->__name,$post_media->__line,'post'); - } - } - - private function insertPingSingle($ping) - { - if (isset($this->old_ids['post'][(integer) $ping->post_id])) { - $ping->post_id = $this->old_ids['post'][(integer) $ping->post_id]; - - $this->insertPing($ping); - } else { - self::throwIdError($ping->__name,$ping->__line,'post'); - } - } - - private function insertCommentSingle($comment) - { - if (isset($this->old_ids['post'][(integer) $comment->post_id])) { - $comment_id = $this->stack['comment_id']; - - $comment->comment_id = $comment_id; - $comment->post_id = $this->old_ids['post'][(integer) $comment->post_id]; - - $this->insertComment($comment); - $this->stack['comment_id']++; - } else { - self::throwIdError($comment->__name,$comment->__line,'post'); - } - } - - private static function throwIdError($name,$line,$related) - { - throw new Exception(sprintf( - __('ID of "%3$s" does not match on record "%1$s" at line %2$s of backup file.'), - html::escapeHTML($name), - html::escapeHTML($line), - html::escapeHTML($related) - )); - } - - public function searchCategory($rs,$url) - { - while ($rs->fetch()) - { - if ($rs->cat_url == $url) { - return $rs->cat_id; - } - } - - return false; - } - - public function getUserId($user_id) - { - if (!$this->userExists($user_id)) - { - if ($this->core->auth->isSuperAdmin()) - { - # Sanitizes user_id and create a lambda user - $user_id = preg_replace('/[^A-Za-z0-9]$/','',$user_id); - $user_id .= strlen($user_id) < 2 ? '-a' : ''; - - # We change user_id, we need to check again - if (!$this->userExists($user_id)) - { - $this->cur_user->clean(); - $this->cur_user->user_id = (string) $user_id; - $this->cur_user->user_pwd = md5(uniqid()); - - $this->core->addUser($this->cur_user); - - $this->stack['users'][$user_id] = true; - } - } - else - { - # Returns current user id - $user_id = $this->core->auth->userID(); - } - } - - return $user_id; - } - - private function userExists($user_id) - { - if (isset($this->stack['users'][$user_id])) { - return $this->stack['users'][$user_id]; - } - - $strReq = 'SELECT user_id '. - 'FROM '.$this->prefix.'user '. - "WHERE user_id = '".$this->con->escape($user_id)."' "; - - $rs = $this->con->select($strReq); - - $this->stack['users'][$user_id] = !$rs->isEmpty(); - return $this->stack['users'][$user_id]; - } - - private function prefExists($pref_ws,$pref_id,$user_id) - { - $strReq = 'SELECT pref_id,pref_ws,user_id '. - 'FROM '.$this->prefix.'pref '. - "WHERE pref_id = '".$this->con->escape($pref_id)."' ". - "AND pref_ws = '".$this->con->escape($pref_ws)."' "; - if (!$user_id) { - $strReq .= "AND user_id IS NULL "; - } else { - $strReq .= "AND user_id = '".$this->con->escape($user_id)."' "; - } - - $rs = $this->con->select($strReq); - - return !$rs->isEmpty(); - } - - private function mediaExists() - { - $strReq = 'SELECT media_id '. - 'FROM '.$this->prefix.'media '. - "WHERE media_path = '".$this->cur_media->media_path."' ". - "AND media_file = '".$this->cur_media->media_file."' "; - - $rs = $this->con->select($strReq); - - return !$rs->isEmpty(); - } - - private function prepareDC12line(&$line) - { - $settings = array('dc_theme','dc_nb_post_per_page','dc_allow_comments', - 'dc_allow_trackbacks','dc_comment_pub','dc_comments_ttl', - 'dc_wiki_comments','dc_use_smilies','dc_date_format','dc_time_format', - 'dc_url_scan'); - - switch ($line->__name) - { - case 'categorie': - $line->substitute('cat_libelle','cat_title'); - $line->substitute('cat_libelle_url','cat_url'); - $line->__name = 'category'; - $line->blog_id = 'default'; - break; - case 'link': - $line->substitute('href','link_href'); - $line->substitute('label','link_title'); - $line->substitute('title','link_desc'); - $line->substitute('lang','link_lang'); - $line->substitute('rel','link_xfn'); - $line->substitute('position','link_position'); - $line->blog_id = 'default'; - break; - case 'post': - $line->substitute('post_titre','post_title'); - $line->post_title = html::decodeEntities($line->post_title); - $line->post_url = date('Y/m/d/',strtotime($line->post_dt)).$line->post_id.'-'.$line->post_titre_url; - $line->post_url = substr($line->post_url,0,255); - $line->post_format = $line->post_content_wiki == '' ? 'xhtml' : 'wiki'; - $line->post_content_xhtml = $line->post_content; - $line->post_excerpt_xhtml = $line->post_chapo; - - if ($line->post_format == 'wiki') { - $line->post_content = $line->post_content_wiki; - $line->post_excerpt = $line->post_chapo_wiki; - } else { - $line->post_content = $line->post_content; - $line->post_excerpt = $line->post_chapo; - } - - $line->post_status = (integer) $line->post_pub; - $line->post_type = 'post'; - $line->blog_id = 'default'; - - $line->drop('post_titre_url','post_content_wiki','post_chapo','post_chapo_wiki','post_pub'); - - break; - case 'post_meta': - $line->drop('meta_id'); - $line->substitute('meta_key','meta_type'); - $line->substitute('meta_value','meta_id'); - $line->__name = 'meta'; - $line->blog_id = 'default'; - break; - case 'comment': - $line->substitute('comment_auteur','comment_author'); - if ($line->comment_site != '' && !preg_match('!^http://.*$!', $line->comment_site,$m)) { - $line->comment_site = 'http://'.$line->comment_site; - } - $line->comment_status = (integer) $line->comment_pub; - $line->drop('comment_pub'); - break; - } - - # --BEHAVIOR-- importPrepareDC12 - $this->core->callBehavior('importPrepareDC12',$line,$this,$this->core); - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/importExport/inc/img/progress.png b/v2/dotclear/plugins/importExport/inc/img/progress.png deleted file mode 100644 index 267f54111eae4c93e3629b643bb5a61609e2769c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 858 zcmV-g1Eu_lP)RGReGUQd7@Bypi^|BM|q!9a-l6z7Pj;M8 zbDc_Yo<($OmUh?a+pkTnMiS$N^6@taF|GMmPl!uH*S?kZ|hkTqqGJ7$bPWsE*!jXGVBDq@Q|UXCtYk11Y@Fj|c#Uy3wgi8@(}CRmFl zU57MQi6d5sB~^$bRE8o|h9y&mAXJ4URD&f^gdS6YB~*bZQh_2?fGksgCr^SLPJbLt zfErAH8B2W`N_`hidLT=C8%TQMgsr<02XvbSad^jWnpw_ zZ*Cw|X>DZyGC40WH7_tY@MYc30003kNklUHWeNNLtF5Z;u+0Us$1 zKHu0jRryJ6@K@~7Vm4_S^0yA9ow6KB*D!TPJ$a;SxS-uas?#-GQbRHA>l&`5'.html::escapeHTML($o->name).''. - '
      '.html::escapeHTML($o->description).'
      '; - - unset($o); - } - return '
      '.$res.'
      '; -} - -$modules = new ArrayObject(array('import' => array(),'export' => array())); - -# --BEHAVIOR-- importExportModules -$core->callBehavior('importExportModules',$modules); - -$type = null; -if (!empty($_REQUEST['type']) && in_array($_REQUEST['type'],array('export','import'))) { - $type = $_REQUEST['type']; -} - -$module = null; -if ($type && !empty($_REQUEST['module'])) { - - if (isset($modules[$type]) && in_array($_REQUEST['module'],$modules[$type])) { - - $module = new $_REQUEST['module']($core); - $module->init(); - } -} - -if ($type && $module !== null && !empty($_REQUEST['do'])) -{ - try { - $module->process($_REQUEST['do']); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } -} - -$title = __('Import/Export'); - -echo ' - - - '.$title.' - - '.dcPage::jsLoad('index.php?pf=importExport/js/script.js').' - - -'; - -if ($type && $module !== null) { - echo - '

      '.$title.''. - ' › '.html::escapeHTML($module->name).'

      '. - '
      '; - - $module->gui(); - - echo '
      '; -} -else { - echo - '

      '.$title.'

      '. - '

      '.__('Import').'

      '.listImportExportModules($core,$modules['import']). - '

      '.__('Export').'

      '.listImportExportModules($core,$modules['export']); -} - -echo ' - -'; -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/importExport/js/script.js b/v2/dotclear/plugins/importExport/js/script.js deleted file mode 100644 index 82892fd..0000000 --- a/v2/dotclear/plugins/importExport/js/script.js +++ /dev/null @@ -1,3 +0,0 @@ - -$(function(){if($('*.error').length>0){return;} -$('#ie-gui form[method=post]:has(input[type=hidden][name=autosubmit])').each(function(){$('input[type=submit]',this).remove();$(this).after('

      '+dotclear.msg.please_wait+'

      ');$(this).submit();});}); \ No newline at end of file diff --git a/v2/dotclear/plugins/importExport/locales/fr/main.lang.php b/v2/dotclear/plugins/importExport/locales/fr/main.lang.php deleted file mode 100644 index 7d8c291..0000000 --- a/v2/dotclear/plugins/importExport/locales/fr/main.lang.php +++ /dev/null @@ -1,92 +0,0 @@ - \ No newline at end of file diff --git a/v2/dotclear/plugins/importExport/locales/fr/main.po b/v2/dotclear/plugins/importExport/locales/fr/main.po deleted file mode 100644 index d0049f1..0000000 --- a/v2/dotclear/plugins/importExport/locales/fr/main.po +++ /dev/null @@ -1,333 +0,0 @@ -# Language: Français -# Module: importExport - 3.1 -# Date: 2012-07-09 14:37:32 -# Translated with translater 1.5 - -msgid "" -msgstr "" -"Content-Type: text/plain; charset=UTF-8\n" -"Project-Id-Version: importExport 3.1\n" -"POT-Creation-Date: \n" -"PO-Revision-Date: 2012-07-09T14:37:32+00:00\n" -"Last-Translator: Jean-Christian Denis\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Transfer-Encoding: 8bit\n" - -#: _admin.php:15 -#: _admin.php:28 -#: index.php:59 -msgid "Import/Export" -msgstr "Import/Export" - -#: inc/class.dc.export.flat.php:19 -msgid "Flat file export" -msgstr "Exporter un fichier texte" - -#: inc/class.dc.export.flat.php:20 -msgid "Exports a blog or a full Dotclear installation to flat file." -msgstr "Exporte un blog ou toutes les données de Dotclear dans un fichier texte." - -#: inc/class.dc.export.flat.php:140 -msgid "Export file not found." -msgstr "Fichier d'export non trouvé." - -#: inc/class.dc.export.flat.php:184 -msgid "Failed to compress export file." -msgstr "Impossible de compresser le fichier d'export." - -#: inc/class.dc.export.flat.php:194 -#: inc/class.dc.import.feed.php:84 -#: inc/class.dc.import.flat.php:183 -msgid "Single blog" -msgstr "Un seul blog" - -#: inc/class.dc.export.flat.php:195 -msgid "This will create an export of your current blog: %s" -msgstr "Ceci va exporter le contenu du blog en cours : %s." - -#: inc/class.dc.export.flat.php:197 -#: inc/class.dc.export.flat.php:223 -msgid "File name:" -msgstr "Nom du fichier :" - -#: inc/class.dc.export.flat.php:203 -#: inc/class.dc.export.flat.php:229 -msgid "Compress file" -msgstr "Compresser le fichier" - -#: inc/class.dc.export.flat.php:207 -msgid "You may also want to download your media directory as a zip file" -msgstr "Vous pouvez également télécharger votre répertoire de médias au format zip." - -#: inc/class.dc.export.flat.php:209 -#: inc/class.dc.export.flat.php:232 -#: index.php:89 -msgid "Export" -msgstr "Exporter" - -#: inc/class.dc.export.flat.php:220 -#: inc/class.dc.import.flat.php:211 -msgid "Multiple blogs" -msgstr "Tous les blogs" - -#: inc/class.dc.export.flat.php:221 -msgid "This will create an export of all the content of your database." -msgstr "Ceci va exporter le contenu complet de votre base de données." - -#: inc/class.dc.ieModule.php:74 -msgid "Congratulation!" -msgstr "Félicitations !" - -#: inc/class.dc.ieModule.php:75 -msgid "Your blog has been successfully imported. Welcome on Dotclear 2!" -msgstr "Votre blog a été importé avec succès. Bienvenue sur Dotclear 2 !" - -#: inc/class.dc.ieModule.php:76 -msgid "Why don't you blog this now?" -msgstr "Pourquoi ne pas le bloguer maintenant ?" - -#: inc/class.dc.ieModule.php:77 -msgid "or" -msgstr "ou" - -#: inc/class.dc.ieModule.php:77 -msgid "visit your dashboard" -msgstr "vous rendre sur votre tableau de bord" - -#: inc/class.dc.import.dc1.php:43 -msgid "Dotclear 1.2 import" -msgstr "Importer depuis Dotclear 1.2" - -#: inc/class.dc.import.dc1.php:44 -msgid "Import a Dotclear 1.2 installation into your current blog." -msgstr "Importe un blog Dotclear 1.2 dans votre blog en cours." - -#: inc/class.dc.import.dc1.php:145 -msgid "This will import your Dotclear 1.2 content as new content in the current blog: %s." -msgstr "Ceci va importer votre blog Dotclear 1.2 comme un nouveau contenu dans le blog en cours : %s." - -#: inc/class.dc.import.dc1.php:149 -#: inc/class.dc.import.wp.php:180 -msgid "Depending on the size of your blog, it could take a few minutes." -msgstr "Selon la taille de votre blog, ceci peut prendre quelques minutes." - -#: inc/class.dc.import.dc1.php:151 -#: inc/class.dc.import.wp.php:182 -msgid "General information" -msgstr "Informations générales" - -#: inc/class.dc.import.dc1.php:151 -#: inc/class.dc.import.wp.php:182 -msgid "Import my blog now" -msgstr "Importer mon blog" - -#: inc/class.dc.import.dc1.php:152 -msgid "We first need some information about your old Dotclear 1.2 installation." -msgstr "Nous avons d'abord besoin de renseignements à propos de votre ancienne installation Dotclear 1.2." - -#: inc/class.dc.import.dc1.php:163 -#: inc/class.dc.import.wp.php:194 -msgid "Entries import options" -msgstr "Options d'importation des billets" - -#: inc/class.dc.import.dc1.php:164 -#: inc/class.dc.import.wp.php:212 -msgid "Number of entries to import at once:" -msgstr "Nombre de billets à importer à chaque étape :" - -#: inc/class.dc.import.dc1.php:169 -#: inc/class.dc.import.wp.php:222 -msgid "Importing users" -msgstr "Importe les utilisateurs" - -#: inc/class.dc.import.dc1.php:174 -#: inc/class.dc.import.wp.php:227 -msgid "Importing categories" -msgstr "Importe les catégories" - -#: inc/class.dc.import.dc1.php:179 -#: inc/class.dc.import.wp.php:232 -msgid "Importing blogroll" -msgstr "Importe les liens" - -#: inc/class.dc.import.dc1.php:184 -#: inc/class.dc.import.wp.php:237 -msgid "Importing entries from %d to %d / %d" -msgstr "Importation des billets %d à %d" - -#: inc/class.dc.import.dc1.php:193 -msgid "Please read carefully" -msgstr "Merci de lire attentivement" - -#: inc/class.dc.import.dc1.php:214 -#: inc/class.dc.import.wp.php:258 -msgid "next step" -msgstr "étape suivante" - -#: inc/class.dc.import.dc1.php:242 -msgid "Dotclear tables not found" -msgstr "Tables Dotclear non trouvées" - -#: inc/class.dc.import.feed.php:22 -msgid "Feed import" -msgstr "Importer depuis un flux" - -#: inc/class.dc.import.feed.php:23 -msgid "Imports a feed as new entries." -msgstr "Importe un flux comme nouveaux billets." - -#: inc/class.dc.import.feed.php:41 -msgid "Cannot retrieve feed URL." -msgstr "Impossible d'atteindre l'URL du fil." - -#: inc/class.dc.import.feed.php:44 -msgid "No items in feed." -msgstr "Aucun élément dans le fil." - -#: inc/class.dc.import.feed.php:79 -#: inc/class.dc.import.flat.php:149 -msgid "Content successfully imported." -msgstr "Contenu importé avec succès." - -#: inc/class.dc.import.feed.php:85 -msgid "This will import a feed (RSS or Atom) a as new content in the current blog: %s." -msgstr "Ceci va importer un fil (RSS ou Atom) comme un nouveau contenu dans le blog en cours : %s." - -#: inc/class.dc.import.feed.php:87 -msgid "Feed URL:" -msgstr "URL du fil :" - -#: inc/class.dc.import.feed.php:93 -#: inc/class.dc.import.flat.php:202 -#: inc/class.dc.import.flat.php:233 -#: index.php:88 -msgid "Import" -msgstr "Importer" - -#: inc/class.dc.import.flat.php:21 -msgid "Flat file import" -msgstr "Importer depuis un fichier texte" - -#: inc/class.dc.import.flat.php:22 -msgid "Imports a blog or a full Dotclear installation from flat file." -msgstr "Importe un blog ou toutes les données depuis un fichier texte." - -#: inc/class.dc.import.flat.php:144 -msgid "Single blog successfully imported." -msgstr "Blog importé avec succès." - -#: inc/class.dc.import.flat.php:160 -msgid "Are you sure you want to import a full backup file?" -msgstr "Êtes-vous certain de vouloir charger un fichier de sauvegarde complet ?" - -#: inc/class.dc.import.flat.php:184 -msgid "This will import a single blog backup as new content in the current blog: %s." -msgstr "Ceci va charger une sauvegarde de blog comme un nouveau contenu dans le blog en cours : %s." - -#: inc/class.dc.import.flat.php:186 -#: inc/class.dc.import.flat.php:214 -msgid "Upload a backup file" -msgstr "Charger un fichier de sauvegarde" - -#: inc/class.dc.import.flat.php:192 -#: inc/class.dc.import.flat.php:220 -msgid "or pick up a local file in your public directory" -msgstr "ou choisissez un fichier local dans votre répertoire public" - -#: inc/class.dc.import.flat.php:212 -msgid "This will reset all the content of your database, except users." -msgstr "Ceci va remettre à zéro tout le contenu, sauf les utilisateurs." - -#: inc/class.dc.import.flat.php:281 -msgid "File is empty or not a compressed file." -msgstr "Le Fichier est vide ou n'est pas un fichier compressé." - -#: inc/class.dc.import.flat.php:304 -msgid "Another file with same name exists." -msgstr "Un autre fichier du même nom existe déjà." - -#: inc/class.dc.import.flat.php:311 -msgid "Failed to extract backup file." -msgstr "Impossible d'extraire le fichier de sauvegarde." - -#: inc/class.dc.import.flat.php:322 -msgid "No backup in compressed file." -msgstr "Pas de sauvegarde dans le fichier compressé." - -#: inc/class.dc.import.wp.php:64 -msgid "WordPress import" -msgstr "Importer depuis WordPress" - -#: inc/class.dc.import.wp.php:65 -msgid "Import a WordPress installation into your current blog." -msgstr "Importe un blog WordPress dans votre blog en cours." - -#: inc/class.dc.import.wp.php:176 -msgid "This will import your WordPress content as new content in the current blog: %s." -msgstr "Ceci va importer votre blog WordPress comme un nouveau contenu dans le blog en cours : %s." - -#: inc/class.dc.import.wp.php:183 -msgid "We first need some information about your old WordPress installation." -msgstr "Nous avons d'abord besoin de renseignements à propos de votre ancienne installation WordPress." - -#: inc/class.dc.import.wp.php:205 -msgid "Ignore the first category:" -msgstr "Ignorer la première catégorie :" - -#: inc/class.dc.import.wp.php:207 -msgid "Import lowest numbered category on posts:" -msgstr "Importer la catégorie la plus ancienne sur les articles :" - -#: inc/class.dc.import.wp.php:209 -msgid "Import all categories as tags:" -msgstr "Importer les catégories comme des mots-clés :" - -#: inc/class.dc.import.wp.php:210 -msgid "Prefix such tags with:" -msgstr "Préfixer ces mots-clés avec :" - -#: inc/class.dc.import.wp.php:215 -msgid "Content filters" -msgstr "Filtres de contenu" - -#: inc/class.dc.import.wp.php:216 -msgid "You may want to process your post and/or comment content with the following filters." -msgstr "Vous pouvez utiliser les filtres suivants sur vos articles et/ou commentaires." - -#: inc/class.dc.import.wp.php:217 -msgid "Post content formatter:" -msgstr "Formatage des articles :" - -#: inc/class.dc.import.wp.php:218 -msgid "Comment content formatter:" -msgstr "Formatage des commentaires :" - -#: inc/class.dc.import.wp.php:286 -msgid "WordPress tables not found" -msgstr "Tables WordPress non trouvées" - -#: inc/flat/class.flat.backup.php:34 -msgid "No file to read." -msgstr "Aucun fichier lisible." - -#: inc/flat/class.flat.import.php:54 -msgid "File is not a DotClear backup." -msgstr "Le fichier n'est pas une sauvegarde DotClear." - -#: inc/flat/class.flat.import.php:105 -msgid "File is not a single blog export." -msgstr "Le fichier n'est pas un fichier d'export simple." - -#: inc/flat/class.flat.import.php:222 -msgid "File is not a full export." -msgstr "Le fichier n'est pas un fichier d'export complet." - -#: inc/flat/class.flat.import.php:704 -msgid "ID of \"%3$s\" does not match on record \"%1$s\" at line %2$s of backup file." -msgstr "L'ID de \"%3$s\" ne correspond pas dans l'enregistrement de \"%1$s\" à la ligne %2$s du fichier de sauvegarde." - -#: index.php:69 -msgid "Please wait..." -msgstr "Veuillez patienter..." - diff --git a/v2/dotclear/plugins/importExport/style.css b/v2/dotclear/plugins/importExport/style.css deleted file mode 100644 index 7aeb3c4..0000000 --- a/v2/dotclear/plugins/importExport/style.css +++ /dev/null @@ -1,25 +0,0 @@ -dl.modules dt { - font-weight: bold; - font-size: 1.1em; - margin: 1em 0 0 0; -} -dl.modules dd { - margin: 0 0 1.5em 0; -} -div.ie-progress { - background: #eee; - margin: 1em 0; -} -div.ie-progress div { - height: 10px; - width: 0; - font-size: 0.8em; - line-height: 1em; - height: 1em; - padding: 2px 0; - text-align: right; - background: green url(index.php?pf=importExport/progress.png) repeat-x top left; - color: white; - font-weight: bold; - -moz-border-radius: 2px; -} \ No newline at end of file diff --git a/v2/dotclear/plugins/maintenance/_admin.php b/v2/dotclear/plugins/maintenance/_admin.php deleted file mode 100644 index c74b5c5..0000000 --- a/v2/dotclear/plugins/maintenance/_admin.php +++ /dev/null @@ -1,26 +0,0 @@ -addItem(__('Maintenance'),'plugin.php?p=maintenance','index.php?pf=maintenance/icon.png', - preg_match('/plugin.php\?p=maintenance(&.*)?$/',$_SERVER['REQUEST_URI']), - $core->auth->isSuperAdmin()); - -$core->addBehavior('adminDashboardFavs','maintenanceDashboardFavs'); - -function maintenanceDashboardFavs($core,$favs) -{ - $favs['maintenance'] = new ArrayObject(array('maintenance','Maintenance','plugin.php?p=maintenance', - 'index.php?pf=maintenance/icon.png','index.php?pf=maintenance/icon-big.png', - null,null,null)); -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/maintenance/_define.php b/v2/dotclear/plugins/maintenance/_define.php deleted file mode 100644 index 3dab8db..0000000 --- a/v2/dotclear/plugins/maintenance/_define.php +++ /dev/null @@ -1,20 +0,0 @@ -registerModule( - /* Name */ "Maintenance", - /* Description*/ "Maintain your database", - /* Author */ "Olivier Meunier", - /* Version */ '1.1' -); -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/maintenance/icon-big.png b/v2/dotclear/plugins/maintenance/icon-big.png deleted file mode 100644 index eeb8306d426abf9a95bb1c2d6153bc5e1dfd936f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6729 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 - $db_tables = $schema->getTables(); - - foreach ($db_tables as $t) { - if (strpos($t,$core->prefix) === 0) { - $core->con->vacuum($t); - } - } - http::redirect($p_url.'&vacuum=1'); - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } -} -elseif ($action == 'commentscount') -{ - try { - $core->countAllComments(); - http::redirect($p_url.'&commentscount=1'); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } -} -elseif ($action == 'empty_cache') -{ - try { - $core->emptyTemplatesCache(); - http::redirect($p_url.'&empty_cache=1'); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } -} -elseif ($action == 'log') -{ - try { - $core->log->delLogs(null,true); - http::redirect($p_url.'&delete_logs=1'); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } -} - -?> - - - <?php echo __('Maintenance'); ?> - - - -

      - -'.__('Optimization successful.').'

      '; -} -if (!empty($_GET['commentscount'])) { - echo '

      '.__('Comments and trackback counted.').'

      '; -} -if (!empty($_GET['empty_cache'])) { - echo '

      '.__('Templates cache directory emptied.').'

      '; -} -if (!empty($_GET['delete_logs'])) { - echo '

      '.__('Logs deleted.').'

      '; -} - -if ($action == 'index' && !empty($_GET['indexposts'])) -{ - $limit = 1000; - echo '

      '.sprintf(__('Indexing entry %d to %d.'),$start,$start+$limit).'

      '; - - $new_start = $core->indexAllPosts($start,$limit); - - if ($new_start) - { - $new_url = $p_url.'&action=index&indexposts=1&start='.$new_start; - echo - ''. - ''; - } - else - { - echo '

      '.__('Entries index done.').'

      '; - echo '

      '.__('Back').'

      '; - } -} -elseif ($action == 'index' && !empty($_GET['indexcomments'])) -{ - $limit = 1000; - echo '

      '.sprintf(__('Indexing comment %d to %d.'),$start,$start+$limit).'

      '; - - $new_start = $core->indexAllComments($start,$limit); - - if ($new_start) - { - $new_url = $p_url.'&action=index&indexcomments=1&start='.$new_start; - echo - ''. - ''; - } - else - { - echo '

      '.__('Comments index done.').'

      '; - echo '

      '.__('Back').'

      '; - } -} -else -{ - echo - '

      '.__('Optimize database room').'

      '. - '
      '. - '

      '. - $core->formNonce(). - form::hidden(array('action'),'vacuum'). - form::hidden(array('p'),'maintenance').'

      '. - '
      '; - - echo - '

      '.__('Counters').'

      '. - '
      '. - '

      '. - $core->formNonce(). - form::hidden(array('action'),'commentscount'). - form::hidden(array('p'),'maintenance').'

      '. - '
      '; - - echo - '

      '.__('Search engine index').' ('.__('This may take a very long time').')

      '. - '
      '. - '

      '. - ' '. - form::hidden(array('action'),'index'). - form::hidden(array('p'),'maintenance').'

      '. - '
      '; - - echo - '

      '.__('Vacuum logs').'

      '. - '
      '. - '

      '. - $core->formNonce(). - form::hidden(array('action'),'log'). - form::hidden(array('p'),'maintenance').'

      '. - '
      '; - - echo - '

      '.__('Empty templates cache directory').'

      '. - '
      '. - '

      '. - $core->formNonce(). - form::hidden(array('action'),'empty_cache'). - form::hidden(array('p'),'maintenance').'

      '. - '
      '; -} -dcPage::helpBlock('maintenance'); -?> - - - \ No newline at end of file diff --git a/v2/dotclear/plugins/maintenance/locales/en/help/maintenance.html b/v2/dotclear/plugins/maintenance/locales/en/help/maintenance.html deleted file mode 100644 index 98e69c6..0000000 --- a/v2/dotclear/plugins/maintenance/locales/en/help/maintenance.html +++ /dev/null @@ -1,41 +0,0 @@ - - - Maintenance - - - - -

      Maintenance

      - -
      -
      Optimize database room
      -
      After numerous delete or update operations on Dotclear's database, it gets fragmented. - Optimizing will allow to defragment it.
      - It has no incidence on your data's integrity.
      - It is recommended to optimize before any blog export.
      - -
      Counters
      -
      Initializing comments and trackbacks counters allows to check their exact numbers. - This operation can be useful when importing from another blog platform - (or when migrating from dotclear 1 to dotclear 2).
      - -
      Search engine index
      -
      These operations are necessary, after importing content in your blog, to use internal search engine, on public and private pages. -
        -
      • Index all posts: allows to index all posts
      • -
      • Index all comments: allows to index all comments and trackbacks
      • -
      -
      - -
      Vacuum logs
      -
      Logs record all activity and connection to your blog history. Unless you need to keep this history, - consider deleting these logs from time to time.
      - -
      Empty templates cache directory
      -
      It may be useful to empty this cache when modifying a theme's .html or .css files (or when updating - a theme or plugin).
      - Notice : with some hosters, the templates cache cannot be emptied with this extension. - You may then have to delete the directory /cbtpl/ directly on the server with your FTP software.
      -
      - - \ No newline at end of file diff --git a/v2/dotclear/plugins/maintenance/locales/en/resources.php b/v2/dotclear/plugins/maintenance/locales/en/resources.php deleted file mode 100644 index 4c0cad4..0000000 --- a/v2/dotclear/plugins/maintenance/locales/en/resources.php +++ /dev/null @@ -1,18 +0,0 @@ - \ No newline at end of file diff --git a/v2/dotclear/plugins/maintenance/locales/fr/help/maintenance.html b/v2/dotclear/plugins/maintenance/locales/fr/help/maintenance.html deleted file mode 100644 index 5fa0864..0000000 --- a/v2/dotclear/plugins/maintenance/locales/fr/help/maintenance.html +++ /dev/null @@ -1,39 +0,0 @@ - - - Maintenance - - - - -

      Maintenance

      - -
      -
      Optimiser l'espace de la base de données
      -
      Au fur at à mesure des suppressions ou modifications dans vos billets, les tables de la - base de données se fragmentent. L'opération d'optimisation permet de compacter celles-ci.
      - Cette opération n'a aucun impact sur l'intégrité de vos données.
      - Il est fortement conseillé d'optimiser la base de données avant tout export de blog
      - -
      Compteurs
      -
      Réinitialiser les compteurs des commentaires et des rétroliens a pour effet - de donner le nombre exact de ceux-ci pour chaque billet. Cette opération peut se - révéler utile lors de l'import d'un blog d'une autre plateforme (ou d'une migration - de dotclear 1 vers dotclear 2).
      - -
      Index du moteur de recherche
      -
      Ces opérations s'effectuent généralement suite à un import afin d'obtenir des résultats lors des recherches, aussi bien depuis l'administration du blog qu'en partie publique. -
        -
      • Indexer tous les billets : permet d'indexer les billets
      • -
      • Indexer tous les commentaires : permet d'indexer les commentaires
      • -
      -
      - -
      Vider les journaux
      -
      Sauf si vous avez un besoin précis de conservation des activités de connexion sur votre blog, pensez à vider régulièrement la table des journaux : elle contient l'enregistrement de chaque connexion à l'administration et des opérations qui s'y sont déroulées.
      - -
      Vider le répertoire du cache des templates
      -
      La suppression du répertoire du cache des templates peut se révéler nécessaire lors de modifications dans les fichiers .html ou .css d'un thème (voire lors d'un changement de thème ou de mise à jour de plugin).
      - Attention : chez certains hébergeurs (Free par exemple), le cache du répertoire des templates ne peut pas être vidé grâce à l'extension Maintenance, il faut supprimer le répertoire cbtpl situé dans le répertoire cache (dotclear/cache par défaut) avec un logiciel FTP.
      -
      - - \ No newline at end of file diff --git a/v2/dotclear/plugins/maintenance/locales/fr/resources.php b/v2/dotclear/plugins/maintenance/locales/fr/resources.php deleted file mode 100644 index 4c0cad4..0000000 --- a/v2/dotclear/plugins/maintenance/locales/fr/resources.php +++ /dev/null @@ -1,18 +0,0 @@ - \ No newline at end of file diff --git a/v2/dotclear/plugins/pages/_admin.php b/v2/dotclear/plugins/pages/_admin.php deleted file mode 100644 index 0183cfc..0000000 --- a/v2/dotclear/plugins/pages/_admin.php +++ /dev/null @@ -1,51 +0,0 @@ -addBehavior('adminDashboardIcons','pages_dashboard'); -$core->addBehavior('adminDashboardFavs','pages_dashboard_favs'); -$core->addBehavior('adminDashboardFavsIcon','pages_dashboard_favs_icon'); -function pages_dashboard($core,$icons) -{ - $icons['pages'] = new ArrayObject(array(__('Pages'),'plugin.php?p=pages','index.php?pf=pages/icon-big.png')); -} -function pages_dashboard_favs($core,$favs) -{ - $favs['pages'] = new ArrayObject(array('pages','Pages','plugin.php?p=pages', - 'index.php?pf=pages/icon.png','index.php?pf=pages/icon-big.png', - 'contentadmin,pages',null,null)); - $favs['newpage'] = new ArrayObject(array('newpage','New page','plugin.php?p=pages&act=page', - 'index.php?pf=pages/icon-np.png','index.php?pf=pages/icon-np-big.png', - 'contentadmin,pages',null,null)); -} -function pages_dashboard_favs_icon($core,$name,$icon) -{ - // Check if it is one of my own favs - if ($name == 'pages') { - $params = new ArrayObject(); - $params['post_type'] = 'page'; - $page_count = $core->blog->getPosts($params,true)->f(0); - if ($page_count > 0) { - $str_pages = ($page_count > 1) ? __('%d pages') : __('%d page'); - $icon[0] = sprintf($str_pages,$page_count); - } - } -} - -$_menu['Blog']->addItem(__('Pages'),'plugin.php?p=pages','index.php?pf=pages/icon.png', - preg_match('/plugin.php\?p=pages(&.*)?$/',$_SERVER['REQUEST_URI']), - $core->auth->check('contentadmin,pages',$core->blog->id)); - -$core->auth->setPermissionType('pages',__('manage pages')); - -require dirname(__FILE__).'/_widgets.php'; -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/pages/_define.php b/v2/dotclear/plugins/pages/_define.php deleted file mode 100644 index 421fe2a..0000000 --- a/v2/dotclear/plugins/pages/_define.php +++ /dev/null @@ -1,24 +0,0 @@ -registerModule( - /* Name */ "Pages", - /* Description*/ "Serve entries as simple web pages", - /* Author */ "Olivier Meunier", - /* Version */ '1.1.1', - array( - 'permissions' => 'contentadmin,pages', - 'priority' => 999 - ) -); -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/pages/_prepend.php b/v2/dotclear/plugins/pages/_prepend.php deleted file mode 100644 index 72bba20..0000000 --- a/v2/dotclear/plugins/pages/_prepend.php +++ /dev/null @@ -1,21 +0,0 @@ -url->register('pages','pages','^pages/(.+)$',array('urlPages','pages')); -$core->url->register('pagespreview','pagespreview','^pagespreview/(.+)$',array('urlPages','pagespreview')); - -$core->setPostType('page','plugin.php?p=pages&act=page&id=%d',$core->url->getURLFor('pages','%s')); - -# We should put this as settings later -$GLOBALS['page_url_format'] = '{t}'; -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/pages/_public.php b/v2/dotclear/plugins/pages/_public.php deleted file mode 100644 index 0d59325..0000000 --- a/v2/dotclear/plugins/pages/_public.php +++ /dev/null @@ -1,267 +0,0 @@ -blog->withoutPassword(false); - - $params = new ArrayObject(array( - 'post_type' => 'page', - 'post_url' => $args)); - - $core->callBehavior('publicPagesBeforeGetPosts',$params,$args); - - $_ctx->posts = $core->blog->getPosts($params); - - $_ctx->comment_preview = new ArrayObject(); - $_ctx->comment_preview['content'] = ''; - $_ctx->comment_preview['rawcontent'] = ''; - $_ctx->comment_preview['name'] = ''; - $_ctx->comment_preview['mail'] = ''; - $_ctx->comment_preview['site'] = ''; - $_ctx->comment_preview['preview'] = false; - $_ctx->comment_preview['remember'] = false; - - $core->blog->withoutPassword(true); - - - if ($_ctx->posts->isEmpty()) - { - # The specified page does not exist. - self::p404(); - } - else - { - $post_id = $_ctx->posts->post_id; - $post_password = $_ctx->posts->post_password; - - # Password protected entry - if ($post_password != '' && !$_ctx->preview) - { - # Get passwords cookie - if (isset($_COOKIE['dc_passwd'])) { - $pwd_cookie = unserialize($_COOKIE['dc_passwd']); - } else { - $pwd_cookie = array(); - } - - # Check for match - if ((!empty($_POST['password']) && $_POST['password'] == $post_password) - || (isset($pwd_cookie[$post_id]) && $pwd_cookie[$post_id] == $post_password)) - { - $pwd_cookie[$post_id] = $post_password; - setcookie('dc_passwd',serialize($pwd_cookie),0,'/'); - } - else - { - self::serveDocument('password-form.html','text/html',false); - return; - } - } - - $post_comment = - isset($_POST['c_name']) && isset($_POST['c_mail']) && - isset($_POST['c_site']) && isset($_POST['c_content']) && - $_ctx->posts->commentsActive(); - - # Posting a comment - if ($post_comment) - { - # Spam trap - if (!empty($_POST['f_mail'])) { - http::head(412,'Precondition Failed'); - header('Content-Type: text/plain'); - echo "So Long, and Thanks For All the Fish"; - # Exits immediately the application to preserve the server. - exit; - } - - $name = $_POST['c_name']; - $mail = $_POST['c_mail']; - $site = $_POST['c_site']; - $content = $_POST['c_content']; - $preview = !empty($_POST['preview']); - - if ($content != '') - { - if ($core->blog->settings->system->wiki_comments) { - $core->initWikiComment(); - } else { - $core->initWikiSimpleComment(); - } - $content = $core->wikiTransform($content); - $content = $core->HTMLfilter($content); - } - - $_ctx->comment_preview['content'] = $content; - $_ctx->comment_preview['rawcontent'] = $_POST['c_content']; - $_ctx->comment_preview['name'] = $name; - $_ctx->comment_preview['mail'] = $mail; - $_ctx->comment_preview['site'] = $site; - - if ($preview) - { - # --BEHAVIOR-- publicBeforeCommentPreview - $core->callBehavior('publicBeforeCommentPreview',$_ctx->comment_preview); - - $_ctx->comment_preview['preview'] = true; - } - else - { - # Post the comment - $cur = $core->con->openCursor($core->prefix.'comment'); - $cur->comment_author = $name; - $cur->comment_site = html::clean($site); - $cur->comment_email = html::clean($mail); - $cur->comment_content = $content; - $cur->post_id = $_ctx->posts->post_id; - $cur->comment_status = $core->blog->settings->system->comments_pub ? 1 : -1; - $cur->comment_ip = http::realIP(); - - $redir = $_ctx->posts->getURL(); - $redir .= $core->blog->settings->system->url_scan == 'query_string' ? '&' : '?'; - - try - { - if (!text::isEmail($cur->comment_email)) { - throw new Exception(__('You must provide a valid email address.')); - } - - # --BEHAVIOR-- publicBeforeCommentCreate - $core->callBehavior('publicBeforeCommentCreate',$cur); - if ($cur->post_id) { - $comment_id = $core->blog->addComment($cur); - - # --BEHAVIOR-- publicAfterCommentCreate - $core->callBehavior('publicAfterCommentCreate',$cur,$comment_id); - } - - if ($cur->comment_status == 1) { - $redir_arg = 'pub=1'; - } else { - $redir_arg = 'pub=0'; - } - - header('Location: '.$redir.$redir_arg); - } - catch (Exception $e) - { - $_ctx->form_error = $e->getMessage(); - $_ctx->form_error; - } - } - } - - # The entry - $core->tpl->setPath($core->tpl->getPath(), dirname(__FILE__).'/default-templates'); - self::serveDocument('page.html'); - } - } - } - - public static function pagespreview($args) - { - $core = $GLOBALS['core']; - $_ctx = $GLOBALS['_ctx']; - - if (!preg_match('#^(.+?)/([0-9a-z]{40})/(.+?)$#',$args,$m)) { - # The specified Preview URL is malformed. - self::p404(); - } - else - { - $user_id = $m[1]; - $user_key = $m[2]; - $post_url = $m[3]; - if (!$core->auth->checkUser($user_id,null,$user_key)) { - # The user has no access to the entry. - self::p404(); - } - else - { - $_ctx->preview = true; - self::pages($post_url); - } - } - } -} - -class tplPages -{ - # Widget function - public static function pagesWidget($w) - { - global $core, $_ctx; - - if ($w->homeonly && $core->url->type != 'default') { - return; - } - - $params['post_type'] = 'page'; - $params['limit'] = abs((integer) $w->limit); - $params['no_content'] = true; - - $sort = $w->sortby; - if (!in_array($sort,array('post_title','post_position','post_dt'))) { - $sort = 'post_title'; - } - - $order = $w->orderby; - if ($order != 'asc') { - $order = 'desc'; - } - $params['order'] = $sort.' '.$order; - - $rs = $core->blog->getPosts($params); - - if ($rs->isEmpty()) { - return; - } - - $res = - '
      '. - ($w->title ? '

      '.html::escapeHTML($w->title).'

      ' : ''). - '
        '; - - while ($rs->fetch()) { - $class = ''; - if (($core->url->type == 'pages' && $_ctx->posts instanceof record && $_ctx->posts->post_id == $rs->post_id)) { - $class = ' class="page-current"'; - } - $res .= ''. - html::escapeHTML($rs->post_title).''; - } - - $res .= '
      '; - - return $res; - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/pages/_widgets.php b/v2/dotclear/plugins/pages/_widgets.php deleted file mode 100644 index a6ba820..0000000 --- a/v2/dotclear/plugins/pages/_widgets.php +++ /dev/null @@ -1,41 +0,0 @@ -addBehavior('initWidgets',array('pagesWidgets','initWidgets')); -$core->addBehavior('initDefaultWidgets',array('pagesWidgets','initDefaultWidgets')); - -class pagesWidgets -{ - public static function initWidgets($w) - { - $w->create('pages',__('Pages'),array('tplPages','pagesWidget')); - $w->pages->setting('title',__('Title:'),__('Pages')); - $w->pages->setting('homeonly',__('Home page only'),1,'check'); - $w->pages->setting('sortby',__('Order by:'),'post_title','combo', - array( - __('Page title') => 'post_title', - __('Page position') => 'post_position', - __('Publication date') => 'post_dt' - ) - ); - $w->pages->setting('orderby',__('Sort:'),'asc','combo', - array(__('Ascending') => 'asc', __('Descending') => 'desc') - ); - } - - public static function initDefaultWidgets($w,$d) - { - $d['extra']->append($w->pages); - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/pages/default-templates/page.html b/v2/dotclear/plugins/pages/default-templates/page.html deleted file mode 100644 index 1a79823..0000000 --- a/v2/dotclear/plugins/pages/default-templates/page.html +++ /dev/null @@ -1,247 +0,0 @@ - - - - - - - {{tpl:EntryTitle encode_html="1"}} - {{tpl:BlogName encode_html="1"}} - - - - - - - - - - - - - - - - - - - - - - {{tpl:include src="_head.html"}} - - - - - - -
      -{{tpl:EntryPingData}} - -{{tpl:include src="_top.html"}} - -
      - -
      -
      - -
      -

      {{tpl:EntryTitle encode_html="1"}}

      - - - {{tpl:SysBehavior behavior="publicEntryBeforeContent"}} - - -
      {{tpl:EntryExcerpt}}
      -
      -
      {{tpl:EntryContent}}
      - -

      {{tpl:lang Published on}} {{tpl:EntryDate}} - {{tpl:lang by}} {{tpl:EntryAuthorLink}}

      - - - {{tpl:SysBehavior behavior="publicEntryAfterContent"}} -
      - - - - -
      -

      {{tpl:lang Attachments}}

      -
        - -
      • - - {{tpl:include src="_mp3_player.html"/}} - - - - {{tpl:include src="_flv_player.html"/}} - - - {{tpl:AttachmentTitle}} - -
      • - -
      -
      - -
      - - - - - -
      -

      {{tpl:lang Comments}}

      -
      - -
      {{tpl:CommentOrderNumber}}. - {{tpl:lang On}} {{tpl:CommentDate}}, {{tpl:CommentTime}} - {{tpl:lang by}} {{tpl:CommentAuthorLink}}
      - -
      - - {{tpl:SysBehavior behavior="publicCommentBeforeContent"}} - - {{tpl:CommentContent}} - - - {{tpl:SysBehavior behavior="publicCommentAfterContent"}} -
      - -
      -
      - -
      -
      - - - -

      {{tpl:SysFormError}}

      -
      - - -

      {{tpl:lang Your comment has been published.}}

      -
      - - -

      {{tpl:lang Your comment has been submitted and - will be reviewed for publication.}}

      -
      - - -
      - -
      -

      {{tpl:lang Your comment}}

      -
      -
      {{tpl:CommentPreviewContent}}
      -
      -

      -
      -
      - -

      {{tpl:lang Add a comment}}

      -
      - - {{tpl:SysBehavior behavior="publicCommentFormBeforeContent"}} - -

      - -

      - -

      - -

      - -

      - -

      - -

      - -

      - -

      - -

      {{tpl:CommentHelp}}

      - - - {{tpl:SysBehavior behavior="publicCommentFormAfterContent"}} -
      - -
      -

      -

      -
      -
      -
      - - - -
      -

      {{tpl:lang They posted on the same topic}}

      - - -
      - -
      {{tpl:PingOrderNumber}}. - {{tpl:lang On}} {{tpl:PingDate}}, {{tpl:PingTime}} - {{tpl:lang by}} {{tpl:PingBlogName encode_html="1"}}
      - -
      - - {{tpl:SysBehavior behavior="publicPingBeforeContent"}} - -

      {{tpl:PingTitle encode_html="1"}}

      - {{tpl:PingContent}} - - - {{tpl:SysBehavior behavior="publicPingAfterContent"}} -
      - -
      - -
      -
      -
      - - -

      {{tpl:lang Trackback URL}} : {{tpl:EntryPingLink}}

      -
      - - -

      {{tpl:lang This page's comments feed}}

      -
      -
      -
      - - - -
      - -{{tpl:include src="_footer.html"}} -
      - - \ No newline at end of file diff --git a/v2/dotclear/plugins/pages/icon-big.png b/v2/dotclear/plugins/pages/icon-big.png deleted file mode 100644 index b11cfb55b83e0b525af53ad1a20be8ec46065d65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2736 zcmbVOcT`hnAHGSDJp#&b!8Je&B4hvwL`D`tP!JQuRM8TW3#5=i5(H8|Oe0%FR8TBf zmMohgaTJlN)Cwr5pdg^Z1}pu(KYIGdch9-^UC;CU=6lXf3-I^W(_W@lXZ8Qq}1d&F% zqyBP=^OUY#Bxc2 z21z(#o=D0Q3cy80cBn8$>W)%*`d0{ik)Pk+!UDu~)AJLM)coBqVKoVh$n4_vknB@{#mAij8ve_f#y@c#sV+`9FFb`z#^SJ8 zFAN2bp{YdZDm5&XOd~9DeFPFITfl*q?DAB0KXb|d$|X|85L+q~2MUEzOC1mpA(RRw z5ke72Wjcd9cml34R9Y~tp|$p{WdWMqjy``X533L=~=h?w%UaCFVg$eKqUZA-jyse4pU*8zKjt@Vv;)M%g!OgO15kBufQ{w}5#uYboz$tCV zEn6S!mTfHkPB)dxxv>s`$K&4yJ9L+qm)|VBYi-G>yrW@hX<5=2!iBd@>>yF<*UV?0(3u-Mf_wWBuj(sWJLbt$UJz zlB&1n&4|a#;DkUk9vVjerDO_ep})o7|BDXa6ZWLv#AF9d+UjC(pWG5F>L`fCr3?XMK4$;nCE1|kuy z)rO;QHof27W3m;_KX55et=$KRGF9Vn3-0M? zX6T~eG04J;=ieiWe$*L<+^i5ENDZPV?IWk;$Wi!=xi<-to2uz%z!TFzKx=+$h#|@K6hV+{(;M80?bIIE19E&)8;$mw3On zxbfhCJih(Z#@J_JVPPJM%?z*>P;Uqrq;%5X<_!pwZ14@hU8i;qwm90KRZ2?!CLR|S zFy(*rXh%o(>E+pLQkmz`^t2)-?z-)*)_d2ujFy-e_hLnP>x_Ygo%6*tp}>cRE+5nn zpx4<=K|%NP$DEem4!y45JYd_U+hukORzpLP8Fa>u505N>SAkX5{aX!@8@#Nj?HThf z;e{`1Whb`~`z7`xHrASJ%p9{*oqH1|6G|={3kbkoP9nMTfL%n>m18CsYtlE-MN3$ z!b-XE`{nh6tRd#b)odahwY^=9 zUp{RnsV!eO=ii!he5iQs-IYZS7bE;ron|l3M`mh$?3VZRYF!|oK4Kv3h^RSK;2n#( z6Bf4xm8%)U{l#VkhMz2HNiporNTVYk-r6;eEt}JyE}0FbJ!gKq@L_H$jhfO$h@$Hr z8}yk>O42&o_mFV@Ij+tI+nNS(IGh&pq-nG#D!sb8+G1{`^TLeS(sb9ZYh9jmar4<} z2hW_@-s=?U=BxW!U7BJHv=%VE`@fXPPOkdtv`K%(+I}-wZA_L;X*^SNnciM@RrwfW z>&s21?+w2jpH*;H=lo{M9KX1VG$HFO4@oR*SoY=ab9Wvj^%@0vS7x0`IzF=>t_%E> Wdd+`L`WwvRKctVBKkXbPMDZsKe__7> diff --git a/v2/dotclear/plugins/pages/icon-np-big.png b/v2/dotclear/plugins/pages/icon-np-big.png deleted file mode 100644 index d4ffd60f9053f2b29c67cf575b2f1e327f953a9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2635 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 diff --git a/v2/dotclear/plugins/pages/icon-np.png b/v2/dotclear/plugins/pages/icon-np.png deleted file mode 100644 index 6f7f7de66a13d314e17bdd57761543cffaba1d45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1369 zcmbVMZA{!`951jrB$B=80z)UYGiErsw)bi)2lTF2Ipx^xI5IRWtXz9{9rT5^a0e!O zA&VKJjuH3n=KD)bgbX872_py!+m|hb!9>TLV{VIK%fi%{#o$xm&<|uEe3JHg{!jnE z-~YX>{<3E?GjcK@2+H)9&;hWoF`o4Mz&m$#js@EW-BYQT%V9mnsysw-at#lAMK;0* zc$RCbKg}0FP#Px$EA>iWDH)PQ6Km+0;-Ui35L8eUSJ+T3ufsKbM39`wt=@hF7C0xe z-R8r5ikpuLCCw^d-dq+8HP?m+4k;>x3*sao5P6-2<6@npk#Q$7&r5={ag8GIyoz4y zL>8Q?^!Z`8tn#qUgyn}YI|kcv6K=6O9FC`8GlpX*W=3&yKJFkbW)j2T#f1QCDik5gYu~^I$vzTNxg5m^07#wDEKG4Y5nk1c#=S$kABm>QBAyrUxL6%^H zk*$#%bSDBlT?j!`e7+@ONn1=5NEsSu6%;pNs3;n7&1-9VfdAKxWwo_nlft6`UXvTt z5U59ZQxXhvcW*<6BJhUXstTYeY#l9!8bn^wy|fbnUre09k+g%tF`FGDa2MvmaGYQ) zG(}lG78}DbRtVLx7c9+}W?SjO~G0iB>Laa2e3XMF+sImypXO|R~ zvrgIRr#(2vm|a#QY9Qj2hq9S5%#Aw;;Q0cU`#%{&fitMl8vkjPYI{Kd-U;4XcV=kzyW3CfpY6^%J$%)7`7-xPWMk`|)R7~* zW?J_@clG_UK;-c2lkIDWy?jcjY9PD!?`?VG#gAp@hGUMv9ZOfN@Yl0l@`K%3cjpq+ z0HIa1k7ZAn?d|DcEM2zhEO$bwr&}%@_K%Lfcy8CjO8dnh-#l7Pypa2wojjF(;#kT0 z8+y(IeVH5g9U3aG_~c+S)DxXHB|NDIu7!6LeR$|`%HJ7$qc9O1_@Vmc6|>&=-o5*K z8aBfw;L^G1OVELKi8y{`u;taMw1j_W#{C~arNhr0D_l9o4xE7#nSGCrY!Qj$E!&_w zCsTLhU+iug-vdo-Nk2OB$hoOYiOISPpZ@^`vnEnjCN?yDHudSm_|Lf~zUlVwyK)jr XgQW1;s;R~ZX8i2Do-(@AwX@|PuuJH; diff --git a/v2/dotclear/plugins/pages/icon.png b/v2/dotclear/plugins/pages/icon.png deleted file mode 100644 index 26f64b8cc6da5288231e547451dafae0417dd7c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1509 zcmbVMdr%a09N!EX155@hDJs_!)QY>^z2i7`=_8$Qz}gBe;Y zTdvMTGu;MI#H5w+z*?4NbCeZ3a9XxxF`VorBmox?DcI{OVFkjgm5u8X(mb$@$l!5^ zSge&zIF*x`4I4Nfz-k35cc6(VoQNqfRf0yNiHDUah9amE!IW}LL#UJlio%nROtQw) zPQpT(CT&S8t*l5C-2{SoJRXHdrQrBN1jBJWprKUCC4^ikWkt#>XNCDe1ri7jo^gu| z$HD~xT;pg#w19uzm=Z16O5Fgl z0D)W0JEVFz=LgAB?jCI@0F=BTUgH_5C{zi_Iaa#>E1F5IOgd4}3{8+49fqnCQ5@5w zMij$vlZw>o5{xRf$z)1U>Vq0nagC(XfMbS4J(h%Hm=V>fj2gX0m1IyU)#?N_8RVK- zL8Mp*2-;;NyOUh?Be{fu2b9S1HjXO^c0hI!Cvrj&=Y|bdHN2c*Y0e`AiZc-_33z4= zpiMmIg2%HiX6SmzjEe;)KkLV8am_`0k61AD{Ltw2 zU+!Ly7(C6lwRQKK4ToX5J++b;9FpJnjy7Ex$cz2LRPy)v9XJdt)c%Ku>Y6Hr09?bygzNBhPzt%^Mtz}wecr&41&A|rPkSkT`c`-hY9 z_uRbqz5mkY3Qcu%Ztp_=#Mwi(4}1$MziB<5A9J(vuXEAxJKxSQ`b8h_TNr(7ItTWNYfQ3xD~z9)c?+L3M<+b}t5cowU_+hJ-q3SH$QYwr z1_nUCbzXU>J)Shouy!8WVyI{x-2tKot7dJV)yNXz< z1>56L_T8Gz?)6O}-Q{cFb39cv0P8Oq>uURUtvWQQND-P2s+l=IElr8Po9i3XR*}E@N*w;( \ No newline at end of file diff --git a/v2/dotclear/plugins/pages/list.php b/v2/dotclear/plugins/pages/list.php deleted file mode 100644 index 695f548..0000000 --- a/v2/dotclear/plugins/pages/list.php +++ /dev/null @@ -1,205 +0,0 @@ -rs->isEmpty()) - { - echo '

      '.__('No page').'

      '; - } - else - { - $pager = new pager($page,$this->rs_count,$nb_per_page,10); - $pager->html_prev = $this->html_prev; - $pager->html_next = $this->html_next; - $pager->var_page = 'page'; - - $html_block = - ''. - ''. - ''. - ''. - ''. - ''. - ''. - '%s
      '.__('Title').''.__('Date').''.__('Author').''.__('Comments').''.__('Trackbacks').''.__('Status').'
      '; - - if ($enclose_block) { - $html_block = sprintf($enclose_block,$html_block); - } - - echo '

      '.__('Page(s)').' : '.$pager->getLinks().'

      '; - - $blocks = explode('%s',$html_block); - - echo $blocks[0]; - - while ($this->rs->fetch()) - { - echo $this->postLine(); - } - - echo $blocks[1]; - - echo '

      '.__('Page(s)').' : '.$pager->getLinks().'

      '; - } - } - - private function postLine() - { - $img = '%1$s'; - switch ($this->rs->post_status) { - case 1: - $img_status = sprintf($img,__('published'),'check-on.png'); - break; - case 0: - $img_status = sprintf($img,__('unpublished'),'check-off.png'); - break; - case -1: - $img_status = sprintf($img,__('scheduled'),'scheduled.png'); - break; - case -2: - $img_status = sprintf($img,__('pending'),'check-wrn.png'); - break; - } - - $protected = ''; - if ($this->rs->post_password) { - $protected = sprintf($img,__('protected'),'locker.png'); - } - - $selected = ''; - if ($this->rs->post_selected) { - $selected = sprintf($img,__('selected'),'selected.png'); - } - - $attach = ''; - $nb_media = $this->rs->countMedia(); - if ($nb_media > 0) { - $attach_str = $nb_media == 1 ? __('%d attachment') : __('%d attachments'); - $attach = sprintf($img,sprintf($attach_str,$nb_media),'attach.png'); - } - - $res = ''; - - $res .= - ''. - form::checkbox(array('entries[]'),$this->rs->post_id,'','','',!$this->rs->isEditable(),'title="'.__('select this page').'"').''. - ''. - html::escapeHTML($this->rs->post_title).''. - ''.dt::dt2str(__('%Y-%m-%d %H:%M'),$this->rs->post_dt).''. - - ''.$this->rs->user_id.''. - ''.$this->rs->nb_comment.''. - ''.$this->rs->nb_trackback.''. - ''.$img_status.' '.$selected.' '.$protected.' '.$attach.''. - ''; - - return $res; - } -} - -/* Getting pages --------------------------------------------------------- */ -$params = array( - 'post_type' => 'page' -); - -$page = !empty($_GET['page']) ? (integer) $_GET['page'] : 1; -$nb_per_page = 30; - -if (!empty($_GET['nb']) && (integer) $_GET['nb'] > 0) { - $nb_per_page = (integer) $_GET['nb']; -} - -$params['limit'] = array((($page-1)*$nb_per_page),$nb_per_page); -$params['no_content'] = true; -$params['order'] = 'post_position ASC, post_title ASC'; - -try { - $pages = $core->blog->getPosts($params); - $counter = $core->blog->getPosts($params,true); - $post_list = new adminPageList($core,$pages,$counter->f(0)); -} catch (Exception $e) { - $core->error->add($e->getMessage()); -} - -# Actions combo box -$combo_action = array(); -if ($core->auth->check('publish,contentadmin',$core->blog->id)) -{ - $combo_action[__('publish')] = 'publish'; - $combo_action[__('unpublish')] = 'unpublish'; - $combo_action[__('schedule')] = 'schedule'; - $combo_action[__('mark as pending')] = 'pending'; -} -if ($core->auth->check('admin',$core->blog->id)) { - $combo_action[__('change author')] = 'author'; -} -if ($core->auth->check('delete,contentadmin',$core->blog->id)) -{ - $combo_action[__('delete')] = 'delete'; -} - -# --BEHAVIOR-- adminPagesActionsCombo -$core->callBehavior('adminPagesActionsCombo',array(&$combo_action)); - -/* Display --------------------------------------------------------- */ -?> - - - <?php echo __('Pages'); ?> - - - - - -'.html::escapeHTML($core->blog->name).' › '.__('Pages').''. -'

      '.__('New page').'

      '; - -if (!$core->error->flag()) -{ - # Show pages - $post_list->display($page,$nb_per_page, - '
      '. - - '%s'. - - '
      '. - '

      '. - - '

      '. - form::combo('action',$combo_action). - '

      '. - form::hidden(array('post_type'),'page'). - form::hidden(array('redir'),html::escapeHTML($_SERVER['REQUEST_URI'])). - $core->formNonce(). - '
      '. - '
      '); -} -dcPage::helpBlock('pages'); -?> - - \ No newline at end of file diff --git a/v2/dotclear/plugins/pages/locales/en/help/page.html b/v2/dotclear/plugins/pages/locales/en/help/page.html deleted file mode 100644 index b91793f..0000000 --- a/v2/dotclear/plugins/pages/locales/en/help/page.html +++ /dev/null @@ -1,165 +0,0 @@ - - - Editing a page - - - - -

      Editing a page

      - -
      -
      Page title
      -
      Type in the page title. This field is mandatory.
      - -
      Excerpt
      -
      This field is optional.
      - -
      Content
      -
      The content of your page. This field is mandatory.
      - -
      Notes
      -
      This text area is for personal use, for notes or memos. What you enter here - will never be displayed on the blog..
      - -
      Page status
      -
      Allows you to choose your page's status: -
        -
      • pending: the publication status has not yet been decided.
      • -
      • scheduled: the page will be set online at the time and date - set in the Published on field.
      • -
      • unpublished: the page is offline.
      • -
      • published: the page is online.
      • -
      -
      - -
      Published on
      -
      Here you can change the page's publication date and time. If the page's - status is scheduled, it will come online at the said date and time.
      - -
      Text formating
      -
      To choose the page syntax. Wiki is a simplified syntax - and will be converted to valid xhtml ; Unless you have a perfect - understanding of xhtml, we advise you to choose the wiki syntax. - See the Wiki syntax reference for more information.
      - -
      Accept comments
      -
      Select this box to allow your visitors to comment the page. The corresponding - global setting is to be found in the blog settings.
      - -
      Accept trackbacks
      -
      A trackback is a way to let a portion of your page as a comment on - another blog. Select this box to allow others to trackback your page. The - corresponding global setting is to be found in the blog settings.
      - -
      Page position
      -
      Allows to order pages according to this number. - This field is used by Pages widget (Order by page position).
      - -
      Page language
      -
      The two character language code of your page. It defaults to your (as a - user) language but you can change it to whatever language code you want, ie. - "en" or "fr-qc". This code is used for the page's display, no check is made - on it.
      - -
      Page password
      -
      You can enter a password for your page. A password protected page will - not be displayed on your blog, it will only be reachable to those you will - give the page url (see the view page link) and password.
      - -
      Basename
      -
      By clicking on its lock, you can unprotect this field and and choose another - URL for your page. If the URL you're trying to use is already used by another - page, a number will be added to it.
      -
      - -

      Comments

      -
      -
      Comment list
      -
      On the Comments tab, you can read and change the status of - your page's comments. If you're allowed to by the blog administrator, - you will be able to set your comments online or offline, to delete them or - to mark them as junk.
      - -
      Add a comment
      -
      On the Add a comment tab, you can reply to one of your page's - comments without leaving your blog's backend. The syntax to be used here is - plain, unlimited, xhtml. Use the fields as if you were modifying a comment.
      -
      - -

      Wiki syntax reference

      - -

      The wiki syntax is a way to enhance your text with a minimal set -of tags, studied to cover the basic needs (titles, paragraphs, quotes, -lists...)

      - -
      -
      Block elements
      -
      -
        -
      • Leave an empty line between two similar blocks.
      • -
      • Paragraph: free text, ended by an empty line if - another paragraph is to follow.
      • -
      • Title: !!! title, !! title - or ! title, allowing you to use three different levels of - heading.
      • -
      • Horizontal line: ----
      • -
      • Lists: Start each line with - * or # for unnumbered or numbered lists respectively. - List imbrication is done by mixing list markers this way: -
        -* item 1
        -** item 1.1
        -* item 2
        -*# item 2.1
        -...
        -
        -
      • -
      • Preformatted text: each line must start with a space.
      • -
      • Block quote: each line must start with a semicolon (>).
      • -
      -
      - -
      Formatting tags
      -
      -
        -
      • Emphasis: two quotes ''text''
      • -
      • Strong emphasis: two underscore __text__
      • -
      • New line: %%%
      • -
      • Insertion: two plusses ++text++
      • -
      • Deletion: two minuses --text--
      • -
      • Link: [url], [name|url], - [name|url|language] or [name|url|languagee|title]
      • -
      • Image: - ((url|alternative text)), - ((url|alternative text|position)) or - ((url|alternative text|position|long description)). -
        The position can be either L or G (left), R or D (right) or C (centered).
      • -
      • Anchor: ~anchor~
      • -
      • Acronym: ??acronym|title??
      • -
      • Inline HTML: two backquotes ``html code``
      • -
      • Inline quote: {{quote}}, - {{quote|language}} or {{quote|language|url}}
      • -
      • Code: @@code@@
      • -
      • Footnotes: $$footnote$$
      • -
      -
      - -
      Unformatted text
      -
      If you don't want one formatting character to be interpreted as such, add a -\ just before it. This way: -\[text in brackets without being a link\] -
      - -
      HTML Code
      -
      Even if you chose the wiki syntax, you may sometimes need a more -powerful formatting, i.e. HTML syntax. Do it the following way: -
      -///html
      -<p style="color:red">my text in red</p>
      -///
      -
      -
      -
      - - - \ No newline at end of file diff --git a/v2/dotclear/plugins/pages/locales/en/help/pages.html b/v2/dotclear/plugins/pages/locales/en/help/pages.html deleted file mode 100644 index 1afd515..0000000 --- a/v2/dotclear/plugins/pages/locales/en/help/pages.html +++ /dev/null @@ -1,22 +0,0 @@ - - - Managing pages - - - - -

      Selected pages actions

      -

      If your user permission level allows it, you can perform batch operations on the -pages you select in the list.

      - -
        -
      • Publish : set pages online,
      • -
      • Unpublish : set pages offline,
      • -
      • Mark as pending : erase other publication status,
      • -
      • Change author : allows you to change the pages' author by - entering the new author's ID,
      • -
      • Delete : suppress the pages (this operation cannot be undone).
      • -
      - - - \ No newline at end of file diff --git a/v2/dotclear/plugins/pages/locales/en/resources.php b/v2/dotclear/plugins/pages/locales/en/resources.php deleted file mode 100644 index 1df1128..0000000 --- a/v2/dotclear/plugins/pages/locales/en/resources.php +++ /dev/null @@ -1,21 +0,0 @@ - \ No newline at end of file diff --git a/v2/dotclear/plugins/pages/locales/fr/help/page.html b/v2/dotclear/plugins/pages/locales/fr/help/page.html deleted file mode 100644 index 1b17b7d..0000000 --- a/v2/dotclear/plugins/pages/locales/fr/help/page.html +++ /dev/null @@ -1,172 +0,0 @@ - - - Rédaction d'une page - - - - -

      Rédaction de la page

      - -
      -
      Titre de la page
      -
      Inscrivez le titre de la page. Ce champ est obligatoire.
      - -
      Extrait
      -
      Ce champ est optionnel.
      - -
      Contenu
      -
      Le contenu de la page. Ce champ est obligatoire.
      - -
      Notes
      -
      Cette zone de texte sert à la prise de notes ou pense-bête divers. Elle ne - sera jamais affichée sur le blog.
      - -
      Etat de la page
      -
      Permet de choisir l'état de la page après enregistrement : -
        -
      • en attente : en attente de publication.
      • -
      • programmée : la page sera mise en ligne à la date et à l'heure - indiquées dans le champ Publiée le.
      • -
      • non publiée : page hors ligne.
      • -
      • publiée : page en ligne.
      • -
      -
      - -
      Publiée le
      -
      Permet de modifier la date et l'heure de publication de la page. Si vous avez - choisi le statut programmée elle sera mise en ligne aux date et heure - définis dans ce champ.
      - -
      Format du texte
      -
      Permet de choisir la syntaxe de saisie de la page. Le wiki est une syntaxe - simplifiée et sera converti en xhtml valide ; à moins que vous maîtrisiez - parfaitement le xhtml nous vous conseillons de la choisir de préférence. - Consultez la référence de la syntaxe Wiki pour plus - d'informations.
      - -
      Accepter les commentaires
      -
      Cochez ou décochez la case selon que vous souhaitez permettre ou interdire - les commentaires sur la page en particulier. L'option pour permettre ou - autoriser de façon générale les commentaires se situe dans le menu Préférences - du blog.
      - -
      Accepter les rétroliens
      -
      Un rétrolien permet de signaler une page dans les commentaires d'un autre - blog. Cochez ou décochez la case selon que vous souhaitez permettre ou interdire - les rétroliens sur la page. L'option pour permettre ou autoriser de façon - générale les rétroliens se situe dans le menu Préférences du blog.
      - -
      Position de la page
      -
      Permet de classer les différentes pages en fonction de leur numéro d'ordre. - Ce champ est utilisé par le widget Pages (Trier par position de la page).
      - -
      Langue de la page
      -
      Code langue de votre page. Par défaut, il s'agit du code de votre - langue. Vous pouvez le changer, par le code d'une autre langue, par - exemple "en", "fr-qc". Ce code est libre, il sera utilisé lors de l'affichage - des pages.
      - -
      Mot de passe de la page
      -
      Permet de déterminer un mot de passe d'accès à une page dans le blog. Une - page protégée par mot de passe ne sera visible nulle part sur votre blog, vous - pourrez en donner l'adresse à vos lecteurs en vous rendant sur le lien - Voir la page.
      - -
      URL spécifique
      -
      Ce champ permet de choisir une URL pour une page autre que celle par défaut - après avoir cliqué sur le petit verrou placé à sa droite. Si vous essayez - d'utiliser une URL déjà existante, celle-ci se verra incrémentée d'un chiffre.
      -
      - -

      Commentaires

      -
      -
      Liste les commentaires
      -
      Depuis l'onglets Commentaires vous pouvez lire et changer l'état - des commentaires de votre page. Suivant vos permissions, vous pouvez modifier, - mettre en ligne ou hors ligne, supprimer ou classer comme commentaire - indésirable.
      - -
      Ajouter un commentaire
      -
      Depuis l'onglet Ajouter un commentaire vous pouvez répondre - directement à un commentaire sans passer par votre blog. Cette interface vous - permet également de saisir votre commentaire en XHTML, sans limitation. Vous - devrez remplir les champs de la même manière qu'en modifiant un commentaire.
      -
      - -

      Référence de la syntaxe Wiki

      - -

      La syntaxe Wiki est une manière d'écrire du texte avec un jeu de balises -réduit au minimum, permettant de couvrir les besoins les plus courants -(titres, paragraphes, citations, listes...).

      - -
      -
      Éléments de bloc
      -
      -
        -
      • Laissez une ligne vide entre chaque bloc de même nature.
      • -
      • Paragraphe : texte libre, terminé par une ligne - vide si suivi d'un second paragraphe.
      • -
      • Titre : !!! titre, !! titre - ou ! titre pour des titres plus ou moins importants.
      • -
      • Trait horizontal : ----
      • -
      • Listes : lignes débutant par * pour des - listes à puce ou # pour des listes numérotées. Vous pouvez faire - des listes imbriquées en mélangeant les codes de liste. Par exemple : -
        -* item 1
        -** item 1.1
        -* item 2
        -*# item 2.1
        -...
        -
        -
      • -
      • Texte préformaté : espace avant chaque ligne de texte.
      • -
      • Bloc de citation : > devant chaque - ligne de texte.
      • -
      -
      - -
      Éléments de formatage
      -
      -
        -
      • Emphase : deux apostrophes ''texte''
      • -
      • Forte emphase : deux soulignés __texte__
      • -
      • Retour forcé à la ligne : %%%
      • -
      • Insertion : deux plus ++texte++
      • -
      • Suppression : deux moins --texte--
      • -
      • Lien : [url], [nom|url], - [nom|url|langue] ou [nom|url|langue|titre]
      • -
      • Image : - ((url|texte alternatif)), - ((url|texte alternatif|position)) ou - ((url|texte alternatif|position|description longue)). -
        La position peut prendre les valeurs L ou G (gauche), R ou D (droite) ou C (centré).
      • -
      • Ancre : ~ancre~
      • -
      • Acronyme : ??acronyme|titre??
      • -
      • Code HTML en ligne: deux apostrophes inversées ``code html``
      • -
      • Citation en ligne : {{citation}}, - {{citation|langue}} ou {{citation|langue|url}}
      • -
      • Code : @@code ici@@
      • -
      • Note de bas de page : $$Corps de la note$$
      • -
      -
      - -
      Empêcher le formatage du texte
      -
      Pour insérer un caractère sans que celui-ci soit reconnu comme un caractère -de formatage, ajoutez le caractère \ avant celui-ci. Par exemple : -\[texte entre crochet qui n'est pas un lien\] -
      - -
      Insérer du code HTML
      -
      Vous pouvez ponctuellement avoir besoin d'insérer du code HTML dans votre -texte au format Wiki. Pour cela, utilisez le code suivant : -
      -///html
      -<p style="color:red">mon texte en rouge</p>
      -///
      -
      -
      -
      - - - \ No newline at end of file diff --git a/v2/dotclear/plugins/pages/locales/fr/help/pages.html b/v2/dotclear/plugins/pages/locales/fr/help/pages.html deleted file mode 100644 index 1036b19..0000000 --- a/v2/dotclear/plugins/pages/locales/fr/help/pages.html +++ /dev/null @@ -1,22 +0,0 @@ - - - Gestion des pages - - - - -

      Actions par lot sur les pages

      -

      Il est possible d'effectuer un ensemble d'actions sur plusieurs pages, d'un -seul coup. Les actions possibles dépendent des permissions de l'utilisateur.

      - -
        -
      • Publier : mettre la page en ligne,
      • -
      • Hors ligne : mettre la page hors ligne,
      • -
      • En attente : en attente de publication,
      • -
      • Changer l'auteur : permet de changer l'auteur de la page en indiquant - l'identifiant de l'utilisateur qui deviendra le nouvel auteur,
      • -
      • Supprimer : supprime la page (cette opération est irréversible).
      • -
      - - - \ No newline at end of file diff --git a/v2/dotclear/plugins/pages/locales/fr/resources.php b/v2/dotclear/plugins/pages/locales/fr/resources.php deleted file mode 100644 index 1df1128..0000000 --- a/v2/dotclear/plugins/pages/locales/fr/resources.php +++ /dev/null @@ -1,21 +0,0 @@ - \ No newline at end of file diff --git a/v2/dotclear/plugins/pages/page.php b/v2/dotclear/plugins/pages/page.php deleted file mode 100644 index a123b8c..0000000 --- a/v2/dotclear/plugins/pages/page.php +++ /dev/null @@ -1,659 +0,0 @@ -auth->getOption('post_format'); -$post_password = ''; -$post_url = ''; -$post_lang = $core->auth->getInfo('user_lang'); -$post_title = ''; -$post_excerpt = ''; -$post_excerpt_xhtml = ''; -$post_content = ''; -$post_content_xhtml = ''; -$post_notes = ''; -$post_status = $core->auth->getInfo('user_post_status'); -$post_position = 0; -$post_open_comment = false; -$post_open_tb = false; - -$post_media = array(); - -$page_title = __('New page'); - -$can_view_page = true; -$can_edit_page = $core->auth->check('pages,usage',$core->blog->id); -$can_publish = $core->auth->check('pages,publish,contentadmin',$core->blog->id); -$can_delete = false; - -$post_headlink = ''; -$post_link = '%s'; - -$next_link = $prev_link = $next_headlink = $prev_headlink = null; - -# If user can't publish -if (!$can_publish) { - $post_status = -2; -} - -# Status combo -foreach ($core->blog->getAllPostStatus() as $k => $v) { - $status_combo[$v] = (string) $k; -} - -# Formaters combo -foreach ($core->getFormaters() as $v) { - $formaters_combo[$v] = $v; -} - -# Languages combo -$rs = $core->blog->getLangs(array('order'=>'asc')); -$all_langs = l10n::getISOcodes(0,1); -$lang_combo = array('' => '', __('Most used') => array(), __('Available') => l10n::getISOcodes(1,1)); -while ($rs->fetch()) { - if (isset($all_langs[$rs->post_lang])) { - $lang_combo[__('Most used')][$all_langs[$rs->post_lang]] = $rs->post_lang; - unset($lang_combo[__('Available')][$all_langs[$rs->post_lang]]); - } else { - $lang_combo[__('Most used')][$rs->post_lang] = $rs->post_lang; - } -} -unset($all_langs); -unset($rs); - - -# Get page informations -if (!empty($_REQUEST['id'])) -{ - $params['post_type'] = 'page'; - $params['post_id'] = $_REQUEST['id']; - - $post = $core->blog->getPosts($params); - - if ($post->isEmpty()) - { - $core->error->add(__('This page does not exist.')); - $can_view_page = false; - } - else - { - $post_id = $post->post_id; - $post_dt = date('Y-m-d H:i',strtotime($post->post_dt)); - $post_format = $post->post_format; - $post_password = $post->post_password; - $post_url = $post->post_url; - $post_lang = $post->post_lang; - $post_title = $post->post_title; - $post_excerpt = $post->post_excerpt; - $post_excerpt_xhtml = $post->post_excerpt_xhtml; - $post_content = $post->post_content; - $post_content_xhtml = $post->post_content_xhtml; - $post_notes = $post->post_notes; - $post_status = $post->post_status; - $post_position = (integer) $post->post_position; - $post_open_comment = (boolean) $post->post_open_comment; - $post_open_tb = (boolean) $post->post_open_tb; - - $page_title = __('Edit page'); - - $can_edit_page = $post->isEditable(); - $can_delete= $post->isDeletable(); - - $next_rs = $core->blog->getNextPost($post,1); - $prev_rs = $core->blog->getNextPost($post,-1); - - if ($next_rs !== null) { - $next_link = sprintf($post_link,$next_rs->post_id, - html::escapeHTML($next_rs->post_title),__('next page').' »'); - $next_headlink = sprintf($post_headlink,'next', - html::escapeHTML($next_rs->post_title),$next_rs->post_id); - } - - if ($prev_rs !== null) { - $prev_link = sprintf($post_link,$prev_rs->post_id, - html::escapeHTML($prev_rs->post_title),'« '.__('previous page')); - $prev_headlink = sprintf($post_headlink,'previous', - html::escapeHTML($prev_rs->post_title),$prev_rs->post_id); - } - - try { - $core->media = new dcMedia($core); - $post_media = $core->media->getPostMedia($post_id); - } catch (Exception $e) {} - } -} - -# Format content -if (!empty($_POST) && $can_edit_page) -{ - $post_format = $_POST['post_format']; - $post_excerpt = $_POST['post_excerpt']; - $post_content = $_POST['post_content']; - - $post_title = $_POST['post_title']; - - if (isset($_POST['post_status'])) { - $post_status = (integer) $_POST['post_status']; - } - - if (empty($_POST['post_dt'])) { - $post_dt = ''; - } else { - $post_dt = strtotime($_POST['post_dt']); - $post_dt = date('Y-m-d H:i',$post_dt); - } - - $post_open_comment = !empty($_POST['post_open_comment']); - $post_open_tb = !empty($_POST['post_open_tb']); - $post_lang = $_POST['post_lang']; - $post_password = !empty($_POST['post_password']) ? $_POST['post_password'] : null; - $post_position = (integer) $_POST['post_position']; - - $post_notes = $_POST['post_notes']; - - if (isset($_POST['post_url'])) { - $post_url = $_POST['post_url']; - } - - $core->blog->setPostContent( - $post_id,$post_format,$post_lang, - $post_excerpt,$post_excerpt_xhtml,$post_content,$post_content_xhtml - ); -} - -# Create or update post -if (!empty($_POST) && !empty($_POST['save']) && $can_edit_page) -{ - $cur = $core->con->openCursor($core->prefix.'post'); - - # Magic tweak :) - $core->blog->settings->system->post_url_format = $page_url_format; - - $cur->post_type = 'page'; - $cur->post_title = $post_title; - $cur->post_dt = $post_dt ? date('Y-m-d H:i:00',strtotime($post_dt)) : ''; - $cur->post_format = $post_format; - $cur->post_password = $post_password; - $cur->post_lang = $post_lang; - $cur->post_title = $post_title; - $cur->post_excerpt = $post_excerpt; - $cur->post_excerpt_xhtml = $post_excerpt_xhtml; - $cur->post_content = $post_content; - $cur->post_content_xhtml = $post_content_xhtml; - $cur->post_notes = $post_notes; - $cur->post_status = $post_status; - $cur->post_position = $post_position; - $cur->post_open_comment = (integer) $post_open_comment; - $cur->post_open_tb = (integer) $post_open_tb; - - if (isset($_POST['post_url'])) { - $cur->post_url = $post_url; - } - - # Update post - if ($post_id) - { - try - { - # --BEHAVIOR-- adminBeforePageUpdate - $core->callBehavior('adminBeforePageUpdate',$cur,$post_id); - - $core->blog->updPost($post_id,$cur); - - # --BEHAVIOR-- adminAfterPageUpdate - $core->callBehavior('adminAfterPageUpdate',$cur,$post_id); - - http::redirect($redir_url.'&id='.$post_id.'&upd=1'); - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } - } - else - { - $cur->user_id = $core->auth->userID(); - - try - { - # --BEHAVIOR-- adminBeforePageCreate - $core->callBehavior('adminBeforePageCreate',$cur); - - $return_id = $core->blog->addPost($cur); - - # --BEHAVIOR-- adminAfterPageCreate - $core->callBehavior('adminAfterPageCreate',$cur,$return_id); - - http::redirect($redir_url.'&id='.$return_id.'&crea=1'); - } - catch (Exception $e) - { - $core->error->add($e->getMessage()); - } - } -} - -if (!empty($_POST['delete']) && $can_delete) -{ - try { - # --BEHAVIOR-- adminBeforePageDelete - $core->callBehavior('adminBeforePageDelete',$post_id); - $core->blog->delPost($post_id); - http::redirect($p_url); - } catch (Exception $e) { - $core->error->add($e->getMessage()); - } -} - -/* DISPLAY --------------------------------------------------------- */ -$default_tab = 'edit-entry'; -if (!$can_edit_page) { - $default_tab = ''; -} -if (!empty($_GET['co'])) { - $default_tab = 'comments'; -} - -?> - - - <?php echo $page_title.' - '.__('Pages'); ?> - - callBehavior('adminPageHeaders'). - dcPage::jsPageTabs($default_tab). - $next_headlink."\n".$prev_headlink; - ?> - - - - -'.__('Page has been successfully updated.').'

      '; -} -elseif (!empty($_GET['crea'])) { - echo '

      '.__('Page has been successfully created.').'

      '; -} -elseif (!empty($_GET['attached'])) { - echo '

      '.__('File has been successfully attached.').'

      '; -} -elseif (!empty($_GET['rmattach'])) { - echo '

      '.__('Attachment has been successfully removed.').'

      '; -} - -# XHTML conversion -if (!empty($_GET['xconv'])) -{ - $post_excerpt = $post_excerpt_xhtml; - $post_content = $post_content_xhtml; - $post_format = 'xhtml'; - - echo '

      '.__('Don\'t forget to validate your XHTML conversion by saving your post.').'

      '; -} - -echo '

      '.html::escapeHTML($core->blog->name). -' › '.__('Pages').''.$page_title; - if ($post_id) { - echo ' “'.$post_title.'”'; - } -echo '

      '; - -if ($post_id && $post->post_status == 1) { - echo '

      '.__('Go to this page on the site').'

      '; -} - -echo ''; - -if ($post_id) -{ - echo '

      '; - if ($prev_link) { echo $prev_link; } - if ($next_link && $prev_link) { echo ' - '; } - if ($next_link) { echo $next_link; } - - # --BEHAVIOR-- adminPageNavLinks - $core->callBehavior('adminPageNavLinks',isset($post) ? $post : null); - - echo '

      '; -} - -# Exit if we cannot view page -if (!$can_view_page) { - echo ''; - return; -} - - -/* Post form if we can edit post --------------------------------------------------------- */ -if ($can_edit_page) -{ - echo '
      '; - echo '
      '; - - echo '
      '; - echo '
      '; - - echo - '

      '. - - '

      '. - form::textarea('post_excerpt',50,5,html::escapeHTML($post_excerpt)). - '

      '. - - '

      '. - form::textarea('post_content',50,$core->auth->getOption('edit_size'),html::escapeHTML($post_content)). - '

      '; - - echo - '

      '. - form::textarea('post_notes',50,5,html::escapeHTML($post_notes)). - '

      '; - - # --BEHAVIOR-- adminPageForm - $core->callBehavior('adminPageForm',isset($post) ? $post : null); - - echo - '

      '. - ($post_id ? form::hidden('id',$post_id) : ''). - ' '; - - if ($post_id) { - $preview_url = $core->blog->url. - $core->url->getURLFor('pagespreview', - $core->auth->userID().'/'. - http::browserUID(DC_MASTER_KEY.$core->auth->userID().$core->auth->getInfo('user_pwd')). - '/'.$post->post_url); - echo ''.__('Preview').''; - } - - echo - ($can_delete ? '' : ''). - $core->formNonce(). - '

      '; - - echo '
      '; // End #entry-content - echo '
      '; // End #entry-wrapper - - echo '
      '; - - echo - '

      '. - - '

      '. - - '

      '. - - '

      '. - '

      '. - - '

      '. - - '

      '. - - '

      '. - - '
      '. - '

      '. - '

      '. - __('Warning: If you set the URL manually, it may conflict with another page.'). - '

      '. - '
      '; - - if ($post_id) - { - echo - '

      '.__('Attachments').'

      '; - foreach ($post_media as $f) - { - $ftitle = $f->media_title; - if (strlen($ftitle) > 18) { - $ftitle = substr($ftitle,0,16).'...'; - } - echo - '
      '. - ''. - ''. - ''. - '
      '; - } - unset($f); - - if (empty($post_media)) { - echo '

      '.__('No attachment.').'

      '; - } - echo '

      '.__('Add files to this page').'

      '; - } - - # --BEHAVIOR-- adminPageFormSidebar - $core->callBehavior('adminPageFormSidebar',isset($post) ? $post : null); - - echo '
      '; // End #entry-sidebar - - echo '
      '; - echo '
      '; - - if ($post_id && !empty($post_media)) - { - echo - '
      '. - '
      '.form::hidden(array('post_id'),$post_id). - form::hidden(array('media_id'),''). - form::hidden(array('remove'),1). - $core->formNonce().'
      '; - } -} - - -/* Comments and trackbacks --------------------------------------------------------- */ -if ($post_id) -{ - $params = array('post_id' => $post_id, 'order' => 'comment_dt ASC'); - - $comments = $core->blog->getComments(array_merge($params,array('comment_trackback'=>0))); - $trackbacks = $core->blog->getComments(array_merge($params,array('comment_trackback'=>1))); - - # Actions combo box - $combo_action = array(); - if ($can_edit_page && $core->auth->check('publish,contentadmin',$core->blog->id)) - { - $combo_action[__('publish')] = 'publish'; - $combo_action[__('unpublish')] = 'unpublish'; - $combo_action[__('mark as pending')] = 'pending'; - $combo_action[__('mark as junk')] = 'junk'; - } - - if ($can_edit_page && $core->auth->check('delete,contentadmin',$core->blog->id)) - { - $combo_action[__('delete')] = 'delete'; - } - - $has_action = !empty($combo_action) && (!$trackbacks->isEmpty() || !$comments->isEmpty()); - - echo - '
      '; - - if ($has_action) { - echo '
      '; - } - - echo '

      '.__('Trackbacks').'

      '; - - if (!$trackbacks->isEmpty()) { - showComments($trackbacks,$has_action); - } else { - echo '

      '.__('No trackback').'

      '; - } - - echo '

      '.__('Comments').'

      '; - if (!$comments->isEmpty()) { - showComments($comments,$has_action); - } else { - echo '

      '.__('No comment').'

      '; - } - - if ($has_action) { - echo - '
      '. - '

      '. - - '

      '. - form::combo('action',$combo_action). - form::hidden('redir',html::escapeURL($redir_url).'&id='.$post_id.'&co=1'). - $core->formNonce(). - '

      '. - '
      '. - '
      '; - } - - echo '
      '; -} - -/* Add a comment --------------------------------------------------------- */ -if ($post_id) -{ - echo - '
      '. - '

      '.__('Add a comment').'

      '. - - '
      '. - '
      '. - '

      '. - - '

      '. - - '

      '. - - '

      '. - form::textarea('comment_content',50,8,html::escapeHTML('')). - '

      '. - - '

      '.form::hidden('post_id',$post_id). - $core->formNonce(). - '

      '. - '
      '. - '
      '. - '
      '; -} - - -# Show comments or trackbacks -function showComments($rs,$has_action) -{ - echo - ''. - ''. - ''. - ''. - ''. - ''. - ''; - - while($rs->fetch()) - { - $comment_url = 'comment.php?id='.$rs->comment_id; - - $img = '%1$s'; - switch ($rs->comment_status) { - case 1: - $img_status = sprintf($img,__('published'),'check-on.png'); - break; - case 0: - $img_status = sprintf($img,__('unpublished'),'check-off.png'); - break; - case -1: - $img_status = sprintf($img,__('pending'),'check-wrn.png'); - break; - case -2: - $img_status = sprintf($img,__('junk'),'junk.png'); - break; - } - - echo - ''. - - ''. - ''. - ''. - ''. - ''. - ''. - - ''; - } - - echo '
      '.__('Author').''.__('Date').''.__('IP address').''.__('Status').' 
      '. - ($has_action ? form::checkbox(array('comments[]'),$rs->comment_id,'','','',0,'title="'.__('select this comment').'"') : '').''.$rs->comment_author.''.dt::dt2str(__('%Y-%m-%d %H:%M'),$rs->comment_dt).''.$rs->comment_ip.''.$img_status.''. - '
      '; -} -dcPage::helpBlock('page'); -?> - - \ No newline at end of file diff --git a/v2/dotclear/plugins/pings/_admin.php b/v2/dotclear/plugins/pings/_admin.php deleted file mode 100644 index 86ea58c..0000000 --- a/v2/dotclear/plugins/pings/_admin.php +++ /dev/null @@ -1,47 +0,0 @@ -addItem(__('Pings'),'plugin.php?p=pings','index.php?pf=pings/icon.png', - preg_match('/plugin.php\?p=pings/',$_SERVER['REQUEST_URI']), - $core->auth->isSuperAdmin()); - -$__autoload['pingsAPI'] = dirname(__FILE__).'/lib.pings.php'; -$__autoload['pingsBehaviors'] = dirname(__FILE__).'/lib.pings.php'; - -# Create settings if they don't exist -if (!array_key_exists('pings',$core->blog->settings->dumpNamespaces())) -{ - $default_pings_uris = array( - 'Ping-o-Matic!' => 'http://rpc.pingomatic.com/', - 'Google Blog Search' => 'http://blogsearch.google.com/ping/RPC2' - ); - - $core->blog->settings->addNamespace('pings'); - $core->blog->settings->pings->put('pings_active',1,'boolean','Activate pings plugin',true,true); - $core->blog->settings->pings->put('pings_uris',serialize($default_pings_uris),'string','Pings services URIs',true,true); -} - -$core->addBehavior('adminPostHeaders',array('pingsBehaviors','pingJS')); -$core->addBehavior('adminPostFormSidebar',array('pingsBehaviors','pingsForm')); -$core->addBehavior('adminAfterPostCreate',array('pingsBehaviors','doPings')); -$core->addBehavior('adminAfterPostUpdate',array('pingsBehaviors','doPings')); - -$core->addBehavior('adminDashboardFavs','pingDashboardFavs'); - -function pingDashboardFavs($core,$favs) -{ - $favs['pings'] = new ArrayObject(array('pings','Pings','plugin.php?p=pings', - 'index.php?pf=pings/icon.png','index.php?pf=pings/icon-big.png', - null,null,null)); -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/pings/_define.php b/v2/dotclear/plugins/pings/_define.php deleted file mode 100644 index 8e7a8a9..0000000 --- a/v2/dotclear/plugins/pings/_define.php +++ /dev/null @@ -1,23 +0,0 @@ -registerModule( - /* Name */ "Pings", - /* Description*/ "Ping services", - /* Author */ "Olivier Meunier", - /* Version */ '1.1', - array( - 'permissions' => 'usage,contentadmin' - ) -); -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/pings/icon-big.png b/v2/dotclear/plugins/pings/icon-big.png deleted file mode 100644 index 19dd23f9684d4910a558c6df23f568c4b4559b0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5223 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 diff --git a/v2/dotclear/plugins/pings/icon.png b/v2/dotclear/plugins/pings/icon.png deleted file mode 100644 index 4324dd541cf77d3ceb252bec51f9e34b208a4030..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1370 zcmbVMZA{#B9PWV(g5nS+3W3mckr~5X-?%%jazK0S!J)_C?${7FLb(>M9Cz*7vO6Ho zNgPVh7<36jf^XT}hhxFzdg_M zd;PbkstJRthVhD=B2nM5=5w#LHMj!~d{y>^FnQJ0E zv~%5-wz5M3Rh0-Bjzl7+2yPPPW*D{EY`O-988w7aX%DMx)EHK_#}sH@@ymjw3St=4 z71>6yO|?Usr)wdEB)5A*IIOHEN=q3WWhEFjA#f<9$F+)9R1g2J8=ImPU%SM^9$pdK zWWQFArtLAZmb-f!(t(;c#7Y#83aXb zPMjvm0tPoboz4P`ifL@hwK%LeZF5k#g+w)WAy!B-3}r*jq=lg!c#P``D=HiI^D(=E zZg-7K-IGf=WS&(;*(Zvvu@0yTh^nXrLb}??*t%m@>@QRBjebFBdzka@Ayfk&9`Rjux{wA2=hMVcp>5=)V-l~t= zQxcwCGITMIC);nQe$qSI#TFlrVpB=d(QVQ< z`-6|=1*S#=JK4~ZxZK%yr`K|O@b?}ljp!emXr3MT;6mNjW21&s^E1Ic`*N<%9{5zc2(=TSx6>pqd03W{GUVkICye7?t zi8*6e^Gc6;ey%&QD_wavE&o9J>4rzUy+4}551no4tIhcQwFP5B0dR4cm8{^E4Bx;+ z=`~O0%V}{_(yNcW!)6=q@9eu#8karsLSg>Nvt{E&)pmolw|_@!#d{aV&)qEj>Zx0$ z09TXTGxz<0ys627L*FRq?blog->settings->pings->pings_uris); - if (!$pings_uris) { - $pings_uris = array(); - } - - if (isset($_POST['pings_srv_name'])) - { - $pings_srv_name = is_array($_POST['pings_srv_name']) ? $_POST['pings_srv_name'] : array(); - $pings_srv_uri = is_array($_POST['pings_srv_uri']) ? $_POST['pings_srv_uri'] : array(); - $pings_uris = array(); - - foreach ($pings_srv_name as $k => $v) { - if (trim($v) && trim($pings_srv_uri[$k])) { - $pings_uris[trim($v)] = trim($pings_srv_uri[$k]); - } - } - - $core->blog->settings->addNamespace('pings'); - $core->blog->settings->pings->put('pings_active',!empty($_POST['pings_active']),null,null,true,true); - $core->blog->settings->pings->put('pings_uris',serialize($pings_uris),null,null,true,true); - http::redirect($p_url.'&up=1'); - } -} -catch (Exception $e) -{ - $core->error->add($e->getMessage()); -} -?> - - - <?php echo __('Pings'); ?> - - - -'.__('Pings configuration').''; - -if (!empty($_GET['up'])) { - echo '

      '.__('Settings have been successfully updated.').'

      '; -} - -echo -'
      '. -'

      '; - -$i = 0; -foreach ($pings_uris as $n => $u) -{ - echo - '

      '. - ''; - - if (!empty($_GET['test'])) - { - try { - pingsAPI::doPings($u,'Example site','http://example.com'); - echo ' ok'; - } catch (Exception $e) { - echo ' '.__('error').' '.$e->getMessage(); - } - } - - echo '

      '; - $i++; -} - -echo -'

      '. -''. -'

      '. - -'

      '. -$core->formNonce().'

      '. -'
      '; - -echo '

      '.__('Test ping services').'

      '; -?> - - \ No newline at end of file diff --git a/v2/dotclear/plugins/pings/lib.pings.php b/v2/dotclear/plugins/pings/lib.pings.php deleted file mode 100644 index 7b3cbdb..0000000 --- a/v2/dotclear/plugins/pings/lib.pings.php +++ /dev/null @@ -1,99 +0,0 @@ -timeout = 3; - - $rsp = $o->query('weblogUpdates.ping',$site_name,$site_url); - - if (isset($rsp['flerror']) && $rsp['flerror']) { - throw new Exception($rsp['message']); - } - - return true; - } -} - -class pingsBehaviors -{ - public static function pingJS() - { - $res = - "\n".dcPage::jsLoad('index.php?pf=pings/post.js'); - - return $res; - } - - public static function pingsForm($post) - { - $core =& $GLOBALS['core']; - if (!$core->blog->settings->pings->pings_active) { - return; - } - - $pings_uris = @unserialize($core->blog->settings->pings->pings_uris); - if (empty($pings_uris) || !is_array($pings_uris)) { - return; - } - - if (!empty($_POST['pings_do']) && is_array($_POST['pings_do'])) { - $pings_do = $_POST['pings_do']; - } else { - $pings_do = array(); - } - - echo '

      '.__('Pings:').'

      '; - $i = 0; - foreach ($pings_uris as $k => $v) - { - echo - '

      '; - $i++; - } - } - - public static function doPings($cur,$post_id) - { - if (empty($_POST['pings_do']) || !is_array($_POST['pings_do'])) { - return; - } - - $core =& $GLOBALS['core']; - if (!$core->blog->settings->pings->pings_active) { - return; - } - - $pings_uris = @unserialize($core->blog->settings->pings->pings_uris); - if (empty($pings_uris) || !is_array($pings_uris)) { - return; - } - - foreach ($_POST['pings_do'] as $uri) - { - if (in_array($uri,$pings_uris)) { - try { - pingsAPI::doPings($uri,$core->blog->name,$core->blog->url); - } catch (Exception $e) {} - } - } - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/pings/post.js b/v2/dotclear/plugins/pings/post.js deleted file mode 100644 index 8be054a..0000000 --- a/v2/dotclear/plugins/pings/post.js +++ /dev/null @@ -1,3 +0,0 @@ - -$(function(){$('#edit-entry').onetabload(function(){if($('p.ping-services').length>0){p=$('

      ');p.addClass('ping-services');a=$('');a.text(dotclear.msg.check_all);a.click(function(){$('p.ping-services input[type="checkbox"]').attr('checked','checked');return false;});$('p.ping-services:last').after(p.append(a));} -$('h3.ping-services').toggleWithLegend($('p.ping-services'),{cookie:'dcx_ping_services'});});}); \ No newline at end of file diff --git a/v2/dotclear/plugins/simpleMenu/_admin.php b/v2/dotclear/plugins/simpleMenu/_admin.php deleted file mode 100644 index f838125..0000000 --- a/v2/dotclear/plugins/simpleMenu/_admin.php +++ /dev/null @@ -1,32 +0,0 @@ -addBehavior('adminDashboardIcons','simpleMenu_dashboard'); -$core->addBehavior('adminDashboardFavs','simpleMenu_dashboard_favs'); -function simpleMenu_dashboard($core,$icons) -{ - $icons['simpleMenu'] = new ArrayObject(array(__('Simple menu'),'plugin.php?p=simpleMenu','index.php?pf=simpleMenu/icon.png')); -} -function simpleMenu_dashboard_favs($core,$favs) -{ - $favs['simpleMenu'] = new ArrayObject(array('simpleMenu','Simple menu','plugin.php?p=simpleMenu', - 'index.php?pf=simpleMenu/icon-small.png','index.php?pf=simpleMenu/icon.png', - 'usage,contentadmin',null,null)); -} - -$_menu['Plugins']->addItem(__('Simple menu'),'plugin.php?p=simpleMenu','index.php?pf=simpleMenu/icon-small.png', - preg_match('/plugin.php\?p=simpleMenu(&.*)?$/',$_SERVER['REQUEST_URI']), - $core->auth->check('usage,contentadmin',$core->blog->id)); - -require dirname(__FILE__).'/_widgets.php'; -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/simpleMenu/_define.php b/v2/dotclear/plugins/simpleMenu/_define.php deleted file mode 100644 index c76d76d..0000000 --- a/v2/dotclear/plugins/simpleMenu/_define.php +++ /dev/null @@ -1,23 +0,0 @@ -registerModule( - /* Name */ "simpleMenu", - /* Description*/ "Simple menu for Dotclear", - /* Author */ "Franck Paul", - /* Version */ '1.0', - array( - 'permissions' => 'admin' - ) -); -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/simpleMenu/_install.php b/v2/dotclear/plugins/simpleMenu/_install.php deleted file mode 100644 index f6722e7..0000000 --- a/v2/dotclear/plugins/simpleMenu/_install.php +++ /dev/null @@ -1,29 +0,0 @@ -plugins->moduleInfo('simpleMenu','version'); -if (version_compare($core->getVersion('simpleMenu'),$version,'>=')) { - return; -} - -# Menu par défaut -$blog_url = html::stripHostURL($core->blog->url); -$menu_default = array( - array('label' => 'Home', 'descr' => 'Recent posts', 'url' => $blog_url), - array('label' => 'Archives', 'descr' => '', 'url' => $blog_url.$core->url->getURLFor('archive')) -); -$core->blog->settings->system->put('simpleMenu',serialize($menu_default),'string','simpleMenu default menu',false,true); - -$core->setVersion('simpleMenu',$version); -return true; -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/simpleMenu/_public.php b/v2/dotclear/plugins/simpleMenu/_public.php deleted file mode 100644 index 5737447..0000000 --- a/v2/dotclear/plugins/simpleMenu/_public.php +++ /dev/null @@ -1,116 +0,0 @@ -tpl->addValue('SimpleMenu',array('tplSimpleMenu','simpleMenu')); - -class tplSimpleMenu -{ - # Template function - public static function simpleMenu($attr) - { - $class = isset($attr['class']) ? trim($attr['class']) : ''; - $id = isset($attr['id']) ? trim($attr['id']) : ''; - $description = isset($attr['description']) ? trim($attr['description']) : ''; - - if (!preg_match('#^(title|span)$#',$description)) { - $description = ''; - } - - return ''; - } - - # Widget function - public static function simpleMenuWidget($w) - { - global $core, $_ctx; - - if ($w->homeonly && $core->url->type != 'default') { - return; - } - - $menu = tplSimpleMenu::displayMenu('','','title'); - if ($menu == '') { - return; - } - - return '
      '.($w->title ? '

      '.html::escapeHTML($w->title).'

      ' : '').$menu.'
      '; - } - - public static function displayMenu($class='',$id='',$description='') - { - $ret = ''; - - $menu = $GLOBALS['core']->blog->settings->system->get('simpleMenu'); - $menu = @unserialize($menu); - - if (is_array($menu)) - { - // Current relative URL - $url = $_SERVER['REQUEST_URI']; - $abs_url = http::getHost().$url; - - // Home recognition var - $home_url = html::stripHostURL($GLOBALS['core']->blog->url); - $home_directory = dirname($home_url); - if ($home_directory != '/') - $home_directory = $home_directory.'/'; - - // Menu items loop - foreach ($menu as $i => $m) { - # $href = lien de l'item de menu - $href = $m['url']; - $href = html::escapeHTML($href); - - # Active item test - $active = false; - if (($url == $href) || - ($abs_url == $href) || - ($_SERVER['URL_REQUEST_PART'] == $href) || - (($_SERVER['URL_REQUEST_PART'] == '') && (($href == $home_url) || ($href == $home_directory)))) { - $active = true; - } - $title = $span = ''; - if ($m['descr']) { - if ($description == 'title') { - $title = ' title="'.__($m['descr']).'"'; - } else { - $span = ' '.__($m['descr']).''; - } - } - $ret .= '
    • '. - ''.__($m['label']).$span.''. - '
    • '; - } - - // Final rendering - if ($ret) { - $ret = '
        '."\n".$ret."\n".'
      '; - } - } - - return $ret; - } -} - -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/simpleMenu/_widgets.php b/v2/dotclear/plugins/simpleMenu/_widgets.php deleted file mode 100644 index 72f9507..0000000 --- a/v2/dotclear/plugins/simpleMenu/_widgets.php +++ /dev/null @@ -1,25 +0,0 @@ -addBehavior('initWidgets',array('simpleMenuWidgets','initWidgets')); - -class simpleMenuWidgets -{ - public static function initWidgets($w) - { - $w->create('simplemenu',__('Simple menu'),array('tplSimpleMenu','simpleMenuWidget')); - $w->simplemenu->setting('title',__('Title:'),__('Menu')); - $w->simplemenu->setting('homeonly',__('Home page only'),1,'check'); - } -} -?> \ No newline at end of file diff --git a/v2/dotclear/plugins/simpleMenu/icon-small.png b/v2/dotclear/plugins/simpleMenu/icon-small.png deleted file mode 100644 index aea1775ddc5fba30fb4e08ccef3681c33058e1bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1328 zcmbVMZA{!`9Pf<`aNz>UVm8P!O3`E(xwhAPYjZbt*Ivg>4$k8YOii}l^*LzZ+FM(^ z0})U*P=eVD%Um3Z@x!7YrfeGbVJ4CZW?AC&gD*IZF6tDgWFSOQV4P3k4*fv(!6xnV z_WS+*uTNhJ)$ccNE8B)3h&fQph2dCYyoLGjTfUGH;83djoApK|uBQYQAYM_40yK~i zT0j^GV&{?Tz>Oezq7-S?n}c;sOi5S-17k@il8}uc?wWK`h_wM7je-_Q_F%K`k7KAL zdax#YkO(GO&??n-si3i|J`(F{i_s!hvln%z87Pndx`3t=?Xt$CJ=mHq1Lwvzj-hK1 zz0HHIJJlQvp{$|;)NUcFV}yf19i)Y%Y)+^1QPfJ11Ws6S(ppVA8Oq8K1e$#?XiXL4 zOqk=dw&2Qxwd#73!SPfoWl2#MMQy=Jnx+j6tF;;;sS(GC}DXGs#WU49quqkRt6>Gko1gUWFOvZf1i4CL%e z&~BFNyf2qwRUqh!8c~$?TnB_&6$cXK0kTmC4uH!7I-X{I=zHP*5-!e)`v) zm5oD}4v3RW_YTb;eBg~6!xwfvwRi099H_X>u}_o|=7l|#r+b!OzB*WOLB)qmZm-{y z>Fr7NJz^S}R%)((zvWN!YfY*AcTn4ohLfjH=?_kep}cSAf2d-Q{frOnKfas%_{l5B zP98>k4o;n0a9@0L;pW)vC+G*4OZv&WddJY6vKQmgmai6*tK+*yFU^7H4$-4|McmHM z0@v!db2ZCRneNX&EX{YuyHoLo%*E9& z#uiP#oSGS)IXZ&vsftY$6z^W?UA+5kW_fWobNn%LAw`A?=gQ`OyjDCg~i4{Ea0!_-u4}S;UBQ-)=2;W diff --git a/v2/dotclear/plugins/simpleMenu/icon.png b/v2/dotclear/plugins/simpleMenu/icon.png deleted file mode 100644 index 07f5de7afcc97d73e3e94fb0c2e3dbca30390e49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2188 zcmbVOX;2es8t#A~hYXGjf~Z3qYGGE%(SZ<%#1PU!ZaL*}$r6$VT1Yx14TMWj3-Dl6 zhAEK4tth&qponHbK?D)GSHNQ(v{Zye5eH;;R^*z2?Wj2W!*Z*(tGeIs`}%#J_wMS0 z0sh-fjI4|R05I|Lgo6m_ro9dHiDwm>^pp_ma6vd8jK$)qA_W5QBv=drdPzlbNDv~D zq$PDDt^lAbK|{jva6ezR7?V;(S{clsN}FW{ z7*UE9s2oQz8K`9x#bC)ehfH|-J_M=U&+j9#O!*;EM9OF?k(>rm=`^WS8`nE+B_4$Q z?#3szl_6bDsSTx}bJ~m`{?=A-aaAHYM$^yO6i0vi{561yN_C8mWgn9yBIBcMtp45H5@E zJz6}1@9AGinwoCfzDsXDHvV{L6Mg1bQEx_*wURqiG1V{=3sxxOV~f}oW!He~Z&k!5s5@sTn8^z`%^ zC%#dIw`~zm5Mk`*ZUB=D)mhCEj?X;5Hj7MkFGj{PHNe0`;9p7(Cv=vb)wvy{=MPq_^2WCx#z}hN<^K;Qf(%(nLa&TRaF7MmN$2Qj3ihm7y z;U=%kEbSaC9V%dJvv!?!+peQubp+eQ zE!;me1#~%2H0GWf&D}h#`6py|USFyAG;KJpdZ|+Q9LpvF>jB-7llJ*GUwrd4h*a~8 z)|s`I1emWvZ#HGDbRZRw!)I&GHGY4ibbSY!*bHBZ!$l>%^e*0z#UtZCRm|eKOEeEl z(nR6gj6ywjda1oAe}Sv=YZQh7XKNRrd^`3`&z*)0v!DfuLDi1QgNJ-f>rQi5w$LI6 zlH;%I2lPlO=dYd1TT$hecy)XJk;2l(FjB=Wp?}Ajm)^y##*m?z-qv72x3q3(Fxc;M zj)ksJuw?qOZGWfd$=Aqg^J&=8{=|3CrHNd`k<4qaDm-lY>TX`)p6BgpT@pr4HScoK zqsqi3lEgDK>1JW)V8_J8@Vd|fOS|B%6B6|vZ z=e|7`$bowQUcYNF_*fJt5)NzdNw4**@!ovPMhb3eJs_Axh6Fb>k?a#MCMPHR4qyd2 zXO3K}nR(JZq<1(XpuPt?nsTC{zWS~1SLJ>9jOmu@fZCpD9qXHIQARmd)W&Yn$;+?K z@4M8qN+r~{i|ZJwoi^bF=0~j?zq5Jh^%LtX`Q2&vqOu*FmY7kuVzYwP$`MVU<_bqo zj>cwMmeYhXj@f|~r!k)iom%%-CC30-elk0%HD8A@i+NL$Ui=5c;0WO zO0?M8f4gbv$2rannzZJ(D4KA->L@TPqtxEp>OQj7T_*blog->url); - -# Liste des catégories -$categories_combo = array(); -$categories_label = array(); -try { - $rs = $core->blog->getCategories(array('post_type'=>'post')); - while ($rs->fetch()) { - $categories_combo[] = new formSelectOption( - str_repeat('  ',$rs->level-1).($rs->level-1 == 0 ? '' : '• ').html::escapeHTML($rs->cat_title), - $rs->cat_url - ); - $categories_label[$rs->cat_url] = html::escapeHTML($rs->cat_title); - } -} catch (Exception $e) { } - -# Liste des langues utilisées -$langs_combo = array(); -try { - $rs = $core->blog->getLangs(array('order'=>'asc')); - if ($rs->count() > 1) - { - $all_langs = l10n::getISOcodes(0,1); - while ($rs->fetch()) { - $lang_name = isset($all_langs[$rs->post_lang]) ? $all_langs[$rs->post_lang] : $rs->post_lang; - $langs_combo[$lang_name] = $rs->post_lang; - } - unset($all_langs); - } - unset($rs); -} catch (Exception $e) { } - -# Liste des mois d'archive -$months_combo = array(); -try { - $rs = $core->blog->getDates(array('type'=>'month')); - $months_combo[__('All months')] = '-'; - $first_year = $last_year = 0; - while ($rs->fetch()) { - $months_combo[dt::str('%B %Y',$rs->ts())] = $rs->year().$rs->month(); - if (($first_year == 0) || ($rs->year() < $first_year)) $first_year = $rs->year(); - if (($last_year == 0) || ($rs->year() > $last_year)) $last_year = $rs->year(); - } - unset($rs); -} catch (Exception $e) { } - -# Liste des pages -- Doit être pris en charge plus tard par le plugin ? -$pages_combo = array(); -try { - $rs = $core->blog->getPosts(array('post_type'=>'page')); - while ($rs->fetch()) { - $pages_combo[$rs->post_title] = $rs->getURL(); - } - unset($rs); -} catch (Exception $e) { } - -# Liste des tags -- Doit être pris en charge plus tard par le plugin ? -$tags_combo = array(); -try { - $rs = $core->meta->getMetadata(array('meta_type' => 'tag')); - $tags_combo[__('All tags')] = '-'; - while ($rs->fetch()) { - $tags_combo[$rs->meta_id] = $rs->meta_id; - } - unset($rs); -} catch (Exception $e) { } - -# Liste des types d'item de menu -$items = new ArrayObject(); -$items['home'] = new ArrayObject(array(__('Home'),false)); - -if (count($langs_combo) > 1) { - $items['lang'] = new ArrayObject(array(__('Language'),true)); -} -if (count($categories_combo)) { - $items['category'] = new ArrayObject(array(__('Category'),true)); -} -if (count($months_combo) > 1) { - $items['archive'] = new ArrayObject(array(__('Archive'),true)); -} -if ($core->plugins->moduleExists('pages')) { - if(count($pages_combo)) - $items['pages'] = new ArrayObject(array(__('Page'),true)); -} -if ($core->plugins->moduleExists('tags')) { - if (count($tags_combo) > 1) - $items['tags'] = new ArrayObject(array(__('Tags'),true)); -} - -# --BEHAVIOR-- adminSimpleMenuAddType -# Should add an item to $items[] as an array(